From 335d8ff136f20e60b47b583744916cae5cf50d38 Mon Sep 17 00:00:00 2001 From: praydog Date: Fri, 19 Aug 2022 15:05:08 -0700 Subject: [PATCH] Stage 1 of migration from camelCase to snake_case --- .clang-format | 15 ++ .clang-tidy | 65 ++++++ .gitignore | 4 +- CMakeLists.txt | 21 ++ shared/sdk/BehaviorAppBase.hpp | 3 + shared/sdk/Game.cpp | 4 +- shared/sdk/Game.hpp | 4 +- shared/sdk/hap/VariantMap.hpp | 8 + src/mods/AutomataMPMod.cpp | 38 ++-- src/mods/AutomataMPMod.hpp | 36 +-- src/mods/multiplayer/EntitySync.cpp | 18 +- src/mods/multiplayer/MidHooks.cpp | 96 ++++---- src/mods/multiplayer/MidHooks.hpp | 44 ++-- src/mods/multiplayer/NierClient.cpp | 335 ++++++++++++++-------------- src/mods/multiplayer/PlayerHook.cpp | 21 +- src/mods/multiplayer/PlayerHook.hpp | 6 +- 16 files changed, 409 insertions(+), 309 deletions(-) create mode 100644 .clang-format create mode 100644 .clang-tidy create mode 100644 shared/sdk/hap/VariantMap.hpp diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..e4f0f48 --- /dev/null +++ b/.clang-format @@ -0,0 +1,15 @@ +--- +BasedOnStyle: LLVM +IndentWidth: 4 +ColumnLimit: 140 +--- +Language: Cpp +AccessModifierOffset: -4 +AlignAfterOpenBracket: DontAlign +AlignEscapedNewlines: Left +AllowShortFunctionsOnASingleLine: InlineOnly +ConstructorInitializerAllOnOneLineOrOnePerLine: false +DerivePointerAlignment: false +PointerAlignment: Left +BreakConstructorInitializers: BeforeComma +... diff --git a/.clang-tidy b/.clang-tidy new file mode 100644 index 0000000..64e9174 --- /dev/null +++ b/.clang-tidy @@ -0,0 +1,65 @@ +Checks: -*,readability-identifier-naming,readability-else-after-return +HeaderFilterRegex: '^.*src.*(RE|Mod|FreeCam|FirstPerson|Hook|Developer|Object|Flashlight|utility).*\.hpp$' +# HeaderFilterRegex: '^(.*src.*REContext).*\.hpp$' +CheckOptions: +# Classes, structs, ... + - key: readability-identifier-naming.NamespaceCase + value: lower_case + - key: readability-identifier-naming.ClassCase + value: CamelCase + - key: readability-identifier-naming.StructCase + value: CamelCase + - key: readability-identifier-naming.EnumCase + value: CamelCase + - key: readability-identifier-naming.UnionCase + value: CamelCase + - key: readability-identifier-naming.TypedefCase + value: CamelCase + +# Variables, member variables, ... + - key: readability-identifier-naming.ParameterCase + value: lower_case + - key: readability-identifier-naming.VariableCase + value: lower_case + - key: readability-identifier-naming.MemberCase + value: lower_case + - key: readability-identifier-naming.PublicMemberCase + value: lower_case + - key: readability-identifier-naming.ProtectedMemberCase + value: lower_case + - key: readability-identifier-naming.PrivateMemberCase + value: lower_case + - key: readability-identifier-naming.PrivateMemberSuffix + value: '' + +# Functions, methods, ... + - key: readability-identifier-naming.FunctionCase + value: lower_case + - key: readability-identifier-naming.MethodCase + value: lower_case + +# Constants + - key: readability-identifier-naming.ConstantPrefix + value: '' + - key: readability-identifier-naming.ConstantCase + value: UPPER_CASE + - key: readability-identifier-naming.ConstantMemberPrefix + value: '' + - key: readability-identifier-naming.ConstantMemberCase + value: lower_case + - key: readability-identifier-naming.ConstantParameterPrefix + value: '' + - key: readability-identifier-naming.ConstantParameterCase + value: lower_case + - key: readability-identifier-naming.LocalConstantParameterPrefix + value: '' + - key: readability-identifier-naming.LocalConstantCase + value: lower_case + - key: readability-identifier-naming.ConstexprVariablePrefix + value: '' + - key: readability-identifier-naming.ConstexprVariableCase + value: lower_case + +# Other + - key: readability-braces-around-statements.ShortStatementLines + value: 0 \ No newline at end of file diff --git a/.gitignore b/.gitignore index d13fafe..bdc0319 100644 --- a/.gitignore +++ b/.gitignore @@ -28,4 +28,6 @@ *.app build/* -.vscode/* \ No newline at end of file +.vscode/* +out/* +.vs/* \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index bd6a09d..e18a22a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -373,13 +373,16 @@ list(APPEND sdk_SOURCES "shared/sdk/hap/State.hpp" "shared/sdk/hap/StateObject.hpp" "shared/sdk/hap/TokenCategory.hpp" + "shared/sdk/hap/VariantMap.hpp" "shared/sdk/hap/scene_pos/ScenePosSystem.hpp" "shared/sdk/hap/scene_state/SceneStateSystem.hpp" "shared/sdk/hap/string_t.hpp" + "shared/sdk/lib/Downcastable.hpp" "shared/sdk/lib/HashedString.hpp" "shared/sdk/lib/Noncopyable.hpp" "shared/sdk/regenny/Behavior.hpp" "shared/sdk/regenny/BehaviorAppBase.hpp" + "shared/sdk/regenny/BehaviorExtension.hpp" "shared/sdk/regenny/Camera.hpp" "shared/sdk/regenny/CameraApp.hpp" "shared/sdk/regenny/CameraBase.hpp" @@ -389,17 +392,35 @@ list(APPEND sdk_SOURCES "shared/sdk/regenny/CharacterController.hpp" "shared/sdk/regenny/EModel.hpp" "shared/sdk/regenny/ERunSpeedType.hpp" + "shared/sdk/regenny/Em0000.hpp" "shared/sdk/regenny/Entity.hpp" + "shared/sdk/regenny/ExActionState.hpp" + "shared/sdk/regenny/ExAtkCombo.hpp" + "shared/sdk/regenny/ExBaseInfo.hpp" + "shared/sdk/regenny/ExCatch.hpp" + "shared/sdk/regenny/ExCollision.hpp" + "shared/sdk/regenny/ExExpInfo.hpp" + "shared/sdk/regenny/ExHackingInfo.hpp" + "shared/sdk/regenny/ExLayoutParent.hpp" + "shared/sdk/regenny/ExLockOn.hpp" + "shared/sdk/regenny/ExNpc.hpp" + "shared/sdk/regenny/ExWaypoint.hpp" "shared/sdk/regenny/Matrix4x4f.hpp" "shared/sdk/regenny/Model.hpp" "shared/sdk/regenny/Obj.hpp" "shared/sdk/regenny/Parts.hpp" "shared/sdk/regenny/Pl0000.hpp" + "shared/sdk/regenny/RTL_CRITICAL_SECTION.hpp" "shared/sdk/regenny/UnkEntityData.hpp" "shared/sdk/regenny/Vector3f.hpp" "shared/sdk/regenny/Vector4f.hpp" + "shared/sdk/regenny/WpAnimName.hpp" "shared/sdk/regenny/Xml.hpp" "shared/sdk/regenny/XmlBinary.hpp" + "shared/sdk/regenny/cHitPrim.hpp" + "shared/sdk/regenny/cModelExtendWork.hpp" + "shared/sdk/regenny/cModelExtendWorkBase.hpp" + "shared/sdk/regenny/cObjHit.hpp" "shared/sdk/sys/StringSystem.hpp" ) diff --git a/shared/sdk/BehaviorAppBase.hpp b/shared/sdk/BehaviorAppBase.hpp index 5e8f3bd..b9faa92 100644 --- a/shared/sdk/BehaviorAppBase.hpp +++ b/shared/sdk/BehaviorAppBase.hpp @@ -4,6 +4,9 @@ #include "ScriptFunctions.hpp" #include "Behavior.hpp" +#include "Hw/cVec4.hpp" +#include "hap/VariantMap.hpp" +#include "sys/StringSystem.hpp" #include "lib/HashedString.hpp" namespace sdk { diff --git a/shared/sdk/Game.cpp b/shared/sdk/Game.cpp index 2601a13..a16d14d 100644 --- a/shared/sdk/Game.cpp +++ b/shared/sdk/Game.cpp @@ -5,9 +5,9 @@ #include "Game.hpp" -namespace nier { +namespace sdk { // not loading -bool isLoading() { +bool is_loading() { //return *(uint8_t*)0x1414838E8 != 1; // 2017 version static bool* is_loading_ptr = []() ->bool* { spdlog::info("Searching for isLoading..."); diff --git a/shared/sdk/Game.hpp b/shared/sdk/Game.hpp index af244bf..2936808 100644 --- a/shared/sdk/Game.hpp +++ b/shared/sdk/Game.hpp @@ -2,6 +2,6 @@ #include -namespace nier { - bool isLoading(); +namespace sdk { +bool is_loading(); } \ No newline at end of file diff --git a/shared/sdk/hap/VariantMap.hpp b/shared/sdk/hap/VariantMap.hpp new file mode 100644 index 0000000..029b23a --- /dev/null +++ b/shared/sdk/hap/VariantMap.hpp @@ -0,0 +1,8 @@ +#pragma once + +namespace sdk::hap { +class VariantMap { +public: + // TODO! +}; +} \ No newline at end of file diff --git a/src/mods/AutomataMPMod.cpp b/src/mods/AutomataMPMod.cpp index 7f5001c..23ad144 100644 --- a/src/mods/AutomataMPMod.cpp +++ b/src/mods/AutomataMPMod.cpp @@ -48,7 +48,7 @@ std::optional AutomataMPMod::on_initialize() try { return "Unknown exception"; } -void AutomataMPMod::sendPacket(const enet_uint8* data, size_t size) { +void AutomataMPMod::send_packet(const enet_uint8* data, size_t size) { if (m_client) { m_client->send_packet(0, data, size, ENET_PACKET_FLAG_RELIABLE); } @@ -58,10 +58,10 @@ void AutomataMPMod::display_servers() { const auto now = std::chrono::steady_clock::now(); // Check if server future is ready and parse it into our internal server list. - if (m_serverFuture.valid() && m_serverFuture.wait_for(std::chrono::seconds(0)) == std::future_status::ready) { + if (m_server_future.valid() && m_server_future.wait_for(std::chrono::seconds(0)) == std::future_status::ready) { m_servers.clear(); - const auto response = m_serverFuture.get(); + const auto response = m_server_future.get(); spdlog::info("Got response: {}", response); const auto response_json = nlohmann::json::parse(response); @@ -73,7 +73,7 @@ void AutomataMPMod::display_servers() { new_server_data->ip = ip; new_server_data->name = data["Name"]; - new_server_data->numPlayers = data["NumPlayers"]; + new_server_data->num_players = data["num_players"]; m_servers.push_back(std::move(new_server_data)); } @@ -101,31 +101,31 @@ void AutomataMPMod::display_servers() { ImGui::SameLine(); - const auto made = ImGui::TreeNode((server->name + " (" + std::to_string(server->numPlayers) + " players)").c_str()); + const auto made = ImGui::TreeNode((server->name + " (" + std::to_string(server->num_players) + " players)").c_str()); if (made) { ImGui::Text("IP: %s", server->ip.c_str()); ImGui::Text("Name: %s", server->name.c_str()); - ImGui::Text("Players: %s", std::to_string(server->numPlayers).c_str()); + ImGui::Text("Players: %s", std::to_string(server->num_players).c_str()); ImGui::TreePop(); } ImGui::PopID(); } - if (now - m_lastServerUpdate < std::chrono::seconds(5)) { + if (now - m_last_server_update < std::chrono::seconds(5)) { return; } - if (m_serverFuture.valid()) { - if (m_serverFuture.wait_for(std::chrono::seconds(0)) != std::future_status::ready) { + if (m_server_future.valid()) { + if (m_server_future.wait_for(std::chrono::seconds(0)) != std::future_status::ready) { return; } - m_serverFuture.wait(); + m_server_future.wait(); } - m_serverFuture = std::async(std::launch::async, [this]() -> std::string { + m_server_future = std::async(std::launch::async, [this]() -> std::string { try { HttpClient http{}; @@ -133,11 +133,11 @@ void AutomataMPMod::display_servers() { http.get(servers_url, "", ""); const auto response = http.response(); - m_lastServerUpdate = std::chrono::steady_clock::now(); + m_last_server_update = std::chrono::steady_clock::now(); return response; } catch (...) { - m_lastServerUpdate = std::chrono::steady_clock::now(); + m_last_server_update = std::chrono::steady_clock::now(); return ""; } }); @@ -199,13 +199,13 @@ void AutomataMPMod::on_frame() { } void AutomataMPMod::on_think() { - if (nier::isLoading() || m_wantsDestroyClient) { + if (sdk::is_loading() || m_wants_destroy_client) { if (m_client != nullptr) { m_client->disconnect(); m_client.reset(); } - m_wantsDestroyClient = false; + m_wants_destroy_client = false; return; } @@ -371,7 +371,7 @@ void AutomataMPMod::on_think() { //static uint32_t(*spawnBuddy)(Entity* player) = (decltype(spawnBuddy))0x140245C30; - sharedThink(); + shared_think(); if (utility::was_key_down(VK_F9)) { /*auto old = player->entity->getBuddyHandle(); @@ -421,7 +421,7 @@ void AutomataMPMod::on_think() { } } -void AutomataMPMod::sharedThink() { +void AutomataMPMod::shared_think() { //spdlog::info("Shared think"); //static uint32_t(*changePlayer)(Entity* player) = (decltype(changePlayer))0x1401ED500; @@ -461,8 +461,8 @@ void AutomataMPMod::sharedThink() { }*/ if (controlledEntity->behavior->is_pl0000()) { - m_midHooks.addOverridenEntity(controlledEntity->behavior); - m_playerHook.reHook(controlledEntity->behavior->as()); + m_mid_hooks.add_overriden_entity(controlledEntity->behavior); + m_player_hook.re_hook(controlledEntity->behavior->as()); controlledEntity->behavior->obj_flags() = 0; auto realBuddy = entityList->getByHandle(controlledEntity->behavior->as()->buddy_handle()); diff --git a/src/mods/AutomataMPMod.hpp b/src/mods/AutomataMPMod.hpp index 3163131..bddda78 100644 --- a/src/mods/AutomataMPMod.hpp +++ b/src/mods/AutomataMPMod.hpp @@ -16,27 +16,27 @@ class AutomataMPMod : public Mod { public: static std::shared_ptr get(); - public: + ~AutomataMPMod(); std::string_view get_name() const override { return "AutomataMPMod"; } std::optional on_initialize() override; public: - void sendPacket(const enet_uint8* data, size_t size); + void send_packet(const enet_uint8* data, size_t size); - bool isServer() { + bool is_server() { return m_client != nullptr && m_client->isMasterClient(); } - void onEntityCreated(sdk::Entity* entity, sdk::EntitySpawnParams* data) { + void on_entity_created(sdk::Entity* entity, sdk::EntitySpawnParams* data) { if (m_client != nullptr) { m_client->onEntityCreated(entity, data); } } - void onEntityDeleted(sdk::Entity* entity) { + void on_entity_deleted(sdk::Entity* entity) { if (m_client != nullptr) { m_client->onEntityDeleted(entity); } @@ -45,25 +45,25 @@ class AutomataMPMod : public Mod { void on_draw_ui() override; void on_frame() override; void on_think() override; - void sharedThink(); - void signalDestroyClient() { - m_wantsDestroyClient = true; + void shared_think(); + void signal_destroy_client() { + m_wants_destroy_client = true; } - auto& getClient() const { + auto& get_client() const { return m_client; } private: - std::chrono::high_resolution_clock::time_point m_nextThink; + std::chrono::high_resolution_clock::time_point m_next_think; - bool m_isServer{ false }; - bool m_wantsDestroyClient{false}; + bool m_is_server{ false }; + bool m_wants_destroy_client{false}; - std::mutex m_hookGuard; + std::mutex m_hook_guard; - MidHooks m_midHooks; - PlayerHook m_playerHook; + MidHooks m_mid_hooks; + PlayerHook m_player_hook; std::unique_ptr m_client; @@ -72,12 +72,12 @@ class AutomataMPMod : public Mod { struct ServerData { std::string ip; std::string name; - uint32_t numPlayers; + uint32_t num_players; }; std::vector> m_servers; - std::chrono::steady_clock::time_point m_lastServerUpdate{}; - std::future m_serverFuture; + std::chrono::steady_clock::time_point m_last_server_update{}; + std::future m_server_future; // imgui stuff std::array m_ip_connect_input{}; diff --git a/src/mods/multiplayer/EntitySync.cpp b/src/mods/multiplayer/EntitySync.cpp index f95bef3..cf96827 100644 --- a/src/mods/multiplayer/EntitySync.cpp +++ b/src/mods/multiplayer/EntitySync.cpp @@ -30,7 +30,7 @@ void NetworkEntity::startAnimationHook(sdk::Behavior* behavior, uint32_t anim, u spdlog::info("NETWORKENTITY anim: {}, variant: {}, a3: {}, return: {:x}", anim, variant, a3, (uintptr_t)_ReturnAddress()); auto amp = AutomataMPMod::get(); - auto& client = amp->getClient(); + auto& client = amp->get_client(); auto networkEntity = g_entitySync->getNetworkEntityFromHandle(behavior->get_entity()->handle); @@ -55,7 +55,7 @@ void EntitySync::onEntityCreated(sdk::Entity* entity, sdk::EntitySpawnParams* da addEntity(entity, guid); - AutomataMPMod::get()->getClient()->sendEntityCreate(guid, data); + AutomataMPMod::get()->get_client()->sendEntityCreate(guid, data); /*nier_server::EntitySpawn packet; packet.guid = guid; @@ -87,13 +87,13 @@ void EntitySync::onEntityDeleted(sdk::Entity* entity) { m_handleMap.erase(entity->handle); removeEntity(networkedEntity->getGuid()); - AutomataMPMod::get()->getClient()->sendEntityDestroy(networkedEntity->getGuid()); + AutomataMPMod::get()->get_client()->sendEntityDestroy(networkedEntity->getGuid()); } -void EntitySync::onEnterServer(bool isMasterClient) try { +void EntitySync::onEnterServer(bool is_master_client) try { scoped_lock _(m_mapMutex); - if (isMasterClient) { + if (is_master_client) { auto entityList = sdk::EntityList::get(); if (entityList == nullptr) { @@ -197,13 +197,13 @@ void EntitySync::think() { continue; } - if (AutomataMPMod::get()->isServer()) { + if (AutomataMPMod::get()->is_server()) { /*packet.position = *npc->getPosition(); packet.facing = *npc->getFacing(); packet.facing2 = *npc->getFacing2(); packet.health = *npc->getHealth();*/ - AutomataMPMod::get()->getClient()->sendEntityData(it.first, npc); + AutomataMPMod::get()->get_client()->sendEntityData(it.first, npc); } else { npc->position() = *(Vector3f*)&packet.position(); @@ -217,10 +217,10 @@ void EntitySync::think() { // genius moment try { - const auto isMasterClient = AutomataMPMod::get()->isServer(); + const auto is_master_client = AutomataMPMod::get()->is_server(); // Delete any entities that are not supposed to be networked. - if (!isMasterClient) { + if (!is_master_client) { auto entityList = sdk::EntityList::get(); if (entityList == nullptr) { diff --git a/src/mods/multiplayer/MidHooks.cpp b/src/mods/multiplayer/MidHooks.cpp index ee664c4..fcbbb31 100644 --- a/src/mods/multiplayer/MidHooks.cpp +++ b/src/mods/multiplayer/MidHooks.cpp @@ -21,7 +21,7 @@ using namespace std; -MidHooks* g_MidHooks = nullptr; +MidHooks* g_mid_hooks = nullptr; uintptr_t get_on_update_function() { static uintptr_t on_update_function = []() -> uintptr_t { @@ -140,7 +140,7 @@ uintptr_t get_entity_terminate_fn() { MidHooks::MidHooks() { spdlog::info("[MidHooks] Initializing..."); - g_MidHooks = this; + g_mid_hooks = this; // required to allow button to be held down without resetting /*m_hook.hook(0x140262B22, [=](const VehHook::RuntimeInfo& info) { @@ -154,29 +154,29 @@ MidHooks::MidHooks() { });*/ // Early version hooks - /*addHook(0x140263006, &MidHooks::onProcessedButtons); - addHook(0x1404F9AA0, &MidHooks::onPreEntitySpawn); - addHook(0x1404F9BE9, &MidHooks::onPostEntitySpawn); - addHook(0x1404F8DE0, &MidHooks::onEntityTerminate); - addHook(0x140519460, &MidHooks::onUpdate);*/ + /*add_hook(0x140263006, &MidHooks::on_processed_buttons); + add_hook(0x1404F9AA0, &MidHooks::onPreEntitySpawn); + add_hook(0x1404F9BE9, &MidHooks::onPostEntitySpawn); + add_hook(0x1404F8DE0, &MidHooks::on_entity_terminate); + add_hook(0x140519460, &MidHooks::on_update);*/ - /*addHook(0x140263006, &MidHooks::onProcessedButtons); - addHook(0x1404F9AA0, &MidHooks::onPreEntitySpawn); - addHook(0x1404F9BE9, &MidHooks::onPostEntitySpawn); - addHook(0x1404F8DE0, &MidHooks::onEntityTerminate);*/ + /*add_hook(0x140263006, &MidHooks::on_processed_buttons); + add_hook(0x1404F9AA0, &MidHooks::onPreEntitySpawn); + add_hook(0x1404F9BE9, &MidHooks::onPostEntitySpawn); + add_hook(0x1404F8DE0, &MidHooks::on_entity_terminate);*/ const auto [spawn_fn, spawn_this] = sdk::EntityList::getSpawnEntityFn(); - m_entitySpawnHook = addInlineHook((uintptr_t)spawn_fn, &MidHooks::entitySpawnHook); - addHook(get_entity_terminate_fn(), &MidHooks::onEntityTerminate); + m_entity_spawn_hook = add_inline_hook((uintptr_t)spawn_fn, &MidHooks::entity_spawn_hook); + add_hook(get_entity_terminate_fn(), &MidHooks::on_entity_terminate); // todo: hook the other version of the terminate function (the script function) - addHook(get_on_update_function(), &MidHooks::onUpdate); - addHook(get_on_processed_buttons(), &MidHooks::onProcessedButtons); + add_hook(get_on_update_function(), &MidHooks::on_update); + add_hook(get_on_processed_buttons(), &MidHooks::on_processed_buttons); - addHook(get_on_set_held_flags(), [](safetyhook::Context& context) { + add_hook(get_on_set_held_flags(), [](safetyhook::Context& context) { auto entity = Address(context.rcx).get(-0xCA0).as(); const auto& amp = AutomataMPMod::get(); - const auto& client = amp->getClient(); + const auto& client = amp->get_client(); if (client == nullptr) { return; @@ -200,14 +200,14 @@ MidHooks::MidHooks() { spdlog::info("[MidHooks] Initialized."); } -void MidHooks::onProcessedButtons(safetyhook::Context& context) { +void MidHooks::on_processed_buttons(safetyhook::Context& context) { // OLD VERSION USES R8. THE REGISTER IS THE CHARACTER CONTROLLER OF THE ENTITY. //auto entity = Address(info.context->R8).get(-0xCA0).as(); auto entity = Address(context.rbx).get(-0xCA0).as(); - if (m_overridenEntities.count(entity) != 0) { + if (m_overriden_entities.count(entity) != 0) { const auto amp = AutomataMPMod::get(); - auto& client = amp->getClient(); + auto& client = amp->get_client(); if (client == nullptr) { return; @@ -222,14 +222,14 @@ void MidHooks::onProcessedButtons(safetyhook::Context& context) { } } -sdk::Entity* MidHooks::onEntitySpawn(void* rcx, void* rdx) { - scoped_lock _(m_spawnMutex); +sdk::Entity* MidHooks::on_entity_spawn(void* rcx, void* rdx) { + scoped_lock _(m_spawn_mutex); auto spawnParams = (sdk::EntitySpawnParams*)rdx; - auto entity = m_entitySpawnHook->call(rcx, rdx); + auto entity = m_entity_spawn_hook->call(rcx, rdx); if (entity) { - if (s_ignoreSpawn) { + if (s_ignore_spawn) { return entity; } @@ -239,22 +239,22 @@ sdk::Entity* MidHooks::onEntitySpawn(void* rcx, void* rdx) { // spawned client-side. if (entity->behavior->is_networkable()) { spdlog::info("[MidHooks] Spawned enemy: {}", spawnParams->name); - AutomataMPMod::get()->onEntityCreated(entity, spawnParams); + AutomataMPMod::get()->on_entity_created(entity, spawnParams); } } return entity; } -void MidHooks::onEntityTerminate(safetyhook::Context& context) { - scoped_lock _(m_spawnMutex); +void MidHooks::on_entity_terminate(safetyhook::Context& context) { + scoped_lock _(m_spawn_mutex); auto ent = (sdk::Entity*)context.rcx; - AutomataMPMod::get()->onEntityDeleted(ent); + AutomataMPMod::get()->on_entity_deleted(ent); } -// Potential OnUpdate candidates +// Potential on_update candidates /* Function calls: 0x0000000140519460: 1 @@ -280,7 +280,7 @@ Function calls: 0x0000000140938030: 5 */ -void MidHooks::onUpdate(safetyhook::Context& info) { +void MidHooks::on_update(safetyhook::Context& info) { auto entityList = sdk::EntityList::get(); auto player = entityList->getByName("Player"); @@ -294,7 +294,7 @@ void MidHooks::onUpdate(safetyhook::Context& info) { mod->on_think(); } - if (utility::was_key_down(VK_F1) && AutomataMPMod::get()->isServer()) { + if (utility::was_key_down(VK_F1) && AutomataMPMod::get()->is_server()) { /*static std::unordered_map models{ { EModel::MODEL_2B, EModel::MODEL_9S }, { EModel::MODEL_9S, EModel::MODEL_A2 }, { EModel::MODEL_A2, EModel::MODEL_2B }}; @@ -338,12 +338,12 @@ void MidHooks::onUpdate(safetyhook::Context& info) { } } -void MidHooks::addOverridenEntity(sdk::Behavior* ent) { - m_overridenEntities.insert(ent); +void MidHooks::add_overriden_entity(sdk::Behavior* ent) { + m_overriden_entities.insert(ent); } -void MidHooks::addHook(uintptr_t address, MemberMidCallbackFn cb) { - std::scoped_lock _{m_hookMutex}; +void MidHooks::add_hook(uintptr_t address, MemberMidCallbackFn cb) { + std::scoped_lock _{m_hook_mutex}; auto factory = SafetyHookFactory::init(); auto builder = factory->acquire(); @@ -367,20 +367,20 @@ void MidHooks::addHook(uintptr_t address, MemberMidCallbackFn cb) { uintptr_t code_addr{}; m_jit.add(&code_addr, &code); - m_midHooks.emplace_back(builder.create_mid((void*)address, (safetyhook::MidHookFn)code_addr)); + m_mid_hooks.emplace_back(builder.create_mid((void*)address, (safetyhook::MidHookFn)code_addr)); } -void MidHooks::addHook(uintptr_t address, safetyhook::MidHookFn cb) { - std::scoped_lock _{m_hookMutex}; +void MidHooks::add_hook(uintptr_t address, safetyhook::MidHookFn cb) { + std::scoped_lock _{m_hook_mutex}; auto factory = SafetyHookFactory::init(); auto builder = factory->acquire(); - m_midHooks.emplace_back(builder.create_mid((void*)address, cb)); + m_mid_hooks.emplace_back(builder.create_mid((void*)address, cb)); } -void MidHooks::addHook(uintptr_t address, MemberInlineCallbackFn cb) { - std::scoped_lock _{m_hookMutex}; +void MidHooks::add_hook(uintptr_t address, MemberInlineCallbackFn cb) { + std::scoped_lock _{m_hook_mutex}; auto factory = SafetyHookFactory::init(); auto builder = factory->acquire(); @@ -412,19 +412,19 @@ void MidHooks::addHook(uintptr_t address, MemberInlineCallbackFn cb) { m_jit.add(&code_addr, &code); result->hook = builder.create_inline((void*)address, (void*)code_addr); - m_inlineHooksWithParams.emplace_back(std::move(result)); + m_inline_hooks_with_params.emplace_back(std::move(result)); } -safetyhook::InlineHook* MidHooks::addInlineHook(uintptr_t address, void* cb) { - std::scoped_lock _{m_hookMutex}; +safetyhook::InlineHook* MidHooks::add_inline_hook(uintptr_t address, void* cb) { + std::scoped_lock _{m_hook_mutex}; auto factory = SafetyHookFactory::init(); auto builder = factory->acquire(); - m_inlineHooks.emplace_back(builder.create_inline((void*)address, cb)); - return m_inlineHooks.back().get(); + m_inline_hooks.emplace_back(builder.create_inline((void*)address, cb)); + return m_inline_hooks.back().get(); } -sdk::Entity* MidHooks::entitySpawnHook(void* rcx, void* rdx) { - return g_MidHooks->onEntitySpawn(rcx, rdx); +sdk::Entity* MidHooks::entity_spawn_hook(void* rcx, void* rdx) { + return g_mid_hooks->on_entity_spawn(rcx, rdx); } diff --git a/src/mods/multiplayer/MidHooks.hpp b/src/mods/multiplayer/MidHooks.hpp index 06e8fe0..0221948 100644 --- a/src/mods/multiplayer/MidHooks.hpp +++ b/src/mods/multiplayer/MidHooks.hpp @@ -29,40 +29,40 @@ class MidHooks { public: MidHooks(); - void onProcessedButtons(safetyhook::Context& info); - void onPreEntitySpawn(safetyhook::Context& info); - void onPostEntitySpawn(safetyhook::Context& info); - sdk::Entity* onEntitySpawn(void* rcx, void* rdx); - void onEntityTerminate(safetyhook::Context& info); - void onUpdate(safetyhook::Context& info); + void on_processed_buttons(safetyhook::Context& info); + void on_pre_entity_spawn(safetyhook::Context& info); + void on_post_entity_spawn(safetyhook::Context& info); + sdk::Entity* on_entity_spawn(void* rcx, void* rdx); + void on_entity_terminate(safetyhook::Context& info); + void on_update(safetyhook::Context& info); - void addOverridenEntity(sdk::Behavior* ent); + void add_overriden_entity(sdk::Behavior* ent); typedef void (MidHooks::*MemberMidCallbackFn)(safetyhook::Context&); typedef void (MidHooks::*MemberInlineCallbackFn)(HookAndParams&); - static inline bool s_ignoreSpawn{false}; + static inline bool s_ignore_spawn{false}; private: - void addHook(uintptr_t address, MemberMidCallbackFn cb); - void addHook(uintptr_t address, safetyhook::MidHookFn cb); - void addHook(uintptr_t address, MemberInlineCallbackFn cb); // NOT thread safe yet!!!! + void add_hook(uintptr_t address, MemberMidCallbackFn cb); + void add_hook(uintptr_t address, safetyhook::MidHookFn cb); + void add_hook(uintptr_t address, MemberInlineCallbackFn cb); // NOT thread safe yet!!!! - safetyhook::InlineHook* addInlineHook(uintptr_t address, void* cb); + safetyhook::InlineHook* add_inline_hook(uintptr_t address, void* cb); private: - std::recursive_mutex m_hookMutex{}; - + std::recursive_mutex m_hook_mutex{}; + asmjit::JitRuntime m_jit{}; - std::vector> m_midHooks; - std::vector> m_inlineHooksWithParams; - std::vector> m_inlineHooks; + std::vector> m_mid_hooks; + std::vector> m_inline_hooks_with_params; + std::vector> m_inline_hooks; - static sdk::Entity* entitySpawnHook(void* rcx, void* rdx); - safetyhook::InlineHook* m_entitySpawnHook{}; + static sdk::Entity* entity_spawn_hook(void* rcx, void* rdx); + safetyhook::InlineHook* m_entity_spawn_hook{}; - std::unordered_set m_overridenEntities; + std::unordered_set m_overriden_entities; - std::recursive_mutex m_spawnMutex; - std::unordered_map m_threadIdToSpawnParams; + std::recursive_mutex m_spawn_mutex; + std::unordered_map m_thread_id_to_spawn_params; }; \ No newline at end of file diff --git a/src/mods/multiplayer/NierClient.cpp b/src/mods/multiplayer/NierClient.cpp index 157272f..367478d 100644 --- a/src/mods/multiplayer/NierClient.cpp +++ b/src/mods/multiplayer/NierClient.cpp @@ -53,23 +53,23 @@ void NierClient::think() { // Synchronize the players. for (auto& it : m_players) { - const auto& networkedPlayer = it.second; + const auto& networked_player = it.second; // Do not update the local player here. - if (networkedPlayer == nullptr || networkedPlayer->getGuid() == m_guid) { + if (networked_player == nullptr || networked_player->getGuid() == m_guid) { continue; } - auto npc = networkedPlayer->getEntity(); + auto npc = networked_player->getEntity(); if (npc == nullptr) { - spdlog::error("NPC for player {} not found", networkedPlayer->getGuid()); + spdlog::error("NPC for player {} not found", networked_player->getGuid()); continue; } //spdlog::info("Synchronizing player {}", networkedPlayer->getGuid()); - auto& data = networkedPlayer->getPlayerData(); + auto& data = networked_player->getPlayerData(); npc->run_speed_type() = regenny::ERunSpeedType::SPEED_PLAYER; npc->flashlight() = data.flashlight(); npc->speed() = data.speed(); @@ -170,7 +170,7 @@ void NierClient::on_frame() { void NierClient::onConnect() { if (auto ents = sdk::EntityList::get(); ents == nullptr || ents->getPossessedEntity() == nullptr) { - AutomataMPMod::get()->signalDestroyClient(); + AutomataMPMod::get()->signal_destroy_client(); spdlog::error("Please spawn a player before connecting to the server."); return; } @@ -211,19 +211,19 @@ void NierClient::onPacketReceived(const nier::Packet* packet) { return; } - const nier::PlayerPacket* playerPacket = nullptr; + const nier::PlayerPacket* player_packet = nullptr; // Bounced player packets. if (packet->id() > nier::PacketType_ID_CLIENT_START && packet->id() < nier::PacketType_ID_CLIENT_END) { - playerPacket = flatbuffers::GetRoot(packet->data()->data()); - flatbuffers::Verifier playerVerif(packet->data()->data(), packet->data()->size()); + player_packet = flatbuffers::GetRoot(packet->data()->data()); + flatbuffers::Verifier player_verif(packet->data()->data(), packet->data()->size()); - if (!playerPacket->Verify(playerVerif)) { + if (!player_packet->Verify(player_verif)) { spdlog::error("Invalid player packet {} ({})", packet->id(), nier::EnumNamePacketType(packet->id())); return; } - onPlayerPacketReceived(packet->id(), playerPacket); + onPlayerPacketReceived(packet->id(), player_packet); return; } @@ -262,15 +262,15 @@ void NierClient::onPacketReceived(const nier::Packet* packet) { case nier::PacketType_ID_DESTROY_ENTITY: [[fallthrough]]; case nier::PacketType_ID_ENTITY_DATA: [[fallthrough]]; case nier::PacketType_ID_ENTITY_ANIMATION_START: { - const auto entityPacket = flatbuffers::GetRoot(packet->data()->data()); - flatbuffers::Verifier entityVerif(packet->data()->data(), packet->data()->size()); + const auto entity_packet = flatbuffers::GetRoot(packet->data()->data()); + flatbuffers::Verifier entity_verif(packet->data()->data(), packet->data()->size()); - if (!entityPacket->Verify(entityVerif)) { + if (!entity_packet->Verify(entity_verif)) { spdlog::error("Invalid entity packet {} ({})", packet->id(), nier::EnumNamePacketType(packet->id())); return; } - onEntityPacketReceived(packet->id(), entityPacket); + onEntityPacketReceived(packet->id(), entity_packet); break; } @@ -287,72 +287,72 @@ void NierClient::onPacketReceived(const nier::Packet* packet) { }*/ } -void NierClient::onPlayerPacketReceived(nier::PacketType packetType, const nier::PlayerPacket* packet) { - spdlog::info("Player packet {} received from {}", nier::EnumNamePacketType(packetType), packet->guid()); +void NierClient::onPlayerPacketReceived(nier::PacketType packet_type, const nier::PlayerPacket* packet) { + spdlog::info("Player packet {} received from {}", nier::EnumNamePacketType(packet_type), packet->guid()); - switch (packetType) { - case nier::PacketType_ID_PLAYER_DATA: { - if (!handlePlayerData(packet)) { - spdlog::error("Failed to handle player data"); - } - - break; + switch (packet_type) { + case nier::PacketType_ID_PLAYER_DATA: { + if (!handlePlayerData(packet)) { + spdlog::error("Failed to handle player data"); } - case nier::PacketType_ID_ANIMATION_START: { - if (!handleAnimationStart(packet)) { - spdlog::error("Failed to handle animation start"); - } - break; + break; + } + case nier::PacketType_ID_ANIMATION_START: { + if (!handleAnimationStart(packet)) { + spdlog::error("Failed to handle animation start"); } - case nier::PacketType_ID_BUTTONS: { - if (!handleButtons(packet)) { - spdlog::error("Failed to handle buttons"); - } - break; + break; + } + case nier::PacketType_ID_BUTTONS: { + if (!handleButtons(packet)) { + spdlog::error("Failed to handle buttons"); } - default: - spdlog::error("Unknown player packet type {} ({})", packetType, nier::EnumNamePacketType(packetType)); - break; + + break; + } + default: + spdlog::error("Unknown player packet type {} ({})", packet_type, nier::EnumNamePacketType(packet_type)); + break; } } -void NierClient::onEntityPacketReceived(nier::PacketType packetType, const nier::EntityPacket* packet) { - spdlog::info("Entity packet {} received from {}", nier::EnumNamePacketType(packetType), packet->guid()); +void NierClient::onEntityPacketReceived(nier::PacketType packet_type, const nier::EntityPacket* packet) { + spdlog::info("Entity packet {} received from {}", nier::EnumNamePacketType(packet_type), packet->guid()); - switch (packetType) { - case nier::PacketType_ID_SPAWN_ENTITY: { - if (!handleCreateEntity(packet)) { - spdlog::error("Failed to handle spawn entity"); - } - - break; + switch (packet_type) { + case nier::PacketType_ID_SPAWN_ENTITY: { + if (!handleCreateEntity(packet)) { + spdlog::error("Failed to handle spawn entity"); } - case nier::PacketType_ID_DESTROY_ENTITY: { - if (!handleDestroyEntity(packet)) { - spdlog::error("Failed to handle destroy entity"); - } - break; + break; + } + case nier::PacketType_ID_DESTROY_ENTITY: { + if (!handleDestroyEntity(packet)) { + spdlog::error("Failed to handle destroy entity"); } - case nier::PacketType_ID_ENTITY_DATA: { - if (!handleEntityData(packet)) { - spdlog::error("Failed to handle entity data"); - } - break; + break; + } + case nier::PacketType_ID_ENTITY_DATA: { + if (!handleEntityData(packet)) { + spdlog::error("Failed to handle entity data"); } - case nier::PacketType_ID_ENTITY_ANIMATION_START: { - if (!handleEntityAnimationStart(packet)) { - spdlog::error("Failed to handle entity animation start"); - } - break; + break; + } + case nier::PacketType_ID_ENTITY_ANIMATION_START: { + if (!handleEntityAnimationStart(packet)) { + spdlog::error("Failed to handle entity animation start"); } - default: - spdlog::error("Unknown entity packet type {} ({})", packetType, nier::EnumNamePacketType(packetType)); - break; + + break; + } + default: + spdlog::error("Unknown entity packet type {} ({})", packet_type, nier::EnumNamePacketType(packet_type)); + break; } } @@ -369,16 +369,16 @@ void NierClient::sendPacket(nier::PacketType id, const uint8_t* data, size_t siz dataoffs = builder.EndVector(size); } - auto packetBuilder = nier::PacketBuilder(builder); + auto packet_builder = nier::PacketBuilder(builder); - packetBuilder.add_magic(1347240270); - packetBuilder.add_id(id); + packet_builder.add_magic(1347240270); + packet_builder.add_id(id); if (data != nullptr && size > 0) { - packetBuilder.add_data(dataoffs); + packet_builder.add_data(dataoffs); } - builder.Finish(packetBuilder.Finish()); + builder.Finish(packet_builder.Finish()); this->send_packet(0, builder.GetBufferPointer(), builder.GetSize(), ENET_PACKET_FLAG_RELIABLE); } @@ -397,9 +397,9 @@ void NierClient::sendButtons(const uint32_t* buttons) { flatbuffers::FlatBufferBuilder builder(0); const auto dataoffs = builder.CreateVector(buttons, sdk::Pl0000::EButtonIndex::INDEX_MAX); - nier::Buttons::Builder dataBuilder(builder); - dataBuilder.add_buttons(dataoffs); - builder.Finish(dataBuilder.Finish()); + nier::Buttons::Builder data_builder(builder); + data_builder.add_buttons(dataoffs); + builder.Finish(data_builder.Finish()); sendPacket(nier::PacketType_ID_BUTTONS, builder.GetBufferPointer(), builder.GetSize()); } @@ -408,10 +408,10 @@ void NierClient::sendEntityPacket(nier::PacketType id, uint32_t guid, const uint flatbuffers::FlatBufferBuilder builder(0); const auto dataoffs = builder.CreateVector(data, size); - nier::EntityPacket::Builder dataBuilder(builder); - dataBuilder.add_guid(guid); - dataBuilder.add_data(dataoffs); - builder.Finish(dataBuilder.Finish()); + nier::EntityPacket::Builder data_builder(builder); + data_builder.add_guid(guid); + data_builder.add_data(dataoffs); + builder.Finish(data_builder.Finish()); sendPacket(id, builder.GetBufferPointer(), builder.GetSize()); } @@ -426,16 +426,16 @@ void NierClient::sendEntityCreate(uint32_t guid, sdk::EntitySpawnParams* data) { flatbuffers::FlatBufferBuilder builder(0); const auto name = builder.CreateString(data->name); - nier::EntitySpawnParams::Builder dataBuilder(builder); - dataBuilder.add_name(name); - dataBuilder.add_model(data->model); - dataBuilder.add_model2(data->model2); + nier::EntitySpawnParams::Builder data_builder(builder); + data_builder.add_name(name); + data_builder.add_model(data->model); + data_builder.add_model2(data->model2); if (data->matrix != nullptr) { - dataBuilder.add_positional((nier::EntitySpawnPositionalData*)data->matrix); + data_builder.add_positional((nier::EntitySpawnPositionalData*)data->matrix); } - builder.Finish(dataBuilder.Finish()); + builder.Finish(data_builder.Finish()); sendEntityPacket(nier::PacketType_ID_SPAWN_ENTITY, guid, builder.GetBufferPointer(), builder.GetSize()); } @@ -456,16 +456,13 @@ void NierClient::sendEntityData(uint32_t guid, sdk::BehaviorAppBase* entity) { } flatbuffers::FlatBufferBuilder builder(0); - nier::EntityData newData( - entity->facing(), + nier::EntityData new_data(entity->facing(), 0.0f, // entity is not a player. - entity->health(), - *(nier::Vector3f*)&entity->position() - ); + entity->health(), *(nier::Vector3f*)&entity->position()); - builder.Finish(builder.CreateStruct(newData)); + builder.Finish(builder.CreateStruct(new_data)); - m_networkEntities->processEntityData(guid, &newData); + m_networkEntities->processEntityData(guid, &new_data); sendEntityPacket(nier::PacketType_ID_ENTITY_DATA, guid, builder.GetBufferPointer(), builder.GetSize()); } @@ -509,15 +506,15 @@ void NierClient::sendHello() { const auto name_pkt = builder.CreateString(m_helloName); const auto pwd_pkt = builder.CreateString(m_password); - nier::HelloBuilder helloBuilder(builder); - helloBuilder.add_major(nier::VersionMajor_Value); - helloBuilder.add_minor(nier::VersionMinor_Value); - helloBuilder.add_patch(nier::VersionPatch_Value); - helloBuilder.add_name(name_pkt); - helloBuilder.add_password(pwd_pkt); - helloBuilder.add_model(possessed->behavior->model_index()); + nier::HelloBuilder hello_builder(builder); + hello_builder.add_major(nier::VersionMajor_Value); + hello_builder.add_minor(nier::VersionMinor_Value); + hello_builder.add_patch(nier::VersionPatch_Value); + hello_builder.add_name(name_pkt); + hello_builder.add_password(pwd_pkt); + hello_builder.add_model(possessed->behavior->model_index()); - builder.Finish(helloBuilder.Finish()); + builder.Finish(hello_builder.Finish()); sendPacket(nier::PacketType_ID_HELLO, builder.GetBufferPointer(), builder.GetSize()); m_helloSent = true; @@ -535,13 +532,13 @@ void NierClient::updateLocalPlayerData() { return; } - auto entityList = sdk::EntityList::get(); + auto entity_list = sdk::EntityList::get(); - if (entityList == nullptr) { + if (entity_list == nullptr) { return; } - auto player = entityList->getPossessedEntity(); + auto player = entity_list->getPossessedEntity(); if (player == nullptr) { return; @@ -572,19 +569,11 @@ void NierClient::sendPlayerData() { return; } - nier::PlayerData playerData( - entity->flashlight(), - entity->speed(), - entity->facing(), - entity->facing2(), - entity->weapon_index(), - entity->pod_index(), - entity->character_controller().held_flags, - *(nier::Vector3f*)&entity->position() - ); + nier::PlayerData player_data(entity->flashlight(), entity->speed(), entity->facing(), entity->facing2(), entity->weapon_index(), + entity->pod_index(), entity->character_controller().held_flags, *(nier::Vector3f*)&entity->position()); flatbuffers::FlatBufferBuilder builder{}; - const auto offs = builder.CreateStruct(playerData); + const auto offs = builder.CreateStruct(player_data); builder.Finish(offs); sendPacket(nier::PacketType_ID_PLAYER_DATA, builder.GetBufferPointer(), builder.GetSize()); @@ -603,11 +592,11 @@ bool NierClient::handleWelcome(const nier::Packet* packet) { m_isMasterClient = welcome->isMasterClient(); m_guid = welcome->guid(); - const auto highestGuid = welcome->highestEntityGuid(); + const auto highest_guid = welcome->highestEntityGuid(); spdlog::info("Welcome packet received, isMasterClient: {}, guid: {}", m_isMasterClient, m_guid); - m_networkEntities = std::make_unique(highestGuid); + m_networkEntities = std::make_unique(highest_guid); m_networkEntities->onEnterServer(m_isMasterClient); return true; @@ -616,31 +605,31 @@ bool NierClient::handleWelcome(const nier::Packet* packet) { bool NierClient::handleCreatePlayer(const nier::Packet* packet) { spdlog::info("Create player packet received"); - auto entityList = sdk::EntityList::get(); + auto entity_list = sdk::EntityList::get(); - if (entityList == nullptr) { + if (entity_list == nullptr) { spdlog::error("Entity list not found while handling create player packet"); return false; } - auto possessed = entityList->getPossessedEntity(); + auto possessed = entity_list->getPossessedEntity(); if (possessed == nullptr) { spdlog::error("Possessed entity not found while handling create player packet"); return false; } - auto localplayer = entityList->getByName("Player"); + auto localplayer = entity_list->getByName("Player"); if (localplayer == nullptr || localplayer->behavior == nullptr) { spdlog::info("Player not found while handling create player packet"); return false; } - const auto createPlayer = flatbuffers::GetRoot(packet->data()->data()); + const auto create_player = flatbuffers::GetRoot(packet->data()->data()); auto verif = flatbuffers::Verifier(packet->data()->data(), packet->data()->size()); - if (!createPlayer->Verify(verif)) { + if (!create_player->Verify(verif)) { spdlog::error("Invalid create player packet"); return false; } @@ -648,20 +637,20 @@ bool NierClient::handleCreatePlayer(const nier::Packet* packet) { { std::scoped_lock _{m_playersMtx}; - auto newPlayer = std::make_unique(); - newPlayer->setGuid(createPlayer->guid()); - newPlayer->setName(createPlayer->name()->c_str()); + auto new_player = std::make_unique(); + new_player->setGuid(create_player->guid()); + new_player->setName(create_player->name()->c_str()); - m_players[createPlayer->guid()] = std::move(newPlayer); + m_players[create_player->guid()] = std::move(new_player); } // we don't want to spawn ourselves - if (createPlayer->guid() != m_guid) { - spdlog::info("Spawning player {}, {}", createPlayer->guid(), createPlayer->name()->c_str()); + if (create_player->guid() != m_guid) { + spdlog::info("Spawning player {}, {}", create_player->guid(), create_player->name()->c_str()); - MidHooks::s_ignoreSpawn = true; - auto ent = entityList->spawnEntity("partner", createPlayer->model(), possessed->behavior->position()); - MidHooks::s_ignoreSpawn = false; + MidHooks::s_ignore_spawn = true; + auto ent = entity_list->spawnEntity("partner", create_player->model(), possessed->behavior->position()); + MidHooks::s_ignore_spawn = false; if (ent != nullptr) { std::scoped_lock _{m_playersMtx}; @@ -684,8 +673,8 @@ bool NierClient::handleCreatePlayer(const nier::Packet* packet) { ent->behavior->as()->setBuddyFromNpc(); ent->behavior->obj_flags() = 0; - m_players[createPlayer->guid()]->setStartTick(ent->behavior->tick_count()); - m_players[createPlayer->guid()]->setHandle(ent->handle); + m_players[create_player->guid()]->setStartTick(ent->behavior->tick_count()); + m_players[create_player->guid()]->setHandle(ent->handle); spdlog::info(" player assigned handle {:x}", ent->handle); } else { @@ -701,27 +690,27 @@ bool NierClient::handleCreatePlayer(const nier::Packet* packet) { bool NierClient::handleDestroyPlayer(const nier::Packet* packet) { spdlog::info("Destroy player packet received"); - const auto destroyPlayer = flatbuffers::GetRoot(packet->data()->data()); + const auto destroy_player = flatbuffers::GetRoot(packet->data()->data()); std::scoped_lock _{m_playersMtx}; - if (m_players.contains(destroyPlayer->guid()) && m_players[destroyPlayer->guid()] != nullptr) { - auto entityList = sdk::EntityList::get(); + if (m_players.contains(destroy_player->guid()) && m_players[destroy_player->guid()] != nullptr) { + auto entity_list = sdk::EntityList::get(); - if (entityList == nullptr) { + if (entity_list == nullptr) { // not an error, we just won't actually delete any entity from the entity list spdlog::info("Entity list not found while handling destroy player packet"); } else { - auto localplayer = entityList->getByName("Player"); - auto ent = entityList->getByHandle(m_players[destroyPlayer->guid()]->getHandle()); + auto localplayer = entity_list->getByName("Player"); + auto ent = entity_list->getByHandle(m_players[destroy_player->guid()]->getHandle()); if (ent != nullptr && ent != localplayer) { ent->behavior->terminate(); } } } - m_players[destroyPlayer->guid()].reset(); - m_players.erase(destroyPlayer->guid()); + m_players[destroy_player->guid()].reset(); + m_players.erase(destroy_player->guid()); return true; } @@ -737,9 +726,9 @@ bool NierClient::handleCreateEntity(const nier::EntityPacket* packet) { return false; } - auto entityList = sdk::EntityList::get(); + auto entity_list = sdk::EntityList::get(); - if (entityList != nullptr) { + if (entity_list != nullptr) { sdk::EntitySpawnParams params{}; auto matrix = spawn->positional() != nullptr ? *(sdk::EntitySpawnParams::PositionalData*)spawn->positional() : sdk::EntitySpawnParams::PositionalData{}; params.matrix = &matrix; @@ -753,17 +742,17 @@ bool NierClient::handleCreateEntity(const nier::EntityPacket* packet) { //auto ent = entityList->spawnEntity(spawn->name()->c_str(), spawn->model(), pos); // Allows the client to spawn an entity. - MidHooks::s_ignoreSpawn = true; - auto ent = entityList->spawnEntity(params); - MidHooks::s_ignoreSpawn = false; + MidHooks::s_ignore_spawn = true; + auto ent = entity_list->spawnEntity(params); + MidHooks::s_ignore_spawn = false; if (ent != nullptr) { //ent->entity->setSuspend(false); spdlog::info(" Entity spawned @ {:x}", (uintptr_t)ent); - auto newNetworkEnt = m_networkEntities->addEntity(ent, packet->guid()); + auto new_network_ent = m_networkEntities->addEntity(ent, packet->guid()); - if (newNetworkEnt != nullptr) { + if (new_network_ent != nullptr) { spdlog::info(" Network entity created"); } } else { @@ -785,8 +774,8 @@ bool NierClient::handleDestroyEntity(const nier::EntityPacket* packet) { bool NierClient::handleEntityData(const nier::EntityPacket* packet) { spdlog::info("Entity data packet received"); - const auto entityData = flatbuffers::GetRoot(packet->data()->data()); - m_networkEntities->processEntityData(packet->guid(), entityData); + const auto entity_data = flatbuffers::GetRoot(packet->data()->data()); + m_networkEntities->processEntityData(packet->guid(), entity_data); return true; } @@ -795,18 +784,18 @@ bool NierClient::handleEntityAnimationStart(const nier::EntityPacket* packet) { spdlog::info("Entity animation start packet received"); const auto guid = packet->guid(); - auto entityNetworked = m_networkEntities->getNetworkEntityFromGuid(guid); + auto entity_networked = m_networkEntities->getNetworkEntityFromGuid(guid); - if (entityNetworked == nullptr) { + if (entity_networked == nullptr) { spdlog::error(" (nullptr) Entity data packet received for unknown entity {}", guid); return false; } - auto animationData = flatbuffers::GetRoot(packet->data()->data()); - auto npc = entityNetworked->getEntity() != nullptr ? entityNetworked->getEntity()->behavior : nullptr; + auto animation_data = flatbuffers::GetRoot(packet->data()->data()); + auto npc = entity_networked->getEntity() != nullptr ? entity_networked->getEntity()->behavior : nullptr; if (npc != nullptr) { - switch (animationData->anim()) { + switch (animation_data->anim()) { case sdk::EAnimation::INVALID_CRASHES_GAME: case sdk::EAnimation::INVALID_CRASHES_GAME2: case sdk::EAnimation::INVALID_CRASHES_GAME3: @@ -814,7 +803,7 @@ bool NierClient::handleEntityAnimationStart(const nier::EntityPacket* packet) { return true; default: if (npc) { - npc->start_animation(animationData->anim(), animationData->variant(), animationData->a3(), animationData->a4()); + npc->start_animation(animation_data->anim(), animation_data->variant(), animation_data->a3(), animation_data->a4()); } else { spdlog::error(" Cannot start animation, npc is null"); } @@ -837,21 +826,21 @@ bool NierClient::handlePlayerData(const nier::PlayerPacket* packet) { return false; } - const auto& playerNetworked = m_players[guid]; + const auto& player_networked = m_players[guid]; - if (playerNetworked == nullptr) { + if (player_networked == nullptr) { spdlog::error("(nullptr) Player data packet received for unknown player {}", guid); return false; } - auto playerData = flatbuffers::GetRoot(packet->data()->data()); - auto npc = playerNetworked->getEntity(); - + auto player_data = flatbuffers::GetRoot(packet->data()->data()); + auto npc = player_networked->getEntity(); + if (npc != nullptr) { - npc->position() = *(Vector3f*)&playerData->position(); + npc->position() = *(Vector3f*)&player_data->position(); } - playerNetworked->setPlayerData(*playerData); + player_networked->setPlayerData(*player_data); return true; } @@ -869,18 +858,18 @@ bool NierClient::handleAnimationStart(const nier::PlayerPacket* packet) { return false; } - const auto& playerNetworked = m_players[guid]; + const auto& player_networked = m_players[guid]; - if (playerNetworked == nullptr) { + if (player_networked == nullptr) { spdlog::error("(nullptr) Player data packet received for unknown player {}", guid); return false; } - auto animationData = flatbuffers::GetRoot(packet->data()->data()); - auto npc = playerNetworked->getEntity(); + auto animation_data = flatbuffers::GetRoot(packet->data()->data()); + auto npc = player_networked->getEntity(); if (npc != nullptr) { - switch (animationData->anim()) { + switch (animation_data->anim()) { case sdk::EAnimation::INVALID_CRASHES_GAME: case sdk::EAnimation::INVALID_CRASHES_GAME2: case sdk::EAnimation::INVALID_CRASHES_GAME3: @@ -889,7 +878,7 @@ bool NierClient::handleAnimationStart(const nier::PlayerPacket* packet) { return true; default: if (npc) { - npc->start_animation(animationData->anim(), animationData->variant(), animationData->a3(), animationData->a4()); + npc->start_animation(animation_data->anim(), animation_data->variant(), animation_data->a3(), animation_data->a4()); } else { spdlog::error("Cannot start animation, npc is null"); } @@ -912,25 +901,25 @@ bool NierClient::handleButtons(const nier::PlayerPacket* packet) { return false; } - const auto& playerNetworked = m_players[guid]; + const auto& player_networked = m_players[guid]; - if (playerNetworked == nullptr) { + if (player_networked == nullptr) { spdlog::error("(nullptr) Player data packet received for unknown player {}", guid); return false; } auto buttons = flatbuffers::GetRoot(packet->data()->data()); - auto npc = playerNetworked->getEntity(); + auto npc = player_networked->getEntity(); if (npc != nullptr) { - const auto buttonsData = buttons->buttons()->data(); - const auto sizeButtons = sizeof(regenny::CharacterController::buttons); - memcpy(&npc->character_controller().buttons, buttonsData, sizeButtons); + const auto buttons_data = buttons->buttons()->data(); + const auto size_buttons = sizeof(regenny::CharacterController::buttons); + memcpy(&npc->character_controller().buttons, buttons_data, size_buttons); for (uint32_t i = 0; i < sdk::Pl0000::EButtonIndex::INDEX_MAX; ++i) { auto& controller = npc->character_controller(); - if (buttonsData[i] > 0) { + if (buttons_data[i] > 0) { controller.held_flags |= (1 << i); } } diff --git a/src/mods/multiplayer/PlayerHook.cpp b/src/mods/multiplayer/PlayerHook.cpp index fe4cd0d..b1f9c9e 100644 --- a/src/mods/multiplayer/PlayerHook.cpp +++ b/src/mods/multiplayer/PlayerHook.cpp @@ -9,31 +9,28 @@ using namespace std; -unordered_set g_unreplicatedAnims { - sdk::EAnimation::Light_Attack, - sdk::EAnimation::Dash -}; +unordered_set g_unreplicated_anims{sdk::EAnimation::Light_Attack, sdk::EAnimation::Dash}; -PlayerHook* g_playerHook = nullptr; +PlayerHook* g_player_hook = nullptr; PlayerHook::PlayerHook() { - g_playerHook = this; + g_player_hook = this; } -void PlayerHook::reHook(sdk::Pl0000* player) { +void PlayerHook::re_hook(sdk::Pl0000* player) { if (m_hook.getInstance().as() == player) { return; } if (m_hook.create(player)) { - m_hook.hookMethod(sdk::Behavior::s_start_animation_index, &startAnimationHook); + m_hook.hookMethod(sdk::Behavior::s_start_animation_index, &start_animation_hook); } } -void __thiscall PlayerHook::startAnimationHook(sdk::Pl0000* ent, uint32_t anim, uint32_t variant, uint32_t a3, uint32_t a4) { - if (g_unreplicatedAnims.count(anim) == 0) { +void __thiscall PlayerHook::start_animation_hook(sdk::Pl0000* ent, uint32_t anim, uint32_t variant, uint32_t a3, uint32_t a4) { + if (g_unreplicated_anims.count(anim) == 0) { auto amp = AutomataMPMod::get(); - auto& client = amp->getClient(); + auto& client = amp->get_client(); if (client != nullptr) { client->sendAnimationStart(anim, variant, a3, a4); @@ -42,6 +39,6 @@ void __thiscall PlayerHook::startAnimationHook(sdk::Pl0000* ent, uint32_t anim, spdlog::info("anim: {}, variant: {}, a3: {}, return: {:x}", anim, variant, a3, (uintptr_t)_ReturnAddress()); - auto original = g_playerHook->getHook().getMethod(sdk::Behavior::s_start_animation_index); + auto original = g_player_hook->get_hook().getMethod(sdk::Behavior::s_start_animation_index); original(ent, anim, variant, a3, a4); } diff --git a/src/mods/multiplayer/PlayerHook.hpp b/src/mods/multiplayer/PlayerHook.hpp index 4b5cedf..ff6d13b 100644 --- a/src/mods/multiplayer/PlayerHook.hpp +++ b/src/mods/multiplayer/PlayerHook.hpp @@ -10,14 +10,14 @@ class PlayerHook { public: PlayerHook(); - void reHook(sdk::Pl0000* player); + void re_hook(sdk::Pl0000* player); - auto& getHook() { + auto& get_hook() { return m_hook; } public: - static void __thiscall startAnimationHook(sdk::Pl0000* ent, uint32_t anim, uint32_t variant, uint32_t a3, uint32_t a4); + static void __thiscall start_animation_hook(sdk::Pl0000* ent, uint32_t anim, uint32_t variant, uint32_t a3, uint32_t a4); private: VtableHook m_hook;