1+ #include < unordered_set>
2+
13#include " IsaacRepentance.h"
24#include " LuaCore.h"
35#include " HookSystem.h"
@@ -50,19 +52,29 @@ LUA_FUNCTION(Lua_EffectCreateLootPreview) {
5052LUA_FUNCTION (Lua_GetGridEntityDesc) {
5153 auto * entity = lua::GetLuabridgeUserdata<Entity_Effect*>(L, 1 , lua::Metatables::ENTITY_EFFECT, " EntityEffect" );
5254
53- if (entity->_variant != 136 ) {
55+ if (entity->_variant == 136 ) {
56+ lua::luabridge::UserdataPtr::push (L, (GridEntityDesc*)&entity->_varData , lua::GetMetatableKey (lua::Metatables::GRID_ENTITY_DESC));
57+ } else {
5458 lua_pushnil (L);
55- return 1 ;
5659 }
57-
58- lua::luabridge::UserdataPtr::push (L, (GridEntityDesc*)&entity->_varData , lua::GetMetatableKey (lua::Metatables::GRID_ENTITY_DESC));
60+
5961 return 1 ;
6062}
6163
62- LUA_FUNCTION (Lua_GetAquariusTearFlags) {
64+ static const std::unordered_set<int > tearflagEffectVariants = {
65+ 54 , // PLAYER_CREEP_HOLYWATER_TRAIL (Aquarius)
66+ 113 , // BRIMSTONE_BALL
67+ 126 , // TECH_DOT
68+ 167 , // CHAIN_LIGHTNING
69+ };
70+ static bool AllowTearflagAccess (Entity_Effect* effect) {
71+ return tearflagEffectVariants.count (effect->_variant );
72+ }
73+
74+ LUA_FUNCTION (Lua_GetTearFlags) {
6375 auto * entity = lua::GetLuabridgeUserdata<Entity_Effect*>(L, 1 , lua::Metatables::ENTITY_EFFECT, " EntityEffect" );
6476
65- if (entity-> _variant == 54 ) {
77+ if (AllowTearflagAccess ( entity) ) {
6678 lua::luabridge::UserdataValue<BitSet128>::push (L, lua::GetMetatableKey (lua::Metatables::BITSET_128), entity->_varData );
6779 } else {
6880 lua_pushnil (L);
@@ -71,39 +83,39 @@ LUA_FUNCTION(Lua_GetAquariusTearFlags) {
7183 return 1 ;
7284}
7385
74- LUA_FUNCTION (Lua_SetAquariusTearFlags ) {
86+ LUA_FUNCTION (Lua_SetTearFlags ) {
7587 auto * entity = lua::GetLuabridgeUserdata<Entity_Effect*>(L, 1 , lua::Metatables::ENTITY_EFFECT, " EntityEffect" );
7688
77- if (entity-> _variant == 54 ) {
89+ if (AllowTearflagAccess ( entity) ) {
7890 entity->_varData = *lua::GetLuabridgeUserdata<BitSet128*>(L, 2 , lua::Metatables::BITSET_128, " BitSet128" );
7991 }
8092
8193 return 0 ;
8294}
8395
84- LUA_FUNCTION (Lua_AddAquariusTearFlags ) {
96+ LUA_FUNCTION (Lua_AddTearFlags ) {
8597 auto * entity = lua::GetLuabridgeUserdata<Entity_Effect*>(L, 1 , lua::Metatables::ENTITY_EFFECT, " EntityEffect" );
8698
87- if (entity-> _variant == 54 ) {
99+ if (AllowTearflagAccess ( entity) ) {
88100 entity->_varData .AddFlags (*lua::GetLuabridgeUserdata<BitSet128*>(L, 2 , lua::Metatables::BITSET_128, " BitSet128" ));
89101 }
90102
91103 return 0 ;
92104}
93105
94- LUA_FUNCTION (Lua_ClearAquariusTearFlags ) {
106+ LUA_FUNCTION (Lua_ClearTearFlags ) {
95107 auto * entity = lua::GetLuabridgeUserdata<Entity_Effect*>(L, 1 , lua::Metatables::ENTITY_EFFECT, " EntityEffect" );
96108
97- if (entity-> _variant == 54 ) {
109+ if (AllowTearflagAccess ( entity) ) {
98110 entity->_varData .RemoveFlags (*lua::GetLuabridgeUserdata<BitSet128*>(L, 2 , lua::Metatables::BITSET_128, " BitSet128" ));
99111 }
100112
101113 return 0 ;
102114}
103115
104- LUA_FUNCTION (Lua_HasAquariusTearFlags ) {
116+ LUA_FUNCTION (Lua_HasTearFlags ) {
105117 auto * entity = lua::GetLuabridgeUserdata<Entity_Effect*>(L, 1 , lua::Metatables::ENTITY_EFFECT, " EntityEffect" );
106- lua_pushboolean (L, entity-> _variant == 54 && entity->_varData .HasAny (*lua::GetLuabridgeUserdata<BitSet128*>(L, 2 , lua::Metatables::BITSET_128, " BitSet128" )));
118+ lua_pushboolean (L, AllowTearflagAccess ( entity) && entity->_varData .HasAny (*lua::GetLuabridgeUserdata<BitSet128*>(L, 2 , lua::Metatables::BITSET_128, " BitSet128" )));
107119 return 1 ;
108120}
109121
@@ -114,15 +126,21 @@ HOOK_METHOD(LuaEngine, RegisterClasses, () -> void) {
114126
115127 luaL_Reg functions[] = {
116128 { " GetGridEntityDesc" , Lua_GetGridEntityDesc },
117- { " GetAquariusTearFlags" , Lua_GetAquariusTearFlags },
118- { " SetAquariusTearFlags" , Lua_SetAquariusTearFlags },
119- { " AddAquariusTearFlags" , Lua_AddAquariusTearFlags },
120- { " ClearAquariusTearFlags" , Lua_ClearAquariusTearFlags },
121- { " HasAquariusTearFlags" , Lua_HasAquariusTearFlags },
129+ { " GetTearFlags" , Lua_GetTearFlags },
130+ { " SetTearFlags" , Lua_SetTearFlags },
131+ { " AddTearFlags" , Lua_AddTearFlags },
132+ { " ClearTearFlags" , Lua_ClearTearFlags },
133+ { " HasTearFlags" , Lua_HasTearFlags },
134+ // Previous function names
135+ { " GetAquariusTearFlags" , Lua_GetTearFlags },
136+ { " SetAquariusTearFlags" , Lua_SetTearFlags },
137+ { " AddAquariusTearFlags" , Lua_AddTearFlags },
138+ { " ClearAquariusTearFlags" , Lua_ClearTearFlags },
139+ { " HasAquariusTearFlags" , Lua_HasTearFlags },
122140 { NULL , NULL }
123141 };
124142 lua::RegisterFunctions (_state, lua::Metatables::ENTITY_EFFECT, functions);
125143
126144 lua::RegisterGlobalClassFunction (_state, " EntityEffect" , " CreateLight" , Lua_EffectCreateLight);
127145 lua::RegisterGlobalClassFunction (_state, " EntityEffect" , " CreateLootPreview" , Lua_EffectCreateLootPreview);
128- }
146+ }
0 commit comments