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; }
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; }