mirror of
https://github.com/Dingo-Shenanigans/ReSkate.git
synced 2026-10-23 11:55:54 +02:00
- reskate.room.open, leave and state, with the room permission: ReSkate walks the game's menu to the Skaters page (its navigation events and RB on an internal scripted pad, as PR 297 and PR 230 did), draws the local skater on the room's floor and hides the room's own skater and board; other players are not sent the room. Extension/World/character_room, the room placement and hiding in skater_animation, and post_native_ui_event made general. - reskate.input.text: what is typed while the plugin's screen is open; while it types, Esc is the plugin's. - Animator Studio opens in its room (the Studio room setting, as the PR's), under its loading screen, or where the skater is when the walk fails; its card's name, trick and numbers are typed into in place.
178 lines
17 KiB
C++
178 lines
17 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;
|
|
// The dispatcher's byte that says it accepts events.
|
|
inline constexpr std::uintptr_t dispatcher_live = 0x28;
|
|
// 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
|