diff --git a/common/patches/larion.cpp b/common/patches/larion.cpp index d78256ce1..a60a0a82a 100644 --- a/common/patches/larion.cpp +++ b/common/patches/larion.cpp @@ -2322,6 +2322,26 @@ namespace Larion delete in; } + ENCODE(OP_SendZonepoints) + { + SETUP_VAR_ENCODE(ZonePoints); + ALLOC_VAR_ENCODE(structs::ZonePoints, sizeof(structs::ZonePoints) + sizeof(structs::ZonePoint_Entry) * (emu->count + 1)); + + eq->count = emu->count; + for (uint32 i = 0; i < emu->count; ++i) + { + eq->zpe[i].iterator = emu->zpe[i].iterator; + eq->zpe[i].x = emu->zpe[i].x; + eq->zpe[i].y = emu->zpe[i].y; + eq->zpe[i].z = emu->zpe[i].z; + eq->zpe[i].heading = emu->zpe[i].heading; + eq->zpe[i].zoneid = emu->zpe[i].zoneid; + eq->zpe[i].zoneinstance = emu->zpe[i].zoneinstance; + } + + FINISH_ENCODE(); + } + // DECODE methods DECODE(OP_ZoneEntry) diff --git a/common/patches/larion_ops.h b/common/patches/larion_ops.h index 5d07d4538..6a6771550 100644 --- a/common/patches/larion_ops.h +++ b/common/patches/larion_ops.h @@ -15,6 +15,7 @@ E(OP_CharInventory) E(OP_NewZone) E(OP_SpawnDoor) E(OP_GroundSpawn) +E(OP_SendZonepoints) //list of packets we need to decode on the way in: D(OP_ZoneEntry) diff --git a/common/patches/larion_structs.h b/common/patches/larion_structs.h index 5e8feda62..a571e3ad2 100644 --- a/common/patches/larion_structs.h +++ b/common/patches/larion_structs.h @@ -297,6 +297,23 @@ namespace Larion { /*132*/ }; + struct ZonePoint_Entry { + /*00*/ uint32 iterator; + /*04*/ float y; + /*08*/ float x; + /*12*/ float z; + /*16*/ float heading; + /*20*/ uint16 zoneid; + /*22*/ uint16 zoneinstance; + /*24*/ uint32 unknown024; + /*28*/ uint32 unknown028; + /*32*/ + }; + + struct ZonePoints { + /*00*/ uint32 count; + /*04*/ struct ZonePoint_Entry zpe[0]; // Always add one extra to the end after all zonepoints + }; #pragma pack() diff --git a/utils/patches/patch_Larion.conf b/utils/patches/patch_Larion.conf index 5fd29482f..43c036774 100644 --- a/utils/patches/patch_Larion.conf +++ b/utils/patches/patch_Larion.conf @@ -32,11 +32,11 @@ OP_SendSkillCapsChecksum=0x0000 OP_SendMaxCharacters=0x13af OP_SendMembership=0x2aca OP_SendMembershipDetails=0x2608 -OP_CharacterCreateRequest=0x0000 -OP_CharacterCreate=0x0000 -OP_DeleteCharacter=0x0000 -OP_RandomNameGenerator=0x0000 -OP_ApproveName=0x0000 +OP_CharacterCreateRequest=0x2df4 +OP_CharacterCreate=0x6a3c +OP_DeleteCharacter=x67d7 +OP_RandomNameGenerator=0x49d9 +OP_ApproveName=0x11e5 OP_MOTD=0x0000 OP_SetChatServer=0x2726 OP_SetChatServer2=0x0000 @@ -47,7 +47,7 @@ OP_FloatListThing=0x0000 # Reasons for Disconnect: OP_ZoneUnavail=0x0000 -OP_WorldClientReady=0x0000 +OP_WorldClientReady=0x7ed8 OP_CharacterStillInZone=0x0000 OP_WorldChecksumFailure=0x0000 OP_WorldLoginFailed=0x0000 @@ -60,16 +60,16 @@ OP_SendBaseDataChecksum=0x0000 # Zone in opcodes OP_AckPacket=0x77c9 -OP_ZoneEntry=0x0000 -OP_ReqNewZone=0x0000 -OP_NewZone=0x0000 -OP_ZoneSpawns=0x0000 -OP_PlayerProfile=0x0000 -OP_TimeOfDay=0x0000 -OP_LevelUpdate=0x0000 -OP_Stamina=0x0000 -OP_RequestClientZoneChange=0x0000 -OP_ZoneChange=0x0000 +OP_ZoneEntry=0x784a +OP_ReqNewZone=0x3895 +OP_NewZone=0x4341 +OP_ZoneSpawns=0x17d9 +OP_PlayerProfile=0x1c76 +OP_TimeOfDay=0x3736 +OP_LevelUpdate=0x0000 #0x0eb2 +OP_Stamina=0x0000 #0x1563 +OP_RequestClientZoneChange=0x0000 #0x0191 +OP_ZoneChange=0x0000 #0x17a3 OP_LockoutTimerInfo=0x0000 OP_ZoneServerReady=0x0000 OP_ZoneInUnknown=0x0000 @@ -77,42 +77,42 @@ OP_LogoutReply=0x0000 OP_PreLogoutReply=0x0000 # Required to fully log in -OP_SpawnAppearance=0x0000 -OP_ChangeSize=0x0000 +OP_SpawnAppearance=0x4eb0 +OP_ChangeSize=0x0000 #0x2fdc OP_TributeUpdate=0x0000 OP_TributeTimer=0x0000 OP_SendTributes=0x0000 OP_RequestGuildTributes=0x0000 OP_TributeInfo=0x0000 -OP_Weather=0x0000 -OP_ReqClientSpawn=0x0000 -OP_SpawnDoor=0x0000 -OP_GroundSpawn=0x0000 -OP_SendZonepoints=0x0000 +OP_Weather=0x6fe6 +OP_ReqClientSpawn=0x6732 +OP_SpawnDoor=0x4273 +OP_GroundSpawn=0x49c5 +OP_SendZonepoints=0x279f OP_BlockedBuffs=0x0000 OP_RemoveBlockedBuffs=0x0000 OP_ClearBlockedBuffs=0x0000 -OP_WorldObjectsSent=0x0000 -OP_SendExpZonein=0x0000 +OP_WorldObjectsSent=0x2879 +OP_SendExpZonein=0x02b4 OP_SendAATable=0x0000 OP_ClearAA=0x0000 OP_ClearLeadershipAbilities=0x0000 OP_RespondAA=0x0000 OP_UpdateAA=0x0000 OP_SendAAStats=0x0000 -OP_AAExpUpdate=0x0000 -OP_ExpUpdate=0x0000 -OP_HPUpdate=0x0000 -OP_ManaChange=0x0000 +OP_AAExpUpdate=0x0000 #0x642f +OP_ExpUpdate=0x0000 #0x611d +OP_HPUpdate=0x0000 #0x775c +OP_ManaChange=0x0000 #0x0606 OP_TGB=0x0000 -OP_SpecialMesg=0x0000 +OP_SpecialMesg=0x0000 #0x7d93 OP_GuildMemberList=0x0000 OP_GuildMOTD=0x0000 -OP_CharInventory=0x0000 -OP_WearChange=0x0000 -OP_ClientUpdate=0x0000 -OP_ClientReady=0x0000 -OP_SetServerFilter=0x0000 +OP_CharInventory=0x21d6 +OP_WearChange=0x0000 #0x44c0 +OP_ClientUpdate=0x0000 #0x3a4b +OP_ClientReady=0x0831 +OP_SetServerFilter=0x0000 #0x6b7f # Guild Opcodes OP_GetGuildMOTD=0x0000