mirror of
https://github.com/shavitush/bhoptimer.git
synced 2025-12-07 10:28:26 +00:00
add some more checkpoint forwards so mpbhops_but_working can work with segmented styles
This commit is contained in:
parent
98fcc37b7b
commit
69445ebab5
@ -48,6 +48,7 @@ enum struct cp_cache_t
|
|||||||
ArrayList aEvents;
|
ArrayList aEvents;
|
||||||
ArrayList aOutputWaits;
|
ArrayList aOutputWaits;
|
||||||
float vecLadderNormal[3];
|
float vecLadderNormal[3];
|
||||||
|
StringMap customdata;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -101,6 +102,38 @@ forward Action Shavit_OnCheckpointMenuMade(int client, bool segmented, Menu menu
|
|||||||
*/
|
*/
|
||||||
forward Action Shavit_OnCheckpointMenuSelect(int client, int param2, char[] info, int maxlength, int currentCheckpoint, int maxCPs);
|
forward Action Shavit_OnCheckpointMenuSelect(int client, int param2, char[] info, int maxlength, int currentCheckpoint, int maxCPs);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when a checkpoint cache is saved.
|
||||||
|
*
|
||||||
|
* @param client The client the checkpoint cache is being saved for.
|
||||||
|
* @param cache The resulting checkpoint cache structure.
|
||||||
|
* @param index The resulting checkpoint index for this checkpoint cache. -1 if the cache is being saved as "persistent data" for rejoins/spectating.
|
||||||
|
* @param target The target of the checkpoint cache.
|
||||||
|
*
|
||||||
|
* @noreturn
|
||||||
|
*/
|
||||||
|
forward void Shavit_OnCheckpointCacheSaved(int client, cp_cache_t cache, int index, int target);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when a checkpoint cache is being loaded.
|
||||||
|
*
|
||||||
|
* @param client The client who is loading the checkpoint cache.
|
||||||
|
* @param cache The cache.
|
||||||
|
* @param index The checkpoint index for this cache. -1 if the cache is being loaded from "persistent data" for rejoins/spectating.
|
||||||
|
*
|
||||||
|
* @noreturn
|
||||||
|
*/
|
||||||
|
forward void Shavit_OnCheckpointCacheLoaded(int client, cp_cache_t cache, int index);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when a checkpoint cache is being deleted.
|
||||||
|
*
|
||||||
|
* @param cache The cache.
|
||||||
|
*
|
||||||
|
* @noreturn
|
||||||
|
*/
|
||||||
|
forward void Shavit_OnCheckpointCacheDeleted(cp_cache_t cache);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the total number of CPs that a client has saved
|
* Gets the total number of CPs that a client has saved
|
||||||
*
|
*
|
||||||
|
|||||||
@ -71,6 +71,9 @@ Handle gH_Forwards_OnTeleport = null;
|
|||||||
Handle gH_Forwards_OnDelete = null;
|
Handle gH_Forwards_OnDelete = null;
|
||||||
Handle gH_Forwards_OnCheckpointMenuMade = null;
|
Handle gH_Forwards_OnCheckpointMenuMade = null;
|
||||||
Handle gH_Forwards_OnCheckpointMenuSelect = null;
|
Handle gH_Forwards_OnCheckpointMenuSelect = null;
|
||||||
|
Handle gH_Forwards_OnCheckpointCacheSaved = null;
|
||||||
|
Handle gH_Forwards_OnCheckpointCacheLoaded = null;
|
||||||
|
Handle gH_Forwards_OnCheckpointCacheDeleted = null;
|
||||||
|
|
||||||
chatstrings_t gS_ChatStrings;
|
chatstrings_t gS_ChatStrings;
|
||||||
|
|
||||||
@ -150,6 +153,9 @@ public void OnPluginStart()
|
|||||||
gH_Forwards_OnCheckpointMenuMade = CreateGlobalForward("Shavit_OnCheckpointMenuMade", ET_Event, Param_Cell, Param_Cell, Param_Cell);
|
gH_Forwards_OnCheckpointMenuMade = CreateGlobalForward("Shavit_OnCheckpointMenuMade", ET_Event, Param_Cell, Param_Cell, Param_Cell);
|
||||||
gH_Forwards_OnCheckpointMenuSelect = CreateGlobalForward("Shavit_OnCheckpointMenuSelect", ET_Event, Param_Cell, Param_Cell, Param_String, Param_Cell, Param_Cell, Param_Cell);
|
gH_Forwards_OnCheckpointMenuSelect = CreateGlobalForward("Shavit_OnCheckpointMenuSelect", ET_Event, Param_Cell, Param_Cell, Param_String, Param_Cell, Param_Cell, Param_Cell);
|
||||||
gH_Forwards_OnDelete = CreateGlobalForward("Shavit_OnDelete", ET_Event, Param_Cell, Param_Cell);
|
gH_Forwards_OnDelete = CreateGlobalForward("Shavit_OnDelete", ET_Event, Param_Cell, Param_Cell);
|
||||||
|
gH_Forwards_OnCheckpointCacheSaved = CreateGlobalForward("Shavit_OnCheckpointCacheSaved", ET_Ignore, Param_Cell, Param_Array, Param_Cell, Param_Cell);
|
||||||
|
gH_Forwards_OnCheckpointCacheLoaded = CreateGlobalForward("Shavit_OnCheckpointCacheLoaded", ET_Ignore, Param_Cell, Param_Array, Param_Cell);
|
||||||
|
gH_Forwards_OnCheckpointCacheDeleted = CreateGlobalForward("Shavit_OnCheckpointCacheDeleted", ET_Ignore, Param_Array);
|
||||||
|
|
||||||
gEV_Type = GetEngineVersion();
|
gEV_Type = GetEngineVersion();
|
||||||
|
|
||||||
@ -662,7 +668,7 @@ void PersistData(int client, bool disconnected)
|
|||||||
|
|
||||||
if (!gB_SaveStates[client])
|
if (!gB_SaveStates[client])
|
||||||
{
|
{
|
||||||
SaveCheckpointCache(client, aData.cpcache, false);
|
SaveCheckpointCache(client, client, aData.cpcache, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
gB_SaveStates[client] = true;
|
gB_SaveStates[client] = true;
|
||||||
@ -724,14 +730,25 @@ void LoadPersistentData(int serial)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Call_StartForward(gH_Forwards_OnCheckpointCacheLoaded);
|
||||||
|
Call_PushCell(client);
|
||||||
|
Call_PushArray(aData.cpcache, sizeof(aData.cpcache));
|
||||||
|
Call_PushCell(-1);
|
||||||
|
Call_Finish();
|
||||||
|
|
||||||
DeletePersistentData(iIndex, aData);
|
DeletePersistentData(iIndex, aData);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeleteCheckpointCache(cp_cache_t cache)
|
void DeleteCheckpointCache(cp_cache_t cache)
|
||||||
{
|
{
|
||||||
|
Call_StartForward(gH_Forwards_OnCheckpointCacheDeleted);
|
||||||
|
Call_PushArray(cache, sizeof(cache));
|
||||||
|
Call_Finish();
|
||||||
|
|
||||||
delete cache.aFrames;
|
delete cache.aFrames;
|
||||||
delete cache.aEvents;
|
delete cache.aEvents;
|
||||||
delete cache.aOutputWaits;
|
delete cache.aOutputWaits;
|
||||||
|
delete cache.customdata;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeleteCheckpointCacheList(ArrayList cps)
|
void DeleteCheckpointCacheList(ArrayList cps)
|
||||||
@ -1410,7 +1427,7 @@ bool SaveCheckpoint(int client)
|
|||||||
}
|
}
|
||||||
|
|
||||||
cp_cache_t cpcache;
|
cp_cache_t cpcache;
|
||||||
SaveCheckpointCache(target, cpcache, true);
|
SaveCheckpointCache(client, target, cpcache, index);
|
||||||
gI_CurrentCheckpoint[client] = index;
|
gI_CurrentCheckpoint[client] = index;
|
||||||
|
|
||||||
if(overflow)
|
if(overflow)
|
||||||
@ -1429,7 +1446,7 @@ bool SaveCheckpoint(int client)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SaveCheckpointCache(int target, cp_cache_t cpcache, bool actually_a_checkpoint)
|
void SaveCheckpointCache(int saver, int target, cp_cache_t cpcache, int index)
|
||||||
{
|
{
|
||||||
GetClientAbsOrigin(target, cpcache.fPosition);
|
GetClientAbsOrigin(target, cpcache.fPosition);
|
||||||
GetClientEyeAngles(target, cpcache.fAngles);
|
GetClientEyeAngles(target, cpcache.fAngles);
|
||||||
@ -1462,7 +1479,7 @@ void SaveCheckpointCache(int target, cp_cache_t cpcache, bool actually_a_checkpo
|
|||||||
GetEntPropString(target, Prop_Data, "m_iName", cpcache.sTargetname, 64);
|
GetEntPropString(target, Prop_Data, "m_iName", cpcache.sTargetname, 64);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cpcache.iMoveType == MOVETYPE_NONE || (cpcache.iMoveType == MOVETYPE_NOCLIP && actually_a_checkpoint))
|
if (cpcache.iMoveType == MOVETYPE_NONE || (cpcache.iMoveType == MOVETYPE_NOCLIP && index != -1))
|
||||||
{
|
{
|
||||||
cpcache.iMoveType = MOVETYPE_WALK;
|
cpcache.iMoveType = MOVETYPE_WALK;
|
||||||
}
|
}
|
||||||
@ -1522,7 +1539,7 @@ void SaveCheckpointCache(int target, cp_cache_t cpcache, bool actually_a_checkpo
|
|||||||
cpcache.aSnapshot = snapshot;
|
cpcache.aSnapshot = snapshot;
|
||||||
cpcache.bSegmented = CanSegment(target);
|
cpcache.bSegmented = CanSegment(target);
|
||||||
|
|
||||||
if (cpcache.bSegmented && gB_ReplayRecorder && actually_a_checkpoint && cpcache.aFrames == null)
|
if (cpcache.bSegmented && gB_ReplayRecorder && index != -1 && cpcache.aFrames == null)
|
||||||
{
|
{
|
||||||
cpcache.aFrames = Shavit_GetReplayData(target, false);
|
cpcache.aFrames = Shavit_GetReplayData(target, false);
|
||||||
cpcache.iPreFrames = Shavit_GetPlayerPreFrames(target);
|
cpcache.iPreFrames = Shavit_GetPlayerPreFrames(target);
|
||||||
@ -1540,6 +1557,20 @@ void SaveCheckpointCache(int target, cp_cache_t cpcache, bool actually_a_checkpo
|
|||||||
}
|
}
|
||||||
|
|
||||||
cpcache.iSteamID = GetSteamAccountID(target);
|
cpcache.iSteamID = GetSteamAccountID(target);
|
||||||
|
|
||||||
|
if (cpcache.iSteamID != GetSteamAccountID(saver))
|
||||||
|
{
|
||||||
|
cpcache.aSnapshot.bPracticeMode = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
cpcache.customdata = new StringMap();
|
||||||
|
|
||||||
|
Call_StartForward(gH_Forwards_OnCheckpointCacheSaved);
|
||||||
|
Call_PushCell(saver);
|
||||||
|
Call_PushArray(cpcache, sizeof(cpcache));
|
||||||
|
Call_PushCell(index);
|
||||||
|
Call_PushCell(target);
|
||||||
|
Call_Finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TeleportToCheckpoint(int client, int index, bool suppressMessage)
|
void TeleportToCheckpoint(int client, int index, bool suppressMessage)
|
||||||
@ -1605,6 +1636,12 @@ void TeleportToCheckpoint(int client, int index, bool suppressMessage)
|
|||||||
LoadCheckpointCache(client, cpcache, false);
|
LoadCheckpointCache(client, cpcache, false);
|
||||||
Shavit_ResumeTimer(client);
|
Shavit_ResumeTimer(client);
|
||||||
|
|
||||||
|
Call_StartForward(gH_Forwards_OnCheckpointCacheLoaded);
|
||||||
|
Call_PushCell(client);
|
||||||
|
Call_PushArray(cpcache, sizeof(cpcache));
|
||||||
|
Call_PushCell(index);
|
||||||
|
Call_Finish();
|
||||||
|
|
||||||
if(!suppressMessage)
|
if(!suppressMessage)
|
||||||
{
|
{
|
||||||
Shavit_PrintToChat(client, "%T", "MiscCheckpointsTeleported", client, index, gS_ChatStrings.sVariable, gS_ChatStrings.sText);
|
Shavit_PrintToChat(client, "%T", "MiscCheckpointsTeleported", client, index, gS_ChatStrings.sVariable, gS_ChatStrings.sText);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user