Selaa lähdekoodia

- Likely fixed a mob not returning to their original class view on respawn after they changed class.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@5952 54d463be-8e91-2dee-dedb-b68131a5f0ec
skotlex 19 vuotta sitten
vanhempi
commit
38bd5b5675
3 muutettua tiedostoa jossa 7 lisäystä ja 6 poistoa
  1. 2 0
      Changelog-Trunk.txt
  2. 3 4
      src/map/mob.c
  3. 2 2
      src/map/status.c

+ 2 - 0
Changelog-Trunk.txt

@@ -4,6 +4,8 @@ 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/04/07
+	* Likely fixed a mob not returning to their original class view on respawn
+	  after they changed class in their previous life. [Skotlex]
 	* The map-server can now read the equip_job column of the item_db as both
 	  decimal and hexadecimal values. [Skotlex]
 	* Updated item_db.sql current item_db.txt [Skotlex]

+ 3 - 4
src/map/mob.c

@@ -652,8 +652,8 @@ int mob_spawn (struct mob_data *md)
 	md->last_spawntime = tick;
 	if (md->bl.prev != NULL)
 		unit_remove_map(&md->bl,2);
-	else if (md->spawn && md->class_ != md->spawn->class_) {
-		md->class_ = md->spawn->class_;
+	else if (md->vd->class_ != md->class_) {
+		status_set_viewdata(&md->bl, md->class_);
 		md->db = mob_db(md->class_);
 		md->speed=md->db->speed;
 		if (md->spawn)
@@ -2364,8 +2364,6 @@ int mob_class_change (struct mob_data *md, int class_)
 		return 0;
 
 	hp_rate = md->hp*100/status_get_max_hp(&md->bl);
-	clif_mob_class_change(md,class_);
-	md->class_ = class_;
 	md->db = mob_db(class_);
 	md->max_hp = md->db->max_hp; //Update the mob's max HP
 	if (battle_config.monster_class_change_full_recover) {
@@ -2385,6 +2383,7 @@ int mob_class_change (struct mob_data *md, int class_)
 	mob_stop_walking(md, 0);
 	unit_skillcastcancel(&md->bl, 0);
 	status_set_viewdata(&md->bl, class_);
+	clif_mob_class_change(md,class_);
 	
 	for(i=0,c=tick-1000*3600*10;i<MAX_MOBSKILL;i++)
 		md->skilldelay[i] = c;

+ 2 - 2
src/map/status.c

@@ -2329,8 +2329,8 @@ int status_quick_recalc_speed(struct map_session_data *sd, int skill_num, int sk
 int status_get_class(struct block_list *bl)
 {
 	nullpo_retr(0, bl);
-	if(bl->type==BL_MOB)
-		return ((struct mob_data *)bl)->class_;
+	if(bl->type==BL_MOB)	//Class used on all code should be the view class of the mob.
+		return ((struct mob_data *)bl)->vd->class_;
 	if(bl->type==BL_PC)
 		return ((struct map_session_data *)bl)->status.class_;
 	if(bl->type==BL_PET)