示例#1
0
            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);
            }
示例#2
0
            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);
            }