Kaynağa Gözat

- Resetting skills will now automatically remove peco, falcon, cart and homunculus (vaporize).
- Fixed random mob picking choosing clones.


git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@9780 54d463be-8e91-2dee-dedb-b68131a5f0ec

skotlex 18 yıl önce
ebeveyn
işleme
cc141e4bcb
3 değiştirilmiş dosya ile 23 ekleme ve 2 silme
  1. 4 0
      Changelog-Trunk.txt
  2. 1 0
      src/map/mob.c
  3. 18 2
      src/map/pc.c

+ 4 - 0
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 ...)

+ 1 - 0
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) ||

+ 18 - 2
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;