diff options
-rw-r--r-- | Changelog-Trunk.txt | 8 | ||||
-rw-r--r-- | conf/maps_athena.conf | 18 | ||||
-rw-r--r-- | db/map_cache.dat | bin | 1940566 -> 1952236 bytes | |||
-rw-r--r-- | db/map_index.txt | 10 | ||||
-rw-r--r-- | db/mob_skill_db.txt | 2 | ||||
-rw-r--r-- | db/packet_db.txt | 1 | ||||
-rw-r--r-- | src/map/atcommand.c | 8 | ||||
-rw-r--r-- | src/map/atcommand.h | 2 | ||||
-rw-r--r-- | src/map/clif.c | 5 | ||||
-rw-r--r-- | src/map/map.c | 26 | ||||
-rw-r--r-- | src/map/map.h | 3 | ||||
-rw-r--r-- | src/map/pc.c | 52 | ||||
-rw-r--r-- | src/map/pc.h | 2 | ||||
-rw-r--r-- | src/map/script.c | 2 |
14 files changed, 120 insertions, 19 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 75c1300ca..a8cbfccdf 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -1,5 +1,13 @@ Date Added +2011/05/13 + * Random accumulated bits and pieces. [Ai4rei] + - Added checks/warnings to pc_paycash and pc_getcash (follow up to r12264). + - Added missing packet_db.txt and packet length table entries for packet 0x0859 (follow up to r14799). + - Added set of map_id2xx wrappers for map_id2bl for most common map objects, which return NULL when the bl-type is not the expected one (also updated map_id2nd to behave this way). + - Fixed missing ',' in mob_skill_db.txt example (follow up to r14270). + - Updated mapcache with recent maps (up to que_lhz). + - Functions 'msg_txt' and 'job_name' now return a const pointer. 2011/05/08 * Script command 'query_logsql' now throws a warning when SQL logs are disabled (related r11892). [Ai4rei] * Updated/revised description of instance-related script commands (bugreport:4880). [Ai4rei] diff --git a/conf/maps_athena.conf b/conf/maps_athena.conf index 514a642a7..384802628 100644 --- a/conf/maps_athena.conf +++ b/conf/maps_athena.conf @@ -679,6 +679,10 @@ map: tha_t12 map: auction_01 map: auction_02 +// ??? +// -- 2005-12-06gdata_k.gpf +alde_tt03 + // --- Garden City Hugel / Kiehl --- // -- 2005-12-20sdata_k.gpf -- map: hugel @@ -989,6 +993,20 @@ map: iz_dun05 // -- 2010-12-01data_x.gpf map: evt_mobroom +// ??? +map: dic_dun03 +//map: mjolnir_04_1 +//map: evt_swar_b +//map: evt_swar_r +//map: evt_swar_s +//map: evt_swar_t + +// Lighthalzen Dungeon F4, Wolfchev's Laboratory +// -- 2011-03-16rdata_x.gpf +map: 1@lhz +map: lhz_dun04 +map: que_lhz + //------------------------- Clone Maps --------------------------- //------------------------- Extra Maps --------------------------- diff --git a/db/map_cache.dat b/db/map_cache.dat Binary files differindex de5e23957..6f034c6c7 100644 --- a/db/map_cache.dat +++ b/db/map_cache.dat diff --git a/db/map_index.txt b/db/map_index.txt index d120516e9..f30553b19 100644 --- a/db/map_index.txt +++ b/db/map_index.txt @@ -810,6 +810,16 @@ mal_dun01 1@cash iz_dun05 evt_mobroom +alde_tt03 +dic_dun03 +//mjolnir_04_1 +//evt_swar_b +//evt_swar_r +//evt_swar_s +//evt_swar_t +1@lhz +lhz_dun04 +que_lhz // Only add maps under this line if they are not standard maps! diff --git a/db/mob_skill_db.txt b/db/mob_skill_db.txt index 81de7614f..6bba81d28 100644 --- a/db/mob_skill_db.txt +++ b/db/mob_skill_db.txt @@ -2,7 +2,7 @@ // //MOB_ID,dummy value (info only),STATE,SKILL_ID,SKILL_LV,rate (10000 = 100%),casttime,delay,cancelable,target,condition type,condition value,val1,val2,val3,val4,val5,emotion,chat //Example -//1001,Poring@TF_POISON,attack,52,3,100,1500,10000,no,target,always,0,,,,,7 +//1001,Poring@TF_POISON,attack,52,3,100,1500,10000,no,target,always,0,,,,,7, // //rate refers to the chance of the skill being casted when the condition is fulfilled. //delay is the time in milliseconds that has to be pass before recasting the same skill. diff --git a/db/packet_db.txt b/db/packet_db.txt index dc5b72346..f00c6d08e 100644 --- a/db/packet_db.txt +++ b/db/packet_db.txt @@ -1603,6 +1603,7 @@ packet_ver: 26 0x0856,-1 0x0857,-1 0x0858,-1 +0x0859,-1 //Add new packets here //packet_ver: 27 diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 80f0c84f3..459a6a734 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -89,7 +89,7 @@ int lowtohigh_compare (const void * a, const void * b) //----------------------------------------------------------- // Return the message string of the specified number by [Yor] //----------------------------------------------------------- -char* msg_txt(int msg_number) +const char* msg_txt(int msg_number) { if (msg_number >= 0 && msg_number < MAX_MSG && msg_table[msg_number] != NULL && msg_table[msg_number][0] != '\0') @@ -5753,7 +5753,7 @@ ACMD_FUNC(skilltree) struct map_session_data *pl_sd = NULL; int skillnum; int meets, j, c=0; - char target[NAME_LENGTH], *tbl; + char target[NAME_LENGTH]; struct skill_tree_entry *ent; nullpo_retr(-1, sd); @@ -5771,9 +5771,7 @@ ACMD_FUNC(skilltree) c = pc_calc_skilltree_normalize_job(pl_sd); c = pc_mapid2jobid(c, pl_sd->status.sex); - tbl = job_name(c); - - sprintf(atcmd_output, "Player is using %s skill tree (%d basic points)", tbl, pc_checkskill(pl_sd, 1)); + sprintf(atcmd_output, "Player is using %s skill tree (%d basic points)", job_name(c), pc_checkskill(pl_sd, 1)); clif_displaymessage(fd, atcmd_output); ARR_FIND( 0, MAX_SKILL_TREE, j, skill_tree[c][j].id == 0 || skill_tree[c][j].id == skillnum ); diff --git a/src/map/atcommand.h b/src/map/atcommand.h index 37ce87ca3..5456bc348 100644 --- a/src/map/atcommand.h +++ b/src/map/atcommand.h @@ -41,7 +41,7 @@ int atcommand_killmonster(const int fd, struct map_session_data* sd, const char* #define MAX_MSG 1000 extern char* msg_table[MAX_MSG]; -char* msg_txt(int msg_number); +const char* msg_txt(int msg_number); int msg_config_read(const char* cfgName); void do_final_msg(void); diff --git a/src/map/clif.c b/src/map/clif.c index a1b617b83..eeb9f7532 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -9692,7 +9692,8 @@ void clif_parse_ChatLeave(int fd, struct map_session_data* sd) //0: static void clif_noask_sub(struct map_session_data *src, struct map_session_data *target, int type) { - char *msg, output[256]; + const char* msg; + char output[256]; // Your request has been rejected by autoreject option. msg = msg_txt(392); clif_disp_onlyself(src, msg, strlen(msg)); @@ -15029,7 +15030,7 @@ static int packetdb_readdb(void) 0, 0, 0, 0, 0, -1, -1, 3, 2, 66, 5, 2, 12, 6, 0, 0, //#0x0840 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; diff --git a/src/map/map.c b/src/map/map.c index 12c805ef3..762cf1446 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -1659,8 +1659,30 @@ struct mob_data * map_id2md(int id) struct npc_data * map_id2nd(int id) {// just a id2bl lookup because there's no npc_db - if (id <= 0) return NULL; - return (struct npc_data*)map_id2bl(id); + struct block_list* bl = map_id2bl(id); + + return BL_CAST(BL_NPC, bl); +} + +struct homun_data* map_id2hd(int id) +{ + struct block_list* bl = map_id2bl(id); + + return BL_CAST(BL_HOM, bl); +} + +struct mercenary_data* map_id2mc(int id) +{ + struct block_list* bl = map_id2bl(id); + + return BL_CAST(BL_MER, bl); +} + +struct chat_data* map_id2cd(int id) +{ + struct block_list* bl = map_id2bl(id); + + return BL_CAST(BL_CHAT, bl); } /// Returns the nick of the target charid or NULL if unknown (requests the nick to the char server). diff --git a/src/map/map.h b/src/map/map.h index 8e0c11a03..456384360 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -584,6 +584,9 @@ struct map_session_data* map_charid2sd(int charid); struct map_session_data * map_id2sd(int id); struct mob_data * map_id2md(int id); struct npc_data * map_id2nd(int id); +struct homun_data* map_id2hd(int id); +struct mercenary_data* map_id2mc(int id); +struct chat_data* map_id2cd(int id); struct block_list * map_id2bl(int id); #define map_id2index(id) map[(id)].index diff --git a/src/map/pc.c b/src/map/pc.c index db42fdeca..4371b1276 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -3263,11 +3263,31 @@ int pc_payzeny(struct map_session_data *sd,int zeny) void pc_paycash(struct map_session_data *sd, int price, int points) { char output[128]; - int cash = price - points; + int cash; nullpo_retv(sd); - pc_setaccountreg(sd,"#CASHPOINTS",sd->cashPoints - cash); - pc_setaccountreg(sd,"#KAFRAPOINTS",sd->kafraPoints - points); + if( price < 0 || points < 0 ) + { + ShowError("pc_paycash: Paying negative points (price=%d, points=%d, account_id=%d, char_id=%d).\n", price, points, sd->status.account_id, sd->status.char_id); + return; + } + + if( points > price ) + { + ShowWarning("pc_paycash: More kafra points provided than needed (price=%d, points=%d, account_id=%d, char_id=%d).\n", price, points, sd->status.account_id, sd->status.char_id); + points = price; + } + + cash = price-points; + + if( sd->cashPoints < cash || sd->kafraPoints < points ) + { + ShowError("pc_paycash: Not enough points (cash=%d, kafra=%d) to cover the price (cash=%d, kafra=%d) (account_id=%d, char_id=%d).\n", sd->cashPoints, sd->kafraPoints, cash, points, sd->status.account_id, sd->status.char_id); + return; + } + + pc_setaccountreg(sd, "#CASHPOINTS", sd->cashPoints-cash); + pc_setaccountreg(sd, "#KAFRAPOINTS", sd->kafraPoints-points); if( battle_config.cashshop_show_points ) { @@ -3283,7 +3303,13 @@ void pc_getcash(struct map_session_data *sd, int cash, int points) if( cash > 0 ) { - pc_setaccountreg(sd,"#CASHPOINTS",sd->cashPoints + cash); + if( cash > MAX_ZENY-sd->cashPoints ) + { + ShowWarning("pc_getcash: Cash point overflow (cash=%d, have cash=%d, account_id=%d, char_id=%d).\n", cash, sd->cashPoints, sd->status.account_id, sd->status.char_id); + cash = MAX_ZENY-sd->cashPoints; + } + + pc_setaccountreg(sd, "#CASHPOINTS", sd->cashPoints+cash); if( battle_config.cashshop_show_points ) { @@ -3291,10 +3317,20 @@ void pc_getcash(struct map_session_data *sd, int cash, int points) clif_disp_onlyself(sd, output, strlen(output)); } } + else if( cash < 0 ) + { + ShowError("pc_getcash: Obtaining negative cash points (cash=%d, account_id=%d, char_id=%d).\n", cash, sd->status.account_id, sd->status.char_id); + } if( points > 0 ) { - pc_setaccountreg(sd,"#KAFRAPOINTS",sd->kafraPoints + points); + if( points > MAX_ZENY-sd->kafraPoints ) + { + ShowWarning("pc_getcash: Kafra point overflow (points=%d, have points=%d, account_id=%d, char_id=%d).\n", points, sd->kafraPoints, sd->status.account_id, sd->status.char_id); + points = MAX_ZENY-sd->kafraPoints; + } + + pc_setaccountreg(sd, "#KAFRAPOINTS", sd->kafraPoints+points); if( battle_config.cashshop_show_points ) { @@ -3302,6 +3338,10 @@ void pc_getcash(struct map_session_data *sd, int cash, int points) clif_disp_onlyself(sd, output, strlen(output)); } } + else if( points < 0 ) + { + ShowError("pc_getcash: Obtaining negative kafra points (points=%d, account_id=%d, char_id=%d).\n", points, sd->status.account_id, sd->status.char_id); + } } /*========================================== @@ -4608,7 +4648,7 @@ int pc_mapid2jobid(unsigned short class_, int sex) /*==================================================== * This function return the name of the job (by [Yor]) *----------------------------------------------------*/ -char* job_name(int class_) +const char* job_name(int class_) { switch (class_) { case JOB_NOVICE: diff --git a/src/map/pc.h b/src/map/pc.h index 0473df3a9..beae8a0a3 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -727,7 +727,7 @@ int pc_candrop(struct map_session_data *sd,struct item *item); int pc_jobid2mapid(unsigned short b_class); // Skotlex int pc_mapid2jobid(unsigned short class_, int sex); // Skotlex -char * job_name(int class_); +const char * job_name(int class_); struct skill_tree_entry { short id; diff --git a/src/map/script.c b/src/map/script.c index 6b1366f07..39daede0e 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -4780,7 +4780,7 @@ BUILDIN_FUNC(jobchange) BUILDIN_FUNC(jobname) { int class_=script_getnum(st,2); - script_pushconststr(st,job_name(class_)); + script_pushconststr(st, (char*)job_name(class_)); return 0; } |