Beispiel #1
0
 private CreditPack GetStratagemCreditByPosition(Stratagem stratagem, Point position)
 {
     int num = -2147483648;
     Troop troop = null;
     foreach (Point point in this.GetStratagemArea(position).Area)
     {
         if ((this.BelongedFaction == null) || this.BelongedFaction.IsPositionKnown(point))
         {
             int num2 = base.Scenario.GetSimpleDistance(position, point) * 5;
             Troop troopByPositionNoCheck = base.Scenario.GetTroopByPositionNoCheck(point);
             if ((troopByPositionNoCheck != null) && (stratagem.Friendly == this.IsFriendly(troopByPositionNoCheck.BelongedFaction)))
             {
                 if (!(stratagem.Friendly || (troopByPositionNoCheck.Status != TroopStatus.埋伏)))
                 {
                     continue;
                 }
                 int credit = stratagem.GetCredit(this, troopByPositionNoCheck);
                 if (!stratagem.Friendly && (((this.WillArchitecture != null) && (this.WillArchitecture.BelongedFaction != this.BelongedFaction)) && (this.WillArchitecture.BelongedFaction != troopByPositionNoCheck.BelongedFaction)))
                 {
                     credit /= 2;
                 }
                 if (((troopByPositionNoCheck != this) && (this.Army.Scales > 4)) && (troopByPositionNoCheck.Army.Scales <= 4))
                 {
                     credit /= 2;
                 }
                 if (credit > 0)
                 {
                     credit += num2;
                     if (credit > num)
                     {
                         num = credit;
                         troop = troopByPositionNoCheck;
                     }
                 }
             }
         }
     }
     if (stratagem.Friendly && (position != this.Position))
     {
         int num4 = stratagem.GetCredit(this, this);
         if (num4 > 0)
         {
             num4 += base.Scenario.GetSimpleDistance(this.Position, position) * 5;
             if (num4 > num)
             {
                 num = num4;
                 troop = this;
             }
         }
     }
     CreditPack pack = new CreditPack();
     pack.Position = position;
     if (troop != null)
     {
         pack.Distance = base.Scenario.GetDistance(position, troop.Position);
     }
     if (((num > 0) && base.Scenario.PositionIsOnFire(position)) && (((this.BelongedFaction == null) && this.ViewArea.HasPoint(position)) || ((this.BelongedFaction != null) && this.BelongedFaction.IsPositionKnown(position))))
     {
         num -= 300;
     }
     if (num > 0)
     {
         num += this.GetFoodCredit(position);
         num += this.GetLegionCredit(position);
         num += this.GetHostileRoutewayCredit(position);
         num += this.GetTerrainCredit(position);
         int positionHostileOffencingDiscredit = 0;
         Architecture architectureByPositionNoCheck = base.Scenario.GetArchitectureByPositionNoCheck(position);
         if ((architectureByPositionNoCheck != null) && (architectureByPositionNoCheck.Endurance > 0))
         {
             if (!stratagem.Friendly)
             {
                 num *= 4;
             }
         }
         else
         {
             positionHostileOffencingDiscredit = base.Scenario.GetPositionHostileOffencingDiscredit(this, position);
         }
         if (position != this.Position)
         {
             float terranRateByPosition = this.GetTerranRateByPosition(position);
             num = (int) ((num * Math.Pow((double) terranRateByPosition, 2.0)) - (((double) positionHostileOffencingDiscredit) / Math.Pow((double) terranRateByPosition, 2.0)));
         }
         else
         {
             num -= positionHostileOffencingDiscredit;
         }
         pack.Credit = num;
         pack.CurrentStratagem = stratagem;
     }
     else
     {
         pack.Credit = 0;
     }
     pack.TargetTroop = troop;
     return pack;
 }
Beispiel #2
0
 private CreditPack GetStratagemCreditByPosition(Stratagem stratagem, Troop troop)
 {
     int credit = stratagem.GetCredit(this, troop);
     if (credit <= 0)
         return new CreditPack();
     if (!stratagem.Friendly && this.WillArchitecture != null && this.WillArchitecture.BelongedFaction != this.BelongedFaction && this.WillArchitecture.BelongedFaction != troop.BelongedFaction)
     {
         credit /= 2;
     }
     if (troop != this && this.Army.Scales > 4 && troop.Army.Scales <= 4)
     {
         credit /= 2;
     }
     CreditPack pack = new CreditPack();
     pack.Position = troop.position;
     pack.Distance = base.Scenario.GetDistance(this.position, troop.Position);
     pack.Credit = credit;
     pack.CurrentStratagem = stratagem;
     pack.TargetTroop = troop;
     return pack;
 }