Prechádzať zdrojové kódy

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)

Playtester 8 rokov pred
rodič
commit
d1f8c8ca6c
1 zmenil súbory, kde vykonal 21 pridanie a 17 odobranie
  1. 21 17
      src/map/skill.c

+ 21 - 17
src/map/skill.c

@@ -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.