private void RemoveRoutePointArea(RoutePoint routePoint) { GameArea area = GameArea.GetArea(routePoint.Position, this.Radius, true); foreach (Point point in area.Area) { RoutePoint point2 = null; this.RouteArea.TryGetValue(point, out point2); if (point2 == routePoint) { this.RouteArea.Remove(point); base.Scenario.MapTileData[point.X, point.Y].RemoveSupplyingRoutePoint(routePoint); } } }
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); } } }
public bool CheckTroop(Troop troop) { if (!this.Happened || this.Repeatable) { if (!((this.AfterHappenedEvent == null) || this.AfterHappenedEvent.Happened)) { return(false); } if (!GameObject.Chance(this.HappenChance)) { return(false); } if ((this.LaunchPerson == null) || troop.Persons.HasGameObject(this.LaunchPerson)) { if (!this.CheckCondition(troop)) { return(false); } if (this.TargetPersons.Count <= 0) { return(true); } GameArea baseViewArea = null; switch (this.CheckArea) { case EventCheckAreaKind.视野: baseViewArea = troop.BaseViewArea; break; case EventCheckAreaKind.八格: baseViewArea = GameArea.GetArea(troop.Position, 1, true); break; case EventCheckAreaKind.攻击范围: baseViewArea = troop.OffenceArea; break; } if (baseViewArea != null) { int num = 0; foreach (Point point in baseViewArea.Area) { if (troop.BelongedFaction != null) { if (troop.BelongedFaction.IsPositionKnown(point)) { Troop troopByPositionNoCheck = Session.Current.Scenario.GetTroopByPositionNoCheck(point); if (troopByPositionNoCheck != null) { foreach (PersonRelation relation in this.TargetPersons) { if (((relation.Relation == PersonRelationKind.友好) == troop.IsFriendly(troopByPositionNoCheck.BelongedFaction)) && troopByPositionNoCheck.Persons.HasGameObject(relation.SpeakingPerson)) { num++; } } } } } } return(num == this.TargetPersons.Count); } } } return(false); }