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}.
+
+
+