Sfoglia il codice sorgente

Running into a wall/npc/pc/mob no longer enables spurt. (bugreport:1155)

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@12498 54d463be-8e91-2dee-dedb-b68131a5f0ec
Kevin 17 anni fa
parent
commit
81a6774764
3 ha cambiato i file con 13 aggiunte e 1 eliminazioni
  1. 1 0
      Changelog-Trunk.txt
  2. 4 1
      src/map/status.c
  3. 8 0
      src/map/unit.c

+ 1 - 0
Changelog-Trunk.txt

@@ -4,6 +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
+	* Running into a wall/npc/pc/mob no longer enables spurt. (r12498) [Kevin]
 	* Fixed unable to move after using a skill to break out of sprint. (r12497) [Kevin]
 	* DMG no longer stops running. (r12488) [Kevin]
 2008/04/04

+ 4 - 1
src/map/status.c

@@ -6305,12 +6305,15 @@ int status_change_end(struct block_list* bl, enum sc_type type, int tid)
 		case SC_RUN:
 		{
 			struct unit_data *ud = unit_bl2ud(bl);
+			bool begin_spurt = true;
 			if (ud) {
+				if(!ud->state.running)
+					begin_spurt = false;
 				ud->state.running = 0;
 				if (ud->walktimer != -1)
 					unit_stop_walking(bl,1);
 			}
-			if (sce->val1 >= 7 &&
+			if (begin_spurt && sce->val1 >= 7 &&
 				DIFF_TICK(gettick(), sce->val4) <= 1000 &&
 				(!sd || (sd->weapontype1 == 0 && sd->weapontype2 == 0))
 			)

+ 8 - 0
src/map/unit.c

@@ -432,7 +432,11 @@ int unit_run(struct block_list *bl)
 	if(to_x == bl->x && to_y == bl->y) {
 		//If you can't run forward, you must be next to a wall, so bounce back. [Skotlex]
 		clif_status_change(bl, SI_BUMP, 1);
+
+		//Set running to 0 beforehand so status_change_end knows not to enable spurt [Kevin]
+		unit_bl2ud(bl)->state.running = 0;
 		status_change_end(bl,SC_RUN,-1);
+
 		skill_blown(bl,bl,skill_get_blewcount(TK_RUN,lv),unit_getdir(bl),0);
 		clif_fixpos(bl); //Why is a clif_slide (skill_blown) AND a fixpos needed? Ask Aegis.
 		clif_status_change(bl, SI_BUMP, 0);
@@ -448,7 +452,11 @@ int unit_run(struct block_list *bl)
 	if (i==0) {
 		// copy-paste from above
 		clif_status_change(bl, SI_BUMP, 1);
+
+		//Set running to 0 beforehand so status_change_end knows not to enable spurt [Kevin]
+		unit_bl2ud(bl)->state.running = 0;
 		status_change_end(bl,SC_RUN,-1);
+
 		skill_blown(bl,bl,skill_get_blewcount(TK_RUN,lv),unit_getdir(bl),0);
 		clif_fixpos(bl);
 		clif_status_change(bl, SI_BUMP, 0);