From 9bb2292a5ded3a990632d1bc79a6a22469dba73a Mon Sep 17 00:00:00 2001 From: lzup <3463541577@qq.com> Date: Thu, 26 Feb 2026 16:55:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D1.4.5=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E4=BD=BF=E7=94=A8=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- efmod/Overclock/efmod.cpp | 188 +++++++++++++++++++------------------- 1 file changed, 96 insertions(+), 92 deletions(-) diff --git a/efmod/Overclock/efmod.cpp b/efmod/Overclock/efmod.cpp index 713b748..d1a2576 100755 --- a/efmod/Overclock/efmod.cpp +++ b/efmod/Overclock/efmod.cpp @@ -7,112 +7,116 @@ #include "BaseType.hpp" #include "Logger.hpp" -TEFMod::Logger* g_log; -TEFMod::TEFModAPI* g_api; +TEFMod::Logger *g_log; +TEFMod::TEFModAPI *g_api; struct ItemFields { - TEFMod::Field* useTime; - TEFMod::Field* useAnimation; - TEFMod::Field* damage; - TEFMod::Field* createTile; - TEFMod::Field* createWall; + TEFMod::Field *useTime; + TEFMod::Field *useAnimation; + TEFMod::Field *damage; + TEFMod::Field *createTile; + TEFMod::Field *createWall; } g_item; void (*original_SetDefaults)(TEFMod::TerrariaInstance, int, bool, TEFMod::TerrariaInstance); + void SetDefaults_T(TEFMod::TerrariaInstance, int, bool, TEFMod::TerrariaInstance); -inline TEFMod::HookTemplate HookTemplate_SetDefaults { - reinterpret_cast(SetDefaults_T), - { } + +inline TEFMod::HookTemplate HookTemplate_SetDefaults{ + reinterpret_cast(SetDefaults_T), + {} }; void SetDefaults_T(TEFMod::TerrariaInstance i, int t, bool n, TEFMod::TerrariaInstance v) { - original_SetDefaults(i, t, n, v); - for (const auto fun: HookTemplate_SetDefaults.FunctionArray) { - if(fun) reinterpret_cast(fun)(i, t, n, v); - } + original_SetDefaults(i, t, n, v); + for (const auto fun: HookTemplate_SetDefaults.FunctionArray) { + if (fun) reinterpret_cast( + fun)(i, t, n, v); + } } -void Hook_SetDefaults(TEFMod::TerrariaInstance item, int type, bool noMatCheck, TEFMod::TerrariaInstance variant) { - const bool shouldOverclock = ( - g_item.damage->Get(item) > 0 || - g_item.createTile->Get(item) > 0 || - g_item.createWall->Get(item) > 0 || - type == 1291 || - type == 29 || - type == 109 - ); - - if (shouldOverclock) { - g_log->d("加速物品 id=", type); - g_item.useTime->Set(1, item); // 设置为1帧使用时间 - g_item.useAnimation->Set(5, item); // 设置为5帧动画 - } +void Hook_SetDefaults(TEFMod::TerrariaInstance item, int type, TEFMod::TerrariaInstance variant) { + const bool shouldOverclock = ( + g_item.damage->Get(item) > 0 || + g_item.createTile->Get(item) > 0 || + g_item.createWall->Get(item) > 0 || + type == 1291 || + type == 29 || + type == 109 + ); + + if (shouldOverclock) { + g_log->d("加速物品 id=", type); + g_item.useTime->Set(1, item); // 设置为1帧使用时间 + g_item.useAnimation->Set(5, item); // 设置为5帧动画 + } } class Overclock final : public EFMod { public: - - int Initialize(const std::string &path, MultiChannel *multiChannel) override {return 0;} - int UnLoad(const std::string &path, MultiChannel *multiChannel) override {return 0;} - - int Load(const std::string &path, MultiChannel* channel) override { - g_api = channel->receive("TEFMod::TEFModAPI"); - g_log = channel->receive("TEFMod::CreateLogger")("Overclock-EternalFuture゙", "", 0); - - g_log->init(); - - return 0; - } - - void Send(const std::string &path, MultiChannel* channel) override { - g_api->registerFunctionDescriptor({ - "Terraria", "Item", "SetDefaults", "hook>>void", 3, - &HookTemplate_SetDefaults, - { (void*)Hook_SetDefaults } - }); - - const char* fields[] = { - "useTime", "useAnimation", "damage", - "createTile", "createWall" - }; - - for (auto& name : fields) { - g_api->registerApiDescriptor({"Terraria", "Item", name, "Field"}); - } - } - - void Receive(const std::string &path, MultiChannel* channel) override { - const auto ParseIntField = channel->receive*(*)(void*)>( - "TEFMod::Field::ParseFromPointer"); - - // 初始化字段 - g_item.useTime = ParseIntField(g_api->GetAPI( - {"Terraria", "Item", "useTime", "Field"})); - g_item.useAnimation = ParseIntField(g_api->GetAPI( - {"Terraria", "Item", "useAnimation", "Field"})); - g_item.damage = ParseIntField(g_api->GetAPI( - {"Terraria", "Item", "damage", "Field"})); - g_item.createTile = ParseIntField(g_api->GetAPI( - {"Terraria", "Item", "createTile", "Field"})); - g_item.createWall = ParseIntField(g_api->GetAPI( - {"Terraria", "Item", "createWall", "Field"})); - original_SetDefaults = g_api->GetAPI( - {"Terraria", "Item", "SetDefaults", "old_fun", 3}); - } - - Metadata GetMetadata() override { - return { - "Overclock", - "EternalFuture゙", - "1.1.1", - 20250517, - ModuleType::Game, - { false } - }; - } + int Initialize(const std::string &path, MultiChannel *multiChannel) override { return 0; } + int UnLoad(const std::string &path, MultiChannel *multiChannel) override { return 0; } + + int Load(const std::string &path, MultiChannel *channel) override { + g_api = channel->receive("TEFMod::TEFModAPI"); + g_log = channel->receive("TEFMod::CreateLogger")( + "Overclock-EternalFuture゙", "", 0); + + g_log->init(); + + return 0; + } + + void Send(const std::string &path, MultiChannel *channel) override { + g_api->registerFunctionDescriptor({ + "Terraria", "Item", "SetDefaults", "hook>>void", 2, + &HookTemplate_SetDefaults, + {(void *) Hook_SetDefaults} + }); + + const char *fields[] = { + "useTime", "useAnimation", "damage", + "createTile", "createWall" + }; + + for (auto &name: fields) { + g_api->registerApiDescriptor({"Terraria", "Item", name, "Field"}); + } + } + + void Receive(const std::string &path, MultiChannel *channel) override { + const auto ParseIntField = channel->receive*(*)(void *)>( + "TEFMod::Field::ParseFromPointer"); + + // 初始化字段 + g_item.useTime = ParseIntField(g_api->GetAPI( + {"Terraria", "Item", "useTime", "Field"})); + g_item.useAnimation = ParseIntField(g_api->GetAPI( + {"Terraria", "Item", "useAnimation", "Field"})); + g_item.damage = ParseIntField(g_api->GetAPI( + {"Terraria", "Item", "damage", "Field"})); + g_item.createTile = ParseIntField(g_api->GetAPI( + {"Terraria", "Item", "createTile", "Field"})); + g_item.createWall = ParseIntField(g_api->GetAPI( + {"Terraria", "Item", "createWall", "Field"})); + original_SetDefaults = g_api->GetAPI( + {"Terraria", "Item", "SetDefaults", "old_fun", 2}); + } + + Metadata GetMetadata() override { + return { + "Overclock", + "EternalFuture゙", + "1.1.1", + 20250517, + ModuleType::Game, + {false} + }; + } }; -EFMod* CreateMod() { - static Overclock instance; - return &instance; -} \ No newline at end of file +EFMod *CreateMod() { + static Overclock instance; + return &instance; +}