static bool HandleCharacterChangeRaceCommand(StringArguments args, CommandHandler handler) { Player target; ObjectGuid targetGuid; string targetName; if (!handler.ExtractPlayerTarget(args, out target, out targetGuid, out targetName)) { return(false); } PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.UPD_ADD_AT_LOGIN_FLAG); stmt.AddValue(0, AtLoginFlags.ChangeRace); if (target) { // @todo add text into database handler.SendSysMessage(CypherStrings.CustomizePlayer, handler.GetNameLink(target)); target.SetAtLoginFlag(AtLoginFlags.ChangeRace); stmt.AddValue(1, target.GetGUID().GetCounter()); } else { string oldNameLink = handler.PlayerLink(targetName); // @todo add text into database handler.SendSysMessage(CypherStrings.CustomizePlayerGuid, oldNameLink, targetGuid.ToString()); stmt.AddValue(1, targetGuid.GetCounter()); } DB.Characters.Execute(stmt); return(true); }
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 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 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 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); }