Fiber Lock vs. Land Protector (follow-up to 79e9afa)

* Fiber Lock now ends in all situations in which the unit group is removed (e.g. Land Protector)
This commit is contained in:
Playtester 2016-12-19 23:43:56 +01:00
parent 74d577ce52
commit d1f8c8ca6c

View File

@ -17873,6 +17873,27 @@ int skill_delunitgroup_(struct skill_unit_group *group, const char* file, int li
}
switch( group->skill_id ) {
case PF_SPIDERWEB:
{
struct block_list* target = map_id2bl(group->val2);
struct status_change *sc;
bool removed = true;
//Clear group id from status change
if (target && (sc = status_get_sc(target)) != NULL && sc->data[SC_SPIDERWEB]) {
if (sc->data[SC_SPIDERWEB]->val2 == group->group_id)
sc->data[SC_SPIDERWEB]->val2 = 0;
else if (sc->data[SC_SPIDERWEB]->val3 == group->group_id)
sc->data[SC_SPIDERWEB]->val3 = 0;
else if (sc->data[SC_SPIDERWEB]->val4 == group->group_id)
sc->data[SC_SPIDERWEB]->val4 = 0;
else //Group was already removed in status_change_end, don't call it again!
removed = false;
//The last group was cleared, end status change
if(removed && sc->data[SC_SPIDERWEB]->val2 == 0 && sc->data[SC_SPIDERWEB]->val3 == 0 && sc->data[SC_SPIDERWEB]->val4 == 0)
status_change_end(target, SC_SPIDERWEB, INVALID_TIMER);
}
}
case SG_SUN_WARM:
case SG_MOON_WARM:
case SG_STAR_WARM:
@ -18151,23 +18172,6 @@ static int skill_unit_timer_sub(DBKey key, DBData *data, va_list ap)
}
break;
case UNT_SPIDERWEB:
{
struct block_list* target = map_id2bl(group->val2);
struct status_change *sc;
//Clear group id from status change
if (target && (sc = status_get_sc(target)) != NULL && sc->data[SC_SPIDERWEB]) {
if (sc->data[SC_SPIDERWEB]->val2 == group->group_id)
sc->data[SC_SPIDERWEB]->val2 = 0;
else if (sc->data[SC_SPIDERWEB]->val3 == group->group_id)
sc->data[SC_SPIDERWEB]->val3 = 0;
else if (sc->data[SC_SPIDERWEB]->val4 == group->group_id)
sc->data[SC_SPIDERWEB]->val4 = 0;
}
skill_delunit(unit);
}
break;
case UNT_REVERBERATION:
case UNT_NETHERWORLD:
if( unit->val1 <= 0 ) { // If it was deactivated.