Fixed #831
* Magnetic Field will now properly drain SP and lock targets.
This commit is contained in:
parent
468bd6fa9b
commit
3f8055dcc2
@ -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;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user