summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/map/skill.c6
-rw-r--r--src/map/status.c2
-rw-r--r--src/map/unit.c6
3 files changed, 8 insertions, 6 deletions
diff --git a/src/map/skill.c b/src/map/skill.c
index 8e0bbabeb..5f3036565 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -11445,8 +11445,10 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
const struct TimerData* td = tsc->data[type]?get_timer(tsc->data[type]->timer):NULL;
if( td )
sec = DIFF_TICK(td->tick, tick);
- unit_movepos(bl, src->bl.x, src->bl.y, 0, 0);
- clif_fixpos(bl);
+ if( sg->unit_id == UNT_MANHOLE ) {
+ unit_movepos(bl, src->bl.x, src->bl.y, 0, 0);
+ clif_fixpos(bl);
+ }
sg->val2 = bl->id;
} else
sec = 3000; //Couldn't trap it?
diff --git a/src/map/status.c b/src/map/status.c
index e615d5595..8167e9949 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -997,7 +997,6 @@ void initChangeTables(void) {
StatusIconChangeTable[SC_HALLUCINATION] = SI_BLANK;
/* StatusChangeState (SCS_) NOMOVE */
- StatusChangeStateTable[SC_ANKLE] |= SCS_NOMOVE;
StatusChangeStateTable[SC_AUTOCOUNTER] |= SCS_NOMOVE;
StatusChangeStateTable[SC_TRICKDEAD] |= SCS_NOMOVE;
StatusChangeStateTable[SC_BLADESTOP] |= SCS_NOMOVE;
@@ -8632,7 +8631,6 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
case SC_CONFUSION:
case SC_CLOSECONFINE:
case SC_CLOSECONFINE2:
- case SC_ANKLE:
case SC_SPIDERWEB:
case SC_ELECTRICSHOCKER:
case SC_BITE:
diff --git a/src/map/unit.c b/src/map/unit.c
index 0104e9a42..5d2a6c794 100644
--- a/src/map/unit.c
+++ b/src/map/unit.c
@@ -890,8 +890,7 @@ int unit_is_walking(struct block_list *bl)
/*==========================================
* Determines if the bl can move based on status changes. [Skotlex]
*------------------------------------------*/
-int unit_can_move(struct block_list *bl)
-{
+int unit_can_move(struct block_list *bl) {
struct map_session_data *sd;
struct unit_data *ud;
struct status_change *sc;
@@ -931,6 +930,9 @@ int unit_can_move(struct block_list *bl)
sc->data[SC_CLOAKING]->val1 < 3 && !(sc->data[SC_CLOAKING]->val4&1))
)
return 0;
+
+ if( sc->data[SC_ANKLE] && !unit_is_walking(bl) ) // Ankle only stops you after you're done moving
+ return 0;
if (sc->opt1 > 0 && sc->opt1 != OPT1_STONEWAIT && sc->opt1 != OPT1_BURNING && (sc->opt1 != OPT1_CRYSTALIZE && bl->type != BL_MOB))
return 0;