示例#1
0
        /// <summary>
        /// Changes players name
        /// </summary>
        /// <param name="plr">Player that initiated the command</param>
        /// <param name="values">List of command arguments (after command name)</param>
        /// <returns>True if command was correctly handled, false if operation was canceled</returns>
        public static bool ModifyPlayerName(Player plr, ref List <string> values)
        {
            if (values.Count < 2)
            {
                plr.SendClientMessage("Usage: .modify playername old_player_name new_player_name");
                return(true);
            }

            var charToRename = CharMgr.GetCharacter(Player.AsCharacterName(values[0]), false);

            if (charToRename == null)
            {
                plr.SendClientMessage("Player with name '" + values[0] + "' not found.", ChatLogFilters.CHATLOGFILTERS_USER_ERROR);
                return(true);
            }

            var existingChar = CharMgr.GetCharacter(Player.AsCharacterName(values[1]), false);

            if (existingChar != null)
            {
                plr.SendClientMessage("Player with name '" + existingChar.Name + "' already exists.", ChatLogFilters.CHATLOGFILTERS_USER_ERROR);
                return(true);
            }

            if (values[1].Length < 3)
            {
                plr.SendClientMessage("Player name must be at least 3 characters long.", ChatLogFilters.CHATLOGFILTERS_USER_ERROR);
                return(true);
            }

            if (!values[1].All(c => char.IsLetter(c) && c <= 0x7A))
            {
                plr.SendClientMessage("Player names may not contain special characters.", ChatLogFilters.CHATLOGFILTERS_USER_ERROR);
                return(true);
            }

            string newName = values[1][0].ToString().ToUpper() + values[1].ToLower().Substring(1);


            CharMgr.UpdateCharacterName(charToRename, newName);

            var player = Player.GetPlayer(values[0]);

            LogSanction(player.Info.AccountId, plr, "GM issued Name Change", "", $"From {charToRename.Name} to {newName}");

            GMCommandLog log = new GMCommandLog
            {
                PlayerName = plr.Name,
                AccountId  = (uint)plr.Client._Account.AccountId,
                Command    = "Changed player name FROM " + values[0] + " TO " + charToRename.Name,
                Date       = DateTime.Now
            };

            CharMgr.Database.AddObject(log);

            if (player != null)
            {
                player.Name = charToRename.Name;
                player.Quit(false, false);
            }

            plr.SendClientMessage(log.Command);
            return(true);
        }