예제 #1
0
        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);
                }
            }
        }
예제 #2
0
파일: TroopEvent.cs 프로젝트: RipleyX/ZHSan
        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);
                }
            }
        }
예제 #3
0
파일: TroopEvent.cs 프로젝트: RipleyX/ZHSan
        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);
        }