Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        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);
        }