static bool HandleCharacterTitlesCommand(StringArguments args, CommandHandler handler) { if (args.Empty()) { return(false); } Player target; if (!handler.ExtractPlayerTarget(args, out target)) { return(false); } Locale 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.Name : titleInfo.Name1)[handler.GetSessionDbcLocale()]; if (string.IsNullOrEmpty(name)) { continue; } string activeStr = target.m_playerData.PlayerTitle == titleInfo.MaskID ? handler.GetCypherString(CypherStrings.Active) : ""; string titleNameStr = string.Format(name.ConvertFormatSyntax(), targetName); // send title in "id (idx:idx) - [namedlink locale]" format if (handler.GetSession() != null) { handler.SendSysMessage(CypherStrings.TitleListChat, titleInfo.Id, titleInfo.MaskID, titleInfo.Id, titleNameStr, loc, knownStr, activeStr); } else { handler.SendSysMessage(CypherStrings.TitleListConsole, titleInfo.Id, titleInfo.MaskID, name, loc, knownStr, activeStr); } } } return(true); }
static bool HandleNotifyCommand(StringArguments args, CommandHandler handler) { if (args.Empty()) { return(false); } string str = handler.GetCypherString(CypherStrings.GlobalNotify); str += args.NextString(""); Global.WorldMgr.SendGlobalMessage(new PrintNotification(str)); return(true); }
static bool Energy(StringArguments args, CommandHandler handler) { int energy, energymax; Player target = handler.getSelectedPlayerOrSelf(); byte energyMultiplier = 10; if (CheckModifyResources(args, handler, target, out energy, out energymax, energyMultiplier)) { NotifyModification(handler, target, CypherStrings.YouChangeEnergy, CypherStrings.YoursEnergyChanged, energy / energyMultiplier, energymax / energyMultiplier); target.SetMaxPower(PowerType.Energy, energymax); target.SetPower(PowerType.Energy, energy); Log.outDebug(LogFilter.Misc, handler.GetCypherString(CypherStrings.CurrentEnergy), target.GetMaxPower(PowerType.Energy)); return(true); } return(false); }
static bool Rep(StringArguments args, CommandHandler handler) { if (args.Empty()) { return(false); } Player target = handler.getSelectedPlayerOrSelf(); if (!target) { handler.SendSysMessage(CypherStrings.PlayerNotFound); return(false); } // check online security if (handler.HasLowerSecurity(target, ObjectGuid.Empty)) { return(false); } string factionTxt = handler.extractKeyFromLink(args, "Hfaction"); if (string.IsNullOrEmpty(factionTxt)) { return(false); } uint factionId = uint.Parse(factionTxt); int amount = 0; string rankTxt = args.NextString(); if (factionId == 0 || rankTxt.IsEmpty()) { return(false); } amount = int.Parse(rankTxt); if ((amount == 0) && !(amount < 0) && !rankTxt.IsNumber()) { string rankStr = rankTxt.ToLower(); int r = 0; amount = -42000; for (; r < (int)ReputationRank.Max; ++r) { string rank = handler.GetCypherString(ReputationMgr.ReputationRankStrIndex[r]); if (string.IsNullOrEmpty(rank)) { continue; } if (rank.Equals(rankStr)) { string deltaTxt = args.NextString(); if (!string.IsNullOrEmpty(deltaTxt)) { int delta = int.Parse(deltaTxt); if ((delta < 0) || (delta > ReputationMgr.PointsInRank[r] - 1)) { handler.SendSysMessage(CypherStrings.CommandFactionDelta, (ReputationMgr.PointsInRank[r] - 1)); return(false); } amount += delta; } break; } amount += ReputationMgr.PointsInRank[r]; } if (r >= (int)ReputationRank.Max) { handler.SendSysMessage(CypherStrings.CommandFactionInvparam, rankTxt); return(false); } } FactionRecord factionEntry = CliDB.FactionStorage.LookupByKey(factionId); if (factionEntry == null) { handler.SendSysMessage(CypherStrings.CommandFactionUnknown, factionId); return(false); } if (factionEntry.ReputationIndex < 0) { handler.SendSysMessage(CypherStrings.CommandFactionNorepError, factionEntry.Name[handler.GetSessionDbcLocale()], factionId); return(false); } target.GetReputationMgr().SetOneFactionReputation(factionEntry, amount, false); target.GetReputationMgr().SendState(target.GetReputationMgr().GetState(factionEntry)); handler.SendSysMessage(CypherStrings.CommandModifyRep, factionEntry.Name[handler.GetSessionDbcLocale()], factionId, handler.GetNameLink(target), target.GetReputationMgr().GetReputation(factionEntry)); return(true); }
static bool HandleCharacterReputationCommand(StringArguments args, CommandHandler handler) { Player target; if (!handler.ExtractPlayerTarget(args, out target)) { return(false); } Locale 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; 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 HandleCooldownCommand(StringArguments args, CommandHandler handler) { Unit target = handler.GetSelectedUnit(); if (!target) { handler.SendSysMessage(CypherStrings.PlayerNotFound); return(false); } Player owner = target.GetCharmerOrOwnerPlayerOrPlayerItself(); if (!owner) { owner = handler.GetSession().GetPlayer(); target = owner; } string nameLink = handler.GetNameLink(owner); if (args.Empty()) { target.GetSpellHistory().ResetAllCooldowns(); target.GetSpellHistory().ResetAllCharges(); handler.SendSysMessage(CypherStrings.RemoveallCooldown, nameLink); } else { // number or [name] Shift-click form |color|Hspell:spell_id|h[name]|h|r or Htalent form uint spellIid = handler.ExtractSpellIdFromLink(args); if (spellIid == 0) { return(false); } SpellInfo spellInfo = Global.SpellMgr.GetSpellInfo(spellIid, target.GetMap().GetDifficultyID()); if (spellInfo == null) { handler.SendSysMessage(CypherStrings.UnknownSpell, owner == handler.GetSession().GetPlayer() ? handler.GetCypherString(CypherStrings.You) : nameLink); return(false); } target.GetSpellHistory().ResetCooldown(spellIid, true); target.GetSpellHistory().ResetCharges(spellInfo.ChargeCategoryId); handler.SendSysMessage(CypherStrings.RemoveallCooldown, spellIid, owner == handler.GetSession().GetPlayer() ? handler.GetCypherString(CypherStrings.You) : nameLink); } return(true); }
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 HandleWhispersCommand(StringArguments args, CommandHandler handler) { if (args.Empty()) { handler.SendSysMessage(CypherStrings.CommandWhisperaccepting, handler.GetSession().GetPlayer().IsAcceptWhispers() ? handler.GetCypherString(CypherStrings.On) : handler.GetCypherString(CypherStrings.Off)); return(true); } string argStr = args.NextString(); // whisper on if (argStr == "on") { handler.GetSession().GetPlayer().SetAcceptWhispers(true); handler.SendSysMessage(CypherStrings.CommandWhisperon); return(true); } // whisper off if (argStr == "off") { // Remove all players from the Gamemaster's whisper whitelist handler.GetSession().GetPlayer().ClearWhisperWhiteList(); handler.GetSession().GetPlayer().SetAcceptWhispers(false); handler.SendSysMessage(CypherStrings.CommandWhisperoff); return(true); } if (argStr == "remove") { string name = args.NextString(); if (ObjectManager.NormalizePlayerName(ref name)) { Player player = Global.ObjAccessor.FindPlayerByName(name); if (player) { handler.GetSession().GetPlayer().RemoveFromWhisperWhiteList(player.GetGUID()); handler.SendSysMessage(CypherStrings.CommandWhisperoffplayer, name); return(true); } else { handler.SendSysMessage(CypherStrings.PlayerNotFound, name); return(false); } } } handler.SendSysMessage(CypherStrings.UseBol); return(false); }
static bool HandleModifyRepCommand(StringArguments args, CommandHandler handler) { if (args.Empty()) { return(false); } Player target = handler.GetSelectedPlayerOrSelf(); if (!target) { handler.SendSysMessage(CypherStrings.PlayerNotFound); return(false); } // check online security if (handler.HasLowerSecurity(target, ObjectGuid.Empty)) { return(false); } string factionTxt = handler.ExtractKeyFromLink(args, "Hfaction"); if (string.IsNullOrEmpty(factionTxt)) { return(false); } if (!uint.TryParse(factionTxt, out uint factionId)) { return(false); } string rankTxt = args.NextString(); if (factionId == 0 || !int.TryParse(rankTxt, out int amount)) { return(false); } var factionEntry = CliDB.FactionStorage.LookupByKey(factionId); if (factionEntry == null) { handler.SendSysMessage(CypherStrings.CommandFactionUnknown, factionId); return(false); } if (factionEntry.ReputationIndex < 0) { handler.SendSysMessage(CypherStrings.CommandFactionNorepError, factionEntry.Name[handler.GetSessionDbcLocale()], factionId); return(false); } // try to find rank by name if ((amount == 0) && !(amount < 0) && !rankTxt.IsNumber()) { string rankStr = rankTxt.ToLower(); int i = 0; int r = 0; for (; i != ReputationMgr.ReputationRankThresholds.Length - 1; ++i, ++r) { string rank = handler.GetCypherString(ReputationMgr.ReputationRankStrIndex[r]); if (string.IsNullOrEmpty(rank)) { continue; } if (rank.Equals(rankStr)) { break; } if (i == ReputationMgr.ReputationRankThresholds.Length - 1) { handler.SendSysMessage(CypherStrings.CommandInvalidParam, rankTxt); return(false); } amount = ReputationMgr.ReputationRankThresholds[i]; string deltaTxt = args.NextString(); if (!string.IsNullOrEmpty(deltaTxt)) { int toNextRank = 0; var nextThresholdIndex = i; ++nextThresholdIndex; if (nextThresholdIndex != ReputationMgr.ReputationRankThresholds.Length - 1) { toNextRank = nextThresholdIndex - i; } if (!int.TryParse(deltaTxt, out int delta) || delta < 0 || delta >= toNextRank) { handler.SendSysMessage(CypherStrings.CommandFactionDelta, Math.Max(0, toNextRank - 1)); return(false); } amount += delta; } } } target.GetReputationMgr().SetOneFactionReputation(factionEntry, amount, false); target.GetReputationMgr().SendState(target.GetReputationMgr().GetState(factionEntry)); handler.SendSysMessage(CypherStrings.CommandModifyRep, factionEntry.Name[handler.GetSessionDbcLocale()], factionId, handler.GetNameLink(target), target.GetReputationMgr().GetReputation(factionEntry)); return(true); }