Ejemplo n.º 1
0
        public static void StartGame(NetConnection connection, byte slot)
        {
            var pData = Authentication.FindByConnection(connection);

            LogConfig.WriteLog($"GameServer Login Attempt: {pData.Account} {pData.IP}", System.Drawing.Color.Black);

            // limpa a memoria temporaria
            pData.Character = null;

            WorldServerPacket.SendGameServerData(connection, pData.HexID);

            // Carrega os dados do personagem
            Character_DB.Load(pData, slot);

            if (pData.GuildID > 0)
            {
                Guild.UpdatePlayerStatus(pData.GuildID, pData.CharacterID, true);
            }
            if (pData.GuildID > 0)
            {
                WorldServerPacket.SendGuildInfo(pData);
            }

            //Envia os dados de login para o game server numero 0
            GameServerPacket.Login(pData.HexID, 0);
        }
Ejemplo 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 (!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);
        }
Ejemplo n.º 3
0
        /// <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);
        }
Ejemplo n.º 4
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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Percorre todos os jogadores e verifica o estado atual do HexID.
        /// </summary>
        public static void VerifyPlayerHexID()
        {
            HexaID hexID = null;

            foreach (PlayerData pData in Player)
            {
                if (!string.IsNullOrEmpty(pData.Account))
                {
                    continue;
                }

                if (string.IsNullOrEmpty(pData.HexID))
                {
                    continue;
                }

                //Aceita o hexID e permite a conexão do world server
                for (int i = 0; i < Constant.MAX_SERVER; i++)
                {
                    if (pData.HexID.CompareTo(Settings.WorldServerID[i]) == 0)
                    {
                        hexID         = new HexaID();
                        hexID.Account = pData.HexID;
                        hexID.HexID   = pData.HexID;

                        AcceptHexID(pData.Connection, hexID);
                    }
                }

                hexID = FindHexID(pData.HexID);

                // Se não encontrar o hexid, desconecta o usuário pelo cliente
                if (hexID == null)
                {
                    GamePacket.Message(pData.Connection, (int)PacketList.Disconnect);
                    continue;
                }

                //aceita a conexão
                AcceptHexID(pData.Connection, hexID);

                //pega o nome do personagem.
                var charname = Character_DB.CharacterName(pData.AccountID, pData.CharSlot);
                //verifica se há algum personagem conectado.
                var playerData = FindByCharacterName(charname);

                //salva o personagem e limpa para uma nova conexão
                if (playerData != null)
                {
                    Character_DB.Save(playerData);
                    FileLog.WriteLog($"Player disconnected: {playerData.CharacterName}", System.Drawing.Color.Peru);

                    //remove o jogador do mapa
                    var _mapid = playerData.WorldID;
                    MapManager.FindMapByID(_mapid).RemovePlayer(pData.CharacterID);

                    playerData.Clear();
                    playerData.Connection.Disconnect("");
                }

                // Carrega dados do personagem
                Character_DB.Load(pData.HexID, pData.CharSlot);
                FileLog.WriteLog($"Player Found ID: {pData.CharacterID} Name: {pData.CharacterName}", System.Drawing.Color.Black);

                //Realiza o calculo dos stats
                CharacterLogic.UpdateCharacterStats(pData.AccountID);

                //Aceita a conexão
                GamePacket.Message(pData.Connection, (int)PacketList.AcceptedConnection);

                //Envia dados para o jogador
                pData.SendPlayerBasicData();
                pData.SendPlayerElementalStats();
                pData.SendPlayerLocation();
                pData.SendPlayerMagicStats();
                pData.SendPlayerPhysicalStats();
                pData.SendPlayerResistStats();
                pData.SendPlayerStats();
                pData.SendPlayerUniqueStats();
                pData.SendPlayerVital();
                pData.SendPlayerVitalRegen();
                pData.SendPlayerExp();

                // adiciona o jogador ao mapa
                MapManager.FindMapByID(pData.WorldID).CharacterID.Add(pData.CharacterID);
                FileLog.WriteLog($"{pData.CharacterName} joined map id {pData.WorldID}", System.Drawing.Color.Black);

                //envia outros jogadores do mapa
                MapManager.FindMapByID(pData.WorldID).GetPlayerOnMap(pData);

                //envia jogador para outros jogadores do mapa
                MapManager.FindMapByID(pData.WorldID).SendPlayerToMap(pData);

                //########################
                //####  GET MAP DATA  ####
                //########################

                // Maps.MapPacket.SendNpc(pData.Connection, 0);

                // Muda de janela
                GamePacket.GameState(pData.HexID, 6);
            }
        }