diff --git a/src/AreaServer/App.config b/src/AreaServer/App.config index 7af2a6c..5e3af47 100644 --- a/src/AreaServer/App.config +++ b/src/AreaServer/App.config @@ -1,15 +1,54 @@  - - + - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/AreaServer/AreaServer.csproj b/src/AreaServer/AreaServer.csproj index f26b307..ba3c8ee 100644 --- a/src/AreaServer/AreaServer.csproj +++ b/src/AreaServer/AreaServer.csproj @@ -9,9 +9,10 @@ Properties AreaServer AreaServer - v4.6 + v4.8 512 true + AnyCPU @@ -47,19 +48,57 @@ $(SolutionDir)server_icon.ico - - ..\packages\MySql.Data.6.9.9\lib\net45\MySql.Data.dll - True + + ..\packages\BouncyCastle.1.8.9\lib\BouncyCastle.Crypto.dll + + + ..\packages\Google.Protobuf.3.19.3\lib\net45\Google.Protobuf.dll + + + ..\packages\K4os.Compression.LZ4.1.2.16\lib\net46\K4os.Compression.LZ4.dll + + + ..\packages\K4os.Compression.LZ4.Streams.1.2.16\lib\net46\K4os.Compression.LZ4.Streams.dll + + + ..\packages\K4os.Hash.xxHash.1.0.7\lib\net46\K4os.Hash.xxHash.dll + + + ..\packages\MySql.Data.8.0.27\lib\net48\MySql.Data.dll + + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + + + + + + + + ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll + + + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + + + ..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + + + + ..\packages\MySql.Data.8.0.27\lib\net48\Ubiety.Dns.Core.dll + + + ..\packages\MySql.Data.8.0.27\lib\net48\ZstdNet.dll + diff --git a/src/AreaServer/packages.config b/src/AreaServer/packages.config index 74e3399..ff0223f 100644 --- a/src/AreaServer/packages.config +++ b/src/AreaServer/packages.config @@ -1,5 +1,13 @@  - - + + + + + + + + + + \ No newline at end of file diff --git a/src/AuthServer/App.config b/src/AuthServer/App.config index 7af2a6c..5e3af47 100644 --- a/src/AuthServer/App.config +++ b/src/AuthServer/App.config @@ -1,15 +1,54 @@  - - + - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/AuthServer/AuthServer.csproj b/src/AuthServer/AuthServer.csproj index 751df3c..e31b7f2 100644 --- a/src/AuthServer/AuthServer.csproj +++ b/src/AuthServer/AuthServer.csproj @@ -9,9 +9,10 @@ Properties AuthServer AuthServer - v4.6 + v4.8 512 true + AnyCPU @@ -47,14 +48,46 @@ $(SolutionDir)server_icon.ico - - ..\packages\MySql.Data.6.9.9\lib\net45\MySql.Data.dll - True + + ..\packages\BouncyCastle.1.8.9\lib\BouncyCastle.Crypto.dll + + + ..\packages\Google.Protobuf.3.19.3\lib\net45\Google.Protobuf.dll + + + ..\packages\K4os.Compression.LZ4.1.2.16\lib\net46\K4os.Compression.LZ4.dll + + + ..\packages\K4os.Compression.LZ4.Streams.1.2.16\lib\net46\K4os.Compression.LZ4.Streams.dll + + + ..\packages\K4os.Hash.xxHash.1.0.7\lib\net46\K4os.Hash.xxHash.dll + + + ..\packages\MySql.Data.8.0.27\lib\net48\MySql.Data.dll + + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + + + + + + + + ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll + + + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + + + ..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + + @@ -62,6 +95,12 @@ + + ..\packages\MySql.Data.8.0.27\lib\net48\Ubiety.Dns.Core.dll + + + ..\packages\MySql.Data.8.0.27\lib\net48\ZstdNet.dll + diff --git a/src/AuthServer/packages.config b/src/AuthServer/packages.config index 74e3399..ff0223f 100644 --- a/src/AuthServer/packages.config +++ b/src/AuthServer/packages.config @@ -1,5 +1,13 @@  - - + + + + + + + + + + \ No newline at end of file diff --git a/src/GameServer/App.config b/src/GameServer/App.config index 7af2a6c..5e3af47 100644 --- a/src/GameServer/App.config +++ b/src/GameServer/App.config @@ -1,15 +1,54 @@  - - + - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/GameServer/GameServer.csproj b/src/GameServer/GameServer.csproj index bf6efa4..0b97acb 100644 --- a/src/GameServer/GameServer.csproj +++ b/src/GameServer/GameServer.csproj @@ -9,9 +9,10 @@ Properties GameServer GameServer - v4.6 + v4.8 512 true + AnyCPU @@ -47,19 +48,57 @@ $(SolutionDir)server_icon.ico - - ..\packages\MySql.Data.6.9.9\lib\net45\MySql.Data.dll - True + + ..\packages\BouncyCastle.1.8.9\lib\BouncyCastle.Crypto.dll + + + ..\packages\Google.Protobuf.3.19.3\lib\net45\Google.Protobuf.dll + + + ..\packages\K4os.Compression.LZ4.1.2.16\lib\net46\K4os.Compression.LZ4.dll + + + ..\packages\K4os.Compression.LZ4.Streams.1.2.16\lib\net46\K4os.Compression.LZ4.Streams.dll + + + ..\packages\K4os.Hash.xxHash.1.0.7\lib\net46\K4os.Hash.xxHash.dll + + + ..\packages\MySql.Data.8.0.27\lib\net48\MySql.Data.dll + + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + + + + + + + + ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll + + + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + + + ..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + + + + ..\packages\MySql.Data.8.0.27\lib\net48\Ubiety.Dns.Core.dll + + + ..\packages\MySql.Data.8.0.27\lib\net48\ZstdNet.dll + diff --git a/src/GameServer/Network/Handlers/BattleZone/GetRoomInfo.cs b/src/GameServer/Network/Handlers/BattleZone/GetRoomInfo.cs new file mode 100644 index 0000000..7984f69 --- /dev/null +++ b/src/GameServer/Network/Handlers/BattleZone/GetRoomInfo.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Shared.Network.Packets.GameServer.BattleZone; +using Shared.Network; + +namespace GameServer.Network.Handlers.BattleZone +{ + public class GetRoomInfo + { + [Packet(Packetss.CmdGetRoomInfo)] + public static void Handle(Packet packet) + { + /*var RoomListPacket = new GetRoomInfoPacket(packet); + packet.Sender.Send(new GetRoomInfoAnswer() + { + + m_Act = packet.Reader.ReadInt32(), + m_RoomId = packet.Reader.ReadUInt32(), + + + }.CreatePacket());*/ + + var m_Act = packet.Reader.ReadInt32(); + var m_RoomId = packet.Reader.ReadUInt32(); + + var ack = new Packet(Packetss.GetRoomInfoAck); + + + ack.Writer.Write(m_Act); + ack.Writer.Write(m_RoomId); + + packet.Sender.Send(ack); + + } + + /*int { + __unaligned __declspec(align(1)) int m_Act; + __unaligned __declspec(align(1)) unsigned int m_RoomId; + __unaligned __declspec(align(1)) unsigned int m_Size; + BS_PktGetRoomInfoAck::Unit m_unit[1]; + };;*/ + } +} diff --git a/src/GameServer/Network/Handlers/BattleZone/RegisterRoomObserver.cs b/src/GameServer/Network/Handlers/BattleZone/RegisterRoomObserver.cs new file mode 100644 index 0000000..2bb6aae --- /dev/null +++ b/src/GameServer/Network/Handlers/BattleZone/RegisterRoomObserver.cs @@ -0,0 +1,42 @@ +using Shared; +using Shared.Models; +using Shared.Network; +using Shared.Network.GameServer; +using Shared.Util; +using Shared.Network.Packets.GameServer.BattleZone; +using Shared.Objects; + + +namespace GameServer.Network.Handlers.BattleZone +{ + public class RegisterRoomObserver + { + [Packet(Packetss.CmdRegisterRoomObserver)] + public static void Handle(Packet packet) + { + + var registerRoomObserverPacket = new RegisterRoomObserverPacket(packet); + + var m_Result = 1; + var m_PvpChannelId = registerRoomObserverPacket.m_PvpChannelId; //packet.Reader.ReadInt32(); + var m_RoomFilter = registerRoomObserverPacket.m_RoomFilter; + var m_Page = registerRoomObserverPacket.m_Page; + var m_RealMatchEnable = 0; //TODO send from game settings + var m_RealMatchTime = 0; //TODO send from game settings + + var ack = new Packet(Packetss.RegisterRoomObserverAck); + + + ack.Writer.Write(m_Result); + ack.Writer.Write(m_PvpChannelId); + ack.Writer.Write((byte)m_RoomFilter); + //ack.Writer.Write((int)new XiPvpRoomFilter()); + ack.Writer.Write(m_Page); + ack.Writer.Write(m_RealMatchEnable); + ack.Writer.Write(m_RealMatchTime); + + + packet.Sender.Send(ack); + } + } +} diff --git a/src/GameServer/Network/Handlers/BattleZone/RoomCreate.cs b/src/GameServer/Network/Handlers/BattleZone/RoomCreate.cs new file mode 100644 index 0000000..e0df8e5 --- /dev/null +++ b/src/GameServer/Network/Handlers/BattleZone/RoomCreate.cs @@ -0,0 +1,235 @@ +using Shared.Network; +using Shared.Network.GameServer; +using Shared.Objects; +using Shared.Util; +using Shared.Network.Packets.GameServer.BattleZone; +using Shared.Network.Packets.GameServer; + + +namespace GameServer.Network.Handlers +{ + public class RoomCreate + { + [Packet(Packetss.CmdRoomCreate)] + public static void Handle(Packet packet) + { + + /*__unaligned __declspec(align(1)) XiPvpUserInfo m_UserInfo; + __unaligned __declspec(align(1)) int m_Result; + __unaligned __declspec(align(1)) unsigned int m_RoomId; + __unaligned __declspec(align(1)) unsigned int m_RoomLifeId; + __int16 m_RoomType; + unsigned __int16 m_MapId; + unsigned __int16 m_MapFlag;*/ + var roomCreatePacket = new RoomCreatePacket(packet); + //MapId, RoomType, PlayerCapacity, RoomName, RoomPass); + var m_UserInfo = roomCreatePacket.m_UserInfo; + var m_Result = 1; + var m_RoomId = 101; + var m_RoomLifeId = 0; //EXP Reward + //var m_RoomType = roomCreatePacket.m_RoomType; + var m_RoomType = 64; + var m_MapId = roomCreatePacket.m_MapId; + //var m_MapId = 2; + var m_MapFlag = roomCreatePacket.m_MapFlag; + //var m_MapFlag = 1; + //var m_sync = 1; + + var ack = new Packet(Packetss.RoomCreateAck); + var ack2 = new Packet(Packetss.RoomCreateAck); + + ack.Writer.Write(m_UserInfo); + ack.Writer.Write(m_Result); + ack.Writer.Write(m_RoomId); + ack.Writer.Write(m_RoomLifeId); + ack.Writer.Write(m_RoomType); + ack.Writer.Write(m_MapId); + ack.Writer.Write(m_MapFlag); + + //ack2.Writer.Write(m_sync); + + packet.Sender.Send(ack); + //GameServer.Instance.Server.Broadcast(ack2); + + } + + } + + /* + * //----- (005ABBE0) -------------------------------------------------------- +char __cdecl BS_Room::CreateRoom(BS_SmartPtr *pRoom, BS_GameDispatch *pGameDispatch, XiPvpUserInfo *UserInfo, unsigned __int16 MapId, unsigned __int16 MapFlag, unsigned int RoomType, unsigned __int16 PlayerCapacity, const wchar_t *RoomName, const wchar_t *RoomPass, int nPvpCh) +{ + BS_Session *lpSession; // ST15C_4@3 + wchar_t *v11; // eax@3 + BS_Session *v13; // ST158_4@5 + wchar_t *v14; // eax@5 + unsigned int v15; // ecx@8 + BS_GameDispatch *v16; // edx@8 + BS_Room *v17; // ST14C_4@12 + BS_FastRand *v18; // ST11C_4@18 + BS_FastRand *v19; // ST110_4@20 + BS_FastRand *v20; // ST104_4@21 + BS_Session *v21; // STC8_4@30 + wchar_t *v22; // eax@30 + BS_Room *v23; // ST98_4@39 + BS_Session *v24; // ST90_4@40 + wchar_t *v25; // eax@40 + unsigned int v26; // [sp+10h] [bp-164h]@13 + BS_GameDispatch *v27; // [sp+24h] [bp-150h]@41 + BS_GameDispatch *v28; // [sp+9Ch] [bp-D8h]@33 + std::pair,std::allocator,0> >::iterator,bool> result; // [sp+14Ch] [bp-28h]@41 + int v30; // [sp+154h] [bp-20h]@43 + BS_CriticalSection *v31; // [sp+158h] [bp-1Ch]@41 + int msg; // [sp+15Ch] [bp-18h]@35 + BS_CriticalSection *v33; // [sp+160h] [bp-14h]@33 + LapTimeInfo *info; // [sp+164h] [bp-10h]@15 + int v35; // [sp+170h] [bp-4h]@35 + + if ( !(RoomType & 8) && !BS_Room::IsPermitted(nPvpCh, pGameDispatch, RoomType) ) + { + lpSession = pGameDispatch->m_pSession; + v11 = GTW("20040"); + PacketSend::Send_Error(lpSession, v11); + return 0; + } + if ( pGameDispatch->m_pRoom.m_pObj ) + { + v13 = pGameDispatch->m_pSession; + v14 = GTW("20037"); + PacketSend::Send_Error(v13, v14); + return 0; + } + if ( !pRoom->m_pObj ) + { + PacketSend::Send_Error(pGameDispatch->m_pSession, &off_6C27C4); + return 0; + } + v15 = UserInfo->Ip; + v16 = pGameDispatch; + *(_DWORD *)&pGameDispatch->m_pvpUserInfo.Level = *(_DWORD *)&UserInfo->Level; + v16->m_pvpUserInfo.Ip = v15; + if ( !RoomName || !*RoomName ) + RoomName = GTW((&s_roomNames)[4 * (++nIndex % 0xA)]); + if ( RoomType == 64 ) + { + pRoom->m_pObj->m_roomState = 8; + v17 = pRoom->m_pObj; + v17->m_waitStartTime = GetSystemTick(); + pRoom->m_pObj->m_LapTimeReadyTime = 0; + std::_Tree,std::allocator,0>>::clear((std::_Tree,std::allocator,0> > *)&pRoom->m_pObj->m_completeSet.comp); + std::_Tree,std::allocator,0>>::clear((std::_Tree,std::allocator,0> > *)&pRoom->m_pObj->m_waitSet.comp); + v26 = g_LapTimeTable.m_laptime._Myfirst ? g_LapTimeTable.m_laptime._Mylast - g_LapTimeTable.m_laptime._Myfirst : 0; + info = &g_LapTimeTable.m_laptime._Myfirst[nPvpCh % v26]; + if ( g_LapTimeTable.m_laptime._Myfirst[nPvpCh % v26].cityMap[1] ) + { + if ( info->cityMap[2] ) + { + if ( info->cityMap[3] ) + { + v20 = BS_SingletonHeap::GetInstance(); + MapId = (signed int)CGenRandMT::genrand_int31(&v20->m_randMT) % 4; + } + else + { + v19 = BS_SingletonHeap::GetInstance(); + MapId = (signed int)CGenRandMT::genrand_int31(&v19->m_randMT) % 3; + } + } + else + { + v18 = BS_SingletonHeap::GetInstance(); + MapId = (signed int)CGenRandMT::genrand_int31(&v18->m_randMT) % 2; + } + } + else + { + MapId = 0; + } + if ( BS_SingletonHeap::GetInstance()->m_MapCheat > 0 ) + MapId = (BS_SingletonHeap::GetInstance()->m_MapCheat - 1) % 4; + } + BS_Room::InitRoom(pRoom->m_pObj, MapId, RoomType, PlayerCapacity, RoomName, RoomPass); + pRoom->m_pObj->m_MapFlag = MapFlag; + pRoom->m_pObj->m_nPvpCh = nPvpCh; + pGameDispatch->m_bReady = 0; + if ( RoomType == 24 ) + { + pRoom->m_pObj->vfptr->AddMember(pRoom->m_pObj, pGameDispatch, 1, 0); + BS_Room::SendRoomState(pGameDispatch, pRoom->m_pObj, 0, 1); + } + else if ( RoomType == 8 ) + { + pRoom->m_pObj->vfptr->AddMember(pRoom->m_pObj, pGameDispatch, 0, 0); + BS_Room::SendRoomState(pGameDispatch, pRoom->m_pObj, 0, 1); + } + else if ( RoomType & 0x200 ) + { + pRoom->m_pObj->m_MasterSerial = pGameDispatch->m_GameSessionId; + if ( !BS_OBSRoom::AddOBS(&pRoom->m_pObj->m_OBSRoom, pGameDispatch) ) + { + v21 = pGameDispatch->m_pSession; + v22 = GTW("20160"); + PacketSend::Send_Error(v21, v22); + return 0; + } + pRoom->m_pObj->vfptr->SendOBSState(pRoom->m_pObj, pGameDispatch); + } + else + { + pRoom->m_pObj->vfptr->AddMember(pRoom->m_pObj, pGameDispatch, -1, 0); + BS_Room::SendRoomState(pGameDispatch, pRoom->m_pObj, 0, 1); + } + v28 = pGameDispatch; + v33 = &pGameDispatch->m_lock; + if ( pGameDispatch != (BS_GameDispatch *)-28 ) + EnterCriticalSection(&v33->m_csLock); + v35 = 0; + BS_MessageDispatch::GetMessageBuffer(v28, (char **)&msg); + v35 = 1; + *(_WORD *)(msg + 22) = pRoom->m_pObj->m_RoomType; + *(_WORD *)(msg + 24) = MapId; + *(_WORD *)(msg + 26) = MapFlag; + *(_DWORD *)(msg + 10) = 1; + *(_DWORD *)(msg + 14) = pRoom->m_pObj->m_RoomId; + v35 = -1; + if ( v33 ) + LeaveCriticalSection(&v33->m_csLock); + if ( RoomType == 64 ) + { + if ( !pRoom->m_pObj->m_pAreaId ) + { + v23 = pRoom->m_pObj; + v23->m_pAreaId = BS_Room::GetFreeAreaId(); + if ( !pRoom->m_pObj->m_pAreaId ) + { + v24 = pGameDispatch->m_pSession; + v25 = GTW("20185"); + PacketSend::Send_Error(v24, v25); + return 0; + } + } + std::_Tree,std::allocator,0>>::insert( + (std::_Tree,std::allocator,0> > *)&pRoom->m_pObj->m_waitSet.comp, + &result, + &pGameDispatch); + v27 = pGameDispatch; + v31 = &pGameDispatch->m_lock; + if ( pGameDispatch != (BS_GameDispatch *)-28 ) + EnterCriticalSection(&v31->m_csLock); + v35 = 3; + BS_MessageDispatch::GetMessageBuffer(v27, (char **)&v30); + v35 = 4; + *(_DWORD *)(v30 + 2) = pRoom->m_pObj->m_MapId; + *(_DWORD *)(v30 + 6) = pRoom->m_pObj->m_pAreaId->Id; + v35 = -1; + if ( v31 ) + LeaveCriticalSection(&v31->m_csLock); + } + ((void (__thiscall *)(BS_GameDispatch *))pGameDispatch->vfptr[1].__vecDelDtor)(pGameDispatch); + return 1; +} + * + * + */ + +} diff --git a/src/GameServer/Network/Handlers/BattleZone/RoomDirectJoin.cs b/src/GameServer/Network/Handlers/BattleZone/RoomDirectJoin.cs new file mode 100644 index 0000000..abcfbe0 --- /dev/null +++ b/src/GameServer/Network/Handlers/BattleZone/RoomDirectJoin.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Shared.Network; +using Shared.Network.Packets.GameServer.BattleZone; +using Shared.Objects; + +namespace GameServer.Network.Handlers +{ + public class RoomDirectJoin + { + /*struct __cppobj __unaligned __declspec(align(2)) BS_PktRoomDirectJoin : BS_PktBody + { + int m_nPvpChannelId; + unsigned int m_Serial; + XiPvpUserInfo m_UserInfo; + XiPlayerInfo m_PlayerInfo; + XiCarAttr m_CarAttr; + XiPvpRoomFilter m_RoomFilter; + };*/ + + + [Packet(Packetss.CmdRoomDirectJoin)] + public static void Handle(Packet packet) + { + //var m_nPvpChannelId = packet.Reader.ReadString(); + //var m_Serial = 1; + //var m_UserInfo = 1; + //var m_PlayerInfo = 1; + //var m_CarAttr = packet.Reader.ReadInt16(); + //var m_RoomFilter = packet.Reader.ReadUInt16();*/ + + var CmdRoomDirectJoinPacket = new RoomDirectJoinPacket(packet); + packet.Sender.Send(new RoomDirectJoinAnswer() + { + m_nPvpChannelId = packet.Reader.ReadInt32(), + m_Serial = packet.Reader.ReadUInt32(), + m_UserInfo = XiPvpUserInfo.Deserialize(packet.Reader), + m_PlayerInfo = new XiPlayerInfo(packet.Sender.User.VehicleSerial, packet.Sender.User.ActiveCharacter), + m_CarAttr = new XiCarAttr(), + m_RoomFilter = (XiPvpRoomFilter)packet.Reader.ReadInt32(), + }.CreatePacket()); + + } + } +} diff --git a/src/GameServer/Network/Handlers/BattleZone/RoomJoin.cs b/src/GameServer/Network/Handlers/BattleZone/RoomJoin.cs new file mode 100644 index 0000000..0f9b20a --- /dev/null +++ b/src/GameServer/Network/Handlers/BattleZone/RoomJoin.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Shared.Network.Packets.GameServer.BattleZone; +using Shared.Objects; +using Shared.Network; +using Shared.Network.GameServer; +using Shared.Models; + +namespace GameServer.Network.Handlers.BattleZone +{ + public class RoomJoin + { + [Packet(Packetss.CmdRoomJoin)] + public static void Handle(Packet packet) + { + var RoomJoinPacket = new RoomJoinPacket(packet); + packet.Sender.Send(new RoomJoinAnswer() + { + m_Serial = packet.Reader.ReadUInt16(), + m_Age = packet.Reader.ReadUInt16(), + m_UserInfo = new XiPvpUserInfo(), + m_CarAttr = new XiCarAttr(), + m_RoomId = packet.Reader.ReadUInt32(), + m_RoomLifeId = packet.Reader.ReadUInt32(), + m_PlayerInfo = new XiPlayerInfo(), + m_Slot = new XiPvpRoomSlot(), + m_RoomType = packet.Reader.ReadUInt16(), + + }.CreatePacket()); + + /* unsigned __int16 m_Serial; + unsigned __int16 m_Age; + __unaligned __declspec(align(1)) XiPvpUserInfo m_UserInfo; + __unaligned __declspec(align(1)) XiCarAttr m_CarAttr; + __unaligned __declspec(align(1)) unsigned int m_RoomId; + __unaligned __declspec(align(1)) unsigned int m_RoomLifeId; + __unaligned __declspec(align(1)) XiPlayerInfo m_PlayerInfo; + XiPvpRoomSlot m_Slot; + __int16 m_RoomType;*/ + } + + } +} diff --git a/src/GameServer/Network/Handlers/BattleZone/RoomList.cs b/src/GameServer/Network/Handlers/BattleZone/RoomList.cs new file mode 100644 index 0000000..b7c4f60 --- /dev/null +++ b/src/GameServer/Network/Handlers/BattleZone/RoomList.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Shared.Network.Packets.GameServer.BattleZone; +using Shared.Network; + +namespace GameServer.Network.Handlers.BattleZone +{ + public class RoomList + { + [Packet(Packetss.CmdRoomList)] + public static void Handle(Packet packet) + { + var RoomListPacket = new RoomListPacket(packet); + packet.Sender.Send(new RoomListAnswer() + { + + XiPvpRoomFilter = 4, + //m_RoomFilter = 1, + m_Page = 1, + m_PageSize = 1, + + }.CreatePacket()); + /* XiPvpRoomFilter m_RoomFilter; + unsigned int m_Page; + unsigned int m_PageSize;*/ + } + } +} diff --git a/src/GameServer/Network/Handlers/BattleZone/UnregisterRoomObserver.cs b/src/GameServer/Network/Handlers/BattleZone/UnregisterRoomObserver.cs new file mode 100644 index 0000000..569e056 --- /dev/null +++ b/src/GameServer/Network/Handlers/BattleZone/UnregisterRoomObserver.cs @@ -0,0 +1,20 @@ +using Shared.Network; +using Shared.Network.Packets.GameServer.BattleZone; + +namespace GameServer.Network.Handlers.BattleZone +{ + public class UnregisterRoomObserver + { + [Packet(Packetss.CmdUnregisterRoomObserver)] + public static void Handle(Packet packet) + { + var RoomJoinPacket = new UnregisterRoomObserverPacket(packet); + packet.Sender.Send(new UnregisterRoomObserverAnswer() + { + + + }.CreatePacket()); + + } + } +} diff --git a/src/GameServer/Network/Handlers/BattleZone/WMNicknameUpdate.cs b/src/GameServer/Network/Handlers/BattleZone/WMNicknameUpdate.cs new file mode 100644 index 0000000..a2bf6c5 --- /dev/null +++ b/src/GameServer/Network/Handlers/BattleZone/WMNicknameUpdate.cs @@ -0,0 +1,29 @@ +using Shared.Network; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Shared.Network.Packets.GameServer.BattleZone; + +namespace GameServer.Network.Handlers.BattleZone +{ + public class WMNicknameUpdate + { + [Packet(Packetss.CmdWMNickNameUpdate)] + public static void Handle(Packet packet) + { + var wMNickNameUpdatePacket = new WMNickNameUpdatePacket(packet); + var WMNickname = wMNickNameUpdatePacket.WMNickname; + + var ack = new Packet(Packetss.WMNickNameUpdateAck); + + ack.Writer.Write(WMNickname); + + packet.Sender.Send(ack); + + } + + + } +} diff --git a/src/GameServer/packages.config b/src/GameServer/packages.config index 74e3399..ff0223f 100644 --- a/src/GameServer/packages.config +++ b/src/GameServer/packages.config @@ -1,5 +1,13 @@  - - + + + + + + + + + + \ No newline at end of file diff --git a/src/LobbyServer/App.config b/src/LobbyServer/App.config index 7af2a6c..5e3af47 100644 --- a/src/LobbyServer/App.config +++ b/src/LobbyServer/App.config @@ -1,15 +1,54 @@  - - + - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/LobbyServer/LobbyServer.csproj b/src/LobbyServer/LobbyServer.csproj index 3381255..b5a3410 100644 --- a/src/LobbyServer/LobbyServer.csproj +++ b/src/LobbyServer/LobbyServer.csproj @@ -9,9 +9,10 @@ Properties LobbyServer LobbyServer - v4.6 + v4.8 512 true + AnyCPU @@ -47,18 +48,57 @@ $(SolutionDir)server_icon.ico - - ..\packages\MySql.Data.6.9.9\lib\net45\MySql.Data.dll - True + + ..\packages\BouncyCastle.1.8.9\lib\BouncyCastle.Crypto.dll + + + ..\packages\Google.Protobuf.3.19.3\lib\net45\Google.Protobuf.dll + + + ..\packages\K4os.Compression.LZ4.1.2.16\lib\net46\K4os.Compression.LZ4.dll + + + ..\packages\K4os.Compression.LZ4.Streams.1.2.16\lib\net46\K4os.Compression.LZ4.Streams.dll + + + ..\packages\K4os.Hash.xxHash.1.0.7\lib\net46\K4os.Hash.xxHash.dll + + + ..\packages\MySql.Data.8.0.27\lib\net48\MySql.Data.dll + + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + + + + + + + + ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll + + + + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + + + ..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + + + + ..\packages\MySql.Data.8.0.27\lib\net48\Ubiety.Dns.Core.dll + + + ..\packages\MySql.Data.8.0.27\lib\net48\ZstdNet.dll + diff --git a/src/LobbyServer/packages.config b/src/LobbyServer/packages.config index 74e3399..ff0223f 100644 --- a/src/LobbyServer/packages.config +++ b/src/LobbyServer/packages.config @@ -1,5 +1,13 @@  - - + + + + + + + + + + \ No newline at end of file diff --git a/src/RankingServer/App.config b/src/RankingServer/App.config index 7af2a6c..5e3af47 100644 --- a/src/RankingServer/App.config +++ b/src/RankingServer/App.config @@ -1,15 +1,54 @@  - - + - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/RankingServer/RankingServer.csproj b/src/RankingServer/RankingServer.csproj index d192d74..1d26aa6 100644 --- a/src/RankingServer/RankingServer.csproj +++ b/src/RankingServer/RankingServer.csproj @@ -9,9 +9,10 @@ Properties RankingServer RankingServer - v4.6 + v4.8 512 true + AnyCPU @@ -47,18 +48,57 @@ $(SolutionDir)server_icon.ico - - ..\packages\MySql.Data.6.9.9\lib\net45\MySql.Data.dll - True + + ..\packages\BouncyCastle.1.8.9\lib\BouncyCastle.Crypto.dll + + + ..\packages\Google.Protobuf.3.19.3\lib\net45\Google.Protobuf.dll + + + ..\packages\K4os.Compression.LZ4.1.2.16\lib\net46\K4os.Compression.LZ4.dll + + + ..\packages\K4os.Compression.LZ4.Streams.1.2.16\lib\net46\K4os.Compression.LZ4.Streams.dll + + + ..\packages\K4os.Hash.xxHash.1.0.7\lib\net46\K4os.Hash.xxHash.dll + + + ..\packages\MySql.Data.8.0.27\lib\net48\MySql.Data.dll + + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + + + + + + + + ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll + + + + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + + + ..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + + + + ..\packages\MySql.Data.8.0.27\lib\net48\Ubiety.Dns.Core.dll + + + ..\packages\MySql.Data.8.0.27\lib\net48\ZstdNet.dll + diff --git a/src/RankingServer/packages.config b/src/RankingServer/packages.config index 74e3399..ff0223f 100644 --- a/src/RankingServer/packages.config +++ b/src/RankingServer/packages.config @@ -1,5 +1,13 @@  - - + + + + + + + + + + \ No newline at end of file diff --git a/src/Shared/Network/Packets/GameServer/BattleZone/GetRoomInfoAnswer.cs b/src/Shared/Network/Packets/GameServer/BattleZone/GetRoomInfoAnswer.cs new file mode 100644 index 0000000..928f7c4 --- /dev/null +++ b/src/Shared/Network/Packets/GameServer/BattleZone/GetRoomInfoAnswer.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.IO; +using Shared.Util; + +namespace Shared.Network.Packets.GameServer.BattleZone +{ + public class GetRoomInfoAnswer : OutPacket + { + + public int m_Act; + public uint m_RoomId; + public uint m_Size; + public uint m_unit; + //BS_PktGetRoomInfoAck::Unit m_unit[1]; + + public override Packet CreatePacket() + { + return base.CreatePacket(Packetss.CmdRoomList); + } + + public override int ExpectedSize() => 10; + + public override byte[] GetBytes() + { + using (var ms = new MemoryStream()) + { + using (var bs = new BinaryWriterExt(ms)) + { + + bs.Write(m_Act); + //bs.Write(m_RoomFilter); + bs.Write(m_RoomId); + bs.Write(m_Size); + bs.Write(m_unit); + + + } + return ms.ToArray(); + } + } + } +} diff --git a/src/Shared/Network/Packets/GameServer/BattleZone/GetRoomInfoPacket.cs b/src/Shared/Network/Packets/GameServer/BattleZone/GetRoomInfoPacket.cs new file mode 100644 index 0000000..f4a50c5 --- /dev/null +++ b/src/Shared/Network/Packets/GameServer/BattleZone/GetRoomInfoPacket.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shared.Network.Packets.GameServer.BattleZone +{ + public class GetRoomInfoPacket + { + public int m_Act; + public uint m_RoomId; + + public GetRoomInfoPacket(Packet packet) + { + + m_Act = packet.Reader.ReadInt32(); + m_RoomId = packet.Reader.ReadUInt32(); + + } + + } +} diff --git a/src/Shared/Network/Packets/GameServer/BattleZone/RegisterRoomObserverPacket.cs b/src/Shared/Network/Packets/GameServer/BattleZone/RegisterRoomObserverPacket.cs new file mode 100644 index 0000000..aed18bf --- /dev/null +++ b/src/Shared/Network/Packets/GameServer/BattleZone/RegisterRoomObserverPacket.cs @@ -0,0 +1,29 @@ +using Shared.Objects; + +namespace Shared.Network.Packets.GameServer.BattleZone +{ + public class RegisterRoomObserverPacket + { + + /// + /// The used protocol version on client side + /// + public readonly uint ProtocolVersion; + + public readonly uint m_PvpChannelId; + public readonly XiPvpRoomFilter m_RoomFilter; + //public readonly int m_RoomFilter; + public readonly uint m_Page; + public readonly uint m_PageSize; + + public RegisterRoomObserverPacket(Packet packet) + { + m_PvpChannelId = packet.Reader.ReadUInt32(); + m_RoomFilter = (XiPvpRoomFilter)packet.Reader.ReadInt32(); + //m_RoomFilter = packet.Reader.ReadInt32(); + m_Page = packet.Reader.ReadUInt32(); + m_PageSize = packet.Reader.ReadUInt32(); + } + } +} + diff --git a/src/Shared/Network/Packets/GameServer/BattleZone/RoomCreateAnswer.cs b/src/Shared/Network/Packets/GameServer/BattleZone/RoomCreateAnswer.cs new file mode 100644 index 0000000..25b0ef8 --- /dev/null +++ b/src/Shared/Network/Packets/GameServer/BattleZone/RoomCreateAnswer.cs @@ -0,0 +1,87 @@ +using System.IO; +using Shared.Network.AreaServer; +using Shared.Util; +using Shared.Objects; + +namespace Shared.Network.Packets.GameServer +{ + /// + /// sub_685720 + /// + public class RoomCreateAnswer : OutPacket + { + /// + /// Arena Type + /// Referenced as BS_Session + /// Types: + /// - lpSession = First Arena - upto V3 + /// - v5 = First Arena - upto V6 + /// - v7 = First Arena - upto V8 + /// - v9 = First Arena - upto V10 + /// - v11 = First Arena - upto V12 + /// - debug - Debug Messages + /// + + + /// + /// Max Car Class + /// Referenced as wchar_t + /// /// Types: + /// - lpSession = First Arena - upto V3 + /// - v5 = First Arena - upto V6 + /// - v7 = First Arena - upto V8 + /// - v9 = First Arena - upto V10 + /// - v11 = First Arena - upto V12 + /// - debug - Debug Messages + /// + + + /// + /// The actual message + /// ??? + /// + //public XiPvpUserInfo m_UserInfo; + + /*__unaligned __declspec(align(1)) XiPvpUserInfo m_UserInfo; + __unaligned __declspec(align(1)) int m_Result; + __unaligned __declspec(align(1)) unsigned int m_RoomId; + __unaligned __declspec(align(1)) unsigned int m_RoomLifeId; + __int16 m_RoomType; + unsigned __int16 m_MapId; + unsigned __int16 m_MapFlag;*/ + public string m_UserInfo; + public int m_Result; + public uint m_RoomId; + public uint m_RoomLifeId; + public short m_RoomType; + public ushort m_MapId; + public ushort m_MapFlag; + + public override Packet CreatePacket() + { + return base.CreatePacket(Packetss.CmdRoomCreate); + } + + public override int ExpectedSize() => 10; + + public override byte[] GetBytes() + { + using (var ms = new MemoryStream()) + { + using (var bs = new BinaryWriterExt(ms)) + { + bs.Write(m_UserInfo); + bs.Write(m_Result); + bs.Write(m_RoomId); + bs.Write(m_RoomLifeId); + bs.Write(m_RoomType); + bs.Write(m_MapId); + bs.Write(m_MapFlag); + } + return ms.ToArray(); + } + } + + } + +} diff --git a/src/Shared/Network/Packets/GameServer/BattleZone/RoomCreatePacket.cs b/src/Shared/Network/Packets/GameServer/BattleZone/RoomCreatePacket.cs new file mode 100644 index 0000000..88540e9 --- /dev/null +++ b/src/Shared/Network/Packets/GameServer/BattleZone/RoomCreatePacket.cs @@ -0,0 +1,29 @@ +using Shared.Objects; + +namespace Shared.Network.GameServer +{ + public class RoomCreatePacket + { + //public readonly string m_UserInfo; + public readonly XiPvpUserInfo m_UserInfo; + public readonly short m_RoomType; + public readonly ushort m_MapId; + public readonly ushort m_PlayerCapacity; + public readonly ushort m_MapFlag; + public readonly string m_RoomName; // 30 char + public readonly string m_RoomPass; // 30 char + + + public RoomCreatePacket(Packet packet) + { + m_UserInfo = XiPvpUserInfo.Deserialize(packet.Reader); + //m_UserInfo = new XiPvpUserInfo(); + m_RoomType = packet.Reader.ReadInt16(); //0 = individual 1 = Team 2 = Practice + m_MapId = packet.Reader.ReadUInt16(); + m_PlayerCapacity = packet.Reader.ReadUInt16(); + m_MapFlag = packet.Reader.ReadUInt16(); //Spectate?? + m_RoomName = packet.Reader.ReadUnicodeStatic(15); //Room Name + m_RoomPass = packet.Reader.ReadUnicodeStatic(15); // Password + } + } +} \ No newline at end of file diff --git a/src/Shared/Network/Packets/GameServer/BattleZone/RoomDirectJoinAnswer.cs b/src/Shared/Network/Packets/GameServer/BattleZone/RoomDirectJoinAnswer.cs new file mode 100644 index 0000000..b25d158 --- /dev/null +++ b/src/Shared/Network/Packets/GameServer/BattleZone/RoomDirectJoinAnswer.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.IO; +using Shared.Util; +using Shared.Objects; + +namespace Shared.Network.Packets.GameServer.BattleZone +{ + public class RoomDirectJoinAnswer : OutPacket + { + public int m_nPvpChannelId; + public uint m_Serial; + public XiPvpUserInfo m_UserInfo; + public XiPlayerInfo m_PlayerInfo; + public XiCarAttr m_CarAttr; + public XiPvpRoomFilter m_RoomFilter; + + public override Packet CreatePacket() + { + return base.CreatePacket(Packetss.CmdRoomList); + } + + public override int ExpectedSize() => 10; + + public override byte[] GetBytes() + { + using (var ms = new MemoryStream()) + { + using (var bs = new BinaryWriterExt(ms)) + { + + bs.Write(m_nPvpChannelId); + bs.Write(m_Serial); + bs.Write(m_UserInfo); + bs.Write(m_PlayerInfo); + bs.Write((BinaryWriterExt.ISerializable)m_CarAttr); + bs.Write((int)m_RoomFilter); + + } + return ms.ToArray(); + } + } + + } +} diff --git a/src/Shared/Network/Packets/GameServer/BattleZone/RoomDirectJoinPacket.cs b/src/Shared/Network/Packets/GameServer/BattleZone/RoomDirectJoinPacket.cs new file mode 100644 index 0000000..a579ab3 --- /dev/null +++ b/src/Shared/Network/Packets/GameServer/BattleZone/RoomDirectJoinPacket.cs @@ -0,0 +1,43 @@ +using Shared.Objects; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shared.Network.Packets.GameServer.BattleZone +{ + public class RoomDirectJoinPacket + { + /*struct __cppobj __unaligned __declspec(align(2)) BS_PktRoomDirectJoin : BS_PktBody + { + int m_nPvpChannelId; + unsigned int m_Serial; + XiPvpUserInfo m_UserInfo; + XiPlayerInfo m_PlayerInfo; + XiCarAttr m_CarAttr; + XiPvpRoomFilter m_RoomFilter; + };*/ + public int m_nPvpChannelId; + public uint m_Serial; + public XiPvpUserInfo m_UserInfo; + public XiPlayerInfo m_PlayerInfo; + public XiCarAttr m_CarAttr; + public ushort m_carAttr; + public XiPvpRoomFilter m_RoomFilter; + + public RoomDirectJoinPacket(Packet packet) + { + + m_nPvpChannelId = packet.Reader.ReadInt32(); + m_Serial = packet.Reader.ReadUInt32(); + m_UserInfo = XiPvpUserInfo.Deserialize(packet.Reader); + m_PlayerInfo = new XiPlayerInfo(packet.Sender.User.VehicleSerial, packet.Sender.User.ActiveCharacter); + m_CarAttr = new XiCarAttr(); + //m_carAttr = packet.Reader.ReadUInt16(); + m_RoomFilter = (XiPvpRoomFilter)packet.Reader.ReadInt32(); + + } + + } +} diff --git a/src/Shared/Network/Packets/GameServer/BattleZone/RoomJoinAnswer.cs b/src/Shared/Network/Packets/GameServer/BattleZone/RoomJoinAnswer.cs new file mode 100644 index 0000000..c8e6795 --- /dev/null +++ b/src/Shared/Network/Packets/GameServer/BattleZone/RoomJoinAnswer.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.IO; +using Shared.Util; +using Shared.Network.Packets.GameServer; +using Shared.Objects; + +namespace Shared.Network.Packets.GameServer.BattleZone +{ + public class RoomJoinAnswer : OutPacket + { + public ushort m_Serial; + public ushort m_Age; + public XiPvpUserInfo m_UserInfo; + public XiCarAttr m_CarAttr; + public uint m_RoomId; + public uint m_RoomLifeId; + public XiPlayerInfo m_PlayerInfo; + public XiPvpRoomSlot m_Slot; + public ushort m_RoomType; + + public override Packet CreatePacket() + { + return base.CreatePacket(Packetss.CmdRegisterRoomObserver); + } + + public override int ExpectedSize() => 10; + + public override byte[] GetBytes() + { + using (var ms = new MemoryStream()) + { + using (var bs = new BinaryWriterExt(ms)) + { + bs.Write(m_Serial); + bs.Write(m_Age); + bs.Write(m_UserInfo); + bs.Write((BinaryWriterExt.ISerializable)m_CarAttr); + bs.Write(m_RoomId); + bs.Write(m_RoomLifeId); + bs.Write(m_PlayerInfo); + bs.Write(m_Slot); + bs.Write(m_RoomType); + } + return ms.ToArray(); + } + } + + } +} diff --git a/src/Shared/Network/Packets/GameServer/BattleZone/RoomJoinPacket.cs b/src/Shared/Network/Packets/GameServer/BattleZone/RoomJoinPacket.cs new file mode 100644 index 0000000..ad0faf0 --- /dev/null +++ b/src/Shared/Network/Packets/GameServer/BattleZone/RoomJoinPacket.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Shared.Objects; + +namespace Shared.Network.Packets.GameServer.BattleZone +{ + public class RoomJoinPacket + { + /*{ + unsigned __int16 m_Serial; + unsigned __int16 m_Age; + __unaligned __declspec(align(1)) XiPvpUserInfo m_UserInfo; + __unaligned __declspec(align(1)) XiCarAttr m_CarAttr; + __unaligned __declspec(align(1)) unsigned int m_RoomId; + __unaligned __declspec(align(1)) unsigned int m_RoomLifeId; + __unaligned __declspec(align(1)) XiPlayerInfo m_PlayerInfo; + XiPvpRoomSlot m_Slot; + __int16 m_RoomType;*/ + + + public ushort m_Serial; + public ushort m_Age; + public XiPvpUserInfo m_UserInfo; + public XiCarAttr m_CarAttr; + public uint m_RoomId; + public uint m_RoomLifeId; + public XiPlayerInfo m_PlayerInfo; + public XiPvpRoomSlot m_Slot; + public ushort m_RoomType; + + /*public m_UserInfo() + { + Level = new Level(); + Port = new Port(); + Ip = new Ip(); + + }*/ + + public RoomJoinPacket(Packet packet) + { + m_Serial = packet.Reader.ReadUInt16(); + m_Age = packet.Reader.ReadUInt16(); + m_UserInfo = XiPvpUserInfo.Deserialize(packet.Reader); + m_CarAttr = new XiCarAttr(); + m_RoomId = packet.Reader.ReadUInt32(); + m_RoomLifeId = packet.Reader.ReadUInt32(); + m_PlayerInfo = new XiPlayerInfo(packet.Sender.User.VehicleSerial, packet.Sender.User.ActiveCharacter); + m_Slot = XiPvpRoomSlot.Deserialize(packet.Reader); + m_RoomType = packet.Reader.ReadUInt16(); + + } + + } +} diff --git a/src/Shared/Network/Packets/GameServer/BattleZone/RoomListAnswer.cs b/src/Shared/Network/Packets/GameServer/BattleZone/RoomListAnswer.cs new file mode 100644 index 0000000..52cb594 --- /dev/null +++ b/src/Shared/Network/Packets/GameServer/BattleZone/RoomListAnswer.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.IO; +using Shared.Util; +using Shared.Network.Packets.GameServer; + +namespace Shared.Network.Packets.GameServer.BattleZone +{ + public class RoomListAnswer : OutPacket + { + public uint XiPvpRoomFilter; //m_RoomFilter; + public uint m_Page; + public uint m_PageSize; + + public override Packet CreatePacket() + { + return base.CreatePacket(Packetss.CmdRoomList); + } + + public override int ExpectedSize() => 10; + + public override byte[] GetBytes() + { + using (var ms = new MemoryStream()) + { + using (var bs = new BinaryWriterExt(ms)) + { + + bs.Write(XiPvpRoomFilter); + //bs.Write(m_RoomFilter); + bs.Write(m_Page); + bs.Write(m_PageSize); + + } + return ms.ToArray(); + } + } + + } +} diff --git a/src/Shared/Network/Packets/GameServer/BattleZone/RoomListPacket.cs b/src/Shared/Network/Packets/GameServer/BattleZone/RoomListPacket.cs new file mode 100644 index 0000000..dd37397 --- /dev/null +++ b/src/Shared/Network/Packets/GameServer/BattleZone/RoomListPacket.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shared.Network.Packets.GameServer.BattleZone +{ + public class RoomListPacket + { + public uint XiPvpRoomFilter; //m_RoomFilter; + public uint m_Page; + public uint m_PageSize; + + public RoomListPacket(Packet packet) + { + + XiPvpRoomFilter = packet.Reader.ReadUInt32(); + m_Page = packet.Reader.ReadUInt32(); + m_PageSize = packet.Reader.ReadUInt32(); + + } + /* XiPvpRoomFilter m_RoomFilter; + unsigned int m_Page; + unsigned int m_PageSize;*/ + } +} diff --git a/src/Shared/Network/Packets/GameServer/BattleZone/UnregisterRoomObserverAnswer.cs b/src/Shared/Network/Packets/GameServer/BattleZone/UnregisterRoomObserverAnswer.cs new file mode 100644 index 0000000..c1f9566 --- /dev/null +++ b/src/Shared/Network/Packets/GameServer/BattleZone/UnregisterRoomObserverAnswer.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.IO; +using Shared.Util; +using Shared.Objects; + +namespace Shared.Network.Packets.GameServer.BattleZone +{ + public class UnregisterRoomObserverAnswer : OutPacket + { + + + public override Packet CreatePacket() + { + return base.CreatePacket(Packetss.CmdItemExpireCmd); + } + + public override int ExpectedSize() => 10; + + public override byte[] GetBytes() + { + using (var ms = new MemoryStream()) + { + using (var bs = new BinaryWriterExt(ms)) + { + + + + } + return ms.ToArray(); + } + } + } +} diff --git a/src/Shared/Network/Packets/GameServer/BattleZone/UnregisterRoomObserverPacket.cs b/src/Shared/Network/Packets/GameServer/BattleZone/UnregisterRoomObserverPacket.cs new file mode 100644 index 0000000..f200aae --- /dev/null +++ b/src/Shared/Network/Packets/GameServer/BattleZone/UnregisterRoomObserverPacket.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shared.Network.Packets.GameServer.BattleZone +{ + public class UnregisterRoomObserverPacket + { + + + + public UnregisterRoomObserverPacket(Packet packet) + { + + + + } + + } +} diff --git a/src/Shared/Network/Packets/GameServer/BattleZone/WMNickNameUpdatePacket.cs b/src/Shared/Network/Packets/GameServer/BattleZone/WMNickNameUpdatePacket.cs new file mode 100644 index 0000000..3de88f7 --- /dev/null +++ b/src/Shared/Network/Packets/GameServer/BattleZone/WMNickNameUpdatePacket.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shared.Network.Packets.GameServer.BattleZone +{ + public class WMNickNameUpdatePacket + { + public readonly string WMNickname; + + public WMNickNameUpdatePacket(Packet packet) + { + + WMNickname = packet.Reader.ReadString(); // World Match Nickname + } + + + } +} diff --git a/src/Shared/Objects/XiChant.cs b/src/Shared/Objects/XiChant.cs new file mode 100644 index 0000000..6307278 --- /dev/null +++ b/src/Shared/Objects/XiChant.cs @@ -0,0 +1,22 @@ +using Shared.Util; + + +namespace Shared.Objects +{ + public class XiChant : BinaryWriterExt.ISerializable + { + public uint m_nType; + public uint m_nValue; + public uint m_nEndTime; + + public void Serialize(BinaryWriterExt writer) + { + writer.Write(m_nType); + writer.Write(m_nValue); + writer.Write(m_nEndTime); + + + } + + } +} diff --git a/src/Shared/Objects/XiCsCarInfo.cs b/src/Shared/Objects/XiCsCarInfo.cs new file mode 100644 index 0000000..96fbf97 --- /dev/null +++ b/src/Shared/Objects/XiCsCarInfo.cs @@ -0,0 +1,26 @@ +using Shared.Util; + + +namespace Shared.Objects +{ + public class XiCsCarInfo : BinaryWriterExt.ISerializable + { + public XiStrCarInfo m_CarInfo; + public Vec4 m_CarPos; + public int m_CityId; + public float m_Rating; + public XiVisualItem m_VisualItem; + public float m_fFuelConsume; + + public void Serialize(BinaryWriterExt writer) + { + writer.Write(m_CarInfo); + writer.Write((BinaryWriterExt.ISerializable)m_CarPos); + writer.Write(m_CityId); + writer.Write(m_Rating); + writer.Write(m_VisualItem); + writer.Write(m_fFuelConsume); + } + + } +} diff --git a/src/Shared/Objects/XiCsInstant.cs b/src/Shared/Objects/XiCsInstant.cs new file mode 100644 index 0000000..19eeae2 --- /dev/null +++ b/src/Shared/Objects/XiCsInstant.cs @@ -0,0 +1,26 @@ +using Shared.Util; + + +namespace Shared.Objects +{ + public class XiCsInstant : BinaryWriterExt.ISerializable + { + public XiStrInstant m_pInstant; + public XiStrMyInstant m_MyInstant; + public uint StartTime; + public int CheckCount; + public uint CheckTime; //200 + + public void Serialize(BinaryWriterExt writer) + { + writer.Write((BinaryWriterExt.ISerializable)m_pInstant); + writer.Write(m_MyInstant); + writer.Write(StartTime); + writer.Write(CheckCount); + writer.Write(CheckTime); + + } + + + } +} diff --git a/src/Shared/Objects/XiDBOper.cs b/src/Shared/Objects/XiDBOper.cs new file mode 100644 index 0000000..3fb63e8 --- /dev/null +++ b/src/Shared/Objects/XiDBOper.cs @@ -0,0 +1,15 @@ +using Shared.Util; + +namespace Shared.Objects +{ + public class XiDBOper : BinaryWriterExt.ISerializable + { + public int m_DBOper; + + public void Serialize(BinaryWriterExt writer) + { + writer.Write(m_DBOper); + } + + } +} diff --git a/src/Shared/Objects/XiDayEvent.cs b/src/Shared/Objects/XiDayEvent.cs new file mode 100644 index 0000000..333db57 --- /dev/null +++ b/src/Shared/Objects/XiDayEvent.cs @@ -0,0 +1,29 @@ +using Shared.Util; + + +namespace Shared.Objects +{ + public class XiDayEvent : BinaryWriterExt.ISerializable + { + public int m_DayMissionTodayCnt; + public int m_DayMissionTotalCnt; + public int m_DayMissionEventCnt; + public int m_DayMileageTodayCnt; + public int m_DayMileageTotalCnt; + public int m_DayEventTodayCnt; + public int m_DayEventTotalCnt; + + public void Serialize(BinaryWriterExt writer) + { + writer.Write(m_DayMissionTodayCnt); + writer.Write(m_DayMissionTotalCnt); + writer.Write(m_DayMissionEventCnt); + writer.Write(m_DayMileageTodayCnt); + writer.Write(m_DayMileageTotalCnt); + writer.Write(m_DayEventTodayCnt); + writer.Write(m_DayEventTotalCnt); + + } + + } +} diff --git a/src/Shared/Objects/XiEnChant.cs b/src/Shared/Objects/XiEnChant.cs new file mode 100644 index 0000000..24d2271 --- /dev/null +++ b/src/Shared/Objects/XiEnChant.cs @@ -0,0 +1,18 @@ +using Shared.Util; + +namespace Shared.Objects +{ + public class XiEnChant : BinaryWriterExt.ISerializable + { + public uint m_nType; + public uint m_nValue; + + public void Serialize(BinaryWriterExt writer) + { + writer.Write(m_nType); + writer.Write(m_nValue); + + } + + } +} diff --git a/src/Shared/Objects/XiPvpEventCounter.cs b/src/Shared/Objects/XiPvpEventCounter.cs new file mode 100644 index 0000000..0927248 --- /dev/null +++ b/src/Shared/Objects/XiPvpEventCounter.cs @@ -0,0 +1,41 @@ +using Shared.Util; + + +namespace Shared.Objects +{ + public class XiPvpEventCounter : BinaryWriterExt.ISerializable + { + public ushort nOvervoltage; + public ushort nColWall; + public ushort nColTraffic; + public ushort nColEtc; + public float fBoosterRun; + public float fFirstRun; + public ushort nPoint;//4 + public ushort nItem; + public ushort nReward; //8 + public ushort nRevCombo; + public ushort nAcrobatCombo; + public ushort nDriftCombo; + public ushort nJumpCombo; + + + public void Serialize(BinaryWriterExt writer) + { + writer.Write(nOvervoltage); + writer.Write(nColWall); + writer.Write(nColTraffic); + writer.Write(nColEtc); + writer.Write(fBoosterRun); + writer.Write(fFirstRun); + writer.Write(nPoint); + writer.Write(nItem); + writer.Write(nReward); + writer.Write(nRevCombo); + writer.Write(nAcrobatCombo); + writer.Write(nDriftCombo); + writer.Write(nJumpCombo); + + } + } +} diff --git a/src/Shared/Objects/XiPvpUserInfo.cs b/src/Shared/Objects/XiPvpUserInfo.cs new file mode 100644 index 0000000..1fa551e --- /dev/null +++ b/src/Shared/Objects/XiPvpUserInfo.cs @@ -0,0 +1,27 @@ +using Shared.Util; + +namespace Shared.Objects +{ + public class XiPvpUserInfo : BinaryWriterExt.ISerializable + { + public ushort Level; + public ushort Port; + public uint Ip; + + + public void Serialize(BinaryWriterExt writer) + { + writer.Write(Level); + writer.Write(Port); + writer.Write(Ip); + } + + public static XiPvpUserInfo Deserialize(BinaryReaderExt reader) { + return new XiPvpUserInfo() { + Level = reader.ReadUInt16(), + Port = reader.ReadUInt16(), + Ip = reader.ReadUInt32() + }; + } + } +} diff --git a/src/Shared/Objects/XiRankUnit.cs b/src/Shared/Objects/XiRankUnit.cs new file mode 100644 index 0000000..65b86a5 --- /dev/null +++ b/src/Shared/Objects/XiRankUnit.cs @@ -0,0 +1,20 @@ +using Shared.Util; + + +namespace Shared.Objects +{ + public class XiRankUnit : BinaryWriterExt.ISerializable + { + public uint Time; + public int Rank; + + public void Serialize(BinaryWriterExt writer) + { + writer.Write(Time); + writer.Write(Rank); + + + } + + } +} diff --git a/src/Shared/Objects/XiServerConfig.cs b/src/Shared/Objects/XiServerConfig.cs new file mode 100644 index 0000000..865938c --- /dev/null +++ b/src/Shared/Objects/XiServerConfig.cs @@ -0,0 +1,43 @@ +using Shared.Util; + + +namespace Shared.Objects +{ + public class XiServerConfig : BinaryWriterExt.ISerializable + { + public int Auth2Pass; + public int CBattleDay; + public int CBattleHour; + public int DormantEvent; + public int LevelMitoEvent; + public int CBUserEvent; + public int MitoDrinkBonus; + public int SpeedHackThreshold; + public int DisconnectHack; + public int WarnHack; + public int MaxMainCh; + public int MaxAllCh; + public int InviteFriendEvent; + public int CoinCashExpireTime; + + public void Serialize(BinaryWriterExt writer) + { + writer.Write(Auth2Pass); + writer.Write(CBattleDay); + writer.Write(CBattleHour); + writer.Write(DormantEvent); + writer.Write(LevelMitoEvent); + writer.Write(CBUserEvent); + writer.Write(MitoDrinkBonus); + writer.Write(SpeedHackThreshold); + writer.Write(DisconnectHack); + writer.Write(WarnHack); + writer.Write(MaxMainCh); + writer.Write(MaxAllCh); + writer.Write(InviteFriendEvent); + writer.Write(CoinCashExpireTime); + + } + + } +} diff --git a/src/Shared/Objects/XiSticker.cs b/src/Shared/Objects/XiSticker.cs new file mode 100644 index 0000000..4ad5375 --- /dev/null +++ b/src/Shared/Objects/XiSticker.cs @@ -0,0 +1,32 @@ +using Shared.Util; + + +namespace Shared.Objects +{ + public class XiSticker : BinaryWriterExt.ISerializable + { + public long stickerId; + public uint color; + public ushort posX; + public ushort posY; + public ushort scaleX; + public ushort scaleY; + public ushort rotate; + public char part; + public char flip; + + public void Serialize(BinaryWriterExt writer) + { + writer.Write(stickerId); + writer.Write(color); + writer.Write(posX); + writer.Write(posY); + writer.Write(scaleX); + writer.Write(scaleY); + writer.Write(rotate); + writer.Write(part); + writer.Write(flip); + } + + } +} diff --git a/src/Shared/Objects/XiStrCarUnit.cs b/src/Shared/Objects/XiStrCarUnit.cs new file mode 100644 index 0000000..b0776f2 --- /dev/null +++ b/src/Shared/Objects/XiStrCarUnit.cs @@ -0,0 +1,49 @@ +using Shared.Util; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shared.Objects +{ + public class XiStrCarUnit : BinaryWriterExt.ISerializable + { + public uint CarID; + public uint CarType; + public uint BaseColor; + public uint Grade; + public uint SlotType; + public uint AuctionCnt; + public float Mitron; + public float Kmh; + + public void Serialize(BinaryWriterExt writer) + { + writer.Write(CarID); + writer.Write(CarType); + writer.Write(BaseColor); + writer.Write(Grade); + writer.Write(SlotType); + writer.Write(AuctionCnt); + writer.Write(Mitron); + writer.Write(Kmh); + } + + public static XiStrCarUnit Deserialize(BinaryReaderExt reader) + { + return new XiStrCarUnit() + { + CarID = reader.ReadUInt32(), + CarType = reader.ReadUInt32(), + BaseColor = reader.ReadUInt32(), + Grade = reader.ReadUInt32(), + SlotType = reader.ReadUInt32(), + AuctionCnt = reader.ReadUInt32(), + Mitron = reader.ReadInt32(), + Kmh = reader.ReadInt32() + }; + } + + } +} diff --git a/src/Shared/Objects/XiStrCharInfo.cs b/src/Shared/Objects/XiStrCharInfo.cs new file mode 100644 index 0000000..80e1319 --- /dev/null +++ b/src/Shared/Objects/XiStrCharInfo.cs @@ -0,0 +1,149 @@ +using Shared.Util; +using Shared.Objects; + +namespace Shared.Objects +{ + public class XiStrCharInfo : BinaryWriterExt.ISerializable + { + public enum FlagType { + Beginner_Tutorial = 0x8000000, + Battle_Tutorial = 0x4000000, + } + + public enum POSITION_STATE { + FIRST_POS = 0x0, + NOTSAVED_POS = 0x1, + HOUSESAVED_POS = 0x2, + BASE_SAVED_POS = 0x3 + } + + public long Cid; + // This is actually an insance of an XiStrCharName but eh + public string Name; // Length: 21 + public int LastDate; + public ushort Avatar; + public ushort Level; + public XiStrExpInfo ExpInfo; + public long MitoMoney; + public long TeamId; + public long TeamMarkId; + public string TeamName; // wchar_t* of length 13 + public int TeamRank; + + #region PVP Data + public char PType; + public uint PvpCnt; + public uint PvpWinCnt; + public uint PvpPoint; + public uint TPvpCnt; + public uint TPvpWinCnt; + public uint TPvpPoint; + public uint QuickCnt; + #endregion + + public float TotalDistance; + public float[] m_Position; // Note: X, Y, Z, Rotation + public int m_LastChannel; + public int m_City; + public POSITION_STATE m_PosState; + public int CurCarId; + public uint QuickSlot1; + public uint QuickSlot2; + public int TeamJoinDate; + public int TeamCloseDate; + public int TeamLeaveDate; + public int HancoinInven; + public int HancoinGarage; + + public FlagType Flags; + public int Guild; + public long Mileage; + + public void Serialize(BinaryWriterExt writer) + { + writer.Write(Cid); + writer.WriteUnicodeStatic(Name, 21, true); // TODO: Figure this out (null termination or not) + writer.Write(LastDate); + writer.Write(Avatar); + writer.Write(Level); + ExpInfo.Serialize(writer); + writer.Write(MitoMoney); + writer.Write(TeamId); + writer.Write(TeamMarkId); + writer.WriteUnicodeStatic(TeamName, 13, true); // TODO: Figure this out (null termination or not) + writer.Write(TeamRank); + writer.Write(PType); + writer.Write(PvpCnt); + writer.Write(PvpWinCnt); + writer.Write(PvpPoint); + writer.Write(TPvpCnt); + writer.Write(TPvpWinCnt); + writer.Write(TPvpPoint); + writer.Write(QuickCnt); + writer.Write(TotalDistance); + for (int i = 0; i < m_Position.Length; i++) { + writer.Write(m_Position[i]); + } + writer.Write(m_LastChannel); + writer.Write(m_City); + writer.Write((int)m_PosState); + writer.Write(CurCarId); + writer.Write(QuickSlot1); + writer.Write(QuickSlot2); + writer.Write(TeamJoinDate); + writer.Write(TeamCloseDate); + writer.Write(TeamLeaveDate); + writer.Write(HancoinInven); + writer.Write(HancoinGarage); + writer.Write((int)Flags); + writer.Write(Guild); + writer.Write(Mileage); + } + + public static XiStrCharInfo Deserialize(BinaryReaderExt reader) + { + return new XiStrCharInfo() { + Cid = reader.ReadInt64(), + Name = reader.ReadUnicodeStatic(21), + LastDate = reader.ReadInt32(), + Avatar = reader.ReadUInt16(), + Level = reader.ReadUInt16(), + ExpInfo = XiStrExpInfo.Deserialize(reader), + MitoMoney = reader.ReadInt64(), + TeamId = reader.ReadInt64(), + TeamMarkId = reader.ReadInt64(), + TeamName = reader.ReadUnicodeStatic(13), + TeamRank = reader.ReadInt32(), + PType = reader.ReadChar(), + PvpCnt = reader.ReadUInt32(), + PvpWinCnt = reader.ReadUInt32(), + PvpPoint = reader.ReadUInt32(), + TPvpCnt = reader.ReadUInt32(), + TPvpWinCnt = reader.ReadUInt32(), + TPvpPoint = reader.ReadUInt32(), + QuickCnt = reader.ReadUInt32(), + TotalDistance = reader.ReadSingle(), + m_Position = new float[] { + reader.ReadSingle(), // X + reader.ReadSingle(), // Y + reader.ReadSingle(), // Z + reader.ReadSingle() // Rotation + }, + m_LastChannel = reader.ReadInt32(), + m_City = reader.ReadInt32(), + m_PosState = (POSITION_STATE)reader.ReadInt32(), + CurCarId = reader.ReadInt32(), + QuickSlot1 = reader.ReadUInt32(), + QuickSlot2 = reader.ReadUInt32(), + TeamJoinDate = reader.ReadInt32(), + TeamCloseDate = reader.ReadInt32(), + TeamLeaveDate = reader.ReadInt32(), + HancoinInven = reader.ReadInt32(), + HancoinGarage = reader.ReadInt32(), + Flags = (FlagType)reader.ReadInt32(), + Guild = reader.ReadInt32(), + Mileage = reader.ReadInt64() + }; + } + } +} diff --git a/src/Shared/Objects/XiStrCoupon.cs b/src/Shared/Objects/XiStrCoupon.cs new file mode 100644 index 0000000..3213b20 --- /dev/null +++ b/src/Shared/Objects/XiStrCoupon.cs @@ -0,0 +1,20 @@ +using Shared.Util; + + +namespace Shared.Objects +{ + public class XiStrCoupon : BinaryWriterExt.ISerializable + { + public int Type; + public uint StampIdx; + public uint State; + + public void Serialize(BinaryWriterExt writer) + { + writer.Write(Type); + writer.Write(StampIdx); + writer.Write(State); + } + + } +} diff --git a/src/Shared/Objects/XiStrExpInfo.cs b/src/Shared/Objects/XiStrExpInfo.cs new file mode 100644 index 0000000..436ab1c --- /dev/null +++ b/src/Shared/Objects/XiStrExpInfo.cs @@ -0,0 +1,25 @@ +using Shared.Util; + + +namespace Shared.Objects { + + public class XiStrExpInfo : BinaryWriterExt.ISerializable { + public uint CurExp; + public uint NextExp; + public uint BaseExp; + + public void Serialize(BinaryWriterExt writer) { + writer.Write(CurExp); + writer.Write(NextExp); + writer.Write(BaseExp); + } + + public static XiStrExpInfo Deserialize(BinaryReaderExt reader) { + return new XiStrExpInfo() { + CurExp = reader.ReadUInt32(), + NextExp = reader.ReadUInt32(), + BaseExp = reader.ReadUInt32() + }; + } + } +} diff --git a/src/Shared/Objects/XiStrFriend.cs b/src/Shared/Objects/XiStrFriend.cs new file mode 100644 index 0000000..f8198ca --- /dev/null +++ b/src/Shared/Objects/XiStrFriend.cs @@ -0,0 +1,34 @@ +using Shared.Util; + + +namespace Shared.Objects +{ + public class XiStrFriend : BinaryWriterExt.ISerializable + { + public XiStrCharName CharName; + public XiStrTeamName TeamName; + public long Cid; + public long TeamId; + public long TeamMarkId; + public int State; + public XiStrLocation Location; + public ushort Level; + public ushort CurCarGrade; + public uint Serial; + + public void Serialize(BinaryWriterExt writer) + { + writer.Write((BinaryWriterExt.ISerializable)CharName); + writer.Write(TeamName); + writer.Write(Cid); + writer.Write(TeamId); + writer.Write(TeamMarkId); + writer.Write(State); + writer.Write(Location); + writer.Write(Level); + writer.Write(CurCarGrade); + writer.Write(Serial); + } + + } +} diff --git a/src/Shared/Objects/XiStrGiftMsg.cs b/src/Shared/Objects/XiStrGiftMsg.cs new file mode 100644 index 0000000..6de4777 --- /dev/null +++ b/src/Shared/Objects/XiStrGiftMsg.cs @@ -0,0 +1,17 @@ +using Shared.Util; + + +namespace Shared.Objects +{ + public class XiStrGiftMsg : BinaryWriterExt.ISerializable + { + public string m_Msg;//50 + + public void Serialize(BinaryWriterExt writer) + { + writer.Write(m_Msg); + + + } + } +} diff --git a/src/Shared/Objects/XiStrInstant.cs b/src/Shared/Objects/XiStrInstant.cs new file mode 100644 index 0000000..15de5c9 --- /dev/null +++ b/src/Shared/Objects/XiStrInstant.cs @@ -0,0 +1,54 @@ +using Shared.Util; + + +namespace Shared.Objects +{ + public class XiStrInstant : BinaryWriterExt.ISerializable + { + public uint nID; + public uint nMinLevel; + public uint nMaxLevel; + public string Summary; //256 + public string Dialog; //2048 + public bool bRepeat; + public float Percent; + public int Category; + public int Type; + public uint Value; + public XiStrItem MissionItemPtr; + public int RewardExp; + public int RewardMoney; + public string RewardItemGroup; //56 + public int FinalExp; + public int MaxPost; + public XiStrIcon GivePostPtr; + public XiStrIcon MovePostPtr; //200 + //public ItemGroup ItemGroupPtr; TODO need to create the object + + + public void Serialize(BinaryWriterExt writer) + { + writer.Write(nID); + writer.Write(nMinLevel); + writer.Write(nMaxLevel); + writer.Write(Summary); + writer.Write(Dialog); + writer.Write(bRepeat); + writer.Write(Percent); + writer.Write(Category); + writer.Write(Type); + writer.Write(Value); + writer.Write((BinaryWriterExt.ISerializable)MissionItemPtr); + writer.Write(RewardExp); + writer.Write(RewardMoney); + writer.Write(RewardItemGroup); + writer.Write(FinalExp); + writer.Write(MaxPost); + writer.Write((BinaryWriterExt.ISerializable)GivePostPtr); + writer.Write((BinaryWriterExt.ISerializable)MovePostPtr); + //writer.Write(ItemGroupPtr); TODO + + + } + } +} diff --git a/src/Shared/Objects/XiStrItemUnit.cs b/src/Shared/Objects/XiStrItemUnit.cs new file mode 100644 index 0000000..157a583 --- /dev/null +++ b/src/Shared/Objects/XiStrItemUnit.cs @@ -0,0 +1,52 @@ +using Shared.Util; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shared.Objects +{ + public class XiStrItemUnit : BinaryWriterExt.ISerializable + { + public int StackNum; + public int Random; + public uint AssistA; + public uint AssistB; + public uint AssistC; + public uint AssistD; + public uint AssistE; + public uint AssistF; + public uint AssistG; + public uint AssistH; + public uint AssistI; + public uint AssistJ; + public uint Box; + public uint Belonging; + public int Upgrade; + public int UpgradePoint; + public uint ExpireTick; + + public void Serialize(BinaryWriterExt writer) + { + writer.Write(StackNum); + writer.Write(Random); + writer.Write(AssistA); + writer.Write(AssistB); + writer.Write(AssistC); + writer.Write(AssistD); + writer.Write(AssistE); + writer.Write(AssistF); + writer.Write(AssistG); + writer.Write(AssistH); + writer.Write(AssistI); + writer.Write(AssistJ); + writer.Write(Box); + writer.Write(Belonging); + writer.Write(Upgrade); + writer.Write(UpgradePoint); + writer.Write(ExpireTick); + } + + } +} diff --git a/src/Shared/Objects/XiStrLocation.cs b/src/Shared/Objects/XiStrLocation.cs new file mode 100644 index 0000000..4d88432 --- /dev/null +++ b/src/Shared/Objects/XiStrLocation.cs @@ -0,0 +1,19 @@ +using Shared.Util; + + +namespace Shared.Objects +{ + public class XiStrLocation : BinaryWriterExt.ISerializable + { + public string LocType; + public string ChId; + public ushort LocId; + + public void Serialize(BinaryWriterExt writer) + { + writer.Write(LocType); + writer.Write(ChId); + writer.Write(LocId); + } + } +} diff --git a/src/Shared/Objects/XiStrMemberInfo.cs b/src/Shared/Objects/XiStrMemberInfo.cs new file mode 100644 index 0000000..5491c2a --- /dev/null +++ b/src/Shared/Objects/XiStrMemberInfo.cs @@ -0,0 +1,18 @@ +using Shared.Util; + + +namespace Shared.Objects +{ + public class XiStrMemberInfo : BinaryWriterExt.ISerializable + { + public XiStrCharInfo CharInfo; + public XiCarAttr CarAttr; + + public void Serialize(BinaryWriterExt writer) + { + writer.Write((BinaryWriterExt.ISerializable)CharInfo); + writer.Write((BinaryWriterExt.ISerializable)CarAttr); + + } + } +} diff --git a/src/Shared/Objects/XiStrMyArbeit.cs b/src/Shared/Objects/XiStrMyArbeit.cs new file mode 100644 index 0000000..800d765 --- /dev/null +++ b/src/Shared/Objects/XiStrMyArbeit.cs @@ -0,0 +1,22 @@ +using Shared.Util; + + +namespace Shared.Objects +{ + public class XiStrMyArbeit : BinaryWriterExt.ISerializable + { + public uint TableIdx; + public uint Serial; + public uint CompleteNum; + public bool CheckPoint; //20??? unsure about this + + public void Serialize(BinaryWriterExt writer) + { + writer.Write(TableIdx); + writer.Write(Serial); + writer.Write(CompleteNum); + writer.Write(CheckPoint); + + } + } +} diff --git a/src/Shared/Objects/XiStrMyInstant.cs b/src/Shared/Objects/XiStrMyInstant.cs new file mode 100644 index 0000000..465763a --- /dev/null +++ b/src/Shared/Objects/XiStrMyInstant.cs @@ -0,0 +1,19 @@ +using Shared.Util; + + +namespace Shared.Objects +{ + public class XiStrMyInstant : BinaryWriterExt.ISerializable + { + public uint TableIdx; + public bool CheckPoint; //200 again unsure about bool 200 + + public void Serialize(BinaryWriterExt writer) + { + writer.Write(TableIdx); + writer.Write(CheckPoint); + + } + + } +} diff --git a/src/Shared/Objects/XiStrMyItem.cs b/src/Shared/Objects/XiStrMyItem.cs new file mode 100644 index 0000000..b41a8e1 --- /dev/null +++ b/src/Shared/Objects/XiStrMyItem.cs @@ -0,0 +1,25 @@ +using Shared.Util; + + +namespace Shared.Objects +{ + public class XiStrMyItem : BinaryWriterExt.ISerializable + { + public uint CarID; + //$90E2572CC35A071924DAD0BC1A98978B Itm;//TODO + XiStrItemUnit ItemUnit; + public uint TableIdx; + public uint InvenIdx; + + public void Serialize(BinaryWriterExt writer) + { + writer.Write(CarID); + // writer.Write(Itm); TODO + writer.Write(ItemUnit); + writer.Write(TableIdx); + writer.Write(InvenIdx); + + } + + } +} diff --git a/src/Shared/Objects/XiStrMyQuest.cs b/src/Shared/Objects/XiStrMyQuest.cs new file mode 100644 index 0000000..52c28c1 --- /dev/null +++ b/src/Shared/Objects/XiStrMyQuest.cs @@ -0,0 +1,34 @@ +using Shared.Util; + + +namespace Shared.Objects +{ + public class XiStrMyQuest + { + + public uint TableIdx; + public uint State; + public uint PlaceIdx; + public ushort FailNum; + + public void Serialize(BinaryWriterExt writer) + { + writer.Write(TableIdx); + writer.Write(State); + writer.Write(PlaceIdx); + writer.Write(FailNum); + } + + public static XiStrMyQuest Deserialize(BinaryReaderExt reader) + { + return new XiStrMyQuest() + { + TableIdx = reader.ReadUInt32(), + State = reader.ReadUInt32(), + PlaceIdx = reader.ReadUInt32(), + FailNum = reader.ReadUInt16() + }; + } + + } +} diff --git a/src/Shared/Objects/XiStrMySTItem.cs b/src/Shared/Objects/XiStrMySTItem.cs new file mode 100644 index 0000000..39ebce7 --- /dev/null +++ b/src/Shared/Objects/XiStrMySTItem.cs @@ -0,0 +1,22 @@ +using Shared.Util; + + +namespace Shared.Objects +{ + public class XiStrMySTItem : BinaryWriterExt.ISerializable + { + public uint CarID; + public uint InvenIdx; + public string StickerName;//32 + public XiSticker ItemUnit; + + public void Serialize(BinaryWriterExt writer) + { + writer.Write(CarID); + writer.Write(InvenIdx); + writer.Write(StickerName); + writer.Write(ItemUnit); + + } + } +} diff --git a/src/Shared/Objects/XiStrMyVSItem.cs b/src/Shared/Objects/XiStrMyVSItem.cs new file mode 100644 index 0000000..cd05fdc --- /dev/null +++ b/src/Shared/Objects/XiStrMyVSItem.cs @@ -0,0 +1,31 @@ +using Shared.Util; + + +namespace Shared.Objects +{ + public class XiStrMyVSItem : BinaryWriterExt.ISerializable + { + public uint CarID; + public int ItemState; + public uint TableIdx; + public uint InvenIdx; + XiStrPlateName PlateName; + public int Period; + public int UpdateTime; + public int CreateTime; + + + public void Serialize(BinaryWriterExt writer) + { + writer.Write(CarID); + writer.Write(ItemState); + writer.Write(TableIdx); + writer.Write(InvenIdx); + writer.Write(PlateName); + writer.Write(Period); + writer.Write(UpdateTime); + writer.Write(CreateTime); + } + + } +} diff --git a/src/Shared/Objects/XiStrPlateName.cs b/src/Shared/Objects/XiStrPlateName.cs new file mode 100644 index 0000000..c13b13b --- /dev/null +++ b/src/Shared/Objects/XiStrPlateName.cs @@ -0,0 +1,17 @@ +using Shared.Util; + + +namespace Shared.Objects +{ + public class XiStrPlateName : BinaryWriterExt.ISerializable + { + public string m_Name; //10 + + public void Serialize(BinaryWriterExt writer) + { + writer.Write(m_Name); + + } + + } +} diff --git a/src/Shared/Objects/XiStrTeamInfo.cs b/src/Shared/Objects/XiStrTeamInfo.cs new file mode 100644 index 0000000..466c8df --- /dev/null +++ b/src/Shared/Objects/XiStrTeamInfo.cs @@ -0,0 +1,57 @@ +using Shared.Util; + + +namespace Shared.Objects +{ + public class XiStrTeamInfo + { + public long TeamId; + public long TeamMarkId; + public string TeamName;// wchar_t 13 + public string TeamDesc;//wchar_t 61 + public char TeamUrl;//char 33 + public uint CreateDate; + public uint CloseDate; + public uint BanishDate; + public char OwnChannel;//24 + public char TeamState;//2 + public uint TeamRanking; + public uint TeamPoint; + public uint ChannelWinCnt; + public uint MemberCnt; + public long TeamTotalExp; + public long TeamTotalMoney; + public uint Version; + public long OwnerId; + public long LeaderId; + XiStrCharName OwnerName; + XiStrCharName LeaderName; + + public void Serialize(BinaryWriterExt writer) + { + writer.Write(TeamId); + writer.Write(TeamMarkId); + writer.Write(TeamName); + writer.Write(TeamDesc); + writer.Write(TeamUrl); + writer.Write(CreateDate); + writer.Write(CloseDate); + writer.Write(BanishDate); + writer.Write(OwnChannel); + writer.Write(TeamState); + writer.Write(TeamRanking); + writer.Write(TeamPoint); + writer.Write(ChannelWinCnt); + writer.Write(MemberCnt); + writer.Write(TeamTotalExp); + writer.Write(TeamTotalMoney); + writer.Write(Version); + writer.Write(OwnerId); + writer.Write(LeaderId); + writer.Write((BinaryWriterExt.ISerializable)OwnerName); + writer.Write((BinaryWriterExt.ISerializable)LeaderName); + } + + + } +} diff --git a/src/Shared/Objects/XiStrTeamName.cs b/src/Shared/Objects/XiStrTeamName.cs new file mode 100644 index 0000000..39aa57b --- /dev/null +++ b/src/Shared/Objects/XiStrTeamName.cs @@ -0,0 +1,17 @@ +using Shared.Util; + + +namespace Shared.Objects +{ + public class XiStrTeamName : BinaryWriterExt.ISerializable + { + public string m_Name;//13 + + public void Serialize(BinaryWriterExt writer) + { + writer.Write(m_Name); + + + } + } +} diff --git a/src/Shared/Objects/XiStrUserInfo.cs b/src/Shared/Objects/XiStrUserInfo.cs new file mode 100644 index 0000000..3653843 --- /dev/null +++ b/src/Shared/Objects/XiStrUserInfo.cs @@ -0,0 +1,28 @@ +using Shared.Util; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shared.Objects +{ + public class XiStrUserInfo : BinaryWriterExt.ISerializable + { + public XiStrUserPermission Permission; + public uint LastPlayTime; + public uint TotalPlayTime; + public XiStrCharName LastChar; + + public void Serialize(BinaryWriterExt writer) + { + writer.Write(Permission); + writer.Write(LastPlayTime); + writer.Write(TotalPlayTime); + writer.Write((BinaryWriterExt.ISerializable)LastChar); + + + } + + } +} diff --git a/src/Shared/Objects/XiStrUserPermission.cs b/src/Shared/Objects/XiStrUserPermission.cs new file mode 100644 index 0000000..c4f3acc --- /dev/null +++ b/src/Shared/Objects/XiStrUserPermission.cs @@ -0,0 +1,17 @@ +using Shared.Util; + + +namespace Shared.Objects +{ + public class XiStrUserPermission : BinaryWriterExt.ISerializable + { + public uint m_Flag; + + public void Serialize(BinaryWriterExt writer) + { + writer.Write(m_Flag); + + } + + } +} diff --git a/src/Shared/Objects/XiStrVisualItemBuyUnit.cs b/src/Shared/Objects/XiStrVisualItemBuyUnit.cs new file mode 100644 index 0000000..2940933 --- /dev/null +++ b/src/Shared/Objects/XiStrVisualItemBuyUnit.cs @@ -0,0 +1,43 @@ +using Shared.Util; + + +namespace Shared.Objects +{ + public class XiStrVisualItemBuyUnit : BinaryWriterExt.ISerializable + { + public long Gid; + public uint TableIdx; + public uint BuyTime; + public uint UseTime; + public uint GetType; + public uint GoldType; + public int Period; + public uint Hancoin; + public uint Mito; + public uint Mileage; + public int State; + public XiStrCharName DstName; + public XiStrPlateName Data; + public XiStrGiftMsg GiftMsg; + + public void Serialize(BinaryWriterExt writer) + { + writer.Write(Gid); + writer.Write(TableIdx); + writer.Write(BuyTime); + writer.Write(UseTime); + writer.Write(GetType); + writer.Write(GoldType); + writer.Write(Period); + writer.Write(Hancoin); + writer.Write(Mito); + writer.Write(Mileage); + writer.Write(State); + writer.Write((BinaryWriterExt.ISerializable)DstName); + writer.Write(Data); + writer.Write(GiftMsg); + + } + + } +} diff --git a/src/Shared/Shared.csproj b/src/Shared/Shared.csproj index db664f1..9a6c021 100644 --- a/src/Shared/Shared.csproj +++ b/src/Shared/Shared.csproj @@ -4,13 +4,14 @@ Debug AnyCPU - {ffea87f0-8aa3-43b8-8914-78b6d5d6fb67} + {FFEA87F0-8AA3-43B8-8914-78B6D5D6FB67} Library Properties Shared Shared - v4.6 + v4.8 512 + true @@ -40,18 +41,57 @@ true - - ..\packages\MySql.Data.6.9.9\lib\net45\MySql.Data.dll + + ..\packages\BouncyCastle.1.8.9\lib\BouncyCastle.Crypto.dll + + + ..\packages\Google.Protobuf.3.19.3\lib\net45\Google.Protobuf.dll + + + ..\packages\K4os.Compression.LZ4.1.2.16\lib\net46\K4os.Compression.LZ4.dll + + + ..\packages\K4os.Compression.LZ4.Streams.1.2.16\lib\net46\K4os.Compression.LZ4.Streams.dll + + + ..\packages\K4os.Hash.xxHash.1.0.7\lib\net46\K4os.Hash.xxHash.dll + + + ..\packages\MySql.Data.8.0.27\lib\net48\MySql.Data.dll + + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + + + + + + + + ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll + + + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + + + ..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + + + + ..\packages\MySql.Data.8.0.27\lib\net48\Ubiety.Dns.Core.dll + + + ..\packages\MySql.Data.8.0.27\lib\net48\ZstdNet.dll + diff --git a/src/Shared/app.config b/src/Shared/app.config index 380f4e3..68b10ca 100644 --- a/src/Shared/app.config +++ b/src/Shared/app.config @@ -1,10 +1,29 @@  - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Shared/packages.config b/src/Shared/packages.config index 89549b6..ff0223f 100644 --- a/src/Shared/packages.config +++ b/src/Shared/packages.config @@ -1,4 +1,13 @@  - + + + + + + + + + + \ No newline at end of file diff --git a/src/SharedTests/SharedTests.csproj b/src/SharedTests/SharedTests.csproj index f29fb4b..8faa58e 100644 --- a/src/SharedTests/SharedTests.csproj +++ b/src/SharedTests/SharedTests.csproj @@ -1,5 +1,6 @@  + Debug AnyCPU @@ -8,10 +9,12 @@ Properties SharedTests SharedTests - v4.6 + v4.8 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + true @@ -41,16 +44,55 @@ 4 - - ..\packages\MySql.Data.6.9.9\lib\net45\MySql.Data.dll + + ..\packages\BouncyCastle.1.8.9\lib\BouncyCastle.Crypto.dll - - ..\packages\NUnit.3.6.1\lib\net45\nunit.framework.dll - True + + ..\packages\Google.Protobuf.3.19.3\lib\net45\Google.Protobuf.dll + + + ..\packages\K4os.Compression.LZ4.1.2.16\lib\net46\K4os.Compression.LZ4.dll + + + ..\packages\K4os.Compression.LZ4.Streams.1.2.16\lib\net46\K4os.Compression.LZ4.Streams.dll + + + ..\packages\K4os.Hash.xxHash.1.0.7\lib\net46\K4os.Hash.xxHash.dll + + + + ..\packages\MySql.Data.8.0.27\lib\net48\MySql.Data.dll + + + ..\packages\NUnit.3.13.2\lib\net45\nunit.framework.dll + + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + + + + + + + + ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll + + + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + + + ..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + + + + ..\packages\MySql.Data.8.0.27\lib\net48\Ubiety.Dns.Core.dll + + + ..\packages\MySql.Data.8.0.27\lib\net48\ZstdNet.dll + @@ -448,6 +490,12 @@ + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + +