summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Trunk.txt4
-rw-r--r--src/map/mob.c1
-rw-r--r--src/map/pc.c20
3 files changed, 23 insertions, 2 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index e2c7133da..1e664d0d4 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -3,6 +3,10 @@ Date Added
AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
+2007/02/02
+ * Resetting skills will now automatically remove peco, falcon, cart and
+ homunculus (vaporize).
+ * Fixed random mob picking choosing clones. [Skotlex]
2007/02/01
* Restricted global messages to 255 characters (client shows only ~80 anyway,
wanted to use 127 but frost joke's lines are longer than that ...)
diff --git a/src/map/mob.c b/src/map/mob.c
index f32acc85f..4abd1dd58 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -257,6 +257,7 @@ int mob_get_random_id(int type, int flag, int lv) {
class_ = rand() % MAX_MOB_DB;
mob = mob_db(class_);
} while ((mob == mob_dummy ||
+ mob_is_clone(class_) ||
(flag&1 && mob->summonper[type] <= rand() % 1000000) ||
(flag&2 && lv < mob->lv) ||
(flag&4 && mob->status.mode&MD_BOSS) ||
diff --git a/src/map/pc.c b/src/map/pc.c
index 238a88b5a..3731dda29 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -4720,8 +4720,24 @@ int pc_resetskill(struct map_session_data* sd, int flag)
int i, lv, inf2, skill_point=0;
nullpo_retr(0, sd);
- if (pc_checkskill(sd, SG_DEVIL) && !pc_nextjobexp(sd))
- clif_status_load(&sd->bl, SI_DEVIL, 0); //Remove perma blindness due to skill-reset. [Skotlex]
+ if(!(flag&2))
+ { //Remove stuff lost when resetting skills.
+ if (pc_checkskill(sd, SG_DEVIL) && !pc_nextjobexp(sd))
+ clif_status_load(&sd->bl, SI_DEVIL, 0); //Remove perma blindness due to skill-reset. [Skotlex]
+ i = sd->sc.option;
+ if (i&OPTION_RIDING && pc_checkskill(sd, KN_RIDING))
+ i&=~OPTION_RIDING;
+ if(i&OPTION_CART && pc_checkskill(sd, MC_PUSHCART))
+ i&=~OPTION_CART;
+ if(i&OPTION_FALCON && pc_checkskill(sd, HT_FALCON))
+ i&=~OPTION_FALCON;
+
+ if(i != sd->sc.option)
+ pc_setoption(sd, i);
+
+ if(merc_is_hom_active(sd->hd) && pc_checkskill(sd, AM_CALLHOMUN))
+ merc_hom_vaporize(sd, 0);
+ }
for (i = 1; i < MAX_SKILL; i++) {
lv= sd->status.skill[i].lv;