diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/map/npc.c | 15 | ||||
-rw-r--r-- | src/map/trade.c | 4 |
2 files changed, 12 insertions, 7 deletions
diff --git a/src/map/npc.c b/src/map/npc.c index 4b1fa5c10..90d61e226 100644 --- a/src/map/npc.c +++ b/src/map/npc.c @@ -2281,20 +2281,21 @@ int npc_parse_mob (char *w1, char *w2, char *w3, char *w4) mode = mob_db(class_)->status.mode; if (mode & MD_BOSS) { //Bosses if (battle_config.boss_spawn_delay != 100) - { - mob.delay1 = mob.delay1*battle_config.boss_spawn_delay/100; - mob.delay2 = mob.delay2*battle_config.boss_spawn_delay/100; + { // Divide by 100 first to prevent overflows + //(precision loss is minimal as duration is in ms already) + mob.delay1 = mob.delay1/100*battle_config.boss_spawn_delay; + mob.delay2 = mob.delay2/100*battle_config.boss_spawn_delay; } } else if (mode&MD_PLANT) { //Plants if (battle_config.plant_spawn_delay != 100) { - mob.delay1 = mob.delay1*battle_config.plant_spawn_delay/100; - mob.delay2 = mob.delay2*battle_config.plant_spawn_delay/100; + mob.delay1 = mob.delay1/100*battle_config.plant_spawn_delay; + mob.delay2 = mob.delay2/100*battle_config.plant_spawn_delay; } } else if (battle_config.mob_spawn_delay != 100) { //Normal mobs - mob.delay1 = mob.delay1*battle_config.mob_spawn_delay/100; - mob.delay2 = mob.delay2*battle_config.mob_spawn_delay/100; + mob.delay1 = mob.delay1/100*battle_config.mob_spawn_delay; + mob.delay2 = mob.delay2/100*battle_config.mob_spawn_delay; } // parse MOB_NAME,[MOB LEVEL] diff --git a/src/map/trade.c b/src/map/trade.c index 63df19940..216692752 100644 --- a/src/map/trade.c +++ b/src/map/trade.c @@ -132,6 +132,10 @@ void trade_tradeack(struct map_session_data *sd, int type) { if (sd->npc_id || sd->vender_id || sd->state.storage_flag || tsd->npc_id || tsd->vender_id || tsd->state.storage_flag) { //Fail + sd->state.deal_locked = 0; + sd->trade_partner = 0; + tsd->state.deal_locked = 0; + tsd->trade_partner = 0; clif_tradestart(sd, 2); clif_tradestart(tsd, 2); return; |