コード例 #1
0
ファイル: GangAI.cs プロジェクト: UmReal/GTA5GangMod
 void TryTakeTurf(TurfZone targetZone)
 {
     if (targetZone == null || targetZone.ownerGangName == watchedGang.name)
     {
         return;                                                                                 //whoops, there just isn't any zone available for our gang
     }
     if (targetZone.ownerGangName == "none")
     {
         //this zone is neutral, lets just take it
         if (watchedGang.moneyAvailable >= ModOptions.instance.baseCostToTakeTurf)
         {
             watchedGang.moneyAvailable -= ModOptions.instance.baseCostToTakeTurf;
             watchedGang.TakeZone(targetZone);
         }
     }
     else
     {
         TryStartFightForZone(targetZone);
     }
 }
コード例 #2
0
        public void EndWar(bool playerVictory)
        {
            if (playerVictory)
            {
                int battleProfit = GangManager.CalculateBattleRewards(enemyGang, curWarType == warType.attackingEnemy);
                GangManager.instance.AddOrSubtractMoneyToProtagonist
                    (battleProfit);

                UI.Notify("Victory rewards: $" + battleProfit.ToString());

                if (curWarType == warType.attackingEnemy)
                {
                    GangManager.instance.PlayerGang.TakeZone(warZone);

                    UI.ShowSubtitle(warZone.zoneName + " is now ours!");
                }
                else
                {
                    UI.ShowSubtitle(warZone.zoneName + " remains ours!");
                }

                AmbientGangMemberSpawner.instance.postWarBackupsRemaining = ModOptions.instance.postWarBackupsAmount;
            }
            else
            {
                enemyGang.moneyAvailable += (int)
                                            (GangManager.CalculateBattleRewards(GangManager.instance.PlayerGang, curWarType != warType.attackingEnemy) *
                                             ModOptions.instance.extraProfitForAIGangsFactor);
                if (curWarType == warType.attackingEnemy)
                {
                    UI.ShowSubtitle("We've lost this battle. They keep the turf.");
                }
                else
                {
                    enemyGang.TakeZone(warZone);
                    UI.ShowSubtitle(warZone.zoneName + " has been taken by the " + enemyGang.name + "!");
                }
            }

            CheckIfBattleWasUnfair();
            Function.Call(Hash.PLAY_SOUND_FRONTEND, -1, "ScreenFlash", "WastedSounds");
            warBlip.Remove();
            shouldDisplayReinforcementsTexts = false;
            isOccurring = false;
            AmbientGangMemberSpawner.instance.enabled = true;
            GangManager.instance.GetGangAI(enemyGang).ticksSinceLastFightWithPlayer = 0;

            if (alliedSpawnBlip != null)
            {
                alliedSpawnBlip.Remove();
                enemySpawnBlip.Remove();
            }
        }
コード例 #3
0
        public void EndWar(bool playerVictory)
        {
            bool weWereAttacking = curWarType == WarType.attackingEnemy;

            if (playerVictory)
            {
                int battleProfit = GangCalculations.CalculateBattleRewards(enemyGang, weWereAttacking ? warZone.value : (int)curWarAtkStrength, weWereAttacking);
                MindControl.instance.AddOrSubtractMoneyToProtagonist
                    (battleProfit);

                UI.Notify("Victory rewards: $" + battleProfit.ToString());

                if (weWereAttacking)
                {
                    GangManager.instance.PlayerGang.TakeZone(warZone);

                    UI.ShowSubtitle(warZone.zoneName + " is now ours!");
                }
                else
                {
                    UI.ShowSubtitle(warZone.zoneName + " remains ours!");
                }

                AmbientGangMemberSpawner.instance.postWarBackupsRemaining = ModOptions.instance.postWarBackupsAmount;
            }
            else
            {
                enemyGang.moneyAvailable += (int)
                                            (GangCalculations.CalculateBattleRewards(GangManager.instance.PlayerGang, !weWereAttacking ? warZone.value : (int)curWarAtkStrength, !weWereAttacking) *
                                             ModOptions.instance.extraProfitForAIGangsFactor);
                if (curWarType == WarType.attackingEnemy)
                {
                    UI.ShowSubtitle("We've lost this battle. They keep the turf.");
                }
                else
                {
                    enemyGang.TakeZone(warZone);
                    UI.ShowSubtitle(warZone.zoneName + " has been taken by the " + enemyGang.name + "!");
                }
            }

            CheckIfBattleWasUnfair();
            Function.Call(Hash.PLAY_SOUND_FRONTEND, -1, "ScreenFlash", "WastedSounds");
            warBlip.Remove();
            warAreaBlip.Remove();
            shouldDisplayReinforcementsTexts = false;
            isOccurring       = false;
            playerNearWarzone = false;
            AmbientGangMemberSpawner.instance.enabled = true;

            if (!weWereAttacking)
            {
                //prevent the player from being attacked again too early
                timeLastWarAgainstPlayer = ModCore.curGameTime;
            }

            if (enemySpawnBlip != null)
            {
                enemySpawnBlip.Remove();
            }

            foreach (Blip alliedBlip in alliedSpawnBlips)
            {
                if (alliedBlip != null)
                {
                    alliedBlip.Remove();
                }
            }

            //reset relations to whatever is set in modoptions
            GangManager.instance.SetGangRelationsAccordingToAggrLevel(ModOptions.instance.gangMemberAggressiveness);
        }
コード例 #4
0
ファイル: GangAI.cs プロジェクト: EVIKA2732/GTA5GangMod
        void TryTakeTurf(TurfZone targetZone)
        {
            if (targetZone == null || targetZone.ownerGangName == watchedGang.name)
            {
                return;                                                                     //whoops, there just isn't any zone available for our gang
            }
            if (targetZone.ownerGangName == "none")
            {
                //this zone is neutral, lets just take it
                //we make it cheaper for the AI to get neutral zones in order to not make the world a gangless place haha
                if (watchedGang.moneyAvailable >= ModOptions.instance.baseCostToTakeTurf / 10)
                {
                    watchedGang.moneyAvailable -= ModOptions.instance.baseCostToTakeTurf / 10;
                    watchedGang.TakeZone(targetZone);
                }
            }
            else
            {
                Gang ownerGang = GangManager.instance.GetGangByName(targetZone.ownerGangName);

                if (ownerGang == null)
                {
                    ZoneManager.instance.GiveGangZonesToAnother(targetZone.ownerGangName, "none");
                    //this zone was controlled by a gang that no longer exists. it is neutral now
                    if (watchedGang.moneyAvailable >= ModOptions.instance.baseCostToTakeTurf / 10)
                    {
                        watchedGang.moneyAvailable -= ModOptions.instance.baseCostToTakeTurf / 10;
                        watchedGang.TakeZone(targetZone);
                    }
                }
                else
                {
                    if (GangWarManager.instance.isOccurring && GangWarManager.instance.warZone == targetZone)
                    {
                        //don't mess with this zone then, it's a warzone
                        return;
                    }
                    //we check how well defended this zone is,
                    //then figure out how large our attack should be.
                    //if we can afford that attack, we do it
                    int defenderStrength = GangManager.CalculateDefenderStrength(ownerGang, targetZone);
                    GangWarManager.attackStrength requiredStrength = GangManager.CalculateRequiredAttackStrength(watchedGang, defenderStrength);
                    int atkCost = GangManager.CalculateAttackCost(watchedGang, requiredStrength);
                    if (watchedGang.moneyAvailable >= atkCost)
                    {
                        if (targetZone.ownerGangName == GangManager.instance.PlayerGang.name)
                        {
                            if (ModOptions.instance.fightingEnabled &&
                                ModOptions.instance.warAgainstPlayerEnabled &&
                                ticksSinceLastFightWithPlayer > ModOptions.instance.minGangAITicksBetweenBattlesWithSameGang)
                            {
                                //the player may be in big trouble now
                                watchedGang.moneyAvailable -= atkCost;
                                GangWarManager.instance.StartWar(watchedGang, targetZone, GangWarManager.warType.defendingFromEnemy, requiredStrength);
                            }
                        }
                        else
                        {
                            watchedGang.moneyAvailable -= atkCost;
                            //roll dices... favor the defenders a little here
                            if (atkCost / ModOptions.instance.baseCostToTakeTurf * RandoMath.CachedRandom.Next(1, 20) >
                                defenderStrength / RandoMath.CachedRandom.Next(1, 15))
                            {
                                watchedGang.TakeZone(targetZone);
                                watchedGang.moneyAvailable += (int)(GangManager.CalculateBattleRewards(ownerGang, true) *
                                                                    ModOptions.instance.extraProfitForAIGangsFactor);
                            }
                            else
                            {
                                ownerGang.moneyAvailable += (int)(GangManager.CalculateBattleRewards(watchedGang, false) *
                                                                  ModOptions.instance.extraProfitForAIGangsFactor);
                            }
                        }
                    }
                    else if (myZones.Count == 0)
                    {
                        //if we're out of turf and cant afford a decent attack, lets just attack anyway
                        //we use a light attack and do it even if that means our money gets negative.
                        //this should make gangs get back in the game or be wiped out instead of just staying away
                        atkCost = GangManager.CalculateAttackCost(watchedGang, GangWarManager.attackStrength.light);
                        if (targetZone.ownerGangName == GangManager.instance.PlayerGang.name)
                        {
                            if (ModOptions.instance.fightingEnabled &&
                                ModOptions.instance.warAgainstPlayerEnabled &&
                                ticksSinceLastFightWithPlayer > ModOptions.instance.minGangAITicksBetweenBattlesWithSameGang)
                            {
                                //the player may be in big trouble now
                                watchedGang.moneyAvailable -= atkCost;
                                GangWarManager.instance.StartWar(watchedGang, targetZone, GangWarManager.warType.defendingFromEnemy, requiredStrength);
                            }
                        }
                        else
                        {
                            watchedGang.moneyAvailable -= atkCost;
                            //roll dices... favor the defenders a little here
                            if (atkCost / ModOptions.instance.baseCostToTakeTurf * RandoMath.CachedRandom.Next(1, 20) >
                                defenderStrength / RandoMath.CachedRandom.Next(1, 15))
                            {
                                watchedGang.TakeZone(targetZone);
                                watchedGang.moneyAvailable += (int)(GangManager.CalculateBattleRewards(ownerGang, true) *
                                                                    ModOptions.instance.extraProfitForAIGangsFactor);
                            }
                            else
                            {
                                ownerGang.moneyAvailable += (int)(GangManager.CalculateBattleRewards(watchedGang, false) *
                                                                  ModOptions.instance.extraProfitForAIGangsFactor);
                            }
                        }
                    }
                }
            }
        }