From f295c416a02ef2adf3b55ed34163582863d4f613 Mon Sep 17 00:00:00 2001 From: 4Luke4 Date: Fri, 27 Mar 2026 19:07:26 +0100 Subject: [PATCH 1/2] Ignore Google Drive File Stream temp files Add .gitignore entries to exclude Google Drive File Stream temporary files (.tmp.driveupload, .tmp.drivedownload) so transient local upload/download artifacts are not committed to the repository. --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 44e12b9..ce00885 100644 --- a/.gitignore +++ b/.gitignore @@ -365,6 +365,10 @@ MigrationBackup/ # Fody - auto-generated XML schema FodyWeavers.xsd +# Google Drive File Stream +/.tmp.driveupload +/.tmp.drivedownload + ########### # Allowed # ########### From f4cabaebb70afddbe3e79da83b162b57637a2ecd Mon Sep 17 00:00:00 2001 From: 4Luke4 Date: Sat, 18 Apr 2026 22:41:26 +0200 Subject: [PATCH 2/2] Add hooks for CreateItem opcode (op122/255) --- EEex-v2.6.6.0/headers/EEex-v2.6.6.0/EEex.h | 3 ++ EEex-v2.6.6.0/source/EEex-v2.6.6.0/EEex.cpp | 48 +++++++++++++++++++++ EEex-v2.6.6.0/source/EEex-v2.6.6.0/main.cpp | 3 ++ 3 files changed, 54 insertions(+) diff --git a/EEex-v2.6.6.0/headers/EEex-v2.6.6.0/EEex.h b/EEex-v2.6.6.0/headers/EEex-v2.6.6.0/EEex.h index 3cbc1ed..52bef62 100644 --- a/EEex-v2.6.6.0/headers/EEex-v2.6.6.0/EEex.h +++ b/EEex-v2.6.6.0/headers/EEex-v2.6.6.0/EEex.h @@ -85,6 +85,9 @@ namespace EEex { // op101 bool Opcode_Hook_Op101_ShouldEffectBypassImmunity(CGameEffect* pEffect); + // op122 / op255 + void Opcode_Hook_CGameEffectCreateItem_BeforePlaceItem(CGameEffect* pEffect, CItem* pItem); + void Opcode_Hook_CGameEffectCreateItem_AfterPlaceItem(CGameEffect* pEffect, CGameSprite* pSprite, CItem* pItem); // op248 void Opcode_Hook_OnOp248AddTail(CGameEffect* pOp248, CGameEffect* pEffect); // op249 diff --git a/EEex-v2.6.6.0/source/EEex-v2.6.6.0/EEex.cpp b/EEex-v2.6.6.0/source/EEex-v2.6.6.0/EEex.cpp index 80ea91b..c5beaef 100644 --- a/EEex-v2.6.6.0/source/EEex-v2.6.6.0/EEex.cpp +++ b/EEex-v2.6.6.0/source/EEex-v2.6.6.0/EEex.cpp @@ -3391,6 +3391,54 @@ bool EEex::Opcode_Hook_Op101_ShouldEffectBypassImmunity(CGameEffect* pEffect) { STUTTER_LOG_END } +//-----------------------------------------// +// op122/255 - CGameEffectCreateItem Hooks // +//-----------------------------------------// + +void EEex::Opcode_Hook_CGameEffectCreateItem_BeforePlaceItem(CGameEffect* pEffect, CItem* pItem) { + + STUTTER_LOG_START(void, "EEex::Opcode_Hook_CGameEffectCreateItem_BeforePlaceItem") + + if (pEffect != nullptr && pItem != nullptr && pEffect->m_dWFlags > 0) { + // The Create Item opcode reuses m_dWFlags as an item-flag override. + pItem->m_flags = pEffect->m_dWFlags; + } + + STUTTER_LOG_END +} + +void EEex::Opcode_Hook_CGameEffectCreateItem_AfterPlaceItem(CGameEffect* pEffect, CGameSprite* pSprite, CItem* pItem) { + + STUTTER_LOG_START(void, "EEex::Opcode_Hook_CGameEffectCreateItem_AfterPlaceItem") + + if (pEffect == nullptr || pSprite == nullptr || pItem == nullptr || (pEffect->m_special & 1) == 0) { + return; + } + + int slot = -1; + for (int i = 0; i < 39; ++i) { + if (pSprite->m_equipment.m_items.data[i] == pItem) { + slot = i; + break; + } + } + + // The opcode stores only a single scalar aux value. Clear the field when the placed + // item didn't end up in the live equipment array so callers never observe a stale slot. + lua_State* const L = luaState(); + getUDAux(L, pSprite); + if (slot >= 0) { + lua_pushinteger(L, static_cast(slot)); + } + else { + lua_pushnil(L); + } + lua_setfield(L, -2, "EEex_CGameEffectCreateItem_Slot"); + lua_pop(L, 1); + + STUTTER_LOG_END +} + //-------// // op248 // //-------// diff --git a/EEex-v2.6.6.0/source/EEex-v2.6.6.0/main.cpp b/EEex-v2.6.6.0/source/EEex-v2.6.6.0/main.cpp index 527751d..a30ab68 100644 --- a/EEex-v2.6.6.0/source/EEex-v2.6.6.0/main.cpp +++ b/EEex-v2.6.6.0/source/EEex-v2.6.6.0/main.cpp @@ -103,6 +103,9 @@ static void exportPatterns() { // op101 exportPattern(TEXT("EEex::Opcode_Hook_Op101_ShouldEffectBypassImmunity"), EEex::Opcode_Hook_Op101_ShouldEffectBypassImmunity); + // op122 / op255 + exportPattern(TEXT("EEex::Opcode_Hook_CGameEffectCreateItem_BeforePlaceItem"), EEex::Opcode_Hook_CGameEffectCreateItem_BeforePlaceItem); + exportPattern(TEXT("EEex::Opcode_Hook_CGameEffectCreateItem_AfterPlaceItem"), EEex::Opcode_Hook_CGameEffectCreateItem_AfterPlaceItem); // op248 exportPattern(TEXT("EEex::Opcode_Hook_OnOp248AddTail"), EEex::Opcode_Hook_OnOp248AddTail); // op249