ReadUInt16() public method

public ReadUInt16 ( ) : ushort
return ushort
Example #1
0
        public void ProcessNetData(byte[] data)
        {
            // lock (this)
            //{
            byte[] dedata = new byte[data.Length];
            Buffer.BlockCopy(data, 0, dedata, 0, data.Length);
            m_Key.DecodePacket(ref dedata, data.Length);

            m_stream.Write(dedata, 0, dedata.Length);
            PackIn packin  = new PackIn(m_stream.GetBuffer());
            int    nCurPos = 0;  //记录当前流位置

            while (true)
            {
                int nLen = packin.ReadUInt16();
                if (nLen > m_stream.Length - nCurPos)     //封包不是完整的
                {
                    m_stream.SetLength(0);
                    nLen = 0;
                    break;
                }
                if (nLen <= 0)
                {
                    break;
                }
                nCurPos += nLen;
                //2016.1.25 non-negative number required.
                if (nLen - sizeof(ushort) <= 0)
                {
                    m_stream.SetLength(0);
                    nLen = 0;
                    break;
                }
                byte[] reData = packin.ReadBuff(nLen - sizeof(ushort));
                m_ListData.Add(reData);
                if (nCurPos == m_stream.Length)
                {
                    break;
                }
            }
            int rema_Len = (int)m_stream.Length - nCurPos;

            if (rema_Len > 0)
            {
                dedata = new byte[rema_Len];
                Buffer.BlockCopy(m_stream.GetBuffer(), nCurPos, dedata, 0, rema_Len);
            }
            m_stream.SetLength(0);
            if (rema_Len > 0)
            {
                m_stream.Write(dedata, 0, dedata.Length);
            }
            // }
        }
Example #2
0
        public void ProcessNetData(byte[] data)
        {
            // lock (this)
            //{
                byte[] dedata = new byte[data.Length];
                Buffer.BlockCopy(data, 0, dedata, 0, data.Length);
                m_Key.DecodePacket(ref dedata, data.Length);

                m_stream.Write(dedata, 0, dedata.Length);
                PackIn packin = new PackIn(m_stream.GetBuffer());
                int nCurPos = 0; //记录当前流位置
                while (true)
                {
                    int nLen = packin.ReadUInt16();
                    if (nLen > m_stream.Length - nCurPos) //封包不是完整的
                    {
                        m_stream.SetLength(0);
                        nLen = 0;
                        break;
                    }
                    if (nLen <= 0) break;
                    nCurPos += nLen;
                    //2016.1.25 non-negative number required.
                    if (nLen - sizeof(ushort) <= 0)
                    {
                        m_stream.SetLength(0);
                        nLen = 0;
                        break;
                    }
                    byte[] reData = packin.ReadBuff(nLen - sizeof(ushort));
                    m_ListData.Add(reData);
                    if (nCurPos == m_stream.Length) break;
                }
                int rema_Len = (int)m_stream.Length - nCurPos;
                if (rema_Len > 0)
                {
                    dedata = new byte[rema_Len];
                    Buffer.BlockCopy(m_stream.GetBuffer(), nCurPos, dedata, 0, rema_Len);
                }
                m_stream.SetLength(0);
                if (rema_Len > 0) m_stream.Write(dedata, 0, dedata.Length);
               // }
        }
Example #3
0
        public void ProcessNetMsg()
        {
            foreach (GameSession session in m_DicSession.Values)
            {
                if (session == null || session.m_GamePack == null)
                {
                    continue;
                }
                byte[] retdata = session.m_GamePack.GetData();
                if (retdata != null)
                {
                    GameBase.Network.PackIn packin = new GameBase.Network.PackIn(retdata);
                    PlayerObject            play   = UserEngine.Instance().FindPlayerObjectToID(session.gameid);
                    ushort tag = packin.ReadUInt16();
                    if (play != null)
                    {
                        play.ProcessNetMsg(tag, retdata);
                        continue;
                    }
                    //第一次的封包一定是更新key哒..
                    if (play == null && tag != PacketProtoco.C_UPDATEKEY && tag != PacketProtoco.C_QUERYCREATEROLENAME &&
                        tag != PacketProtoco.C_CREATEROLE)
                    {
                        continue;
                    }

                    switch (tag)
                    {
                    case PacketProtoco.C_UPDATEKEY:
                    {
                        int            key      = packin.ReadInt32();
                        int            key2     = packin.ReadInt32();
                        TempPlayObject tempplay = UserEngine.Instance().GetTempPlayObj(key, key2);
                        if (tempplay == null)
                        {
                            return;                               //没有经过loginsserver进入的非法封包
                        }
                        tempplay.play.SetGameSession(session);
                        session.GetGamePackKeyEx().SunUpdateKey(key, key2);
                        NetMsg.MsgNotice msgNotice;
                        //没有角色就创建角色
                        if (!tempplay.isRole)
                        {
                            msgNotice = new NetMsg.MsgNotice();
                            msgNotice.Create(null, session.GetGamePackKeyEx());
                            session.SendData(msgNotice.GetCreateRoleBuff());
                            return;
                        }
                        //有角色就进游戏
                        UserEngine.Instance().RemoveTempPlayObject(tempplay.play.GetGameID());
                        tempplay.play.EnterGame(session);
                        break;
                    }

                    case PacketProtoco.C_QUERYCREATEROLENAME:           //创建角色名查询
                    {
                        NetMsg.MsgQueryCreateRoleName info = new NetMsg.MsgQueryCreateRoleName();
                        info.Create(retdata, null);
                        int key = 0, key2 = 0;
                        session.GetGamePackKeyEx().GetKey(ref key, ref key2);
                        TempPlayObject temp = UserEngine.Instance().GetTempPlayObj(key, key2);
                        if (temp == null)
                        {
                            Log.Instance().WriteLog("找到玩家对象-在ProcessNetMsg code:1");
                            break;
                        }

                        //发给dbserver 查询
                        GameBase.Network.Internal.QueryRoleName query = new GameBase.Network.Internal.QueryRoleName();
                        query.gameid = temp.play.GetGameID();
                        query.name   = info.GetName();

                        DBServer.Instance().GetDBClient().SendData(query.GetBuffer());

                        //NetMsg.MsgNotice notice = new NetMsg.MsgNotice();
                        //notice.Create(null, session.GetGamePackKeyEx());
                        //session.SendData(notice.GetQueryNameBuff());
                        break;
                    }

                    case PacketProtoco.C_CREATEROLE:            //创建角色
                    {
                        int key = 0, key2 = 0;
                        session.GetGamePackKeyEx().GetKey(ref key, ref key2);
                        TempPlayObject temp = UserEngine.Instance().GetTempPlayObj(key, key2);
                        if (temp == null)
                        {
                            Log.Instance().WriteLog("找到玩家对象-在ProcessNetMsg code:2");
                            break;
                        }
                        NetMsg.MsgCreateRoleInfo info = new NetMsg.MsgCreateRoleInfo();
                        info.Create(retdata, null);
                        if (info.GetName().Length <= 0)
                        {
                            Log.Instance().WriteLog("角色名称为空!!");
                            break;
                        }
                        PlayerObject _play = temp.play;
                        _play.SetGameSession(session);

                        _play.SetName(info.GetName());
                        _play.GetBaseAttr().profession = (byte)info.profession;
                        _play.GetBaseAttr().lookface   = info.lookface;


                        //发给dbserver
                        GameBase.Network.Internal.CreateRole create = new GameBase.Network.Internal.CreateRole();
                        create.accountid  = temp.accountid;
                        create.lookface   = info.lookface;
                        create.name       = info.GetName();
                        create.profession = (byte)info.profession;
                        create.gameid     = temp.play.GetGameID();
                        DBServer.Instance().GetDBClient().SendData(create.GetBuffer());
                        //测试游戏
                        //play = new PlayerObject();
                        //play.mapid = 1000;
                        //play.mPoint.x = 400;
                        //play.mPoint.y = 440;
                        //session.gameid = play.GetGameID();
                        //MapManager.Instance().GetGameMapToID(play.mapid).AddObject(play, session);
                        //UserEngine.Instance().AddPlayerObject(play);

                        ////公告信息
                        //NetMsg.MsgNotice msgNotice = new NetMsg.MsgNotice();
                        //msgNotice.Create(null, session.GetGamePackKeyEx());
                        //session.SendData(msgNotice.GetStartGameBuff());
                        //byte[] roledata = {238, 3, 64, 66, 15, 0, 241, 73, 2, 0, 101,
                        //      0, 0, 0, 60, 1, 0, 0, 0, 0, 0, 0, 81, 118,
                        //      203, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                        //      31, 1, 0, 0, 73, 0, 0, 0, 30, 0, 100, 0, 99,
                        //      0, 102, 0, 0, 0, 202, 3, 222, 3, 134, 7, 0, 0,
                        //      0, 0, 0, 0, 0, 0, 0, 0, 255, 10, 0, 0, 1, 0, 0,
                        //      0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 12, 0, 0,
                        //      0, 0, 0, 0, 0, 0, 0, 20, 0, 4, 0, 0, 0, 0, 0, 0, 0,
                        //      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                        //      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                        //      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                        //      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                        //      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105,
                        //      0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                        //      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                        //      0, 0, 0, 0, 2, 8, 102, 101, 111, 119, 102, 113, 101, 119, 2,
                        //      206, 222, 0, 0, 0 };
                        ////session.GetGamePackKeyEx().EncodePacket(ref roledata, roledata.Length);
                        ////session.SendData(roledata);
                        ////
                        //NetMsg.MsgSelfRoleInfo rolemsg = new NetMsg.MsgSelfRoleInfo();
                        //rolemsg.Create(roledata, session.GetGamePackKeyEx());
                        //rolemsg.roletype = 140001;
                        //rolemsg.roleid = play.GetTypeId();
                        //rolemsg.name = "测试角色" + play.GetTypeId().ToString();
                        //play.Name = rolemsg.name;
                        //session.SendData(rolemsg.GetBuffer());


                        ////测试增加装备 测试装备
                        //NetMsg.MsgItemInfo item = new NetMsg.MsgItemInfo();
                        //item.Create(null, session.GetGamePackKeyEx());
                        //item.postion = NetMsg.MsgItemInfo.ITEMPOSITION_ARMOR;
                        //item.id = 112434;
                        //item.item_id = 135114;
                        //item.amount = item.amount_limit = 1;
                        //session.SendData(item.GetBuffer());
                        ////测试武器
                        //item = new NetMsg.MsgItemInfo();
                        //item.Create(null, session.GetGamePackKeyEx());
                        //item.postion = NetMsg.MsgItemInfo.ITEMPOSITION_WEAPONR;
                        //item.id = 112435;
                        //item.item_id = 440244;
                        //item.amount = item.amount_limit = 1;
                        //session.SendData(item.GetBuffer());



                        //NetMsg.MsgUpdateSP sp = new NetMsg.MsgUpdateSP();
                        //sp.Create(null, session.GetGamePackKeyEx());
                        //sp.role_id = play.GetTypeId();
                        //sp.value = 37;
                        //sp.sp = 100;
                        //session.SendData(sp.GetBuffer());

                        //sp = new NetMsg.MsgUpdateSP();
                        //sp.Create(null, session.GetGamePackKeyEx());
                        //sp.role_id = play.GetTypeId();
                        //session.SendData(sp.GetBuffer());


                        ////测试新增技能
                        //ushort[] skill = { 3011 };//, 3002, 1010, 3005, 3009, 8003
                        //for (int i = 0; i < skill.Length; i++)
                        //{
                        //    NetMsg.MsgMagicInfo magicinfo = new NetMsg.MsgMagicInfo();
                        //    magicinfo.Create(null, session.GetGamePackKeyEx());
                        //    magicinfo.id = play.GetTypeId();
                        //    magicinfo.magicid = skill[i];
                        //    magicinfo.level = 2;
                        //    session.SendData(magicinfo.GetBuffer());
                        //}



                        ////进入地图
                        //NetMsg.MsgMapInfo mapinfo = new NetMsg.MsgMapInfo();
                        //mapinfo.Create(null, session.GetGamePackKeyEx());
                        //mapinfo.Init(play.mapid, play.mPoint.x, play.mPoint.y);
                        //session.SendData(mapinfo.GetBuffer());



                        ////刷新可视列表;

                        //play.RefreshVisibleObject();
                        //GameStruct.Action act = new GameStruct.Action(GameStruct.Action.MOVE);
                        //play.PushAction(act);
                        break;
                    }
                    }
                }
            }
        }
Example #4
0
 public override void Create(byte[] msg = null, GamePacketKeyEx key = null)
 {
     base.Create(msg, key);
     if (msg != null)
     {
         PackIn inpack = new PackIn(msg);
         inpack.ReadUInt16();
         type = inpack.ReadInt32();
         tag = inpack.ReadInt16();
         tag2 = inpack.ReadByte();
      //   len = inpack.ReadByte();
         if (inpack.IsComplete()) return;
         str = inpack.ReadString();
         //for (int i = 0; i < param1.Length; i++)
         //{
         //    param1[i] = inpack.ReadByte();
         // }
     }
 }
Example #5
0
        public static void ProcessDBNetMsg()
        {
            byte[] data = mDBPacket.GetData();
            if (data == null) return;
            PackIn inpack = new PackIn(data);
            ushort param = inpack.ReadUInt16();
            switch (param)
            {
                case GameBase.Network.Internal.Define.QUERYROLE_RET:
                {
                    uint gameid = inpack.ReadUInt32();
                    int key = inpack.ReadInt32();
                    int key2 = inpack.ReadInt32();
                    byte ret = inpack.ReadByte();
                    if (ret == 1) //有这个帐号--
                    {
                        GameSession session  = FindGameSessionToGameID(gameid);
                        if (session != null)
                        {
                            //发送数据给客户端,连接mapserver
                            Log.Instance().WriteLog("通知客户端登录MapServer");
                            SendConnectMapServer(session,key,key2);
                        }
                    }
                    else if (ret == 2) //重复登录,踢下线
                    {
                        GameSession session = FindGameSessionToGameID(gameid);
                        if (session != null)
                        {
                            lock (_lock_session)
                            {
                                m_DicSession.Remove(session.m_Socket);
                            }

                            session.Dispose();
                        }
                    }

                    break;
                }
            }
        }
Example #6
0
        public void Run()
        {
            int runtime = System.Environment.TickCount;

            while (true)
            {
                if (System.Environment.TickCount - runtime > 300)
                {
                    break;                                              //超出三百毫秒下次再处理
                }
                SocketInfo info = GetInfo();
                if (info == null)
                {
                    break;
                }
                if (info.s == null)
                {
                    break;
                }
                Socket s = info.s;
                switch (info.type)
                {
                case TYPE_ONCONNECT:
                {
                    //  SessionManager.Instance().AddSession(s, GameServer.GetTcpServer());
                    break;
                }

                case TYPE_CLOSE:
                {
                    // PlayerObject play = UserEngine.Instance().FindPlayerObjectToSocket(s);
                    //   SessionManager.Instance().RemoveSession(s);
                    //  UserEngine.Instance().RemovePlayObject(play);
                    //if (play != null)
                    // {
                    // play.GetGameSession().Dispose();
                    // play.SetGameSession(null);
                    //}

                    break;
                }

                case TYPE_RECEIVE:
                {
                    GameBase.Network.GameSession session = info.session;
                    byte[] bydata = new byte[info.data.Length];
                    Buffer.BlockCopy(info.data, 0, bydata, 0, info.data.Length);
                    session.m_GamePack.ProcessNetData(bydata);
                    //            session.m_nLastTime = System.Environment.TickCount;

                    byte[] retdata = session.m_GamePack.GetData();
                    if (retdata != null)
                    {
                        GameBase.Network.PackIn packin = new GameBase.Network.PackIn(retdata);

                        ushort tag = packin.ReadUInt16();
                        switch (tag)
                        {
                        case PacketProtoco.C_LOGINUSER:
                        {
                            GameBase.Network.PacketOut packout = new GameBase.Network.PacketOut(session.GetGamePackKeyEx());
                            byte[] sendbyte = { 0, 1, 59, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                                0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                                0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                                0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                                0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                                0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                                0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                                0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                                0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                                0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                                0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                                0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                                0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                                0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0,255, 255, 255, 255 };
                            packout.WriteBuff(sendbyte);
                            sendbyte = packout.Flush();
                            Program.server.SendData(info.s, sendbyte);
                            break;
                        }
                        }
                    }
                    //  SessionManager.Instance().AddNetData(s, info.data, info.data.Length);
                    break;
                }
                }
            }
        }
Example #7
0
 public override void Create(byte[] msg = null, GamePacketKeyEx key = null)
 {
     base.Create(msg, key);
     if (msg != null && msg.Length == mMsgLen - 2 )
     {
         PackIn packin = new PackIn(msg);
       
         packin.ReadUInt16(); //协议号
         time = packin.ReadInt32();
         id = packin.ReadUInt32();
         x = packin.ReadInt16();
         y = packin.ReadInt16();
         dir = packin.ReadByte();
         ucMode = packin.ReadByte();
         param = packin.ReadUInt16();
         param2 = packin.ReadInt32();
         
     }
 }
Example #8
0
 public override void Create(byte[] msg = null, GamePacketKeyEx key = null)
 {
     base.Create(msg, key);
     if (msg != null && msg.Length == mMsgLen - 2)
     {
         PackIn inpack = new PackIn(msg);
         inpack.ReadUInt16();
         id = inpack.ReadUInt32();
         param = inpack.ReadInt32();
         param = inpack.ReadInt32();
         for (int i = 0; i < param2.Length; i++)
         {
             param2[i] = inpack.ReadInt32();
         }
         lookface = inpack.ReadUInt32();
         x = inpack.ReadInt16();
         y = inpack.ReadInt16();
         hp_ = inpack.ReadUInt16();
         level = inpack.ReadUInt16();
         typeid = inpack.ReadUInt32();
         maxhp = inpack.ReadInt32();
         hp = inpack.ReadInt32();
         dir = inpack.ReadInt32();
     }
 }
Example #9
0
 public override void Create(byte[] msg = null, GamePacketKeyEx key = null)
 {
     base.Create(msg, key);
     if (msg != null)
     {
         PackIn inpack = new PackIn(msg);
         inpack.ReadUInt16();
         role_id = inpack.ReadUInt32();
         amount = inpack.ReadUInt32();
         value = inpack.ReadUInt32();
         sp = inpack.ReadUInt32();
     }
 }
Example #10
0
 public override void Create(byte[] msg = null, GamePacketKeyEx key = null)
 {
     base.Create(msg, key);
     if (msg != null)
     {
         PackIn inpack = new PackIn(msg);
         inpack.ReadUInt16();
         typeid = inpack.ReadUInt32();
         type = inpack.ReadInt16();
         fightpower = inpack.ReadInt16();
         level = inpack.ReadInt16();
         param = inpack.ReadInt16();
           
        
     }
 }
Example #11
0
 public override void Create(byte[] msg = null, GamePacketKeyEx key = null)
 {
     base.Create(msg, key);
     if (msg != null )
     {
         PackIn inpack = new PackIn(msg);
         inpack.ReadUInt16();
         time = inpack.ReadInt32();
         roleId = inpack.ReadUInt32();
         idTarget = inpack.ReadUInt32();
         usPosX = inpack.ReadUInt16();
         usPosY = inpack.ReadUInt16();
         tag = inpack.ReadUInt32();
         usType = inpack.ReadUInt32();
         int j = 12;
         if (tag == 2) j = 11;
         for (int i = 0; i < j; i++)
         {
             param[i] = inpack.ReadByte();
         }
     }
 }
Example #12
0
        public override void Create(byte[] msg = null, GamePacketKeyEx key = null)
        {
            base.Create(msg, key);
            if (msg != null && msg.Length == mMsgLen - 2)
            {
                PackIn inpack = new PackIn(msg);
                inpack.ReadUInt16();
                time = inpack.ReadInt32();
                roleid = inpack.ReadUInt32();
                monsterid = inpack.ReadUInt32();
                role_x = inpack.ReadInt16();
                role_y = inpack.ReadInt16();
                tag = inpack.ReadUInt32();
                injuredvalue = inpack.ReadUInt32();
                for (int i = 0; i < param.Length; i++)
                {
                    param[i] = inpack.ReadInt32();
                }

            }
        }
Example #13
0
 public override void Create(byte[] msg = null, GamePacketKeyEx key = null)
 {
     base.Create(msg, key);
     if (msg != null)
     {
         PackIn inpack = new PackIn(msg);
         inpack.ReadUInt16();
         param = inpack.ReadInt32();
         param2 = inpack.ReadUInt16();
         optionid = inpack.ReadByte();
         interactType = inpack.ReadUInt16();
         byte nlen = inpack.ReadByte();
         text = inpack.ReadString(nlen);
         for (int i = 0; i < param3.Length; i++)
         {
             param3[i] = inpack.ReadByte();
         }
     }
 }
Example #14
0
        public void ProcessNetMsg()
        {
            foreach (GameSession session in m_DicSession.Values)
                {
                    if (session == null || session.m_GamePack == null) continue;
                    byte[] retdata = session.m_GamePack.GetData();
                    if (retdata != null)
                    {
                        GameBase.Network.PackIn packin = new GameBase.Network.PackIn(retdata);
                        PlayerObject play = UserEngine.Instance().FindPlayerObjectToID(session.gameid);
                        ushort tag = packin.ReadUInt16();
                        if (play != null)
                        {
                            play.ProcessNetMsg(tag, retdata);
                            continue;
                        }
                        //第一次的封包一定是更新key哒..
                        if (play == null && tag != PacketProtoco.C_UPDATEKEY && tag != PacketProtoco.C_QUERYCREATEROLENAME
                            && tag != PacketProtoco.C_CREATEROLE) continue;

                        switch (tag)
                        {
                            case PacketProtoco.C_UPDATEKEY:
                                {

                                    int key = packin.ReadInt32();
                                    int key2 = packin.ReadInt32();
                                    TempPlayObject tempplay = UserEngine.Instance().GetTempPlayObj(key, key2);
                                    if (tempplay == null) return; //没有经过loginsserver进入的非法封包
                                    tempplay.play.SetGameSession(session);
                                    session.GetGamePackKeyEx().SunUpdateKey(key, key2);
                                    NetMsg.MsgNotice msgNotice;
                                    //没有角色就创建角色
                                    if (!tempplay.isRole)
                                    {
                                        msgNotice = new NetMsg.MsgNotice();
                                        msgNotice.Create(null, session.GetGamePackKeyEx());
                                        session.SendData(msgNotice.GetCreateRoleBuff());
                                        return;
                                    }
                                    //有角色就进游戏
                                    UserEngine.Instance().RemoveTempPlayObject(tempplay.play.GetGameID());
                                    tempplay.play.EnterGame(session);
                                    break;
                                }
                            case PacketProtoco.C_QUERYCREATEROLENAME:   //创建角色名查询
                                {
                                    NetMsg.MsgQueryCreateRoleName info = new NetMsg.MsgQueryCreateRoleName();
                                    info.Create(retdata, null);
                                    int key  = 0,key2 = 0;
                                    session.GetGamePackKeyEx().GetKey(ref key,ref key2);
                                    TempPlayObject temp = UserEngine.Instance().GetTempPlayObj(key,key2);
                                    if(temp == null)
                                    {
                                        Log.Instance().WriteLog("找到玩家对象-在ProcessNetMsg code:1");
                                        break;
                                    }

                                    //发给dbserver 查询
                                    GameBase.Network.Internal.QueryRoleName query = new GameBase.Network.Internal.QueryRoleName();
                                    query.gameid = temp.play.GetGameID();
                                    query.name = info.GetName();

                                    DBServer.Instance().GetDBClient().SendData(query.GetBuffer());

                                    //NetMsg.MsgNotice notice = new NetMsg.MsgNotice();
                                    //notice.Create(null, session.GetGamePackKeyEx());
                                    //session.SendData(notice.GetQueryNameBuff());
                                    break;
                                }
                            case PacketProtoco.C_CREATEROLE:    //创建角色
                                {

                                    int key = 0, key2 = 0;
                                    session.GetGamePackKeyEx().GetKey(ref key, ref key2);
                                    TempPlayObject temp = UserEngine.Instance().GetTempPlayObj(key, key2);
                                    if (temp == null)
                                    {
                                        Log.Instance().WriteLog("找到玩家对象-在ProcessNetMsg code:2");
                                        break;
                                    }
                                    NetMsg.MsgCreateRoleInfo info = new NetMsg.MsgCreateRoleInfo();
                                    info.Create(retdata, null);
                                    if (info.GetName().Length <= 0)
                                    {
                                        Log.Instance().WriteLog("角色名称为空!!");
                                        break;
                                    }
                                    PlayerObject _play = temp.play;
                                    _play.SetGameSession(session);

                                    _play.SetName(info.GetName());
                                    _play.GetBaseAttr().profession = (byte)info.profession;
                                    _play.GetBaseAttr().lookface = info.lookface;

                                    //发给dbserver
                                    GameBase.Network.Internal.CreateRole create = new GameBase.Network.Internal.CreateRole();
                                    create.accountid = temp.accountid;
                                    create.lookface = info.lookface;
                                    create.name = info.GetName();
                                    create.profession = (byte)info.profession;
                                    create.gameid = temp.play.GetGameID();
                                    DBServer.Instance().GetDBClient().SendData(create.GetBuffer());
                                   //测试游戏
                                    //play = new PlayerObject();
                                    //play.mapid = 1000;
                                    //play.mPoint.x = 400;
                                    //play.mPoint.y = 440;
                                    //session.gameid = play.GetGameID();
                                    //MapManager.Instance().GetGameMapToID(play.mapid).AddObject(play, session);
                                    //UserEngine.Instance().AddPlayerObject(play);

                                    ////公告信息
                                    //NetMsg.MsgNotice msgNotice = new NetMsg.MsgNotice();
                                    //msgNotice.Create(null, session.GetGamePackKeyEx());
                                    //session.SendData(msgNotice.GetStartGameBuff());
                                    //byte[] roledata = {238, 3, 64, 66, 15, 0, 241, 73, 2, 0, 101,
                                    //      0, 0, 0, 60, 1, 0, 0, 0, 0, 0, 0, 81, 118,
                                    //      203, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                    //      31, 1, 0, 0, 73, 0, 0, 0, 30, 0, 100, 0, 99,
                                    //      0, 102, 0, 0, 0, 202, 3, 222, 3, 134, 7, 0, 0,
                                    //      0, 0, 0, 0, 0, 0, 0, 0, 255, 10, 0, 0, 1, 0, 0,
                                    //      0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 12, 0, 0,
                                    //      0, 0, 0, 0, 0, 0, 0, 20, 0, 4, 0, 0, 0, 0, 0, 0, 0,
                                    //      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                    //      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                    //      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                    //      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                    //      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105,
                                    //      0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                    //      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                    //      0, 0, 0, 0, 2, 8, 102, 101, 111, 119, 102, 113, 101, 119, 2,
                                    //      206, 222, 0, 0, 0 };
                                    ////session.GetGamePackKeyEx().EncodePacket(ref roledata, roledata.Length);
                                    ////session.SendData(roledata);
                                    ////
                                    //NetMsg.MsgSelfRoleInfo rolemsg = new NetMsg.MsgSelfRoleInfo();
                                    //rolemsg.Create(roledata, session.GetGamePackKeyEx());
                                    //rolemsg.roletype = 140001;
                                    //rolemsg.roleid = play.GetTypeId();
                                    //rolemsg.name = "测试角色" + play.GetTypeId().ToString();
                                    //play.Name = rolemsg.name;
                                    //session.SendData(rolemsg.GetBuffer());

                                    ////测试增加装备 测试装备
                                    //NetMsg.MsgItemInfo item = new NetMsg.MsgItemInfo();
                                    //item.Create(null, session.GetGamePackKeyEx());
                                    //item.postion = NetMsg.MsgItemInfo.ITEMPOSITION_ARMOR;
                                    //item.id = 112434;
                                    //item.item_id = 135114;
                                    //item.amount = item.amount_limit = 1;
                                    //session.SendData(item.GetBuffer());
                                    ////测试武器
                                    //item = new NetMsg.MsgItemInfo();
                                    //item.Create(null, session.GetGamePackKeyEx());
                                    //item.postion = NetMsg.MsgItemInfo.ITEMPOSITION_WEAPONR;
                                    //item.id = 112435;
                                    //item.item_id = 440244;
                                    //item.amount = item.amount_limit = 1;
                                    //session.SendData(item.GetBuffer());

                                    //NetMsg.MsgUpdateSP sp = new NetMsg.MsgUpdateSP();
                                    //sp.Create(null, session.GetGamePackKeyEx());
                                    //sp.role_id = play.GetTypeId();
                                    //sp.value = 37;
                                    //sp.sp = 100;
                                    //session.SendData(sp.GetBuffer());

                                    //sp = new NetMsg.MsgUpdateSP();
                                    //sp.Create(null, session.GetGamePackKeyEx());
                                    //sp.role_id = play.GetTypeId();
                                    //session.SendData(sp.GetBuffer());

                                    ////测试新增技能
                                    //ushort[] skill = { 3011 };//, 3002, 1010, 3005, 3009, 8003
                                    //for (int i = 0; i < skill.Length; i++)
                                    //{
                                    //    NetMsg.MsgMagicInfo magicinfo = new NetMsg.MsgMagicInfo();
                                    //    magicinfo.Create(null, session.GetGamePackKeyEx());
                                    //    magicinfo.id = play.GetTypeId();
                                    //    magicinfo.magicid = skill[i];
                                    //    magicinfo.level = 2;
                                    //    session.SendData(magicinfo.GetBuffer());
                                    //}

                                    ////进入地图
                                    //NetMsg.MsgMapInfo mapinfo = new NetMsg.MsgMapInfo();
                                    //mapinfo.Create(null, session.GetGamePackKeyEx());
                                    //mapinfo.Init(play.mapid, play.mPoint.x, play.mPoint.y);
                                    //session.SendData(mapinfo.GetBuffer());

                                    ////刷新可视列表;

                                    //play.RefreshVisibleObject();
                                    //GameStruct.Action act = new GameStruct.Action(GameStruct.Action.MOVE);
                                    //play.PushAction(act);
                                    break;
                                }
                        }

                }

            }
        }
Example #15
0
        public void ProcessDBNetMsg()
        {
            if (!mbConnect && System.Environment.TickCount - mnReconnectTick > 5000)//五秒重连
            {
                mTcpDBClient.ReConnect();
                mnReconnectTick = System.Environment.TickCount;
            }
            byte[] buff = null;
            lock (_lock)
            {
                buff = mDBPacket.GetData();
            }

            if (buff == null) return;
            PackIn inpack = new PackIn(buff);
            ushort param = inpack.ReadUInt16();
            switch (param)
            {
                case GameBase.Network.Internal.Define.ROLEINFO:
                    {
                        GameBase.Network.Internal.RoleInfo roleinfo = new GameBase.Network.Internal.RoleInfo(buff);
                        //判断是否有缓存数据-
                        PlayerObject cacheplay = UserEngine.Instance().GetCachePlay(roleinfo.sAccount);
                        if (cacheplay != null)
                        {
                            Log.Instance().WriteLog("检测到角色缓存数据,保存中!" + cacheplay.GetName());
                            UserEngine.Instance().RemoveCachePlay(cacheplay);
                            cacheplay.ExitGame();
                            return;
                        }
                        UserEngine.Instance().AddTempPlayObject(roleinfo);

                        //回发给dbserver 表示收到了角色信息- 让他通知loginserver 发数据给玩家连接mapserver
                        GameBase.Network.Internal.RoleInfo_Ret ret = new GameBase.Network.Internal.RoleInfo_Ret();
                        ret.gameid = roleinfo.gameid;
                        ret.key = roleinfo.mKey;
                        ret.key2 = roleinfo.mKey1;
                        ret.accountid = roleinfo.accountid;
                        mTcpDBClient.SendData(ret.GetBuffer());
                        Log.Instance().WriteLog("收到临时角色信息:" + roleinfo.sAccount+" id:"+roleinfo.accountid.ToString());
                        break;
                    }
                case GameBase.Network.Internal.Define.QUERYROLENAME_RET:
                    {
                        QueryRoleName_Ret ret = new QueryRoleName_Ret();
                        ret.Create(buff);
                        TempPlayObject temp = UserEngine.Instance().GetTempPlayObj(ret.gameid);
                        if (temp == null)
                        {
                            Log.Instance().WriteLog("找到玩家对象..在--ProcessDBNetMsg code:2");
                            break;
                        }

                        NetMsg.MsgNotice notice = new NetMsg.MsgNotice();
                        notice.Create(null, temp.play.GetGamePackKeyEx());
                        temp.play.SendData(notice.GetQueryNameBuff(!ret.tag));

                        break;
                    }
                case GameBase.Network.Internal.Define.CREATEROLE_RET:
                    {

                        CreateRole_Ret ret = new CreateRole_Ret();
                        ret.Create(buff);
                        TempPlayObject temp = UserEngine.Instance().GetTempPlayObj(ret.gameid);
                        if (temp == null)
                        {
                            Log.Instance().WriteLog("未找到玩家对象..在--ProcessDBNetMsg code:3");
                            break;
                        }

                        UserEngine.Instance().RemoveTempPlayObject(ret.gameid); //从临时列表出移除--
                        //进入游戏
                        temp.play.GetBaseAttr().account_id = temp.accountid;
                        temp.play.GetBaseAttr().player_id = ret.playerid;
                        temp.play.EnterGame(null,true);
                        break;
                    }
                case GameBase.Network.Internal.Define.ADDROLEDATA_ITEM_RET:
                    {
                        GameBase.Network.Internal.AddRoleData_Item_Ret ret = new GameBase.Network.Internal.AddRoleData_Item_Ret();
                        ret.Create(buff);
                        PlayerObject play = UserEngine.Instance().FindPlayerObjectToID(ret.gameid);
                        if (play == null)
                        {
                            Log.Instance().WriteLog("未找到玩家对象..在--ProcessDBNetMsg code:4");
                            break;
                        }
                        play.GetItemSystem().AwardItem_Ret(ret.sordid, ret.id);
                        break;
                    }
                case GameBase.Network.Internal.Define.LOADROLEDATA_ITEM:
                    {
                        GameBase.Network.Internal.ROLEDATA_ITEM item = new GameBase.Network.Internal.ROLEDATA_ITEM();
                        item.Create(buff);
                        TempPlayObject play = UserEngine.Instance().GetTempPlayObj(item.key,item.key2);
                        if (play == null)
                        {
                            Log.Instance().WriteLog("未找到玩家对象..在--ProcessDBNetMsg code:5");
                            break;
                        }
                        for (int i = 0; i < item.mListItem.Count; i++)
                        {
                            play.play.GetItemSystem().AddItemInfo(item.mListItem[i]);
                        }
                         break;
                    }
                case GameBase.Network.Internal.Define.LOADROLEDATA_MAGIC:
                    {
                        GameBase.Network.Internal.RoleData_Magic magic = new GameBase.Network.Internal.RoleData_Magic();
                        magic.Create(buff);
                        TempPlayObject play = UserEngine.Instance().GetTempPlayObj(magic.key, magic.key2);
                        if (play == null)
                        {
                            Log.Instance().WriteLog("未找到玩家对象..在--ProcessDBNetMsg code:6");
                            break;
                        }
                        for(int i = 0;i < magic.mListMagic.Count;i++)
                        {
                            GameBase.Network.Internal.MagicInfo info = magic.mListMagic[i];
                            play.play.GetMagicSystem().AddMagicInfo(info);
                        }

                        break;
                    }
                case GameBase.Network.Internal.Define.KICKGAMEPLAY:
                    {
                        GameBase.Network.Internal.KickGamePlay kickplay = new GameBase.Network.Internal.KickGamePlay();
                        kickplay.Create(buff);
                        PlayerObject play = UserEngine.Instance().FindPlayerObjectToAccountId(kickplay.accountid);
                        if (play != null)
                        {
                            SessionManager.Instance().RemoveSession(play.GetGameSession().m_Socket);
                            play.Kick();
                        }
                        break;
                    }
                case GameBase.Network.Internal.Define.LOADROLEDATA_EUDEMON:
                    {
                        GameBase.Network.Internal.ROLEDATE_EUDEMON eudemon = new GameBase.Network.Internal.ROLEDATE_EUDEMON();
                        eudemon.Create(buff);

                        TempPlayObject play = UserEngine.Instance().GetTempPlayObj(eudemon.key, eudemon.key2);
                        if (play == null)
                        {
                            //只是为了下断点后延迟问题解决方案
                            PlayerObject _play = UserEngine.Instance().FindPlayerObjectToPlayerId(eudemon.playerid);
                            if (_play == null)
                            {
                                Log.Instance().WriteLog("未找到玩家对象..在--ProcessDBNetMsg code:6");
                            }
                            else
                            {
                                _play.GetEudemonSystem().DB_Load(eudemon);
                                _play.GetEudemonSystem().SendAllEudemonInfo();
                            }

                            break;
                        }
                        else
                        {
                            play.play.GetEudemonSystem().DB_Load(eudemon);
                        }

                        break;
                    }
                case GameBase.Network.Internal.Define.LOADROLEDATA_FRIEND:
                    {
                        GameBase.Network.Internal.ROLEDATA_FRIEND friend = new GameBase.Network.Internal.ROLEDATA_FRIEND();
                        friend.Create(buff);
                        TempPlayObject play = UserEngine.Instance().GetTempPlayObj(friend.key, friend.key2);
                        if (play == null)
                        {
                            //只是为了下断点后延迟问题解决方案
                            PlayerObject _play = UserEngine.Instance().FindPlayerObjectToPlayerId(friend.playerid);
                            if (_play == null)
                            {
                                Log.Instance().WriteLog("未找到玩家对象..在--ProcessDBNetMsg code:7");
                            }
                            else
                            {

                                _play.GetFriendSystem().DB_Load(friend);
                                _play.GetFriendSystem().SendAllFriendInfo();
                            }

                            break;
                        }
                        else
                        {
                            play.play.GetFriendSystem().DB_Load(friend);
                        }

                        break;
                    }
                case GameBase.Network.Internal.Define.GUANJUEDATA: //爵位数据
                    {
                        GameBase.Network.Internal.GUANJUEINFO juewei = new GameBase.Network.Internal.GUANJUEINFO();
                        juewei.Create(buff);
                        GuanJueManager.Instance().DB_Load(juewei);
                        break;
                    }
                case GameBase.Network.Internal.Define.LOADLEGION: //军团数据
                    {
                        GameBase.Network.Internal.LEGIONINFO info = new GameBase.Network.Internal.LEGIONINFO();
                        info.Create(buff);
                        LegionManager.Instance().DB_Load(info);
                        break;
                    }
                case GameBase.Network.Internal.Define.CREATELEGION_RET://创建军团返回数据
                    {
                        GameBase.Network.Internal.CreateLegion_Ret info = new GameBase.Network.Internal.CreateLegion_Ret();
                        info.Create(buff);
                        LegionManager.Instance().CreateLegion_Ret(info);
                        break;
                    }
                case GameBase.Network.Internal.Define.LOADPAYRECINFO: //充值数据
                    {
                        GameBase.Network.Internal.PackPayRecInfo info = new GameBase.Network.Internal.PackPayRecInfo();
                        info.Creaet(buff);
                        PayManager.Instance().DB_Load(info);
                        break;
                    }
            }
        }
Example #16
0
 public override void Create(byte[] msg = null, GamePacketKeyEx key = null)
 {
     base.Create(msg, key);
     if (msg != null)
     {
         PackIn inpack = new PackIn(msg);
         inpack.ReadUInt16();
         type = inpack.ReadUInt32();
         itemid = inpack.ReadUInt32();
         materialid = inpack.ReadUInt32();
         if (inpack.IsComplete()) return;
         param = inpack.ReadUInt32();
         if (inpack.IsComplete()) return;
         param1 = inpack.ReadUInt32();
     }
 }
Example #17
0
        public override void Create(byte[] msg = null, GamePacketKeyEx key = null)
        {
            base.Create(msg, key);
            if (msg != null)
            {
                PackIn inpack = new PackIn(msg);
                inpack.ReadUInt16();
                Name = inpack.ReadBuff(16);
                version = inpack.ReadInt32();
            }

        }
Example #18
0
 public override void Create(byte[] msg = null, GamePacketKeyEx key = null)
 {
     base.Create(msg, key);
     if (msg != null)
     {
         PackIn inpack = new PackIn(msg);
         inpack.ReadUInt16();
         tick = inpack.ReadInt32();
         type = inpack.ReadByte();
         param = inpack.ReadByte();
         param3 = inpack.ReadInt16();
         param1 = inpack.ReadInt32();
         param2 = inpack.ReadInt32();
         itemid = inpack.ReadUInt32();
     }
 }
Example #19
0
 public override void Create(byte[] msg = null, GamePacketKeyEx key = null)
 {
     base.Create(msg, key);
     if (msg != null)
     {
         PackIn inpack = new PackIn(msg);
         inpack.ReadUInt16();
         tag = inpack.ReadString(16);
         name = inpack.ReadString(16);
         tag1 = inpack.ReadString(16);
         hardwaretag = inpack.ReadString(44);
         version = inpack.ReadInt32();
         lookface = inpack.ReadUInt32();
         profession = inpack.ReadUInt16();
         param = inpack.ReadUInt16();
         param1 = inpack.ReadInt32();
         param2 = inpack.ReadInt32();
     }
 }
Example #20
0
        public override void Create(byte[] msg = null, GamePacketKeyEx key = null)
        {
            base.Create(msg, key);
            if (msg != null )
            {
                PackIn inpack = new PackIn(msg);
                inpack.ReadInt16();
  

                roleid = inpack.ReadUInt32();
                lookface = inpack.ReadUInt32();
                hair = inpack.ReadUInt32();
                gold = inpack.ReadUInt32();
                gamegold = inpack.ReadUInt32();
                exp = inpack.ReadUInt32();
                expparam = inpack.ReadUInt32();
                mentorexp = inpack.ReadUInt32();
                mercenarexp = inpack.ReadUInt32();
                potential = inpack.ReadUInt32();
                attackpower = inpack.ReadUInt16();
                constitution = inpack.ReadUInt16();
                doage = inpack.ReadUInt16();
                decdoage = inpack.ReadUInt16();
                health = inpack.ReadUInt16();
                magic_attack = inpack.ReadUInt16();
                addpoint = inpack.ReadUInt16();
                life = inpack.ReadUInt16();
                maxlife = inpack.ReadUInt16();
                manna = inpack.ReadUInt16();
                param = inpack.ReadUInt32();
                param1 = inpack.ReadUInt32();
                pk = inpack.ReadUInt16();
                level = inpack.ReadByte();
                profession = inpack.ReadByte();
                param2 = inpack.ReadByte();
                param3 = inpack.ReadByte();
                param4 = inpack.ReadByte();
                mentorlevel = inpack.ReadByte();
                param14 = inpack.ReadByte();
                guanjue = inpack.ReadByte();
       
              //  Mercenarylevel = inpack.ReadUInt16();
                maxpetcall = inpack.ReadUInt16();
                exploit = inpack.ReadInt32();
                bonuspoint = inpack.ReadInt32();
                edubroodpacksize = inpack.ReadByte();
                winglevel = inpack.ReadByte();
                godpetpackagelimit = inpack.ReadByte();
                demonlev = inpack.ReadByte();
                demonexp = inpack.ReadInt32();
                demonexpparam = inpack.ReadInt32();
                param5 = inpack.ReadInt32();
                godlevel = inpack.ReadInt32();
                param9 = inpack.ReadByte();
                param10 = inpack.ReadUInt16();
                param11 = inpack.ReadByte();
    
                for (int i = 0; i < param6.Length; i++)
                {
                    param6[i]= inpack.ReadInt32();
                }
                originalserverid = inpack.ReadInt32();
                wordtreeareaid = inpack.ReadUInt16();
                for (int i = 0; i < param7.Length; i++)
                {
                    param7[i] = inpack.ReadInt32();
                }
                param8 = inpack.ReadUInt16();
       

            }
        }
Example #21
0
 public override void Create(byte[] msg = null, GamePacketKeyEx key = null)
 {
     base.Create(msg, key);
     if (msg != null)
     {
         PackIn inpack = new PackIn(msg);
         inpack.ReadUInt16();
         id = inpack.ReadUInt32();
         dwData = inpack.ReadUInt32();
         usAction = inpack.ReadUInt16();
         param = inpack.ReadUInt16();
         amount = inpack.ReadUInt16();
         param1 = inpack.ReadUInt16();
         param2 = inpack.ReadUInt32();
         param3 = inpack.ReadInt32();
     }
 }
Example #22
0
        public override void Create(byte[] msg = null,GamePacketKeyEx key = null)
        {
           
            base.Create(msg,key);
            if (msg != null)
            {
                PackIn packin = new PackIn(msg);
                rgba = packin.ReadInt32();
                type = packin.ReadUInt16();
                tag = packin.ReadUInt16();
                param = packin.ReadInt32();
                param1 = packin.ReadInt32();
                param2 = packin.ReadInt32();
                btype = packin.ReadByte();

                byte nLen = packin.ReadByte();
                str1 = packin.ReadString(nLen);
                nLen = packin.ReadByte();
                str2 = packin.ReadString(nLen);
                packin.ReadByte();
                nLen = packin.ReadByte();
                str3 = packin.ReadString(nLen);
                packin.ReadByte();
                param3 = packin.ReadUInt16();
            }
        }
Example #23
0
        public override void Create(byte[] msg = null, GamePacketKeyEx key = null)
        {
            base.Create(msg, key);
            if (msg != null)
            {
                PackIn inpack = new PackIn(msg);
                inpack.ReadUInt16();
                param = inpack.ReadInt32();
                unTxtAttribute = inpack.ReadUInt16();
                tag = inpack.ReadUInt16();
                param = inpack.ReadInt32();
                param1 = inpack.ReadInt32();
                param2 = inpack.ReadInt32();
              //  param3 = inpack.ReadInt32();
                byte count = inpack.ReadByte();
                for (int i = 0; i < count; i++)
                {
                    String str = inpack.ReadString();
                    liststr.Add(str);
                }

                inpack.ReadByte();
                inpack.ReadByte();
                inpack.ReadByte();
            }
        }
Example #24
0
 public override void Create(byte[] msg = null, GamePacketKeyEx key = null)
 {
     base.Create(msg, key);
     if (msg.Length == mMsgLen - 2)
     {
         PackIn inpack = new PackIn(msg);
         inpack.ReadUInt16();
         id = inpack.ReadUInt32();
         type = inpack.ReadInt32();
         param = inpack.ReadInt32();
         sp = inpack.ReadInt32();
     }
 }
Example #25
0
        public void ProcessNetMsg(ushort tag, byte[] netdata)
        {
            PlayerObject play = this;
            // Log.Instance().WriteLog("协议号:" + tag.ToString());
            // Log.Instance().WriteLog("data:"+GamePacketKeyEx.byteToText(netdata));
            switch (tag)
            {
                case PacketProtoco.C_MOVE:
                    {

                        //被锁定之后无法进行操作
                        NetMsg.MsgMoveInfo moveinfo = new NetMsg.MsgMoveInfo();
                        moveinfo.Create(netdata, session.GetGamePackKeyEx());
                        byte[] movebuf = null;
                        //角色移动
                        if (moveinfo.id == this.GetTypeId())
                        {
                            if (this.IsLock()) return;
                            //摆摊状态
                            if (this.GetTimerSystem().QueryStatus(GameStruct.RoleStatus.STATUS_PTICH) != null) return;
                            if (this.Move(moveinfo))
                            {
                                moveinfo.id = this.GetTypeId();
                                moveinfo.x = this.GetCurrentX();
                                moveinfo.y = this.GetCurrentY();
                                moveinfo.dir = this.GetDir();
                                movebuf = moveinfo.GetBuffer();
                                //发给自己
                                this.SendData(movebuf);

                            }
                            break;
                        }
                        //幻兽移动
                        play.GetEudemonSystem().Move(moveinfo);

                        //正在跳舞中- 就设置停止跳舞标记
                        if (this.IsDancing())
                        {
                            this.SetDancing(0);
                        }
                        // this.GetGameMap().BroadcastMove(play, movebuf);
                        break;
                    }
                case PacketProtoco.C_OPENNPC: //单击npc
                    {
                        PackIn inpack = new PackIn(netdata);
                        inpack.ReadUInt16();
                        uint npcid = inpack.ReadUInt32();
                        ScripteManager.Instance().ExecuteActionForNpc(npcid, this);
                        break;
                    }
                case PacketProtoco.C_NPCREPLY: //点击npc选项
                    {

                        PackIn inpack = new PackIn(netdata);
                        inpack.ReadUInt16();
                        inpack.ReadUInt32();
                        inpack.ReadUInt16();
                        byte selectindex = inpack.ReadByte();
                        inpack.ReadInt16();
                        String szStr = inpack.ReadString();
                        if (selectindex == 255) //退出该npc对话脚本
                        {
                            this.SetTaskID(0);
                            break;
                        }
                        if ((selectindex > 0))
                        {
                            ScripteManager.Instance().ExecuteOptionId(selectindex, this, szStr);

                        }
                        else if (this.GetTaskID() != 0) //回调-
                        {
                            ScripteManager.Instance().ExecuteOptionId(play.GetTaskID(), this, szStr);
                            this.SetTaskID(0);
                        }
                        break;
                    }
                case PacketProtoco.C_ATTACK:        //攻击
                    {
                        //检测是否是安全区- 防作弊
                        if (this.GetGameMap().IsSafeArea(this.GetCurrentX(), this.GetCurrentY()))
                        {
                            this.LeftNotice("该区域内禁止PK!");
                            break;
                        }
                        NetMsg.MsgAttackInfo info = new NetMsg.MsgAttackInfo();
                        info.Create(netdata, this.GetGamePackKeyEx());
                        if (info.tag == 21)//魔法攻击 要解密
                        {
                            uint nData = ((info.usPosX) ^ (info.roleId) ^ 0x2ED6);
                            info.usPosX = (ushort)(0xFFFF & (BaseFunc.ExchangeShortBits(nData, 16 - 1) + 0xDD12));
                            nData = ((info.usPosY) ^ (info.roleId) ^ 0xB99B);
                            info.usPosY = (ushort)(0xFFFF & (BaseFunc.ExchangeShortBits(nData, 16 - 5) + 0x76DE));
                            info.idTarget = (BaseFunc.ExchangeLongBits((info.idTarget), 13) ^ (info.roleId) ^ 0x5F2D2463) + 0x8B90B51A;
                            info.usType = 0xFFFF & (BaseFunc.ExchangeShortBits(((info.usType) ^ (info.roleId) ^ 0x915D), 16 - 3) + 0x14BE);
                        }

                        if (info.roleId == this.GetTypeId()) //角色攻击
                        {
                            //被锁定之后无法进行操作
                            this.GetFightSystem().SetFighting();
                            //摆摊状态
                            if (this.GetTimerSystem().QueryStatus(GameStruct.RoleStatus.STATUS_PTICH) != null) return;
                            if (this.IsLock() || this.IsDie()) return;
                            //潜行状态就移除
                            if (this.GetTimerSystem().QueryStatus(GameStruct.RoleStatus.STATUS_STEALTH) != null)
                            {
                                this.GetTimerSystem().DeleteStatus(GameStruct.RoleStatus.STATUS_STEALTH);
                            }
                            switch (info.tag)
                            {
                                case 2:     //普通攻击
                                    {
                                        // this.Attack(info);
                                        GetFightSystem().Attack(info);
                                        break;
                                    }
                                case 21:     //魔法攻击
                                    {

                                        //this.MagicAttack(info);
                                        GetFightSystem().MagicAttack(info);
                                        break;
                                    }
                            }
                            //正在跳舞中- 就设置停止跳舞标记
                            if (this.IsDancing())
                            {
                                this.SetDancing(0);
                            }
                            break;
                        }
                        //幻兽攻击
                        this.GetEudemonSystem().Eudemon_Attack(info);
                        break;
                    }
                case PacketProtoco.C_MSGIEM:    //道具操作信息
                    {
                        //被锁定后是无法使用道具的
                        if (this.IsLock()) break;
                        NetMsg.MsgOperateItem info = new NetMsg.MsgOperateItem();
                        info.Create(netdata);
                        switch (info.usAction)
                        {
                            //case NetMsg.MsgOperateItem.ITEMACT_EQUIP:   //穿戴装备
                            //    {
                            //        this.GetItemSystem().Equip(info.id, info.dwData);
                            //        break;
                            //    }
                            case NetMsg.MsgOperateItem.ITEMACT_BUY: //购买道具
                                {
                                    //魔石商店 1207为魔石商店的id
                                    switch (info.id)
                                    {
                                        case GameBase.Config.Define.GMAESHOPID: //魔石商店
                                            {
                                                this.GetItemSystem().BuyGameShopItem(info.dwData, info.amount);
                                                break;
                                            }
                                        case GameBase.Config.Define.LOOKFACEID: //头像商店
                                            {
                                                this.GetItemSystem().ChangeLookFace(info.dwData);
                                                break;
                                            }
                                        case GameBase.Config.Define.HAIRID:     //发型商店
                                            {
                                                this.GetItemSystem().ChangeHair(info.dwData);
                                                break;
                                            }

                                        default:
                                            {
                                                //普通的npc商店
                                                this.GetItemSystem().BuyItem(info.id, info.dwData);
                                                break;
                                            }
                                    }

                                    break;
                                }
                            case NetMsg.MsgOperateItem.ITEMACT_SELL: //卖出道具
                                {
                                    this.GetItemSystem().SellItem(info.id, info.dwData);
                                    break;
                                }
                            case NetMsg.MsgOperateItem.ITEMACT_UNEQUIP: //卸下装备
                                {
                                    this.GetItemSystem().UnEquip(info.id, info.dwData);
                                    break;
                                }
                            case NetMsg.MsgOperateItem.ITEMACT_USE: //使用道具
                                {
                                    //
                                    this.GetItemSystem().UseItem(info.id, info.dwData, (short)info.amount, (short)info.param1);
                                    break;
                                }
                            case NetMsg.MsgOperateItem.ITEMACT_REPAIREQUIP:
                                {
                                    this.GetItemSystem().RepairEquip(info.param1, info.id);
                                    break;
                                }
                            case NetMsg.MsgOperateItem.ITEMACT_DROP:    //丢弃道具,从道具栏
                                {
                                    this.GetItemSystem().DropItemBag(info.id);
                                    break;
                                }

                            case NetMsg.MsgOperateItem.ITEMACT_OPENGEM: //装备打洞
                                {
                                    //Log.Instance().WriteLog("装备打洞:" + play.GetName() + " " + GamePacketKeyEx.byteToText(netdata));
                                    EquipOperation.Instance().OpenGem(this, info.id, (uint)BaseFunc.MakeLong(info.amount,info.param1));
                                    break;
                                }
                            case NetMsg.MsgOperateItem.STRONGACT_SAVEMONEY: //仓库存钱
                                {
                                    this.GetItemSystem().SaveStrongMoney((int)info.dwData);
                                    break;
                                }
                            case NetMsg.MsgOperateItem.STRONGACT_GIVEMONEY: //仓库取钱
                                {
                                    this.GetItemSystem().GiveStrongMoney((int)info.dwData);
                                    break;
                                }
                            case NetMsg.MsgOperateItem.EUDEMONACT_RECALL: //幻兽召回
                                {
                                    this.GetEudemonSystem().Eudemon_ReCall(info.id);
                                    break;
                                }
                            case NetMsg.MsgOperateItem.EUDEMONACT_FIT://幻兽合体
                                {
                                    this.GetEudemonSystem().Eudemon_Fit(info.id);
                                    break;
                                }
                            case NetMsg.MsgOperateItem.EUDEMONACT_BREAK_UP: //幻兽解体
                                {
                                    this.GetEudemonSystem().Eudemon_BreakUp(info.id);
                                    break;
                                }
                            case NetMsg.MsgOperateItem.EUDEMON_EVOLUTION:  //幻兽进化
                                {
                                    this.GetEudemonSystem().Eudemon_Evolution(info.id);
                                    break;
                                }
                            case NetMsg.MsgOperateItem.EUDEMON_DELETE_MAGIC: //删除幻兽技能
                                {
                                    this.GetEudemonSystem().Eudemon_DeleteMagic(info.id, (ushort)info.amount);
                                    break;
                                }
                            case NetMsg.MsgOperateItem.TAKEMOUNT: //骑乘
                                {
                                    //如果幻兽出征了,先召回
                                    EudemonObject obj = this.GetEudemonSystem().GetEudmeonObject(info.id);
                                    if (obj == null) break;
                                    GameStruct.RoleItemInfo item = this.GetItemSystem().FindItem(obj.GetEudemonInfo().itemid);
                                    if (item == null) break;
                                    this.TakeMount(obj.GetTypeId(), item.itemid);
                                    break;
                                }
                            case NetMsg.MsgOperateItem.TAKEOFFMOUNT: //下马
                                {
                                    this.TakeOffMount(info.id);
                                    break;
                                }
                            case NetMsg.MsgOperateItem.GET_EXPBALL_EXP: //获取经验球的等级
                                {
                                    int id = BaseFunc.MakeLong(info.amount, info.param1);
                                    if (id == this.GetTypeId())
                                    {
                                        this.LeftNotice("经验球不允许给人物使用");
                                        break;
                                    }
                                  //  收到网络协议:长度:28协议号:1009
                                    //{28,0,241,3,122,243,157,131,32,147,105,18,50,0,0,0,122,243,157,131,0,0,0,0,0,0,0,0}
                                    break;
                                }
                            case NetMsg.MsgOperateItem.USE_EXPBALL_EXP: //使用经验球
                                {
                                    int id = BaseFunc.MakeLong(info.amount, info.param1);
                                    if (id == this.GetTypeId())
                                    {
                                        this.LeftNotice("经验球不允许给人物使用");
                                        break;
                                    }
                                    //给幻兽使用
                                    RoleData_Eudemon eudemon_info = this.GetEudemonSystem().FindEudemon((uint)id);
                                    EudemonObject _obj = this.GetEudemonSystem().GetEudmeonObject((uint)id);
                                    if (_obj == null || eudemon_info == null) break;
                                    eudemon_info.level = 0;
                                  //  _obj.GetAttr().level = 0;
                                    _obj.ChangeAttribute(EudemonAttribute.Level, this.GetBaseAttr().level + GameBase.Config.Define.EXPBALL_EUDEMON_MAXLEVEL, false);
                                    //删除经验球
                                    this.GetItemSystem().DeleteItemByID(info.id);
                                    break;
                                }
                            case NetMsg.MsgOperateItem.PTICH_SELL_ITEM_GOLD: //摊位以金币方式出售道具
                                {
                                    PtichManager.Instance().SellItem(this, info.id, (byte)NetMsg.MsgOperateItem.PTICH_SELL_ITEM_GOLD, (int)info.dwData);
                                    break;
                                }
                            case NetMsg.MsgOperateItem.PTICH_SELL_ITEM_GAMEGOLD: //摊位以魔石方式出售道具
                                {
                                    PtichManager.Instance().SellItem(this, info.id, (byte)NetMsg.MsgOperateItem.PTICH_SELL_ITEM_GAMEGOLD, (int)info.dwData);
                                    break;
                                }
                            case NetMsg.MsgOperateItem.PTICH_GETBACK_SELLITEM: //摊位取回道具
                                {
                                    PtichManager.Instance().GetBackItem(this, info.id);
                                    break;
                                }
                            case NetMsg.MsgOperateItem.PTICH_BUY_ITEM: //购买摊位道具
                                {
                                    PtichManager.Instance().BuyItem(this, info.dwData, info.id);
                                    break;
                                }
                            case NetMsg.MsgOperateItem.GET_REMOTE_PTICH://获取远程摊位
                                {
                                    PtichManager.Instance().GetRemotePtich(this);
                                    break;
                                }
                            case NetMsg.MsgOperateItem.BUY_REMOTE_PTICH_ITEM:   //购买远程摊位道具
                                {

                                    PtichManager.Instance().BuyRemotePtichItem(this,info.id);
                                    break;
                                }
                            case NetMsg.MsgOperateItem.GET_REMOTE_PTICH_ID: //获取远程摊位- 从指定摊位号
                                {
                                    PtichManager.Instance().GetRemotePtich(this,(int) (info.dwData - 1)/*客户端传上来的是以1为下标*/);
                                    break;
                                }
                            case NetMsg.MsgOperateItem.EUDEMON_FOOD: //幻兽喂食圣兽魔晶
                                {
                                    if (this.GetMoneyCount(MONEYTYPE.GAMEGOLD) < 19) return;
                                    uint eudemon_id = (uint)BaseFunc.MakeLong(info.amount, info.param1);
                                    EudemonObject eudemon = this.GetEudemonSystem().GetBattleEudemon(eudemon_id);

                                    if (eudemon == null ) break;
                                    //幻兽等级不能超过角色九级以上
                                    if (eudemon.GetAttr().level + 50 > this.GetBaseAttr().level + 8)
                                    {
                                        eudemon.ChangeAttribute(EudemonAttribute.Level, this.GetBaseAttr().level + 8 - eudemon.GetAttr().level);
                                    }
                                    //最高255级
                                    else if (eudemon.GetAttr().level + 50 > 255)
                                    {
                                        eudemon.ChangeAttribute(EudemonAttribute.Level, 255 - eudemon.GetAttr().level);

                                    }
                                    else eudemon.ChangeAttribute(EudemonAttribute.Level, 50);
                                    eudemon.CalcAttribute();
                                    this.ChangeMoney(MONEYTYPE.GAMEGOLD, -19);
                                    break;
                                }
                            default: {
                                //Log.Instance().WriteLog("未知操作封包:" + play.GetName() + " " + GamePacketKeyEx.byteToText(netdata));
                                break;
                            }
                        }

                        break;
                    }
                case PacketProtoco.C_MSGTALK:
                    {
                        NetMsg.MsgTalkInfo talkinfo = new NetMsg.MsgTalkInfo();
                        talkinfo.Create(netdata);
                        String talk = talkinfo.GetTalkText();
                        if (talk.Length > 0)
                        {
                            if (talk[0] == '\\' && this.IsGM())
                            {
                                //GM命令--
                                GMCommand.ExecuteGMCommand(talk, this);
                            }
                            if (talk[0] == '\\') //普通命令--
                            {
                                GMCommand.ExecuteNormalCommand(talk, this);
                            }
                        }

                        PacketOut outpack;
                        switch (talkinfo.unTxtAttribute)
                        {
                            case NetMsg.MsgTalkInfo._TXTATR_TALK: //公聊
                                {
                                    outpack = new PacketOut();
                                    outpack.WriteUInt16((ushort)(netdata.Length + 2));
                                    outpack.WriteBuff(netdata);
                                    this.BroadcastBuffer(outpack.Flush(), false);
                                    break;
                                }
                            case NetMsg.MsgTalkInfo._TXTATR_PRIVATE: //私聊
                                {
                                    String targetname = talkinfo.GetTalkTargetText();
                                    PlayerObject targetobj = UserEngine.Instance().FindPlayerObjectToName(targetname);
                                    if (targetobj != null)
                                    {
                                        outpack = new PacketOut(targetobj.GetGamePackKeyEx());
                                        outpack.WriteUInt16((ushort)(netdata.Length + 2));
                                        outpack.WriteBuff(netdata);
                                        targetobj.SendData(outpack.Flush());
                                    }
                                    break;
                                }
                            case NetMsg.MsgTalkInfo._TXTATR_REJECT: //驳回
                                {
                                    String targetname = talkinfo.GetTalkTargetText();
                                    PlayerObject targetobj = UserEngine.Instance().FindPlayerObjectToName(targetname);
                                    if (targetobj != null)
                                    {
                                        switch (talkinfo.GetTalkText())
                                        {
                                            case "a": //好友请求驳回
                                                {
                                                    break;
                                                }
                                            case "b": //交易请求驳回
                                                {
                                                    this.GetTradSystem().SetTradTarget(0);
                                                    targetobj.GetTradSystem().SetTradTarget(0);
                                                    targetobj.LeftNotice("对方拒绝你的交易请求");
                                                    break;
                                                }
                                            case "c": //队伍请求
                                                {
                                                    break;
                                                }
                                        }
                                    }
                                    break;
                                }
                        }

                        break;
                    }
                case PacketProtoco.C_PICKDROPITEM: //拾取道具
                    {
                        NetMsg.MsgDropItem item = new NetMsg.MsgDropItem();
                        item.Create(netdata, null);
                        BaseObject obj = GetGameMap().GetObject(item.id);
                        if (obj == null) break;
                        if (this.IsDie() || this.IsLock()) break;//死亡或者被锁定
                        if (this.GetCurrentX() != obj.GetCurrentX() || this.GetCurrentY() != obj.GetCurrentY())
                        {
                            //连击技能或者xp技能没校验过坐标。。 就校验一下坐标 2015.11.21
                            //该道具暂时不可拾取-
                            this.ScroolRandom(this.GetCurrentX(), this.GetCurrentY());

                        }
                        if ((obj as DropItemObject).IsOwner() && (obj as DropItemObject).GetOwnerId() != this.GetTypeId())
                        {
                            this.LeftNotice("该道具暂时无法拾取!");
                            return;
                        }

                        //在地图
                        GameStruct.RoleItemInfo roleitem = (obj as DropItemObject).GetRoleItemInfo();
                        (obj as DropItemObject).BroadcastInfo(2);
                        this.GetGameMap().RemoveObj(obj);
                        //捡起来放到背包
                        if (roleitem == null) //怪物爆的
                        {
                            this.GetItemSystem().AwardItem(obj.GetTypeId(), NetMsg.MsgItemInfo.ITEMPOSITION_BACKPACK);
                        }
                        else
                        {
                            //玩家丢的
                            //如果是幻兽蛋,就得有幻兽数据
                            if (roleitem.postion == NetMsg.MsgItemInfo.ITEMPOSITION_EUDEMON_PACK)
                            {
                                this.GetEudemonSystem().AddTempEudemon((obj as DropItemObject).GetRoleEudemonInfo());
                            }
                            this.GetItemSystem().AwardItem(roleitem);

                        }

                        break;
                    }
                case PacketProtoco.C_CHANGEPKMODE: //更改pk模式
                    {
                        bool isrecall = false;
                        NetMsg.MsgChangePkMode action = new NetMsg.MsgChangePkMode();
                        action.Create(netdata, GetGamePackKeyEx());
                        switch (action.tag)
                        {
                            case NetMsg.MsgAction.TYPE_CHANGEPKMODE:
                                {
                                    if (action.value >= 0 && action.value <= 5)
                                    {
                                        this.SetPkMode((byte)action.value);
                                        isrecall = true;

                                    }
                                    break;
                                }
                            //xp技能单击
                            case NetMsg.MsgAction.TYPE_XPFULL:
                                {
                                    GetTimerSystem().XPFull((short)action.value);
                                    //测试--
                                    //PacketOut outpack = new PacketOut(this.GetGamePackKeyEx());
                                    //outpack.WriteUInt16(28);
                                    //outpack.WriteUInt16(1017);
                                    //outpack.WriteUInt32(this.GetTypeId());
                                    //outpack.WriteUInt32(2);
                                    //outpack.WriteInt32(36);
                                    //outpack.WriteInt32(64);
                                    //outpack.WriteInt32(71);
                                    //outpack.WriteInt32(2048);
                                    //byte[] data = outpack.Flush();
                                    //this.SendData(data);

                                    break;
                                }
                            //幻兽出征
                            case NetMsg.MsgAction.TYPE_EUDEMON_BATTLE:
                                {
                                    //value = id;
                                    this.GetEudemonSystem().Eudemon_Battle((uint)action.value);
                                    break;
                                }
                            //表情动作
                            case NetMsg.MsgAction.TYPE_FACEACTION:
                                {
                                    if (this.IsLock()) break;

                                    uint nAction = BitConverter.ToUInt32(netdata, 18);
                                    this.SetCurrentAction(nAction);
                                    action.SetKey(null);
                                    this.BroadcastBuffer(action.GetBuffer());
                                    //迷心术
                                    if (this.GetTimerSystem().QueryStatus(GameStruct.RoleStatus.STATUS_MIXINSHU) != null)
                                    {
                                        foreach (RefreshObject refobj in this.GetVisibleList().Values)
                                        {
                                            BaseObject obj = refobj.obj;
                                            if (obj.type == OBJECTTYPE.PLAYER)
                                            {
                                                (obj as PlayerObject).PlayAction(nAction);
                                            }
                                        }
                                    }
                                    break;
                                }
                            //获取角色详细信息
                            case NetMsg.MsgAction.TYPE_FRIENDINFO:
                                {
                                    this.GetFriendSystem().GetFriendInfo(action.value);

                                    break;
                                }
                            //复活角色
                            case NetMsg.MsgAction.TYPE_ALIVE:
                                {
                                    //要是鬼魂状态 并且死亡超过等于二十秒
                                    if (IsGhost() && System.Environment.TickCount - mnGhostTick >= GameBase.Config.Define.ALIVE_TIME)
                                    {

                                        Alive();

                                    }

                                    break;
                                }
                            case NetMsg.MsgAction.TYPE_FLY_DOWN:    //雷霆万钧 下降
                                {
                                    play.GetTimerSystem().DeleteStatus(GameStruct.RoleStatus.STATUS_FLY);
                                    play.GetTimerSystem().DeleteStatus(GameStruct.RoleStatus.STATUS_XPFULL_ATTACK);
                                    if (play.GetTimerSystem().QueryStatus(GameStruct.RoleStatus.STATUS_HEILONGWU) != null)
                                    {
                                        play.GetTimerSystem().DeleteStatus(GameStruct.RoleStatus.STATUS_HEILONGWU);
                                    }
                                    break;

                                }
                            case NetMsg.MsgAction.TYPE_EUDEMON_RANK: //查看幻兽排行榜
                                {
                                    //data1 从总星排行开始 超出100名为0
                                    byte[] data1 = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
                                    //{36,0,102,4,114,189,89,134,39,31,97,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,83,85,0,0,0,0}
                                    PacketOut outpack = new PacketOut();
                                    outpack.WriteInt16(36);
                                    outpack.WriteInt16(1126);
                                    outpack.WriteUInt32((uint)action.value);
                                    outpack.WriteUInt32(this.GetTypeId());
                                    outpack.WriteInt16(0);
                                    outpack.WriteBuff(data1);
                                    this.SendData(outpack.Flush(), true);
                                    break;
                                }
                            case NetMsg.MsgAction.TYPE_EUDEMON_SOULINFO: //主幻兽增加分数信息
                                {

                                    EudemonObject obj = this.GetEudemonSystem().GetEudmeonObject((uint)action.time);
                                    if (obj == null) break;
                                    this.GetEudemonSystem().SetSoulEudemon((uint)action.time);
                                    GameStruct.EudemonSoulInfo soulinfo = ConfigManager.Instance().GetEudemonSoulInfo((int)(obj.GetEudemonInfo().quality / 100));
                                    if (soulinfo == null)
                                    {
                                        this.MsgBox("获取幻化信息错误!!");
                                        Log.Instance().WriteLog("获取幻化信息错误:名称:" + play.GetName() + " 品质:" + obj.GetEudemonInfo().quality.ToString()
                                            + "道具id:" + obj.GetEudemonInfo().itemid.ToString());
                                        break;
                                    }
                                    //125为等级需求
                                  //  byte[] data1 = { 32, 0, 244, 7, 73, 0, 6, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0/*, 9, 0, 0, 0, 1, 0, 0, 0*/ };
                                    PacketOut outpack = new PacketOut();
                                    outpack.WriteInt16(32);
                                    outpack.WriteInt16(2036);
                                    outpack.WriteInt16(73);
                                    outpack.WriteInt16(6);
                                    outpack.WriteInt32(soulinfo.level);
                                    outpack.WriteInt32(soulinfo.fu_star);
                                    outpack.WriteInt32(0);//亲密度
                                    outpack.WriteInt32(0);
                                    outpack.WriteInt32(0);
                                  //  outpack.WriteBuff(data1);
                                    //这个问成长率总分
                                    outpack.WriteInt32(obj.GetEudemonInfo().quality);
                                   // outpack.WriteInt32(9);
                                    outpack.WriteInt32(1);
                                    play.SendData(outpack.Flush(), true);
                                    break;
                                }
                            case NetMsg.MsgAction.TYPE_EUDEMON_SOUL: //幻兽幻化
                                {
                                    this.GetEudemonSystem().Eudemon_Soul((uint)action.value);
                                    break;
                                }
                            case NetMsg.MsgAction.TYPE_LOOKROLEINFO: //查看装备
                                {
                                    PlayerObject obj = UserEngine.Instance().FindPlayerObjectToTypeID((uint)action.value);
                                    if (obj == null) break;

                                    obj.GetItemSystem().SendLookRoleInfo(this);
                                    break;
                                }
                            case NetMsg.MsgAction.TYPE_LOOKEUDEMONINFO: //查看幻兽
                                {
                                    PlayerObject obj = UserEngine.Instance().FindPlayerObjectToTypeID((uint)action.value);
                                    if (obj == null) break;

                                    obj.GetEudemonSystem().SendLookEudemonInfo(this);
                                    break;
                                }
                            case NetMsg.MsgAction.TYPE_FINDPATH: //单击地图自动寻路
                                {
                                    short x = BaseFunc.LoWord(action.type);
                                    short y = BaseFunc.HiWord(action.type);
                                    if (!this.GetGameMap().CanMove(x, y)) break;

                                    //{28,0,242,3,1,0,0,0,73,48,96,5,195,1,159,1,0,0,0,0,232,3,0,0,166,38,0,0}
                                    PacketOut outpack = new PacketOut();
                                    outpack.WriteInt16(28);
                                    outpack.WriteInt16(1010);
                                    outpack.WriteInt32(1);
                                    outpack.WriteUInt32(this.GetTypeId());
                                    outpack.WriteInt16(x);
                                    outpack.WriteInt16(y);
                                    outpack.WriteInt32(0);
                                    outpack.WriteUInt32(this.GetGameMap().GetMapInfo().id);
                                    outpack.WriteInt32(9894);
                                    this.SendData(outpack.Flush(), true);
                                    break;
                                }
                            case NetMsg.MsgAction.TYPE_CONTINUEGAME:    //继续游戏
                                {

                                    PacketOut outpack = new PacketOut();
                                    outpack.WriteInt16(28);
                                    outpack.WriteInt16(1010);
                                    outpack.WriteInt32(System.Environment.TickCount);
                                    outpack.WriteUInt32(this.GetTypeId());
                                    outpack.WriteInt32(0);
                                    outpack.WriteInt32(0);
                                    outpack.WriteInt32(0);
                                    outpack.WriteInt32(9630);
                                    this.SendData(outpack.Flush(), true);
                                    break;
                                }
                            case NetMsg.MsgAction.TYPE_PTICH: //摆摊有关
                                {
                                    if (this.GetCurrentPtichID() == -1) break;
                                    PtichManager.Instance().AddPlayPtich(this.GetCurrentPtichID(), this);
                                    break;
                                }
                            case  NetMsg.MsgAction.TYPE_SHUT_PTICH: //收摊
                                {

                                    PtichManager.Instance().ShutPtich(this,true);

                                    break;
                                }
                            case 9528:
                                {
                                    //{242,3,180,167,114,0,174,66,15,0,70,1,211,1,0,0,0,0,0,0,0,0,56,37,0,0,}
                                 //   Log.Instance().WriteLog(GamePacketKeyEx.byteToText(netdata));
                                    break;
                                }
                            case 9855: //开启远程浏览
                                {
                                    break;
                                }
                            case NetMsg.MsgAction.TYPE_LOOK_PTICH: //查看摊位
                                {
                                    uint ptich_obj_id = (uint)action.time;
                                    PtichManager.Instance().LookPtich(this, ptich_obj_id);
                                    //Log.Instance().WriteLog(GamePacketKeyEx.byteToText(netdata));
                                    break;
                                }
                        }
                        //是否回发-
                        if (isrecall)
                        {
                            this.SendData(action.GetBuffer());
                        }
                        break; ;
                    }
                //保存热键信息
                case PacketProtoco.C_HOTKEY:
                    {
                        // Log.Instance().WriteLog("data:" + GamePacketKeyEx.byteToText(netdata));
                        NetMsg.MsgHotKey hotkey = new NetMsg.MsgHotKey();
                        hotkey.Create(netdata, GetGamePackKeyEx());
                        switch (hotkey.tag)
                        {
                            case NetMsg.MsgHotKey.TAG_SAVEHOTKEY: //保存热键
                                {
                                    String[] hotkeyarr = hotkey.GetHotKeyArr();
                                    if (hotkeyarr != null)
                                    {
                                        this.ClearHotKey(hotkey.GetGroup());
                                        for (int i = 0; i < hotkeyarr.Length; i++)
                                        {
                                            GameStruct.HotkeyInfo info = new GameStruct.HotkeyInfo(hotkey.GetGroup(), hotkeyarr[i]);
                                            if (info.index == 0 && info.id == 0) continue;
                                            this.AddHotKeyInfo(info);
                                        }
                                    }
                                    break;
                                }
                            case NetMsg.MsgHotKey.TAG_WANGLING_STATE: //切换亡灵形态
                                {
                                    if (this.GetTimerSystem().QueryStatus(GameStruct.RoleStatus.STATUS_HUASHENWANGLING) != null)
                                    {
                                        this.GetTimerSystem().DeleteStatus(GameStruct.RoleStatus.STATUS_HUASHENWANGLING);
                                    }
                                    else
                                    {
                                        this.GetTimerSystem().AddStatus(GameStruct.RoleStatus.STATUS_HUASHENWANGLING);
                                    }

                                    break;
                                }
                            case NetMsg.MsgHotKey.WORLD_CHAT: //魔法飞鸽
                                {
                                    //this.MsgBox("游戏当前禁止发送飞鸽!");
                                    //break;
                                   // hotkey.str;
                                    int Index = WorldPigeon.Instance().AddText(this.GetName(), this.GetTypeId(), hotkey.str);
                                    if (Index > 1)
                                    {
                                        this.MsgBox("发布飞鸽成功,目前排在:" + Index.ToString() + "位");
                                    }
                                    else if (Index == -1)
                                    {
                                        this.MsgBox("你已经发过一次飞鸽了,请等上一次的飞鸽发完。");
                                    }

                                    break;
                                }
                            case NetMsg.MsgHotKey.CHANGE_EUDEMON_NAME:  //更改幻兽名字
                                {
                                   // hotkey.type 幻兽id
                                  //  hotkey.str
                                    if (hotkey.str.Length > 8) return;
                                    EudemonObject obj = this.GetEudemonSystem().GetEudmeonObject((uint)hotkey.type);
                                    if (obj == null) return;
                                    GameStruct.RoleItemInfo role_item = this.GetItemSystem().FindItem(obj.GetEudemonInfo().itemid);
                                    if (role_item == null) return;
                                    role_item.forgename = hotkey.str;
                                   // {21,0,247,3,114,189,89,134,24,0,1,8,210,187,184,246,201,181,177,198,0}
                                    PacketOut outpack = new PacketOut();
                                    outpack.WriteInt16((short)(11 + Coding.GetDefauleCoding().GetBytes(role_item.forgename).Length + 2));
                                    outpack.WriteInt16(1015);
                                    outpack.WriteUInt32((uint)hotkey.type);
                                    outpack.WriteInt16(24);
                                    outpack.WriteByte(1);
                                    outpack.WriteString(role_item.forgename);
                                    outpack.WriteByte(0);
                                    this.BroadcastBuffer(outpack.Flush(), true);

                                    this.GetItemSystem().UpdateItemInfo(role_item.id);
                                    this.GetEudemonSystem().SendEudemonInfo(obj.GetEudemonInfo());

                                    //出战的时候也要同步改名
                                    if (this.GetEudemonSystem().GetBattleEudemon((uint)hotkey.type) != null)
                                    {
                                        obj.SendEudemonInfo();
                                    }
                                    break;
                                }
                            case 288: //进入/离开名人堂
                                {
                                    this.MsgBox("名人堂下一个版本开放!");
                                    break;
                                }
                        }

                        break;
                    }
                case PacketProtoco.C_EQUIPOPERATION:
                    {
                        NetMsg.MsgEquipOperation equip = new NetMsg.MsgEquipOperation();
                        equip.Create(netdata, null);
                      //  Log.Instance().WriteLog(GamePacketKeyEx.byteToText(netdata));
                        switch (equip.type)
                        {
                            //提升魔魂等级
                            case NetMsg.MsgEquipOperation.EQUIPSTRONG:
                            case NetMsg.MsgEquipOperation.EQUIPSTRONGEX:
                                {
                                    EquipOperation.Instance().EquipStrong(this, equip.itemid, equip.materialid);
                                    break;
                                }
                            //提升幻魔等级
                            case NetMsg.MsgEquipOperation.EQUIPLEVEL:
                                {
                                    EquipOperation.Instance().EquipLevel(this, equip.itemid, equip.materialid);
                                    break;
                                }
                            //提升装备品质
                            case NetMsg.MsgEquipOperation.EQUIPQUALITY:
                                {
                                    EquipOperation.Instance().EquipQuality(this, equip.itemid, equip.materialid);
                                    break;
                                }
                            //宝石镶嵌
                            case NetMsg.MsgEquipOperation.GEMSET:
                                {
                                    byte index = 0;//第几个洞
                                    uint gemid = 0;
                                    if (equip.materialid != 0)
                                    {
                                        gemid = equip.materialid;
                                        index = 0;
                                    }
                                    else if (equip.param != 0)
                                    {
                                        gemid = equip.param;
                                        index = 1;
                                    }
                                    else if (equip.param1 != 0)
                                    {
                                        gemid = equip.param1;
                                        index = 2;
                                    }
                                    if (gemid == 0) return;
                                    EquipOperation.Instance().GemSet(this, gemid, equip.itemid, index);
                                    break;
                                }
                            case NetMsg.MsgEquipOperation.MAMIC_ADD_GOD:
                                {
                                    EquipOperation.Instance().Magic_Add_God(this, equip.itemid, equip.materialid);
                                    break;
                                }
                            //宝石融合
                            case NetMsg.MsgEquipOperation.GEMFUSION:
                                {
                                    EquipOperation.Instance().GemFusion(this, equip.itemid);
                                    break;
                                }
                                //宝石替换
                            case NetMsg.MsgEquipOperation.GEMREPLACE:
                                {
                                    EquipOperation.Instance().GemReplace(this, netdata);
                                    break;
                                }
                            case NetMsg.MsgEquipOperation.EQUIP_GODEXP://提升神佑
                                {
                                    EquipOperation.Instance().Equip_GodExp(this,equip.itemid, equip.materialid);
                                    break;
                                }
                            case NetMsg.MsgEquipOperation.GUANJUE_GOLD:
                                {
                                    GuanJueManager.Instance().Donation(this, MONEYTYPE.GOLD, (int)equip.itemid);
                                    break;
                                }
                            case NetMsg.MsgEquipOperation.GUANJUE_GAMEGOLD:
                                {
                                    GuanJueManager.Instance().Donation(this, MONEYTYPE.GAMEGOLD, (int)equip.itemid);
                                    break;
                                }
                            case NetMsg.MsgEquipOperation.EXIT_GAME:
                                {
                                   byte[] data = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,0,0,0,0,0,0,0,0,0};
                                    PacketOut outpack = new PacketOut();
                                    outpack.WriteInt16(32);
                                    outpack.WriteInt16(1032);
                                    outpack.WriteInt32(System.Environment.TickCount);
                                    outpack.WriteBuff(data);
                                    this.SendData(outpack.Flush(), true);
                                    break;
                                }

                        }

                        break;
                    }
                case PacketProtoco.C_STRONGPACK:
                    {

                        NetMsg.MsgStrongPack msgstrongpack = new NetMsg.MsgStrongPack();
                        msgstrongpack.Create(netdata);

                        switch (msgstrongpack.param)
                        {
                            case NetMsg.MsgStrongPack.STRONGPACK_TYPE: //仓库操作
                                {
                                    switch (msgstrongpack.type)
                                    {
                                        case NetMsg.MsgStrongPack.STRONGPACK_TYPE_SAVE: //存道具
                                            {
                                                if (this.GetItemSystem().GetStrongItemCount() >= PlayerItem.MAX_STRONGITEM) return; //仓库道具已满,存不了了
                                                this.GetItemSystem().MoveItem(msgstrongpack.itemid, (ushort)NetMsg.MsgItemInfo.ITEMPOSTION_STRONG_PACK);
                                                break;
                                            }
                                        case NetMsg.MsgStrongPack.STRONGPACK_TYPE_GIVE://取道具
                                            {
                                                if (this.GetItemSystem().IsItemFull()) return; //包裹道具已满,存不了了
                                                this.GetItemSystem().MoveItem(msgstrongpack.itemid, (ushort)NetMsg.MsgItemInfo.ITEMPOSITION_BACKPACK);
                                                break;
                                            }
                                    }

                                    break;
                                }
                            case NetMsg.MsgStrongPack.CHEST_TYPE:
                                {
                                    switch (msgstrongpack.type)
                                    {
                                        case NetMsg.MsgStrongPack.CHEST_TYPE_GIVE: //取回衣柜时装
                                            {
                                                this.GetItemSystem().Give_FashionChest(msgstrongpack.itemid);
                                                break;
                                            }
                                    }
                                    break;
                                }
                        }
                        break;
                    }
                case PacketProtoco.C_GETFRIENDINFO:
                    {
                        //for (int i = 0; i < 10; i++)
                        //{
                        //    NetMsg.MsgFriendInfo info = new NetMsg.MsgFriendInfo();
                        //    info.Create(null, this.GetGamePackKeyEx());
                        //    info.level = 130;
                        //    info.type = 15;
                        //    info.actorid = this.GetTypeId() + 1;
                        //    info.name = "狂拽酷炫屌炸天"+i.ToString();
                        //    info.Online = 1;
                        //    this.SendData(info.GetBuffer());
                        //}

                        //info = new NetMsg.MsgFriendInfo();
                        //info.Create(null, this.GetGamePackKeyEx());
                        //info.level = 130;
                        //info.type = 15;
                        //info.actorid = this.GetTypeId() + 2;
                        //info.name = "离线人物";
                        //info.Online = 0;
                        //this.SendData(info.GetBuffer());
                        //  this.GetFriendSystem().SendAllFriendInfo();
                        break;
                    }
                case PacketProtoco.C_ADDFRIEND:
                    {
                        NetMsg.MsgFriendInfo info = new NetMsg.MsgFriendInfo();
                        info.Create(netdata);
                        switch (info.type)
                        {
                            case NetMsg.MsgFriendInfo.TYPE_ADDFRIEND:
                                {
                                    this.GetFriendSystem().RequestAddFriend(info);
                                    break;
                                }
                            case NetMsg.MsgFriendInfo.TYPE_AGREED: //接收好友请求
                                {
                                    this.GetFriendSystem().AddFriend(info.playerid, NetMsg.MsgFriendInfo.TYPE_FRIEND);
                                    break;
                                }
                            case NetMsg.MsgFriendInfo.TYPE_REFUSE: //拒绝好友请求
                                {
                                    this.GetFriendSystem().RefuseFriend(info.playerid);
                                    break;
                                }
                            case NetMsg.MsgFriendInfo.TYPE_KILL:  //绝交
                                {
                                    this.GetFriendSystem().DeleteFriend(info.playerid);
                                    break;
                                }
                        }

                        break;
                    }
                case PacketProtoco.C_TRAD:
                    {
                        NetMsg.MsgTradInfo info = new NetMsg.MsgTradInfo();
                        info.Create(netdata, null);

                        switch (info.type)
                        {
                            case NetMsg.MsgTradInfo.REQUEST_TRAD:
                                {
                                    this.GetTradSystem().RequstTrad(info);
                                    break;
                                }
                            case NetMsg.MsgTradInfo.QUIT_TRAD:
                                {
                                    this.GetTradSystem().QuitTrad(info);
                                    break;
                                }
                            case NetMsg.MsgTradInfo.GOLD_TRAD:
                                {
                                    this.GetTradSystem().SetTradGold((int)info.typeid);
                                    break;
                                }
                            case NetMsg.MsgTradInfo.GAMEGOLD_TRAD:
                                {
                                    this.GetTradSystem().SetTradGameGold((int)info.typeid);
                                    break;
                                }
                            case NetMsg.MsgTradInfo.ITEM_TRAD:
                                {
                                    this.GetTradSystem().AddTradItem(info.typeid);
                                    break;
                                }
                            case NetMsg.MsgTradInfo.SURE_TRAD:
                                {
                                    this.GetTradSystem().SureTrad();
                                    break;
                                }
                        }
                        break;
                    }
                case PacketProtoco.C_GUANJUE:
                    {
                        PackIn inguanjue = new PackIn(netdata);
                        inguanjue.ReadUInt16();
                        short type = inguanjue.ReadInt16();
                        byte page = inguanjue.ReadByte();
                        if (type == 2) //请求获得爵位数据
                        {
                            GuanJueManager.Instance().RequestData(this, page);
                        }

                        //                        byte[] data = {162,1,12,8,2,0,0,0,0,0,5,0,0,0,0,0,10,0,226,12,16,0,205,168,204,236,177,166,56,0,0,0,0,0,0,0,0,0,0,0,0,0,128,226,104,182,10,0,0,0,1,0,0,0,0,0,0,0,119,109,

                        //15,0,161,254,192,230,194,228,161,254,0,0,0,0,0,0,0,0,0,0,0,0,80,231,196,204,9,0,0,0,1,0,0,0,1,0,0,0,130,72,16,0,185,243,215,229,193,236,208,228,0,0,0,0,0,0

                        //,0,0,0,0,0,0,0,190,229,228,8,0,0,0,1,0,0,0,2,0,0,0,230,90,15,0,126,194,182,45,194,182,45,193,250,126,0,0,0,0,0,0,0,0,0,0,98,3,137,149,7,0,0,0,3,0,0,0,3,0,0

                        //,0,30,145,15,0,126,204,236,200,244,211,208,199,233,126,0,0,0,0,0,0,0,0,0,0,176,56,161,110,6,0,0,0,3,0,0,0,4,0,0,0,236,69,15,0,193,233,202,166,0,0,0,0,0,0,0

                        //,0,0,0,0,0,0,0,0,0,195,147,65,41,5,0,0,0,3,0,0,0,5,0,0,0,179,169,15,0,213,189,198,199,161,162,208,204,204,236,0,0,0,0,0,0,0,0,0,0,184,62,118,7,4,0,0,0,3,0,

                        //0,0,6,0,0,0,213,95,16,0,40,95,136,181,165,235,164,240,213,108,215,237,0,0,0,0,0,0,0,0,0,59,223,155,3,0,0,0,3,0,0,0,7,0,0,0,206,207,15,0,182,192,185,194,161

                        //,162,176,212,204,236,0,0,0,0,0,0,0,0,0,0,128,149,127,73,3,0,0,0,3,0,0,0,8,0,0,0,40,79,15,0,196,234,199,225,190,205,210,170,192,203,0,0,0,0,0,0,0,0,0,0,115,

                        //166,15,67,3,0,0,0,3,0,0,0,9,0,0,0};
                        //                        this.GetGamePackKeyEx().EncodePacket(ref data, data.Length);
                        //                        this.SendData(data);
                        break;
                    }
                case PacketProtoco.C_DANCING: //跳舞
                    {
                        PackIn inpack = new PackIn(netdata);
                        short _param = inpack.ReadInt16();
                        uint role_id = inpack.ReadUInt32();
                        uint target_id = inpack.ReadUInt32();
                        int param1 = inpack.ReadInt32();
                        short magic_id = inpack.ReadInt16();
                        short magic_lv = inpack.ReadInt16();

                        PacketOut outpack = new PacketOut();
                        switch (param1)
                        {
                            case 1280: //请求跳舞
                                {
                                    BaseObject targetobj = play.GetGameMap().FindObjectForID(target_id);
                                    if (targetobj == null)
                                    {
                                        return;
                                    }
                                    //距离太远
                                    if (Math.Abs(this.GetCurrentX() - targetobj.GetCurrentX()) > 2 ||
                                        Math.Abs(this.GetCurrentY() - targetobj.GetCurrentY()) > 2)
                                    {
                                        this.LeftNotice("离对方太远了,再走近点吧。");
                                        return;
                                    }
                                    //     收到网络协议:长度:28协议号:1049
                                    byte[] data1 = { 2, 5, 0, 0, 232, 0, 0, 0, 131, 0, 0, 0, 255, 255, 255, 255 };
                                    outpack.WriteUInt16(28);
                                    outpack.WriteUInt16(1049);
                                    outpack.WriteUInt32(this.GetTypeId());
                                    outpack.WriteUInt32(target_id);
                                    outpack.WriteBuff(data1);
                                    play.BroadcastBuffer(outpack.Flush(), true);

                                    outpack = new PacketOut();

                                    byte[] data2 = { 3, 5, 0, 0, 25, 2, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255 };
                                    outpack.WriteUInt16(28);
                                    outpack.WriteUInt16(1049);
                                    outpack.WriteUInt32(this.GetTypeId());
                                    outpack.WriteUInt32(target_id);
                                    outpack.WriteBuff(data2);
                                    play.BroadcastBuffer(outpack.Flush(), true);
                                    mnDancingId = magic_id;
                                    mnDancingTick = System.Environment.TickCount;
                                    break;
                                }
                            case 1285: //停止跳舞
                                {
                                    if (mnDancingId > 0 && System.Environment.TickCount - mnDancingTick > 2000)
                                    {
                                        byte[] data1 = { 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
                                        outpack = new PacketOut();
                                        outpack.WriteUInt16(28);
                                        outpack.WriteUInt16(1049);
                                        outpack.WriteUInt32(this.GetTypeId());
                                        outpack.WriteUInt32(target_id);
                                        outpack.WriteBuff(data1);
                                        play.BroadcastBuffer(outpack.Flush(), true);
                                        mnDancingId = 0;
                                    }

                                    break;
                                }
                        }

                        //Log.Instance().WriteLog(GameBase.Network.GamePacketKeyEx.byteToText(netdata));
                        break;
                    }
                default:
                    {
                        Debug.WriteLine("未知封包,协议号:" + tag.ToString());
                        break;
                    }
            }
        }
Example #26
0
        public static void Run()
        {
            lock (_lock_session)
            {
                foreach (GameSession session in m_DicSession.Values)
                {
                    byte[] retData = session.m_GamePack.GetData();
                    if (retData != null)
                    {
                        PackIn packin = new PackIn(retData);
                        ushort tag = packin.ReadUInt16();
                        switch (tag)
                        {
                            case PacketProtoco.C_LOGINGAME:
                                {
                                    packin.ReadUInt32();

                                    int _key = 0, _key2 = 0;
                                    GenerateKey.GenerateKey_(ref _key, ref _key2);
                                    //取封包帐号- 发给dbserver
                                    byte[] bAccount = packin.ReadBuff(16);

                                    String account = Coding.GetDefauleCoding().GetString(bAccount);
                                    GameBase.Network.Internal.QueryRole query = new GameBase.Network.Internal.QueryRole(session.gameid, _key, _key2, bAccount);
                                    mTcpClient.SendData(query.GetBuffer());

                                    Log.Instance().WriteLog("帐号登录!" + account);
                                    break;
                                }
                        }
                    }
                }
            }
        }
Example #27
0
        public override void Create(byte[] msg = null, GamePacketKeyEx key = null)
        {
 	         base.Create(msg, key);
             if (msg != null)
             {
                 PackIn inpack = new PackIn(msg);
                 inpack.ReadUInt16();
                 time = inpack.ReadInt32();
                 roleid = inpack.ReadUInt32();
                 type = inpack.ReadInt32();
                 param = inpack.ReadInt32();
                 value = inpack.ReadInt32();
                 tag = inpack.ReadInt32();
                 
            }
        }
Example #28
0
 public override void Create(byte[] msg = null, GamePacketKeyEx key = null)
 {
     base.Create(msg, key);
     if (msg != null)
     {
         PackIn inpack = new PackIn(msg);
         inpack.ReadUInt16();
         id = inpack.ReadUInt32();
         id = id ^ 9527;
         typeid = inpack.ReadUInt32();
         x = inpack.ReadInt16();
         y = inpack.ReadInt16();
         param = inpack.ReadInt32();
         tag = inpack.ReadUInt32();
         param1 = inpack.ReadInt32();
     }
 }
Example #29
0
        public void Run()
        {
            int runtime = System.Environment.TickCount;

            while (true)
            {
                if (System.Environment.TickCount - runtime > 300) break;//超出三百毫秒下次再处理
                SocketInfo info = GetInfo();
                if (info == null) break;
                if (info.s == null) break;
                Socket s = info.s;
                switch (info.type)
                {
                    case TYPE_ONCONNECT:
                        {

                            //  SessionManager.Instance().AddSession(s, GameServer.GetTcpServer());
                            break;
                        }
                    case TYPE_CLOSE:
                        {
                            // PlayerObject play = UserEngine.Instance().FindPlayerObjectToSocket(s);
                            //   SessionManager.Instance().RemoveSession(s);
                            //  UserEngine.Instance().RemovePlayObject(play);
                            //if (play != null)
                            // {
                            // play.GetGameSession().Dispose();
                            // play.SetGameSession(null);
                            //}

                            break;
                        }
                    case TYPE_RECEIVE:
                        {
                              GameBase.Network.GameSession session = info.session;
                             byte[] bydata = new byte[info.data.Length];
                             Buffer.BlockCopy(info.data, 0, bydata, 0, info.data.Length);
                             session.m_GamePack.ProcessNetData(bydata);
                            //            session.m_nLastTime = System.Environment.TickCount;

                             byte[] retdata = session.m_GamePack.GetData();
                            if (retdata != null)
                            {
                                GameBase.Network.PackIn packin = new GameBase.Network.PackIn(retdata);

                                ushort tag = packin.ReadUInt16();
                                switch (tag)
                                {

                                    case PacketProtoco.C_LOGINUSER:
                                        {

                                            GameBase.Network.PacketOut packout = new GameBase.Network.PacketOut(session.GetGamePackKeyEx());
                                            byte[] sendbyte = { 0, 1, 59, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                                                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                                                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                                                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                                                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                                                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                                                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                                                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                                                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                                                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                                                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                                                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                                                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                                                      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 255, 255, 255, 255 };
                                            packout.WriteBuff(sendbyte);
                                            sendbyte = packout.Flush();
                                            Program.server.SendData(info.s, sendbyte);
                                            break;
                                        }

                                }
                            }
                            //  SessionManager.Instance().AddNetData(s, info.data, info.data.Length);
                            break;
                        }
                }

            }
        }