Example #1
0
        public static void OnPlayerConnectedLate(Players.Player p)
        {
            if (p == null || p.Colonies == null || p.Colonies.Length == 0)
            {
                return;
            }

            if (SettlersConfiguration.GetorDefault("SettlersEnabled", true) &&
                SettlersConfiguration.GetorDefault("MaxSettlersToggle", 4) > 0 &&
                p.ActiveColony != null)
            {
                var cs = ColonyState.GetColonyState(p.ActiveColony);

                if (cs.SettlersEnabled != SettlersState.Disabled && SettlersConfiguration.GetorDefault("ColonistsRecruitment", true))
                {
                    PandaChat.Send(p, _localizationHelper, "BuyingColonists", ChatColor.orange, MAX_BUYABLE.ToString(), cs.Difficulty.GetorDefault("UnhappyColonistsBought", 1).ToString());
                }

                if (cs.SettlersToggledTimes < SettlersConfiguration.GetorDefault("MaxSettlersToggle", 4))
                {
                    PandaChat.Send(p, _localizationHelper, "SettlersEnabled", ChatColor.orange, cs.SettlersEnabled.ToString());
                }
            }

            foreach (Colony c in p.Colonies)
            {
                UpdateFoodUse(ColonyState.GetColonyState(c));
                c.SendCommonData();
            }
        }
        public static void OnPlayerConnectedLate(Players.Player p)
        {
            if (p == null || p.Colonies == null || p.Colonies.Length == 0)
            {
                return;
            }

            if (SettlersConfiguration.GetorDefault("SettlersEnabled", true) &&
                SettlersConfiguration.GetorDefault("MaxSettlersToggle", 4) > 0 &&
                p.ActiveColony != null)
            {
                var cs = ColonyState.GetColonyState(p.ActiveColony);

                if (cs.SettlersToggledTimes < SettlersConfiguration.GetorDefault("MaxSettlersToggle", 4))
                {
                    PandaChat.Send(p, _localizationHelper, "SettlersEnabled", ChatColor.orange, cs.SettlersEnabled.ToString());
                }
            }

            foreach (Colony c in p.Colonies)
            {
                UpdateFoodUse(ColonyState.GetColonyState(c));
                c.SendCommonData();
            }
        }
Example #3
0
 public static void AfterWorldLoad()
 {
     foreach (var p in ServerManager.ColonyTracker.ColoniesByID.Values)
     {
         UpdateFoodUse(ColonyState.GetColonyState(p));
     }
 }
        public static void UpdateFoodUse(ColonyState state)
        {
            //if (ServerManager.TerrainGenerator != null)
            //{
            //    var food = _baseFoodPerHour;

            //    if (state.Difficulty != GameDifficulty.Normal && state.ColonyRef.FollowerCount > 10)
            //    {
            //        var multiplier = .4 - state.ColonyRef.TemporaryData.GetAsOrDefault(GameLoader.NAMESPACE + ".ReducedWaste", 0f);
            //        multiplier = (multiplier + state.Difficulty.FoodMultiplier);

            //        food -= (float)((_baseFoodPerHour * multiplier));
            //    }

            //    if (state.ColonyRef.InSiegeMode)
            //        food -= food * .4f;


            //    state.FoodPerHour = food;

            //    foreach (var npc in state.ColonyRef.Followers)
            //        npc.FoodHoursCarried = food;

            //    state.ColonyRef.SendCommonData();
            //}
        }
Example #5
0
        public void SetNPC(NPCBase npc)
        {
            NPC = npc;

            if (npc != null)
            {
                NeedsNPC     = false;
                IsValid      = true;
                Owner        = npc.Colony;
                _tmpVals     = npc.CustomData;
                _colony      = npc.Colony;
                _inv         = SettlerInventory.GetSettlerInventory(npc);
                _colonyState = ColonyState.GetColonyState(_colony);
                _stock       = npc.Colony.Stockpile;
            }
            else
            {
                NeedsNPC     = true;
                IsValid      = false;
                Owner        = null;
                _inv         = null;
                _tmpVals     = null;
                _colony      = null;
                _colonyState = null;
                _stock       = null;
            }
        }
Example #6
0
        public static void PressButton(ButtonPressCallbackData data)
        {
            if (!data.ButtonIdentifier.Contains(GameLoader.NAMESPACE + ".NewSettlers") &&
                !data.ButtonIdentifier.Contains("Decline"))
            {
                return;
            }

            var replaceOne = data.ButtonIdentifier.Replace(GameLoader.NAMESPACE + ".NewSettlers.", "");
            var val        = replaceOne.Substring(0, replaceOne.IndexOf('.'));

            if (int.TryParse(val, out int colonyId) && ServerManager.ColonyTracker.ColoniesByID.TryGetValue(colonyId, out var colony))
            {
                foreach (var p in colony.Owners)
                {
                    if (p.IsConnected())
                    {
                        NetworkMenuManager.CloseServerPopup(p);
                    }
                }

                if (data.ButtonIdentifier.Contains(".Decline"))
                {
                    return;
                }

                var recruitmentInfoStr = replaceOne.Substring(val.Length).Replace(".Accept.", "");
                var unparsedString     = recruitmentInfoStr.Split('.');
                var addCount           = int.Parse(unparsedString[0]);
                var numbSkilled        = int.Parse(unparsedString[1]);
                var state = ColonyState.GetColonyState(colony);

                AddNewSettlers(addCount, numbSkilled, state);
            }
        }
        public static bool ChangeDifficulty(Players.Player player, ColonyState state, string difficulty)
        {
            if (APIConfiguration.DifficutlyCanBeChanged)
            {
                if (!GameDifficulty.GameDifficulties.ContainsKey(difficulty))
                {
                    UnknownCommand(player, difficulty);
                    return(true);
                }

                var newDiff = GameDifficulty.GameDifficulties[difficulty];

                if (newDiff.Rank >= APIConfiguration.MinDifficulty.Rank)
                {
                    state.Difficulty = newDiff;

                    PandaChat.Send(player, _localizationHelper, "CurrentDifficulty", ChatColor.green, state.Difficulty.Name);

                    NetworkUI.NetworkMenuManager.SendColonySettingsUI(player);
                    return(true);
                }

                NetworkUI.NetworkMenuManager.SendColonySettingsUI(player);
                PandaChat.Send(player, _localizationHelper, "DisabledBelow", ChatColor.green, APIConfiguration.MinDifficulty.Name);
            }

            return(true);
        }
Example #8
0
        public static void ChangedSetting(ValueTuple <Players.Player, JSONNode, string> data)
        {
            if (data.Item1.ActiveColony != null)
            {
                switch (data.Item3)
                {
                case "server_popup":
                    var cs             = ColonyState.GetColonyState(data.Item1.ActiveColony);
                    var maxToggleTimes = SettlersConfiguration.GetorDefault("MaxSettlersToggle", 4);

                    if (cs != null)
                    {
                        if (!SettlersConfiguration.GetorDefault("SettlersEnabled", true))
                        {
                            PandaChat.Send(data.Item1, _localizationHelper, "AdminDisabledSettlers", ChatColor.red);
                        }
                        else if (!HasToggeledMaxTimes(maxToggleTimes, cs, data.Item1))
                        {
                            var def     = (int)cs.SettlersEnabled;
                            var enabled = data.Item2.GetAsOrDefault(_Setters, def);

                            if (def != enabled)
                            {
                                TurnSettlersOn(data.Item1, cs, maxToggleTimes, (SettlersState)enabled);
                                PandaChat.Send(data.Item1, _localizationHelper, "SettlersState", ChatColor.green, cs.SettlersEnabled.ToString());
                            }
                        }
                    }

                    break;
                }
            }
        }
        public static void PressButton(ButtonPressCallbackData data)
        {
            if (!data.ButtonIdentifier.Contains(GameLoader.NAMESPACE + ".NewSettlers.Accept.") &&
                !data.ButtonIdentifier.Contains(GameLoader.NAMESPACE + ".NewSettlers.Decline"))
            {
                return;
            }

            foreach (var p in data.Player.ActiveColony.Owners)
            {
                if (p.IsConnected())
                {
                    NetworkMenuManager.CloseServerPopup(p);
                }
            }

            if (data.ButtonIdentifier.Contains(GameLoader.NAMESPACE + ".NewSettlers.Accept."))
            {
                var recruitmentInfoStr = data.ButtonIdentifier.Replace(GameLoader.NAMESPACE + ".NewSettlers.Accept.", "");
                var unparsedString     = recruitmentInfoStr.Split('.');
                var addCount           = int.Parse(unparsedString[0]);
                var numbSkilled        = int.Parse(unparsedString[1]);
                var state = ColonyState.GetColonyState(data.Player.ActiveColony);

                AddNewSettlers(addCount, numbSkilled, state);
            }
        }
Example #10
0
        public static bool ChangeDifficulty(Players.Player player, ColonyState state, string difficulty)
        {
            if (SettlersConfiguration.DifficutlyCanBeChanged)
            {
                if (!GameDifficulty.GameDifficulties.ContainsKey(difficulty))
                {
                    UnknownCommand(player, difficulty);
                    return(true);
                }

                var newDiff = GameDifficulty.GameDifficulties[difficulty];

                if (newDiff.Rank >= SettlersConfiguration.MinDifficulty.Rank)
                {
                    state.Difficulty = newDiff;
                    SettlerManager.UpdateFoodUse(state);
                    state.Difficulty.Print(player);

                    PandaChat.Send(player, "Settlers! Mod difficulty set to {0}.", ChatColor.green,
                                   state.Difficulty.Name);

                    NetworkUI.NetworkMenuManager.SendColonySettingsUI(player);
                    return(true);
                }

                NetworkUI.NetworkMenuManager.SendColonySettingsUI(player);
                PandaChat.Send(player, "The server administrator had disabled setting your difficulty below {0}.",
                               ChatColor.green, SettlersConfiguration.MinDifficulty.Name);
            }

            return(true);
        }
        private static void AddNewSettlers(double addCount, int numbSkilled, ColonyState state)
        {
            var reason = string.Format(SettlerReasoning.GetSettleReason(), addCount);

            if (numbSkilled > 0)
            {
                if (numbSkilled == 1)
                {
                    reason += string.Format(" {0} of them is skilled!", numbSkilled);
                }
                else
                {
                    reason += string.Format(" {0} of them are skilled!", numbSkilled);
                }
            }

            PandaChat.Send(state.ColonyRef, reason, ChatColor.magenta);

            for (var i = 0; i < addCount; i++)
            {
                var newGuy = new NPCBase(state.ColonyRef, state.ColonyRef.GetRandomBanner().Position);

                NPCTracker.Add(newGuy);
                state.ColonyRef.RegisterNPC(newGuy);
                SettlerInventory.GetSettlerInventory(newGuy);
                newGuy.CustomData.SetAs(ISSETTLER, true);

                if (i <= numbSkilled)
                {
                    newGuy.CustomData.SetAs(GameLoader.ALL_SKILLS, Random.Next(1, 10) * 0.002f);
                }

                ModLoader.Callbacks.OnNPCRecruited.Invoke(newGuy);
            }
        }
        private static bool EvaluateBeds(ColonyState state)
        {
            var update = false;

            try
            {
                if (!TimeCycle.IsDay && Time.SecondsSinceStartDouble > _nextbedTime)
                {
                    if (state.ColonyRef.OwnerIsOnline())
                    {
                        // TODO Fix bed count
                        var remainingBeds = ServerManager.BlockEntityTracker.BedTracker.CalculateBedCount(state.ColonyRef) - state.ColonyRef.FollowerCount;
                        var left          = 0;

                        if (remainingBeds >= 0)
                        {
                            state.NeedsABed = 0;
                        }
                        else
                        {
                            if (state.NeedsABed == 0)
                            {
                                state.NeedsABed = Time.SecondsSinceStartDouble + LOABOROR_LEAVE_HOURS;
                                PandaChat.Send(state.ColonyRef, SettlerReasoning.GetNeedBed(), ChatColor.grey);
                            }

                            if (state.NeedsABed != 0 && state.NeedsABed < Time.SecondsSinceStartDouble)
                            {
                                foreach (var follower in state.ColonyRef.Followers)
                                {
                                    if (follower.UsedBed == null)
                                    {
                                        left++;
                                        NPCLeaving(follower);
                                    }
                                }

                                state.NeedsABed = 0;
                            }

                            if (left > 0)
                            {
                                PandaChat.Send(state.ColonyRef, string.Concat(SettlerReasoning.GetNoBed(), string.Format(" {0} colonists have left your colony.", left)), ChatColor.red);
                                update = true;
                            }
                        }

                        state.ColonyRef.SendCommonData();
                    }

                    _nextbedTime = Time.SecondsSinceStartDouble + Random.Next(5, 8) * IN_GAME_HOUR_IN_SECONDS * 24;
                }
            }
            catch (Exception ex)
            {
                PandaLogger.LogError(ex, "EvaluateBeds");
            }

            return(update);
        }
        public static void UpdateFoodUse(ColonyState state)
        {
            if (ServerManager.TerrainGenerator != null &&
                AIManager.NPCPathFinder != null)
            {
                var food = _baseFoodPerHour;

                if (state.Difficulty != GameDifficulty.Normal && state.ColonyRef.FollowerCount > 10)
                {
                    var multiplier = .7 / state.ColonyRef.FollowerCount -
                                     state.ColonyRef.TemporaryData.GetAsOrDefault(PandaResearch.GetResearchKey(PandaResearch.ReducedWaste), 0f);

                    food += (float)(_baseFoodPerHour * multiplier);
                    food *= state.Difficulty.FoodMultiplier;
                }

                if (state.ColonyRef.InSiegeMode)
                {
                    food = food * ServerManager.ServerSettings.NPCs.FoodUseMultiplierSiegeMode;
                }

                if (food < _baseFoodPerHour)
                {
                    food = _baseFoodPerHour;
                }

                state.ColonyRef.FoodUsePerHour = food;
                state.ColonyRef.SendCommonData();
            }
        }
        private static bool EvaluateBeds(ColonyState state)
        {
            var update = false;

            //try
            //{
            //    if (!TimeCycle.IsDay && TimeCycle.TotalHours > state.NextBedTime)
            //    {
            //        var remainingBeds = state.ColonyRef.BedTracker.CalculateTotalBedCount() - state.ColonyRef.FollowerCount;
            //        var left          = 0;

            //        if (remainingBeds >= 0)
            //        {
            //            state.NeedsABed = 0;
            //        }
            //        else
            //        {
            //            if (state.NeedsABed == 0)
            //            {
            //                state.NeedsABed = TimeCycle.TotalHours + 24;
            //                PandaChat.Send(state.ColonyRef, _localizationHelper, SettlerReasoning.GetNeedBed(), ChatColor.grey);
            //            }
            //            else if (state.NeedsABed <= TimeCycle.TotalHours)
            //            {
            //                List<NPCBase> leaving = new List<NPCBase>();

            //                foreach (var follower in state.ColonyRef.Followers)
            //                    if (follower.UsedBed == null)
            //                    {
            //                        left++;
            //                        leaving.Add(follower);
            //                    }

            //                state.NeedsABed = 0;

            //                foreach (var npc in leaving)
            //                    NPCLeaving(npc);
            //            }

            //            if (left > 0)
            //            {
            //                PandaChat.Send(state.ColonyRef, _localizationHelper, string.Concat(SettlerReasoning.GetNoBed(), string.Format(" {0} colonists have left your colony.", left)), ChatColor.red);
            //                update = true;
            //            }


            //            state.ColonyRef.SendCommonData();
            //        }

            //        state.NextBedTime = TimeCycle.TotalHours + Random.Next(5, 8);
            //    }
            //}
            //catch (Exception ex)
            //{
            //    SettlersLogger.LogError(ex, "EvaluateBeds");
            //}

            return(update);
        }
 public static void OnNPCHit(NPCBase npc, ModLoader.OnHitData d)
 {
     if (d.ResultDamage > 0 && d.HitSourceType == ModLoader.OnHitData.EHitSourceType.Monster && !(d.HitSourceObject is IPandaZombie))
     {
         var state = ColonyState.GetColonyState(npc.Colony);
         d.ResultDamage += state.Difficulty.MonsterDamage;
     }
 }
 public static void OnPlayerHit(Players.Player player, ModLoader.OnHitData d)
 {
     if (d.ResultDamage > 0 && d.HitSourceType == ModLoader.OnHitData.EHitSourceType.Monster && player.ActiveColony != null && !(d.HitSourceObject is IPandaZombie))
     {
         var state = ColonyState.GetColonyState(player.ActiveColony);
         d.ResultDamage += state.Difficulty.MonsterDamage;
     }
 }
Example #17
0
        private static void UpdateMagicItemms(ColonyState state)
        {
            try
            {
                if (state.HealingUpdateTime < Time.SecondsSinceStartDouble)
                {
                    var colony = state.ColonyRef;

                    foreach (var follower in colony.Followers)
                    {
                        var inv = ColonistInventory.Get(follower);

                        if (inv.HealingItemUpdateTime < Time.SecondsSinceStartDouble)
                        {
                            var hasBandages = colony.Stockpile.Contains(TreatedBandage.Item.ItemIndex) ||
                                              colony.Stockpile.Contains(Bandage.Item.ItemIndex);

                            if (hasBandages &&
                                follower.health < follower.Colony.NPCHealthMax &&
                                !HealingOverTimeNPC.NPCIsBeingHealed(follower))
                            {
                                var healing = false;

                                if (follower.Colony.NPCHealthMax - follower.health > TreatedBandage.INITIALHEAL)
                                {
                                    colony.Stockpile.TryRemove(TreatedBandage.Item.ItemIndex);
                                    healing = true;
                                    AudioManager.SendAudio(follower.Position.Vector, GameLoader.NAMESPACE + ".Bandage");

                                    var heal = new HealingOverTimeNPC(follower, TreatedBandage.INITIALHEAL,
                                                                      TreatedBandage.TOTALHOT, 5,
                                                                      TreatedBandage.Item.ItemIndex);
                                }

                                if (!healing)
                                {
                                    colony.Stockpile.TryRemove(Bandage.Item.ItemIndex);
                                    healing = true;
                                    AudioManager.SendAudio(follower.Position.Vector, GameLoader.NAMESPACE + ".Bandage");

                                    var heal = new HealingOverTimeNPC(follower, Bandage.INITIALHEAL, Bandage.TOTALHOT, 5,
                                                                      Bandage.Item.ItemIndex);
                                }
                            }


                            inv.HealingItemUpdateTime = Time.SecondsSinceStartDouble + Random.Next(3, 5);
                        }
                    }

                    state.HealingUpdateTime = Time.SecondsSinceStartDouble + 5;
                }
            }
            catch (Exception ex)
            {
                SettlersLogger.LogError(ex);
            }
        }
Example #18
0
 public static void AddSetting(Players.Player player, NetworkUI.NetworkMenu menu)
 {
     if (player.ActiveColony != null)
     {
         menu.Items.Add(new NetworkUI.Items.DropDown("Settlers Difficulty", _Difficulty, GameDifficulty.GameDifficulties.Keys.ToList()));
         var ps = ColonyState.GetColonyState(player.ActiveColony);
         menu.LocalStorage.SetAs(_Difficulty, ps.Difficulty.Rank);
     }
 }
Example #19
0
        public Hoarder(Path path, Colony originalGoal) :
            base(NPCType.GetByKeyNameOrDefault(Key), path, originalGoal)
        {
            var ps = ColonyState.GetColonyState(originalGoal);

            _totalHealth  = originalGoal.FollowerCount * ps.Difficulty.BossHPPerColonist;
            TotalHealth   = _totalHealth;
            CurrentHealth = _totalHealth;
        }
Example #20
0
        /// <summary>
        /// Renders the statistic-box.
        /// </summary>
        /// <param name="state"><see cref="SimulationState"/></param>
        public void RenderInfobox(SimulationState state)
        {
            int player = 0;

            for (int i = 0; i < state.TeamStates.Count; i++)
            {
                player += state.TeamStates[i].ColonyStates.Count;
            }

            int height   = ROWHEIGHT * player + 60;
            int position = (height / 2) + 10;

            line.Width = height;
            line.Begin();
            line.Draw
            (
                new Vector2[] { new Vector2(10, position), new Vector2(500, position) },
                Color.FromArgb(100, Color.White).ToArgb());
            line.End();

            fontNormal.DrawText(null, Resource.InfoboxColumnColony2, 20, ROWHEIGHT + 20, Color.Black);

            fontNormal.DrawText(null, Resource.InfoboxColumnCollectedFood1, 200, 20, Color.Green);
            fontNormal.DrawText(null, Resource.InfoboxColumnCollectedFood2, 200, ROWHEIGHT + 20, Color.Green);

            fontNormal.DrawText(null, Resource.InfoboxColumnKilledAnts1, 290, 20, Color.Red);
            fontNormal.DrawText(null, Resource.InfoboxColumnKilledAnts2, 290, ROWHEIGHT + 20, Color.Red);

            fontNormal.DrawText(null, Resource.InfoboxColumnKilledBugs1, 370, 20, Color.Blue);
            fontNormal.DrawText(null, Resource.InfoboxColumnKilledBugs2, 370, ROWHEIGHT + 20, Color.Blue);

            fontNormal.DrawText(null, Resource.InfoboxColumnPoints2, 440, ROWHEIGHT + 20, Color.Black);

            int count = 0;

            for (int i = 0; i < state.TeamStates.Count; i++)
            {
                for (int j = 0; j < state.TeamStates[i].ColonyStates.Count; j++)
                {
                    ColonyState colony     = state.TeamStates[i].ColonyStates[j];
                    int         killedAnts = colony.StarvedAnts + colony.EatenAnts + colony.BeatenAnts;

                    fontBold.DrawText
                        (null, colony.ColonyName, 20, count * ROWHEIGHT + 55, antMaterial[count].Emissive);
                    fontNormal.DrawText
                        (null, colony.CollectedFood.ToString(), 200, count * ROWHEIGHT + 55, Color.Green);
                    fontNormal.DrawText
                        (null, killedAnts.ToString(), 290, count * ROWHEIGHT + 55, Color.Red);
                    fontNormal.DrawText
                        (null, colony.KilledBugs.ToString(), 370, count * ROWHEIGHT + 55, Color.Blue);
                    fontBold.DrawText
                        (null, colony.Points.ToString(), 440, count * ROWHEIGHT + 55, Color.Black);
                    count++;
                }
            }
        }
        public void PathingThreadAction(PathingContext context)
        {
            foreach (var colony in ServerManager.ColonyTracker.ColoniesByID.Values)
            {
                List <IPandaZombie> canSpawn = PandaZombies.Where(p => p.MinColonists < colony.FollowerCount).ToList();

                if (canSpawn.Count > 0 && colony.DifficultySetting.ShouldSpawnZombies(colony))
                {
                    var bannerGoal = colony?.Banners?.FirstOrDefault();

                    if (bannerGoal == null)
                    {
                        continue;
                    }

                    var cs = ColonyState.GetColonyState(colony);

                    if (cs.ColonyRef.OwnerIsOnline())
                    {
                        Vector3Int positionFinal;
                        var        max = Math.RoundToInt(colony.FollowerCount / 100) + 1;

                        if (max == 0)
                        {
                            max = 1;
                        }

                        for (int i = 0; i < max; i++)
                        {
                            var zombie = canSpawn.GetRandomItem();

                            switch (((MonsterSpawner)MonsterTracker.MonsterSpawner).TryGetSpawnLocation(context, bannerGoal.Position, bannerGoal.SafeRadius, 200, 500f, out positionFinal))
                            {
                            case MonsterSpawner.ESpawnResult.Success:
                                if (context.Pathing.TryFindPath(ref context, positionFinal, bannerGoal.Position, out var path, 2000000000) == EPathFindingResult.Success)
                                {
                                    _spawnQueue.Enqueue(zombie.GetNewInstance(path, colony));
                                }

                                break;

                            case MonsterSpawner.ESpawnResult.NotLoaded:
                            case MonsterSpawner.ESpawnResult.Impossible:
                                colony.OnZombieSpawn(true);
                                break;

                            case MonsterSpawner.ESpawnResult.Fail:
                                colony.OnZombieSpawn(false);
                                break;
                            }
                        }
                    }
                }
            }
        }
        public float Evaluate(Colony colony)
        {
            var cs = ColonyState.GetColonyState(colony);

            if (cs.SettlersEnabled != SettlersState.Disabled && BoughtCount.TryGetValue(colony, out var count))
            {
                return((float)(count.Count * cs.Difficulty.GetorDefault("UnhappyColonistsBought", -1)));
            }

            return(0);
        }
Example #23
0
        public static void OnNPCDied(NPC.NPCBase nPC)
        {
            var cs = ColonyState.GetColonyState(nPC.Colony);

            if (!DieCount.ContainsKey(nPC.Colony))
            {
                DieCount.Add(nPC.Colony, new List <double>());
            }

            DieCount[nPC.Colony].Add(TimeCycle.TotalTime.Value.TotalSeconds + cs.Difficulty.TimeUnhappyAfterColonistDeathSeconds);
        }
        private static void CantSpawnBoss(ColonyState cs)
        {
            cs.FaiedBossSpawns++;

            if (cs.FaiedBossSpawns > 10)
            {
                PandaChat.SendThrottle(cs, _localizationHelper, "NoBanner", ChatColor.red, ColonistManager.PenalizeFood(cs.ColonyRef, 0.15f) * 100 + "%");
            }

            cs.ColonyRef.OnZombieSpawn(false);
        }
Example #25
0
        public float Evaluate(Colony colony)
        {
            var cs = ColonyState.GetColonyState(colony);

            if (DieCount.TryGetValue(colony, out var count))
            {
                return((float)(count.Count * cs.Difficulty.UnhappinessPerColonistDeath) * -1f);
            }

            return(0);
        }
        public float Evaluate(Colony colony)
        {
            var cs = ColonyState.GetColonyState(colony);

            if (cs.Difficulty.Name != GameDifficulty.Normal.Name && DieCount.TryGetValue(colony, out var count))
            {
                return((float)(count.Count * cs.Difficulty.GetorDefault("UnhappinessPerColonistDeath", 1)) * -1f);
            }

            return(0);
        }
Example #27
0
        public static void OnNPCRecruited(NPCBase npc)
        {
            try
            {
                var npcInv = ColonistInventory.Get(npc);
                if (npc.CustomData == null)
                {
                    npc.CustomData = new JSONNode();
                }

                if (npc.NPCType.IsLaborer)
                {
                    npcInv.UnemployedLeaveTime = TimeCycle.TotalHours + 48;
                }

                if (npc.CustomData.TryGetAs(ISSETTLER, out bool settler) && settler)
                {
                    return;
                }

                var ps = ColonyState.GetColonyState(npc.Colony);

                npc.FoodHoursCarried = ServerManager.ServerSettings.NPCs.InitialFoodCarriedHours;

                if (ps.SettlersEnabled != API.Models.SettlersState.Disabled)
                {
                    if (SettlersConfiguration.GetorDefault("ColonistsRecruitment", true))
                    {
                        if (npc.Colony.FollowerCount > MAX_BUYABLE)
                        {
                            if (!ColonistsBought.BoughtCount.ContainsKey(npc.Colony))
                            {
                                ColonistsBought.BoughtCount.Add(npc.Colony, new List <double>());
                            }

                            ColonistsBought.BoughtCount[npc.Colony].Add(TimeCycle.TotalHours + 24);
                        }

                        ColonistInventory.Get(npc);
                        UpdateFoodUse(ps);
                    }
                    else
                    {
                        PandaChat.Send(npc.Colony, _localizationHelper, "AdminDisabled", ChatColor.red);
                        npc.health = 0;
                        npc.Update();
                    }
                }
            }
            catch (Exception ex)
            {
                SettlersLogger.LogError(ex);
            }
        }
Example #28
0
        private static bool HasToggeledMaxTimes(int maxToggleTimes, ColonyState state, Players.Player player)
        {
            if (state.SettlersToggledTimes >= maxToggleTimes)
            {
                PandaChat.Send(player, _localizationHelper, "AbuseWarning", ChatColor.red, maxToggleTimes.ToString());

                return(true);
            }

            return(false);
        }
Example #29
0
        public static void AfterWorldLoad()
        {
            foreach (var colony in ServerManager.ColonyTracker.ColoniesByID.Values)
            {
                var cs = ColonyState.GetColonyState(colony);

                if (cs != null && cs.Difficulty.Rank < SettlersConfiguration.MinDifficulty.Rank)
                {
                    cs.Difficulty = SettlersConfiguration.MinDifficulty;
                }
            }
        }
 public static void AddSetting(Players.Player player, NetworkUI.NetworkMenu menu)
 {
     if (player.ActiveColony != null)
     {
         menu.Items.Add(new NetworkUI.Items.DropDown("Pandaros.API Bosses", _Bosses, new List <string>()
         {
             "Disabled", "Enabled"
         }));
         var ps = ColonyState.GetColonyState(player.ActiveColony);
         menu.LocalStorage.SetAs(_Bosses, Convert.ToInt32(ps.BossesEnabled));
     }
 }