static bool CheckModifyResources(StringArguments args, CommandHandler handler, Player target, out int res, out int resmax, byte multiplier = 1) { res = 0; resmax = 0; if (args.Empty()) { return(false); } res = args.NextInt32() * multiplier; resmax = args.NextInt32() * multiplier; if (resmax == 0) { resmax = res; } if (res < 1 || resmax < 1 || resmax < res) { handler.SendSysMessage(CypherStrings.BadValue); return(false); } if (!target) { handler.SendSysMessage(CypherStrings.NoCharSelected); return(false); } if (handler.HasLowerSecurity(target, ObjectGuid.Empty)) { return(false); } return(true); }
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 Money(StringArguments args, CommandHandler handler) { Player target = handler.getSelectedPlayerOrSelf(); if (!target) { handler.SendSysMessage(CypherStrings.NoCharSelected); return(false); } // check online security if (handler.HasLowerSecurity(target, ObjectGuid.Empty)) { return(false); } long addmoney = args.NextInt64(); long moneyuser = (long)target.GetMoney(); if (addmoney < 0) { ulong newmoney = (ulong)(moneyuser + addmoney); Log.outDebug(LogFilter.ChatSystem, Global.ObjectMgr.GetCypherString(CypherStrings.CurrentMoney), moneyuser, addmoney, newmoney); if (newmoney <= 0) { handler.SendSysMessage(CypherStrings.YouTakeAllMoney, handler.GetNameLink(target)); if (handler.needReportToTarget(target)) { target.SendSysMessage(CypherStrings.YoursAllMoneyGone, handler.GetNameLink()); } target.SetMoney(0); } else { if (newmoney > PlayerConst.MaxMoneyAmount) { newmoney = PlayerConst.MaxMoneyAmount; } handler.SendSysMessage(CypherStrings.YouTakeMoney, Math.Abs(addmoney), handler.GetNameLink(target)); if (handler.needReportToTarget(target)) { target.SendSysMessage(CypherStrings.YoursMoneyTaken, handler.GetNameLink(), Math.Abs(addmoney)); } target.SetMoney(newmoney); } } else { handler.SendSysMessage(CypherStrings.YouGiveMoney, addmoney, handler.GetNameLink(target)); if (handler.needReportToTarget(target)) { target.SendSysMessage(CypherStrings.YoursMoneyGiven, handler.GetNameLink(), addmoney); } if (addmoney >= PlayerConst.MaxMoneyAmount) { target.SetMoney(PlayerConst.MaxMoneyAmount); } else { target.ModifyMoney(addmoney); } } Log.outDebug(LogFilter.ChatSystem, Global.ObjectMgr.GetCypherString(CypherStrings.NewMoney), moneyuser, addmoney, target.GetMoney()); return(true); }
static bool Mount(StringArguments args, CommandHandler handler) { if (args.Empty()) { return(false); } ushort mId = 1147; float speed = 15f; uint num = args.NextUInt32(); switch (num) { case 1: mId = 14340; break; case 2: mId = 4806; break; case 3: mId = 6471; break; case 4: mId = 12345; break; case 5: mId = 6472; break; case 6: mId = 6473; break; case 7: mId = 10670; break; case 8: mId = 10719; break; case 9: mId = 10671; break; case 10: mId = 10672; break; case 11: mId = 10720; break; case 12: mId = 14349; break; case 13: mId = 11641; break; case 14: mId = 12244; break; case 15: mId = 12242; break; case 16: mId = 14578; break; case 17: mId = 14579; break; case 18: mId = 14349; break; case 19: mId = 12245; break; case 20: mId = 14335; break; case 21: mId = 207; break; case 22: mId = 2328; break; case 23: mId = 2327; break; case 24: mId = 2326; break; case 25: mId = 14573; break; case 26: mId = 14574; break; case 27: mId = 14575; break; case 28: mId = 604; break; case 29: mId = 1166; break; case 30: mId = 2402; break; case 31: mId = 2410; break; case 32: mId = 2409; break; case 33: mId = 2408; break; case 34: mId = 2405; break; case 35: mId = 14337; break; case 36: mId = 6569; break; case 37: mId = 10661; break; case 38: mId = 10666; break; case 39: mId = 9473; break; case 40: mId = 9476; break; case 41: mId = 9474; break; case 42: mId = 14374; break; case 43: mId = 14376; break; case 44: mId = 14377; break; case 45: mId = 2404; break; case 46: mId = 2784; break; case 47: mId = 2787; break; case 48: mId = 2785; break; case 49: mId = 2736; break; case 50: mId = 2786; break; case 51: mId = 14347; break; case 52: mId = 14346; break; case 53: mId = 14576; break; case 54: mId = 9695; break; case 55: mId = 9991; break; case 56: mId = 6448; break; case 57: mId = 6444; break; case 58: mId = 6080; break; case 59: mId = 6447; break; case 60: mId = 4805; break; case 61: mId = 9714; break; case 62: mId = 6448; break; case 63: mId = 6442; break; case 64: mId = 14632; break; case 65: mId = 14332; break; case 66: mId = 14331; break; case 67: mId = 8469; break; case 68: mId = 2830; break; case 69: mId = 2346; break; default: handler.SendSysMessage(CypherStrings.NoMount); return(false); } Player target = handler.getSelectedPlayerOrSelf(); if (!target) { handler.SendSysMessage(CypherStrings.NoCharSelected); return(false); } // check online security if (handler.HasLowerSecurity(target, ObjectGuid.Empty)) { return(false); } NotifyModification(handler, target, CypherStrings.YouGiveMount, CypherStrings.MountGived); target.SetUInt32Value(UnitFields.Flags, (uint)UnitFlags.Pvp); target.Mount(mId); var packet = new MoveSetSpeed(ServerOpcodes.MoveSetRunSpeed); packet.MoverGUID = target.GetGUID(); packet.SequenceIndex = 0; packet.Speed = speed; target.SendMessageToSet(packet, true); packet = new MoveSetSpeed(ServerOpcodes.MoveSetSwimSpeed); packet.MoverGUID = target.GetGUID(); packet.SequenceIndex = 0; packet.Speed = speed; target.SendMessageToSet(packet, true); return(true); }
static bool HandleModifySpellCommand(StringArguments args, CommandHandler handler) { if (args.Empty()) { return(false); } byte spellflatid = args.NextByte(); if (spellflatid == 0) { return(false); } byte op = args.NextByte(); if (op == 0) { return(false); } ushort val = args.NextUInt16(); if (val == 0) { return(false); } ushort mark; string pmark = args.NextString(); if (string.IsNullOrEmpty(pmark)) { mark = 65535; } else { mark = ushort.Parse(pmark); } Player target = handler.getSelectedPlayerOrSelf(); if (!target) { handler.SendSysMessage(CypherStrings.NoCharSelected); return(false); } // check online security if (handler.HasLowerSecurity(target, ObjectGuid.Empty)) { return(false); } handler.SendSysMessage(CypherStrings.YouChangeSpellflatid, spellflatid, val, mark, handler.GetNameLink(target)); if (handler.needReportToTarget(target)) { target.SendSysMessage(CypherStrings.YoursSpellflatidChanged, handler.GetNameLink(), spellflatid, val, mark); } SetSpellModifier packet = new SetSpellModifier(ServerOpcodes.SetFlatSpellModifier); SpellModifierInfo spellMod = new SpellModifierInfo(); spellMod.ModIndex = op; SpellModifierData modData; modData.ClassIndex = spellflatid; modData.ModifierValue = val; spellMod.ModifierData.Add(modData); packet.Modifiers.Add(spellMod); target.SendPacket(packet); return(true); }
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); } Global.CharacterCacheStorage.GetCharacterNameByGuid(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.CharacterCacheStorage.UpdateCharacterData(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, Global.CharacterCacheStorage.GetCharacterAccountIdByGuid(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); }
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 HandleModifyMoneyCommand(StringArguments args, CommandHandler handler) { Player target = handler.GetSelectedPlayerOrSelf(); if (!target) { handler.SendSysMessage(CypherStrings.NoCharSelected); return(false); } // check online security if (handler.HasLowerSecurity(target, ObjectGuid.Empty)) { return(false); } long moneyToAdd = args.NextInt64(); ulong targetMoney = target.GetMoney(); if (moneyToAdd < 0) { long newmoney = (long)targetMoney + moneyToAdd; Log.outDebug(LogFilter.ChatSystem, Global.ObjectMgr.GetCypherString(CypherStrings.CurrentMoney), targetMoney, moneyToAdd, newmoney); if (newmoney <= 0) { handler.SendSysMessage(CypherStrings.YouTakeAllMoney, handler.GetNameLink(target)); if (handler.NeedReportToTarget(target)) { target.SendSysMessage(CypherStrings.YoursAllMoneyGone, handler.GetNameLink()); } target.SetMoney(0); } else { ulong moneyToAddMsg = (ulong)(moneyToAdd * -1); if (newmoney > (long)PlayerConst.MaxMoneyAmount) { newmoney = (long)PlayerConst.MaxMoneyAmount; } handler.SendSysMessage(CypherStrings.YouTakeMoney, moneyToAddMsg, handler.GetNameLink(target)); if (handler.NeedReportToTarget(target)) { target.SendSysMessage(CypherStrings.YoursMoneyTaken, handler.GetNameLink(), moneyToAddMsg); } target.SetMoney((ulong)newmoney); } } else { handler.SendSysMessage(CypherStrings.YouGiveMoney, moneyToAdd, handler.GetNameLink(target)); if (handler.NeedReportToTarget(target)) { target.SendSysMessage(CypherStrings.YoursMoneyGiven, handler.GetNameLink(), moneyToAdd); } if ((ulong)moneyToAdd >= PlayerConst.MaxMoneyAmount) { moneyToAdd = Convert.ToInt64(PlayerConst.MaxMoneyAmount); } moneyToAdd = (long)Math.Min((ulong)moneyToAdd, (PlayerConst.MaxMoneyAmount - targetMoney)); target.ModifyMoney(moneyToAdd); } Log.outDebug(LogFilter.ChatSystem, Global.ObjectMgr.GetCypherString(CypherStrings.NewMoney), targetMoney, moneyToAdd, target.GetMoney()); 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 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); }
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(); Map gmMap = gmPlayer.GetMap(); bool toInstance = gmMap.Instanceable(); bool onlyLocalSummon = false; // make sure people end up on our instance of the map, disallow far summon if intended destination is different from actual destination // note: we could probably relax this further by checking permanent saves and the like, but eh // :close enough: if (toInstance) { Player groupLeader = Global.ObjAccessor.GetPlayer(gmMap, group.GetLeaderGUID()); if (!groupLeader || (groupLeader.GetMapId() != gmMap.GetId()) || (groupLeader.GetInstanceId() != gmMap.GetInstanceId())) { handler.SendSysMessage(CypherStrings.PartialGroupSummon); onlyLocalSummon = true; } } 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)) { continue; } string plNameLink = handler.GetNameLink(player); if (player.IsBeingTeleported()) { handler.SendSysMessage(CypherStrings.IsTeleported, plNameLink); continue; } if (toInstance) { Map playerMap = player.GetMap(); if ((onlyLocalSummon || (playerMap.Instanceable() && playerMap.GetId() == gmMap.GetId())) && // either no far summon allowed or we're in the same map as player (no map switch) ((playerMap.GetId() != gmMap.GetId()) || (playerMap.GetInstanceId() != gmMap.GetInstanceId()))) // so we need to be in the same map and instance of the map, otherwise skip { // cannot summon from instance to instance handler.SendSysMessage(CypherStrings.CannotSummonInstInst, plNameLink); continue; } } 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.GetCombatReach()); player.TeleportTo(gmPlayer.GetMapId(), x, y, z, player.GetOrientation()); } return(true); }
static bool HandleTeleGroupCommand(CommandHandler handler, GameTele tele) { if (tele == null) { handler.SendSysMessage(CypherStrings.CommandTeleNotfound); 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); } 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.FinishTaxiFlight(); } else { player.SaveRecallPosition(); // save only in non-flight case } player.TeleportTo(tele.mapId, tele.posX, tele.posY, tele.posZ, tele.orientation); } return(true); }
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); }