* Magnetic Field will now properly drain SP and lock targets.
This commit is contained in:
aleos89 2015-12-15 13:27:46 -05:00
parent 468bd6fa9b
commit 3f8055dcc2

View File

@ -1227,7 +1227,7 @@ void initChangeTables(void)
StatusChangeStateTable[SC_ELECTRICSHOCKER] |= SCS_NOMOVE;
StatusChangeStateTable[SC_BITE] |= SCS_NOMOVE;
StatusChangeStateTable[SC_THORNSTRAP] |= SCS_NOMOVE;
StatusChangeStateTable[SC_MAGNETICFIELD] |= SCS_NOMOVE|SCS_NOMOVECOND;
StatusChangeStateTable[SC_MAGNETICFIELD] |= SCS_NOMOVE;
StatusChangeStateTable[SC__MANHOLE] |= SCS_NOMOVE;
StatusChangeStateTable[SC_CURSEDCIRCLE_ATKER] |= SCS_NOMOVE;
StatusChangeStateTable[SC_CURSEDCIRCLE_TARGET] |= SCS_NOMOVE;
@ -4244,8 +4244,7 @@ void status_calc_state( struct block_list *bl, struct status_change *sc, enum sc
|| (sc->data[SC_GRAVITATION] && sc->data[SC_GRAVITATION]->val3 == BCT_SELF)
|| (sc->data[SC_CRYSTALIZE] && bl->type != BL_MOB)
|| (sc->data[SC_CAMOUFLAGE] && sc->data[SC_CAMOUFLAGE]->val1 < 3)
|| (sc->data[SC_MAGNETICFIELD] && sc->data[SC_MAGNETICFIELD]->val2 != bl->id)
)
)
sc->cant.move += ( start ? 1 : ((sc->cant.move)? -1:0) );
}
@ -12383,19 +12382,15 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data)
break;
case SC_MAGNETICFIELD:
{
if( --(sce->val3) <= 0 )
break; // Time out
if( sce->val2 == bl->id ) {
if( !status_charge(bl,0,50) )
break; // No more SP status should end, and in the next second will end for the other affected players
} else {
struct block_list *src = map_id2bl(sce->val2);
struct status_change *ssc;
if( !src || (ssc = status_get_sc(src)) == NULL || !ssc->data[SC_MAGNETICFIELD] )
break; // Source no more under Magnetic Field
}
if (--(sce->val3) >= 0) {
struct block_list *src = map_id2bl(sce->val2);
if (!src || (src && (status_isdead(src) || src->m != bl->m)))
break;
if (!status_charge(bl, 0, 50))
status_zap(bl, 0, status->sp);
sc_timer_next(1000 + tick, status_change_timer, bl->id, data);
return 0;
}
break;