mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Don't award Prison Eggs bopped after exiting
- Short-circuits P_AddBrokenPrison if EVERYONE is exiting
- Still calls P_DoAllPlayersExit to catch spectators with respect to server softlock
- Don't run K_SpawnBattlePoints if the recipient is exiting
- Also re-arranges K_GivePointsToPlayer just in case the score addition ends the round
This commit is contained in:
parent
b5483faecf
commit
b5fd26777c
3 changed files with 31 additions and 16 deletions
|
|
@ -105,6 +105,9 @@ void K_SpawnBattlePoints(player_t *source, player_t *victim, UINT8 amount)
|
|||
if (!source || !source->mo)
|
||||
return;
|
||||
|
||||
if (source->exiting)
|
||||
return;
|
||||
|
||||
if (amount == 1)
|
||||
st = S_BATTLEPOINT1A;
|
||||
else if (amount == 2)
|
||||
|
|
|
|||
|
|
@ -5337,8 +5337,8 @@ void K_TakeBumpersFromPlayer(player_t *player, player_t *victim, UINT8 amount)
|
|||
|
||||
void K_GivePointsToPlayer(player_t *player, player_t *victim, UINT8 amount)
|
||||
{
|
||||
K_SpawnBattlePoints(player, victim, amount); // first just in case player score ends the game
|
||||
P_AddPlayerScore(player, amount);
|
||||
K_SpawnBattlePoints(player, victim, amount);
|
||||
}
|
||||
|
||||
#define MINEQUAKEDIST 4096
|
||||
|
|
|
|||
|
|
@ -1142,22 +1142,29 @@ static void P_AddBrokenPrison(mobj_t *target, mobj_t *inflictor, mobj_t *source)
|
|||
if (!battleprisons)
|
||||
return;
|
||||
|
||||
// Check to see if everyone's out.
|
||||
{
|
||||
UINT8 i = 0;
|
||||
|
||||
for (; i < MAXPLAYERS; i++)
|
||||
{
|
||||
if (!playeringame[i] || players[i].spectator || players[i].exiting)
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
|
||||
if (i == MAXPLAYERS)
|
||||
{
|
||||
// Nobody can claim credit for this just-too-late hit!
|
||||
P_DoAllPlayersExit(0, false); // softlock prevention
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// If you CAN recieve points, get them!
|
||||
if ((gametyperules & GTR_POINTLIMIT) && (source && source->player))
|
||||
{
|
||||
/*mobj_t * ring;
|
||||
for (i = 0; i < 2; i++)
|
||||
{
|
||||
dir += (ANGLE_MAX/3);
|
||||
ring = P_SpawnMobj(target->x, target->y, target->z, MT_RING);
|
||||
ring->angle = dir;
|
||||
P_InstaThrust(ring, dir, 16*ring->scale);
|
||||
ring->momz = 8 * target->scale * P_MobjFlip(target);
|
||||
P_SetTarget(&ring->tracer, source);
|
||||
source->player->pickuprings++;
|
||||
}*/
|
||||
|
||||
P_AddPlayerScore(source->player, 1);
|
||||
K_SpawnBattlePoints(source->player, NULL, 1);
|
||||
K_GivePointsToPlayer(source->player, NULL, 1);
|
||||
}
|
||||
|
||||
targetdamaging_t targetdamaging = UFOD_GENERIC;
|
||||
|
|
@ -1202,13 +1209,18 @@ static void P_AddBrokenPrison(mobj_t *target, mobj_t *inflictor, mobj_t *source)
|
|||
gamedata->prisoneggstothispickup--;
|
||||
}
|
||||
|
||||
// Standard progression.
|
||||
if (++numtargets >= maptargets)
|
||||
{
|
||||
// Yipue!
|
||||
|
||||
P_DoAllPlayersExit(0, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
S_StartSound(NULL, sfx_s221);
|
||||
|
||||
// Time limit recovery
|
||||
if (timelimitintics)
|
||||
{
|
||||
UINT16 bonustime = 10*TICRATE;
|
||||
|
|
@ -1255,7 +1267,7 @@ static void P_AddBrokenPrison(mobj_t *target, mobj_t *inflictor, mobj_t *source)
|
|||
secretextratime = TICRATE/2;
|
||||
}
|
||||
|
||||
|
||||
// Prison Egg challenge drops (CDs, etc)
|
||||
#ifdef DEVELOP
|
||||
extern consvar_t cv_debugprisoncd;
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue