Browse Source

- Fixed pets/homunc trying to be deleted twice when they had 0 intimacy and their master logs out.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@9290 54d463be-8e91-2dee-dedb-b68131a5f0ec
skotlex 18 years ago
parent
commit
52d0596d42
2 changed files with 8 additions and 4 deletions
  1. 2 0
      Changelog-Trunk.txt
  2. 6 4
      src/map/unit.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.
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
 
 2006/11/21
 2006/11/21
+	* Fixed pets/homunc trying to be deleted twice when they had 0 intimacy and
+	  their master logs out. [Skotlex]
 	* Added support for specifying ammo type = 99 in the skill_require_db file,
 	* Added support for specifying ammo type = 99 in the skill_require_db file,
 	  it can be used to specify that any kind of ammo can be used with the skill,
 	  it can be used to specify that any kind of ammo can be used with the skill,
 	  but you NEED to have ammo equipped. [Skotlex]
 	  but you NEED to have ammo equipped. [Skotlex]

+ 6 - 4
src/map/unit.c

@@ -1643,7 +1643,9 @@ int unit_remove_map(struct block_list *bl, int clrtype) {
 		md->state.skillstate= MSS_IDLE;
 		md->state.skillstate= MSS_IDLE;
 	} else if (bl->type == BL_PET) {
 	} else if (bl->type == BL_PET) {
 		struct pet_data *pd = (struct pet_data*)bl;
 		struct pet_data *pd = (struct pet_data*)bl;
-		if(pd->pet.intimate <= 0) {
+		if(pd->pet.intimate <= 0 &&
+			!(pd->msd && pd->msd->state.waitingdisconnect)
+		) {	//If logging out, this is deleted on unit_free
 			clif_clearchar_area(bl,clrtype);
 			clif_clearchar_area(bl,clrtype);
 			map_delblock(bl);
 			map_delblock(bl);
 			unit_free(bl,0);
 			unit_free(bl,0);
@@ -1652,9 +1654,9 @@ int unit_remove_map(struct block_list *bl, int clrtype) {
 		}
 		}
 	} else if (bl->type == BL_HOM) {
 	} else if (bl->type == BL_HOM) {
 		struct homun_data *hd = (struct homun_data *) bl;
 		struct homun_data *hd = (struct homun_data *) bl;
-		struct map_session_data *sd = hd->master;
-		if(!sd || !hd->homunculus.intimacy)
-	  	{	//He's going to be deleted.
+		if(!hd->homunculus.intimacy &&
+			!(hd->master && hd->master->state.waitingdisconnect)
+		) {	//If logging out, this is deleted on unit_free
 			clif_emotion(bl, 28) ;	//sob
 			clif_emotion(bl, 28) ;	//sob
 			clif_clearchar_area(bl,clrtype);
 			clif_clearchar_area(bl,clrtype);
 			map_delblock(bl);
 			map_delblock(bl);