Browse Source

- indent cleanups
- Fixed Self Destruction causing double-free'd errors and triggering twice when a self-destruct cast makes other objects trigger self destruct as well


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

skotlex 18 years ago
parent
commit
9bc7a5db40
3 changed files with 5 additions and 3 deletions
  1. 1 3
      src/map/chrif.c
  2. 2 0
      src/map/map.c
  3. 2 0
      src/map/skill.c

+ 1 - 3
src/map/chrif.c

@@ -1076,7 +1076,6 @@ int chrif_disconnectplayer(int fd){
 
 		case 3: //server overpopulated
 			clif_authfail_fd(sd->fd, 4);
-
 		break;
 
 		case 4: //out of time payd for .. (avail)
@@ -1087,8 +1086,7 @@ int chrif_disconnectplayer(int fd){
 			clif_authfail_fd(sd->fd, 15);
 		break;
 	}
-
-return 0;
+	return 0;
 }
 
 /*==========================================

+ 2 - 0
src/map/map.c

@@ -1695,6 +1695,8 @@ int map_quit(struct map_session_data *sd) {
 			unit_remove_map(&sd->bl, 0);
 			if (sd->pd && sd->pd->bl.prev != NULL)
 				unit_remove_map(&sd->pd->bl, 0);
+			if (sd->hd && sd->hd->bl.prev != NULL)
+			  	unit_remove_map(&sd->hd->bl, 0);
 		}
 	}
 

+ 2 - 0
src/map/skill.c

@@ -4096,10 +4096,12 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 		i = ((!md || md->special_state.ai == 2) && !map_flag_vs(src->m))?
 			BCT_ENEMY:BCT_ALL;
 		clif_skill_nodamage(src, src, skillid, -1, 1);
+		map_delblock(src); //Required to prevent chain-self-destructions hitting back.
 		map_foreachinrange(skill_area_sub, bl,
 			skill_get_splash(skillid, skilllv), BL_CHAR,
 			src, skillid, skilllv, tick, flag|i,
 			skill_castend_damage_id);
+		map_addblock(src);
 		status_damage(src, src, sstatus->max_hp,0,0,1);
 		break;