mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-05-10 10:51:42 +00:00
Restore PreFilItemRoulette by moving hooks outside of reelbuilder
This commit is contained in:
parent
bed1feb1a0
commit
5dc72e9886
6 changed files with 46 additions and 14 deletions
|
|
@ -145,6 +145,8 @@ boolean K_InRaceDuel(void)
|
||||||
|
|
||||||
fixed_t K_EffectiveGradingFactor(const player_t *player)
|
fixed_t K_EffectiveGradingFactor(const player_t *player)
|
||||||
{
|
{
|
||||||
|
I_Assert(player != NULL);
|
||||||
|
|
||||||
fixed_t min = (franticitems) ? MINFRANTICFACTOR : MINGRADINGFACTOR;
|
fixed_t min = (franticitems) ? MINFRANTICFACTOR : MINGRADINGFACTOR;
|
||||||
if (grandprixinfo.gp && grandprixinfo.masterbots && !K_PlayerUsesBotMovement(player))
|
if (grandprixinfo.gp && grandprixinfo.masterbots && !K_PlayerUsesBotMovement(player))
|
||||||
return min;
|
return min;
|
||||||
|
|
|
||||||
|
|
@ -1162,9 +1162,19 @@ static boolean K_TimingPermitsItem(kartitems_t item, const itemroulette_t *roule
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void K_LuaHookItemRoulette(player_t *player, itemroulette_t *const roulette)
|
void K_FillItemRoulette(player_t *const player, itemroulette_t *const roulette, boolean ringbox)
|
||||||
{
|
{
|
||||||
// Lua can override the final result.
|
// Lua may want to intercept reelbuilder entirely.
|
||||||
|
LUA_HookPreFillItemRoulette(player, roulette);
|
||||||
|
|
||||||
|
// If prehook did something, no need to continue.
|
||||||
|
if (roulette->itemList.len != 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
K_FillItemRouletteData(player, roulette, ringbox, false);
|
||||||
|
|
||||||
|
// Lua can modify the final result.
|
||||||
LUA_HookFillItemRoulette(player, roulette);
|
LUA_HookFillItemRoulette(player, roulette);
|
||||||
|
|
||||||
// If somehow there's no items, add sad.
|
// If somehow there's no items, add sad.
|
||||||
|
|
@ -1212,7 +1222,6 @@ void K_FillItemRouletteData(player_t *player, itemroulette_t *const roulette, bo
|
||||||
K_PushToRouletteItemList(roulette, presetlist[i]);
|
K_PushToRouletteItemList(roulette, presetlist[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
K_LuaHookItemRoulette(player, roulette);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1221,7 +1230,6 @@ void K_FillItemRouletteData(player_t *player, itemroulette_t *const roulette, bo
|
||||||
if (cv_kartdebugitem.value != KITEM_NONE)
|
if (cv_kartdebugitem.value != KITEM_NONE)
|
||||||
{
|
{
|
||||||
K_PushToRouletteItemList(roulette, cv_kartdebugitem.value);
|
K_PushToRouletteItemList(roulette, cv_kartdebugitem.value);
|
||||||
K_LuaHookItemRoulette(player, roulette);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1236,7 +1244,6 @@ void K_FillItemRouletteData(player_t *player, itemroulette_t *const roulette, bo
|
||||||
K_PushToRouletteItemList(roulette, K_KartItemReelSpecialEnd[i]);
|
K_PushToRouletteItemList(roulette, K_KartItemReelSpecialEnd[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
K_LuaHookItemRoulette(player, roulette);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1247,7 +1254,6 @@ void K_FillItemRouletteData(player_t *player, itemroulette_t *const roulette, bo
|
||||||
K_PushToRouletteItemList(roulette, K_KartItemReelBoss[i]);
|
K_PushToRouletteItemList(roulette, K_KartItemReelBoss[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
K_LuaHookItemRoulette(player, roulette);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (K_TimeAttackRules() == true)
|
else if (K_TimeAttackRules() == true)
|
||||||
|
|
@ -1314,8 +1320,6 @@ void K_FillItemRouletteData(player_t *player, itemroulette_t *const roulette, bo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
K_LuaHookItemRoulette(player, roulette);
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1324,7 +1328,6 @@ void K_FillItemRouletteData(player_t *player, itemroulette_t *const roulette, bo
|
||||||
if (K_ForcedSPB(player, roulette) == true)
|
if (K_ForcedSPB(player, roulette) == true)
|
||||||
{
|
{
|
||||||
K_AddItemToReel(player, roulette, KITEM_SPB);
|
K_AddItemToReel(player, roulette, KITEM_SPB);
|
||||||
K_LuaHookItemRoulette(player, roulette);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1349,7 +1352,6 @@ void K_FillItemRouletteData(player_t *player, itemroulette_t *const roulette, bo
|
||||||
// singleItem = KITEM_SAD by default,
|
// singleItem = KITEM_SAD by default,
|
||||||
// so it will be used when all items are turned off.
|
// so it will be used when all items are turned off.
|
||||||
K_AddItemToReel(player, roulette, singleItem);
|
K_AddItemToReel(player, roulette, singleItem);
|
||||||
K_LuaHookItemRoulette(player, roulette);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1705,8 +1707,6 @@ void K_FillItemRouletteData(player_t *player, itemroulette_t *const roulette, bo
|
||||||
|
|
||||||
totalSpawnChance--;
|
totalSpawnChance--;
|
||||||
}
|
}
|
||||||
|
|
||||||
K_LuaHookItemRoulette(player, roulette);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*--------------------------------------------------
|
/*--------------------------------------------------
|
||||||
|
|
@ -1719,7 +1719,7 @@ void K_StartItemRoulette(player_t *const player, boolean ringbox)
|
||||||
itemroulette_t *const roulette = &player->itemRoulette;
|
itemroulette_t *const roulette = &player->itemRoulette;
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
K_FillItemRouletteData(player, roulette, ringbox, false);
|
K_FillItemRoulette(player, roulette, ringbox);
|
||||||
|
|
||||||
if (roulette->autoroulette)
|
if (roulette->autoroulette)
|
||||||
roulette->index = P_RandomRange(PR_AUTOROULETTE, 0, roulette->itemList.len - 1);
|
roulette->index = P_RandomRange(PR_AUTOROULETTE, 0, roulette->itemList.len - 1);
|
||||||
|
|
|
||||||
|
|
@ -180,6 +180,24 @@ void K_CalculateRouletteSpeed(itemroulette_t *const roulette);
|
||||||
|
|
||||||
INT32 K_KartGetBattleOdds(const player_t *player, UINT8 pos, kartitems_t item);
|
INT32 K_KartGetBattleOdds(const player_t *player, UINT8 pos, kartitems_t item);
|
||||||
|
|
||||||
|
/*--------------------------------------------------
|
||||||
|
void K_FillItemRoulette(player_t *player, itemroulette_t *const roulette, boolean ringbox);
|
||||||
|
|
||||||
|
Entry point for roulette builder.
|
||||||
|
Includes Lua hooks.
|
||||||
|
|
||||||
|
Input Arguments:-
|
||||||
|
player - The player this roulette data is for.
|
||||||
|
Can be NULL for generic use.
|
||||||
|
roulette - The roulette data struct to fill out.
|
||||||
|
ringbox - Is this roulette fill triggered by a just-respawned Ring Box?
|
||||||
|
|
||||||
|
Return:-
|
||||||
|
N/A
|
||||||
|
--------------------------------------------------*/
|
||||||
|
|
||||||
|
void K_FillItemRoulette(player_t *player, itemroulette_t *const roulette, boolean ringbox);
|
||||||
|
|
||||||
|
|
||||||
/*--------------------------------------------------
|
/*--------------------------------------------------
|
||||||
void K_FillItemRouletteData(player_t *player, itemroulette_t *const roulette, boolean ringbox, boolean dryrun);
|
void K_FillItemRouletteData(player_t *player, itemroulette_t *const roulette, boolean ringbox, boolean dryrun);
|
||||||
|
|
|
||||||
|
|
@ -4167,17 +4167,21 @@ static void getItemRouletteOrPlayerBasedOnFirstParam(lua_State *L, player_t **pl
|
||||||
{
|
{
|
||||||
if (lua_getmetatable(L, 1))
|
if (lua_getmetatable(L, 1))
|
||||||
{
|
{
|
||||||
|
CONS_Printf("case A\n");
|
||||||
lua_getfield(L, LUA_REGISTRYINDEX, META_ITEMROULETTE);
|
lua_getfield(L, LUA_REGISTRYINDEX, META_ITEMROULETTE);
|
||||||
if (lua_rawequal(L, -1, -2))
|
if (lua_rawequal(L, -1, -2))
|
||||||
{
|
{
|
||||||
|
CONS_Printf("case A2\n");
|
||||||
*itemRoulette = *(itemroulette_t **)p;
|
*itemRoulette = *(itemroulette_t **)p;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
CONS_Printf("case B\n");
|
||||||
lua_pop(L, 1);
|
lua_pop(L, 1);
|
||||||
lua_getfield(L, LUA_REGISTRYINDEX, META_PLAYER);
|
lua_getfield(L, LUA_REGISTRYINDEX, META_PLAYER);
|
||||||
if (lua_rawequal(L, -1, -2))
|
if (lua_rawequal(L, -1, -2))
|
||||||
{
|
{
|
||||||
|
CONS_Printf("case B2\n");
|
||||||
*player = *(player_t **)p;
|
*player = *(player_t **)p;
|
||||||
*itemRoulette = &(*player)->itemRoulette;
|
*itemRoulette = &(*player)->itemRoulette;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -79,7 +79,8 @@ automatically.
|
||||||
X (GameQuit),\
|
X (GameQuit),\
|
||||||
X (PlayerCmd),/* building the player's ticcmd struct */\
|
X (PlayerCmd),/* building the player's ticcmd struct */\
|
||||||
X (VoteThinker),/* Y_VoteTicker */\
|
X (VoteThinker),/* Y_VoteTicker */\
|
||||||
X (FillItemRoulette),/* K_FillItemRouletteData, right at the end */\
|
X (PreFillItemRoulette),/* K_FillItemRouletteData, before attempted reel build */\
|
||||||
|
X (FillItemRoulette),/* K_FillItemRouletteData, after built reel is in place */\
|
||||||
|
|
||||||
#define STRING_HOOK_LIST(X) \
|
#define STRING_HOOK_LIST(X) \
|
||||||
X (SpecialExecute),\
|
X (SpecialExecute),\
|
||||||
|
|
@ -147,6 +148,7 @@ void LUA_HookPlayerQuit(player_t *, kickreason_t);
|
||||||
//int LUA_HookTeamSwitch(player_t *, int newteam, boolean fromspectators, boolean tryingautobalance, boolean tryingscramble);
|
//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_HookViewpointSwitch(player_t *player, player_t *newdisplayplayer, boolean forced);
|
||||||
int LUA_HookSeenPlayer(player_t *player, player_t *seenfriend);
|
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_HookFillItemRoulette(player_t *player, itemroulette_t *const roulette);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
||||||
|
|
@ -1034,6 +1034,12 @@ static int roulette_hook(
|
||||||
return hook.status;
|
return hook.status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int LUA_HookPreFillItemRoulette(player_t *player, itemroulette_t *const roulette)
|
||||||
|
{
|
||||||
|
return roulette_hook(player, roulette, false, HOOK(PreFillItemRoulette), res_true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int LUA_HookFillItemRoulette(player_t *player, itemroulette_t *const roulette)
|
int LUA_HookFillItemRoulette(player_t *player, itemroulette_t *const roulette)
|
||||||
{
|
{
|
||||||
return roulette_hook(player, roulette, false, HOOK(FillItemRoulette), res_true);
|
return roulette_hook(player, roulette, false, HOOK(FillItemRoulette), res_true);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue