瀏覽代碼

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

Valaris 19 年之前
父節點
當前提交
432aefc244
共有 2 個文件被更改,包括 19 次插入0 次删除
  1. 1 0
      Changelog-Trunk.txt
  2. 18 0
      src/map/status.c

+ 1 - 0
Changelog-Trunk.txt

@@ -5,6 +5,7 @@ IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.  EV
 GOES INTO TRUNK AND WILL BE MERGED INTO STABLE BY VALARIS AND WIZPUTER. -- VALARIS
 
 2006/02/02
+	* Fixed crash in status_change_timer.  For some reason the block type switch was removed. [Valaris]
 	* Crash fix in npc.c npc_timerevent.
 	  was: struct timer_event_data *ted = (struct timer_event_data*)ted;
 	  changed: 	struct timer_event_data *ted = (struct timer_event_data*)data;

+ 18 - 0
src/map/status.c

@@ -3635,6 +3635,24 @@ int status_change_start(struct block_list *bl,int type,int val1,int val2,int val
 	if (!sc || status_isdead(bl))
 		return 0;
 	
+	switch (bl->type)
+	{
+		case BL_PC:
+			sd=(struct map_session_data *)bl;
+			break;
+		case BL_MOB:
+			if (((struct mob_data*)bl)->class_ == MOBID_EMPERIUM && type != SC_SAFETYWALL)
+				return 0; //Emperium can't be afflicted by status changes.
+			break;
+		case BL_PET: //Because pets can't have status changes.
+		case BL_SKILL: //These may happen by attacking traps or the like. [Skotlex]
+			return 0;
+		default:
+			if(battle_config.error_log)
+				ShowError("status_change_start: invalid source type (%d)!\n", bl->type);
+			return 0;
+	}
+
 	if(type < 0 || type >= SC_MAX) {
 		if(battle_config.error_log)
 			ShowError("status_change_start: invalid status change (%d)!\n", type);