public void CharacterDeletionRequestMessageFrame(WorldClient client, CharacterDeletionRequestMessage characterDeletionRequestMessage) { var character = CharacterRepository.Instance.GetCharacterById((int)characterDeletionRequestMessage.characterId); //character.IsDeleted = true; if (character.Guild != null) { //character.Guild.IsDeleted = true; var guild = GuildRepository.Instance.GetGuildById(character.Guild.Id); foreach (var member in character.Guild.GuildMembers) { DatabaseManager.Instance.Delete <Burning.Emu.World.Entity.GuildMember>(GuildMemberRepository.Instance.Collection, member); } DatabaseManager.Instance.Delete <Guild>(GuildRepository.Instance.Collection, guild); } DatabaseManager.Instance.Delete <CharacterCharacteristic>(CharacterCharacteristicRepository.Instance.Collection, character.Characteristics); DatabaseManager.Instance.Delete <Inventory>(InventoryRepository.Instance.Collection, character.Inventory); //delete shortcuts foreach (var shortcutBar in character.CharacterShortcutBars) { DatabaseManager.Instance.Delete <CharacterShortcut>(CharacterShortcutRepository.Instance.Collection, shortcutBar); } DatabaseManager.Instance.Delete <Character>(CharacterRepository.Instance.Collection, character); this.SendCharacterListMessage(client); }
public static void HandleCharacterDeletionRequestMessage(WorldClient client, CharacterDeletionRequestMessage message) { if (!IPCAccessor.Instance.IsConnected) { client.Send(new CharacterDeletionErrorMessage(1)); client.DisconnectLater(1000); } else { CharacterRecord characterRecord = client.Characters.Find((CharacterRecord entry) => entry.Id == message.characterId); if (characterRecord == null) { client.Send(new CharacterDeletionErrorMessage(1)); client.DisconnectLater(1000); } else { Stump.Server.WorldServer.Game.Guilds.GuildMember guildMember = Singleton <GuildManager> .Instance.TryGetGuildMember(characterRecord.Id); if (guildMember != null && guildMember.IsBoss) { client.Send(new CharacterDeletionErrorMessage(1)); client.DisconnectLater(1000); } else { string secretAnswerHash = message.secretAnswerHash; if (Singleton <ExperienceManager> .Instance.GetCharacterLevel(characterRecord.Experience) <= 20 || (client.Account.SecretAnswer != null && secretAnswerHash == (message.characterId + "~" + client.Account.SecretAnswer).GetMD5())) { if (client.Account.DeletedCharactersCount > CharacterHandler.MaxDayCharacterDeletion) { client.Send(new CharacterDeletionErrorMessage(2)); } else { Singleton <CharacterManager> .Instance.DeleteCharacterOnAccount(characterRecord, client); CharacterHandler.SendCharactersListMessage(client); BasicHandler.SendBasicNoOperationMessage(client); } } else { client.Send(new CharacterDeletionErrorMessage(3)); } } } } }
public static void HandleCharacterDeletionRequest(CharacterDeletionRequestMessage message, WorldClient client) { if (!WorldServer.Instance.IsStatus(ServerStatusEnum.ONLINE)) { client.Send(new CharacterDeletionErrorMessage((sbyte)CharacterDeletionErrorEnum.DEL_ERR_NO_REASON)); return; } if (!client.InGame) { MessagePool.SendRequest <OnCharacterDeletionResultMessage>(TransitionServerManager.Instance.AuthServer, new OnCharacterDeletionMessage { CharacterId = (long)message.characterId, }, delegate(OnCharacterDeletionResultMessage msg) { ProcessDeletion(msg.Succes, client, (long)message.characterId); }); } }
public static void HandleCharacterDeletionRequestMessage(Client client, CharacterDeletionRequestMessage message) { CharacterRecord characterRecord = client.Account.Characters.FirstOrDefault(character => character.Id == message.characterId); if (characterRecord != null) { if (characterRecord.Level >= 20 ? Functions.CipherSecretAnswer(message.characterId, client.Account.SecretAnswer) != message.secretAnswerHash : Functions.CipherSecretAnswer(message.characterId, "000000000000000000") != message.secretAnswerHash) { client.Send(new CharacterDeletionErrorMessage((sbyte)CharacterDeletionErrorEnum.DEL_ERR_BAD_SECRET_ANSWER)); } else { characterRecord.Delete(); client.Account.Characters.Remove(characterRecord); SendCharactersListMessage(client, false); } } else { client.Send(new CharacterDeletionErrorMessage((sbyte)CharacterDeletionErrorEnum.DEL_ERR_NO_REASON)); } }
public static void HandleCharacterDeletion(CharacterDeletionRequestMessage message, WorldClient client) // finish this { CharacterRecord deletedCharacter = CharacterRecord.GetCharacterRecordById(message.characterId); if (deletedCharacter == null) { return; } StatsRecord.GetStatsRecord(message.characterId).RemoveElement(); CharacterRecord.Characters.Remove(deletedCharacter); client.Characters.Remove(deletedCharacter); deletedCharacter.RemoveElement(); CharacterItemRecord.RemoveAll(message.characterId); GeneralShortcutRecord.RemoveAll(message.characterId); CharacterSpellRecord.RemoveAll(message.characterId); CharacterJobRecord.RemoveAll(message.characterId); BidShopGainRecord.RemoveAll(message.characterId); CharacterGuildRecord.RemoveAll(message.characterId); // Si il est meneur de guilde? BidShopItemRecord.RemoveAll(message.characterId); Logger.Log("Character " + deletedCharacter.Name + " deleted"); client.Send(new CharactersListMessage(client.Characters.ConvertAll <CharacterBaseInformations>(x => x.GetBaseInformation()), false)); }
public static void HandleCharacterDeletionRequestMessage(WorldClient client, CharacterDeletionRequestMessage message) { var character = client.Characters.Find(entry => entry.Id == message.characterId); /* check null */ if (character == null) { client.Send(new CharacterDeletionErrorMessage((int)CharacterDeletionErrorEnum.DEL_ERR_NO_REASON)); client.DisconnectLater(1000); return; } var secretAnswerHash = message.secretAnswerHash; /* Level < 20 or > 20 and Good secret Answer */ if (ExperienceManager.Instance.GetCharacterLevel(character.Experience, character.PrestigeRank) <= 20 || (client.Account.SecretAnswer != null && secretAnswerHash == (message.characterId + "~" + client.Account.SecretAnswer).GetMD5())) { /* Too many character deletion */ if (client.Account.DeletedCharactersCount > MaxDayCharacterDeletion) { client.Send(new CharacterDeletionErrorMessage((int)CharacterDeletionErrorEnum.DEL_ERR_TOO_MANY_CHAR_DELETION)); return; } character.DeletedDate = DateTime.Now; CharacterManager.Instance.Database.Update(character); SendCharactersListWithRemodelingMessage(client); BasicHandler.SendBasicNoOperationMessage(client); } else { client.Send(new CharacterDeletionErrorMessage((int)CharacterDeletionErrorEnum.DEL_ERR_BAD_SECRET_ANSWER)); } }
/** * Handle character deletion frame */ public Task CharacterDeletion(GameClient client, CharacterDeletionRequestMessage characterDeletionRequestMessage) { var character = this._characterRepository.Entities().Values.FirstOrDefault(x => x.Id == characterDeletionRequestMessage.characterId && x.AccountId == 1); //check if accountid and characterId are linked if (character == null) { client.Disconnect(); return(null); } //if level > 20 need valid answer for delete character var exceptedSecretAnswerHash = CryptographyHelper.Md5(character.Id.ToString() + "~000000000000000000"); if (character.Level >= CharacterManager.CONFIRM_DELETION_LVL) { exceptedSecretAnswerHash = CryptographyHelper.Md5(character.Id.ToString() + "~" + "DELETE"); //@IPC in future if (exceptedSecretAnswerHash == characterDeletionRequestMessage.secretAnswerHash) { this._characterRepository.DeleteEntity(character); } } else { if (exceptedSecretAnswerHash == characterDeletionRequestMessage.secretAnswerHash) { this._characterRepository.DeleteEntity(character); } } ApproachFrames.SendCharactersListMessage(client); return(Task.CompletedTask); }
public void CharacterDeletionRequestMessageFrame(GameClient client, CharacterDeletionRequestMessage characterDeletionRequestMessage) { Container.Instance().Resolve <ICharacterManager>() .CharacterDeletion(client, characterDeletionRequestMessage); }