static bool LevelUp(StringArguments args, CommandHandler handler)
        {
            string nameStr;
            string levelStr;

            handler.extractOptFirstArg(args, out nameStr, out levelStr);

            // exception opt second arg: .character level $name
            if (!string.IsNullOrEmpty(levelStr) && !levelStr.IsNumber())
            {
                nameStr  = levelStr;
                levelStr = null;                                    // current level will used
            }

            Player     target;
            ObjectGuid targetGuid;
            string     targetName;

            if (!handler.extractPlayerTarget(new StringArguments(nameStr), out target, out targetGuid, out targetName))
            {
                return(false);
            }

            int oldlevel = (int)(target ? target.getLevel() : Player.GetLevelFromDB(targetGuid));
            int addlevel = !string.IsNullOrEmpty(levelStr) ? int.Parse(levelStr) : 1;
            int newlevel = oldlevel + addlevel;

            if (newlevel < 1)
            {
                newlevel = 1;
            }

            if (newlevel > SharedConst.StrongMaxLevel)                         // hardcoded maximum level
            {
                newlevel = SharedConst.StrongMaxLevel;
            }

            HandleCharacterLevel(target, targetGuid, oldlevel, newlevel, handler);

            if (handler.GetSession() == null || handler.GetSession().GetPlayer() != target)      // including chr == NULL
            {
                string nameLink = handler.playerLink(targetName);
                handler.SendSysMessage(CypherStrings.YouChangeLvl, nameLink, newlevel);
            }

            return(true);
        }
        static bool HandleCharacterTitlesCommand(StringArguments args, CommandHandler handler)
        {
            if (args.Empty())
            {
                return(false);
            }

            Player target;

            if (!handler.extractPlayerTarget(args, out target))
            {
                return(false);
            }

            LocaleConstant loc        = handler.GetSessionDbcLocale();
            string         targetName = target.GetName();
            string         knownStr   = handler.GetCypherString(CypherStrings.Known);

            // Search in CharTitles.dbc
            foreach (var titleInfo in CliDB.CharTitlesStorage.Values)
            {
                if (target.HasTitle(titleInfo))
                {
                    string name = (target.GetGender() == Gender.Male ? titleInfo.NameMale : titleInfo.NameFemale)[handler.GetSessionDbcLocale()];
                    if (string.IsNullOrEmpty(name))
                    {
                        continue;
                    }

                    string activeStr = target.GetUInt32Value(PlayerFields.ChosenTitle) == titleInfo.MaskID
                    ? handler.GetCypherString(CypherStrings.Active) : "";

                    // send title in "id (idx:idx) - [namedlink locale]" format
                    if (handler.GetSession() != null)
                    {
                        handler.SendSysMessage(CypherStrings.TitleListChat, titleInfo.Id, titleInfo.MaskID, titleInfo.Id, name, loc, knownStr, activeStr);
                    }
                    else
                    {
                        handler.SendSysMessage(CypherStrings.TitleListConsole, titleInfo.Id, titleInfo.MaskID, name, loc, knownStr, activeStr);
                    }
                }
            }

            return(true);
        }
Example #3
0
        static bool HandleGuildRankCommand(StringArguments args, CommandHandler handler)
        {
            string nameStr;
            string rankStr;

            handler.extractOptFirstArg(args, out nameStr, out rankStr);
            if (string.IsNullOrEmpty(rankStr))
            {
                return(false);
            }

            Player     target;
            ObjectGuid targetGuid;
            string     target_name;

            if (!handler.extractPlayerTarget(new StringArguments(nameStr), out target, out targetGuid, out target_name))
            {
                return(false);
            }

            ulong guildId = target ? target.GetGuildId() : Player.GetGuildIdFromDB(targetGuid);

            if (guildId == 0)
            {
                return(false);
            }

            Guild targetGuild = Global.GuildMgr.GetGuildById(guildId);

            if (!targetGuild)
            {
                return(false);
            }

            if (!byte.TryParse(rankStr, out byte newRank))
            {
                return(false);
            }

            return(targetGuild.ChangeMemberRank(null, targetGuid, newRank));
        }
Example #4
0
        static bool HandleResetLevelCommand(StringArguments args, CommandHandler handler)
        {
            Player target;

            if (!handler.extractPlayerTarget(args, out target))
            {
                return(false);
            }

            if (!HandleResetStatsOrLevelHelper(target))
            {
                return(false);
            }

            byte oldLevel = (byte)target.getLevel();

            // set starting level
            uint startLevel = (uint)(target.GetClass() != Class.Deathknight ? WorldConfig.GetIntValue(WorldCfg.StartPlayerLevel) : WorldConfig.GetIntValue(WorldCfg.StartDeathKnightPlayerLevel));

            target._ApplyAllLevelScaleItemMods(false);
            target.SetLevel(startLevel);
            target.InitRunes();
            target.InitStatsForLevel(true);
            target.InitTaxiNodesForLevel();
            target.InitTalentForLevel();
            target.SetUInt32Value(ActivePlayerFields.Xp, 0);

            target._ApplyAllLevelScaleItemMods(true);

            // reset level for pet
            Pet pet = target.GetPet();

            if (pet)
            {
                pet.SynchronizeLevelWithOwner();
            }

            Global.ScriptMgr.OnPlayerLevelChanged(target, oldLevel);

            return(true);
        }
Example #5
0
        static bool HandleResetAchievementsCommand(StringArguments args, CommandHandler handler)
        {
            Player     target;
            ObjectGuid targetGuid;

            if (!handler.extractPlayerTarget(args, out target, out targetGuid))
            {
                return(false);
            }

            if (target)
            {
                target.ResetAchievements();
            }
            else
            {
                PlayerAchievementMgr.DeleteFromDB(targetGuid);
            }

            return(true);
        }
Example #6
0
        static bool HandleResetStatsCommand(StringArguments args, CommandHandler handler)
        {
            Player target;

            if (!handler.extractPlayerTarget(args, out target))
            {
                return(false);
            }

            if (!HandleResetStatsOrLevelHelper(target))
            {
                return(false);
            }

            target.InitRunes();
            target.InitStatsForLevel(true);
            target.InitTaxiNodesForLevel();
            target.InitTalentForLevel();

            return(true);
        }
Example #7
0
        static bool HandleGuildCreateCommand(StringArguments args, CommandHandler handler)
        {
            if (args.Empty())
            {
                return(false);
            }

            Player target;

            if (!handler.extractPlayerTarget(args[0] != '"' ? args : null, out target))
            {
                return(false);
            }

            string guildname = handler.extractQuotedArg(args.NextString());

            if (string.IsNullOrEmpty(guildname))
            {
                return(false);
            }

            if (target.GetGuildId() != 0)
            {
                handler.SendSysMessage(CypherStrings.PlayerInGuild);
                return(true);
            }

            Guild guild = new Guild();

            if (!guild.Create(target, guildname))
            {
                handler.SendSysMessage(CypherStrings.GuildNotCreated);
                return(false);
            }

            Global.GuildMgr.AddGuild(guild);

            return(true);
        }
Example #8
0
        static bool HandleArenaCreateCommand(StringArguments args, CommandHandler handler)
        {
            if (args.Empty())
            {
                return(false);
            }

            Player target;

            if (!handler.extractPlayerTarget(args[0] != '"' ? args : null, out target))
            {
                return(false);
            }

            string name = handler.extractQuotedArg(args.NextString());

            if (string.IsNullOrEmpty(name))
            {
                return(false);
            }

            byte type = args.NextByte();

            if (type == 0)
            {
                return(false);
            }

            if (Global.ArenaTeamMgr.GetArenaTeamByName(name) != null)
            {
                handler.SendSysMessage(CypherStrings.ArenaErrorNameExists, name);
                return(false);
            }

            if (type == 2 || type == 3 || type == 5)
            {
                if (Player.GetArenaTeamIdFromDB(target.GetGUID(), type) != 0)
                {
                    handler.SendSysMessage(CypherStrings.ArenaErrorSize, target.GetName());
                    return(false);
                }

                ArenaTeam arena = new ArenaTeam();

                if (!arena.Create(target.GetGUID(), type, name, 4293102085, 101, 4293253939, 4, 4284049911))
                {
                    handler.SendSysMessage(CypherStrings.BadValue);
                    return(false);
                }

                Global.ArenaTeamMgr.AddArenaTeam(arena);
                handler.SendSysMessage(CypherStrings.ArenaCreate, arena.GetName(), arena.GetId(), arena.GetArenaType(), arena.GetCaptain());
            }
            else
            {
                handler.SendSysMessage(CypherStrings.BadValue);
                return(false);
            }

            return(true);
        }
Example #9
0
        static bool HandleArenaCaptainCommand(StringArguments args, CommandHandler handler)
        {
            if (args.Empty())
            {
                return(false);
            }

            string idStr;
            string nameStr;

            handler.extractOptFirstArg(args, out idStr, out nameStr);
            if (string.IsNullOrEmpty(idStr))
            {
                return(false);
            }

            if (!uint.TryParse(idStr, out uint teamId) || teamId == 0)
            {
                return(false);
            }

            Player     target;
            ObjectGuid targetGuid;

            if (!handler.extractPlayerTarget(new StringArguments(nameStr), out target, out targetGuid))
            {
                return(false);
            }

            ArenaTeam arena = Global.ArenaTeamMgr.GetArenaTeamById(teamId);

            if (arena == null)
            {
                handler.SendSysMessage(CypherStrings.ArenaErrorNotFound, teamId);
                return(false);
            }

            if (!target)
            {
                handler.SendSysMessage(CypherStrings.PlayerNotExistOrOffline, nameStr);
                return(false);
            }

            if (arena.IsFighting())
            {
                handler.SendSysMessage(CypherStrings.ArenaErrorCombat);
                return(false);
            }

            if (!arena.IsMember(targetGuid))
            {
                handler.SendSysMessage(CypherStrings.ArenaErrorNotMember, nameStr, arena.GetName());
                return(false);
            }

            if (arena.GetCaptain() == targetGuid)
            {
                handler.SendSysMessage(CypherStrings.ArenaErrorCaptain, nameStr, arena.GetName());
                return(false);
            }

            arena.SetCaptain(targetGuid);

            CharacterInfo oldCaptainNameData = Global.WorldMgr.GetCharacterInfo(arena.GetCaptain());

            if (oldCaptainNameData == null)
            {
                return(false);
            }

            handler.SendSysMessage(CypherStrings.ArenaCaptain, arena.GetName(), arena.GetId(), oldCaptainNameData.Name, target.GetName());
            if (handler.GetSession() != null)
            {
                Log.outDebug(LogFilter.Arena, "GameMaster: {0} [GUID: {1}] promoted player: {2} [GUID: {3}] to leader of arena team \"{4}\"[Id: {5}]",
                             handler.GetSession().GetPlayer().GetName(), handler.GetSession().GetPlayer().GetGUID().ToString(), target.GetName(), target.GetGUID().ToString(), arena.GetName(), arena.GetId());
            }
            else
            {
                Log.outDebug(LogFilter.Arena, "Console: promoted player: {0} [GUID: {1}] to leader of arena team \"{2}\"[Id: {3}]",
                             target.GetName(), target.GetGUID().ToString(), arena.GetName(), arena.GetId());
            }

            return(true);
        }
Example #10
0
        static bool HandleResetTalentsCommand(StringArguments args, CommandHandler handler)
        {
            Player     target;
            ObjectGuid targetGuid;
            string     targetName;

            if (!handler.extractPlayerTarget(args, out target, out targetGuid, out targetName))
            {
                /* TODO: 6.x remove/update pet talents
                 * // Try reset talents as Hunter Pet
                 * Creature* creature = handler.getSelectedCreature();
                 * if (!*args && creature && creature.IsPet())
                 * {
                 *  Unit* owner = creature.GetOwner();
                 *  if (owner && owner.GetTypeId() == TYPEID_PLAYER && creature.ToPet().IsPermanentPetFor(owner.ToPlayer()))
                 *  {
                 *      creature.ToPet().resetTalents();
                 *      owner.ToPlayer().SendTalentsInfoData(true);
                 *
                 *      ChatHandler(owner.ToPlayer().GetSession()).SendSysMessage(LANG_RESET_PET_TALENTS);
                 *      if (!handler.GetSession() || handler.GetSession().GetPlayer() != owner.ToPlayer())
                 *          handler.PSendSysMessage(LANG_RESET_PET_TALENTS_ONLINE, handler.GetNameLink(owner.ToPlayer()).c_str());
                 *  }
                 *  return true;
                 * }
                 */

                handler.SendSysMessage(CypherStrings.NoCharSelected);
                return(false);
            }

            if (target)
            {
                target.ResetTalents(true);
                target.ResetTalentSpecialization();
                target.SendTalentsInfoData();
                target.SendSysMessage(CypherStrings.ResetTalents);
                if (handler.GetSession() == null || handler.GetSession().GetPlayer() != target)
                {
                    handler.SendSysMessage(CypherStrings.ResetTalentsOnline, handler.GetNameLink(target));
                }

                /* TODO: 6.x remove/update pet talents
                 * Pet* pet = target.GetPet();
                 * Pet.resetTalentsForAllPetsOf(target, pet);
                 * if (pet)
                 *  target.SendTalentsInfoData(true);
                 */
                return(true);
            }
            else if (!targetGuid.IsEmpty())
            {
                PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.UPD_ADD_AT_LOGIN_FLAG);
                stmt.AddValue(0, (ushort)(AtLoginFlags.None | AtLoginFlags.ResetPetTalents));
                stmt.AddValue(1, targetGuid.GetCounter());
                DB.Characters.Execute(stmt);

                string nameLink = handler.playerLink(targetName);
                handler.SendSysMessage(CypherStrings.ResetTalentsOffline, nameLink);
                return(true);
            }

            handler.SendSysMessage(CypherStrings.NoCharSelected);
            return(false);
        }
Example #11
0
        static bool HandleGroupSummonCommand(StringArguments args, CommandHandler handler)
        {
            Player target;

            if (!handler.extractPlayerTarget(args, out target))
            {
                return(false);
            }

            // check online security
            if (handler.HasLowerSecurity(target, ObjectGuid.Empty))
            {
                return(false);
            }

            Group group = target.GetGroup();

            string nameLink = handler.GetNameLink(target);

            if (!group)
            {
                handler.SendSysMessage(CypherStrings.NotInGroup, nameLink);
                return(false);
            }

            Player gmPlayer   = handler.GetSession().GetPlayer();
            Group  gmGroup    = gmPlayer.GetGroup();
            Map    gmMap      = gmPlayer.GetMap();
            bool   toInstance = gmMap.Instanceable();

            // we are in instance, and can summon only player in our group with us as lead
            if (toInstance && (
                    !gmGroup || group.GetLeaderGUID() != gmPlayer.GetGUID() ||
                    gmGroup.GetLeaderGUID() != gmPlayer.GetGUID()))
            // the last check is a bit excessive, but let it be, just in case
            {
                handler.SendSysMessage(CypherStrings.CannotSummonToInst);
                return(false);
            }

            for (GroupReference refe = group.GetFirstMember(); refe != null; refe = refe.next())
            {
                Player player = refe.GetSource();

                if (!player || player == gmPlayer || player.GetSession() == null)
                {
                    continue;
                }

                // check online security
                if (handler.HasLowerSecurity(player, ObjectGuid.Empty))
                {
                    return(false);
                }

                string plNameLink = handler.GetNameLink(player);

                if (player.IsBeingTeleported())
                {
                    handler.SendSysMessage(CypherStrings.IsTeleported, plNameLink);
                    return(false);
                }

                if (toInstance)
                {
                    Map playerMap = player.GetMap();

                    if (playerMap.Instanceable() && playerMap.GetInstanceId() != gmMap.GetInstanceId())
                    {
                        // cannot summon from instance to instance
                        handler.SendSysMessage(CypherStrings.CannotSummonToInst, plNameLink);
                        return(false);
                    }
                }

                handler.SendSysMessage(CypherStrings.Summoning, plNameLink, "");
                if (handler.needReportToTarget(player))
                {
                    player.SendSysMessage(CypherStrings.SummonedBy, handler.GetNameLink());
                }

                // stop flight if need
                if (player.IsInFlight())
                {
                    player.GetMotionMaster().MovementExpired();
                    player.CleanupAfterTaxiFlight();
                }
                // save only in non-flight case
                else
                {
                    player.SaveRecallPosition();
                }

                // before GM
                float x, y, z;
                gmPlayer.GetClosePoint(out x, out y, out z, player.GetObjectSize());
                player.TeleportTo(gmPlayer.GetMapId(), x, y, z, player.GetOrientation());
            }

            return(true);
        }
Example #12
0
        static bool HandleGroupListCommand(StringArguments args, CommandHandler handler)
        {
            // Get ALL the variables!
            Player     playerTarget;
            ObjectGuid guidTarget;
            string     nameTarget;
            string     zoneName    = "";
            string     onlineState = "";

            // Parse the guid to uint32...
            ObjectGuid parseGUID = ObjectGuid.Create(HighGuid.Player, args.NextUInt64());

            // ... and try to extract a player out of it.
            if (Global.CharacterCacheStorage.GetCharacterNameByGuid(parseGUID, out nameTarget))
            {
                playerTarget = Global.ObjAccessor.FindPlayer(parseGUID);
                guidTarget   = parseGUID;
            }
            // If not, we return false and end right away.
            else if (!handler.extractPlayerTarget(args, out playerTarget, out guidTarget, out nameTarget))
            {
                return(false);
            }

            // Next, we need a group. So we define a group variable.
            Group groupTarget = null;

            // We try to extract a group from an online player.
            if (playerTarget)
            {
                groupTarget = playerTarget.GetGroup();
            }

            // If not, we extract it from the SQL.
            if (!groupTarget)
            {
                PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_GROUP_MEMBER);
                stmt.AddValue(0, guidTarget.GetCounter());
                SQLResult resultGroup = DB.Characters.Query(stmt);
                if (!resultGroup.IsEmpty())
                {
                    groupTarget = Global.GroupMgr.GetGroupByDbStoreId(resultGroup.Read <uint>(0));
                }
            }

            // If both fails, players simply has no party. Return false.
            if (!groupTarget)
            {
                handler.SendSysMessage(CypherStrings.GroupNotInGroup, nameTarget);
                return(false);
            }

            // We get the group members after successfully detecting a group.
            var members = groupTarget.GetMemberSlots();

            // To avoid a cluster f**k, namely trying multiple queries to simply get a group member count...
            handler.SendSysMessage(CypherStrings.GroupType, (groupTarget.isRaidGroup() ? "raid" : "party"), members.Count);
            // ... we simply move the group type and member count print after retrieving the slots and simply output it's size.

            // While rather dirty codestyle-wise, it saves space (if only a little). For each member, we look several informations up.
            foreach (var slot in members)
            {
                // Check for given flag and assign it to that iterator
                string flags = "";
                if (slot.flags.HasAnyFlag(GroupMemberFlags.Assistant))
                {
                    flags = "Assistant";
                }

                if (slot.flags.HasAnyFlag(GroupMemberFlags.MainTank))
                {
                    if (!string.IsNullOrEmpty(flags))
                    {
                        flags += ", ";
                    }
                    flags += "MainTank";
                }

                if (slot.flags.HasAnyFlag(GroupMemberFlags.MainAssist))
                {
                    if (!string.IsNullOrEmpty(flags))
                    {
                        flags += ", ";
                    }
                    flags += "MainAssist";
                }

                if (string.IsNullOrEmpty(flags))
                {
                    flags = "None";
                }

                // Check if iterator is online. If is...
                Player p      = Global.ObjAccessor.FindPlayer(slot.guid);
                string phases = "";
                if (p && p.IsInWorld)
                {
                    // ... than, it prints information like "is online", where he is, etc...
                    onlineState = "online";
                    phases      = PhasingHandler.FormatPhases(p.GetPhaseShift());

                    AreaTableRecord area = CliDB.AreaTableStorage.LookupByKey(p.GetAreaId());
                    if (area != null)
                    {
                        AreaTableRecord zone = CliDB.AreaTableStorage.LookupByKey(area.ParentAreaID);
                        if (zone != null)
                        {
                            zoneName = zone.AreaName[handler.GetSessionDbcLocale()];
                        }
                    }
                }
                else
                {
                    // ... else, everything is set to offline or neutral values.
                    zoneName    = "<ERROR>";
                    onlineState = "Offline";
                }

                // Now we can print those informations for every single member of each group!
                handler.SendSysMessage(CypherStrings.GroupPlayerNameGuid, slot.name, onlineState,
                                       zoneName, phases, slot.guid.ToString(), flags, LFGQueue.GetRolesString(slot.roles));
            }

            // And finish after every iterator is done.
            return(true);
        }
Example #13
0
        static bool HandleLfgGroupInfoCommand(StringArguments args, CommandHandler handler)
        {
            if (args.Empty())
            {
                return(false);
            }

            Player     playerTarget = null;
            ObjectGuid guidTarget;
            string     nameTarget;

            ObjectGuid parseGUID = ObjectGuid.Create(HighGuid.Player, args.NextUInt64());

            if (ObjectManager.GetPlayerNameByGUID(parseGUID, out nameTarget))
            {
                playerTarget = Global.ObjAccessor.FindPlayer(parseGUID);
                guidTarget   = parseGUID;
            }
            else if (!handler.extractPlayerTarget(args, out playerTarget, out guidTarget, out nameTarget))
            {
                return(false);
            }

            Group groupTarget = null;

            if (playerTarget)
            {
                groupTarget = playerTarget.GetGroup();
            }
            else
            {
                PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_GROUP_MEMBER);
                stmt.AddValue(0, guidTarget.GetCounter());
                SQLResult resultGroup = DB.Characters.Query(stmt);
                if (!resultGroup.IsEmpty())
                {
                    groupTarget = Global.GroupMgr.GetGroupByDbStoreId(resultGroup.Read <uint>(0));
                }
            }

            if (!groupTarget)
            {
                handler.SendSysMessage(CypherStrings.LfgNotInGroup, nameTarget);
                return(false);
            }

            ObjectGuid guid = groupTarget.GetGUID();

            handler.SendSysMessage(CypherStrings.LfgGroupInfo, groupTarget.isLFGGroup(), Global.LFGMgr.GetState(guid), Global.LFGMgr.GetDungeon(guid));

            foreach (var slot in groupTarget.GetMemberSlots())
            {
                Player p = Global.ObjAccessor.FindPlayer(slot.guid);
                if (p)
                {
                    GetPlayerInfo(handler, p);
                }
                else
                {
                    handler.SendSysMessage("{0} is offline.", slot.name);
                }
            }

            return(true);
        }
Example #14
0
        static bool HandleCharacterRenameCommand(StringArguments args, CommandHandler handler)
        {
            Player     target;
            ObjectGuid targetGuid;
            string     targetName;

            if (!handler.extractPlayerTarget(args, out target, out targetGuid, out targetName))
            {
                return(false);
            }

            string newNameStr = args.NextString();

            if (!string.IsNullOrEmpty(newNameStr))
            {
                string playerOldName;
                string newName = newNameStr;

                if (target)
                {
                    // check online security
                    if (handler.HasLowerSecurity(target, ObjectGuid.Empty))
                    {
                        return(false);
                    }

                    playerOldName = target.GetName();
                }
                else
                {
                    // check offline security
                    if (handler.HasLowerSecurity(null, targetGuid))
                    {
                        return(false);
                    }

                    ObjectManager.GetPlayerNameByGUID(targetGuid, out playerOldName);
                }

                if (!ObjectManager.NormalizePlayerName(ref newName))
                {
                    handler.SendSysMessage(CypherStrings.BadValue);
                    return(false);
                }

                if (ObjectManager.CheckPlayerName(newName, target ? target.GetSession().GetSessionDbcLocale() : Global.WorldMgr.GetDefaultDbcLocale(), true) != ResponseCodes.CharNameSuccess)
                {
                    handler.SendSysMessage(CypherStrings.BadValue);
                    return(false);
                }

                WorldSession session = handler.GetSession();
                if (session != null)
                {
                    if (!session.HasPermission(RBACPermissions.SkipCheckCharacterCreationReservedname) && Global.ObjectMgr.IsReservedName(newName))
                    {
                        handler.SendSysMessage(CypherStrings.ReservedName);
                        return(false);
                    }
                }

                PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_CHECK_NAME);
                stmt.AddValue(0, newName);
                SQLResult result = DB.Characters.Query(stmt);
                if (!result.IsEmpty())
                {
                    handler.SendSysMessage(CypherStrings.RenamePlayerAlreadyExists, newName);
                    return(false);
                }

                // Remove declined name from db
                stmt = DB.Characters.GetPreparedStatement(CharStatements.DEL_CHAR_DECLINED_NAME);
                stmt.AddValue(0, targetGuid.GetCounter());
                DB.Characters.Execute(stmt);

                if (target)
                {
                    target.SetName(newName);
                    session = target.GetSession();
                    if (session != null)
                    {
                        session.KickPlayer();
                    }
                }
                else
                {
                    stmt = DB.Characters.GetPreparedStatement(CharStatements.UPD_NAME_BY_GUID);
                    stmt.AddValue(0, newName);
                    stmt.AddValue(1, targetGuid.GetCounter());
                    DB.Characters.Execute(stmt);
                }

                Global.WorldMgr.UpdateCharacterInfo(targetGuid, newName);

                handler.SendSysMessage(CypherStrings.RenamePlayerWithNewName, playerOldName, newName);

                Player player = handler.GetPlayer();
                if (player)
                {
                    Log.outCommand(session.GetAccountId(), "GM {0} (Account: {1}) forced rename {2} to player {3} (Account: {4})", player.GetName(), session.GetAccountId(), newName, playerOldName, ObjectManager.GetPlayerAccountIdByGUID(targetGuid));
                }
                else
                {
                    Log.outCommand(0, "CONSOLE forced rename '{0}' to '{1}' ({2})", playerOldName, newName, targetGuid.ToString());
                }
            }
            else
            {
                if (target)
                {
                    // check online security
                    if (handler.HasLowerSecurity(target, ObjectGuid.Empty))
                    {
                        return(false);
                    }

                    handler.SendSysMessage(CypherStrings.RenamePlayer, handler.GetNameLink(target));
                    target.SetAtLoginFlag(AtLoginFlags.Rename);
                }
                else
                {
                    // check offline security
                    if (handler.HasLowerSecurity(null, targetGuid))
                    {
                        return(false);
                    }

                    string oldNameLink = handler.playerLink(targetName);
                    handler.SendSysMessage(CypherStrings.RenamePlayerGuid, oldNameLink, targetGuid.ToString());

                    PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.UPD_ADD_AT_LOGIN_FLAG);
                    stmt.AddValue(0, AtLoginFlags.Rename);
                    stmt.AddValue(1, targetGuid.GetCounter());
                    DB.Characters.Execute(stmt);
                }
            }

            return(true);
        }
Example #15
0
        static bool HandleCharacterReputationCommand(StringArguments args, CommandHandler handler)
        {
            Player target;

            if (!handler.extractPlayerTarget(args, out target))
            {
                return(false);
            }

            LocaleConstant loc = handler.GetSessionDbcLocale();

            var targetFSL = target.GetReputationMgr().GetStateList();

            foreach (var pair in targetFSL)
            {
                FactionState   faction      = pair.Value;
                FactionRecord  factionEntry = CliDB.FactionStorage.LookupByKey(faction.ID);
                string         factionName  = factionEntry != null ? factionEntry.Name[loc] : "#Not found#";
                ReputationRank rank         = target.GetReputationMgr().GetRank(factionEntry);
                string         rankName     = handler.GetCypherString(ReputationMgr.ReputationRankStrIndex[(int)rank]);
                StringBuilder  ss           = new StringBuilder();
                if (handler.GetSession() != null)
                {
                    ss.AppendFormat("{0} - |cffffffff|Hfaction:{0}|h[{1} {2}]|h|r", faction.ID, factionName, loc);
                }
                else
                {
                    ss.AppendFormat("{0} - {1} {2}", faction.ID, factionName, loc);
                }

                ss.AppendFormat(" {0} ({1})", rankName, target.GetReputationMgr().GetReputation(factionEntry));

                if (faction.Flags.HasAnyFlag(FactionFlags.Visible))
                {
                    ss.Append(handler.GetCypherString(CypherStrings.FactionVisible));
                }
                if (faction.Flags.HasAnyFlag(FactionFlags.AtWar))
                {
                    ss.Append(handler.GetCypherString(CypherStrings.FactionAtwar));
                }
                if (faction.Flags.HasAnyFlag(FactionFlags.PeaceForced))
                {
                    ss.Append(handler.GetCypherString(CypherStrings.FactionPeaceForced));
                }
                if (faction.Flags.HasAnyFlag(FactionFlags.Hidden))
                {
                    ss.Append(handler.GetCypherString(CypherStrings.FactionHidden));
                }
                if (faction.Flags.HasAnyFlag(FactionFlags.InvisibleForced))
                {
                    ss.Append(handler.GetCypherString(CypherStrings.FactionInvisibleForced));
                }
                if (faction.Flags.HasAnyFlag(FactionFlags.Inactive))
                {
                    ss.Append(handler.GetCypherString(CypherStrings.FactionInactive));
                }

                handler.SendSysMessage(ss.ToString());
            }

            return(true);
        }
        static bool HandleCharacterChangeAccountCommand(StringArguments args, CommandHandler handler)
        {
            string playerNameStr;
            string accountName;

            handler.extractOptFirstArg(args, out playerNameStr, out accountName);
            if (accountName.IsEmpty())
            {
                return(false);
            }

            ObjectGuid targetGuid;
            string     targetName;
            Player     playerNotUsed;

            if (!handler.extractPlayerTarget(new StringArguments(playerNameStr), out playerNotUsed, out targetGuid, out targetName))
            {
                return(false);
            }

            CharacterInfo characterInfo = Global.WorldMgr.GetCharacterInfo(targetGuid);

            if (characterInfo == null)
            {
                handler.SendSysMessage(CypherStrings.PlayerNotFound);
                return(false);
            }

            uint oldAccountId = characterInfo.AccountId;
            uint newAccountId = oldAccountId;

            PreparedStatement stmt = DB.Login.GetPreparedStatement(LoginStatements.SEL_ACCOUNT_ID_BY_NAME);

            stmt.AddValue(0, accountName);
            SQLResult result = DB.Login.Query(stmt);

            if (!result.IsEmpty())
            {
                newAccountId = result.Read <uint>(0);
            }
            else
            {
                handler.SendSysMessage(CypherStrings.AccountNotExist, accountName);
                return(false);
            }

            // nothing to do :)
            if (newAccountId == oldAccountId)
            {
                return(true);
            }

            uint charCount = Global.AccountMgr.GetCharactersCount(newAccountId);

            if (charCount != 0)
            {
                if (charCount >= WorldConfig.GetIntValue(WorldCfg.CharactersPerRealm))
                {
                    handler.SendSysMessage(CypherStrings.AccountCharacterListFull, accountName, newAccountId);
                    return(false);
                }
            }

            stmt = DB.Characters.GetPreparedStatement(CharStatements.UPD_ACCOUNT_BY_GUID);
            stmt.AddValue(0, newAccountId);
            stmt.AddValue(1, targetGuid.GetCounter());
            DB.Characters.DirectExecute(stmt);

            Global.WorldMgr.UpdateRealmCharCount(oldAccountId);
            Global.WorldMgr.UpdateRealmCharCount(newAccountId);

            Global.WorldMgr.UpdateCharacterInfoAccount(targetGuid, newAccountId);

            handler.SendSysMessage(CypherStrings.ChangeAccountSuccess, targetName, accountName);

            string       logString = $"changed ownership of player {targetName} ({targetGuid.ToString()}) from account {oldAccountId} to account {newAccountId}";
            WorldSession session   = handler.GetSession();

            if (session != null)
            {
                Player player = session.GetPlayer();
                if (player != null)
                {
                    Log.outCommand(session.GetAccountId(), $"GM {player.GetName()} (Account: {session.GetAccountId()}) {logString}");
                }
            }
            else
            {
                Log.outCommand(0, $"{handler.GetCypherString(CypherStrings.Console)} {logString}");
            }
            return(true);
        }