示例#1
0
        public void HandleChannelSelectResult(Packet packet)
        {
            // Packet received from the center server

            Player.Channel = packet.ReadByte();

            var characters = packet.ReadByte();


            var pack = new Packet(ServerMessages.SELECT_WORLD_RESULT);

            pack.WriteByte(0); //Success, other values generate error messages
            pack.WriteByte(characters);

            for (int index = 0; index < characters; index++)
            {
                var ad = new AvatarData();
                ad.Decode(packet);
                ad.Encode(pack);

                var hasRanking = packet.ReadBool();
                pack.WriteBool(hasRanking);
                if (hasRanking)
                {
                    pack.WriteInt(packet.ReadInt());
                    pack.WriteInt(packet.ReadInt());
                    pack.WriteInt(packet.ReadInt());
                    pack.WriteInt(packet.ReadInt());
                }

                Player.Characters[ad.CharacterStat.ID] = ad.CharacterStat.Name;
            }

            SendPacket(pack);

            Player.State = Player.LoginState.CharacterSelect;

            if (autoSelectChar.HasValue &&
                autoSelectChar.Value < Player.Characters.Count &&
                Server.Instance.GetWorld(Player.World, out Center center))
            {
                var charid = Player.Characters.ElementAt(autoSelectChar.Value).Key;
                center.Connection.RequestCharacterConnectToWorld(
                    Player.SessionHash,
                    charid,
                    Player.World,
                    Player.Channel
                    );
            }
        }
示例#2
0
        public void HandleCreateNewCharacterResult(Packet packet)
        {
            var pack = new Packet(ServerMessages.CREATE_NEW_CHARACTER_RESULT);

            if (packet.ReadBool())
            {
                // Succeeded
                pack.WriteBool(false);
                var ad = new AvatarData();
                ad.Decode(packet);
                ad.Encode(pack);


                log.Info($"User created a new character, called '{ad.CharacterStat.Name}'");
                Player.Characters.Add(ad.CharacterStat.ID, ad.CharacterStat.Name);
                Player.State = Player.LoginState.CharacterSelect;
            }
            else
            {
                pack.WriteBool(true);
            }
            Player.Socket.SendPacket(pack);
        }