예제 #1
0
        public void Select(int roleId)
        {
            var selectRole = Proto.Get <SelectRole>();

            selectRole.RoleId = roleId;
            Session.Send(selectRole);
        }
예제 #2
0
        private void LoadNext(int handle)
        {
            var roleList = Proto.Get <RoleList>();

            roleList.UserID = UserId;
            roleList.Handle = handle;
            Session.Send(roleList);
        }
예제 #3
0
파일: AuthModule.cs 프로젝트: nikes/Link
        protected virtual void KeyExchangeReceive(object sender, PacketEventArgs e)
        {
            if (KeyExchanging && !e.IsComplete && e.Chain.IsInput)
            {
                var exchange = Proto.Get <KeyExchange>();
                exchange.Nonce.Data = new byte[16];
                exchange.KickUser   = Force;
                new Random().NextBytes(exchange.Nonce.Data);

                e.Chain.Redirect.SendPacket(exchange);
            }
        }
예제 #4
0
파일: AuthModule.cs 프로젝트: nikes/Link
        protected virtual void ChallengeReceive(object sender, PacketEventArgs e)
        {
            if (!e.IsComplete)
            {
                var challenge = e.Read <Challenge>();

                var hash = MD5Hash.GetHash(Login, Password, challenge.Nonce);

                var response = Proto.Get <Response>();
                response.Identity.SetAsciiString(Login);
                response.Key.Data            = hash;
                response.UseToken            = false;
                response.CliFingerprint.Data = new byte[] { 0xFF, 0xFF, 0xFF, 0xFF };

                e.Chain.Redirect.SendPacket(response);
            }
        }
예제 #5
0
        private void SelectRoleReReceive(object sender, PacketEventArgs e)
        {
            var selectRoleRe = e.Packet.ReadPacket <SelectRole_Re>();

            if (selectRoleRe.Result == 0 && e.Chain.IsInput && !e.IsComplete && AutoEnter)
            {
                var enterWorld = Proto.Get <EnterWorld>();
                enterWorld.RoleId = RoleId;

                if (EnterWorldTimeout > 0)
                {
                    Task.Delay(EnterWorldTimeout).ContinueWith(x => e.Chain.Redirect.SendPacket(enterWorld));
                }
                else
                {
                    e.Chain.Redirect.SendPacket(enterWorld);
                }
            }
        }
예제 #6
0
 private void Tick(object obj)
 {
     var keepAlive = Proto.Get<Keepalive>();
     keepAlive.Code = 0x5A;
     Session.Send(keepAlive);
 }