From 5ce7cf0a998ce9044cc403ee86b4787c37e97818 Mon Sep 17 00:00:00 2001 From: Antonio Martinez Date: Wed, 16 Jul 2025 05:35:51 -0400 Subject: [PATCH] Fix Lua roulette hooks not knowing what the fuck a ringbox is --- src/k_roulette.c | 18 ++++++++++++++++-- src/lua_hook.h | 4 ++-- src/lua_hooklib.c | 8 ++++---- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/k_roulette.c b/src/k_roulette.c index 945161147..52d42d5dd 100644 --- a/src/k_roulette.c +++ b/src/k_roulette.c @@ -841,6 +841,20 @@ void K_PushToRouletteItemList(itemroulette_t *const roulette, INT32 item) #else I_Assert(roulette->itemList.items != NULL); + CONS_Printf("HC: trying push %d\n", item); + + if (!roulette->ringbox && item >= NUMKARTRESULTS) + { + CONS_Alert(CONS_WARNING, M_GetText("Item Roulette rejected an out-of-range item.\n")); + return; + } + + if (roulette->ringbox && item >= KSM__MAX) + { + CONS_Alert(CONS_WARNING, M_GetText("Casino Roulette rejected an out-of-range item.\n")); + return; + } + if (roulette->itemList.len >= roulette->itemList.cap) { roulette->itemList.cap *= 2; @@ -1186,7 +1200,7 @@ void K_FillItemRoulette(player_t *const player, itemroulette_t *const roulette, CONS_Printf("HC: prehook\n"); // Lua may want to intercept reelbuilder entirely. - LUA_HookPreFillItemRoulette(player, roulette); + LUA_HookPreFillItemRoulette(player, roulette, ringbox); CONS_Printf("HC: bail\n"); @@ -1202,7 +1216,7 @@ void K_FillItemRoulette(player_t *const player, itemroulette_t *const roulette, CONS_Printf("HC: posthook\n"); // Lua can modify the final result. - LUA_HookFillItemRoulette(player, roulette); + LUA_HookFillItemRoulette(player, roulette, ringbox); CONS_Printf("HC: out\n"); diff --git a/src/lua_hook.h b/src/lua_hook.h index 8187cbaa7..d44423400 100644 --- a/src/lua_hook.h +++ b/src/lua_hook.h @@ -148,8 +148,8 @@ void LUA_HookPlayerQuit(player_t *, kickreason_t); //int LUA_HookTeamSwitch(player_t *, int newteam, boolean fromspectators, boolean tryingautobalance, boolean tryingscramble); int LUA_HookViewpointSwitch(player_t *player, player_t *newdisplayplayer, boolean forced); int LUA_HookSeenPlayer(player_t *player, player_t *seenfriend); -int LUA_HookPreFillItemRoulette(player_t *player, itemroulette_t *const roulette); -int LUA_HookFillItemRoulette(player_t *player, itemroulette_t *const roulette); +int LUA_HookPreFillItemRoulette(player_t *player, itemroulette_t *const roulette, boolean ringbox); +int LUA_HookFillItemRoulette(player_t *player, itemroulette_t *const roulette, boolean ringbox); #ifdef __cplusplus } // extern "C" diff --git a/src/lua_hooklib.c b/src/lua_hooklib.c index 0d9b72cbe..45805a062 100644 --- a/src/lua_hooklib.c +++ b/src/lua_hooklib.c @@ -1034,15 +1034,15 @@ static int roulette_hook( return hook.status; } -int LUA_HookPreFillItemRoulette(player_t *player, itemroulette_t *const roulette) +int LUA_HookPreFillItemRoulette(player_t *player, itemroulette_t *const roulette, boolean ringbox) { - return roulette_hook(player, roulette, false, HOOK(PreFillItemRoulette), res_true); + return roulette_hook(player, roulette, ringbox, HOOK(PreFillItemRoulette), res_true); } -int LUA_HookFillItemRoulette(player_t *player, itemroulette_t *const roulette) +int LUA_HookFillItemRoulette(player_t *player, itemroulette_t *const roulette, boolean ringbox) { - return roulette_hook(player, roulette, false, HOOK(FillItemRoulette), res_true); + return roulette_hook(player, roulette, ringbox, HOOK(FillItemRoulette), res_true); } boolean hook_cmd_running = false;