mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-02-18 19:41:29 +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)
|
||||
{
|
||||
I_Assert(player != NULL);
|
||||
|
||||
fixed_t min = (franticitems) ? MINFRANTICFACTOR : MINGRADINGFACTOR;
|
||||
if (grandprixinfo.gp && grandprixinfo.masterbots && !K_PlayerUsesBotMovement(player))
|
||||
return min;
|
||||
|
|
|
|||
|
|
@ -1162,9 +1162,19 @@ static boolean K_TimingPermitsItem(kartitems_t item, const itemroulette_t *roule
|
|||
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);
|
||||
|
||||
// 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_LuaHookItemRoulette(player, roulette);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -1221,7 +1230,6 @@ void K_FillItemRouletteData(player_t *player, itemroulette_t *const roulette, bo
|
|||
if (cv_kartdebugitem.value != KITEM_NONE)
|
||||
{
|
||||
K_PushToRouletteItemList(roulette, cv_kartdebugitem.value);
|
||||
K_LuaHookItemRoulette(player, roulette);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -1236,7 +1244,6 @@ void K_FillItemRouletteData(player_t *player, itemroulette_t *const roulette, bo
|
|||
K_PushToRouletteItemList(roulette, K_KartItemReelSpecialEnd[i]);
|
||||
}
|
||||
|
||||
K_LuaHookItemRoulette(player, roulette);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
@ -1247,7 +1254,6 @@ void K_FillItemRouletteData(player_t *player, itemroulette_t *const roulette, bo
|
|||
K_PushToRouletteItemList(roulette, K_KartItemReelBoss[i]);
|
||||
}
|
||||
|
||||
K_LuaHookItemRoulette(player, roulette);
|
||||
return;
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
@ -1324,7 +1328,6 @@ void K_FillItemRouletteData(player_t *player, itemroulette_t *const roulette, bo
|
|||
if (K_ForcedSPB(player, roulette) == true)
|
||||
{
|
||||
K_AddItemToReel(player, roulette, KITEM_SPB);
|
||||
K_LuaHookItemRoulette(player, roulette);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -1349,7 +1352,6 @@ void K_FillItemRouletteData(player_t *player, itemroulette_t *const roulette, bo
|
|||
// singleItem = KITEM_SAD by default,
|
||||
// so it will be used when all items are turned off.
|
||||
K_AddItemToReel(player, roulette, singleItem);
|
||||
K_LuaHookItemRoulette(player, roulette);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -1705,8 +1707,6 @@ void K_FillItemRouletteData(player_t *player, itemroulette_t *const roulette, bo
|
|||
|
||||
totalSpawnChance--;
|
||||
}
|
||||
|
||||
K_LuaHookItemRoulette(player, roulette);
|
||||
}
|
||||
|
||||
/*--------------------------------------------------
|
||||
|
|
@ -1719,7 +1719,7 @@ void K_StartItemRoulette(player_t *const player, boolean ringbox)
|
|||
itemroulette_t *const roulette = &player->itemRoulette;
|
||||
size_t i;
|
||||
|
||||
K_FillItemRouletteData(player, roulette, ringbox, false);
|
||||
K_FillItemRoulette(player, roulette, ringbox);
|
||||
|
||||
if (roulette->autoroulette)
|
||||
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);
|
||||
|
||||
/*--------------------------------------------------
|
||||
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);
|
||||
|
|
|
|||
|
|
@ -4167,17 +4167,21 @@ static void getItemRouletteOrPlayerBasedOnFirstParam(lua_State *L, player_t **pl
|
|||
{
|
||||
if (lua_getmetatable(L, 1))
|
||||
{
|
||||
CONS_Printf("case A\n");
|
||||
lua_getfield(L, LUA_REGISTRYINDEX, META_ITEMROULETTE);
|
||||
if (lua_rawequal(L, -1, -2))
|
||||
{
|
||||
CONS_Printf("case A2\n");
|
||||
*itemRoulette = *(itemroulette_t **)p;
|
||||
}
|
||||
else
|
||||
{
|
||||
CONS_Printf("case B\n");
|
||||
lua_pop(L, 1);
|
||||
lua_getfield(L, LUA_REGISTRYINDEX, META_PLAYER);
|
||||
if (lua_rawequal(L, -1, -2))
|
||||
{
|
||||
CONS_Printf("case B2\n");
|
||||
*player = *(player_t **)p;
|
||||
*itemRoulette = &(*player)->itemRoulette;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -79,7 +79,8 @@ automatically.
|
|||
X (GameQuit),\
|
||||
X (PlayerCmd),/* building the player's ticcmd struct */\
|
||||
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) \
|
||||
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_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);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
|||
|
|
@ -1034,6 +1034,12 @@ static int roulette_hook(
|
|||
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)
|
||||
{
|
||||
return roulette_hook(player, roulette, false, HOOK(FillItemRoulette), res_true);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue