public static void IssueNotification(Players.Player player, localization.LocalizationHelper localizationHelper,
                                      string message,
                                      params string[] args)
 {
     if (player.IsConnected())
     {
         var messageBuilt = string.Format(localizationHelper.LocalizeOrDefault(message, player), PandaChat.LocalizeArgs(player, localizationHelper, args));
         IssueNotification(player, messageBuilt);
     }
 }
Example #2
0
        public string GetDescription(Colony colony, Players.Player player)
        {
            var localizationHelper = new localization.LocalizationHelper("Happiness");
            var name = "";
            var cs   = Entities.ColonyState.GetColonyState(colony);

            if (colony.HappinessData.CachedHappiness < 0)
            {
                float percent = 0.05f;

                if (colony.HappinessData.CachedHappiness < -20)
                {
                    percent = 0.10f;
                }

                if (colony.HappinessData.CachedHappiness < -50)
                {
                    percent = 0.15f;
                }

                if (colony.HappinessData.CachedHappiness < -70)
                {
                    percent = 0.20f;
                }

                if (colony.HappinessData.CachedHappiness < -100)
                {
                    percent = 0.25f;
                }

                percent = percent * cs.Difficulty.UnhappyGuardsMultiplyRate;

                foreach (var colonist in colony.Followers)
                {
                    colonist.ApplyJobResearch();

                    if (colonist.Job != null && colonist.Job.IsValid && colonist.TryGetNPCGuardSettings(out var guardJobSettings))
                    {
                        guardJobSettings.CooldownShot = guardJobSettings.CooldownShot - (guardJobSettings.CooldownShot * percent);
                    }
                }

                name = localizationHelper.LocalizeOrDefault("SlowGuards", player) + " " + Math.Round((percent * 100), 2) + "%";
            }
            else
            {
                foreach (var colonist in colony.Followers)
                {
                    colonist.ApplyJobResearch();
                }
            }

            return(name);
        }
Example #3
0
 public static void OnTryChangeBlockUser(ModLoader.OnTryChangeBlockData userData)
 {
     if (ServerManager.BlockEntityTracker.BannerTracker.TryGetClosest(userData.Position, out BannerTracker.Banner existingBanner, ServerManager.ServerSettings.Colony.ExclusiveRadius * 2))
     {
         if (userData.RequestOrigin.Type == BlockChangeRequestOrigin.EType.Player && !existingBanner.Colony.Owners.Contains(userData.RequestOrigin.AsPlayer))
         {
             PandaChat.SendThrottle(userData.RequestOrigin.AsPlayer, _LocalizationHelper.LocalizeOrDefault("NotYourColony", userData.RequestOrigin.AsPlayer) + string.Join(", ", existingBanner.Colony.Owners.Select(o => o.Name)), ChatColor.red);
             userData.CallbackState          = ModLoader.OnTryChangeBlockData.ECallbackState.Cancelled;
             userData.CallbackConsumedResult = EServerChangeBlockResult.CancelledByCallback;
         }
     }
 }
        public static bool EvaluateSettlers(ColonyState state)
        {
            var update = false;

            if (state.ColonyRef.OwnerIsOnline())
            {
                if (state.NextGenTime == 0)
                {
                    state.NextGenTime = Time.SecondsSinceStartDouble + Random.Next(8, 16) * IN_GAME_HOUR_IN_SECONDS;
                }

                if (Time.SecondsSinceStartDouble > state.NextGenTime && state.ColonyRef.FollowerCount >= MAX_BUYABLE)
                {
                    var chance =
                        state.ColonyRef.TemporaryData.GetAsOrDefault(GameLoader.NAMESPACE + ".SettlerChance", 0f) +
                        state.Difficulty.AdditionalChance;

                    chance += SettlerEvaluation.SpawnChance(state);

                    var rand = Random.NextFloat();

                    if (chance > rand)
                    {
                        var addCount = Math.Floor(state.MaxPerSpawn * chance);

                        // if we lost alot of colonists add extra to help build back up.
                        if (state.ColonyRef.FollowerCount < state.HighestColonistCount)
                        {
                            var diff = state.HighestColonistCount - state.ColonyRef.FollowerCount;
                            addCount += Math.Floor(diff * .25);
                        }

                        try
                        {
                            var skillChance = state.ColonyRef.TemporaryData.GetAsOrDefault(GameLoader.NAMESPACE + ".SkilledLaborer", 0f);
                            var numbSkilled = 0;
                            rand = Random.NextFloat();

                            try
                            {
                                if (skillChance > rand)
                                {
                                    numbSkilled = Pipliz.Random.Next(1,
                                                                     2 + Pipliz.Math.RoundToInt(state.ColonyRef.TemporaryData.GetAsOrDefault(GameLoader.NAMESPACE + ".NumberSkilledLaborer", 0f)));
                                }
                            }
                            catch (Exception ex)
                            {
                                PandaLogger.Log("NumberSkilledLaborer");
                                PandaLogger.LogError(ex);
                            }


                            if (addCount > 0)
                            {
                                if (addCount > 30)
                                {
                                    addCount = 30;
                                }

                                if (!state.NotifySettlers)
                                {
                                    AddNewSettlers(addCount, numbSkilled, state);
                                }
                                else
                                {
                                    foreach (var p in state.ColonyRef.Owners)
                                    {
                                        if (p.IsConnected())
                                        {
                                            NetworkMenu menu = new NetworkMenu();
                                            menu.LocalStorage.SetAs("header", addCount + _localizationHelper.LocalizeOrDefault("NewSettlers", p));
                                            menu.Width  = 600;
                                            menu.Height = 300;

                                            menu.Items.Add(new ButtonCallback(GameLoader.NAMESPACE + ".NewSettlers.Accept." + addCount + "." + numbSkilled,
                                                                              new LabelData(_localizationHelper.GetLocalizationKey("Accept"),
                                                                                            UnityEngine.Color.black,
                                                                                            UnityEngine.TextAnchor.MiddleCenter)));

                                            menu.Items.Add(new ButtonCallback(GameLoader.NAMESPACE + ".NewSettlers.Decline",
                                                                              new LabelData(_localizationHelper.GetLocalizationKey("Decline"),
                                                                                            UnityEngine.Color.black,
                                                                                            UnityEngine.TextAnchor.MiddleCenter)));

                                            NetworkMenuManager.SendServerPopup(p, menu);
                                        }
                                    }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            PandaLogger.Log("SkilledLaborer");
                            PandaLogger.LogError(ex);
                        }

                        if (state.ColonyRef.FollowerCount > state.HighestColonistCount)
                        {
                            state.HighestColonistCount = state.ColonyRef.FollowerCount;
                        }
                    }


                    state.NextGenTime = Time.SecondsSinceStartDouble + Random.Next(8, 16) * IN_GAME_HOUR_IN_SECONDS;

                    state.ColonyRef.SendCommonData();
                }
            }

            return(update);
        }
        public static void ChangedSetting(ValueTuple <Players.Player, JSONNode, string> data)
        {
            if (data.Item1.ActiveColony != null)
            {
                switch (data.Item3)
                {
                case "server_popup":
                    var ps = ColonyState.GetColonyState(data.Item1.ActiveColony);

                    if (ps != null && data.Item2.GetAsOrDefault(_Bosses, Convert.ToInt32(ps.BossesEnabled)) != Convert.ToInt32(ps.BossesEnabled))
                    {
                        ps.BossesEnabled = data.Item2.GetAsOrDefault(_Bosses, Convert.ToInt32(ps.BossesEnabled)) != 0;
                        PandaChat.Send(data.Item1, _localizationHelper, "BossesToggled", ChatColor.green, ps.BossesEnabled ? _localizationHelper.LocalizeOrDefault("on", data.Item1) : _localizationHelper.LocalizeOrDefault("off", data.Item1));
                    }

                    break;
                }
            }
        }
Example #6
0
 public void GetLocalizedValues(Players.Player player, Colony colony, int unlockedLevelCount, out string upgradeName, out string currentResults, out string nextResults)
 {
     upgradeName    = _localization.LocalizeOrDefault("SkillChance", player);
     currentResults = string.Format(_localization.LocalizeOrDefault("SkillChancepct", player), GetSkillChance(colony) * 100);
     nextResults    = string.Format(_localization.LocalizeOrDefault("SkillChancepct", player), GetSkillChance(colony, colony.GetUpgradeLevel(KEY) + 1) * 100);
 }
Example #7
0
        public static void SendUI(Players.Player player)
        {
            NetworkMenu commandUI = new NetworkMenu();

            commandUI.Identifier = "CommandToolUI";
            commandUI.LocalStorage.SetAs("header", _localizationHelper.LocalizeOrDefault("CommandTool", player));
            commandUI.Width  = 500;
            commandUI.Height = 600;


            ButtonCallback GuardsButton = new ButtonCallback(Nach0Config.Name + ".UIButton.Guards", new LabelData(_localizationHelper.LocalizeOrDefault("Button.Guards", player), Color.black));


            Label               Guardslabel = new Label(_localizationHelper.LocalizeOrDefault("Label.Guards", player));
            ButtonCallback      BackButton  = new ButtonCallback(Nach0Config.Name + ".UIButton.Back", new LabelData(_localizationHelper.LocalizeOrDefault("Button.Back", player), Color.black));
            List <(IItem, int)> GuardsHeaderHorizontalItems = new List <(IItem, int)>();

            GuardsHeaderHorizontalItems.Add((Guardslabel, 150));
            GuardsHeaderHorizontalItems.Add((BackButton, 75));

            HorizontalRow GuardsHeaderHorizontalRow = new HorizontalRow(GuardsHeaderHorizontalItems);

            Label               slingshotlabel           = new Label(_localizationHelper.LocalizeOrDefault("Label.Slingshot", player));
            ButtonCallback      SlingshotButtonNight     = new ButtonCallback(Nach0Config.Name + ".UIButton.SlingShot.Night", new LabelData(_localizationHelper.LocalizeOrDefault("Button.Night", player), Color.black));
            ButtonCallback      SlingshotButtonDay       = new ButtonCallback(Nach0Config.Name + ".UIButton.SlingShot.Day", new LabelData(_localizationHelper.LocalizeOrDefault("Button.Day", player), Color.black));
            List <(IItem, int)> SlingshotHorizontalItems = new List <(IItem, int)>();

            SlingshotHorizontalItems.Add((slingshotlabel, 150));
            SlingshotHorizontalItems.Add((SlingshotButtonNight, 75));
            SlingshotHorizontalItems.Add((SlingshotButtonDay, 75));

            HorizontalRow SlingshotHorizontalRow = new HorizontalRow(SlingshotHorizontalItems);


            //CompoundBow
            Label               compoundBowlabel           = new Label(_localizationHelper.LocalizeOrDefault("Label.CompoundBow", player));
            ButtonCallback      compoundBowButtonNight     = new ButtonCallback(Nach0Config.Name + ".UIButton.CompoundBow.Night", new LabelData(_localizationHelper.LocalizeOrDefault("Button.Night", player), Color.black));
            ButtonCallback      compoundBowButtonDay       = new ButtonCallback(Nach0Config.Name + ".UIButton.CompoundBow.Day", new LabelData(_localizationHelper.LocalizeOrDefault("Button.Day", player), Color.black));
            List <(IItem, int)> compoundBowHorizontalItems = new List <(IItem, int)>();

            compoundBowHorizontalItems.Add((compoundBowlabel, 150));
            compoundBowHorizontalItems.Add((compoundBowButtonNight, 75));
            compoundBowHorizontalItems.Add((compoundBowButtonDay, 75));

            HorizontalRow compoundBowHorizontalRow = new HorizontalRow(compoundBowHorizontalItems);


            //Sword
            Label               swordlabel           = new Label(_localizationHelper.LocalizeOrDefault("Label.ShortSword", player));
            ButtonCallback      swordButtonNight     = new ButtonCallback(Nach0Config.Name + ".UIButton.Sword.Night", new LabelData(_localizationHelper.LocalizeOrDefault("Button.Night", player), Color.black));
            ButtonCallback      swordButtonDay       = new ButtonCallback(Nach0Config.Name + ".UIButton.Sword.Day", new LabelData(_localizationHelper.LocalizeOrDefault("Button.Day", player), Color.black));
            List <(IItem, int)> swordHorizontalItems = new List <(IItem, int)>();

            swordHorizontalItems.Add((swordlabel, 150));
            swordHorizontalItems.Add((swordButtonNight, 75));
            swordHorizontalItems.Add((swordButtonDay, 75));

            HorizontalRow swordHorizontalRow = new HorizontalRow(swordHorizontalItems);


            //Sniper
            Label               sniperlabel           = new Label(_localizationHelper.LocalizeOrDefault("Label.Sniper", player));
            ButtonCallback      sniperButtonNight     = new ButtonCallback(Nach0Config.Name + ".UIButton.Sniper.Night", new LabelData(_localizationHelper.LocalizeOrDefault("Button.Night", player), Color.black));
            ButtonCallback      sniperButtonDay       = new ButtonCallback(Nach0Config.Name + ".UIButton.Sniper.Day", new LabelData(_localizationHelper.LocalizeOrDefault("Button.Day", player), Color.black));
            List <(IItem, int)> sniperHorizontalItems = new List <(IItem, int)>();

            sniperHorizontalItems.Add((sniperlabel, 150));
            sniperHorizontalItems.Add((sniperButtonNight, 75));
            sniperHorizontalItems.Add((sniperButtonDay, 75));

            HorizontalRow sniperHorizontalRow = new HorizontalRow(sniperHorizontalItems);


            //Ballista
            Label               ballistalabel           = new Label(_localizationHelper.LocalizeOrDefault("Label.Ballista", player));
            ButtonCallback      ballistaButtonNight     = new ButtonCallback(Nach0Config.Name + ".UIButton.Ballista.Night", new LabelData(_localizationHelper.LocalizeOrDefault("Button.Night", player), Color.black));
            ButtonCallback      ballistaButtonDay       = new ButtonCallback(Nach0Config.Name + ".UIButton.Ballista.Day", new LabelData(_localizationHelper.LocalizeOrDefault("Button.Day", player), Color.black));
            List <(IItem, int)> ballistaHorizontalItems = new List <(IItem, int)>();

            ballistaHorizontalItems.Add((ballistalabel, 150));
            ballistaHorizontalItems.Add((ballistaButtonNight, 75));
            ballistaHorizontalItems.Add((ballistaButtonDay, 75));

            HorizontalRow ballistaHorizontalRow = new HorizontalRow(ballistaHorizontalItems);

            if (commandUIInteraction.item_placer_option_dict.ContainsKey(player))
            {
                if (commandUIInteraction.item_placer_option_dict[player].Equals("Guards"))
                {
                    commandUI.Items.Add(GuardsHeaderHorizontalRow);
                    if (player == null && player.ConnectionState != Players.EConnectionState.Connected || player.ActiveColony == null || player.ActiveColony.ScienceData == null)
                    {
                        return;
                    }

                    Science.ScienceKey SlingShotScienceKey   = new Science.ScienceKey(Nach0Config.ResearchPrefix + "Slingshot");
                    Science.ScienceKey CompoundBowScienceKey = new Science.ScienceKey(Nach0Config.ResearchPrefix + "CompoundBow");
                    Science.ScienceKey SwordScienceKey       = new Science.ScienceKey(Nach0Config.ResearchPrefix + "SwordGuard");
                    Science.ScienceKey SniperScienceKey      = new Science.ScienceKey(Nach0Config.ResearchPrefix + "Sniper");
                    Science.ScienceKey BallistaScienceKey    = new Science.ScienceKey(Nach0Config.ResearchPrefix + "Ballista");

                    if (SlingShotScienceKey.IsCompleted(player.ActiveColony.ScienceData))
                    {
                        commandUI.Items.Add(SlingshotHorizontalRow);
                    }
                    if (CompoundBowScienceKey.IsCompleted(player.ActiveColony.ScienceData))
                    {
                        commandUI.Items.Add(compoundBowHorizontalRow);
                    }
                    if (SwordScienceKey.IsCompleted(player.ActiveColony.ScienceData))
                    {
                        commandUI.Items.Add(swordHorizontalRow);
                    }
                    if (SniperScienceKey.IsCompleted(player.ActiveColony.ScienceData))
                    {
                        commandUI.Items.Add(sniperHorizontalRow);
                    }
                    if (BallistaScienceKey.IsCompleted(player.ActiveColony.ScienceData))
                    {
                        commandUI.Items.Add(ballistaHorizontalRow);
                    }
                }
                else
                {
                    if (Nach0Config.GuardsMod)
                    {
                        commandUI.Items.Add(GuardsButton);
                        commandUI.Items.Add(new EmptySpace(5));
                    }
                }
            }
            else
            {
                if (Nach0Config.GuardsMod)
                {
                    commandUI.Items.Add(GuardsButton);
                    commandUI.Items.Add(new EmptySpace(5));
                }
            }
            commandUI.Items.Add(new EmptySpace(35));

            //sends ui
            NetworkMenuManager.SendServerPopup(player, commandUI);
        }
Example #8
0
        public string GetDescription(Colony colony, Players.Player player)
        {
            float boost = GetSkillChance(colony);

            return(string.Format(_localization.LocalizeOrDefault("SkillChance", player), boost * 100));
        }