From 7a6cfa37c932a2d5893d57343dda44a5c16ad45b Mon Sep 17 00:00:00 2001 From: Kevin Date: Sat, 5 Apr 2008 21:51:00 +0000 Subject: Running into a wall/npc/pc/mob no longer enables spurt. (bugreport:1155) git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@12498 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 1 + src/map/status.c | 5 ++++- src/map/unit.c | 8 ++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 11b8c337b..1a2540fb6 100644 --- a/Changelog-Trunk.txt +++ b/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 diff --git a/src/map/status.c b/src/map/status.c index 47d2617b6..4db508cb2 100644 --- a/src/map/status.c +++ b/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)) ) diff --git a/src/map/unit.c b/src/map/unit.c index 575e95c1e..b8a5d327a 100644 --- a/src/map/unit.c +++ b/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); -- cgit v1.2.3-60-g2f50