Explorar o código

Running now resumes after dmg as well, see (r12488). (bugreport:1155)

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@12490 54d463be-8e91-2dee-dedb-b68131a5f0ec
Kevin %!s(int64=17) %!d(string=hai) anos
pai
achega
4bcaa39ee9
Modificáronse 2 ficheiros con 33 adicións e 4 borrados
  1. 1 1
      Changelog-Trunk.txt
  2. 32 3
      src/map/unit.c

+ 1 - 1
Changelog-Trunk.txt

@@ -4,7 +4,7 @@ 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.
 
 2008/04/05
-	* DMG no longer stops running. (r12486) [Kevin]
+	* DMG no longer stops running. (r12488) [Kevin]
 2008/04/04
 	* PCs/Mobs/NPCs now block Leap(TK_HIGHJUMP) and sprint(TK_RUN). (r12485) [Kevin]
 	* Disconnect user when receive select egg packet with no menu open. (r12484) [Kevin]

+ 32 - 3
src/map/unit.c

@@ -748,6 +748,27 @@ int unit_can_move(struct block_list *bl)
 	return 1;
 }
 
+
+/*==========================================
+ * Resume running after a walk delay
+ *------------------------------------------*/
+
+int unit_resume_running(int tid,unsigned int tick,int id,int data)
+{
+
+	struct unit_data *ud = (struct unit_data *)data;
+	TBL_PC * sd = map_id2sd(id);
+
+	clif_skill_nodamage(ud->bl,ud->bl,TK_RUN,ud->skilllv,
+			sc_start4(ud->bl,status_skill2sc(TK_RUN),100,ud->skilllv,unit_getdir(ud->bl),0,0,0));
+
+	if (sd) clif_walkok(sd);
+
+	return 0;
+
+}
+
+
 /*==========================================
  * Applies walk delay to character, considering that 
  * if type is 0, this is a damage induced delay: if previous delay is active, do not change it.
@@ -772,9 +793,17 @@ int unit_set_walkdelay(struct block_list *bl, unsigned int tick, int delay, int
 		{	//Minimal delay (walk-delay) disabled. Just stop walking.
 			unit_stop_walking(bl,0);
 		} else {
-			unit_stop_walking(bl,2);
-			if(ud->target)
-				add_timer(ud->canmove_tick+1, unit_walktobl_sub, bl->id, ud->target);
+			//Resume running after can move again [Kevin]
+			if(ud->state.running)
+			{
+				add_timer(ud->canmove_tick, unit_resume_running, bl->id, (int)ud);
+			}
+			else
+			{
+				unit_stop_walking(bl,2);
+				if(ud->target)
+					add_timer(ud->canmove_tick+1, unit_walktobl_sub, bl->id, ud->target);
+			}
 		}
 	}
 	return 1;