From 88c69529fda2eadd5dd8a9f1a112f498f35f3d49 Mon Sep 17 00:00:00 2001 From: rafi1212122 Date: Tue, 30 May 2023 09:37:52 +0700 Subject: [PATCH] okey --- Common/Utils/Misc.cs | 31 +++++++++++++++++++ .../Handlers/ChapterGroupGetDataReqHandler.cs | 17 ++++++++++ GameServer/Handlers/ClientReportReqHandler.cs | 19 ++++++++++++ GameServer/Handlers/GetAuthkeyReqHandler.cs | 24 ++++++++++++++ .../GetBulletinActivityMissionReqHandler.cs | 18 +++++++++++ GameServer/Handlers/GetBulletinReqHandler.cs | 13 ++++++++ GameServer/Handlers/GetConfigReqHandler.cs | 14 ++++++--- .../Handlers/GetCustomHeadDataReqHandler.cs | 16 ++++++++++ GameServer/Handlers/GetFrameDataReqHandler.cs | 16 ++++++++++ .../GetGalInteractTriggerEventReqHandler.cs | 23 ++++++++++++++ .../Handlers/GetLoginActivityReqHandler.cs | 2 +- GameServer/Handlers/GetMainDataReqHandler.cs | 4 +-- GameServer/Handlers/GetShopListReqHandler.cs | 13 ++++++++ .../Handlers/GetWorldMapDataReqHandler.cs | 17 ++++++++++ GameServer/Handlers/StageEndReqHandler.cs | 2 +- GameServer/Handlers/SyncTimeReqHandler.cs | 21 +++++++++++++ GameServer/Session.cs | 2 ++ 17 files changed, 243 insertions(+), 9 deletions(-) create mode 100644 Common/Utils/Misc.cs create mode 100644 GameServer/Handlers/ChapterGroupGetDataReqHandler.cs create mode 100644 GameServer/Handlers/ClientReportReqHandler.cs create mode 100644 GameServer/Handlers/GetAuthkeyReqHandler.cs create mode 100644 GameServer/Handlers/GetBulletinActivityMissionReqHandler.cs create mode 100644 GameServer/Handlers/GetBulletinReqHandler.cs create mode 100644 GameServer/Handlers/GetCustomHeadDataReqHandler.cs create mode 100644 GameServer/Handlers/GetFrameDataReqHandler.cs create mode 100644 GameServer/Handlers/GetGalInteractTriggerEventReqHandler.cs create mode 100644 GameServer/Handlers/GetShopListReqHandler.cs create mode 100644 GameServer/Handlers/GetWorldMapDataReqHandler.cs create mode 100644 GameServer/Handlers/SyncTimeReqHandler.cs diff --git a/Common/Utils/Misc.cs b/Common/Utils/Misc.cs new file mode 100644 index 0000000..3b9bca5 --- /dev/null +++ b/Common/Utils/Misc.cs @@ -0,0 +1,31 @@ +namespace Common.Utils +{ + public static class Misc + { + public static byte[] StringToByteArray(string hex) + { + if (hex.Length % 2 == 1) + throw new Exception("The binary key cannot have an odd number of digits"); + + byte[] arr = new byte[hex.Length >> 1]; + + for (int i = 0; i < hex.Length >> 1; ++i) + { + arr[i] = (byte)((GetHexVal(hex[i << 1]) << 4) + (GetHexVal(hex[(i << 1) + 1]))); + } + + return arr; + } + + public static int GetHexVal(char hex) + { + int val = (int)hex; + //For uppercase A-F letters: + //return val - (val < 58 ? 48 : 55); + //For lowercase a-f letters: + //return val - (val < 58 ? 48 : 87); + //Or the two combined, but a bit slower: + return val - (val < 58 ? 48 : (val < 97 ? 55 : 87)); + } + } +} diff --git a/GameServer/Handlers/ChapterGroupGetDataReqHandler.cs b/GameServer/Handlers/ChapterGroupGetDataReqHandler.cs new file mode 100644 index 0000000..6c50c4c --- /dev/null +++ b/GameServer/Handlers/ChapterGroupGetDataReqHandler.cs @@ -0,0 +1,17 @@ +using Common.Resources.Proto; +using Common.Utils; +using ProtoBuf; + +namespace PemukulPaku.GameServer.Handlers +{ + [PacketCmdId(CmdId.ChapterGroupGetDataReq)] + internal class ChapterGroupGetDataReqHandler : IPacketHandler + { + public void Handle(Session session, Packet packet) + { + MemoryStream ms = new(Misc.StringToByteArray("08001212080112060801100118031206080210021803122208021206080310031803120608041004180312060805100518031206080610061803122a08031206080710071803120608081008180312060809100918031206080a100a18031206080b100b1803122208041206080c100c18031206080d100d18031206080e100e18031206080f100f18031212080512060810101018031206081110111803121a08061206081210121803120608131013180312060814101418031212080712060815101518031206081610161803121a0808120608171017180312060818101818031206081910191803121a08091206081a101a18031206081b101b18031206081c101c18031212080a1206081d101d18031206081e101e1802120a080b1206081f101f1802121a080c1206082010201803120608211021180312060822102218021212080d120608241024180312060825102518021801")); + ChapterGroupGetDataRsp Rsp = Serializer.Deserialize(ms); + session.Send(Packet.FromProto(Rsp, CmdId.ChapterGroupGetDataRsp)); + } + } +} diff --git a/GameServer/Handlers/ClientReportReqHandler.cs b/GameServer/Handlers/ClientReportReqHandler.cs new file mode 100644 index 0000000..a8ea4a0 --- /dev/null +++ b/GameServer/Handlers/ClientReportReqHandler.cs @@ -0,0 +1,19 @@ +using Common; +using Common.Resources.Proto; + +namespace PemukulPaku.GameServer.Handlers +{ + [PacketCmdId(CmdId.ClientReportReq)] + internal class ClientReportReqHandler : IPacketHandler + { + public void Handle(Session session, Packet packet) + { + ClientReportReq Data = packet.GetDecodedBody(); + + if((int)Global.config.VerboseLevel > 0) + session.c.Warn($"ClientReport | {Data.ReportType} = {Data.ReportValue}"); + + session.Send(Packet.FromProto(new ClientReportRsp() { retcode = ClientReportRsp.Retcode.Succ }, CmdId.ClientReportRsp)); + } + } +} diff --git a/GameServer/Handlers/GetAuthkeyReqHandler.cs b/GameServer/Handlers/GetAuthkeyReqHandler.cs new file mode 100644 index 0000000..3525466 --- /dev/null +++ b/GameServer/Handlers/GetAuthkeyReqHandler.cs @@ -0,0 +1,24 @@ +using Common.Resources.Proto; + +namespace PemukulPaku.GameServer.Handlers +{ + [PacketCmdId(CmdId.GetAuthkeyReq)] + internal class GetAuthkeyReqHandler : IPacketHandler + { + public void Handle(Session session, Packet packet) + { + GetAuthkeyReq Data = packet.GetDecodedBody(); + + GetAuthkeyRsp Rsp = new() + { + retcode = GetAuthkeyRsp.Retcode.Succ, + AuthAppid = Data.AuthAppid, + Authkey = "0", + SignType = 2, + AuthkeyVer = 1 + }; + + session.Send(Packet.FromProto(Rsp, CmdId.GetAuthkeyRsp)); + } + } +} diff --git a/GameServer/Handlers/GetBulletinActivityMissionReqHandler.cs b/GameServer/Handlers/GetBulletinActivityMissionReqHandler.cs new file mode 100644 index 0000000..6f53db1 --- /dev/null +++ b/GameServer/Handlers/GetBulletinActivityMissionReqHandler.cs @@ -0,0 +1,18 @@ +using Common.Resources.Proto; + +namespace PemukulPaku.GameServer.Handlers +{ + [PacketCmdId(CmdId.GetBulletinActivityMissionReq)] + internal class GetBulletinActivityMissionReqHandler : IPacketHandler + { + public void Handle(Session session, Packet packet) + { + GetBulletinActivityMissionReq Data = packet.GetDecodedBody(); + + GetBulletinActivityMissionRsp Rsp = new() { retcode = GetBulletinActivityMissionRsp.Retcode.Succ }; + Rsp.MissionGroupLists.AddRange(Data.ActivityIdLists.Select(activityId => new BulletinMissionGroup() { ActivityId = activityId }).ToList()); + + session.Send(Packet.FromProto(Rsp, CmdId.GetBulletinActivityMissionRsp)); + } + } +} diff --git a/GameServer/Handlers/GetBulletinReqHandler.cs b/GameServer/Handlers/GetBulletinReqHandler.cs new file mode 100644 index 0000000..88f7b82 --- /dev/null +++ b/GameServer/Handlers/GetBulletinReqHandler.cs @@ -0,0 +1,13 @@ +using Common.Resources.Proto; + +namespace PemukulPaku.GameServer.Handlers +{ + [PacketCmdId(CmdId.GetBulletinReq)] + internal class GetBulletinReqHandler : IPacketHandler + { + public void Handle(Session session, Packet packet) + { + session.Send(Packet.FromProto(new GetBulletinRsp() { retcode = GetBulletinRsp.Retcode.Succ, IsAll = true }, CmdId.GetBulletinRsp)); + } + } +} diff --git a/GameServer/Handlers/GetConfigReqHandler.cs b/GameServer/Handlers/GetConfigReqHandler.cs index 6f0dac4..19332c6 100644 --- a/GameServer/Handlers/GetConfigReqHandler.cs +++ b/GameServer/Handlers/GetConfigReqHandler.cs @@ -1,5 +1,7 @@ using Common; using Common.Resources.Proto; +using Common.Utils; +using ProtoBuf; namespace PemukulPaku.GameServer.Handlers { @@ -8,11 +10,13 @@ namespace PemukulPaku.GameServer.Handlers { public void Handle(Session session, Packet packet) { - GetConfigRsp Rsp = new() - { - retcode = GetConfigRsp.Retcode.Succ, - ServerCurTime = (uint)Global.GetUnixInSeconds(), - }; + + MemoryStream ms = new(Misc.StringToByteArray("080010e802203c287830c070389e95a2a306403248940160e8077819fa0105089407100afa010608ce08109802fa010608cf08109802fa010608d008109802fa010508d208103cfa010608d408109802fa010608d508109601fa010608d60810c801fa010608d70810c801fa010508d8081078fa010608db08109802fa010508a7391064fa0105089e3a100afa010508a83d100afa010708fdfa0610c801fa0106089cfb061008fa010608a6fc06100afa01060888fd06100afa01060898fd061008fa010608e7ff06100afa010608ebff061008fa010608818007100afa010608a48307100afa010608a98307100afa010608ba8307100afa010608df83071008fa010608e283071008fa010608ef83071008fa0106089c8b07100afa0106089a9007100afa010608c4a2071008fa010608c9b107100afa010608d1b107100afa010608d2b107100afa010608ceb307100afa010608d2b307100afa01060892d207100afa010608dbde07100afa010608dcde07100afa0106089ce640106482020a6f76657273656173303188021a9a02160802105018c0e494a30620c0bcafa40628c91a28ad1b9a0211080410d80418c0e494a30620c0bcafa406a00278a802a0bfc6fa05b002a0a8d6fa05b80202c802ff93ebdc03d00280cab5ee01e802fa36f00205f80280a3059203bb02089a2210021884e1f8ee052084dddadf0728003818420130480f50636212444c435f426f7867616368615f5469746c656a275370726974654f75747075742f53686f7054616249636f6e732f49636f6e53686f70476163686172416576656e742f496d6d6564696174656c792f4163746976697479506167652f332e35535068756e74696e6767616368615f62616e6e65725f74727565636f6c6f727a00820115332e35535068756e74696e6767616368615f4465738801ce029201386576656e742f496d6d6564696174656c792f4163746976697479506167652f332e35535068756e74696e675f62675f74727565636f6c6f729a01406576656e742f496d6d6564696174656c792f4163746976697479506167652f332e35535068756e74696e6767616368615f7469746c655f74727565636f6c6f72aa010092036608af28102e18a0c9f38e0620bf8bc1bc08280042013048505063620d352e365455504f5f7469746c656a1c5370726974654f75747075742f42502f352e365f5475506f5f54616272007a0082010b352e365455504f5f6465738801bc059201009a0100aa01009203ad0208b72810021880d7fd8e0620bf979ad30728003823420130481950636211352e34646c6367616368615f7469746c656a275370726974654f75747075742f53686f7054616249636f6e732f49636f6e53686f704761636861723d6576656e742f496d6d6564696174656c792f4163746976697479506167652f352e345f444c433267616368615f62616e6e65725f74727565636f6c6f727a0082010f352e34646c6367616368615f446573880182079201396576656e742f496d6d6564696174656c792f4163746976697479506167652f352e345f444c433267616368615f62675f74727565636f6c6f729a013c6576656e742f496d6d6564696174656c792f4163746976697479506167652f352e345f444c433267616368615f7469746c655f74727565636f6c6f72aa010092039102089d2b100318c0b2cca10620bff0a9a30628003839420130480a5063620f352e36425053686f705f5469746c656a2e6576656e742f496d6d6564696174656c792f42502f636f6e73745f53686f7054616230345f74727565636f6c6f72723f6576656e742f496d6d6564696174656c792f42502f53686f702f362e355f362e365f425053686f7042616e6e65725f62616e6e65725f74727565636f6c6f727a008201008801ca0992013b6576656e742f496d6d6564696174656c792f42502f53686f702f362e355f362e365f425053686f7042616e6e65725f62675f74727565636f6c6f729a01215370726974654f75747075742f42502f42505f42616e6e65725f546f756d696e67a00193b93baa01009203ab03089f2b100418c0e494a30620c0bcafa4062800389e86073880a7293881a7293882a7293883a7293884a7293885a7293886a7293887a7293888a7293889a729388aa729388ba729388ca729388da729388ea729388fa7293890a7293891a729420134480950636217362e3653686f7070696e674461797330315f7469746c656a3f6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330315f7461625f74727565636f6c6f7272426576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330315f62616e6e65725f74727565636f6c6f727a00820111362e3653686f7070696e6730315f4465738801d00f92013e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330315f62675f74727565636f6c6f729a01416576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330315f7469746c655f74727565636f6c6f72a001afd207aa01009203e10208a02b100318c0e494a30620c0bcafa40628003816420130481450636217362e3653686f7070696e674461797330325f7469746c656a3f6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330325f7461625f74727565636f6c6f7272426576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330325f62616e6e65725f74727565636f6c6f727a00820111362e3653686f7070696e6730325f4465738801cf0f92013e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330325f62675f74727565636f6c6f729a01416576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330325f7469746c655f74727565636f6c6f72a001afd207aa01009203e10208a12b100318c0e494a30620c0bcafa4062800382d420130481450636217362e3653686f7070696e674461797330335f7469746c656a3f6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330325f7461625f74727565636f6c6f7272426576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330335f62616e6e65725f74727565636f6c6f727a00820111362e3653686f7070696e6730335f4465738801ce0f92013e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330335f62675f74727565636f6c6f729a01416576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330335f7469746c655f74727565636f6c6f72a001b0d207aa01009203df0208a22b101a18c0e494a30620c0bcafa4062800380d420130481450636217362e3653686f7070696e674461797330345f7469746c656a3f6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330345f7461625f74727565636f6c6f7272426576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330345f62616e6e65725f74727565636f6c6f727a00820111362e3653686f7070696e6730345f4465738801cd0f92013e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330345f62675f74727565636f6c6f729a01416576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330345f7469746c655f74727565636f6c6f72a00106aa01009203d00208a42b100418c0d2e5a30620c0bcafa4062800389c8607420134481450636211362e365f573344726573735f5469746c656a386576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573344726573735f5461625f74727565636f6c6f72723b6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573344726573735f42616e6e65725f74727565636f6c6f727a183c747970653d22377c31342220746578743d22474f222f3e82010d362e365f44726573735f4465738801f80a9201376576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573344726573735f42475f74727565636f6c6f729a013a6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573344726573735f5469746c655f74727565636f6c6f72aa01009203d20208a52b100418c0e494a30620bfafe0a3062800389d8607420134481450636211362e365f573144726573735f5469746c656a386576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573144726573735f5461625f74727565636f6c6f72723b6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573144726573735f42616e6e65725f74727565636f6c6f727a183c747970653d22377c31342220746578743d22474f222f3e82010f362e365f573144726573735f4465738801f80a9201376576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573144726573735f42475f74727565636f6c6f729a013a6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573144726573735f5469746c655f74727565636f6c6f72aa01009203dd0208a62b101518c0bcafa40620bfb1d4a406280038848c0638858c06420130481450636216352e385f73686f7070696e67646179735f7469746c656a386576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f536372617463685f5461625f74727565636f6c6f72723a6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f536372617463685f496d6167655f74727565636f6c6f727a183c747970653d2239317c312220746578743d22474f222f3e820113332e3673686f7070696e67646179735f4465738801f80a9201376576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f536372617463685f42475f74727565636f6c6f729a01396576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f536372617463685f546578745f74727565636f6c6f72aa01009203be0308a72b100418c0e494a30620bfbcafa406280038daae0538e5ae0538dbae0538e6ae0538dcae0538ddae0538deae0538dfae0538e7ae0538e8ae0538e9ae0538eaae0538e0ae0538e1ae0538e2ae0538e3ae0538ebae0538ecae0538edae0538eeae0538fbf74038fcf740420130481e50636213362e365f4368617261637465725f7469746c656a3e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f43686172616374657253686f775f7461625f74727565636f6c6f72723d6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4368617261637465725f62616e6e65725f74727565636f6c6f727a203c747970653d2236337c34303030303138312220746578743d22474f22202f3e820111362e365f4368617261637465725f6465738801b0099201396576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4368617261637465725f62675f74727565636f6c6f729a013c6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4368617261637465725f7469746c655f74727565636f6c6f72aa01009203ec0208aa2b100418c0e494a30620bfbcafa406280038d6ae0538d7ae0538d8ae0538d9ae05420130483250636212362e365f4558576561706f6e5f7469746c656a396576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4558576561706f6e5f7461625f74727565636f6c6f72723c6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4558576561706f6e5f62616e6e65725f74727565636f6c6f727a1f3c747970653d22313030377c31313835312220746578743d22474f22202f3e820110362e365f4558576561706f6e5f4465738801ad099201386576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4558576561706f6e5f62675f74727565636f6c6f729a013c6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4558576561706f6e5f746974696c655f74727565636f6c6f72aa01009203e10208ab2b100318c1bcafa40620c0b1d4a40628003816420130481450636217362e3653686f7070696e674461797330325f7469746c656a3f6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330325f7461625f74727565636f6c6f7272426576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330325f62616e6e65725f74727565636f6c6f727a00820111362e3653686f7070696e6730325f4465738801f80a92013e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330325f62675f74727565636f6c6f729a01416576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330325f7469746c655f74727565636f6c6f72a001afd207aa01009203e10208ac2b100318c1bcafa40620c0b1d4a4062800382d420130481450636217362e3653686f7070696e674461797330335f7469746c656a3f6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330325f7461625f74727565636f6c6f7272426576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330335f62616e6e65725f74727565636f6c6f727a00820111362e3653686f7070696e6730335f4465738801f70a92013e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330335f62675f74727565636f6c6f729a01416576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330335f7469746c655f74727565636f6c6f72a001b0d207aa01009203df0208ad2b100318c0ddc0a30620c0c78aa40628003820420130481450636211332e3374696d6573686f705f7469746c656a396576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f54696d6553686f705f5461625f74727565636f6c6f72723c6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f54696d6553686f705f42616e6e65725f74727565636f6c6f727a183c747970653d2239317c352220746578743d22474f222f3e82010f332e3374696d6573686f705f4465738801a0069201386576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f54696d6553686f705f42475f74727565636f6c6f729a013b6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f54696d6553686f705f5469746c655f74727565636f6c6f72a00105a001af3aa001f437aa01009203af0308ae2b100418c0e494a30620c0a2f2a4062800389ea929389fa92938a0a92938a1a92938a2a92938a3a92938a4a92938a5a92938a6a92938a7a92938a8a92938a9a92938aaa92938aba92938aca92938ada92938aea929420130481950636210362e3677656c666172655f7469746c656a3f6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f77656c666172656d697373696f6e5f7461625f74727565636f6c6f7272426576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f77656c666172656d697373696f6e5f62616e6e65725f74727565636f6c6f727a1b3c747970653d2236347c353535312220746578743d22474f222f3e82010e362e3677656c666172655f6465738801aa0b92013e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f77656c666172656d697373696f6e5f62675f74727565636f6c6f729a01416576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f77656c666172656d697373696f6e5f7469746c655f74727565636f6c6f72aa01009203ee0208af2b100318c0e494a30620c09797a50628003834420130481950636214362e3677656c6661726573686f705f7469746c656a3c6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f77656c6661726573686f705f7461625f74727565636f6c6f72723f6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f77656c6661726573686f705f62616e6e65725f74727565636f6c6f727a1b3c747970653d2236347c353535302220746578743d22474f222f3e820112362e3677656c6661726573686f705f6465738801a90b92013b6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f77656c6661726573686f705f62675f74727565636f6c6f729a013e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f77656c6661726573686f705f7469746c655f74727565636f6c6f72a001da8007aa01009203950308b02b100418a0e1a9a40620bfa2f2a4062800388ea929388fa9293890a9293891a9293892a9293893a9293894a9293895a9293896a9293897a9293898a9293899a929389aa929389ba929389ca929389da929420130483250636212362e335f57617665527573685f7469746c656a396576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f57617665527573685f7461625f74727565636f6c6f72723c6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f57617665527573685f62616e6e65725f74727565636f6c6f727a193c747970653d223134327c302220746578743d22474f222f3e820110362e335f57617665527573685f4465738801880e9201386576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f57617665527573685f62675f74727565636f6c6f729a013b6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f57617665527573685f7469746c655f74727565636f6c6f72aa01009203e20208b12b100418c0e494a306209f99aba306280038afa929420131481e50636211362e365f4d61696e4f57315f7469746c656a3b6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765315f7461625f74727565636f6c6f72723e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765315f62616e6e65725f74727565636f6c6f727a193c747970653d2239347c33372220746578743d22474f222f3e820112362e365f4d61696e5374616765315f4465738801c10c92013a6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765315f62675f74727565636f6c6f729a013d6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765315f7469746c655f74727565636f6c6f72aa01009203e20208b22b100418a099aba306209f8ed0a306280038b0a929420131481e50636211362e365f4d61696e4f57315f7469746c656a3b6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765325f7461625f74727565636f6c6f72723e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765325f62616e6e65725f74727565636f6c6f727a193c747970653d2239347c33372220746578743d22474f222f3e820112362e365f4d61696e5374616765325f4465738801c10c92013a6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765325f62675f74727565636f6c6f729a013d6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765325f7469746c655f74727565636f6c6f72aa01009203e20208b32b100418a08ed0a30620bfa2f2a406280038b1a929420131481e50636211362e365f4d61696e4f57315f7469746c656a3b6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765335f7461625f74727565636f6c6f72723e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765335f62616e6e65725f74727565636f6c6f727a193c747970653d2239347c33372220746578743d22474f222f3e820112362e365f4d61696e5374616765335f4465738801c10c92013a6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765335f62675f74727565636f6c6f729a013d6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765335f7469746c655f74727565636f6c6f72aa01009203800308b42b100418c0e494a30620bfa2f2a406280038b2a92938b3a92938b4a92938b5a92938b7a92938b9a92938cfaa2938d0aa2938d1aa2938d2aa29420130481e50636210362e365f4d61696e4f575f7469746c656a3a6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e53746167655f7461625f74727565636f6c6f72723d6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e53746167655f62616e6e65725f74727565636f6c6f727a193c747970653d2239347c33372220746578743d22474f222f3e820111362e365f4d61696e53746167655f4465738801c00c9201396576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e53746167655f62675f74727565636f6c6f729a013c6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e53746167655f7469746c655f74727565636f6c6f72aa01009203d50308b52b100418a0b1d5a30620c0a2f2a40628003882aa293883aa293884aa293887aa293888aa293889aa29388aaa29388baa29388caa29388daa29388eaa29388faa293890aa293891aa293892aa293893aa293894aa293895aa293896aa293897aa293898aa293899aa29389aaa29389baa29389caa29389daa293885aa293886aa29420130481e5063620f362e36747269706c655f7469746c656a3e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f747269706c656d697373696f6e5f7461625f74727565636f6c6f7272416576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f747269706c656d697373696f6e5f62616e6e65725f74727565636f6c6f727a1b3c747970653d2238317c393038302220746578743d22474f222f3e82010d362e36747269706c655f6465738801a40d92013d6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f747269706c656d697373696f6e5f62675f74727565636f6c6f729a01406576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f747269706c656d697373696f6e5f7469746c655f74727565636f6c6f72aa01009203e80208b62b100318a0b1d5a30620c09797a50628003847420130481e50636213362e36747269706c6573686f705f7469746c656a3b6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f747269706c6573686f705f7461625f74727565636f6c6f72723e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f747269706c6573686f705f62616e6e65725f74727565636f6c6f727a1b3c747970653d2238317c393038302220746578743d22474f222f3e820111362e36747269706c6573686f705f6465738801a30d92013a6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f747269706c6573686f705f62675f74727565636f6c6f729a013d6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f747269706c6573686f705f7469746c655f74727565636f6c6f72a001eddd07aa010092038c0208bb2b100318c0f0a9a30620bfae87a5062800383b420130480a5063620f352e36425053686f705f5469746c656a2e6576656e742f496d6d6564696174656c792f42502f636f6e73745f53686f7054616230345f74727565636f6c6f72723f6576656e742f496d6d6564696174656c792f42502f53686f702f362e365f362e375f425053686f7042616e6e65725f62616e6e65725f74727565636f6c6f727a008201008801ca0992013b6576656e742f496d6d6564696174656c792f42502f53686f702f362e365f362e375f425053686f7042616e6e65725f62675f74727565636f6c6f729a01215370726974654f75747075742f42502f42505f42616e6e65725f546f756d696e67aa010092039e0408bc2b100418c0d0f1a20620c0f0a9a30628003896a205420135481450636216362e355f362e365f53686f77506167655f7469746c656a3d6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e355f362e365f53686f77506167655f7461625f74727565636f6c6f7272406576656e742f496d6d6564696174656c792f4163746976697479506167652f362e355f362e365f53686f77506167655f62616e6e65725f74727565636f6c6f727ac5013c747970653d22776562766965772220746578743d22474f2220687265663d2268747470733a2f2f6163742e686f796f76657273652e636f6d2f70757a7a6c652f6268332f6532303233303531317072657669657730315f3739382f696e6465782e68746d6c3f67616d655f62697a3d6268335f6f73267369676e5f747970653d3226617574686b65795f7665723d3126617574685f61707069643d6532303233303531317072657669657730312677696e5f6d6f64653d66756c6c73637265656e222f3e820114362e355f362e365f53686f77506167655f4465738801840792013c6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e355f362e365f53686f77506167655f62675f74727565636f6c6f729a013f6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e355f362e365f53686f77506167655f7469746c655f74727565636f6c6f72aa01009203d20208bd2b100418c0ddc0a30620bfc78aa4062800389f8607420134481450636211362e365f573244726573735f5469746c656a386576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573244726573735f5461625f74727565636f6c6f72723b6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573244726573735f42616e6e65725f74727565636f6c6f727a183c747970653d2239317c352220746578743d22474f222f3e82010f362e365f573244726573735f4465738801f70a9201376576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573244726573735f42475f74727565636f6c6f729a013a6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573244726573735f5469746c655f74727565636f6c6f72aa01009203ff0208a77f100418c0dd9d9e0620bfe3a0ad062800389bf740420131480f50636211362e335f4d656469614a575f7469746c656a3a6576656e742f496d6d6564696174656c792f4163746976697479506167652f636f6e73745f4d656469614a575f7461625f74727565636f6c6f72723d6576656e742f496d6d6564696174656c792f4163746976697479506167652f636f6e73745f4d656469614a575f62616e6e65725f74727565636f6c6f727a3d3c747970653d2262726f777365722220746578743d22474f2220687265663d2268747470733a2f2f686f796f2e6c696e6b2f3031586f42424164222f3e82010f362e335f4d656469614a575f4465738801ac029201396576656e742f496d6d6564696174656c792f4163746976697479506167652f636f6e73745f4d656469614a575f62675f74727565636f6c6f729a013c6576656e742f496d6d6564696174656c792f4163746976697479506167652f636f6e73745f4d656469614a575f7469746c655f74727565636f6c6f72aa01009a030708882710c193389a030708c03e10c293389a030708c86510c393389a030808a09c0110c493389a030808b0ea0110c59338a00314a803c0b9aec905b003c0a493cc05ba031541726d616461416374697669747942746e5f446563c00301c8033cd00332d8030ae00300e80319f00301f803ed40f803ee40f803ef40f803f04080043688041e900432980419a2040c080010001800200028003000a2040d080110cd021814200328053003a2040d0802109a0518282007280a3007a2040d080310e707183c200a280f300aa8044bb00405c00464c80414d004901cd8048c0180050a880532900519a0051eaa05910708d1f40808d2f40808d3f40808d4f40808d5f40808d6f40808d7f40808d8f40808d9f40808daf40808dbf40808dcf40808ddf40808def40808dff40808e0f40808e1f40808e2f40808e3f40808e4f40808e5f40808e6f40808e7f40808e8f40808e9f40808eaf40808ebf40808ecf40808edf40808eef40808eff40808f0f40808f1f40808f2f40808f3f40808f4f40808f5f40808f6f40808f7f40808f8f40808f9f40808faf40808fbf40808fcf40808fdf40808fef40808fff4080880f5080881f5080882f5080883f5080884f5080885f5080886f5080887f5080888f5080889f508088af508088bf508088cf508088df508088ef508088ff5080890f5080891f5080892f5080893f5080894f5080895f5080896f5080897f5080898f5080899f508089af508089bf508089cf508089df508089ef508089ff50808a0f50808a1f50808a2f50808a3f50808a4f50808a5f50808a6f50808a7f50808a8f50808a9f50808aaf50808abf50808acf50808adf50808aef50808aff50808b0f50808b1f50808b2f50808b3f50808b4f5080899f608089af608089bf608089cf608089df608089ef608089ff60808a0f60808a1f60808a2f60808a3f60808a4f60808a5f60808a9ab0908aaab0908abab0908acab0908adab0908aeab0908afab0908b0ab0908b1ab0908b2ab0908b3ab0908b4ab0908b5ab0908b6ab0908b7ab0908b8ab0908b9ab0908baab0908bbab0908bcab0908bdab0908beab0908bfab0908c0ab0908c1ab0908c2ab0908c3ab0908c4ab0908c5ab0908c6ab0908c7ab09089daf09089eaf09089faf0908a0af0908a1af0908a2af0908a3af0908a4af0908a5af0908a6af0908a7af0908a8af0908a9af0908aaaf0908abaf0908acaf0908adaf0908aeaf0908cefa360895fb3608c9bb0908ddbb0908e7bb090884dc0a0885dc0a0886dc0a0887dc0a0888dc0a0889dc0a088adc0a088bdc0a088cdc0a088ddc0a088edc0a088fdc0a0890dc0a0891dc0a0892dc0a0893dc0a0894dc0a0895dc0a0896dc0a0897dc0a0898dc0a0899dc0a089adc0a089bdc0a089cdc0a089ddc0a089edc0a089fdc0a08a0dc0a08a1dc0a08a2dc0a08a3dc0a08a4dc0a08a5dc0a08a6dc0a08a7dc0a08ac88f50408b088f50408b488f50408b888f50408bd88f50408be88f50408bf88f50408c088f50408c188f50408c288f50408c388f50408e697930508ca98930508ae99930508929a93051004100f10141015101810191020100a100b1023102110251024b80501c00501d005c0cda4a306")); + GetConfigRsp Rsp = Serializer.Deserialize(ms)!; + + Rsp.ServerCurTime = (uint)Global.GetUnixInSeconds(); + Rsp.RegionName = Global.config.Gameserver.RegionName; + Rsp.NextDayBeginTime = (uint)Global.GetUnixInSeconds() + 604800 / 7; session.Send(Packet.FromProto(Rsp, CmdId.GetConfigRsp)); } diff --git a/GameServer/Handlers/GetCustomHeadDataReqHandler.cs b/GameServer/Handlers/GetCustomHeadDataReqHandler.cs new file mode 100644 index 0000000..35e7555 --- /dev/null +++ b/GameServer/Handlers/GetCustomHeadDataReqHandler.cs @@ -0,0 +1,16 @@ +using Common.Resources.Proto; + +namespace PemukulPaku.GameServer.Handlers +{ + [PacketCmdId(CmdId.GetCustomHeadDataReq)] + internal class GetCustomHeadDataReqHandler : IPacketHandler + { + public void Handle(Session session, Packet packet) + { + GetCustomHeadDataRsp Rsp = new() { retcode = GetCustomHeadDataRsp.Retcode.Succ, IsAll = true }; + Rsp.CustomHeadLists.Add(new CustomHead() { Id = 161001 }); + + session.Send(Packet.FromProto(Rsp, CmdId.GetCustomHeadDataRsp)); + } + } +} \ No newline at end of file diff --git a/GameServer/Handlers/GetFrameDataReqHandler.cs b/GameServer/Handlers/GetFrameDataReqHandler.cs new file mode 100644 index 0000000..acaaa03 --- /dev/null +++ b/GameServer/Handlers/GetFrameDataReqHandler.cs @@ -0,0 +1,16 @@ +using Common.Resources.Proto; + +namespace PemukulPaku.GameServer.Handlers +{ + [PacketCmdId(CmdId.GetFrameDataReq)] + internal class GetFrameDataReqHandler : IPacketHandler + { + public void Handle(Session session, Packet packet) + { + GetFrameDataRsp Rsp = new() { retcode = GetFrameDataRsp.Retcode.Succ, IsAll = true }; + Rsp.FrameLists.Add(new FrameData() { Id = 200001 }); + + session.Send(Packet.FromProto(Rsp, CmdId.GetFrameDataRsp)); + } + } +} diff --git a/GameServer/Handlers/GetGalInteractTriggerEventReqHandler.cs b/GameServer/Handlers/GetGalInteractTriggerEventReqHandler.cs new file mode 100644 index 0000000..98a1971 --- /dev/null +++ b/GameServer/Handlers/GetGalInteractTriggerEventReqHandler.cs @@ -0,0 +1,23 @@ +using Common.Resources.Proto; + +namespace PemukulPaku.GameServer.Handlers +{ + [PacketCmdId(CmdId.GetGalInteractTriggerEventReq)] + internal class GetGalInteractTriggerEventReqHandler : IPacketHandler + { + public void Handle(Session session, Packet packet) + { + GetGalInteractTriggerEventReq Data = packet.GetDecodedBody(); + + Random random = new (); + GetGalInteractTriggerEventRsp Rsp = new() + { + retcode = GetGalInteractTriggerEventRsp.Retcode.Succ, + AvatarId = Data.AvatarId, + EventId = Data.EventIdLists[random.Next(0, Data.EventIdLists.Length - 1)] + }; + + session.Send(Packet.FromProto(Rsp, CmdId.GetGalInteractTriggerEventRsp)); + } + } +} diff --git a/GameServer/Handlers/GetLoginActivityReqHandler.cs b/GameServer/Handlers/GetLoginActivityReqHandler.cs index e648a4a..66b597c 100644 --- a/GameServer/Handlers/GetLoginActivityReqHandler.cs +++ b/GameServer/Handlers/GetLoginActivityReqHandler.cs @@ -14,7 +14,7 @@ namespace PemukulPaku.GameServer.Handlers Id = 581, LoginDays = 1, AcceptTime = session.Player.User.GetCreationTime(), - DurationEndTime = session.Player.User.GetCreationTime() + 604800 + DurationEndTime = session.Player.User.GetCreationTime() + 604800 * 2 }); session.Send(Packet.FromProto(Rsp, CmdId.GetLoginActivityRsp)); diff --git a/GameServer/Handlers/GetMainDataReqHandler.cs b/GameServer/Handlers/GetMainDataReqHandler.cs index 5e25845..7c44f14 100644 --- a/GameServer/Handlers/GetMainDataReqHandler.cs +++ b/GameServer/Handlers/GetMainDataReqHandler.cs @@ -39,8 +39,8 @@ namespace PemukulPaku.GameServer.Handlers OpenPanelActivityLists = new uint[] { 2 }, ChatworldActivityInfo = new() { - IsHasNpcRedEnvelope = true, - TreasureScheduleId = 1 + IsHasNpcRedEnvelope = false, + TreasureScheduleId = 0 }, IsAllowCostSeniorEquipOnCurDevice = true, TypeLists = new uint[] { 2, 3, 4, 5, 6, 7, 8, 9, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 35, 36, 37, 38, 39 }, diff --git a/GameServer/Handlers/GetShopListReqHandler.cs b/GameServer/Handlers/GetShopListReqHandler.cs new file mode 100644 index 0000000..96b810e --- /dev/null +++ b/GameServer/Handlers/GetShopListReqHandler.cs @@ -0,0 +1,13 @@ +using Common.Resources.Proto; + +namespace PemukulPaku.GameServer.Handlers +{ + [PacketCmdId(CmdId.GetShopListReq)] + internal class GetShopListReqHandler : IPacketHandler + { + public void Handle(Session session, Packet packet) + { + session.Send(Packet.FromProto(new GetShopListRsp() { retcode = GetShopListRsp.Retcode.Succ, IsAll = true }, CmdId.GetShopListRsp)); + } + } +} diff --git a/GameServer/Handlers/GetWorldMapDataReqHandler.cs b/GameServer/Handlers/GetWorldMapDataReqHandler.cs new file mode 100644 index 0000000..15bc6db --- /dev/null +++ b/GameServer/Handlers/GetWorldMapDataReqHandler.cs @@ -0,0 +1,17 @@ +using Common.Resources.Proto; +using Common.Utils; +using ProtoBuf; + +namespace PemukulPaku.GameServer.Handlers +{ + [PacketCmdId(CmdId.GetWorldMapDataReq)] + internal class GetWorldMapDataReqHandler : IPacketHandler + { + public void Handle(Session session, Packet packet) + { + MemoryStream ms = new(Misc.StringToByteArray("0800121c080110c0c4f4eb0418bffbaad60720002800300038c0c4f4eb044001121c080210c0c4f4eb0418bffbaad60720002800300038c0c4f4eb044002121c080310c0c4f4eb0418bffbaad6072019281e300038c0c4f4eb044003121c080410c0c4f4eb0418bffbaad60720002800300138c0c4f4eb044004121c080510c0c4f4eb0418bffbaad60720002800300138c0c4f4eb044005121c080610c0c4f4eb0418bffbaad607200f2858300138c0c4f4eb044006121c080710c0c4f4eb0418bffbaad607201e2828300138c0c4f4eb044007121c080810c0c4f4eb0418bffbaad60720002800300138c0c4f4eb044008121c080910c0c4f4eb0418bffbaad60720002800300138c0c4f4eb044009121c080a10c0c4f4eb0418bffbaad60720002800300138c0c4f4eb04400a121c080b10c0c4f4eb0418bffbaad60720002800300138c0c4f4eb04400b121c080c10c0c4f4eb0418bffbaad60720002800300138c0c4f4eb044031121e08bb1010a099aae90518bffbaad6072014286330cd0138a099aae9054079121d081210c0c4f4eb0418bffbaad60720322863300138c0c4f4eb04409e02121e08ad1110a092c3800618bffbaad607200f2858300138a092c3800640b302121e08db1110c0e494a30618bfa2f2a40620002800307a38c0e494a306408103")); + GetWorldMapDataRsp Rsp = Serializer.Deserialize(ms); + session.Send(Packet.FromProto(Rsp, CmdId.GetWorldMapDataRsp)); + } + } +} diff --git a/GameServer/Handlers/StageEndReqHandler.cs b/GameServer/Handlers/StageEndReqHandler.cs index 017f230..be8627f 100644 --- a/GameServer/Handlers/StageEndReqHandler.cs +++ b/GameServer/Handlers/StageEndReqHandler.cs @@ -47,7 +47,7 @@ namespace PemukulPaku.GameServer.Handlers session.ProcessPacket(Packet.FromProto(new GetMainDataReq() { }, CmdId.GetMainDataReq)); session.ProcessPacket(Packet.FromProto(new GetEquipmentDataReq() { }, CmdId.GetEquipmentDataReq)); session.ProcessPacket(Packet.FromProto(new GetWorldMapDataReq() { }, CmdId.GetWorldMapDataReq)); - session.ProcessPacket(Packet.FromProto(new ChapterGroupGetDataReq() { }, CmdId.ChapterGroupGetDataReq)); + session.ProcessPacket(Packet.FromProto(new ChapterGroupGetDataReqHandler() { }, CmdId.ChapterGroupGetDataReq)); session.ProcessPacket(Packet.FromProto(new GetStageDataReq() { }, CmdId.GetStageDataReq)); Rsp.PlayerExpReward = 100; diff --git a/GameServer/Handlers/SyncTimeReqHandler.cs b/GameServer/Handlers/SyncTimeReqHandler.cs new file mode 100644 index 0000000..a86509a --- /dev/null +++ b/GameServer/Handlers/SyncTimeReqHandler.cs @@ -0,0 +1,21 @@ +using Common; +using Common.Resources.Proto; + +namespace PemukulPaku.GameServer.Handlers +{ + [PacketCmdId(CmdId.SyncTimeReq)] + internal class SyncTimeReqHandler : IPacketHandler + { + public void Handle(Session session, Packet packet) + { + SyncTimeReq Data = packet.GetDecodedBody(); + + session.Send(Packet.FromProto(new SyncTimeRsp() + { + retcode = SyncTimeRsp.Retcode.Succ, + CurTime = (uint)Global.GetUnixInSeconds(), + Seq = Data.Seq + }, CmdId.SyncTimeRsp)); + } + } +} diff --git a/GameServer/Session.cs b/GameServer/Session.cs index 9826d03..04a7ae2 100644 --- a/GameServer/Session.cs +++ b/GameServer/Session.cs @@ -11,6 +11,7 @@ namespace PemukulPaku.GameServer public readonly string Id; public readonly TcpClient Client; public readonly Logger c; + public long LastKeepAlive = Global.GetUnixInSeconds(); public Player Player = default!; public Session(string id, TcpClient client) @@ -82,6 +83,7 @@ namespace PemukulPaku.GameServer public void ProcessPacket(Packet _packet) { string PacketName = Enum.GetName(typeof(CmdId), _packet.CmdId)!; + if(PacketName == "KeepAliveNotify") { LastKeepAlive = Global.GetUnixInSeconds(); c.Log(PacketName); return; } try { CmdId cmdId = (CmdId)Enum.ToObject(typeof(CmdId), _packet.CmdId);