public static void CreateCharacter(NetConnection connection, NetIncomingMessage data) { // Se a crição de personagem não estiver ativa, envia mensagem de erro if (!GameSettings.CharacterCreation) { WorldPacket.Message(connection, (int)PacketList.WorldServer_Client_CharacterCreationDisabled); return; } //nome do personagem var charactername = data.ReadString(); //se encontrar nome nao permitido, envia mensagem de erro if (!ProhibitedNames.Compare(charactername)) { WorldPacket.Message(connection, (int)PacketList.WorldServer_Client_CharNameInUse); return; } // Se o nome existir no banco de dados, envia mensagem de erro if (Character_DB.Exist(charactername)) { WorldPacket.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.ReadInt32(); var gender = data.ReadByte(); var sprite = data.ReadInt32(); // Se não estiver dentro da sequencia correta, envia mensagem de erro if (slot >= 5) { WorldPacket.Message(connection, (int)PacketList.Error); return; } // Insere o personagem no banco de dados Character_DB.InsertNewCharacter(pData.HexID, gender, classe, charactername, sprite, slot); // Insere os items iniciais //Character_DB.InsertInitialItems(charactername, classe); // Carrega os personagens Character_DB.PreLoad(pData); // Envia o PreLoad WorldPacket.PreLoad(pData); //game state 3 = seleção de personagem WorldPacket.GameState(pData.HexID, 3); }
/// <summary> /// Envia o pré carregamento dos personagens. /// </summary> /// <param name="connection"></param> public static void RequestPreLoad(NetConnection connection) { var pData = Authentication.FindByConnection(connection); pData.Character = new Character[Settings.MAX_CHAR]; //Carrega os personagens (preload) Character_DB.PreLoad(pData); //Envia o preload WorldPacket.PreLoad(pData); }
/// <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 Login(PlayerData pData) { //Carrega os personagens para apresentar ao cliente. Character_DB.PreLoad(pData); FileLog.WriteLog($"PreLoad ID: {pData.AccountID} Account: {pData.Account}", System.Drawing.Color.Black); //Envia o PreLoad WorldPacket.PreLoad(pData); //Aceita a conexão WorldPacket.Message(pData.Connection, (int)PacketList.AcceptedConnection); //Muda de janela //3 seleção de personagem WorldPacket.GameState(pData.HexID, 3); }