Added duck status saving to checkpoints. (#401)

Also added stamina saving.
This commit is contained in:
shavitush 2017-07-31 05:33:13 +03:00
parent 4902098570
commit cba7578df8
2 changed files with 28 additions and 2 deletions

View File

@ -63,6 +63,8 @@ enum
iCPMoveType, iCPMoveType,
fCPGravity, fCPGravity,
fCPSpeed, fCPSpeed,
fCPStamina,
bCPDucking,
PCHECKPOINTSCACHE_SIZE PCHECKPOINTSCACHE_SIZE
}; };
@ -891,6 +893,8 @@ void ResetCheckpoints(int client)
gA_PlayerCheckPointsCache[client][i][iCPMoveType] = MOVETYPE_WALK; gA_PlayerCheckPointsCache[client][i][iCPMoveType] = MOVETYPE_WALK;
gA_PlayerCheckPointsCache[client][i][fCPGravity] = 1.0; gA_PlayerCheckPointsCache[client][i][fCPGravity] = 1.0;
gA_PlayerCheckPointsCache[client][i][fCPSpeed] = 1.0; gA_PlayerCheckPointsCache[client][i][fCPSpeed] = 1.0;
gA_PlayerCheckPointsCache[client][i][fCPStamina] = 1.0;
gA_PlayerCheckPointsCache[client][i][bCPDucking] = false;
} }
gA_CheckpointsCache[client][iCheckpoints] = 0; gA_CheckpointsCache[client][iCheckpoints] = 0;
@ -1491,6 +1495,8 @@ void SaveCheckpoint(int client, int index)
gA_PlayerCheckPointsCache[client][index][iCPMoveType] = GetEntityMoveType(client); gA_PlayerCheckPointsCache[client][index][iCPMoveType] = GetEntityMoveType(client);
gA_PlayerCheckPointsCache[client][index][fCPGravity] = GetEntityGravity(client); gA_PlayerCheckPointsCache[client][index][fCPGravity] = GetEntityGravity(client);
gA_PlayerCheckPointsCache[client][index][fCPSpeed] = 1.0; gA_PlayerCheckPointsCache[client][index][fCPSpeed] = 1.0;
gA_PlayerCheckPointsCache[client][index][fCPStamina] = GetEntPropFloat(client, Prop_Send, "m_flStamina");
gA_PlayerCheckPointsCache[client][index][bCPDucking] = (GetClientButtons(client) & IN_DUCK) > 0;
Shavit_SaveSnapshot(client, gA_CheckpointsSnapshots[client][index]); Shavit_SaveSnapshot(client, gA_CheckpointsSnapshots[client][index]);
} }
@ -1502,11 +1508,20 @@ void TeleportToCheckpoint(int client, int index)
return; return;
} }
Shavit_SetPracticeMode(client, true, !Shavit_InsideZone(client, Track_Main, Zone_Start)); bool bDucking = (GetClientButtons(client) & IN_DUCK) > 0;
Shavit_LoadSnapshot(client, gA_CheckpointsSnapshots[client][index]);
if(gA_PlayerCheckPointsCache[client][index][bCPDucking] != bDucking)
{
Shavit_PrintToChat(client, "%T", (bDucking)? "MiscCheckpointsCrouchOff":"MiscCheckpointsCrouchOn", client, gS_ChatStrings[sMessageWarning], gS_ChatStrings[sMessageText]);
return;
}
bool bInStart = Shavit_InsideZone(client, Zone_Start, -1); bool bInStart = Shavit_InsideZone(client, Zone_Start, -1);
Shavit_SetPracticeMode(client, true, !bInStart);
Shavit_LoadSnapshot(client, gA_CheckpointsSnapshots[client][index]);
TeleportEntity(client, gF_Checkpoints[client][index][0], TeleportEntity(client, gF_Checkpoints[client][index][0],
((gI_CheckpointsSettings[client] & CP_ANGLES) > 0)? gF_Checkpoints[client][index][1]:NULL_VECTOR, ((gI_CheckpointsSettings[client] & CP_ANGLES) > 0)? gF_Checkpoints[client][index][1]:NULL_VECTOR,
((gI_CheckpointsSettings[client] & CP_VELOCITY) > 0)? gF_Checkpoints[client][index][2]:NULL_VECTOR); ((gI_CheckpointsSettings[client] & CP_VELOCITY) > 0)? gF_Checkpoints[client][index][2]:NULL_VECTOR);
@ -1514,6 +1529,7 @@ void TeleportToCheckpoint(int client, int index)
SetEntityMoveType(client, view_as<MoveType>(gA_PlayerCheckPointsCache[client][index][iCPMoveType])); SetEntityMoveType(client, view_as<MoveType>(gA_PlayerCheckPointsCache[client][index][iCPMoveType]));
SetEntityGravity(client, view_as<float>(gA_PlayerCheckPointsCache[client][index][fCPGravity])); SetEntityGravity(client, view_as<float>(gA_PlayerCheckPointsCache[client][index][fCPGravity]));
SetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue", view_as<float>(gA_PlayerCheckPointsCache[client][index][fCPSpeed])); SetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue", view_as<float>(gA_PlayerCheckPointsCache[client][index][fCPSpeed]));
SetEntPropFloat(client, Prop_Send, "m_flStamina", view_as<float>(gA_PlayerCheckPointsCache[client][index][fCPStamina]));
if(bInStart) if(bInStart)
{ {

View File

@ -78,6 +78,16 @@
"#format" "{1:d},{2:s},{3:s}" "#format" "{1:d},{2:s},{3:s}"
"en" "Checkpoint {1} is {2}empty{3}." "en" "Checkpoint {1} is {2}empty{3}."
} }
"MiscCheckpointsCrouchOn"
{
"#format" "{1:s},{2:s}"
"en" "You must {1}duck{2} while teleporting to this checkpoint."
}
"MiscCheckpointsCrouchOff"
{
"#format" "{1:s},{2:s}"
"en" "You must {1}stop ducking{2} while teleporting to this checkpoint."
}
// ---------- Menus ---------- // // ---------- Menus ---------- //
"TeleportMenuTitle" "TeleportMenuTitle"
{ {