瀏覽代碼

Fixed Warp Portal code sometimes producing errors/crashes in the case where a priest enters his/her own warp (bugreport:270)

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@12189 54d463be-8e91-2dee-dedb-b68131a5f0ec
ultramage 17 年之前
父節點
當前提交
c12125ed84
共有 2 個文件被更改,包括 14 次插入5 次删除
  1. 3 0
      Changelog-Trunk.txt
  2. 11 5
      src/map/skill.c

+ 3 - 0
Changelog-Trunk.txt

@@ -3,6 +3,9 @@ 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.
 
+2008/02/10
+	* Fixed Warp Portal code sometimes producing errors/crashes in the case
+	  where a priest enters his/her own warp (bugreport:270)
 2008/02/08
 	* Fixed wrong message in item group loading code (bugreport:936)
 	* Fixed 'charisalpha' not working for the first char (bugreport:940)

+ 11 - 5
src/map/skill.c

@@ -6530,11 +6530,17 @@ int skill_unit_onplace (struct skill_unit *src, struct block_list *bl, unsigned
 		if(bl->type==BL_PC){
 			struct map_session_data *sd = (struct map_session_data *)bl;
 			if((!sd->chatID || battle_config.chat_warpportal)
-				&& sd->ud.to_x == src->bl.x && sd->ud.to_y == src->bl.y) {
-				if (pc_setpos(sd,sg->val3,sg->val2>>16,sg->val2&0xffff,3) == 0) {
-					if (--sg->val1<=0)
-						skill_delunitgroup(NULL, sg);
-				}
+				&& sd->ud.to_x == src->bl.x && sd->ud.to_y == src->bl.y)
+			{
+				int x = sg->val2>>16;
+				int y = sg->val2&0xffff;
+				unsigned short m = sg->val3;
+
+				if( --sg->val1 <= 0 )
+					skill_delunitgroup(NULL, sg);
+
+				pc_setpos(sd,m,x,y,3);
+				sg = src->group; // avoid dangling pointer (pc_setpos can cause deletion of 'sg')
 			}
 		} else
 		if(bl->type == BL_MOB && battle_config.mob_warp&2)