コード例 #1
0
        //构造封包
        public byte[] StructurePack(byte[] pDataBytes)
        {
            uint dataCK = m_Encrypt.GetCRC16(pDataBytes);
            //包头
            PacketOut PackHead = new PacketOut();

            PackHead.WriteUInt16((UInt16)GamePackEx.DEFAULT_TAG);
            PackHead.WriteUInt16((UInt16)pDataBytes.Length);
            PackHead.WriteUInt16((UInt16)dataCK);
            PackHead.WriteUInt16(this.HEADER_CHECK_KEY);
            this.HEADER_CHECK_KEY++;
            if (this.HEADER_CHECK_KEY > 0xFFFF)
            {
                this.HEADER_CHECK_KEY = 0;
            }
            PackHead.WriteInt32(0);
            PackHead.WriteInt32(0);

            //计算包头CRC
            byte[] HeaderBytes = PackHead.GetBuffer();
            uint   headerCRC   = m_Encrypt.GetCRC16(HeaderBytes);

            byte[] crc_data = BitConverter.GetBytes(headerCRC);
            Buffer.BlockCopy(crc_data, 0, HeaderBytes, 6, sizeof(int));
            m_Encrypt.Encode(HeaderBytes, 4, 4);

            PacketOut pack = new PacketOut();

            pack.WriteBuff(HeaderBytes);
            pack.WriteBuff(pDataBytes);
            return(pack.GetBuffer());
        }
コード例 #2
0
ファイル: Client.cs プロジェクト: cooler-SAI/ProjectWAR
        public void SendUploadInfo(PatcherFile file)
        {
            _uploadFile = file;

            // Send out notification of file transfer
            PacketOut Out = new PacketOut((byte)Opcodes.LCR_DATA_START);

            Out.WriteUInt32((uint)_uploadFile.ArchiveID);
            Out.WriteUInt64(_uploadFile.FilenameHash);
            Out.WriteUInt32((uint)_uploadFile.FileHash);
            Out.WriteUInt64((ulong)_uploadFile.CompressedSize);
            Out.WriteUInt64((ulong)_uploadFile.FileSize);
            Out.WriteInt32((int)_uploadFile.Compress);
            Out.WriteInt32((int)_uploadFile.Type);
            Out.WriteInt32((int)_uploadFile.OldCrc);
            if (_uploadFile.Filename != null)
            {
                Out.WriteUInt16((ushort)_uploadFile.Filename.Length);
                Out.Write(System.Text.ASCIIEncoding.ASCII.GetBytes(_uploadFile.Filename));
            }
            else
            {
                Out.WriteUInt16(0);
            }

            SendTCPRaw(Out);
        }
コード例 #3
0
ファイル: Program.cs プロジェクト: tangfengray/soul
        public static void SendConnectMapServer(GameSession session, int key, int key2)
        {
            byte[] defdata  = { 232, 16, 67, 3 };
            byte[] defdata2 = { 121, 39,  0,  0, 49, 50, 48, 46, 49, 51, 50, 46, 54,
                                57,  46, 49, 52, 55,  0,  0,  0,  0,  0,  0,  0,  0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
            byte[] ipdata = Coding.GetDefauleCoding().GetBytes(m_GameServerIP);

            PacketOut packout = new PacketOut(session.GetGamePackKeyEx());

            packout.WriteUInt16(84);
            packout.WriteUInt16(PacketProtoco.S_GAMESERVERINFO);
            packout.WriteInt32(key);
            packout.WriteInt32(key2);
            packout.WriteInt32(m_GameServerPort);
            packout.WriteBuff(defdata);
            packout.WriteBuff(ipdata);
            for (int i = 0; i < 28 - ipdata.Length; i++)
            {
                packout.WriteByte(0);
            }
            packout.WriteBuff(defdata2);

            defdata = packout.Flush();
            server.SendData(session.m_Socket, defdata);
        }
コード例 #4
0
        public void SendInfo(PlayerObject play)
        {
            byte[] data3 = { 41, 0, 238, 7, 28, 162, 1, 0, 91, 1, 27, 2, 144, 1, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 1, 8, 211, 249, 193, 250, 207, 201, 181, 192, 0, 0, 0 };
            //play.SendData(data3, true);
            PacketOut outpack = new PacketOut();
            String    sName   = mPlay.GetName();
            int       nLen    = 33 + GameBase.Core.Coding.GetDefauleCoding().GetBytes(sName).Length;

            outpack.WriteInt16((short)nLen);
            outpack.WriteInt16(2030);
            outpack.WriteUInt32(this.GetTypeId());
            outpack.WriteInt16(this.GetCurrentX());
            outpack.WriteInt16(this.GetCurrentY());
            outpack.WriteInt32(400);//144, 1, 0, 0
            outpack.WriteInt32(34);
            outpack.WriteInt32(0);
            outpack.WriteInt32(76);
            outpack.WriteByte(1);
            outpack.WriteString(sName);
            outpack.WriteByte(0);
            outpack.WriteByte(0);
            outpack.WriteByte(0);
            //  Log.Instance().WriteLog(GamePacketKeyEx.byteToText(outpack.GetNormalBuff()));
            play.SendData(outpack.Flush(), true);
            //   byte[] data3 = { 41, 0, 238, 7, 28, 162, 1, 0, 91, 1, 27, 2, 144, 1, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 1, 8, 211, 249, 193, 250, 207, 201, 181, 192, 0, 0, 0 };
            // this.SendData(data3, true);
        }
コード例 #5
0
ファイル: Client.cs プロジェクト: cooler-SAI/ProjectWAR
        public void OnRequestManifestList()
        {
            if (!VerifyLoggedIn())
            {
                return;
            }

            if (Program.Config.ServerState == ServerState.PATCH)
            {
                return;
            }

            var list = PatchMgr._Patch_Assets;


            var files = PatchMgr._Patch_Files.ToList();

            PacketOut Out = new PacketOut((byte)Opcodes.LCR_REQUEST_MANIFEST_LIST);

            Out.WriteInt32(list.Count);

            foreach (var myp in list)
            {
                Patch_MYP         pMYP    = myp.Key;
                List <PatchAsset> pAssets = myp.Value;

                uint hashhash = 0;

                var hashes = pAssets.ToList();
                foreach (var asset in hashes)
                {
                    var newcrc = BitConverter.GetBytes(asset.CRC32);
                    hashhash = Utils.Adler32(hashhash, newcrc, 4);
                    //Console.WriteLine("CRC32: " + asset.CRC32 + " HH:" + hashhash);
                }


                Out.WriteByte((byte)pMYP.Id);
                Out.WriteUInt32(pMYP.AssetCount);
                Out.WriteUInt64(pMYP.ExtractedSize);
                Out.WriteUInt32(hashhash);
            }

            Out.WriteInt32(files.Count);

            foreach (var file in files)
            {
                Out.WriteString(file.Name);
                Out.WriteUInt32(file.CRC32);
                Out.WriteUInt64((ulong)file.Size);
            }
            SendTCPRaw(Out);
        }
コード例 #6
0
ファイル: Client.cs プロジェクト: cooler-SAI/ProjectWAR
        public void SendError(LauncherErrorCode errorCode, string msg)
        {
            //send out notification of file transfer
            PacketOut Out = new PacketOut((byte)Opcodes.LCR_ERROR);

            Out.WriteInt32((int)errorCode);
            Out.WriteString(msg);
            SendTCPRaw(Out);
        }
コード例 #7
0
        private PacketOut CreateAESPacket()
        {
            PacketOut o = new PacketOut(71);

            m_cRSA = new OpenSSL.Crypto.RSA();
            m_cRSA.GenerateKeys(1024, 65537, null, null);
            o.WriteInt32(m_cRSA.PublicKeyAsPEM.Length);
            o.FillString(m_cRSA.PublicKeyAsPEM, m_cRSA.PublicKeyAsPEM.Length);
            return(o);
        }
コード例 #8
0
        private void GenerateLoginPacket(byte[] key, TCPConnection con)
        {
            PacketOut o = new PacketOut(10010);
            var       a = EncryptAES(key, m_szPassword);

            o.FillString(m_szName, 61);
            o.WriteInt32(a.Length);
            o.Write(a, 0, a.Length);
            o.Fill(0, 61 - a.Length);
            con.SendTCP(o);
        }
コード例 #9
0
ファイル: LOGIN_SUCCES.cs プロジェクト: sNakiex/reAPB
        static public void Send(LobbyClient client)
        {
            PacketOut Out = new PacketOut((uint)Opcodes.ANS_LOGIN_SUCCESS);

            Out.WriteParsedString("Welcome to rebornAPB", 48);
            Out.WriteUInt32Reverse(1);
            Out.WriteInt64Reverse(TCPManager.GetTimeStamp());
            Out.WriteUInt32Reverse(client.Account.IsAdmin);
            Out.WriteInt32Reverse(0);
            Out.WriteInt32Reverse(0);
            Out.WriteInt32Reverse(0);
            Out.WriteInt32Reverse(0);
            Out.WriteInt32Reverse(0);
            Out.WriteString("");
            Out.WriteInt32(0);
            Out.WriteInt32(0);
            Out.WriteInt32Reverse(0);
            Out.WriteString("");
            Out.WriteInt32Reverse(0);
            client.Send(Out);
        }
コード例 #10
0
ファイル: Client.cs プロジェクト: cooler-SAI/ProjectWAR
 public void OnFilePartRequest(long offset, int size, int sequence)
 {
     if (_uploadFile != null)
     {
         byte[] data      = new byte[UPLOAD_SIZE];
         long   read_size = _uploadFile.Read(data, (long)offset, size);
         if (read_size > 0)
         {
             PacketOut Out = new PacketOut((byte)Opcodes.LCR_DATA_PART);
             Out.WriteInt64(offset);
             Out.WriteInt32((int)read_size);
             Out.WriteInt32((int)sequence);
             Out.Write(data, 0, data.Length);
             SendTCPRaw(Out);
         }
         if (offset + size >= (long)_uploadFile.CompressedSize)
         {
             _uploadFile.Close();
             _uploadFile = null;
             _uploading  = false;
             ProcessFileUploadQueue();
         }
     }
 }
コード例 #11
0
ファイル: PlayerTrad.cs プロジェクト: tangfengray/soul
        public void SetTradGameGold(int gamegold)
        {
            if (gamegold <= 0)
            {
                return;
            }
            PlayerObject obj = UserEngine.Instance().FindPlayerObjectToTypeID(GetTradTarget());

            if (obj == null)
            {
                return;
            }
            mnGameGold = gamegold;

            //发给对方
            PacketOut outpack = new PacketOut(obj.GetGamePackKeyEx());

            outpack.WriteUInt16(16);
            outpack.WriteUInt16(1056);
            outpack.WriteInt32(mnGameGold);
            outpack.WriteInt32(12);
            outpack.WriteInt32(0);
            obj.SendData(outpack.Flush());
        }
コード例 #12
0
ファイル: Program.cs プロジェクト: tangfengray/soul
        public static void OnConnect(Socket s)
        {
            GameSession session;

            lock (_lock_session)
            {
                session         = new GameSession(s);
                m_DicSession[s] = session;
            }

            //发送key
            PacketOut packout = new PacketOut(session.GetGamePackKeyEx());

            packout.WriteInt16(8); //长度
            packout.WriteUInt16(PacketProtoco.S_KEY);
            packout.WriteInt32(m_Key);
            byte[] data = packout.Flush();
            server.SendData(s, data);
        }
コード例 #13
0
        public static void Send(WorldClient cclient)
        {
            PacketOut Out = new PacketOut((uint)Opcodes.ANS_DISTRICT_ENTER);

            if (cclient.Reserved != null)
            {
                Out.WriteInt32((int)ResponseCodes.RC_SUCCESS);
                string[] result = cclient.Reserved.IP.Split('.');
                foreach (string s in result)
                {
                    Out.WriteByte(Convert.ToByte(s));
                }
                Out.WriteUInt16Reverse(cclient.Reserved.Port);
                ulong timestamp = (ulong)TCPManager.GetTimeStamp();
                Out.WriteUInt64Reverse(timestamp);

                var timestampBytes = BitConverter.GetBytes(timestamp);
                var sha1           = new Sha1Digest();
                sha1.BlockUpdate(cclient.Crypto.Key, 0, cclient.Crypto.Key.Length);
                sha1.BlockUpdate(timestampBytes, 0, timestampBytes.Length);
                var handshakeHash = new byte[sha1.GetDigestSize()];
                sha1.DoFinal(handshakeHash, 0);

                byte[] hash = new byte[handshakeHash.Length];
                Buffer.BlockCopy(handshakeHash, 0, hash, 0, handshakeHash.Length);

                sha1 = new Sha1Digest();
                sha1.BlockUpdate(cclient.Crypto.Key, 0, cclient.Crypto.Key.Length);
                sha1.BlockUpdate(handshakeHash, 0, handshakeHash.Length);
                var encryptionHash = new byte[sha1.GetDigestSize()];
                sha1.DoFinal(encryptionHash, 0);
                var encryptionKey = new byte[16];
                Buffer.BlockCopy(encryptionHash, 0, encryptionKey, 0, 16);

                cclient.Reserved.tcp.Client.Send(new byte[] { 0x31, Convert.ToByte(cclient.Account.Index) });
                cclient.Reserved.tcp.Client.Send(encryptionKey);
            }
            else
            {
                Out.WriteUInt32Reverse((uint)ResponseCodes.RC_DISTRICT_RESERVE_DISTRICT_OFFLINE);
            }
            cclient.Send(Out);
        }
コード例 #14
0
        //获取远程摊位
        //id 为从指定序号摊位 -1为自动顺序
        public void GetRemotePtich(PlayerObject play, int id = -1)
        {
            int ptich_id = -1;

            if (id != -1 && id >= 0 && id < mListPtichInfo.Count)
            {
                if (mListPtichInfo[id].play == null)
                {
                    play.MsgBox("该摊位未开放");
                    return;
                }
                ptich_id = id;
            }
            else
            {
                ptich_id = GetRemotePtichId(play.GetCurrentRemotePtichId());
            }

            if (ptich_id == -1)
            {
                return;                 //无摊位 返回
            }
            play.SetCurrentRemotePtichId(ptich_id);

            //远程摊位信息
            String    sName   = mListPtichInfo[ptich_id].play.GetName();
            int       nLen    = 13 + Coding.GetDefauleCoding().GetBytes(sName).Length;
            PacketOut outpack = new PacketOut();

            outpack.WriteInt16((short)nLen);
            outpack.WriteInt16(1015);

            // {19,0,247,3,14,0,0,0,125,0,1,6,203,167,208,161,187,239,0}
            outpack.WriteInt32(ptich_id + 1);
            outpack.WriteInt16(125);
            outpack.WriteByte(1);
            outpack.WriteString(sName);
            outpack.WriteByte(0);
            play.SendData(outpack.Flush(), true);
            for (int i = 0; i < mListPtichInfo[ptich_id].mSellItemList.Count
                 ; i++)
            {
                RoleItemInfo     item_info = null;
                RoleData_Eudemon eudemon   = null;
                if (mListPtichInfo[ptich_id].mSellItemList[i].item_id >= IDManager.eudemon_start_id)
                {
                    eudemon = mListPtichInfo[ptich_id].play.GetEudemonSystem().FindEudemon(
                        mListPtichInfo[ptich_id].mSellItemList[i].item_id);
                    if (eudemon == null)
                    {
                        continue;
                    }
                    item_info = mListPtichInfo[ptich_id].play.GetItemSystem().FindItem(eudemon.itemid);
                }
                else
                {
                    item_info = mListPtichInfo[ptich_id].play.GetItemSystem().FindItem(
                        mListPtichInfo[ptich_id].mSellItemList[i].item_id);
                }

                if (item_info != null)
                {
                    NetMsg.MsgPtichItemInfo msg = new NetMsg.MsgPtichItemInfo(item_info,
                                                                              (uint)(ptich_id + 1), mListPtichInfo[ptich_id].mSellItemList[i].price, mListPtichInfo[ptich_id].mSellItemList[i].sell_type, true);
                    play.SendData(msg.GetBuffer(), true);
                    //发送幻兽信息
                    if (item_info.typeid >= IDManager.eudemon_start_id)
                    {
                        mListPtichInfo[ptich_id].play.GetEudemonSystem().SendLookPtichEudemonInfo(play, eudemon);
                    }
                }
            }
        }
コード例 #15
0
 public byte[] GetBuffer()
 {
     PacketOut outpack = new PacketOut();
     outpack.WriteInt32(id);
     outpack.WriteByte(friendtype);
     outpack.WriteUInt32(friendid);
     outpack.WriteString(friendname);
     return outpack.GetBuffer();
 }
コード例 #16
0
 public byte[] GetBuffer()
 {
     PacketOut outpack = new PacketOut();
     outpack.WriteUInt32(id);
     outpack.WriteUInt32(itemid);
     outpack.WriteString(name);
     outpack.WriteFloat(phyatk_grow_rate);
     outpack.WriteFloat(phyatk_grow_rate_max);
     outpack.WriteFloat(magicatk_grow_rate);
     outpack.WriteFloat(magicatk_grow_rate_max);
     outpack.WriteFloat(life_grow_rate);
     outpack.WriteFloat(defense_grow_rate);
     outpack.WriteFloat(magicdef_grow_rate);
     outpack.WriteInt32(init_life);
     outpack.WriteInt32(init_atk_min);
     outpack.WriteInt32(init_atk_max);
     outpack.WriteInt32(init_magicatk_min);
     outpack.WriteInt32(init_magicatk_max);
     outpack.WriteInt32(init_defense);
     outpack.WriteInt32(init_magicdef);
     outpack.WriteInt32(luck);
     outpack.WriteInt32(intimacy);
     outpack.WriteInt16(level);
     outpack.WriteInt32(card);
     outpack.WriteInt32(exp);
     outpack.WriteInt32(quality);
     outpack.WriteInt32(recall_count);
     outpack.WriteInt32(wuxing);
     outpack.WriteInt32(mListMagicInfo.Count);
     for (int i = 0; i < mListMagicInfo.Count; i++)
     {
         outpack.WriteInt32(mListMagicInfo[i].id);
         //这里的owernid 宿主在上面一个包含类里面,所以不用写
         outpack.WriteUInt32(mListMagicInfo[i].magicid);
         outpack.WriteUInt32(mListMagicInfo[i].exp);
     }
         return outpack.GetBuffer();
 }
コード例 #17
0
        //摊位取回道具
        public void GetBackItem(PlayerObject play, uint item_id)
        {
            if (play.GetTimerSystem().QueryStatus(GameStruct.RoleStatus.STATUS_PTICH) == null)
            {
                return;
            }
            uint ptich_obj_id = GetPtichObjectTypeID(play.GetCurrentPtichID());

            GameStruct.RoleItemInfo item = null;
            if (ptich_obj_id == 0)
            {
                return;
            }
            if (item_id >= IDManager.eudemon_start_id)
            {
                RoleData_Eudemon eudemon = play.GetEudemonSystem().FindEudemon(item_id);
                if (eudemon == null)
                {
                    return;
                }
                item = play.GetItemSystem().FindItem(eudemon.itemid);
                if (item == null)
                {
                    return;
                }
            }
            else
            {
                item = play.GetItemSystem().FindItem(item_id);
                if (item == null)
                {
                    return;
                }
            }

            int nPtichId = play.GetCurrentPtichID();

            for (int i = 0; i < mListPtichInfo[nPtichId].mSellItemList.Count; i++)
            {
                if (mListPtichInfo[nPtichId].mSellItemList[i].item_id == item_id)
                {
                    mListPtichInfo[nPtichId].mSellItemList.RemoveAt(i);
                    break;
                }
            }
            //放回到包裹或幻兽背包
            if (item_id >= IDManager.eudemon_start_id)
            {
                item.postion = NetMsg.MsgItemInfo.ITEMPOSITION_EUDEMON_PACK;
            }
            else
            {
                item.postion = NetMsg.MsgItemInfo.ITEMPOSITION_BACKPACK;
            }

            PacketOut outpack = new PacketOut();

            outpack.WriteInt16(28);
            outpack.WriteInt16(1009);
            outpack.WriteUInt32(item_id);
            outpack.WriteUInt32(ptich_obj_id);
            outpack.WriteInt32((byte)NetMsg.MsgOperateItem.PTICH_GETBACK_SELLITEM);
            outpack.WriteInt32(0);
            outpack.WriteInt32(0);
            outpack.WriteInt32(0);
            play.SendData(outpack.Flush(), true);
        }
コード例 #18
0
 public byte[] GetBuffer()
 {
     PacketOut outpack = new PacketOut();
     outpack.WriteBuff(InternalPacket.HEAD);
     outpack.WriteUInt16(mParam);
     outpack.WriteByte(ret);
     outpack.WriteInt32(play_id);
     outpack.WriteInt32(legion_id);
     outpack.WriteLong(money);
     outpack.WriteUInt32(boss_id);
     outpack.WriteBuff(InternalPacket.TAIL);
     return outpack.GetBuffer();
 }
コード例 #19
0
 public byte[] GetBuffer()
 {
     PacketOut outpack = new PacketOut();
     outpack.WriteBuff(InternalPacket.HEAD);
     outpack.WriteUInt16(mParam);
     outpack.WriteInt32(player_id);
     outpack.WriteBuff(mInfo.GetBuffer());
     outpack.WriteBuff(InternalPacket.TAIL);
     return outpack.GetBuffer();
 }
コード例 #20
0
        //收摊
        //bSendData 是否回发收摊数据- 玩家下线就不发
        public void ShutPtich(PlayerObject play, bool bSendData = true)
        {
            if (play.GetTimerSystem().QueryStatus(GameStruct.RoleStatus.STATUS_PTICH) == null)
            {
                return;
            }
            uint ptich_obj_id = GetPtichObjectTypeID(play.GetCurrentPtichID());

            if (ptich_obj_id == 0)
            {
                return;
            }

            for (int i = 0; i < mListPtichInfo[play.GetCurrentPtichID()].mSellItemList.Count; i++)
            {
                GameStruct.RoleItemInfo item = null;
                if (mListPtichInfo[play.GetCurrentPtichID()].mSellItemList[i].item_id >= IDManager.eudemon_start_id)
                {
                    RoleData_Eudemon eudemon = play.GetEudemonSystem().FindEudemon(
                        mListPtichInfo[play.GetCurrentPtichID()].mSellItemList[i].item_id);
                    if (eudemon == null)
                    {
                        continue;
                    }
                    item = play.GetItemSystem().FindItem(eudemon.itemid);
                }
                else
                {
                    item = play.GetItemSystem().FindItem(
                        mListPtichInfo[play.GetCurrentPtichID()].mSellItemList[i].item_id);
                }

                if (item != null)
                {
                    //放回到包裹
                    //放回到包裹或幻兽背包
                    if (item.typeid >= IDManager.eudemon_start_id)
                    {
                        item.postion = NetMsg.MsgItemInfo.ITEMPOSITION_EUDEMON_PACK;
                    }
                    else
                    {
                        item.postion = NetMsg.MsgItemInfo.ITEMPOSITION_BACKPACK;
                    }

                    if (bSendData)
                    {
                        PacketOut outpack = new PacketOut();
                        outpack.WriteInt16(28);
                        outpack.WriteInt16(1009);
                        outpack.WriteUInt32(item.id);
                        outpack.WriteUInt32(ptich_obj_id);
                        outpack.WriteInt32((byte)NetMsg.MsgOperateItem.PTICH_GETBACK_SELLITEM);
                        outpack.WriteInt32(0);
                        outpack.WriteInt32(0);
                        outpack.WriteInt32(0);
                        play.SendData(outpack.Flush(), true);
                    }
                }
            }
            mListPtichInfo[play.GetCurrentPtichID()].play = null;
            //移除地图对象
            play.GetGameMap().RemoveObj(mListPtichInfo[play.GetCurrentPtichID()].PtichObj);
            mListPtichInfo[play.GetCurrentPtichID()].PtichObj = null;
            mListPtichInfo[play.GetCurrentPtichID()].mSellItemList.Clear();
            if (bSendData)
            {
                PacketOut outpack = new PacketOut();
                outpack.WriteInt16(16);
                outpack.WriteInt16(2031);
                outpack.WriteUInt32(ptich_obj_id);
                outpack.WriteUInt32(play.GetTypeId());
                outpack.WriteInt32(2);
                play.SendData(outpack.Flush(), true);
            }
            //移除摆摊状态
            play.GetTimerSystem().DeleteStatus(GameStruct.RoleStatus.STATUS_PTICH);
        }
コード例 #21
0
 public byte[] GetBuffer()
 {
     PacketOut outpack = new PacketOut();
     outpack.WriteUInt32(id);
     outpack.WriteString(name);
     outpack.WriteByte(title);
     outpack.WriteInt32(leader_id);
     outpack.WriteString(leader_name);
     outpack.WriteLong(money);
     outpack.WriteString(notice);
     outpack.WriteInt32(list_member.Count);
     for (int i = 0; i < list_member.Count; i++)
     {
         outpack.WriteBuff(list_member[i].GetBuffer());
     }
      return outpack.GetBuffer();
 }
コード例 #22
0
        public byte[] GetBuffer()
        {
            PacketOut outpack = new PacketOut();

            outpack.WriteBuff(InternalPacket.HEAD);
            outpack.WriteUInt16(mParam);
            outpack.WriteInt32(list_item.Count);
            for (int i = 0; i < list_item.Count; i++)
            {
                outpack.WriteBuff(list_item[i].GetBuffer());
            }
            outpack.WriteBuff(InternalPacket.TAIL);
            return outpack.GetBuffer();
        }
コード例 #23
0
        //摊位出售道具
        public void SellItem(PlayerObject play, uint item_id, byte type, int price)
        {
            if (play.GetTimerSystem().QueryStatus(GameStruct.RoleStatus.STATUS_PTICH) == null)
            {
                return;
            }
            uint ptich_obj_id = GetPtichObjectTypeID(play.GetCurrentPtichID());

            GameStruct.RoleItemInfo item = null;
            if (ptich_obj_id == 0)
            {
                return;
            }
            if (item_id >= IDManager.eudemon_start_id)
            {
                RoleData_Eudemon eudemon = play.GetEudemonSystem().FindEudemon(item_id);
                if (eudemon == null)
                {
                    return;
                }
                item = play.GetItemSystem().FindItem(eudemon.itemid);
                if (item == null)
                {
                    return;
                }
            }
            else
            {
                item = play.GetItemSystem().FindItem(item_id);
                if (item == null)
                {
                    return;
                }
            }

            if (ptich_obj_id == 0)
            {
                return;
            }
            //判断是否已经在出售摊位列表中- 反作弊
            int nPtichId = play.GetCurrentPtichID();

            for (int i = 0; i < mListPtichInfo[nPtichId].mSellItemList.Count; i++)
            {
                if (mListPtichInfo[nPtichId].mSellItemList[i].item_id == item_id)
                {
                    return;
                }
            }
            //摆摊出售道具已满
            if (mListPtichInfo[nPtichId].mSellItemList.Count >= GameBase.Config.Define.PTICH_SELL_MAX_COUNT)
            {
                return;
            }
            PacketOut outpack = new PacketOut();

            outpack.WriteInt16(28);
            outpack.WriteInt16(1009);
            outpack.WriteUInt32(item_id);
            outpack.WriteInt32(price);
            outpack.WriteInt32(type);
            outpack.WriteInt32(0);
            outpack.WriteInt32(0);
            outpack.WriteInt32(0);
            play.SendData(outpack.Flush(), true);
            //移到摊位状态
            item.postion = NetMsg.MsgItemInfo.ITEMPOSTION_PTICH_PACK;


            PtichSellItemInfo info = new PtichSellItemInfo();

            info.item_id   = item_id;
            info.price     = price;
            info.sell_type = type;
            mListPtichInfo[nPtichId].mSellItemList.Add(info);
            // {28,0,241,3,8,127,205,7,111,0,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
        }
コード例 #24
0
 public byte[] GetBuffer()
 {
     PacketOut outpack = new PacketOut();
     outpack.WriteBuff(InternalPacket.HEAD);
     outpack.WriteUInt16(mParam);
     outpack.WriteInt32(accountid);
     outpack.WriteBool(IsExit);
     outpack.WriteString(name);
     outpack.WriteUInt32(lookface);
     outpack.WriteUInt32(hair);
     outpack.WriteByte(level);
     outpack.WriteInt32(exp);
     outpack.WriteUInt32(life);
     outpack.WriteUInt32(mana);
     outpack.WriteByte(profession);
     outpack.WriteInt16(pk);
     outpack.WriteLong(gold);
     outpack.WriteLong(gamegold);
     outpack.WriteLong(stronggold);
     outpack.WriteUInt32(mapid);
     outpack.WriteInt16(x);
     outpack.WriteInt16(y);
     outpack.WriteString(hotkey);
     outpack.WriteULong(guanjue);
     outpack.WriteByte(godlevel);
     outpack.WriteByte(maxeudemon);
     outpack.WriteBuff(InternalPacket.TAIL);
     return outpack.GetBuffer();
 }
コード例 #25
0
 public byte[] GetBuffer()
 {
     PacketOut outpack = new PacketOut();
     outpack.WriteBuff(InternalPacket.HEAD);
     outpack.WriteUInt16(mParam);
     outpack.WriteInt32(ownerid);
     outpack.WriteInt32(key);
     outpack.WriteInt32(key2);
     outpack.WriteInt32(mListMagic.Count);
     for (int i = 0; i < mListMagic.Count; i++)
     {
         MagicInfo item = mListMagic[i];
         outpack.WriteInt32(item.id);
         outpack.WriteUInt32(item.magicid);
         outpack.WriteByte(item.level);
         outpack.WriteUInt32(item.exp);
     }
     outpack.WriteBuff(InternalPacket.TAIL);
     return outpack.GetBuffer();
 }
コード例 #26
0
        //角色摆摊
        //nPtichId 摊位ID
        //play   摆摊对象
        public bool AddPlayPtich(int nPtichId, PlayerObject play)
        {
            if (nPtichId < 0 || nPtichId >= GameBase.Config.Define.PTICH_MAX_COUNT)
            {
                return(false);
            }
            if (PtichHasPlay(nPtichId))
            {
                return(false);
            }

            if (play.GetTimerSystem().QueryStatus(GameStruct.RoleStatus.STATUS_PTICH) != null)
            {
                return(false);                                                                               //正在摆摊中
            }
            play.GetTimerSystem().AddStatus(GameStruct.RoleStatus.STATUS_PTICH);


            mListPtichInfo[nPtichId].play = play;

            //设置方向
            play.SetDir(DIR.LEFT_DOWN);


            PacketOut outpack = new PacketOut();

            //网络连接堵塞提示
            //outpack.WriteInt16(16);
            //outpack.WriteInt16(1012);
            //outpack.WriteUInt32(play.GetTypeId());
            //outpack.WriteInt32(0);
            //outpack.WriteInt32(0);
            //play.SendData(outpack.Flush(), true);

            //这个不知道是什么鬼
            //outpack = new PacketOut();
            //outpack.WriteInt16(20);
            //outpack.WriteInt16(1017);
            //outpack.WriteUInt32(play.GetTypeId());
            //outpack.WriteInt32(1);
            //outpack.WriteInt32(4);
            //outpack.WriteInt32(60317); //157, 235, 0, 0
            //play.SendData(outpack.Flush(),true);

            PtichObject obj = new PtichObject(play);

            obj.SetPoint((short)(play.GetCurrentX() + 1), (short)(play.GetCurrentY() + 1));

            play.GetGameMap().AddObject(obj);
            obj.Refresh();
            mListPtichInfo[nPtichId].PtichObj = obj;
            //收到网络协议:长度:28协议号:1010
            outpack = new PacketOut();
            outpack.WriteInt16(28);
            outpack.WriteInt16(1010);
            outpack.WriteInt32(101088);
            outpack.WriteUInt32(play.GetTypeId());
            outpack.WriteInt16(obj.GetCurrentX());
            outpack.WriteInt16(obj.GetCurrentY());
            outpack.WriteInt32(0);
            outpack.WriteUInt32(obj.GetTypeId());
            outpack.WriteInt32(9570);
            play.SendData(outpack.Flush(), true);
            //byte[] data4 = { 28, 0, 242, 3, 224, 138, 1, 0, 174, 66, 15, 0, 91, 1, 27, 2, 0, 0, 0, 0, 28, 162, 1, 0, 98, 37, 0, 0 };
            //this.SendData(data4, true);

            return(true);
        }
コード例 #27
0
 public byte[] GetBuffer()
 {
     PacketOut outpack = new PacketOut();
     outpack.WriteBuff(InternalPacket.HEAD);
     outpack.WriteUInt16(mparam);
     outpack.WriteInt32(id);
     outpack.WriteString(account);
     outpack.WriteString(order);
     outpack.WriteInt32(money);
     outpack.WriteBuff(InternalPacket.TAIL);
     return outpack.GetBuffer();
 }
コード例 #28
0
        public void BuyItem(PlayerObject play, uint ptich_obj_id, uint item_id)
        {
            if (play.GetTimerSystem().QueryStatus(GameStruct.RoleStatus.STATUS_PTICH) != null)
            {
                play.MsgBox("摆摊中不允许购买!");
                return;
            }
            int ptich_id = -1;

            for (int i = 0; i < mListPtichInfo.Count; i++)
            {
                if (mListPtichInfo[i].PtichObj == null)
                {
                    continue;
                }
                if (mListPtichInfo[i].PtichObj.GetTypeId() == ptich_obj_id)
                {
                    ptich_id = i;
                    break;
                }
            }
            if (ptich_id == -1)
            {
                return;
            }

            //检测是否有道具
            int  price     = 0;
            byte sell_type = 0;

            RoleItemInfo     item    = null;
            RoleData_Eudemon eudemon = null;
            bool             bFind   = false;

            for (int i = 0; i < mListPtichInfo[ptich_id].mSellItemList.Count; i++)
            {
                if (mListPtichInfo[ptich_id].mSellItemList[i].item_id == item_id)
                {
                    bFind = true;
                    if (item_id >= IDManager.eudemon_start_id)
                    {
                        eudemon = mListPtichInfo[ptich_id].play.GetEudemonSystem().FindEudemon(item_id);
                        if (eudemon == null)
                        {
                            return;
                        }
                        item = mListPtichInfo[ptich_id].play.GetItemSystem().FindItem(eudemon.itemid);
                    }
                    else
                    {
                        item = mListPtichInfo[ptich_id].play.GetItemSystem().FindItem(item_id);
                    }

                    if (item == null)
                    {
                        play.MsgBox("购买失败!");
                        return;
                    }
                    price     = mListPtichInfo[ptich_id].mSellItemList[i].price;
                    sell_type = mListPtichInfo[ptich_id].mSellItemList[i].sell_type;
                    if (sell_type == NetMsg.MsgOperateItem.PTICH_SELL_ITEM_GAMEGOLD)
                    {
                        if (price > play.GetMoneyCount(MONEYTYPE.GOLD))
                        {
                            play.MsgBox("购买失败,魔石不足!");
                            return;
                        }
                        play.ChangeMoney(MONEYTYPE.GAMEGOLD, -price);
                        mListPtichInfo[ptich_id].play.ChangeMoney(MONEYTYPE.GAMEGOLD, price);
                    }
                    else if (sell_type == NetMsg.MsgOperateItem.PTICH_SELL_ITEM_GOLD)
                    {
                        if (price > play.GetMoneyCount(MONEYTYPE.GOLD))
                        {
                            play.MsgBox("购买失败,金币不足!");
                            return;
                        }
                        play.ChangeMoney(MONEYTYPE.GOLD, -price);
                        mListPtichInfo[ptich_id].play.ChangeMoney(MONEYTYPE.GOLD, price);
                    }
                    else
                    {
                        return;
                    }
                    mListPtichInfo[ptich_id].mSellItemList.RemoveAt(i);
                    break;
                }
            }
            if (!bFind)
            {
                play.MsgBox("购买失败,该道具已下架!");
                return;
            }

            if (item_id >= IDManager.eudemon_start_id)
            {
                item.postion = NetMsg.MsgItemInfo.ITEMPOSITION_EUDEMON_PACK;
                play.GetEudemonSystem().AddTempEudemon(eudemon);//加到临时表
            }
            else
            {
                //添加道具
                item.postion = NetMsg.MsgItemInfo.ITEMPOSITION_BACKPACK;
            }
            play.GetItemSystem().AwardItem(item);
            //删除卖方道具
            //刷新摊位道具栏 卖方
            GetBackItem(mListPtichInfo[ptich_id].play, item_id);
            mListPtichInfo[ptich_id].play.GetItemSystem().DeleteItemByID(item_id);

            //买方
            //{28,0,241,3,140,87,212,7,70,160,1,0,23,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0}
            PacketOut outpack = new PacketOut();

            outpack.WriteInt16(28);
            outpack.WriteInt16(1009);
            outpack.WriteUInt32(item_id);
            outpack.WriteUInt32(ptich_obj_id);
            outpack.WriteInt32(23); //购买完的标识
            outpack.WriteInt16(0);
            outpack.WriteInt32(1);
            outpack.WriteInt32(0);
            outpack.WriteInt16(0);
            play.SendData(outpack.Flush(), true);
            // this.LookPtich(play, ptich_obj_id);
            //  this.LookPtich(mListPtichInfo[ptich_id].play, ptich_obj_id);
        }
コード例 #29
0
 public byte[] GetBuffer()
 {
     PacketOut outpack = new PacketOut();
     outpack.WriteBuff(InternalPacket.HEAD);
     outpack.WriteUInt16(mParam);
     outpack.WriteUInt32(gameid);
     outpack.WriteInt32(key);
     outpack.WriteInt32(key2);
     outpack.WriteBuff(account);
     outpack.WriteBuff(InternalPacket.TAIL);
     return outpack.GetBuffer();
 }
コード例 #30
0
        public static byte[] BuildCharactersList(int AccountId)
        {
            Log.Debug("BuildCharactersList", "AcocuntId = " + AccountId);
            Character[] Chars = GetAccountChar(AccountId)._Chars;
            int         count = 0;

            PacketOut Out = new PacketOut(0);

            Out.Position = 0;

            Character Char = null;

            for (int k = 0; k < MAX_SLOT; ++k)
            {
                Char = Chars[k];
                if (Char != null)
                {
                    List <Character_items> Items = CharMgr.GetItemChar(Char.CharacterId);

                    /****  char slot start ****/
                    Out.FillString(Char.Name, 48);          // name
                    Out.WriteByte(Char.Value[0].Level);     // Level
                    Out.WriteByte(Char.Career);             //career
                    Out.WriteByte(Char.Realm);              // realm
                    Out.WriteByte(Char.Sex);                // gender
                    Out.WriteUInt16R(Char.ModelId);         //model id
                    Out.WriteUInt16R(Char.Value[0].ZoneId); // zone id
                    Out.Fill(0, 12);                        // unk

                    Character_items Item = null;
                    for (UInt16 SlotId = 14; SlotId < 30; ++SlotId)
                    {
                        Item = Items.Find(item => item != null && item.SlotId == SlotId);

                        if (Item == null)
                        {
                            Out.WriteInt32(0);
                            Out.WriteInt32(0);
                        }
                        else
                        {
                            Out.WriteInt32((int)Item.ModelId);
                            Out.WriteUInt16R(0); // primary dye
                            Out.WriteUInt16R(0); // secondary dye
                        }
                    }
                    Out.WriteUInt32(0x00); // 0x00000000
                    for (int i = 0; i < 4; i++)
                    {
                        Out.WriteUInt32(0xFF000000);
                        Out.WriteUInt32(0x00);
                    }
                    Out.WriteUInt32(0xFF000000);

                    //weapons
                    for (UInt16 SlotId = 10; SlotId < 13; ++SlotId)
                    {
                        Item = Items.Find(item => item != null && item.SlotId == SlotId);

                        if (Item == null)
                        {
                            Out.WriteUInt32(0);
                        }
                        else
                        {
                            Out.WriteUInt16R((ushort)Item.ModelId);
                            Out.WriteUInt16(0);
                        }
                    }
                    Out.Fill(0, 8);
                    Out.WriteUInt16(0xFF00);
                    Out.WriteByte(0);
                    Out.WriteByte(Char.Race); // char slot position
                    Out.WriteUInt16(0x00);    //unk

                    /* //Traits [8 bytes]
                     * Out.WriteByte(1); //face
                     * Out.WriteByte(4); //jewel
                     * Out.WriteByte(4); //scar
                     * Out.WriteByte(0); //hair
                     * Out.WriteByte(3); //hair color
                     * Out.WriteByte(2); //skin color
                     * Out.WriteByte(0); //eye color
                     * Out.WriteByte(5); //metal color
                     */
                    Out.Write(Char.bTraits, 0, Char.bTraits.Length);

                    Out.Fill(0, 14); //unk

                    count++;
                }
            }

            for (int i = 0; i < (MAX_SLOT - count); ++i)
            {
                Out.Write(new byte[284], 0, 284);
            }

            return(Out.ToArray());
        }
コード例 #31
0
        public byte[] GetBuffer()
        {
            PacketOut outpack = new PacketOut();

            outpack.WriteBuff(InternalPacket.HEAD);
            outpack.WriteUInt16(mParam);

            outpack.WriteInt32(playerid);
            outpack.WriteInt32(key);
            outpack.WriteInt32(key2);
            outpack.WriteInt32(mListItem.Count);
            for (int i = 0; i < mListItem.Count; i++)
            {
                RoleData_Item item = mListItem[i];
                outpack.WriteBuff(item.GetBuffer());
                //outpack.WriteUInt32(item.id);
                //outpack.WriteUInt32(item.itemid);
                //outpack.WriteUInt16(item.postion);
                //outpack.WriteByte(item.stronglv);
                //outpack.WriteByte(item.gemcount);
                //outpack.WriteUInt32(item.gem1);
                //outpack.WriteUInt32(item.gem2);
                //outpack.WriteString(item.forgename);
                //outpack.WriteUInt16(item.amount);
                //outpack.WriteInt32(item.war_ghost_exp);
                //outpack.WriteByte(item.di_attack);
                //outpack.WriteByte(item.shui_attack);
                //outpack.WriteByte(item.huo_attack);
                //outpack.WriteByte(item.feng_attack);
                //outpack.WriteInt32(item.property);
                //outpack.WriteByte(item.gem3);
                //outpack.WriteInt32(item.god_strong);
                //outpack.WriteInt32(item.god_exp);

            }
            outpack.WriteBuff(InternalPacket.TAIL);
            return outpack.GetBuffer();
        }
コード例 #32
0
 public byte[] GetBuffer()
 {
     PacketOut outpack = new PacketOut();
     outpack.WriteBuff(InternalPacket.HEAD);
     outpack.WriteUInt16(mParam);
     outpack.WriteUInt32(gameid);
     outpack.WriteInt32(accountid);
     outpack.WriteString(name);
     outpack.WriteUInt32(lookface);
     outpack.WriteByte(profession);
     outpack.WriteBuff(InternalPacket.TAIL);
     return outpack.GetBuffer();
 }
コード例 #33
0
        public byte[] GetBuffer()
        {
            PacketOut outpack = new PacketOut();
            //  outpack.WriteBuff(InternalPacket.HEAD);
            //  outpack.WriteUInt16(mParam);
            outpack.WriteUInt32(id);
            outpack.WriteInt32(playerid);
            outpack.WriteUInt32(itemid);
            outpack.WriteUInt16(postion);
            outpack.WriteByte(stronglv);

            outpack.WriteUInt32(gem1);
            outpack.WriteUInt32(gem2);
            outpack.WriteString(forgename);
            outpack.WriteUInt16(amount);
            outpack.WriteInt32(war_ghost_exp);
            outpack.WriteByte(di_attack);
            outpack.WriteByte(shui_attack);
            outpack.WriteByte(huo_attack);
            outpack.WriteByte(feng_attack);
            outpack.WriteInt32(property);
            outpack.WriteUInt32(gem3);
            outpack.WriteInt32(god_strong);
            outpack.WriteInt32(god_exp);

            //  outpack.WriteBuff(InternalPacket.TAIL);

            return outpack.GetBuffer();
        }