public void ApplyEventEffects(Troop self) { if (((self != null) && !self.Destroyed) && (!this.Happened || this.Repeatable)) { Troop troopByPositionNoCheck; this.Happened = true; TroopList list = new TroopList(); if (this.SelfEffects.Count > 0) { list.Add(self); foreach (GameObjects.TroopDetail.EventEffect.EventEffect effect in this.SelfEffects) { effect.ApplyEffect(self.Leader); } } foreach (TroopEffectPerson person in this.EffectPersons) { person.Effect.ApplyEffect(person.EffectPerson); if ((person.EffectPerson.LocationTroop != null) && (list.GetGameObject(person.EffectPerson.LocationTroop.ID) == null)) { list.Add(person.EffectPerson.LocationTroop); } } List <TroopEffectArea> list2 = new List <TroopEffectArea>(); List <TroopEffectArea> list3 = new List <TroopEffectArea>(); List <TroopEffectArea> list4 = new List <TroopEffectArea>(); foreach (TroopEffectArea area in this.EffectAreas) { switch (area.Kind) { case EffectAreaKind.视野敌军: list2.Add(area); break; case EffectAreaKind.视野友军: list2.Add(area); break; case EffectAreaKind.八格敌军: list3.Add(area); break; case EffectAreaKind.八格友军: list3.Add(area); break; case EffectAreaKind.攻击范围敌军: list4.Add(area); break; case EffectAreaKind.攻击范围友军: list4.Add(area); break; } } foreach (TroopEffectArea area in list2) { foreach (Point point in self.BaseViewArea.Area) { if (self.BelongedFaction.IsPositionKnown(point)) { troopByPositionNoCheck = Session.Current.Scenario.GetTroopByPositionNoCheck(point); if (troopByPositionNoCheck != null) { switch (area.Kind) { case EffectAreaKind.视野敌军: if (!self.IsFriendly(troopByPositionNoCheck.BelongedFaction)) { area.Effect.ApplyEffect(troopByPositionNoCheck.Leader); } break; case EffectAreaKind.视野友军: if (self.IsFriendly(troopByPositionNoCheck.BelongedFaction)) { area.Effect.ApplyEffect(troopByPositionNoCheck.Leader); } break; } } } } } foreach (TroopEffectArea area in list3) { foreach (Point point in GameArea.GetArea(self.Position, 1, true).Area) { if (self.BelongedFaction.IsPositionKnown(point)) { troopByPositionNoCheck = Session.Current.Scenario.GetTroopByPositionNoCheck(point); if (troopByPositionNoCheck != null) { switch (area.Kind) { case EffectAreaKind.八格敌军: if (!self.IsFriendly(troopByPositionNoCheck.BelongedFaction)) { area.Effect.ApplyEffect(troopByPositionNoCheck.Leader); } break; case EffectAreaKind.八格友军: if (self.IsFriendly(troopByPositionNoCheck.BelongedFaction)) { area.Effect.ApplyEffect(troopByPositionNoCheck.Leader); } break; } } } } } foreach (TroopEffectArea area in list4) { //Label_0539: foreach (Point point in self.OffenceArea.Area) { if (!self.BelongedFaction.IsPositionKnown(point)) { continue; } troopByPositionNoCheck = Session.Current.Scenario.GetTroopByPositionNoCheck(point); if (troopByPositionNoCheck != null) { switch (area.Kind) { case EffectAreaKind.攻击范围敌军: if (!self.IsFriendly(troopByPositionNoCheck.BelongedFaction)) { area.Effect.ApplyEffect(troopByPositionNoCheck.Leader); } break; case EffectAreaKind.攻击范围友军: if (self.IsFriendly(troopByPositionNoCheck.BelongedFaction)) { area.Effect.ApplyEffect(troopByPositionNoCheck.Leader); } break; } } } } foreach (Troop troop in list) { Troop.CheckTroopRout(troop); } } }