diff --git a/common/patches/laurion.cpp b/common/patches/laurion.cpp index 491396b7d..495de99ca 100644 --- a/common/patches/laurion.cpp +++ b/common/patches/laurion.cpp @@ -3300,6 +3300,21 @@ namespace Laurion FINISH_DIRECT_DECODE(); } + DECODE(OP_GMTraining) + { + DECODE_LENGTH_EXACT(structs::GMTrainee_Struct); + SETUP_DIRECT_DECODE(GMTrainee_Struct, structs::GMTrainee_Struct); + + OUT(npcid); + OUT(playerid); + + for (int i = 0; i < 100; ++i) { + OUT(skills[i]); + } + + FINISH_DIRECT_DECODE(); + } + //Naive version but should work well enough for now int ExtractIDFile(const std::string& input) { std::string number; diff --git a/common/patches/laurion_ops.h b/common/patches/laurion_ops.h index b2d8d8f30..2938774dd 100644 --- a/common/patches/laurion_ops.h +++ b/common/patches/laurion_ops.h @@ -56,6 +56,7 @@ D(OP_SpawnAppearance) D(OP_MoveItem) D(OP_ShopRequest) D(OP_CastSpell) +D(OP_GMTraining) #undef E #undef D diff --git a/common/patches/laurion_structs.h b/common/patches/laurion_structs.h index 294c5aace..2e4364be9 100644 --- a/common/patches/laurion_structs.h +++ b/common/patches/laurion_structs.h @@ -739,6 +739,15 @@ namespace Laurion { /*00*/ uint32 hp; }; + struct GMTrainee_Struct + { + /*000*/ uint32 npcid; + /*004*/ uint32 playerid; + /*008*/ uint32 skills[PACKET_SKILL_ARRAY_SIZE]; + /*408*/ uint8 unknown408[36]; + /*444*/ + }; + #pragma pack() }; //end namespace structs