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() : Global.CharacterCacheStorage.GetCharacterLevelByGuid(targetGuid)); if (!int.TryParse(levelStr, out int addlevel)) { addlevel = 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 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() : Global.CharacterCacheStorage.GetCharacterGuildIdByGuid(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)); }
static bool HandleTeleNameCommand(StringArguments args, CommandHandler handler) { handler.ExtractOptFirstArg(args, out string nameStr, out string teleStr); if (teleStr.IsEmpty()) { return(false); } if (!handler.ExtractPlayerTarget(new StringArguments(nameStr), out Player target, out ObjectGuid targetGuid, out string targetName)) { return(false); } if (teleStr.Equals("$home")) // References target's homebind { if (target) { target.TeleportTo(target.GetHomebind()); } else { PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_CHAR_HOMEBIND); stmt.AddValue(0, targetGuid.GetCounter()); SQLResult result = DB.Characters.Query(stmt); if (!result.IsEmpty()) { WorldLocation loc = new(result.Read <ushort>(0), result.Read <float>(2), result.Read <float>(3), result.Read <float>(4), 0.0f); uint zoneId = result.Read <ushort>(1); Player.SavePositionInDB(loc, zoneId, targetGuid, null); } } return(true); } // id, or string, or [name] Shift-click form |color|Htele:id|h[name]|h|r GameTele tele = handler.ExtractGameTeleFromLink(new StringArguments(teleStr)); if (tele == null) { handler.SendSysMessage(CypherStrings.CommandTeleNotfound); return(false); } if (target) { // check online security if (handler.HasLowerSecurity(target, ObjectGuid.Empty)) { return(false); } string chrNameLink = handler.PlayerLink(targetName); if (target.IsBeingTeleported() == true) { handler.SendSysMessage(CypherStrings.IsTeleported, chrNameLink); return(false); } handler.SendSysMessage(CypherStrings.TeleportingTo, chrNameLink, "", tele.name); if (handler.NeedReportToTarget(target)) { target.SendSysMessage(CypherStrings.TeleportedToBy, handler.GetNameLink()); } // stop flight if need if (target.IsInFlight()) { target.GetMotionMaster().MovementExpired(); target.CleanupAfterTaxiFlight(); } // save only in non-flight case else { target.SaveRecallPosition(); } target.TeleportTo(tele.mapId, tele.posX, tele.posY, tele.posZ, tele.orientation); } else { // check offline security if (handler.HasLowerSecurity(null, targetGuid)) { return(false); } string nameLink = handler.PlayerLink(targetName); handler.SendSysMessage(CypherStrings.TeleportingTo, nameLink, handler.GetCypherString(CypherStrings.Offline), tele.name); Player.SavePositionInDB(new WorldLocation(tele.mapId, tele.posX, tele.posY, tele.posZ, tele.orientation), Global.MapMgr.GetZoneId(PhasingHandler.EmptyPhaseShift, tele.mapId, tele.posX, tele.posY, tele.posZ), targetGuid, null); } 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; if (!handler.ExtractPlayerTarget(new StringArguments(playerNameStr), out _, out targetGuid, out targetName)) { return(false); } CharacterCacheEntry characterInfo = Global.CharacterCacheStorage.GetCharacterCacheByGuid(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.CharacterCacheStorage.UpdateCharacterAccountId(targetGuid, newAccountId); handler.SendSysMessage(CypherStrings.ChangeAccountSuccess, targetName, accountName); string logString = $"changed ownership of player {targetName} ({targetGuid}) 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); }
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); string oldCaptainName; if (!Global.CharacterCacheStorage.GetCharacterNameByGuid(arena.GetCaptain(), out oldCaptainName)) { return(false); } handler.SendSysMessage(CypherStrings.ArenaCaptain, arena.GetName(), arena.GetId(), oldCaptainName, 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); }