コード例 #1
0
        public static void FightRound(militaryForce MFA, militaryForce MFB)
        {
            int randA = Rand.Range(0, 20);
            int randB = Rand.Range(0, 20);

            //Log.Message("A Begin: " + MFA.forceRemaining + " : " + MFB.forceRemaining + " B begin");
            //Log.Message("A Rolled: " + randA.ToString() + " : " + randB.ToString() + " B rolled");
            if (randA == randB)
            {
                return;
            }
            else
            if (randA > randB)
            {
                MFB.forceRemaining -= 1;
                return;
            }
            else
            if (randB > randA)
            {
                MFA.forceRemaining -= 1;
                return;
            }
            //Log.Message("A Remain: " + MFA.forceRemaining + " : " + MFB.forceRemaining + " B remain");
        }
コード例 #2
0
        public static int FightBattle(militaryForce MFA, militaryForce MFB)
        {
            int result = 0;

            try
            {
                //Log.Message("Starting battle");
                while (MFA.forceRemaining > 0 && MFB.forceRemaining > 0)
                {
                    // One number should always be reduced to 0
                    FightRound(MFA, MFB);
                }

                if (MFA.forceRemaining <= 0)
                {
                    //Log.Message("Defending Force has won.");
                    //b is winner
                    result = 1;
                }

                else
                {
                    //Log.Message("Attacking Force has won.");
                    //a is winner
                    result = 0;
                }
            }
            catch (Exception e)
            {
                Log.Error($"An exception occurred while resolving combat in Empire {System.Environment.NewLine}[{e}]");
                result = -1;
            }

            return(result);
        }
コード例 #3
0
 public static int FightBattle(militaryForce MFA, militaryForce MFB)
 {
     //Log.Message("Starting battle");
     while (MFA.forceRemaining > 0 && MFB.forceRemaining > 0)
     {
         FightRound(MFA, MFB);
     }
     if (MFA.forceRemaining <= 0)
     {
         //Log.Message("Defending Force has won.");
         //b is winner
         return(1);
     }
     else
     if (MFB.forceRemaining <= 0)
     {
         //Log.Message("Attacking Force has won.");
         //a is winner
         return(0);
     }
     else
     {
         Log.Message("FightBattle catch statement - Empire");
         //catch
         return(-1);
     }
 }
コード例 #4
0
        public static militaryForce createMilitaryForceFromSettlement(SettlementFC settlement, bool isAttacking = false,
                                                                      militaryForce homeDefendingForce          = null)
        {
            FactionFC faction            = Find.World.GetComponent <FactionFC>();
            int       militaryLevelBonus = 0;

            if (faction.hasTrait(FCPolicyDefOf.defenseInDepth) && isAttacking == false)
            {
                militaryLevelBonus += 2;
            }
            double homeForceLevel = 0;

            if (homeDefendingForce != null)
            {
                homeForceLevel = homeDefendingForce.militaryLevel;
            }

            double militaryLevel = settlement.settlementMilitaryLevel + militaryLevelBonus + homeForceLevel;
            double efficiency    =
                TraitUtilsFC.cycleTraits("militaryMultiplierCombatEfficiency", faction.traits,
                                         Operation.Multiplication) * TraitUtilsFC.cycleTraits("militaryMultiplierCombatEfficiency",
                                                                                              settlement.traits, Operation.Multiplication);

            if (isAttacking && faction.hasPolicy(FCPolicyDefOf.militaristic))
            {
                efficiency *= 1.2;
            }
            militaryForce returnForce = new militaryForce(militaryLevel, efficiency, settlement,
                                                          FactionColonies.getPlayerColonyFaction());

            return(returnForce);
            //create and return force.
        }
コード例 #5
0
        public static militaryForce createMilitaryForceFromEnemySettlement(Settlement settlement)
        {
            double militaryLevel;
            double efficiency;

            switch (settlement.Faction.def.techLevel)
            {
            case TechLevel.Undefined:
                militaryLevel = 1;
                efficiency    = .5;
                break;

            case TechLevel.Animal:
                militaryLevel = 2;
                efficiency    = .5;
                break;

            case TechLevel.Neolithic:
                militaryLevel = 3;
                efficiency    = 1;
                break;

            case TechLevel.Medieval:
                militaryLevel = 4;
                efficiency    = 1.2;
                break;

            case TechLevel.Industrial:
                militaryLevel = 4;
                efficiency    = 1.2;
                break;

            case TechLevel.Spacer:
                militaryLevel = 5;
                efficiency    = 1.3;
                break;

            case TechLevel.Ultra:
                militaryLevel = 6;
                efficiency    = 1.3;
                break;

            case TechLevel.Archotech:
                militaryLevel = 6;
                efficiency    = 1.5;
                break;

            default:
                militaryLevel = 1;
                efficiency    = 1;
                Log.Message("Defaulted createMilitaryForceFromEnemyFaction switch case - Empire Mod");
                break;
            }

            militaryForce returnForce = new militaryForce(militaryLevel, efficiency, null, settlement.Faction);

            return(returnForce);
        }
コード例 #6
0
        public static militaryForce createMilitaryForceFromSettlement(SettlementFC settlement)
        {
            //get efficiency from traits and settlement efficiency.
            double        militaryLevel = settlement.settlementMilitaryLevel;
            double        efficiency    = traitUtilsFC.cycleTraits(new double(), "militaryMultiplierCombatEfficiency", Find.World.GetComponent <FactionFC>().traits, "multiply") * traitUtilsFC.cycleTraits(new double(), "militaryMultiplierCombatEfficiency", settlement.traits, "multiply");
            militaryForce returnForce   = new militaryForce(militaryLevel, efficiency, settlement, FactionColonies.getPlayerColonyFaction());

            return(returnForce);
            //create and return force.
        }
コード例 #7
0
        public static void changeDefendingMilitaryForce(FCEvent evt, SettlementFC settlementOfMilitaryForce)
        {
            FactionFC     factionfc        = Find.World.GetComponent <FactionFC>();
            militaryForce tmpMilitaryForce = null;
            SettlementFC  homeSettlement   = factionfc.returnSettlementByLocation(evt.location, evt.planetName);

            if (settlementOfMilitaryForce == evt.militaryForceDefending.homeSettlement)
            {
                Messages.Message("militaryAlreadyDefendingSettlement".Translate(), MessageTypeDefOf.RejectInput);
                return;
            }

            WorldSettlementFC target = Find.World.worldObjects.WorldObjectAt <WorldSettlementFC>(evt.location);

            if (evt.militaryForceDefending.homeSettlement !=
                factionfc.returnSettlementByLocation(evt.location, evt.planetName))
            {
                //if the forces defending aren't the forces belonging to the settlement
                evt.militaryForceDefending.homeSettlement.returnMilitary(false);
            }

            if (settlementOfMilitaryForce != homeSettlement)
            {
                tmpMilitaryForce =
                    militaryForce.createMilitaryForceFromSettlement(
                        factionfc.returnSettlementByLocation(evt.location, evt.planetName), true);
            }

            factionfc.militaryTargets.Remove(evt.location);
            evt.militaryForceDefending =
                militaryForce.createMilitaryForceFromSettlement(settlementOfMilitaryForce,
                                                                homeDefendingForce: tmpMilitaryForce);

            target.defenderForce = evt.militaryForceDefending;

            if (settlementOfMilitaryForce == homeSettlement)
            {
                //if home settlement is reseting to defense
                Messages.Message("defendingMilitaryReset".Translate(), MessageTypeDefOf.NeutralEvent);
            }
            else
            {
                //if settlement is foreign
                settlementOfMilitaryForce.SendMilitary(evt.settlementFCDefending.mapLocation, evt.planetName,
                                                       util.MilitaryJob.DefendFriendlySettlement, -1, evt.militaryForceAttackingFaction);
                Find.LetterStack.ReceiveLetter("Military Action", "ForeignMilitarySwitch"
                                               .Translate(settlementOfMilitaryForce.name,
                                                          factionfc.returnSettlementByLocation(evt.location, evt.planetName).name,
                                                          evt.militaryForceDefending.militaryLevel), LetterDefOf.NeutralEvent);
            }
        }
コード例 #8
0
        public static void attackPlayerSettlement(militaryForce attackingForce, SettlementFC settlement,
                                                  Faction enemyFaction)
        {
            FactionFC factionfc = Find.World.GetComponent <FactionFC>();

            FCEvent tmp = FCEventMaker.MakeEvent(FCEventDefOf.settlementBeingAttacked);

            tmp.hasCustomDescription = true;
            tmp.timeTillTrigger      = Find.TickManager.TicksGame + 60000;
            tmp.location             = settlement.mapLocation;
            tmp.planetName           = settlement.planetName;
            tmp.hasDestination       = true;
            tmp.customDescription    = "settlementAboutToBeAttacked"
                                       .Translate(settlement.name, enemyFaction.Name);
            tmp.militaryForceDefending        = militaryForce.createMilitaryForceFromSettlement(settlement);
            tmp.militaryForceDefendingFaction = FactionColonies.getPlayerColonyFaction();
            tmp.militaryForceAttacking        = attackingForce;
            tmp.militaryForceAttackingFaction = enemyFaction;
            tmp.settlementFCDefending         = settlement;

            SettlementFC highest = null;

            foreach (SettlementFC settlementCompare in factionfc.settlements)
            {
                if (settlementCompare.autoDefend && settlementCompare.militaryBusy == false &&
                    settlementCompare.settlementMilitaryLevel > settlement.settlementMilitaryLevel &&
                    (highest == null || settlementCompare.settlementMilitaryLevel > highest.settlementMilitaryLevel))
                {
                    highest = settlementCompare;
                }
            }

            if (highest != null)
            {
                changeDefendingMilitaryForce(tmp, highest);
            }

            settlement.worldSettlement.defenderForce = tmp.militaryForceDefending;
            settlement.worldSettlement.attackerForce = tmp.militaryForceAttacking;

            Find.World.GetComponent <FactionFC>().addEvent(tmp);

            tmp.customDescription += "\n\nThe estimated attacking force's power is: " +
                                     tmp.militaryForceAttacking.forceRemaining;
            settlement.isUnderAttack = true;

            Find.LetterStack.ReceiveLetter("settlementInDanger".Translate(), tmp.customDescription,
                                           LetterDefOf.ThreatBig, new LookTargets(Find.WorldObjects.WorldObjectAt <WorldSettlementFC>(settlement.mapLocation)));
        }
コード例 #9
0
        public static void FightRound(militaryForce MFA, militaryForce MFB)
        {
            var randA = (Rand.Range(0, 20) * MFA.militaryEfficiency);
            var randB = (Rand.Range(0, 20) * MFA.militaryEfficiency);

            // Log.Message("A Begin: " + MFA.forceRemaining + " : " + MFB.forceRemaining + " B begin");
            // Log.Message("A Rolled: " + randA.ToString() + " : " + randB.ToString() + " B rolled");

            if (randA > randB)
            {
                MFB.forceRemaining -= 1;
            }
            else
            {
                MFA.forceRemaining -= 1;
            }
            //Log.Message("A Remain: " + MFA.forceRemaining + " : " + MFB.forceRemaining + " B remain");
        }
コード例 #10
0
        public static void attackPlayerSettlement(militaryForce attackingForce, SettlementFC settlement, Faction enemyFaction)
        {
            FCEvent tmp = FCEventMaker.MakeEvent(FCEventDefOf.settlementBeingAttacked);

            tmp.hasCustomDescription          = true;
            tmp.timeTillTrigger               = Find.TickManager.TicksGame + 60000;
            tmp.location                      = settlement.mapLocation;
            tmp.hasDestination                = true;
            tmp.customDescription             = TranslatorFormattedStringExtensions.Translate("settlementAboutToBeAttacked", settlement.name, enemyFaction.Name);// +
            tmp.militaryForceDefending        = militaryForce.createMilitaryForceFromSettlement(settlement);
            tmp.militaryForceDefendingFaction = FactionColonies.getPlayerColonyFaction();
            tmp.militaryForceAttacking        = attackingForce;
            tmp.militaryForceAttackingFaction = enemyFaction;
            tmp.settlementFCDefending         = settlement;
            Find.World.GetComponent <FactionFC>().addEvent(tmp);

            tmp.customDescription   += "\n\nThe estimated attacking force's power is: " + tmp.militaryForceAttacking.forceRemaining;
            settlement.isUnderAttack = true;

            Find.LetterStack.ReceiveLetter("settlementInDanger".Translate(), tmp.customDescription, LetterDefOf.ThreatBig, new LookTargets(Find.WorldObjects.SettlementAt(settlement.mapLocation)));
        }
コード例 #11
0
        public static militaryForce createMilitaryForceFromFaction(Faction faction, bool handicap)
        {
            double militaryLevel;
            double efficiency;

            switch (faction.def.techLevel)
            {
            case TechLevel.Undefined:
                militaryLevel = 1;
                efficiency    = .5;
                break;

            case TechLevel.Animal:
                militaryLevel = 2;
                efficiency    = .5;
                break;

            case TechLevel.Neolithic:
                militaryLevel = 3;
                efficiency    = 1;
                break;

            case TechLevel.Medieval:
                militaryLevel = 4;
                efficiency    = 1.2;
                break;

            case TechLevel.Industrial:
                militaryLevel = 4;
                efficiency    = 1.2;
                break;

            case TechLevel.Spacer:
                militaryLevel = 5;
                efficiency    = 1.3;
                break;

            case TechLevel.Ultra:
                militaryLevel = 6;
                efficiency    = 1.3;
                break;

            case TechLevel.Archotech:
                militaryLevel = 6;
                efficiency    = 1.5;
                break;

            default:
                militaryLevel = 1;
                efficiency    = 1;
                Log.Message("Defaulted createMilitaryForceFromEnemyFaction switch case - Empire Mod");
                break;
            }
            if (faction.def.defName == "VFEI_Insect")
            {
                militaryLevel = 4;
                efficiency    = 1.2;
            }
            double value = militaryLevel + FactionColonies.randomAttackModifier();

            if (handicap)
            {
                value = Math.Min(value, (2 + Math.Round((double)(Find.TickManager.TicksGame - Find.World.GetComponent <FactionFC>().timeStart - GenDate.TicksPerSeason) / GenDate.TicksPerSeason)));
                //Log.Message(value.ToString());
            }

            militaryForce returnForce = new militaryForce(value, efficiency, null, faction);

            return(returnForce);
        }
コード例 #12
0
        public static militaryForce createMilitaryForce(double strength, Faction faction)
        {
            militaryForce returnForce = new militaryForce(strength, 1, null, faction);

            return(returnForce);
        }