Example #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);
        }
Example #2
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);
        }
Example #3
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);
        }
Example #4
0
 /// <summary>
 /// Verifica se o usuário já está conectado.
 /// </summary>
 /// <param name="account"></param>
 /// <returns></returns>
 public static void IsPlayerConnected(NetConnection connection, string username)
 {
     WorldServerPacket.SendConnectedResult(connection, Authentication.IsConnected(username), username);
 }
        /// <summary>
        /// Recebe os dados.
        /// </summary>
        public static void ReceivedData()
        {
            NetIncomingMessage msg;

            while ((msg = Socket.ReadMessage()) != null)
            {
                var pData = Authentication.FindByConnection(msg.SenderConnection);

                switch (msg.MessageType)
                {
                case NetIncomingMessageType.DiscoveryRequest:
                    Socket.SendDiscoveryResponse(null, msg.SenderEndPoint);
                    LogConfig.WriteLog($"Discovery Response IPEndPoint: {msg.SenderEndPoint.Address}", Color.Coral);

                    break;

                case NetIncomingMessageType.ErrorMessage:
                    #region ErrorMessage
                    var error = msg.ReadString();

                    LogConfig.WriteLog($"Error: {error}", Color.Coral);

                    #endregion

                    break;

                case NetIncomingMessageType.StatusChanged:

                    #region StatusChanged : Connected
                    NetConnectionStatus status = (NetConnectionStatus)msg.ReadByte();
                    if (status == NetConnectionStatus.Connected)
                    {
                        LogConfig.WriteLog($"Status changed to connected: {msg.SenderEndPoint.Address}", Color.Coral);
                        Authentication.Player.Add(new PlayerData(msg.SenderConnection, string.Empty, msg.SenderEndPoint.Address.ToString()));
                        WorldServerPacket.NeedHexID(msg.SenderConnection);
                    }
                    #endregion

                    #region StatusChanged : Disconnected
                    if (status == NetConnectionStatus.Disconnected)
                    {
                        pData = Authentication.FindByConnection(msg.SenderConnection);

                        LogConfig.WriteLog($"Status changed to disconnected: {pData.AccountID} {pData?.Account} {msg.SenderEndPoint.Address} {pData.HexID}", Color.Coral);

                        pData.Clear();
                        Authentication.Player.Remove(pData);
                    }
                    #endregion

                    break;

                case NetIncomingMessageType.Data:
                    WorldServerData.HandleData(pData.Connection, msg);
                    break;

                default:
                    if (Settings.LogSystem)
                    {
                        LogConfig.WriteLog($"Unhandled type: {msg.MessageType}");
                    }

                    Program.WorldForm.WriteLog($"Unhandled type: {msg.MessageType}", Color.DarkRed);
                    break;
                }

                Socket.Recycle(msg);
            }
        }