Ejemplo n.º 1
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);
        }
Ejemplo n.º 2
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;
                }
            }
        }
Ejemplo n.º 3
0
        public static void ChangedSetting(TupleStruct <Players.Player, JSONNode, string> data)
        {
            switch (data.item3)
            {
            case "world_settings":
                var ps             = PlayerState.GetPlayerState(data.item1);
                var maxToggleTimes = Configuration.GetorDefault("MaxSettlersToggle", 4);

                if (ps != null && data.item2.GetAsOrDefault(_Setters, Convert.ToInt32(ps.SettlersEnabled)) != Convert.ToInt32(ps.SettlersEnabled))
                {
                    if (!Configuration.GetorDefault("SettlersEnabled", true))
                    {
                        PandaChat.Send(data.item1, "The server administrator had disabled the changing of Settlers.", ChatColor.red);
                    }
                    else if (!HasToggeledMaxTimes(maxToggleTimes, ps, data.item1))
                    {
                        TurnSettlersOn(data.item1, ps, maxToggleTimes, data.item2.GetAsOrDefault(_Setters, Convert.ToInt32(ps.SettlersEnabled)) != 0);
                    }

                    PandaChat.Send(data.item1, "Settlers! Mod Settlers are now " + (ps.SettlersEnabled ? "on" : "off"), ChatColor.green);
                }

                break;
            }
        }
Ejemplo n.º 4
0
        public bool TryDoCommand(Players.Player player, string chat)
        {
            var array = CommandManager.SplitCommand(chat);

            var gitVer         = VersionChecker.GetGitVerion();
            var versionCompare = GameLoader.MOD_VER.Major.CompareTo(gitVer.Major);

            PandaChat.Send(player, "Settlers! Mod version: {0}.", ChatColor.green, GameLoader.MOD_VER.ToString());
            PandaChat.Send(player, "Settlers! Git version: {0}.", ChatColor.green, gitVer.ToString());

            if (versionCompare < 0)
            {
                if (!VersionChecker.NewVer)
                {
                    PandaChat.Send(player, "Settlers! version is out of date. The mod will automatically update now.",
                                   ChatColor.red);

                    VersionChecker.WriteVersionsToConsole();
                }
                else
                {
                    PandaChat.Send(player, "Settlers! Has been updated. Restart the server/game to apply.",
                                   ChatColor.red);
                }
            }

            return(true);
        }
Ejemplo n.º 5
0
        internal static void LogError(Exception e, string message, params object[] args)
        {
            ServerLog.LogAsyncExceptionMessage(new Pipliz.LogExceptionMessage(PandaChat.BuildMessage(GetFormattedMessage(string.Format(message, args)), ChatColor.red), e));

            if (e.InnerException != null)
            {
                LogError(e.InnerException);
            }
        }
Ejemplo n.º 6
0
        internal static void LogError(Exception e)
        {
            ServerLog.LogAsyncExceptionMessage(new Pipliz.LogExceptionMessage(PandaChat.BuildMessage("Exception", ChatColor.red), e));

            if (e.InnerException != null)
            {
                LogError(e.InnerException);
            }
        }
Ejemplo n.º 7
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);
        }
Ejemplo n.º 8
0
        internal static void LogError(Exception e, string message)
        {
            ServerLog.LogAsyncExceptionMessage(new
                                               LogExceptionMessage(PandaChat.BuildMessage(GetFormattedMessage(message), ChatColor.red),
                                                                   e));

            if (e.InnerException != null)
            {
                LogError(e.InnerException);
            }
        }
Ejemplo n.º 9
0
        private static bool HasToggeledMaxTimes(int maxToggleTimes, PlayerState state, Players.Player player)
        {
            if (state.SettlersToggledTimes >= maxToggleTimes)
            {
                PandaChat.Send(player,
                               $"To limit abuse of the /settlers command you can no longer toggle settlers on or off. You have used your alloted {maxToggleTimes} times.",
                               ChatColor.red);

                return(true);
            }

            return(false);
        }
Ejemplo n.º 10
0
        public static void PossibleCommands(Players.Player player, ChatColor color)
        {
            PandaChat.Send(player, "Current Difficulty: " + PlayerState.GetPlayerState(player).Difficulty.Name, color);
            PandaChat.Send(player, "Possible commands:", color);

            var diffs = string.Empty;

            foreach (var diff in GameDifficulty.GameDifficulties)
            {
                diffs += diff.Key + " | ";
            }

            PandaChat.Send(player, "/difficulty " + diffs.Substring(0, diffs.Length - 2), color);
        }
Ejemplo n.º 11
0
        public bool TryDoCommand(Players.Player player, string chat, List <string> split)
        {
            if (!chat.StartsWith("/settlers", StringComparison.OrdinalIgnoreCase))
            {
                return(false);
            }

            if (player == null || player.ID == NetworkID.Server || player.ActiveColony == null)
            {
                return(true);
            }

            var array = new List <string>();

            CommandManager.SplitCommand(chat, array);
            var state          = ColonyState.GetColonyState(player.ActiveColony);
            var maxToggleTimes = SettlersConfiguration.GetorDefault("MaxSettlersToggle", 4);

            if (maxToggleTimes == 0 && !SettlersConfiguration.GetorDefault("SettlersEnabled", true))
            {
                PandaChat.Send(player, _localizationHelper, "AdminDisabledSettlers.", ChatColor.red);

                return(true);
            }

            if (HasToggeledMaxTimes(maxToggleTimes, state, player))
            {
                return(true);
            }

            if (array.Count == 1)
            {
                PandaChat.Send(player,
                               _localizationHelper,
                               "SettlersToggleTime",
                               ChatColor.green,
                               state.SettlersEnabled.ToString(),
                               state.SettlersToggledTimes.ToString(),
                               maxToggleTimes.ToString());
                return(true);
            }

            if (array.Count == 2 && state.SettlersToggledTimes <= maxToggleTimes && Enum.TryParse <SettlersState>(array[1].ToLower().Trim(), out var settlersState))
            {
                TurnSettlersOn(player, state, maxToggleTimes, settlersState);
            }

            return(true);
        }
Ejemplo n.º 12
0
        private static void TurnSettlersOn(Players.Player player, PlayerState state, int maxToggleTimes, bool enabled)
        {
            if (!state.SettlersEnabled)
            {
                state.SettlersToggledTimes++;
            }

            state.SettlersEnabled = enabled;

            PandaChat.Send(player,
                           $"Settlers! Mod Settlers are now on. You have toggled this {state.SettlersToggledTimes} out of {maxToggleTimes} times.",
                           ChatColor.green);

            NetworkUI.NetworkMenuManager.SendWorldSettingsUI(player);
        }
Ejemplo n.º 13
0
        public bool TryDoCommand(Players.Player player, string chat, List <string> split)
        {
            if (!chat.StartsWith("/difficulty", StringComparison.OrdinalIgnoreCase) ||
                !chat.StartsWith("/dif", StringComparison.OrdinalIgnoreCase))
            {
                return(false);
            }

            if (player == null || player.ID == NetworkID.Server || player.ActiveColony == null)
            {
                return(true);
            }

            var array = new List <string>();

            CommandManager.SplitCommand(chat, array);

            var state = ColonyState.GetColonyState(player.ActiveColony);

            if (array.Count == 1)
            {
                PandaChat.Send(player, "Settlers! Mod difficulty set to {0}.", ChatColor.green, state.Difficulty.Name);
                return(true);
            }

            if (array.Count < 2)
            {
                UnknownCommand(player, chat);
                return(true);
            }

            if (array.Count == 2)
            {
                var difficulty = array[1].Trim();

                return(ChangeDifficulty(player, state, difficulty));
            }

            if (!SettlersConfiguration.DifficutlyCanBeChanged)
            {
                PandaChat.Send(player, "The server administrator had disabled the changing of game difficulty.",
                               ChatColor.green);
            }

            return(true);
        }
Ejemplo n.º 14
0
        private static void TurnSettlersOn(Players.Player player, ColonyState state, int maxToggleTimes, SettlersState enabled)
        {
            if (state.SettlersEnabled == SettlersState.Disabled && enabled != SettlersState.Disabled)
            {
                state.SettlersToggledTimes++;
            }

            state.SettlersEnabled = enabled;

            PandaChat.Send(player,
                           _localizationHelper,
                           "SettlersToggleTime",
                           ChatColor.green,
                           state.SettlersEnabled.ToString(),
                           state.SettlersToggledTimes.ToString(),
                           maxToggleTimes.ToString());

            NetworkUI.NetworkMenuManager.SendColonySettingsUI(player);
        }
Ejemplo n.º 15
0
        public bool TryDoCommand(Players.Player player, string chat)
        {
            if (player == null || player.ID == NetworkID.Server)
            {
                return(true);
            }

            var array          = CommandManager.SplitCommand(chat);
            var colony         = Colony.Get(player);
            var state          = PlayerState.GetPlayerState(player);
            var maxToggleTimes = Configuration.GetorDefault("MaxSettlersToggle", 4);

            if (maxToggleTimes == 0 && !Configuration.GetorDefault("SettlersEnabled", true))
            {
                PandaChat.Send(player, "The server administrator had disabled the changing of Settlers.",
                               ChatColor.red);

                return(true);
            }

            if (HasToggeledMaxTimes(maxToggleTimes, state, player))
            {
                return(true);
            }

            if (array.Length == 1)
            {
                PandaChat.Send(player, "Settlers! Settlers are {0}. You have toggled this {1} out of {2} times.",
                               ChatColor.green, state.SettlersEnabled ? "on" : "off",
                               state.SettlersToggledTimes.ToString(), maxToggleTimes.ToString());

                return(true);
            }

            if (array.Length == 2 && state.SettlersToggledTimes <= maxToggleTimes)
            {
                TurnSettlersOn(player, state, maxToggleTimes, array[1].ToLower().Trim() == "on" || array[1].ToLower().Trim() == "true");
            }

            return(true);
        }
Ejemplo n.º 16
0
        public bool TryDoCommand(Players.Player player, string chat)
        {
            if (player == null || player.ID == NetworkID.Server)
            {
                return(true);
            }

            var array  = CommandManager.SplitCommand(chat);
            var colony = Colony.Get(player);
            var state  = PlayerState.GetPlayerState(player);

            if (array.Length == 1)
            {
                PandaChat.Send(player, "Settlers! Mod difficulty set to {0}.", ChatColor.green, state.Difficulty.Name);
                return(true);
            }

            if (array.Length < 2)
            {
                UnknownCommand(player, chat);
                return(true);
            }

            if (array.Length == 2)
            {
                var difficulty = array[1].Trim();

                return(ChangeDifficulty(player, state, difficulty));
            }

            if (!Configuration.DifficutlyCanBeChanged)
            {
                PandaChat.Send(player, "The server administrator had disabled the changing of game difficulty.",
                               ChatColor.green);
            }

            return(true);
        }
Ejemplo n.º 17
0
        public bool TryDoCommand(Players.Player player, string chat)
        {
            if (player == null || player.ID == NetworkID.Server)
            {
                return(true);
            }

            string[]    array  = CommandManager.SplitCommand(chat);
            Colony      colony = Colony.Get(player);
            PlayerState state  = PlayerState.GetPlayerState(player);

            if (array.Length == 1)
            {
                PandaChat.Send(player, "Settlers! Mod difficulty is set to {0}.", ChatColor.green, state.Difficulty.Name);
                return(true);
            }

            if (array.Length < 2)
            {
                UnknownCommand(player, chat);
                return(true);
            }

            if (!GameDifficulty.GameDifficulties.ContainsKey(array[1].Trim()))
            {
                UnknownCommand(player, array[1].Trim());
                return(true);
            }

            state.Difficulty = GameDifficulty.GameDifficulties[array[1].Trim()];

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

            return(true);
        }
Ejemplo n.º 18
0
 private static void UnknownCommand(Players.Player player, string command)
 {
     PandaChat.Send(player, "Unknown command {0}", ChatColor.white, command);
     PossibleCommands(player, ChatColor.white);
 }
Ejemplo n.º 19
0
 public void Print(Players.Player player)
 {
     PandaChat.Send(player, $"FoodMultiplier: {FoodMultiplier}", ChatColor.green);
     PandaChat.Send(player, $"MonsterDamage: {MonsterDamage}", ChatColor.green);
     PandaChat.Send(player, $"MonsterDamageReduction: {MonsterDamageReduction}", ChatColor.green);
 }
Ejemplo n.º 20
0
 internal static void Log(ChatColor color, string message, params object[] args)
 {
     ServerLog.LogAsyncMessage(new
                               LogMessage(PandaChat.BuildMessage(GetFormattedMessage(string.Format(message, args)), color),
                                          LogType.Log));
 }
Ejemplo n.º 21
0
        public static void WriteVersionsToConsole()
        {
            try
            {
                var gitVer   = GetGitVerion();
                var bkFolder = GameLoader.GAMEDATA_FOLDER + "Pandaros.bk";

                PandaLogger.Log(ChatColor.green, "Mod version: {0}.", GameLoader.MOD_VER.ToString());
                PandaLogger.Log(ChatColor.green, "Git version: {0}.", gitVer.ToString());

                var versionCompare = GameLoader.MOD_VER.CompareTo(gitVer);

                if (versionCompare < 0)
                {
                    PandaLogger.Log(ChatColor.red, "Settlers! version is out of date. Downloading new version from: {0}",
                                    GIT_URL);

                    var releases  = GetReleases();
                    var iName     = releases.IndexOf(ASSETS);
                    var nameSub   = releases.Substring(iName + ASSETS.Length);
                    var zip       = releases.IndexOf(ZIP);
                    var zipSub    = releases.Substring(zip + ZIP.Length);
                    var iEndName  = zipSub.IndexOf("\"");
                    var verString = zipSub.Substring(0, iEndName);
                    var newVer    = GameLoader.MODS_FOLDER + $"/{gitVer}.zip";
                    var oldVer    = GameLoader.MODS_FOLDER + $"/{GameLoader.MOD_VER}.zip";
                    ServicePointManager.ServerCertificateValidationCallback += (s, ce, ca, p) => true;

                    var webClient = new WebClient();

                    webClient.Headers["User-Agent"] =
                        "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36";

                    webClient.Headers["Content-Type"] = "text";

                    webClient.DownloadFileCompleted += (s, e) =>
                    {
                        if (!NewVer)
                        {
                            NewVer = true;
                            var error = false;

                            try
                            {
                                if (Directory.Exists(bkFolder))
                                {
                                    Directory.Delete(bkFolder, true);
                                }

                                PandaLogger.Log(ChatColor.green,
                                                $"Settlers! update {gitVer} downloaded. Making a backup..");

                                Directory.Move(GameLoader.MODS_FOLDER + "/Pandaros", bkFolder);

                                if (File.Exists(oldVer))
                                {
                                    File.Delete(oldVer);
                                }

                                PandaLogger.Log(ChatColor.green, $"Installing...");

                                try
                                {
                                    var fastZip = new FastZip();
                                    fastZip.ExtractZip(newVer, GameLoader.MODS_FOLDER, null);
                                }
                                catch (Exception ex)
                                {
                                    error = true;

                                    if (Directory.Exists(bkFolder))
                                    {
                                        Directory.Move(bkFolder, GameLoader.MODS_FOLDER + "/Pandaros");
                                    }

                                    PandaLogger.LogError(ex);

                                    PandaLogger.Log(ChatColor.red,
                                                    $"There was an error updating to the latest version of Settlers!");
                                }

                                if (!error)
                                {
                                    PandaLogger.Log(ChatColor.green,
                                                    $"Settlers! update {gitVer} installed. Restart to update!");

                                    PandaChat.SendToAll($"Settlers! update {gitVer} installed. Restart server to update!",
                                                        ChatColor.maroon, ChatStyle.bolditalic);
                                }
                            }
                            catch (Exception)
                            {
                                if (Directory.Exists(bkFolder))
                                {
                                    Directory.Move(bkFolder, GameLoader.MODS_FOLDER + "/Pandaros");
                                }
                            }

                            if (File.Exists(newVer))
                            {
                                File.Delete(newVer);
                            }
                        }
                    };


                    webClient.DownloadFileAsync(new Uri(verString), newVer);
                }
            }
            catch (Exception) { }
        }