static bool HandleGMFlyCommand(StringArguments args, CommandHandler handler) { if (args.Empty()) { return(false); } Player target = handler.GetSelectedPlayer(); if (target == null) { target = handler.GetPlayer(); } string arg = args.NextString().ToLower(); if (arg == "on") { target.SetCanFly(true); target.SetCanTransitionBetweenSwimAndFly(true); } else if (arg == "off") { target.SetCanFly(false); target.SetCanTransitionBetweenSwimAndFly(false); } else { handler.SendSysMessage(CypherStrings.UseBol); return(false); } handler.SendSysMessage(CypherStrings.CommandFlymodeStatus, handler.GetNameLink(target), arg); return(true); }
static bool Reward(StringArguments args, CommandHandler handler) { Player player = handler.GetSelectedPlayer(); if (!player) { handler.SendSysMessage(CypherStrings.NoCharSelected); return(false); } // .quest reward #entry // number or [name] Shift-click form |color|Hquest:quest_id:quest_level:min_level:max_level:scaling_faction|h[name]|h|r string cId = handler.ExtractKeyFromLink(args, "Hquest"); if (!uint.TryParse(cId, out uint entry)) { return(false); } Quest quest = Global.ObjectMgr.GetQuestTemplate(entry); // If player doesn't have the quest if (quest == null || player.GetQuestStatus(entry) != QuestStatus.Complete || Global.DisableMgr.IsDisabledFor(DisableType.Quest, entry, null)) { handler.SendSysMessage(CypherStrings.CommandQuestNotfound, entry); return(false); } player.RewardQuest(quest, LootItemType.Item, 0, player); return(true); }
static bool Remove(StringArguments args, CommandHandler handler) { Player player = handler.GetSelectedPlayer(); if (!player) { handler.SendSysMessage(CypherStrings.NoCharSelected); return(false); } // .removequest #entry' // number or [name] Shift-click form |color|Hquest:quest_id:quest_level:min_level:max_level:scaling_faction|h[name]|h|r string cId = handler.ExtractKeyFromLink(args, "Hquest"); if (!uint.TryParse(cId, out uint entry)) { return(false); } Quest quest = Global.ObjectMgr.GetQuestTemplate(entry); if (quest == null) { handler.SendSysMessage(CypherStrings.CommandQuestNotfound, entry); return(false); } QuestStatus oldStatus = player.GetQuestStatus(entry); // remove all quest entries for 'entry' from quest log for (byte slot = 0; slot < SharedConst.MaxQuestLogSize; ++slot) { uint logQuest = player.GetQuestSlotQuestId(slot); if (logQuest == entry) { player.SetQuestSlot(slot, 0); // we ignore unequippable quest items in this case, its' still be equipped player.TakeQuestSourceItem(logQuest, false); if (quest.HasFlag(QuestFlags.Pvp)) { player.pvpInfo.IsHostile = player.pvpInfo.IsInHostileArea || player.HasPvPForcingQuest(); player.UpdatePvPState(); } } } player.RemoveActiveQuest(entry, false); player.RemoveRewardedQuest(entry); Global.ScriptMgr.OnQuestStatusChange(player, entry); Global.ScriptMgr.OnQuestStatusChange(player, quest, oldStatus, QuestStatus.None); handler.SendSysMessage(CypherStrings.CommandQuestRemoved); return(true); }
static bool HandleInstanceUnbind(StringArguments args, CommandHandler handler) { if (args.Empty()) { return(false); } Player player = handler.GetSelectedPlayer(); if (!player) { player = handler.GetSession().GetPlayer(); } string map = args.NextString(); if (!sbyte.TryParse(args.NextString(), out sbyte diff)) { diff = -1; } ushort counter = 0; ushort MapId = 0; if (map != "all") { if (!ushort.TryParse(map, out MapId) || MapId == 0) { return(false); } } for (byte i = 0; i < (int)Difficulty.Max; ++i) { var binds = player.GetBoundInstances((Difficulty)i); foreach (var pair in binds) { InstanceSave save = pair.Value.save; if (pair.Key != player.GetMapId() && (MapId == 0 || MapId == pair.Key) && (diff == -1 || diff == (sbyte)save.GetDifficultyID())) { string timeleft = Time.GetTimeString(save.GetResetTime() - Time.UnixTime); handler.SendSysMessage("unbinding map: {0} inst: {1} perm: {2} diff: {3} canReset: {4} TTR: {5}", pair.Key, save.GetInstanceId(), pair.Value.perm ? "yes" : "no", save.GetDifficultyID(), save.CanReset() ? "yes" : "no", timeleft); player.UnbindInstance(pair.Key, (Difficulty)i); counter++; } } } handler.SendSysMessage("instances unbound: {0}", counter); return(true); }
static bool HandleAccountSetAddonCommand(CommandHandler handler, string accountName, byte expansion) { uint accountId; if (!accountName.IsEmpty()) { // Convert Account name to Upper Format accountName = accountName.ToUpper(); accountId = Global.AccountMgr.GetId(accountName); if (accountId == 0) { handler.SendSysMessage(CypherStrings.AccountNotExist, accountName); return(false); } } else { Player player = handler.GetSelectedPlayer(); if (!player) { return(false); } accountId = player.GetSession().GetAccountId(); Global.AccountMgr.GetName(accountId, out accountName); } // Let set addon state only for lesser (strong) security level // or to self account if (handler.GetSession() != null && handler.GetSession().GetAccountId() != accountId && handler.HasLowerSecurityAccount(null, accountId, true)) { return(false); } if (expansion > WorldConfig.GetIntValue(WorldCfg.Expansion)) { return(false); } PreparedStatement stmt = DB.Login.GetPreparedStatement(LoginStatements.UPD_EXPANSION); stmt.AddValue(0, expansion); stmt.AddValue(1, accountId); DB.Login.Execute(stmt); handler.SendSysMessage(CypherStrings.AccountSetaddon, accountName, accountId, expansion); return(true); }
static bool Add(StringArguments args, CommandHandler handler) { Player player = handler.GetSelectedPlayer(); if (!player) { handler.SendSysMessage(CypherStrings.NoCharSelected); return(false); } // .addquest #entry' // number or [name] Shift-click form |color|Hquest:quest_id:quest_level:min_level:max_level:scaling_faction|h[name]|h|r string cId = handler.ExtractKeyFromLink(args, "Hquest"); if (!uint.TryParse(cId, out uint entry)) { return(false); } Quest quest = Global.ObjectMgr.GetQuestTemplate(entry); if (quest == null || Global.DisableMgr.IsDisabledFor(DisableType.Quest, entry, null)) { handler.SendSysMessage(CypherStrings.CommandQuestNotfound, entry); return(false); } // check item starting quest (it can work incorrectly if added without item in inventory) var itc = Global.ObjectMgr.GetItemTemplates(); var result = itc.Values.FirstOrDefault(p => p.GetStartQuest() == entry); if (result != null) { handler.SendSysMessage(CypherStrings.CommandQuestStartfromitem, entry, result.GetId()); return(false); } if (player.IsActiveQuest(entry)) { return(false); } // ok, normal (creature/GO starting) quest if (player.CanAddQuest(quest, true)) { player.AddQuestAndCheckCompletion(quest, null); } return(true); }
static bool HandleInstanceListBinds(StringArguments args, CommandHandler handler) { Player player = handler.GetSelectedPlayer(); if (!player) { player = handler.GetSession().GetPlayer(); } string format = "map: {0} inst: {1} perm: {2} diff: {3} canReset: {4} TTR: {5}"; uint counter = 0; for (byte i = 0; i < (int)Difficulty.Max; ++i) { var binds = player.GetBoundInstances((Difficulty)i); foreach (var pair in binds) { InstanceSave save = pair.Value.save; string timeleft = Time.GetTimeString(save.GetResetTime() - Time.UnixTime); handler.SendSysMessage(format, pair.Key, save.GetInstanceId(), pair.Value.perm ? "yes" : "no", save.GetDifficultyID(), save.CanReset() ? "yes" : "no", timeleft); counter++; } } handler.SendSysMessage("player binds: {0}", counter); counter = 0; Group group = player.GetGroup(); if (group) { for (byte i = 0; i < (int)Difficulty.Max; ++i) { var binds = group.GetBoundInstances((Difficulty)i); foreach (var pair in binds) { InstanceSave save = pair.Value.save; string timeleft = Time.GetTimeString(save.GetResetTime() - Time.UnixTime); handler.SendSysMessage(format, pair.Key, save.GetInstanceId(), pair.Value.perm ? "yes" : "no", save.GetDifficultyID(), save.CanReset() ? "yes" : "no", timeleft); counter++; } } } handler.SendSysMessage("group binds: {0}", counter); return(true); }
static bool Complete(StringArguments args, CommandHandler handler) { Player player = handler.GetSelectedPlayer(); if (!player) { handler.SendSysMessage(CypherStrings.NoCharSelected); return(false); } // .quest complete #entry // number or [name] Shift-click form |color|Hquest:quest_id:quest_level:min_level:max_level:scaling_faction|h[name]|h|r string cId = handler.ExtractKeyFromLink(args, "Hquest"); if (!uint.TryParse(cId, out uint entry)) { return(false); } Quest quest = Global.ObjectMgr.GetQuestTemplate(entry); // If player doesn't have the quest if (quest == null || player.GetQuestStatus(entry) == QuestStatus.None || Global.DisableMgr.IsDisabledFor(DisableType.Quest, entry, null)) { handler.SendSysMessage(CypherStrings.CommandQuestNotfound, entry); return(false); } for (int i = 0; i < quest.Objectives.Count; ++i) { QuestObjective obj = quest.Objectives[i]; switch (obj.Type) { case QuestObjectiveType.Item: { uint curItemCount = player.GetItemCount((uint)obj.ObjectID, true); List <ItemPosCount> dest = new(); InventoryResult msg = player.CanStoreNewItem(ItemConst.NullBag, ItemConst.NullSlot, dest, (uint)obj.ObjectID, (uint)(obj.Amount - curItemCount)); if (msg == InventoryResult.Ok) { Item item = player.StoreNewItem(dest, (uint)obj.ObjectID, true); player.SendNewItem(item, (uint)(obj.Amount - curItemCount), true, false); } break; } case QuestObjectiveType.Monster: { CreatureTemplate creatureInfo = Global.ObjectMgr.GetCreatureTemplate((uint)obj.ObjectID); if (creatureInfo != null) { for (int z = 0; z < obj.Amount; ++z) { player.KilledMonster(creatureInfo, ObjectGuid.Empty); } } break; } case QuestObjectiveType.GameObject: { for (int z = 0; z < obj.Amount; ++z) { player.KillCreditGO((uint)obj.ObjectID); } break; } case QuestObjectiveType.MinReputation: { int curRep = player.GetReputationMgr().GetReputation((uint)obj.ObjectID); if (curRep < obj.Amount) { FactionRecord factionEntry = CliDB.FactionStorage.LookupByKey(obj.ObjectID); if (factionEntry != null) { player.GetReputationMgr().SetReputation(factionEntry, obj.Amount); } } break; } case QuestObjectiveType.MaxReputation: { int curRep = player.GetReputationMgr().GetReputation((uint)obj.ObjectID); if (curRep > obj.Amount) { FactionRecord factionEntry = CliDB.FactionStorage.LookupByKey(obj.ObjectID); if (factionEntry != null) { player.GetReputationMgr().SetReputation(factionEntry, obj.Amount); } } break; } case QuestObjectiveType.Money: { player.ModifyMoney(obj.Amount); break; } case QuestObjectiveType.PlayerKills: { for (var z = 0; z < obj.Amount; ++z) { player.KilledPlayerCredit(ObjectGuid.Empty); } break; } } } player.CompleteQuest(entry); return(true); }
static bool HandleTeleGroupCommand(StringArguments args, CommandHandler handler) { if (args.Empty()) { return(false); } Player target = handler.GetSelectedPlayer(); if (!target) { handler.SendSysMessage(CypherStrings.NoCharSelected); return(false); } // check online security if (handler.HasLowerSecurity(target, ObjectGuid.Empty)) { return(false); } // id, or string, or [name] Shift-click form |color|Htele:id|h[name]|h|r GameTele tele = handler.ExtractGameTeleFromLink(args); if (tele == null) { handler.SendSysMessage(CypherStrings.CommandTeleNotfound); return(false); } MapRecord map = CliDB.MapStorage.LookupByKey(tele.mapId); if (map == null || map.IsBattlegroundOrArena()) { handler.SendSysMessage(CypherStrings.CannotTeleToBg); return(false); } string nameLink = handler.GetNameLink(target); Group grp = target.GetGroup(); if (!grp) { handler.SendSysMessage(CypherStrings.NotInGroup, nameLink); return(false); } for (GroupReference refe = grp.GetFirstMember(); refe != null; refe = refe.Next()) { Player player = refe.GetSource(); if (!player || !player.GetSession()) { 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); continue; } handler.SendSysMessage(CypherStrings.TeleportingTo, plNameLink, "", tele.name); if (handler.NeedReportToTarget(player)) { player.SendSysMessage(CypherStrings.TeleportedToBy, nameLink); } // stop flight if need if (player.IsInFlight()) { player.GetMotionMaster().MovementExpired(); player.CleanupAfterTaxiFlight(); } // save only in non-flight case else { player.SaveRecallPosition(); } player.TeleportTo(tele.mapId, tele.posX, tele.posY, tele.posZ, tele.orientation); } return(true); }
static bool HandleAccountSetSecLevelCommand(StringArguments args, CommandHandler handler) { if (args.Empty()) { handler.SendSysMessage(CypherStrings.CmdSyntax); return(false); } string accountName = ""; string arg1 = args.NextString(); string arg2 = args.NextString(); string arg3 = args.NextString(); bool isAccountNameGiven = true; if (string.IsNullOrEmpty(arg3)) { if (!handler.GetSelectedPlayer()) { return(false); } isAccountNameGiven = false; } if (!isAccountNameGiven && string.IsNullOrEmpty(arg2)) { return(false); } if (isAccountNameGiven) { accountName = arg1; if (Global.AccountMgr.GetId(accountName) == 0) { handler.SendSysMessage(CypherStrings.AccountNotExist, accountName); return(false); } } // Check for invalid specified GM level. if (!uint.TryParse(isAccountNameGiven ? arg2 : arg1, out uint securityLevel)) { return(false); } if (securityLevel > (uint)AccountTypes.Console) { handler.SendSysMessage(CypherStrings.BadValue); return(false); } // command.getSession() == NULL only for console uint accountId = (isAccountNameGiven) ? Global.AccountMgr.GetId(accountName) : handler.GetSelectedPlayer().GetSession().GetAccountId(); if (!int.TryParse(isAccountNameGiven ? arg3 : arg2, out int realmID)) { return(false); } AccountTypes playerSecurity; if (handler.GetSession() != null) { playerSecurity = Global.AccountMgr.GetSecurity(handler.GetSession().GetAccountId(), realmID); } else { playerSecurity = AccountTypes.Console; } // can set security level only for target with less security and to less security that we have // This is also reject self apply in fact AccountTypes targetSecurity = Global.AccountMgr.GetSecurity(accountId, realmID); if (targetSecurity >= playerSecurity || (AccountTypes)securityLevel >= playerSecurity) { handler.SendSysMessage(CypherStrings.YoursSecurityIsLow); return(false); } PreparedStatement stmt; // Check and abort if the target gm has a higher rank on one of the realms and the new realm is -1 if (realmID == -1 && !Global.AccountMgr.IsConsoleAccount(playerSecurity)) { stmt = DB.Login.GetPreparedStatement(LoginStatements.SEL_ACCOUNT_ACCESS_SECLEVEL_TEST); stmt.AddValue(0, accountId); stmt.AddValue(1, securityLevel); SQLResult result = DB.Login.Query(stmt); if (!result.IsEmpty()) { handler.SendSysMessage(CypherStrings.YoursSecurityIsLow); return(false); } } // Check if provided realmID has a negative value other than -1 if (realmID < -1) { handler.SendSysMessage(CypherStrings.InvalidRealmid); return(false); } RBACData rbac = isAccountNameGiven ? null : handler.GetSelectedPlayer().GetSession().GetRBACData(); Global.AccountMgr.UpdateAccountAccess(rbac, accountId, (byte)securityLevel, realmID); handler.SendSysMessage(CypherStrings.YouChangeSecurity, accountName, securityLevel); return(true); }
static bool HandleSetAddonCommand(StringArguments args, CommandHandler handler) { if (args.Empty()) { return(false); } // Get the command line arguments string account = args.NextString(); string exp = args.NextString(); if (string.IsNullOrEmpty(account)) { return(false); } string accountName; uint accountId; if (string.IsNullOrEmpty(exp)) { Player player = handler.GetSelectedPlayer(); if (!player) { return(false); } accountId = player.GetSession().GetAccountId(); Global.AccountMgr.GetName(accountId, out accountName); exp = account; } else { // Convert Account name to Upper Format accountName = account.ToUpper(); accountId = Global.AccountMgr.GetId(accountName); if (accountId == 0) { handler.SendSysMessage(CypherStrings.AccountNotExist, accountName); return(false); } } // Let set addon state only for lesser (strong) security level // or to self account if (handler.GetSession() != null && handler.GetSession().GetAccountId() != accountId && handler.HasLowerSecurityAccount(null, accountId, true)) { return(false); } if (!byte.TryParse(exp, out byte expansion)) { return(false); } if (expansion > WorldConfig.GetIntValue(WorldCfg.Expansion)) { return(false); } PreparedStatement stmt = DB.Login.GetPreparedStatement(LoginStatements.UPD_EXPANSION); stmt.AddValue(0, expansion); stmt.AddValue(1, accountId); DB.Login.Execute(stmt); handler.SendSysMessage(CypherStrings.AccountSetaddon, accountName, accountId, expansion); return(true); }
static bool HandleAccountSetSecLevelCommand(CommandHandler handler, string accountName, byte securityLevel, int?realmId) { uint accountId; if (!accountName.IsEmpty()) { accountId = Global.AccountMgr.GetId(accountName); if (accountId == 0) { handler.SendSysMessage(CypherStrings.AccountNotExist, accountName); return(false); } } else { Player player = handler.GetSelectedPlayer(); if (!player) { return(false); } accountId = player.GetSession().GetAccountId(); Global.AccountMgr.GetName(accountId, out accountName); } if (securityLevel > (uint)AccountTypes.Console) { handler.SendSysMessage(CypherStrings.BadValue); return(false); } int realmID = -1; if (realmId.HasValue) { realmID = realmId.Value; } AccountTypes playerSecurity; if (handler.GetSession() != null) { playerSecurity = Global.AccountMgr.GetSecurity(handler.GetSession().GetAccountId(), realmID); } else { playerSecurity = AccountTypes.Console; } // can set security level only for target with less security and to less security that we have // This is also reject self apply in fact AccountTypes targetSecurity = Global.AccountMgr.GetSecurity(accountId, realmID); if (targetSecurity >= playerSecurity || (AccountTypes)securityLevel >= playerSecurity) { handler.SendSysMessage(CypherStrings.YoursSecurityIsLow); return(false); } PreparedStatement stmt; // Check and abort if the target gm has a higher rank on one of the realms and the new realm is -1 if (realmID == -1 && !Global.AccountMgr.IsConsoleAccount(playerSecurity)) { stmt = DB.Login.GetPreparedStatement(LoginStatements.SEL_ACCOUNT_ACCESS_SECLEVEL_TEST); stmt.AddValue(0, accountId); stmt.AddValue(1, securityLevel); SQLResult result = DB.Login.Query(stmt); if (!result.IsEmpty()) { handler.SendSysMessage(CypherStrings.YoursSecurityIsLow); return(false); } } // Check if provided realmID has a negative value other than -1 if (realmID < -1) { handler.SendSysMessage(CypherStrings.InvalidRealmid); return(false); } Global.AccountMgr.UpdateAccountAccess(null, accountId, (byte)securityLevel, realmID); handler.SendSysMessage(CypherStrings.YouChangeSecurity, accountName, securityLevel); return(true); }