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); } }
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); }
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; } } }
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); }
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); }
public string GetDescription(Colony colony, Players.Player player) { float boost = GetSkillChance(colony); return(string.Format(_localization.LocalizeOrDefault("SkillChance", player), boost * 100)); }