diff --git a/common/patches/tob.cpp b/common/patches/tob.cpp index 3b152aa68..90529b045 100644 --- a/common/patches/tob.cpp +++ b/common/patches/tob.cpp @@ -3017,13 +3017,13 @@ namespace TOB ENCODE_LENGTH_EXACT(ZoneChange_Struct); SETUP_DIRECT_ENCODE(ZoneChange_Struct, structs::ZoneChange_Struct); - memcpy(eq->char_name, emu->char_name, sizeof(emu->char_name)); + OUT_str(char_name); OUT(zoneID); OUT(instanceID); OUT(y); OUT(x); - OUT(z) - OUT(zone_reason); + OUT(z); + OUT(zone_reason); OUT(success); if (eq->success < 0) @@ -3903,7 +3903,7 @@ namespace TOB DECODE_LENGTH_EXACT(structs::ClientZoneEntry_Struct); SETUP_DIRECT_DECODE(ClientZoneEntry_Struct, structs::ClientZoneEntry_Struct); - memcpy(emu->char_name, eq->char_name, sizeof(emu->char_name)); + IN_str(char_name); FINISH_DIRECT_DECODE(); } diff --git a/common/patches/tob_structs.h b/common/patches/tob_structs.h index f859036e6..5c87cbacc 100644 --- a/common/patches/tob_structs.h +++ b/common/patches/tob_structs.h @@ -332,22 +332,22 @@ namespace TOB { { union { struct { - signed deltaHeading : 10; signed animation : 10; + signed deltaHeading : 10; // unsigned pad1 : 12; - signed deltaX : 13; signed z : 19; + signed deltaX : 13; - signed y : 19; unsigned heading : 12; + signed y : 19; // unsigned pad2 : 1; - signed x : 19; signed deltaZ : 13; + signed x : 19; - unsigned pitch : 12; signed deltaY : 13; + unsigned pitch : 12; // unsigned pad3 : 7; }; uint32_t raw[5]; @@ -476,7 +476,7 @@ namespace TOB { /*016*/ float z; /*020*/ float heading; /*024*/ uint32 type; //unknown... values - /*032*/ uint8 unknown032[144]; + /*032*/ uint8 unknown032[144]; // this is mostly a string passed to the teleport function (follow starting at 0x1401F71BA), it appears to be an override for a message /*172*/ uint32 unknown172; /*176*/ }; diff --git a/tob/opcodes.md b/tob/opcodes.md index 36d89c787..70fda6295 100644 --- a/tob/opcodes.md +++ b/tob/opcodes.md @@ -11,7 +11,7 @@ Below is a status list for the 450 opcodes we currently use on the server for th | `OP_AAAction` | 🟡 Unverified | | | | `OP_AAExpUpdate` | 🟡 Unverified | | | | `OP_AcceptNewTask` | 🔴 Not-Set | | | -| `OP_AckPacket` | 🟡 Unverified | | | +| `OP_AckPacket` | 🟢 Verified | | | | `OP_Action` | 🟡 Unverified | | | | `OP_Action2` | 🔴 Not-Set | | | | `OP_AddNimbusEffect` | 🟡 Unverified | | | @@ -320,7 +320,7 @@ Below is a status list for the 450 opcodes we currently use on the server for th | `OP_LeaveAdventure` | 🔴 Not-Set | | | | `OP_LeaveBoat` | 🟡 Unverified | | | | `OP_LevelAppearance` | 🟡 Unverified | | | -| `OP_LevelUpdate` | 🟡 Unverified | | | +| `OP_LevelUpdate` | 🟢 Verified | | | | `OP_LFGAppearance` | 🔴 Not-Set | | | | `OP_LFGCommand` | 🔴 Not-Set | | | | `OP_LFGGetMatchesRequest` | 🔴 Not-Set | | | @@ -384,7 +384,7 @@ Below is a status list for the 450 opcodes we currently use on the server for th | `OP_MoveLogDisregard` | 🔴 Not-Set | | | | `OP_MoveLogRequest` | 🔴 Not-Set | | | | `OP_MultiLineMsg` | 🔴 Not-Set | | | -| `OP_NewSpawn` | 🟡 Unverified | | | +| `OP_NewSpawn` | 🟢 Verified | Deprecated in the client, already handled in emu | | | `OP_NewTitlesAvailable` | 🔴 Not-Set | | | | `OP_NewZone` | 🟢 Verified | | | | `OP_NPCMoveUpdate` | 🔴 Not-Set | | | @@ -458,8 +458,8 @@ Below is a status list for the 450 opcodes we currently use on the server for th | `OP_RemoveTrap` | 🔴 Not-Set | | | | `OP_Report` | 🟡 Unverified | | | | `OP_ReqClientSpawn` | 🟢 Verified | | | -| `OP_ReqNewZone` | 🟢 Verified | | | -| `OP_RequestClientZoneChange` | 🟡 Unverified | | | +| `OP_ReqNewZone` | 🟢 Verified | Client does not send this (in LS or TOB), but it does receive it. emu does not send it | | +| `OP_RequestClientZoneChange` | 🟢 Verified | parity with RoF2, there's a string that gets passed to teleport at the end that's not known | | | `OP_RequestDuel` | 🔴 Not-Set | | | | `OP_RequestGuildTributes` | 🔴 Not-Set | | | | `OP_RequestKnowledgeBase` | 🔴 Not-Set | | | @@ -546,7 +546,7 @@ Below is a status list for the 450 opcodes we currently use on the server for th | `OP_SpecialMesg` | 🟡 Unverified | | | | `OP_SpellEffect` | 🟡 Unverified | | | | `OP_Split` | 🟡 Unverified | | | -| `OP_Stamina` | 🟡 Unverified | | | +| `OP_Stamina` | 🟢 Verified | These values are 0-32k instead of 0-127 | | | `OP_Stun` | 🟡 Unverified | | | | `OP_Surname` | 🔴 Not-Set | | | | `OP_SwapSpell` | 🟡 Unverified | | | @@ -566,7 +566,7 @@ Below is a status list for the 450 opcodes we currently use on the server for th | `OP_Taunt` | 🟡 Unverified | | | | `OP_TestBuff` | 🔴 Not-Set | | | | `OP_TGB` | 🔴 Not-Set | | | -| `OP_TimeOfDay` | 🟡 Unverified | | | +| `OP_TimeOfDay` | 🟢 Verified | | | | `OP_Track` | 🟡 Unverified | | | | `OP_TrackTarget` | 🟡 Unverified | | | | `OP_TrackUnknown` | 🟡 Unverified | | | @@ -611,11 +611,11 @@ Below is a status list for the 450 opcodes we currently use on the server for th | `OP_World_Client_CRC1` | 🟢 Verified | | | | `OP_World_Client_CRC2` | 🟢 Verified | | | | `OP_World_Client_CRC3` | 🟢 Verified | | | -| `OP_WorldClientReady` | 🟡 Unverified | | | +| `OP_WorldClientReady` | 🟢 Verified | | | | `OP_WorldComplete` | 🟢 Verified | | | | `OP_WorldLogout` | 🔴 Not-Set | | | | `OP_WorldObjectsSent` | 🟡 Unverified | | | -| `OP_WorldUnknown001` | 🟢 Verified | SetServerTime. emu doesn't currently use it so setting it to verified, but the reference is 0x140292550 | | +| `OP_WorldUnknown001` | 🟢 Verified | SetServerTime. emu doesn't currently send it so setting it to verified, but the reference is 0x140292550 | | | `OP_XTargetAutoAddHaters` | 🔴 Not-Set | | | | `OP_XTargetOpen` | 🔴 Not-Set | | | | `OP_XTargetOpenResponse` | 🔴 Not-Set | | | @@ -624,13 +624,13 @@ Below is a status list for the 450 opcodes we currently use on the server for th | `OP_YellForHelp` | 🟡 Unverified | | | | `OP_ZoneChange` | 🟡 Unverified | | | | `OP_ZoneComplete` | 🔴 Not-Set | | | -| `OP_ZoneEntry` | 🟢 Verified | | | +| `OP_ZoneEntry` | 🟢 Verified | unknown fields in C->S struct are various CRCs, emu doesn't use them | | | `OP_ZoneGuildList` | 🔴 Not-Set | | | | `OP_ZoneInUnknown` | 🔴 Not-Set | | | | `OP_ZonePlayerToBind` | 🟡 Unverified | | | | `OP_ZoneServerInfo` | 🟢 Verified | | | | `OP_ZoneServerReady` | 🔴 Not-Set | | | -| `OP_ZoneSpawns` | 🟢 Verified | | | -| `OP_ZoneUnavail` | 🟡 Unverified | | | +| `OP_ZoneSpawns` | 🟢 Verified | This is deprecated in the client (and emu never sends it directly) | | +| `OP_ZoneUnavail` | 🟢 Verified | The client discards all content of this packet | | | `OP_ResetAA` | 🟡 Unverified | | | | `OP_UnderWorld` | 🟡 Unverified | | |