From d6caec1c51b7b5a39e1e2d4cc96f14cb02066711 Mon Sep 17 00:00:00 2001 From: lighta Date: Tue, 7 Jan 2014 20:15:40 -0500 Subject: [PATCH] Various fixs Fix bugreport:8418 (possible mapcrash from custom instance script) Fix bugreport:8439 (pc_bonus_item_drop typos) thx to Baalberith Fix some errors detected by cppcheck upd install.sh (leftover of svn and wrong simlink) --- install.sh | 32 +++++++++++++++++++------ src/char/char.c | 6 ++--- src/char/int_guild.c | 4 +--- src/common/core.c | 12 ++++------ src/common/grfio.c | 4 ++-- src/common/malloc.c | 4 +--- src/common/socket.c | 6 ++--- src/map/atcommand.c | 6 ++--- src/map/chrif.c | 15 +++++------- src/map/clif.c | 14 +++++------ src/map/homunculus.c | 8 ++++--- src/map/log.c | 2 +- src/map/map.h | 2 ++ src/map/mercenary.c | 4 ++-- src/map/mob.c | 56 ++++++++++++++++++++++---------------------- src/map/pc.c | 10 ++++---- src/map/pc.h | 3 ++- src/map/skill.c | 50 +++++++++++++++++++-------------------- src/map/unit.c | 13 +++++----- src/map/vending.c | 2 +- tools/convert_sql.pl | 2 +- 21 files changed, 134 insertions(+), 121 deletions(-) diff --git a/install.sh b/install.sh index 592cc8743c..afb8fcb2ed 100755 --- a/install.sh +++ b/install.sh @@ -2,18 +2,36 @@ #source var/function . ./function.sh +#read -p "WARNING: This target is experimental. Press Ctrl+C to cancel or Enter to continue." readEnterKey + +# NOTE: This requires GNU getopt. On Mac OS X and FreeBSD, you have to install this +# separately; see below. +TEMP=`getopt -o d: -l destdir: -- "$@"` +if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi +# Note the quotes around `$TEMP': they are essential! +eval set -- "$TEMP" + +eval set -- "$TEMP" +while [ $# -gt 0 ] +do + case "$1" in + (-d | --destdir) PKG_PATH="$2"; shift;; + esac + shift +done + +echo "destdir = $PKG_PATH " check_inst_right check_files -read -p "WARNING: This target dis experimental. Press Ctrl+C to cancel or Enter to continue." readEnterKey mkdir -p $PKG_PATH/bin/ -mkdir -p $PKG_PATH/etc/$PKG/ -mkdir -p $PKG_PATH/var/$PKG/ +mkdir -p $PKG_PATH/etc/$PKG/conf +mkdir -p $PKG_PATH/var/$PKG/log #we copy all file into opt/ dir and treat dir like normal unix arborescence -rsync -r --exclude .svn db/ $PKG_PATH/var/$PKG/db -rsync -r --exclude .svn log/ $PKG_PATH/var/$PKG/log -rsync -r --exclude .svn conf/ $PKG_PATH/etc/$PKG/conf -rsync -r --exclude .svn npc/ $PKG_PATH/npc +cp -r db/ $PKG_PATH/var/$PKG/db +if [ -d log ]; then cp -r log/ $PKG_PATH/var/$PKG/log; fi +cp -r conf/ $PKG_PATH/etc/$PKG/conf +cp -r npc/ $PKG_PATH/npc cp athena-start $PKG_PATH/ mv *-server* $PKG_PATH/bin/ diff --git a/src/char/char.c b/src/char/char.c index ee1a9f0def..79eced8608 100644 --- a/src/char/char.c +++ b/src/char/char.c @@ -5350,7 +5350,7 @@ int char_lan_config_read(const char *lancfgName) if ((line[0] == '/' && line[1] == '/') || line[0] == '\n' || line[1] == '\n') continue; - if(sscanf(line,"%[^:]: %[^:]:%[^:]:%[^\r\n]", w1, w2, w3, w4) != 4) { + if(sscanf(line,"%63[^:]: %63[^:]:%63[^:]:%63[^\r\n]", w1, w2, w3, w4) != 4) { ShowWarning("Error syntax of configuration file %s in line %d.\n", lancfgName, line_num); continue; @@ -5398,7 +5398,7 @@ void sql_config_read(const char* cfgName) if(line[0] == '/' && line[1] == '/') continue; - if (sscanf(line, "%[^:]: %[^\r\n]", w1, w2) != 2) + if (sscanf(line, "%1023[^:]: %1023[^\r\n]", w1, w2) != 2) continue; if(!strcmpi(w1,"char_db")) @@ -5487,7 +5487,7 @@ int char_config_read(const char* cfgName) if (line[0] == '/' && line[1] == '/') continue; - if (sscanf(line, "%[^:]: %[^\r\n]", w1, w2) != 2) + if (sscanf(line, "%1023[^:]: %1023[^\r\n]", w1, w2) != 2) continue; remove_control_chars(w1); diff --git a/src/char/int_guild.c b/src/char/int_guild.c index 571a2e3d04..831231c923 100644 --- a/src/char/int_guild.c +++ b/src/char/int_guild.c @@ -227,12 +227,10 @@ int inter_guild_tosql(struct guild *g,int flag) if (flag&GS_MEMBER) { - struct guild_member *m; - strcat(t_info, " members"); // Update only needed players for(i=0;imax_member;i++){ - m = &g->member[i]; + struct guild_member *m = &g->member[i]; if (!m->modified) continue; if(m->account_id) { diff --git a/src/common/core.c b/src/common/core.c index 446a67d1de..92a6a475c2 100644 --- a/src/common/core.c +++ b/src/common/core.c @@ -268,7 +268,7 @@ const char *get_git_hash (void) { char line[64]; char *rev = malloc(sizeof(char) * 50); - if( fgets(line, sizeof(line), fp) && sscanf(line, "%s", rev) ) + if( fgets(line, sizeof(line), fp) && sscanf(line, "%40s", rev) ) snprintf(GitHash, sizeof(GitHash), "%s", rev); free(rev); @@ -370,12 +370,10 @@ int main (int argc, char **argv) do_init(argc,argv); - {// Main runtime cycle - int next; - while (runflag != CORE_ST_STOP) { - next = do_timer(gettick_nocache()); - do_sockets(next); - } + // Main runtime cycle + while (runflag != CORE_ST_STOP) { + int next = do_timer(gettick_nocache()); + do_sockets(next); } do_final(); diff --git a/src/common/grfio.c b/src/common/grfio.c index cc2f866f7e..9c7da86881 100644 --- a/src/common/grfio.c +++ b/src/common/grfio.c @@ -640,7 +640,7 @@ static bool grfio_parse_restable_row(const char* row) char local[256]; FILELIST* entry; - if( sscanf(row, "%[^#\r\n]#%[^#\r\n]#", w1, w2) != 2 ) + if( sscanf(row, "%255[^#\r\n]#%255[^#\r\n]#", w1, w2) != 2 ) return false; if( strstr(w2, ".gat") == NULL && strstr(w2, ".rsw") == NULL ) @@ -790,7 +790,7 @@ void grfio_init(const char* fname) if( line[0] == '/' && line[1] == '/' ) continue; // skip comments - if( sscanf(line, "%[^:]: %[^\r\n]", w1, w2) != 2 ) + if( sscanf(line, "%1023[^:]: %1023[^\r\n]", w1, w2) != 2 ) continue; // skip unrecognized lines // Entry table reading diff --git a/src/common/malloc.c b/src/common/malloc.c index 49d8e6b940..23580e9316 100644 --- a/src/common/malloc.c +++ b/src/common/malloc.c @@ -115,8 +115,6 @@ void aFree_(void *p, const char *file, int line, const char *func) // ShowMessage("%s:%d: in func %s: aFree %p\n",file,line,func,p); if (p) FREE(p, file, line, func); - - p = NULL; } @@ -447,13 +445,13 @@ void _mfree(void *ptr, const char *file, int line, const char *func ) /* Allocating blocks */ static struct block* block_malloc(unsigned short hash) { - int i; struct block *p; if(hash_unfill[0] != NULL) { /* Space for the block has already been secured */ p = hash_unfill[0]; hash_unfill[0] = hash_unfill[0]->unfill_next; } else { + int i; /* Newly allocated space for the block */ p = (struct block*)MALLOC(sizeof(struct block) * (BLOCK_ALLOC), __FILE__, __LINE__, __func__ ); if(p == NULL) { diff --git a/src/common/socket.c b/src/common/socket.c index 1b19097723..e6d4bec67c 100644 --- a/src/common/socket.c +++ b/src/common/socket.c @@ -1297,12 +1297,10 @@ int socket_getips(uint32* ips, int max) else { int pos; - struct ifreq* ir; - struct sockaddr_in* a; for( pos=0; pos < ic.ifc_len && num < max; ) { - ir = (struct ifreq*)(buf+pos); - a = (struct sockaddr_in*) &(ir->ifr_addr); + struct ifreq* ir = (struct ifreq*)(buf+pos); + struct sockaddr_in*a = (struct sockaddr_in*) &(ir->ifr_addr); if( a->sin_family == AF_INET ){ ad = ntohl(a->sin_addr.s_addr); if( ad != INADDR_LOOPBACK && ad != INADDR_ANY ) diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 3ae74c2d10..1d675fe4f0 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -433,7 +433,7 @@ ACMD_FUNC(where) nullpo_retr(-1, sd); memset(atcmd_player_name, '\0', sizeof atcmd_player_name); - if (!message || !*message || sscanf(message, "%23[^\n]", atcmd_player_name) < 1) { + if (!message || !*message || sscanf(message, "%23s[^\n]", atcmd_player_name) < 1) { clif_displaymessage(fd, msg_txt(sd,910)); // Please enter a player name (usage: @where ). return -1; } @@ -4373,12 +4373,12 @@ ACMD_FUNC(loadnpc) ACMD_FUNC(unloadnpc) { struct npc_data *nd; - char NPCname[NAME_LENGTH+1]; + char NPCname[NAME_LENGTH]; nullpo_retr(-1, sd); memset(NPCname, '\0', sizeof(NPCname)); - if (!message || !*message || sscanf(message, "%24[^\n]", NPCname) < 1) { + if (!message || !*message || sscanf(message, "%23[^\n]", NPCname) < 1) { clif_displaymessage(fd, msg_txt(sd,1133)); // Please enter a NPC name (usage: @unloadnpc ). return -1; } diff --git a/src/map/chrif.c b/src/map/chrif.c index 0e2da61aa8..08faaf9213 100644 --- a/src/map/chrif.c +++ b/src/map/chrif.c @@ -727,9 +727,9 @@ void chrif_authfail(int fd) {/* HELLO WORLD. ip in RFIFOL 15 is not being used ( */ int auth_db_cleanup_sub(DBKey key, DBData *data, va_list ap) { struct auth_node *node = db_data2ptr(data); - const char* states[] = { "Login", "Logout", "Map change" }; - + if(DIFF_TICK(gettick(),node->node_created)>60000) { + const char* states[] = { "Login", "Logout", "Map change" }; switch (node->state) { case ST_LOGOUT: //Re-save attempt (->sd should never be null here). @@ -1335,7 +1335,6 @@ int chrif_load_scdata(int fd) { #ifdef ENABLE_SC_SAVING struct map_session_data *sd; - struct status_change_data *data; int aid, cid, i, count; aid = RFIFOL(fd,4); //Player Account ID @@ -1356,7 +1355,7 @@ int chrif_load_scdata(int fd) { count = RFIFOW(fd,12); //sc_count for (i = 0; i < count; i++) { - data = (struct status_change_data*)RFIFOP(fd,14 + i*sizeof(struct status_change_data)); + struct status_change_data *data = (struct status_change_data*)RFIFOP(fd,14 + i*sizeof(struct status_change_data)); status_change_start(NULL,&sd->bl, (sc_type)data->type, 10000, data->val1, data->val2, data->val3, data->val4, data->tick, 1|2|4|8); } #endif @@ -1367,13 +1366,11 @@ int chrif_load_scdata(int fd) { int chrif_skillcooldown_load(int fd) { struct map_session_data *sd; - struct skill_cooldown_data *data; int aid, cid, i, count; aid = RFIFOL(fd, 4); cid = RFIFOL(fd, 8); - sd = map_id2sd(aid); if (!sd) { ShowError("chrif_skillcooldown_load: Player of AID %d not found!\n", aid); @@ -1385,7 +1382,7 @@ int chrif_skillcooldown_load(int fd) { } count = RFIFOW(fd, 12); //sc_count for (i = 0; i < count; i++) { - data = (struct skill_cooldown_data*) RFIFOP(fd, 14 + i * sizeof (struct skill_cooldown_data)); + struct skill_cooldown_data *data = (struct skill_cooldown_data*) RFIFOP(fd, 14 + i * sizeof (struct skill_cooldown_data)); skill_blockpc_start(sd, data->skill_id, data->tick); } return 0; @@ -1565,7 +1562,7 @@ void chrif_parse_ack_vipActive(int fd) { * *------------------------------------------*/ int chrif_parse(int fd) { - int packet_len, cmd; + int packet_len; // only process data from the char-server if ( fd != char_fd ) { @@ -1590,7 +1587,7 @@ int chrif_parse(int fd) { } while ( RFIFOREST(fd) >= 2 ) { - cmd = RFIFOW(fd,0); + int cmd = RFIFOW(fd,0); if (cmd < 0x2af8 || cmd >= 0x2af8 + ARRAYLENGTH(packet_len_table) || packet_len_table[cmd-0x2af8] == 0) { int r = intif_parse(fd); // Passed on to the intif diff --git a/src/map/clif.c b/src/map/clif.c index ecf893aa8a..97b3c6ccab 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -1415,7 +1415,7 @@ void clif_hominfo(struct map_session_data *sd, struct homun_data *hd, int flag) WBUFW(buf,31)=(unsigned short) (hd->homunculus.intimacy / 100) ; WBUFW(buf,33)=0; // equip id WBUFW(buf,35)=cap_value(status->rhw.atk2+status->batk, 0, INT16_MAX); - WBUFW(buf,37)=cap_value(status->matk_max, 0, INT16_MAX); + WBUFW(buf,37)=min(status->matk_max, INT16_MAX); //FIXME capping to INT16 here is too late WBUFW(buf,39)=status->hit; if (battle_config.hom_setting&0x10) WBUFW(buf,41)=status->luk/3 + 1; //crit is a +1 decimal value! Just display purpose.[Vicious] @@ -13623,7 +13623,7 @@ void clif_blacksmith(struct map_session_data* sd) WFIFOHEAD(fd,packet_len(0x219)); WFIFOW(fd,0) = 0x219; //Packet size limits this list to 10 elements. [Skotlex] - for (i = 0; i < 10 && i < MAX_FAME_LIST; i++) { + for (i = 0; i < min(10,MAX_FAME_LIST); i++) { //client is capped to 10 char if (smith_fame_list[i].id > 0) { if (strcmp(smith_fame_list[i].name, "-") == 0 && (name = map_charid2nick(smith_fame_list[i].id)) != NULL) @@ -13676,7 +13676,7 @@ void clif_alchemist(struct map_session_data* sd) WFIFOHEAD(fd,packet_len(0x21a)); WFIFOW(fd,0) = 0x21a; //Packet size limits this list to 10 elements. [Skotlex] - for (i = 0; i < 10 && i < MAX_FAME_LIST; i++) { + for (i = 0; i < min(10,MAX_FAME_LIST); i++) { if (chemist_fame_list[i].id > 0) { if (strcmp(chemist_fame_list[i].name, "-") == 0 && (name = map_charid2nick(chemist_fame_list[i].id)) != NULL) @@ -13729,7 +13729,7 @@ void clif_taekwon(struct map_session_data* sd) WFIFOHEAD(fd,packet_len(0x226)); WFIFOW(fd,0) = 0x226; //Packet size limits this list to 10 elements. [Skotlex] - for (i = 0; i < 10 && i < MAX_FAME_LIST; i++) { + for (i = 0; i < min(10,MAX_FAME_LIST); i++) { if (taekwon_fame_list[i].id > 0) { if (strcmp(taekwon_fame_list[i].name, "-") == 0 && (name = map_charid2nick(taekwon_fame_list[i].id)) != NULL) @@ -15756,7 +15756,7 @@ void clif_instance_status(struct map_session_data *sd, const char *name, unsigne #if PACKETVER >= 20071128 unsigned char buf[71]; - nullpo_retv(sd); + if(!sd) return; //party_getavailablesd can return NULL WBUFW(buf,0) = 0x2cd; safestrncpy( WBUFP(buf,2), name, 62 ); @@ -16914,7 +16914,7 @@ void clif_sub_ranklist(unsigned char *buf,int idx,struct map_session_data* sd, i if(!skip){ //Packet size limits this list to 10 elements. [Skotlex] - for (i = 0; i < 10 && i < MAX_FAME_LIST; i++) { + for (i = 0; i < min(10,MAX_FAME_LIST); i++) { if (list[i].id > 0) { if (strcmp(list[i].name, "-") == 0 && (name = map_charid2nick(list[i].id)) != NULL) @@ -17854,7 +17854,7 @@ void packetdb_readdb(void) ln++; if(line[0]=='/' && line[1]=='/') continue; - if (sscanf(line,"%256[^:]: %256[^\r\n]",w1,w2) == 2) + if (sscanf(line,"%255[^:]: %255[^\r\n]",w1,w2) == 2) { if(strcmpi(w1,"packet_ver")==0) { int prev_ver = packet_ver; diff --git a/src/map/homunculus.c b/src/map/homunculus.c index c5382fc227..42db51fa65 100644 --- a/src/map/homunculus.c +++ b/src/map/homunculus.c @@ -1282,9 +1282,7 @@ int read_homunculus_skilldb(void) void read_homunculus_expdb(void) { - FILE *fp; - char line[1024]; - int i, j=0; + int i; char *filename[]={ DBPATH"exp_homun.txt", "import/exp_homun.txt" @@ -1292,6 +1290,10 @@ void read_homunculus_expdb(void) memset(hexptbl,0,sizeof(hexptbl)); for(i=0; imercenary.kill_count++; - md->mercenary.kill_count = cap_value(md->mercenary.kill_count, 0, INT_MAX); + if(md->mercenary.kill_count <= (INT_MAX-1)) //safe cap to INT_MAX + md->mercenary.kill_count++; if( (md->mercenary.kill_count % 50) == 0 ) { diff --git a/src/map/mob.c b/src/map/mob.c index 4f9f82a6c3..c94be0bbe4 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -98,15 +98,13 @@ int mob_skill_id2skill_idx(int mob_id,uint16 skill_id); int mobdb_searchname(const char *str) { int i; - struct mob_db* mob; for(i=0;i<=MAX_MOB_DB;i++){ - mob = mob_db(i); + struct mob_db *mob = mob_db(i); if(mob == mob_dummy) //Skip dummy mobs. continue; if(strcmpi(mob->name,str)==0 || strcmpi(mob->jname,str)==0 || strcmpi(mob->sprite,str)==0) return i; } - return 0; } static int mobdb_searchname_array_sub(struct mob_db* mob, const char *str) @@ -347,12 +345,9 @@ bool mob_ksprotected (struct block_list *src, struct block_list *target) struct block_list *s_bl, *t_bl; struct map_session_data *sd, // Source - *pl_sd, // Owner *t_sd; // Mob Target - struct status_change_entry *sce; struct mob_data *md; unsigned int tick = gettick(); - char output[128]; if( !battle_config.ksprotection ) return false; // KS Protection Disabled @@ -373,6 +368,10 @@ bool mob_ksprotected (struct block_list *src, struct block_list *target) t_sd = BL_CAST(BL_PC,s_bl); do { + struct status_change_entry *sce; + struct map_session_data *pl_sd; // Owner + char output[128]; + if( map[md->bl.m].flag.allowks || map_flag_ks(md->bl.m) ) return false; // Ignores GVG, PVP and AllowKS map flags @@ -1340,7 +1339,7 @@ int mob_unlocktarget(struct mob_data *md, unsigned int tick) int mob_randomwalk(struct mob_data *md,unsigned int tick) { const int retrycount=20; - int i,x,y,c,d; + int i,c,d; int speed; nullpo_ret(md); @@ -1354,8 +1353,8 @@ int mob_randomwalk(struct mob_data *md,unsigned int tick) if(d<5) d=5; for(i=0;ibl.x; y+=md->bl.y; @@ -1828,10 +1827,11 @@ static struct item_drop* mob_setlootitem(struct item* item) static int mob_delay_item_drop(int tid, unsigned int tick, int id, intptr_t data) { struct item_drop_list *list; - struct item_drop *ditem, *ditem_prev; + struct item_drop *ditem; list=(struct item_drop_list *)data; ditem = list->item; while (ditem) { + struct item_drop *ditem_prev; map_addflooritem(&ditem->item_data,ditem->item_data.amount, list->m,list->x,list->y, list->first_charid,list->second_charid,list->third_charid,4); @@ -2117,7 +2117,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) int id,zeny; unsigned int base_exp,job_exp; } pt[DAMAGELOG_SIZE]; - int i, temp, count, m = md->bl.m, pnum = 0; + int i, temp, count, m = md->bl.m; int dmgbltypes = 0; // bitfield of all bl types, that caused damage to the mob and are elligible for exp distribution unsigned int mvp_damage, tick = gettick(); bool rebirth, homkillonly; @@ -2199,6 +2199,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) (!map[m].flag.nobaseexp || !map[m].flag.nojobexp) //Gives Exp ) { //Experience calculation. int bonus = 100; //Bonus on top of your share (common to all attackers). + int pnum = 0; if (md->sc.data[SC_RICHMANKIM]) bonus += md->sc.data[SC_RICHMANKIM]->val2; if(sd) { @@ -2437,12 +2438,10 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) // process script-granted extra drop bonuses int itemid = 0; for (i = 0; i < ARRAYLENGTH(sd->add_drop) && (sd->add_drop[i].id || sd->add_drop[i].group); i++) { - if ( sd->add_drop[i].race == -md->mob_id || - ( (sd->add_drop[i].race > 0 || sd->add_drop[i].class_ > 0) && ( - sd->add_drop[i].race & (1<race) || - sd->add_drop[i].class_ & (1<class_) - ))) - { + if ( sd->add_drop[i].race == -md->mob_id + || (sd->add_drop[i].race && (sd->add_drop[i].race)&(1<race)) + || (sd->add_drop[i].class_ && (sd->add_drop[i].class_)&(1<class_)) + ) { //check if the bonus item drop rate should be multiplied with mob level/10 [Lupus] if(sd->add_drop[i].rate < 0) { //it's negative, then it should be multiplied. e.g. for Mimic,Myst Case Cards, etc @@ -3382,7 +3381,7 @@ int mob_is_clone(int mob_id) int mob_clone_spawn(struct map_session_data *sd, int16 m, int16 x, int16 y, const char *event, int master_id, int mode, int flag, unsigned int duration) { int mob_id; - int i,j,inf,skill_id, fd; + int i,j,inf, fd; struct mob_data *md; struct mob_skill *ms; struct mob_db* db; @@ -3434,7 +3433,7 @@ int mob_clone_spawn(struct map_session_data *sd, int16 m, int16 x, int16 y, cons //Go Backwards to give better priority to advanced skills. for (i=0,j = MAX_SKILL_TREE-1;j>=0 && i< MAX_MOBSKILL ;j--) { - skill_id = skill_tree[pc_class2idx(sd->status.class_)][j].id; + int skill_id = skill_tree[pc_class2idx(sd->status.class_)][j].id; if (!skill_id || sd->status.skill[skill_id].lv < 1 || (skill_get_inf2(skill_id)&(INF2_WEDDING_SKILL|INF2_GUILD_SKILL)) || skill_get_nocast(skill_id)&16 @@ -3682,7 +3681,7 @@ static bool mob_parse_dbrow(char** str) { struct mob_db *db, entry; struct status_data *status; - int mob_id, i, k; + int mob_id, i; double exp, maxhp; struct mob_data data; @@ -3847,7 +3846,7 @@ static bool mob_parse_dbrow(char** str) int rate = 0, rate_adjust, type; unsigned short ratemin, ratemax; struct item_data *id; - k = 31 + MAX_MVP_DROP*2 + i*2; + int k = 31 + MAX_MVP_DROP*2 + i*2; db->dropitem[i].nameid = atoi(str[k]); if (!db->dropitem[i].nameid) { db->dropitem[i].p = 0; //No drop. @@ -4040,10 +4039,7 @@ static bool mob_readdb_mobavail(char* str[], int columns, int current) *------------------------------------------*/ static int mob_read_randommonster(void) { - FILE *fp; - char line[1024]; - char *str[10],*p; - int i,j, entries, k; + int i; const char* mobfile[] = { DBPATH"mob_branch.txt", DBPATH"mob_poring.txt", @@ -4061,7 +4057,11 @@ static int mob_read_randommonster(void) for( i = 0; i < ARRAYLENGTH(mobfile); i++ ) { // MobID,DummyName,Rate - entries=0; + FILE *fp; + char line[1024]; + char *str[10],*p; + int j, entries=0, k; + k = (i >= MAX_RANDOMMONSTER) ? i - MAX_RANDOMMONSTER : i; mob_db_data[0]->summonper[k] = MOBID_PORING; // Default fallback value, in case the database does not provide one sprintf(line, "%s/%s", db_path, mobfile[i]); @@ -4493,7 +4493,7 @@ static int mob_read_sqlskilldb(void) *------------------------------------------*/ static bool mob_readdb_race2(char* fields[], int columns, int current) { - int race, mobid, i; + int race, i; race = atoi(fields[0]); @@ -4505,7 +4505,7 @@ static bool mob_readdb_race2(char* fields[], int columns, int current) for(i = 1; i 0 || class_ > -1) + && ((race 0 && rate > 0) { //Both are absolute rates. if (drop[i].rate < rate) @@ -1939,8 +1939,8 @@ static int pc_bonus_item_drop(struct s_add_drop *drop, const short max, short id } drop[i].id = id; drop[i].group = group; - drop[i].race |= race; - drop[i].class_ |= class_; + if(raceautospell) && sd->autospell[i].id; i++) { - if(!(sd->autospell[i].flag&attack_type&BF_WEAPONMASK && - sd->autospell[i].flag&attack_type&BF_RANGEMASK && - sd->autospell[i].flag&attack_type&BF_SKILLMASK)) + if(!( ((sd->autospell[i].flag)&attack_type)&BF_WEAPONMASK && + ((sd->autospell[i].flag)&attack_type)&BF_RANGEMASK && + ((sd->autospell[i].flag)&attack_type)&BF_SKILLMASK)) continue; // one or more trigger conditions were not fulfilled skill = (sd->autospell[i].id > 0) ? sd->autospell[i].id : -sd->autospell[i].id; @@ -1744,9 +1744,9 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, uint continue; if( sd->autobonus[i].active != INVALID_TIMER ) continue; - if(!(sd->autobonus[i].atk_type&attack_type&BF_WEAPONMASK && - sd->autobonus[i].atk_type&attack_type&BF_RANGEMASK && - sd->autobonus[i].atk_type&attack_type&BF_SKILLMASK)) + if(!( ((sd->autobonus[i].atk_type)&attack_type)&BF_WEAPONMASK && + ((sd->autobonus[i].atk_type)&attack_type)&BF_RANGEMASK && + ((sd->autobonus[i].atk_type)&attack_type)&BF_SKILLMASK)) continue; // one or more trigger conditions were not fulfilled pc_exeautobonus(sd,&sd->autobonus[i]); } @@ -1987,9 +1987,9 @@ int skill_counter_additional_effect (struct block_list* src, struct block_list * for (i = 0; i < ARRAYLENGTH(dstsd->autospell2) && dstsd->autospell2[i].id; i++) { - if(!(dstsd->autospell2[i].flag&attack_type&BF_WEAPONMASK && - dstsd->autospell2[i].flag&attack_type&BF_RANGEMASK && - dstsd->autospell2[i].flag&attack_type&BF_SKILLMASK)) + if(!( ((dstsd->autospell2[i].flag)&attack_type)&BF_WEAPONMASK && + ((dstsd->autospell2[i].flag)&attack_type)&BF_RANGEMASK && + ((dstsd->autospell2[i].flag)&attack_type)&BF_SKILLMASK)) continue; // one or more trigger conditions were not fulfilled skill_id = (dstsd->autospell2[i].id > 0) ? dstsd->autospell2[i].id : -dstsd->autospell2[i].id; @@ -2073,9 +2073,9 @@ int skill_counter_additional_effect (struct block_list* src, struct block_list * continue; if( dstsd->autobonus2[i].active != INVALID_TIMER ) continue; - if(!(dstsd->autobonus2[i].atk_type&attack_type&BF_WEAPONMASK && - dstsd->autobonus2[i].atk_type&attack_type&BF_RANGEMASK && - dstsd->autobonus2[i].atk_type&attack_type&BF_SKILLMASK)) + if(!( ((dstsd->autobonus2[i].atk_type)&attack_type)&BF_WEAPONMASK && + ((dstsd->autobonus2[i].atk_type)&attack_type)&BF_RANGEMASK && + ((dstsd->autobonus2[i].atk_type)&attack_type)&BF_SKILLMASK)) continue; // one or more trigger conditions were not fulfilled pc_exeautobonus(dstsd,&dstsd->autobonus2[i]); } @@ -2095,7 +2095,7 @@ int skill_break_equip (struct block_list *src,struct block_list *bl, unsigned sh const enum sc_type scatk[4] = {SC_STRIPWEAPON, SC_STRIPARMOR, SC_STRIPSHIELD, SC_STRIPHELM}; const enum sc_type scdef[4] = {SC_CP_WEAPON, SC_CP_ARMOR, SC_CP_SHIELD, SC_CP_HELM}; struct status_change *sc = status_get_sc(bl); - int i,j; + int i; TBL_PC *sd; sd = BL_CAST(BL_PC, bl); if (sc && !sc->count) @@ -2143,7 +2143,7 @@ int skill_break_equip (struct block_list *src,struct block_list *bl, unsigned sh return 0; if (sd) { for (i = 0; i < EQI_MAX; i++) { - j = sd->equip_index[i]; + int j = sd->equip_index[i]; if (j < 0 || sd->status.inventory[j].attribute == 1 || !sd->inventory_data[j]) continue; @@ -4094,7 +4094,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint // skill_area_temp[0] holds number of targets in area // skill_area_temp[1] holds the id of the original target // skill_area_temp[2] counts how many targets have already been processed - int sflag = skill_area_temp[0] & 0xFFF, heal; + int sflag = skill_area_temp[0] & 0xFFF; if( flag&SD_LEVEL ) sflag |= SD_LEVEL; // -1 will be used in packets instead of the skill level if( skill_area_temp[1] != bl->id && !(skill_get_inf2(skill_id)&INF2_NPC_SKILL) ) @@ -4114,7 +4114,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint sd->flicker = false; } else { - heal = (int)skill_attack(skill_get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, sflag); + int heal = (int)skill_attack(skill_get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, sflag); if( skill_id == NPC_VAMPIRE_GIFT && heal > 0 ) { clif_skill_nodamage(NULL, src, AL_HEAL, heal, 1); status_heal(src,heal,0,0); @@ -4663,7 +4663,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint break; i = spell[s==1?0:rand()%s];// Random select of spell to be released. - if( s && sc->data[i] ){// Now extract the data from the preserved spell + if(sc->data[i] ){// Now extract the data from the preserved spell skill_id = sc->data[i]->val1; skill_lv = sc->data[i]->val2; point = sc->data[i]->val3; @@ -4702,7 +4702,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint } else { // Summon Balls - int j = 0, k, skele; + int j = 0, k; int spheres[5] = { 0, 0, 0, 0, 0 }, positions[5] = {-1,-1,-1,-1,-1 }; @@ -4733,7 +4733,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint if( skill_lv == 1 ) j = 1; // Limit only to one ball for( i = 0; i < j; i++ ) { - skele = WL_RELEASE - 5 + sc->data[spheres[i]]->val1 - WLS_FIRE; // Convert Ball Element into Skill ATK for balls + int skele = WL_RELEASE - 5 + sc->data[spheres[i]]->val1 - WLS_FIRE; // Convert Ball Element into Skill ATK for balls // WL_SUMMON_ATK_FIRE, WL_SUMMON_ATK_WIND, WL_SUMMON_ATK_WATER, WL_SUMMON_ATK_GROUND skill_addtimerskill(src,tick+status_get_adelay(src)*i,bl->id,0,0,skele,sc->data[spheres[i]]->val3,BF_MAGIC,flag|SD_LEVEL); status_change_end(src, spheres[i], INVALID_TIMER); // Eliminate ball @@ -7552,7 +7552,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case CG_TAROTCARD: { - int eff, count = -1; + int count = -1; if( rnd() % 100 > skill_lv * 8 || (tsc && tsc->data[SC_BASILICA]) || (dstmd && ((dstmd->guardian_data && dstmd->mob_id == MOBID_EMPERIUM) || mob_is_battleground(dstmd))) ) { if( sd ) @@ -7563,7 +7563,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui } status_zap(src,0,skill_get_sp(skill_id,skill_lv)); // consume sp only if succeeded [Inkfish] do { - eff = rnd() % 14; + int eff = rnd() % 14; clif_specialeffect(bl, 523 + eff, AREA); switch (eff) { @@ -9653,11 +9653,11 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case MH_SILENT_BREEZE: { struct status_change *ssc = status_get_sc(src); struct block_list *m_bl = battle_get_master(src); - const enum sc_type scs[] = { - SC_MANDRAGORA, SC_HARMONIZE, SC_DEEPSLEEP, SC_VOICEOFSIREN, SC_SLEEP, SC_CONFUSION, SC_HALLUCINATION - }; int heal; if(tsc){ + const enum sc_type scs[] = { + SC_MANDRAGORA, SC_HARMONIZE, SC_DEEPSLEEP, SC_VOICEOFSIREN, SC_SLEEP, SC_CONFUSION, SC_HALLUCINATION + }; for (i = 0; i < ARRAYLENGTH(scs); i++) { if (tsc->data[scs[i]]) status_change_end(bl, scs[i], INVALID_TIMER); } @@ -10205,7 +10205,6 @@ int skill_castend_id(int tid, unsigned int tick, int id, intptr_t data) int skill_castend_pos(int tid, unsigned int tick, int id, intptr_t data) { struct block_list* src = map_id2bl(id); - int maxcount; struct map_session_data *sd; struct unit_data *ud = unit_bl2ud(src); struct mob_data *md; @@ -10235,6 +10234,7 @@ int skill_castend_pos(int tid, unsigned int tick, int id, intptr_t data) ud->skilltimer = INVALID_TIMER; do { + int maxcount=0; if( status_isdead(src) ) break; diff --git a/src/map/unit.c b/src/map/unit.c index a29605fafd..abcac67559 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -1769,12 +1769,12 @@ int unit_skilluse_pos2( struct block_list *src, short skill_x, short skill_y, ui */ int unit_set_target(struct unit_data* ud, int target_id) { - struct unit_data * ux; - struct block_list* target; - nullpo_ret(ud); if( ud->target != target_id ) { + struct unit_data * ux; + struct block_list* target; + if( ud->target && (target = map_id2bl(ud->target)) && (ux = unit_bl2ud(target)) && ux->target_count > 0 ) ux->target_count --; if( target_id && (target = map_id2bl(target_id)) && (ux = unit_bl2ud(target)) ) @@ -1939,7 +1939,6 @@ bool unit_can_reach_pos(struct block_list *bl,int x,int y, int easy) */ bool unit_can_reach_bl(struct block_list *bl,struct block_list *tbl, int range, int easy, short *x, short *y) { - int i; short dx,dy; nullpo_retr(false, bl); nullpo_retr(false, tbl); @@ -1960,6 +1959,7 @@ bool unit_can_reach_bl(struct block_list *bl,struct block_list *tbl, int range, dy=(dy>0)?1:((dy<0)?-1:0); if (map_getcell(tbl->m,tbl->x-dx,tbl->y-dy,CELL_CHKNOPASS)) { // Look for a suitable cell to place in. + int i; for(i=0;i<9 && map_getcell(tbl->m,tbl->x-dirx[i],tbl->y-diry[i],CELL_CHKNOPASS);i++); if (i==9) return false; // No valid cells. dx = dirx[i]; @@ -1981,7 +1981,7 @@ bool unit_can_reach_bl(struct block_list *bl,struct block_list *tbl, int range, */ int unit_calc_pos(struct block_list *bl, int tx, int ty, uint8 dir) { - int dx, dy, x, y, i, k; + int dx, dy, x, y; struct unit_data *ud = unit_bl2ud(bl); nullpo_ret(ud); @@ -2001,8 +2001,9 @@ int unit_calc_pos(struct block_list *bl, int tx, int ty, uint8 dir) if( dx > 0 ) x--; else if( dx < 0 ) x++; if( dy > 0 ) y--; else if( dy < 0 ) y++; if( !unit_can_reach_pos(bl, x, y, 0) ) { + int i; for( i = 0; i < 12; i++ ) { - k = rnd()%8; // Pick a Random Dir + int k = rnd()%8; // Pick a Random Dir dx = -dirx[k] * 2; dy = -diry[k] * 2; x = tx + dx; diff --git a/src/map/vending.c b/src/map/vending.c index 37de8b0e51..dd52c73296 100644 --- a/src/map/vending.c +++ b/src/map/vending.c @@ -293,7 +293,7 @@ void vending_openvending(struct map_session_data* sd, const char* message, const sd->vending[i].index = index; sd->vending[i].amount = amount; - sd->vending[i].value = cap_value(value, 0, (unsigned int)battle_config.vending_max_value); + sd->vending[i].value = min(value, (unsigned int)battle_config.vending_max_value); i++; // item successfully added } diff --git a/tools/convert_sql.pl b/tools/convert_sql.pl index fa1254a3f3..e29620dffa 100755 --- a/tools/convert_sql.pl +++ b/tools/convert_sql.pl @@ -13,7 +13,7 @@ # --i=../db/re/mob_skill_db.txt --o=../sql-files/mob_skill_db_re.sql --t=re --m=mob_skill --table=mob_skill_db_re # # List of options: -# item_db.pl --help +# convert_sql.pl --help use strict; use warnings;