diff options
-rw-r--r-- | Changelog-SVN.txt | 10 | ||||
-rw-r--r-- | src/char_sql/int_storage.c | 2 | ||||
-rw-r--r-- | src/map/atcommand.c | 2 | ||||
-rw-r--r-- | src/map/battle.c | 34 | ||||
-rw-r--r-- | src/map/mob.c | 4 | ||||
-rw-r--r-- | src/map/status.c | 4 | ||||
-rw-r--r-- | src/map/trade.c | 5 |
7 files changed, 59 insertions, 2 deletions
diff --git a/Changelog-SVN.txt b/Changelog-SVN.txt index 1a5aab776..10ab1f650 100644 --- a/Changelog-SVN.txt +++ b/Changelog-SVN.txt @@ -1,6 +1,16 @@ Date Added 03/23 + * Fixed possible memory corruption in storage if number of guilds + in database exceeds the max server can support [1278 : MouseJstr] + * Fixed @mapexit to properly flush the fifo's before shutting + server down to help insure all the char data is properly flushed + [1278: MouseJstr] + * Fixed trade exploit/crash from invalid data being sent + [1278: MouseJstr] + * Possible use of uninitialized data used during mob walk + calculation resulting in radical mob movement or crash + [1278: MouseJstr] * Fixed some --addrace variables' sizes [celest] * Added' require_glory_guild' - sets whether changing guild emblems require the Glory of Guild skill [celest] diff --git a/src/char_sql/int_storage.c b/src/char_sql/int_storage.c index 9bb5318c6..7f059fcf8 100644 --- a/src/char_sql/int_storage.c +++ b/src/char_sql/int_storage.c @@ -146,6 +146,8 @@ int guild_storage_fromsql(int guild_id, struct guild_storage *p){ p->storage[i].card[2]= atoi(sql_row[9]); p->storage[i].card[3]= atoi(sql_row[10]); p->storage_amount = ++i; + if (i >= MAX_GUILD_STORAGE) + break; } mysql_free_result(sql_res); } diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 6f037c216..e49bb178c 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -5195,6 +5195,8 @@ int atcommand_mapexit( } } clif_GM_kick(sd, sd, 0); + + flush_fifos(); runflag = 0; diff --git a/src/map/battle.c b/src/map/battle.c index 54e1ba484..15f192ec4 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -2291,8 +2291,42 @@ static struct Damage battle_calc_pc_weapon_attack( case ASC_BREAKER: // -- moonsoul (special damage for ASC_BREAKER skill) if(sd){ // calculate physical part of damage +#ifndef TWILIGHT damage = damage * skill_lv; damage2 = damage2 * skill_lv; +#else /* TWILIGHT */ + damage = damage * skill_lv * 0.5; //Halved by Krel + damage2 = damage2 * skill_lv * 0.5; //Halved by Krel + // element modifier added right after this + + // calculate magic part of damage + damage3 = skill_lv * status_get_int(src) * 5 * 0.5; //Krel + // ignores magic defense now [Celest] + /*if(sd->ignore_mdef_ele & (1<<t_ele) || sd->ignore_mdef_race & (1<<t_race)) + imdef_flag = 1; + if(t_mode & 0x20) { + if(sd->ignore_mdef_race & (1<<10)) + imdef_flag = 1; + } + else { + if(sd->ignore_mdef_race & (1<<11)) + imdef_flag = 1; + } + if(!imdef_flag){ + if(battle_config.magic_defense_type) { + damage3 = damage3 - (mdef1 * battle_config.magic_defense_type) - mdef2; + } + else{ + damage3 = (damage3*(100-mdef1))/100 - mdef2; + } + } + + if(damage3<1) + damage3=1; + + damage3=battle_attr_fix(damage2,s_ele_, status_get_element(target) );*/ + +#endif /* TWILIGHT */ flag=(flag&~BF_RANGEMASK)|BF_LONG; } break; diff --git a/src/map/mob.c b/src/map/mob.c index d4d0fd45d..cae0eddf3 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -815,8 +815,12 @@ static int mob_walktoxy_sub(struct mob_data *md) nullpo_retr(0, md); + memset(&wpd, 0, sizeof(wpd)); + if(path_search(&wpd,md->bl.m,md->bl.x,md->bl.y,md->to_x,md->to_y,md->state.walk_easy)) return 1; + if (wpd.path[0] >= 8) + return 1; x = md->bl.x+dirx[wpd.path[0]]; y = md->bl.y+diry[wpd.path[0]]; if (map_getcell(md->bl.m,x,y,CELL_CHKBASILICA) && !(status_get_mode(&md->bl)&0x20)) { diff --git a/src/map/status.c b/src/map/status.c index a848f8a4a..742dd7d52 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -3124,7 +3124,11 @@ int status_change_start(struct block_list *bl,int type,int val1,int val2,int val case SC_ENDURE: /* インデュア */ if(tick <= 0) tick = 1000 * 60; calc_flag = 1; // for updating mdef +#ifdef TWILIGHT + val2 = 40; // [Celest] +#else val2 = 7; // [Celest] +#endif break; case SC_AUTOBERSERK: { diff --git a/src/map/trade.c b/src/map/trade.c index 7709376fb..5219c27fa 100644 --- a/src/map/trade.c +++ b/src/map/trade.c @@ -220,8 +220,9 @@ void trade_tradeok(struct map_session_data *sd) { // check items for(trade_i = 0; trade_i < 10; trade_i++) { - if (sd->deal_item_amount[trade_i] > sd->status.inventory[sd->deal_item_index[trade_i]-2].amount || - sd->deal_item_amount[trade_i] < 0) { + if (((sd->deal_item_index[trade_i]-2) < 0) || + (sd->deal_item_amount[trade_i] > sd->status.inventory[sd->deal_item_index[trade_i]-2].amount) || + (sd->deal_item_amount[trade_i] < 0)) { trade_tradecancel(sd); return; } |