summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Trunk.txt3
-rw-r--r--src/map/mob.c3
-rw-r--r--src/map/skill.c2
-rw-r--r--src/map/status.c3
4 files changed, 8 insertions, 3 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index bba7366c2..0baeab557 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -4,6 +4,9 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
2006/06/05
+ * Fixed a crash when using SL_SMA and the "combo" ain't ready. [Skotlex]
+ * Hopefully fixed changing a mob's class causing them to get all sort of
+ stat bonuses due to the mobs-level-up setting. [Skotlex]
* Changed hit, flee, cri, flee2, def2 and mdef2 to signed short, def, mdef
to signed char to correctly account for cards with penalties in said stats.
[Skotlex]
diff --git a/src/map/mob.c b/src/map/mob.c
index 8968136dd..5dd5008ff 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -2241,6 +2241,7 @@ int mob_class_change (struct mob_data *md, int class_)
hp_rate = md->status.hp*100/md->status.max_hp;
md->db = mob_db(class_);
+ md->level = md->db->lv; //Also reset their level.
if (battle_config.override_mob_names==1)
memcpy(md->name,md->db->name,NAME_LENGTH-1);
@@ -2252,7 +2253,7 @@ int mob_class_change (struct mob_data *md, int class_)
unit_skillcastcancel(&md->bl, 0);
status_set_viewdata(&md->bl, class_);
clif_mob_class_change(md,class_);
- status_calc_mob(md, 1);
+ status_calc_mob(md, 3);
if (battle_config.monster_class_change_full_recover) {
memset(md->dmglog, 0, sizeof(md->dmglog));
diff --git a/src/map/skill.c b/src/map/skill.c
index 2a0f04527..7a667bf22 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -7790,7 +7790,7 @@ int skill_check_condition(struct map_session_data *sd,int skill, int lv, int typ
break;
case SL_SMA:
if(type) break; //Only do the combo check when the target is selected (type == 0)
- if(!sd || sc->data[SC_SMA].timer == -1)
+ if(!sc || sc->data[SC_SMA].timer == -1)
return 0;
break;
diff --git a/src/map/status.c b/src/map/status.c
index 332fddc59..ec809ec60 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -1006,6 +1006,7 @@ void status_calc_misc(struct status_data *status, int level)
//Skotlex: Calculates the initial status for the given mob
//first will only be false when the mob leveled up or got a GuardUp level.
+//first&2: Class-change invoked.
int status_calc_mob(struct mob_data* md, int first)
{
struct status_data *status;
@@ -1014,7 +1015,7 @@ int status_calc_mob(struct mob_data* md, int first)
if(first)
{ //Set basic level on respawn.
- if (md->spawn)
+ if (md->spawn && !(flag&2))
md->level = md->spawn->level;
else
md->level = md->db->lv; // [Valaris]