mirror of
https://github.com/shavitush/bhoptimer.git
synced 2025-12-07 10:28:26 +00:00
parent
9a4cdef528
commit
dff6f61145
@ -239,6 +239,7 @@ enum struct cp_cache_t
|
||||
int iClassname;
|
||||
ArrayList aFrames;
|
||||
int iPreFrames;
|
||||
int iTimerPreFrames;
|
||||
bool bSegmented;
|
||||
int iSerial;
|
||||
bool bPractice;
|
||||
@ -1734,11 +1735,21 @@ native int Shavit_GetPlayerPreFrame(int client);
|
||||
* Sets player's preframe length.
|
||||
*
|
||||
* @param client Client index
|
||||
* @param preframe preframe length
|
||||
* @param PreFrame PreFrame length
|
||||
* @param TimerPreFrame Timer start frame length
|
||||
*
|
||||
* @noreturn
|
||||
*/
|
||||
native void Shavit_SetPlayerPreFrame(int client, int preframe);
|
||||
native void Shavit_SetPlayerPreFrame(int client, int PreFrame, int TimerPreFrame);
|
||||
|
||||
/*
|
||||
* Gets player's timer frame
|
||||
*
|
||||
* @param client Client index
|
||||
*
|
||||
* @return Timer start frame
|
||||
*/
|
||||
native int Shavit_GetPlayerTimerframe(int client);
|
||||
|
||||
// same as Shavit_PrintToChat() but loops through the whole server
|
||||
// code stolen from the base halflife.inc file
|
||||
|
||||
@ -64,6 +64,7 @@ enum struct persistent_data_t
|
||||
int iClassname;
|
||||
ArrayList aFrames;
|
||||
int iPreFrames;
|
||||
int iTimerPreFrames;
|
||||
bool bPractice;
|
||||
}
|
||||
|
||||
@ -1135,6 +1136,7 @@ void PersistData(int client)
|
||||
{
|
||||
aData.aFrames = Shavit_GetReplayData(client);
|
||||
aData.iPreFrames = Shavit_GetPlayerPreFrame(client);
|
||||
aData.iTimerPreFrames = Shavit_GetPlayerTimerframe(client);
|
||||
}
|
||||
|
||||
aData.fDisconnectTime = GetEngineTime();
|
||||
@ -1255,7 +1257,7 @@ public Action Timer_LoadPersistentData(Handle Timer, any data)
|
||||
if(gB_Replay && aData.aFrames != null)
|
||||
{
|
||||
Shavit_SetReplayData(client, aData.aFrames);
|
||||
Shavit_SetPlayerPreFrame(client, aData.iPreFrames);
|
||||
Shavit_SetPlayerPreFrame(client, aData.iPreFrames, aData.iTimerPreFrames);
|
||||
}
|
||||
|
||||
if(aData.bPractice)
|
||||
@ -2348,6 +2350,7 @@ bool SaveCheckpoint(int client, int index, bool overflow = false)
|
||||
{
|
||||
cpcache.aFrames = Shavit_GetReplayData(target);
|
||||
cpcache.iPreFrames = Shavit_GetPlayerPreFrame(target);
|
||||
cpcache.iTimerPreFrames = Shavit_GetPlayerTimerframe(target);
|
||||
}
|
||||
|
||||
cpcache.bSegmented = true;
|
||||
@ -2560,7 +2563,7 @@ void TeleportToCheckpoint(int client, int index, bool suppressMessage)
|
||||
else
|
||||
{
|
||||
Shavit_SetReplayData(client, cpcache.aFrames);
|
||||
Shavit_SetPlayerPreFrame(client, cpcache.iPreFrames);
|
||||
Shavit_SetPlayerPreFrame(client, cpcache.iPreFrames, cpcache.iTimerPreFrames);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -210,6 +210,7 @@ public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max
|
||||
CreateNative("Shavit_SetReplayData", Native_SetReplayData);
|
||||
CreateNative("Shavit_GetPlayerPreFrame", Native_GetPreFrame);
|
||||
CreateNative("Shavit_SetPlayerPreFrame", Native_SetPreFrame);
|
||||
CreateNative("Shavit_GetPlayerTimerframe", Native_GetTimerFrame);
|
||||
|
||||
// registers library, check "bool LibraryExists(const char[] name)" in order to use with other plugins
|
||||
RegPluginLibrary("shavit-replay");
|
||||
@ -765,8 +766,19 @@ public int Native_GetPreFrame(Handle handler, int numParams)
|
||||
return gI_PlayerPrerunFrames[GetNativeCell(1)];
|
||||
}
|
||||
|
||||
public int Native_GetTimerFrame(Handle handler, int numParams)
|
||||
{
|
||||
return gI_PlayerTimerStartFrames[GetNativeCell(1)];
|
||||
}
|
||||
|
||||
public int Native_SetPreFrame(Handle handler, int numParams)
|
||||
{
|
||||
int client = GetNativeCell(1);
|
||||
int preframes = GetNativeCell(2);
|
||||
int timerframes = GetNativeCell(3);
|
||||
|
||||
gI_PlayerPrerunFrames[client] = preframes;
|
||||
gI_PlayerTimerStartFrames[client] = timerframes;
|
||||
gI_PlayerPrerunFrames[GetNativeCell(1)] = GetNativeCell(2);
|
||||
}
|
||||
|
||||
@ -1209,7 +1221,7 @@ bool LoadReplay(int style, int track, const char[] path)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool SaveReplay(int style, int track, float time, int steamid, char[] name, int preframes, ArrayList playerrecording)
|
||||
bool SaveReplay(int style, int track, float time, int steamid, char[] name, int preframes, ArrayList playerrecording, int timerstartframe)
|
||||
{
|
||||
char sTrack[4];
|
||||
FormatEx(sTrack, 4, "_%d", track);
|
||||
@ -1228,7 +1240,7 @@ bool SaveReplay(int style, int track, float time, int steamid, char[] name, int
|
||||
fFile.WriteString(gS_Map, true);
|
||||
fFile.WriteInt8(style);
|
||||
fFile.WriteInt8(track);
|
||||
fFile.WriteInt32(preframes);
|
||||
fFile.WriteInt32(preframes < 0 ? timerstartframe : timerstartframe - preframes);
|
||||
|
||||
int iSize = playerrecording.Length;
|
||||
fFile.WriteInt32(iSize);
|
||||
@ -1240,7 +1252,7 @@ bool SaveReplay(int style, int track, float time, int steamid, char[] name, int
|
||||
int iFramesWritten = 0;
|
||||
|
||||
gA_Frames[style][track].Clear();
|
||||
for(int i = 0; i < iSize; i++)
|
||||
for(int i = (preframes < 0 ? 0 : preframes); i < iSize; i++)
|
||||
{
|
||||
playerrecording.GetArray(i, aFrameData, CELLS_PER_FRAME);
|
||||
gA_Frames[style][track].PushArray(aFrameData);
|
||||
@ -1264,7 +1276,7 @@ bool SaveReplay(int style, int track, float time, int steamid, char[] name, int
|
||||
gA_FrameCache[style][track].fTime = time;
|
||||
gA_FrameCache[style][track].bNewFormat = true;
|
||||
strcopy(gA_FrameCache[style][track].sReplayName, MAX_NAME_LENGTH, name);
|
||||
gA_FrameCache[style][track].iPreFrames = preframes;
|
||||
gA_FrameCache[style][track].iPreFrames = preframes < 0 ? timerstartframe : (timerstartframe - preframes);
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -1561,6 +1573,7 @@ public void OnClientDisconnect(int client)
|
||||
if(!IsFakeClient(client))
|
||||
{
|
||||
RequestFrame(DeleteFrames, client);
|
||||
ClearFrames(client);
|
||||
|
||||
return;
|
||||
}
|
||||
@ -1590,7 +1603,8 @@ public void DeleteFrames(int client)
|
||||
|
||||
public Action Shavit_OnStart(int client)
|
||||
{
|
||||
gI_PlayerPrerunFrames[client] = gA_PlayerFrames[client].Length;
|
||||
gI_PlayerPrerunFrames[client] = gA_PlayerFrames[client].Length - RoundToFloor(gCV_PlaybackPreRunTime.FloatValue * gF_Tickrate / gA_StyleSettings[Shavit_GetBhopStyle(client)].fTimescale);
|
||||
gI_PlayerTimerStartFrames[client] = gA_PlayerFrames[client].Length;
|
||||
|
||||
if(!gB_ClearFrame[client])
|
||||
{
|
||||
@ -1669,7 +1683,7 @@ public void Shavit_OnFinish(int client, int style, float time, int jumps, int st
|
||||
GetClientName(client, sName, MAX_NAME_LENGTH);
|
||||
ReplaceString(sName, MAX_NAME_LENGTH, "#", "?");
|
||||
|
||||
SaveReplay(style, track, time, iSteamID, sName, gI_PlayerPrerunFrames[client], gA_PlayerFrames[client]);
|
||||
SaveReplay(style, track, time, iSteamID, sName, gI_PlayerPrerunFrames[client], gA_PlayerFrames[client], gI_PlayerTimerStartFrames[client]);
|
||||
|
||||
if(ReplayEnabled(style))
|
||||
{
|
||||
|
||||
Loading…
Reference in New Issue
Block a user