Files
ReSkate/Engine/Game/Build/20260929/native_party.h
T
2026-10-02 14:40:41 -05:00

176 lines
16 KiB
C++

#pragma once
#include "Engine/Game/Build/fingerprint.h"
#include "engine.h"
#include <array>
#include <cstdint>
namespace dingosdk::game::build::v20260929::native_party {
// UI data model helpers (also used by the indicator and menu adapters).
// Looks up a model handle's record in the model manager.
inline constexpr std::uintptr_t model_record = 0x1915650;
// Returns the TypeInfo of a model record.
inline constexpr std::uintptr_t model_type = 0x1917d70;
// Returns (creating if needed) the singleton model of a registered type.
inline constexpr std::uintptr_t model_singleton = 0x19192b0;
// Hooked native party/social functions.
// UIPlayerManager: UIPlayerInfo by EA id.
inline constexpr std::uintptr_t get_info = 0x6d9750;
inline constexpr std::uintptr_t is_member = 0x778fb0;
inline constexpr std::uintptr_t member_ids = 0x776b10;
// Party members with their leader flag; members_with_leader_hook mirrors its
// array allocator/header and POD copy.
inline constexpr std::uintptr_t members_with_leader = 0x776d60;
// Weak references resolved by the native Spectate/Teleport commands.
inline constexpr std::uintptr_t weak_player = 0x848e90;
inline constexpr std::uintptr_t weak_entity = 0x834c20;
inline constexpr std::uintptr_t world_transform = 0x832930;
inline constexpr std::uintptr_t player_id = 0x82ff60;
inline constexpr std::uintptr_t can_spectate = 0x837380;
inline constexpr std::uintptr_t can_teleport = 0x837440;
inline constexpr std::uintptr_t spectate = 0x766fc0;
inline constexpr std::uintptr_t spectate_active = 0x7572a0;
inline constexpr std::uintptr_t spectate_clear = 0x55f090;
inline constexpr std::uintptr_t spectate_name = 0x75ae30;
inline constexpr std::uintptr_t teleport = 0x8615b0;
// Engine array helpers.
// Appends a slot to a native array.
inline constexpr std::uintptr_t array_append = 0x6b8940;
// Initializes an appended 64-bit id slot.
inline constexpr std::uintptr_t id_construct = 0x58b0120;
// Allocates an array block (also used by the throwdown adapters).
inline constexpr std::uintptr_t array_allocate = engine::array_allocate;
// Returns the shared empty-array sentinel (also used by the throwdown adapters).
inline constexpr std::uintptr_t empty_array = 0x3dcbb00;
// Frees an array block.
inline constexpr std::uintptr_t array_free = 0x3dcc3a0;
// Party map markers.
// Map POI value constructor and destructor.
inline constexpr std::uintptr_t poi_construct = 0x59b1e00;
inline constexpr std::uintptr_t poi_destroy = 0x59b8f80;
// Registers / removes a POI with the map manager.
inline constexpr std::uintptr_t map_register = 0x6a1d60;
inline constexpr std::uintptr_t map_unregister = 0x6b98c0;
// Dispatches the game's own roster observers.
inline constexpr std::uintptr_t roster_changed = 0x6ece40;
// Type information
// ModelRef array of the social player lists.
inline constexpr std::uintptr_t player_list_type = 0x7493000;
inline constexpr std::uintptr_t uint64_array_type = 0x765dac8;
inline constexpr std::uintptr_t uint8_type = 0x765d928;
inline constexpr std::uintptr_t vec2_type = 0x765d278;
inline constexpr std::uintptr_t matrix_type = 0x765d590;
// UIFriendsService sorted friends list.
inline constexpr std::uintptr_t sorted_friends_type = 0x7250940;
// Map POI, its data model and its kind enum.
inline constexpr std::uintptr_t map_poi_type = 0x724d3d0;
inline constexpr std::uintptr_t map_data_type = 0x724d4e8;
inline constexpr std::uintptr_t map_poi_kind_type = 0x724cf98;
// Globals
// Pointer to UIFriendsService and its vtable.
inline constexpr std::uintptr_t friends_service = 0x71f4270;
inline constexpr std::uintptr_t friends_service_vtable = 0x60d2068;
// Pointer to the map POI manager and its vtable.
inline constexpr std::uintptr_t map_manager = 0x71f4258;
inline constexpr std::uintptr_t map_manager_vtable = 0x60d21a8;
// Pointer to the native EA party client.
inline constexpr std::uintptr_t party_client = engine::client_game_manager;
// Party requests (analysis/party-re/native-core.md 2.3): the natives behind the Social menu's and
// player card's party buttons. Each fills an async handle and answers through a script delegate
// (last argument); without a native (Blaze) group they fail, so ReSkate answers them itself.
inline constexpr std::uintptr_t request_invite = 0x84be30; // (Handle*, const u64* eaid, Delegate*)
inline constexpr std::uintptr_t request_join_group = 0x7797a0; // (Handle*, u64 group, i32 reason (1 direct, 2 invite), Delegate*)
inline constexpr std::uintptr_t request_join_player = 0x77a0e0; // (Handle*, const u64* eaid, Delegate*)
inline constexpr std::uintptr_t request_decline = 0x84afc0; // (Handle*, const String* invite id, Delegate*)
inline constexpr std::uintptr_t request_leave = 0x77a420; // (Handle*, Delegate*)
inline constexpr std::uintptr_t request_kick = 0x77a1f0; // (Handle*, const u64* eaid, Delegate*)
inline constexpr std::uintptr_t request_promote = 0x77a5c0; // (Handle*, const u64* eaid, Delegate*)
inline constexpr std::uintptr_t request_privacy = 0x839f10; // (u32 setting (4 invite, 5 join), u32 value)
// A request's answer: a 0x28-byte Result {String message @0, ..., u32 code @0x20} made by
// result_make(Result*, code, text) (code 0 = success), handed to the delegate by
// delegate_invoke(Delegate*, Result*); the handle is set empty by null_handle(Handle*, 0).
inline constexpr std::uintptr_t result_make = 0x83de30, delegate_invoke = 0x58b1d60, null_handle = 0x3dc5bd0;
// Party queries the Social menu, map and activities make besides the member lists.
inline constexpr std::uintptr_t local_is_leader = 0x779710; // (bool* out)
inline constexpr std::uintptr_t in_group = 0x849d70; // () -> bool
inline constexpr std::uintptr_t player_group_status = 0x775ee0; // (const u64* eaid, GameGroupStatus* out, bool* found)
// AcceptGameInvite (the invite toast's Accept; analysis/party-re/ui-actions.md 2.2):
// (Handle*, const String* invite id, const String* game id, Delegate*), answered with
// delegate_invoke_text(Delegate*, DingoError*, const String* game id).
inline constexpr std::uintptr_t request_accept_invite = 0x842cd0, delegate_invoke_text = 0x58b1cf0;
// IsPartyVoiceUnavailable () -> bool: hides the party voice options without a native group.
inline constexpr std::uintptr_t voice_unavailable = 0x848e60;
// Native UI events, raised as the natives do (ui-actions.md 1.6): context(&buffer16);
// dispatcher = event_dispatcher(&buffer16); if dispatcher+0x28: event_post(dispatcher, type object,
// payload*, options* {f32 0, u32 1, u32 0}, 0).
inline constexpr std::uintptr_t current_context = 0x18b6ae0, event_dispatcher = 0x4b257a0, event_post = 0x4b30ab0;
// Their type objects: GroupJoinNotification {u64 EAId}, GroupLeaveNotification {u64 EAId, i32 reason
// (0 left, 1 kicked, 2 location access)}, GroupLeaderChangedNotification {u64 new leader},
// GameInviteUpdated {String GameId, String GameInviteId, u64 inviter, i32 1, bool matchmaking}.
inline constexpr std::uintptr_t group_join_event = 0x720ef80, group_leave_event = 0x720efe8,
leader_changed_event = 0x720f048, game_invite_event = 0x720f210;
struct Request { std::uintptr_t rva; std::array<unsigned char, 32> bytes; };
inline constexpr std::array<Request, 20> party_request_contracts{{
{request_accept_invite, {0x40,0x55,0x53,0x56,0x57,0x41,0x55,0x41,0x56,0x48,0x8d,0x6c,0x24,0xd1,0x48,0x81,0xec,0xd8,0x00,0x00,0x00,0x48,0x8b,0x05,0xd4,0x16,0x98,0x06,0x48,0x33,0xc4,0x48}},
{delegate_invoke_text, {0x48,0x83,0xec,0x48,0x4c,0x8b,0xd2,0x48,0x8b,0x11,0x48,0x8b,0x02,0x4c,0x8b,0x48,0x40,0x4d,0x85,0xc9,0x74,0x14,0x80,0x78,0x68,0x00,0x75,0x0e,0x49,0x8b,0xd0,0x49}},
{voice_unavailable, {0x48,0x8b,0x05,0x31,0x6a,0x9a,0x06,0x48,0x85,0xc0,0x74,0x14,0x48,0x8b,0x48,0x70,0x48,0x85,0xc9,0x74,0x0b,0x83,0xb9,0x80,0x00,0x00,0x00,0x00,0x0f,0x94,0xc0,0xc3}},
{current_context, {0x48,0x89,0x5c,0x24,0x08,0x57,0x48,0x83,0xec,0x20,0x65,0x48,0x8b,0x04,0x25,0x58,0x00,0x00,0x00,0x48,0x8b,0xd9,0x8b,0x15,0xe4,0xd5,0x01,0x06,0x48,0x8b,0x3c,0xd0}},
{event_dispatcher, {0x8b,0x05,0xa2,0x80,0xcb,0x02,0x48,0x03,0x01,0xc3,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x48,0x3b,0xca,0x0f,0x84,0xcc,0x00,0x00,0x00,0x55,0x41,0x54,0x48,0x83,0xec,0x28}},
{event_post, {0x40,0x53,0x55,0x56,0x57,0x48,0x83,0xec,0x38,0x48,0x8b,0xe9,0x49,0x8b,0xd9,0x48,0x8b,0x49,0x20,0x49,0x8b,0xf8,0x48,0x8b,0xf2,0xe8,0xe2,0xd7,0xff,0xff,0x48,0x8b}},
{request_invite, {0x40,0x55,0x53,0x57,0x41,0x56,0x48,0x8d,0x6c,0x24,0xc1,0x48,0x81,0xec,0xb8,0x00,0x00,0x00,0x48,0x8b,0x05,0x77,0x85,0x97,0x06,0x48,0x33,0xc4,0x48,0x89,0x45,0x2f}},
{request_join_group, {0x48,0x89,0x54,0x24,0x10,0x55,0x56,0x41,0x54,0x41,0x55,0x41,0x56,0x41,0x57,0x48,0x8d,0x6c,0x24,0x88,0x48,0x81,0xec,0x78,0x01,0x00,0x00,0x48,0x8b,0x05,0xfe,0xab}},
{request_join_player, {0x48,0x89,0x5c,0x24,0x10,0x48,0x89,0x74,0x24,0x20,0x57,0x48,0x83,0xec,0x60,0x48,0x8b,0x05,0xca,0xa2,0xa4,0x06,0x48,0x33,0xc4,0x48,0x89,0x44,0x24,0x50,0x48,0x8b}},
{request_decline, {0x40,0x55,0x53,0x57,0x41,0x54,0x48,0x8d,0x6c,0x24,0xc1,0x48,0x81,0xec,0xb8,0x00,0x00,0x00,0x48,0x8b,0x05,0xe7,0x93,0x97,0x06,0x48,0x33,0xc4,0x48,0x89,0x45,0x1f}},
{request_leave, {0x48,0x89,0x5c,0x24,0x18,0x48,0x89,0x74,0x24,0x20,0x57,0x48,0x81,0xec,0xb0,0x00,0x00,0x00,0x48,0x8b,0x05,0x87,0x9f,0xa4,0x06,0x48,0x33,0xc4,0x48,0x89,0x84,0x24}},
{request_kick, {0x48,0x89,0x5c,0x24,0x20,0x55,0x56,0x41,0x56,0x48,0x8d,0x6c,0x24,0xb9,0x48,0x81,0xec,0xb0,0x00,0x00,0x00,0x48,0x8b,0x05,0xb4,0xa1,0xa4,0x06,0x48,0x33,0xc4,0x48}},
{request_promote, {0x48,0x89,0x5c,0x24,0x20,0x55,0x56,0x41,0x56,0x48,0x8d,0x6c,0x24,0xb9,0x48,0x81,0xec,0xb0,0x00,0x00,0x00,0x48,0x8b,0x05,0xe4,0x9d,0xa4,0x06,0x48,0x33,0xc4,0x48}},
{request_privacy, {0x48,0x89,0x5c,0x24,0x08,0x48,0x89,0x74,0x24,0x10,0x57,0x48,0x83,0xec,0x70,0x8b,0xda,0x8b,0xf9,0xba,0x89,0x97,0x0f,0xbf,0x48,0x8d,0x8c,0x24,0x90,0x00,0x00,0x00}},
{result_make, {0x48,0x89,0x5c,0x24,0x08,0x48,0x89,0x74,0x24,0x10,0x57,0x48,0x83,0xec,0x20,0x48,0x8b,0xf1,0x49,0x8b,0xd8,0x49,0x8b,0xc8,0x8b,0xfa,0xe8,0xcd,0xfb,0xc2,0x04,0x44}},
{delegate_invoke, {0x48,0x83,0xec,0x38,0x4c,0x8b,0x01,0x49,0x8b,0x08,0x48,0x8b,0x41,0x40,0x48,0x85,0xc0,0x74,0x10,0x80,0x79,0x68,0x00,0x75,0x0a,0x48,0x8b,0xca,0xff,0xd0,0x48,0x83}},
{null_handle, {0x48,0x85,0xd2,0x74,0x16,0xb8,0x00,0x20,0x00,0x00,0x66,0x85,0x42,0x14,0x48,0x8b,0xc1,0x75,0x0b,0xf0,0xff,0x42,0x10,0x48,0x89,0x11,0xc3,0x48,0x8b,0xc1,0x48,0x89}},
{local_is_leader, {0x40,0x53,0x48,0x83,0xec,0x20,0xc6,0x01,0x00,0x48,0x8b,0xd9,0x48,0x8b,0x05,0x75,0x61,0xa7,0x06,0x48,0x85,0xc0,0x74,0x10,0x48,0x8b,0x48,0x70,0x48,0x85,0xc9,0x74}},
{in_group, {0x48,0x8b,0x05,0x21,0x5b,0x9a,0x06,0x48,0x85,0xc0,0x74,0x09,0x48,0x83,0x78,0x70,0x00,0x0f,0x95,0xc0,0xc3,0xc3,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc}},
{player_group_status, {0x48,0x89,0x5c,0x24,0x08,0x48,0x89,0x74,0x24,0x10,0x57,0x48,0x83,0xec,0x20,0x48,0x8b,0xfa,0x41,0xc6,0x00,0x00,0x48,0x8b,0xd9,0xba,0x89,0x97,0x0f,0xbf,0x48,0x8d}},
}};
// Skate.exe SHA256 fbce74d5e28ef525dbba2cb4adbebc13405bdbd88f31bc940bca45e4ae88b8f9.
// Native party/UI adapters; shared interpreter entry is already validated by the profile runtime.
inline constexpr std::array<Fingerprint, 30> native_party_contracts{{
{get_info, {0x48,0x83,0xec,0x38,0x48,0x8b,0x89,0x40,0x01,0x00,0x00,0x4c,0x8b,0xc2,0x48,0x8d,0x15,0x73,0xfa,0xb7,0x06,0xc6,0x44,0x24,0x20,0x00,0x41,0xb9,0x3f,0xe2,0x41,0xa9}},
{is_member, {0x4c,0x8b,0xca,0xc6,0x02,0x00,0x48,0x8b,0x15,0xdb,0x68,0xa7,0x06,0x48,0x85,0xd2,0x74,0x3c,0x48,0x8b,0x52,0x70,0x48,0x85,0xd2,0x74,0x33,0x48,0x8b,0x82,0x88,0x00}},
{member_ids, {0x48,0x89,0x5c,0x24,0x18,0x57,0x48,0x83,0xec,0x20,0x48,0x8b,0x3d,0x77,0x8d,0xa7,0x06,0x48,0x8b,0xd9,0x48,0x85,0xff,0x74,0x77,0x48,0x8b,0x7f,0x70,0x48,0x85,0xff}},
{members_with_leader, {0x40,0x53,0x56,0x48,0x83,0xec,0x48,0x48,0x8b,0x35,0x2a,0x8b,0xa7,0x06,0x48,0x8b,0xd9,0x48,0x85,0xf6,0x0f,0x84,0x7e,0x01,0x00,0x00,0x48,0x8b,0x76,0x70,0x48,0x85}},
{weak_player, {0x48,0x89,0x5c,0x24,0x08,0x56,0x57,0x41,0x56,0x48,0x83,0xec,0x20,0x4c,0x8b,0xf1,0x48,0x8b,0xda,0x48,0x8d,0x4c,0x24,0x48,0xe8,0x33,0xdc,0x06,0x01,0x44,0x8b,0x05}},
{weak_entity, {0x48,0x89,0x5c,0x24,0x18,0x48,0x89,0x74,0x24,0x20,0x57,0x48,0x83,0xec,0x20,0x48,0x8b,0xf1,0x48,0x8b,0xfa,0x48,0x8d,0x4c,0x24,0x30,0x33,0xdb,0xe8,0x9f,0x1e,0x08}},
{world_transform, {0x48,0x89,0x5c,0x24,0x10,0x57,0x48,0x83,0xec,0x20,0x48,0x8b,0xd9,0x48,0x8b,0xfa,0x48,0x8d,0x4c,0x24,0x30,0xe8,0x96,0x41,0x08,0x01,0x48,0x8b,0x03,0x48,0x85,0xc0}},
{player_id, {0x48,0x8b,0x11,0x45,0x33,0xc0,0x48,0x85,0xd2,0x74,0x1c,0x48,0x8b,0x12,0x33,0xc0,0x48,0x85,0xd2,0x48,0x8d,0x4a,0xf8,0x48,0x0f,0x44,0xc8,0x48,0x85,0xc9,0x74,0x0a}},
{can_spectate, {0x40,0x55,0x48,0x83,0xec,0x20,0x8b,0xe9,0xba,0x89,0x97,0x0f,0xbf,0x48,0x8d,0x4c,0x24,0x38,0xe8,0xa9,0xfa,0x07,0x01,0x48,0x8b,0xc8,0xe8,0x41,0x1b,0x66,0x02,0x48}},
{can_teleport, {0x40,0x55,0x48,0x83,0xec,0x20,0x8b,0xe9,0xba,0x89,0x97,0x0f,0xbf,0x48,0x8d,0x4c,0x24,0x38,0xe8,0xe9,0xf9,0x07,0x01,0x48,0x8b,0xc8,0xe8,0x81,0x1a,0x66,0x02,0x48}},
{spectate, {0x48,0x8b,0xc1,0x48,0x8b,0x0d,0xb6,0x77,0xa8,0x06,0x48,0x85,0xc9,0x74,0x0c,0x44,0x0f,0xb6,0xc2,0x48,0x8b,0xd0,0xe9,0x15,0xee,0xdf,0xff,0xc3,0xcc,0xcc,0xcc,0xcc}},
{spectate_active, {0x48,0x83,0xec,0x28,0x48,0x8b,0x05,0xd5,0x74,0xa9,0x06,0x48,0x85,0xc0,0x74,0x4b,0x48,0x8b,0x48,0x08,0x48,0x85,0xc9,0x74,0x06,0x48,0x83,0x39,0x00,0x75,0x0e,0x48}},
{spectate_clear, {0x40,0x53,0x48,0x83,0xec,0x20,0x48,0x8b,0xd9,0x48,0x8d,0x15,0xf0,0x29,0xcd,0x06,0x48,0x8b,0x0d,0x39,0x3c,0xf2,0x06,0xe8,0x44,0x7e,0x37,0x01,0x48,0x8b,0x0d,0x2d}},
{spectate_name, {0x40,0x57,0x48,0x83,0xec,0x20,0x48,0x8b,0x05,0x43,0x39,0xa9,0x06,0x48,0x8b,0xf9,0x48,0x85,0xc0,0x74,0x61,0x48,0x8b,0x40,0x08,0x48,0x85,0xc0,0x74,0x58,0x48,0x8b}},
{teleport, {0x48,0x89,0x4c,0x24,0x08,0x55,0x57,0x41,0x54,0x41,0x55,0x41,0x57,0x48,0x83,0xec,0x50,0x41,0xbf,0xff,0xff,0xff,0xff,0x49,0x8b,0xe9,0x41,0x8b,0xff,0x4d,0x8b,0xe8}},
{model_record, {0x40,0x53,0x55,0x56,0x57,0x41,0x56,0x48,0x83,0xec,0x30,0x41,0x0f,0xb6,0xf0,0x48,0x8b,0xda,0x48,0x8b,0xe9,0x48,0x85,0xd2,0x0f,0x84,0xa6,0x01,0x00,0x00,0x41,0x80}},
{model_type, {0x41,0x0f,0xb7,0x40,0x04,0x41,0xb8,0x00,0x06,0x00,0x00,0x25,0xff,0x7f,0x00,0x00,0x41,0x80,0xf9,0x01,0x48,0x8d,0x14,0xc0,0xb8,0x90,0x0c,0x00,0x00,0x41,0x0f,0x45}},
{model_singleton, {0x48,0x89,0x5c,0x24,0x08,0x57,0x48,0x83,0xec,0x20,0x41,0x0f,0xb6,0xf9,0x45,0x0f,0xb6,0xc8,0x48,0x8b,0xda,0x48,0x85,0xd2,0x74,0x4d,0x48,0x8b,0x02,0x48,0x8d,0x54}},
{engine::card_info_construct, {0x48,0x89,0x5c,0x24,0x08,0x48,0x89,0x74,0x24,0x10,0x57,0x48,0x83,0xec,0x20,0x48,0x8b,0xd9,0xe8,0x89,0x3f,0xf9,0xff,0x48,0x8d,0x3d,0xe6,0x08,0x92,0x01,0x48,0x89}},
{engine::native_text_release, {0x48,0x8b,0x09,0x48,0x8d,0x05,0xaa,0x86,0xd7,0x05,0x48,0x3b,0xc8,0x0f,0x85,0xbd,0x9b,0xff,0xff,0xc3,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc}},
{array_append, {0x40,0x55,0x57,0x41,0x54,0x41,0x55,0x41,0x56,0x48,0x83,0xec,0x20,0x48,0x8b,0x39,0x4c,0x8b,0xca,0x4c,0x8b,0xe1,0x8b,0x47,0xfc,0x0f,0xba,0xf0,0x1f,0x44,0x8b,0xf0}},
{id_construct, {0x48,0xc7,0x01,0x00,0x00,0x00,0x00,0x48,0x8b,0xc1,0xc3,0xcc,0xcc,0xcc,0xcc,0xcc,0xc5,0xf8,0x10,0x41,0x10,0x48,0x8b,0x42,0x08,0x4c,0x8b,0xc9,0xc5,0xf8,0x11,0x00}},
{array_allocate, {0x48,0x89,0x5c,0x24,0x08,0x57,0x48,0x83,0xec,0x20,0x49,0x8b,0xc1,0x49,0x8b,0xd8,0x48,0x8b,0xfa,0x4d,0x85,0xc9,0x75,0x07,0xb2,0x01,0xe8,0xe1,0x26,0x7d,0xfd,0x44}},
{empty_array, {0x48,0x8d,0x05,0x79,0x8d,0x70,0x02,0xc3,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x40,0x53,0x57,0x48,0x83,0xec,0x58,0x48,0x8b,0x05,0xa2,0x88,0x3f,0x03,0x48,0x33}},
{array_free, {0x48,0x8b,0xca,0x33,0xd2,0xe9,0x76,0x49,0x7b,0xfd,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x48,0x8b,0x09,0x48,0x8d,0x05,0xc6,0x84,0x70,0x02,0x48,0x3b,0xc8,0x74,0x14,0xb8}},
{poi_construct, {0x48,0x89,0x5c,0x24,0x08,0x57,0x48,0x83,0xec,0x20,0xc5,0xfc,0x10,0x05,0xbe,0x18,0xa2,0x00,0xc5,0xfc,0x11,0x01,0xc5,0xfc,0x10,0x0d,0xd2,0x18,0xa2,0x00,0xc5,0xfc}},
{poi_destroy, {0x40,0x53,0x48,0x83,0xec,0x20,0x48,0x8b,0xd9,0x48,0x81,0xc1,0x80,0x01,0x00,0x00,0xe8,0xfb,0xce,0x40,0xfe,0x48,0x8d,0x8b,0x70,0x01,0x00,0x00,0xe8,0xaf,0xd0,0xbc}},
{map_register, {0x48,0x89,0x54,0x24,0x10,0x53,0x48,0x83,0xec,0x70,0x44,0x8b,0x41,0x50,0x4c,0x8b,0xca,0x33,0xd2,0x49,0x8b,0xc1,0x49,0xf7,0xf0,0x48,0x8b,0xd9,0x48,0x8b,0x49,0x48}},
{map_unregister, {0x48,0x89,0x5c,0x24,0x20,0x48,0x89,0x54,0x24,0x10,0x55,0x56,0x57,0x41,0x56,0x41,0x57,0x48,0x83,0xec,0x30,0x4c,0x8b,0xfa,0x48,0x8b,0xf1,0x48,0x83,0xc1,0x48,0x48}},
{roster_changed, {0x48,0x83,0xec,0x48,0x48,0x8d,0x4c,0x24,0x60,0xe8,0x92,0x9c,0x1c,0x01,0x48,0x8d,0x4c,0x24,0x60,0xe8,0x48,0x89,0x43,0x04,0x80,0x78,0x28,0x00,0x74,0x33,0x33,0xc9}},
}};
} // namespace dingosdk::game::build::v20260929::native_party