static void HandleCharacterDeletedRestoreHelper(DeletedInfo delInfo, CommandHandler handler) { if (delInfo.accountName.IsEmpty()) // account not exist { handler.SendSysMessage(CypherStrings.CharacterDeletedSkipAccount, delInfo.name, delInfo.guid.ToString(), delInfo.accountId); return; } // check character count uint charcount = Global.AccountMgr.GetCharactersCount(delInfo.accountId); if (charcount >= WorldConfig.GetIntValue(WorldCfg.CharactersPerRealm)) { handler.SendSysMessage(CypherStrings.CharacterDeletedSkipFull, delInfo.name, delInfo.guid.ToString(), delInfo.accountId); return; } if (!Global.CharacterCacheStorage.GetCharacterGuidByName(delInfo.name).IsEmpty()) { handler.SendSysMessage(CypherStrings.CharacterDeletedSkipName, delInfo.name, delInfo.guid.ToString(), delInfo.accountId); return; } PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.UPD_RESTORE_DELETE_INFO); stmt.AddValue(0, delInfo.name); stmt.AddValue(1, delInfo.accountId); stmt.AddValue(2, delInfo.guid.GetCounter()); DB.Characters.Execute(stmt); Global.CharacterCacheStorage.UpdateCharacterInfoDeleted(delInfo.guid, false, delInfo.name); }
static bool HandleCharacterDeletedRestoreCommand(StringArguments args, CommandHandler handler) { // It is required to submit at least one argument if (args.Empty()) { return(false); } string searchString = args.NextString(); string newCharName = args.NextString(); uint newAccount = args.NextUInt32(); List <DeletedInfo> foundList = new List <DeletedInfo>(); if (!GetDeletedCharacterInfoList(foundList, searchString)) { return(false); } if (foundList.Empty()) { handler.SendSysMessage(CypherStrings.CharacterDeletedListEmpty); return(false); } handler.SendSysMessage(CypherStrings.CharacterDeletedRestore); HandleCharacterDeletedListHelper(foundList, handler); if (newCharName.IsEmpty()) { // Drop not existed account cases foreach (var info in foundList) { HandleCharacterDeletedRestoreHelper(info, handler); } } else if (foundList.Count == 1 && ObjectManager.NormalizePlayerName(ref newCharName)) { DeletedInfo delInfo = foundList[0]; // update name delInfo.name = newCharName; // if new account provided update deleted info if (newAccount != 0 && newAccount != delInfo.accountId) { delInfo.accountId = newAccount; Global.AccountMgr.GetName(newAccount, out delInfo.accountName); } HandleCharacterDeletedRestoreHelper(delInfo, handler); } else { handler.SendSysMessage(CypherStrings.CharacterDeletedErrRename); } return(true); }