Beispiel #1
0
 public void Apply(Troop troop)
 {
     troop.DecreaseCombativity(this.Combativity);
     troop.StuntDayLeft = this.Period;
     foreach (Influence influence in this.Influences.Influences.Values)
     {
         influence.ApplyInfluence(troop.Leader, Applier.Stunt, 0, false);
     }
     troop.RefreshAllData();
 }
Beispiel #2
0
 public static Troop Create(Architecture from, GameObjectList persons, Person leader, Military military, int food, Point position)
 {
     Troop troop = new Troop();
     troop.Scenario = from.Scenario;
     troop.destination = position;
     troop.realDestination = position;
     troop.StartingArchitecture = from;
     troop.ID = troop.Scenario.Troops.GetFreeGameObjectID();
     foreach (Person p in persons.GetList())
     {
         troop.persons.Add(p);
         p.LocationTroop = troop;
         if (p.LocationArchitecture != null)
         {
             p.LocationArchitecture = null;
             p.OldWorkKind = p.WorkKind;
             p.WorkKind = ArchitectureWorkKind.无;
         }
     }
     troop.SetLeader(leader);
     if (from.BelongedFaction != null)
     {
         from.BelongedFaction.AddTroop(troop);
         troop.TechnologyIncrement = from.Technology / 50;
         if (military.ShelledMilitary == null)
         {
             from.RemoveMilitary(military);
         }
         else
         {
             from.RemoveMilitary(military.ShelledMilitary);
             from.Scenario.Militaries.AddMilitary(military);
         }
     }
     troop.Army = military;
     if (food < 0)
     {
         if (from.Food > (6 * military.FoodMax))
         {
             troop.Food = military.FoodMax;
         }
         else if (from.Food > (3 * military.FoodMax))
         {
             troop.Food = military.FoodCostPerDay * ((int)Math.Ceiling((double)(((float)military.RationDays) / 2f)));
         }
         else if (from.Food > military.FoodMax)
         {
             troop.Food = military.FoodCostPerDay * (1 + (military.RationDays / 4));
         }
         else if (from.Food > (military.FoodCostPerDay * (1 + (military.RationDays / 6))))
         {
             troop.Food = military.FoodCostPerDay * (1 + (military.RationDays / 6));
         }
         else if (from.Food > military.FoodCostPerDay)
         {
             troop.Food = military.FoodCostPerDay;
         }
         else
         {
             troop.Food = 0;
         }
     }
     else
     {
         troop.Food = food;
     }
     if (troop.Food > 0)
     {
         from.DecreaseFood(troop.Food);
     }
     troop.InitializePosition(position);
     troop.Scenario.SetMapTileTroop(troop);
     troop.Scenario.Troops.AddTroopWithEvent(troop);
     if (troop.OnTroopCreate != null)
     {
         troop.OnTroopCreate(troop);
     }
     troop.Scenario.ClearPersonStatusCache();
     //troop.Persons.ApplyInfluences();
     troop.RefreshAllData();
     ExtensionInterface.call("CreateTroop", new Object[] { troop.Scenario, troop });
     return troop;
 }