/// <summary> /// Deleta um personagem pelo nome e slot. /// </summary> /// <param name="connection"></param> /// <param name="slot"></param> public static void DeleteCharacter(NetConnection connection, int slot) { // Se a exclusão de personagem não estiver ativa, envia mensagem de erro if (!Settings.CharacterDelete) { WorldServerPacket.Message(connection, (int)PacketList.WorldServer_Client_CharacterDeleteDisabled); return; } var pData = Authentication.FindByConnection(connection); var level = Character_DB.GetLevel(pData.AccountID, slot); // Se o ocorrer algum erro, envia mensagem de erro // level -1, não encontrou dados do personagem if (level <= 0) { WorldServerPacket.Message(connection, (int)PacketList.Error); return; } // Se o level não estiver entre a faixa, envia mensagem de erro // não pode ser deletado if (level <Settings.CharacterDeleteMinLevel& level> Settings.CharacterDeleteMaxLevel) { WorldServerPacket.Message(connection, (int)PacketList.WorldServer_Client_InvalidLevelToDelete); return; } //Pega o nome do personagem e salva no log LogConfig.WriteLog($"Character Deleted: From: {pData.AccountID} {pData.Account} Char: {Character_DB.GetName(pData.AccountID, slot)}", System.Drawing.Color.Magenta); // Deleta o personagem Character_DB.Delete(pData.AccountID, slot); for (var n = 0; n < Constant.MAX_CHAR; n++) { pData.Character[n] = new Character() { Name = string.Empty }; //Carrega os personagens (preload) Character_DB.PreLoad(pData, n); } // Envia o PreLoad // pré carregamento do personagem, apenas informações básicas sprite, level, nome e classe (exibição na seleção de personagem). WorldServerPacket.PreLoad(pData); WorldServerPacket.Message(connection, (int)PacketList.WorldServer_Client_CharacterDeleted); }
public static void CreateCharacter(NetConnection connection, NetIncomingMessage data) { // Se a crição de personagem não estiver ativa, envia mensagem de erro if (!Settings.CharacterCreation) { WorldServerPacket.Message(connection, (int)PacketList.WorldServer_Client_CharacterCreationDisabled); return; } //nome do personagem var charName = data.ReadString(); //se encontrar nome nao permitido, envia mensagem de erro if (!ProhibitedNames.Compare(charName)) { WorldServerPacket.Message(connection, (int)PacketList.WorldServer_Client_CharNameInUse); return; } // Se o nome existir no banco de dados, envia mensagem de erro if (Character_DB.Exist(charName)) { WorldServerPacket.Message(connection, (int)PacketList.WorldServer_Client_CharNameInUse); return; } //encontra o usuário para adicionar as informações var pData = Authentication.FindByConnection(connection); var slot = data.ReadByte(); var classe = data.ReadByte(); var gender = data.ReadByte(); var sprite = data.ReadInt32(); // Se não estiver dentro da sequencia correta, envia mensagem de erro if (slot >= 5) { WorldServerPacket.Message(connection, (int)PacketList.Error); return; } // Insere o personagem no banco de dados Character_DB.InsertNewCharacter(pData.HexID, gender, classe, charName, sprite, slot); // Insere os items iniciais // Character_DB.InsertInitialItems(charName, classe); // Carrega os personagens for (var n = 0; n < Constant.MAX_CHAR; n++) { pData.Character[n] = new Character() { Name = string.Empty }; Character_DB.PreLoad(pData, n); } // Envia o PreLoad WorldServerPacket.PreLoad(pData); //game state 3 = seleção de personagem WorldServerPacket.GameState(pData.HexID, 3); }