mirror of
https://github.com/shavitush/bhoptimer.git
synced 2025-12-07 18:38:26 +00:00
Structified replay plugin, doubled #pragma dynamic
First chat color in CS:GO is broken.. pending fix
This commit is contained in:
parent
2ab6c57e1f
commit
f999073ee2
@ -411,16 +411,7 @@ public Action Hook_SayText2(UserMsg msg_id, any msg, const int[] players, int pl
|
|||||||
if(strlen(sName) > 0)
|
if(strlen(sName) > 0)
|
||||||
{
|
{
|
||||||
FormatChat(client, sName, MAXLENGTH_NAME);
|
FormatChat(client, sName, MAXLENGTH_NAME);
|
||||||
|
strcopy(sOriginalName, MAXLENGTH_NAME, sName);
|
||||||
if(gEV_Type == Engine_CSGO)
|
|
||||||
{
|
|
||||||
FormatEx(sOriginalName, MAXLENGTH_NAME, " %s", sName);
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
strcopy(sOriginalName, MAXLENGTH_NAME, sName);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(strlen(sMessage) > 0)
|
if(strlen(sMessage) > 0)
|
||||||
@ -502,11 +493,12 @@ void Frame_SendText(DataPack pack)
|
|||||||
|
|
||||||
if(gB_Protobuf)
|
if(gB_Protobuf)
|
||||||
{
|
{
|
||||||
Protobuf pbmsg = view_as<any>(hSayText2);
|
Protobuf pbmsg = view_as<Protobuf>(hSayText2);
|
||||||
pbmsg.SetInt("ent_idx", client);
|
pbmsg.SetInt("ent_idx", client);
|
||||||
pbmsg.SetBool("chat", true);
|
pbmsg.SetBool("chat", true);
|
||||||
pbmsg.SetString("msg_name", sText);
|
pbmsg.SetString("msg_name", sText);
|
||||||
|
|
||||||
|
// needed to not crash
|
||||||
for(int i = 1; i <= 4; i++)
|
for(int i = 1; i <= 4; i++)
|
||||||
{
|
{
|
||||||
pbmsg.AddString("params", "");
|
pbmsg.AddString("params", "");
|
||||||
@ -517,7 +509,7 @@ void Frame_SendText(DataPack pack)
|
|||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
BfWrite bfmsg = view_as<any>(hSayText2);
|
BfWrite bfmsg = view_as<BfWrite>(hSayText2);
|
||||||
bfmsg.WriteByte(client);
|
bfmsg.WriteByte(client);
|
||||||
bfmsg.WriteByte(true);
|
bfmsg.WriteByte(true);
|
||||||
bfmsg.WriteString(sText);
|
bfmsg.WriteString(sText);
|
||||||
@ -1034,16 +1026,7 @@ void PreviewChat(int client, int rank)
|
|||||||
strcopy(sCMessage, MAXLENGTH_CMESSAGE, cache.sMessage);
|
strcopy(sCMessage, MAXLENGTH_CMESSAGE, cache.sMessage);
|
||||||
|
|
||||||
FormatChat(client, sName, MAXLENGTH_NAME);
|
FormatChat(client, sName, MAXLENGTH_NAME);
|
||||||
|
strcopy(sOriginalName, MAXLENGTH_NAME, sName);
|
||||||
if(gEV_Type == Engine_CSGO)
|
|
||||||
{
|
|
||||||
FormatEx(sOriginalName, MAXLENGTH_NAME, " %s", sName);
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
strcopy(sOriginalName, MAXLENGTH_NAME, sName);
|
|
||||||
}
|
|
||||||
|
|
||||||
FormatChat(client, sCMessage, MAXLENGTH_CMESSAGE);
|
FormatChat(client, sCMessage, MAXLENGTH_CMESSAGE);
|
||||||
|
|
||||||
|
|||||||
@ -59,6 +59,7 @@ enum struct playertimer_t
|
|||||||
|
|
||||||
// game type (CS:S/CS:GO/TF2)
|
// game type (CS:S/CS:GO/TF2)
|
||||||
EngineVersion gEV_Type = Engine_Unknown;
|
EngineVersion gEV_Type = Engine_Unknown;
|
||||||
|
bool gB_Protobuf = false;
|
||||||
|
|
||||||
// database handle
|
// database handle
|
||||||
Database gH_SQL = null;
|
Database gH_SQL = null;
|
||||||
@ -229,6 +230,7 @@ public void OnPluginStart()
|
|||||||
|
|
||||||
// game types
|
// game types
|
||||||
gEV_Type = GetEngineVersion();
|
gEV_Type = GetEngineVersion();
|
||||||
|
gB_Protobuf = (GetUserMessageType() == UM_Protobuf);
|
||||||
|
|
||||||
if(gEV_Type == Engine_CSGO)
|
if(gEV_Type == Engine_CSGO)
|
||||||
{
|
{
|
||||||
@ -1132,25 +1134,35 @@ public int Native_PrintToChat(Handle handler, int numParams)
|
|||||||
FormatNativeString(0, 2, 3, 300, iWritten, sBuffer);
|
FormatNativeString(0, 2, 3, 300, iWritten, sBuffer);
|
||||||
Format(sBuffer, 300, "%s %s%s", gS_ChatStrings.sPrefix, gS_ChatStrings.sText, sBuffer);
|
Format(sBuffer, 300, "%s %s%s", gS_ChatStrings.sPrefix, gS_ChatStrings.sText, sBuffer);
|
||||||
|
|
||||||
if(IsSource2013(gEV_Type))
|
Handle hSayText2 = StartMessageOne("SayText2", client, USERMSG_RELIABLE|USERMSG_BLOCKHOOKS);
|
||||||
{
|
|
||||||
Handle hSayText2 = StartMessageOne("SayText2", client);
|
|
||||||
|
|
||||||
if(hSayText2 != null)
|
if(gB_Protobuf)
|
||||||
|
{
|
||||||
|
Protobuf pbmsg = view_as<Protobuf>(CloneHandle(hSayText2));
|
||||||
|
pbmsg.SetInt("ent_idx", client);
|
||||||
|
pbmsg.SetBool("chat", !gB_StopChatSound);
|
||||||
|
pbmsg.SetString("msg_name", sBuffer);
|
||||||
|
|
||||||
|
// needed to not crash
|
||||||
|
for(int i = 1; i <= 4; i++)
|
||||||
{
|
{
|
||||||
BfWriteByte(hSayText2, 0);
|
pbmsg.AddString("params", "");
|
||||||
BfWriteByte(hSayText2, !gB_StopChatSound);
|
|
||||||
BfWriteString(hSayText2, sBuffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EndMessage();
|
delete pbmsg;
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PrintToChat(client, " %s", sBuffer);
|
BfWrite bfmsg = view_as<BfWrite>(CloneHandle(hSayText2));
|
||||||
|
bfmsg.WriteByte(client);
|
||||||
|
bfmsg.WriteByte(!gB_StopChatSound);
|
||||||
|
bfmsg.WriteString(sBuffer);
|
||||||
|
delete bfmsg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EndMessage();
|
||||||
|
|
||||||
gB_StopChatSound = false;
|
gB_StopChatSound = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -40,7 +40,7 @@
|
|||||||
|
|
||||||
#pragma newdecls required
|
#pragma newdecls required
|
||||||
#pragma semicolon 1
|
#pragma semicolon 1
|
||||||
#pragma dynamic 131072
|
#pragma dynamic 262144
|
||||||
|
|
||||||
enum struct centralbot_cache_t
|
enum struct centralbot_cache_t
|
||||||
{
|
{
|
||||||
@ -48,7 +48,7 @@ enum struct centralbot_cache_t
|
|||||||
int iStyle;
|
int iStyle;
|
||||||
ReplayStatus iReplayStatus;
|
ReplayStatus iReplayStatus;
|
||||||
int iTrack;
|
int iTrack;
|
||||||
}
|
};
|
||||||
|
|
||||||
enum struct replaystrings_t
|
enum struct replaystrings_t
|
||||||
{
|
{
|
||||||
@ -58,7 +58,16 @@ enum struct replaystrings_t
|
|||||||
char sCentralStyle[MAX_NAME_LENGTH];
|
char sCentralStyle[MAX_NAME_LENGTH];
|
||||||
char sCentralStyleTag[MAX_NAME_LENGTH];
|
char sCentralStyleTag[MAX_NAME_LENGTH];
|
||||||
char sUnloaded[MAX_NAME_LENGTH];
|
char sUnloaded[MAX_NAME_LENGTH];
|
||||||
}
|
};
|
||||||
|
|
||||||
|
enum struct framecache_t
|
||||||
|
{
|
||||||
|
int iFrameCount;
|
||||||
|
float fTime;
|
||||||
|
bool bNewFormat;
|
||||||
|
int iReplayVersion;
|
||||||
|
char sReplayName[MAX_NAME_LENGTH];
|
||||||
|
};
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
@ -77,8 +86,7 @@ int gI_ReplayBotClient[STYLE_LIMIT];
|
|||||||
ArrayList gA_Frames[STYLE_LIMIT][TRACKS_SIZE];
|
ArrayList gA_Frames[STYLE_LIMIT][TRACKS_SIZE];
|
||||||
float gF_StartTick[STYLE_LIMIT];
|
float gF_StartTick[STYLE_LIMIT];
|
||||||
ReplayStatus gRS_ReplayStatus[STYLE_LIMIT];
|
ReplayStatus gRS_ReplayStatus[STYLE_LIMIT];
|
||||||
any gA_FrameCache[STYLE_LIMIT][TRACKS_SIZE][4]; // int frame_count, float time, bool new_format, int replay_version
|
framecache_t gA_FrameCache[STYLE_LIMIT][TRACKS_SIZE];
|
||||||
char gS_ReplayNames[STYLE_LIMIT][TRACKS_SIZE][MAX_NAME_LENGTH];
|
|
||||||
bool gB_ForciblyStopped = false;
|
bool gB_ForciblyStopped = false;
|
||||||
|
|
||||||
bool gB_Button[MAXPLAYERS+1];
|
bool gB_Button[MAXPLAYERS+1];
|
||||||
@ -359,10 +367,10 @@ public int Native_IsReplayDataLoaded(Handle handler, int numParams)
|
|||||||
|
|
||||||
if(gB_CentralBot)
|
if(gB_CentralBot)
|
||||||
{
|
{
|
||||||
return (gA_CentralCache.iClient != -1 && gA_CentralCache.iReplayStatus != Replay_Idle && view_as<int>(gA_FrameCache[style][track][0]) > 0);
|
return view_as<int>(gA_CentralCache.iClient != -1 && gA_CentralCache.iReplayStatus != Replay_Idle && gA_FrameCache[style][track].iFrameCount > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
return view_as<int>(ReplayEnabled(style) && gA_FrameCache[style][Track_Main][0] > 0);
|
return view_as<int>(ReplayEnabled(style) && gA_FrameCache[style][Track_Main].iFrameCount > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int Native_ReloadReplay(Handle handler, int numParams)
|
public int Native_ReloadReplay(Handle handler, int numParams)
|
||||||
@ -381,10 +389,10 @@ public int Native_ReloadReplay(Handle handler, int numParams)
|
|||||||
|
|
||||||
delete gA_Frames[style][track];
|
delete gA_Frames[style][track];
|
||||||
gA_Frames[style][track] = new ArrayList(CELLS_PER_FRAME);
|
gA_Frames[style][track] = new ArrayList(CELLS_PER_FRAME);
|
||||||
gA_FrameCache[style][track][0] = 0;
|
gA_FrameCache[style][track].iFrameCount = 0;
|
||||||
gA_FrameCache[style][track][1] = 0.0;
|
gA_FrameCache[style][track].fTime = 0.0;
|
||||||
gA_FrameCache[style][track][2] = false;
|
gA_FrameCache[style][track].bNewFormat = false;
|
||||||
strcopy(gS_ReplayNames[style][track], MAX_NAME_LENGTH, "invalid");
|
strcopy(gA_FrameCache[style][track].sReplayName, MAX_NAME_LENGTH, "invalid");
|
||||||
|
|
||||||
bool loaded = false;
|
bool loaded = false;
|
||||||
|
|
||||||
@ -479,7 +487,7 @@ public int Native_GetReplayData(Handle handler, int numParams)
|
|||||||
|
|
||||||
public int Native_GetReplayFrameCount(Handle handler, int numParams)
|
public int Native_GetReplayFrameCount(Handle handler, int numParams)
|
||||||
{
|
{
|
||||||
return view_as<int>(gA_FrameCache[GetNativeCell(1)][GetNativeCell(2)][0]);
|
return gA_FrameCache[GetNativeCell(1)][GetNativeCell(2)].iFrameCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int Native_GetReplayLength(Handle handler, int numParams)
|
public int Native_GetReplayLength(Handle handler, int numParams)
|
||||||
@ -489,7 +497,7 @@ public int Native_GetReplayLength(Handle handler, int numParams)
|
|||||||
|
|
||||||
public int Native_GetReplayName(Handle handler, int numParams)
|
public int Native_GetReplayName(Handle handler, int numParams)
|
||||||
{
|
{
|
||||||
return SetNativeString(3, gS_ReplayNames[GetNativeCell(1)][GetNativeCell(2)], GetNativeCell(4));
|
return SetNativeString(3, gA_FrameCache[GetNativeCell(1)][GetNativeCell(2)].sReplayName, GetNativeCell(4));
|
||||||
}
|
}
|
||||||
|
|
||||||
public int Native_GetReplayTime(Handle handler, int numParams)
|
public int Native_GetReplayTime(Handle handler, int numParams)
|
||||||
@ -853,10 +861,10 @@ public void OnMapStart()
|
|||||||
{
|
{
|
||||||
delete gA_Frames[i][j];
|
delete gA_Frames[i][j];
|
||||||
gA_Frames[i][j] = new ArrayList(CELLS_PER_FRAME);
|
gA_Frames[i][j] = new ArrayList(CELLS_PER_FRAME);
|
||||||
gA_FrameCache[i][j][0] = 0;
|
gA_FrameCache[i][j].iFrameCount = 0;
|
||||||
gA_FrameCache[i][j][1] = 0.0;
|
gA_FrameCache[i][j].fTime = 0.0;
|
||||||
gA_FrameCache[i][j][2] = false;
|
gA_FrameCache[i][j].bNewFormat = false;
|
||||||
strcopy(gS_ReplayNames[i][j], MAX_NAME_LENGTH, "invalid");
|
strcopy(gA_FrameCache[i][j].sReplayName, MAX_NAME_LENGTH, "invalid");
|
||||||
|
|
||||||
loaded = DefaultLoadReplay(i, j);
|
loaded = DefaultLoadReplay(i, j);
|
||||||
}
|
}
|
||||||
@ -942,11 +950,11 @@ bool LoadReplay(int style, int track, const char[] path)
|
|||||||
|
|
||||||
if(StrEqual(sExplodedHeader[1], REPLAY_FORMAT_FINAL)) // hopefully, the last of them
|
if(StrEqual(sExplodedHeader[1], REPLAY_FORMAT_FINAL)) // hopefully, the last of them
|
||||||
{
|
{
|
||||||
gA_FrameCache[style][track][3] = StringToInt(sExplodedHeader[0]);
|
gA_FrameCache[style][track].iReplayVersion = StringToInt(sExplodedHeader[0]);
|
||||||
|
|
||||||
int iTemp = 0;
|
int iTemp = 0;
|
||||||
fFile.ReadInt32(iTemp);
|
fFile.ReadInt32(iTemp);
|
||||||
gA_FrameCache[style][track][0] = iTemp;
|
gA_FrameCache[style][track].iFrameCount = iTemp;
|
||||||
|
|
||||||
if(gA_Frames[style][track] == null)
|
if(gA_Frames[style][track] == null)
|
||||||
{
|
{
|
||||||
@ -956,7 +964,7 @@ bool LoadReplay(int style, int track, const char[] path)
|
|||||||
gA_Frames[style][track].Resize(iTemp);
|
gA_Frames[style][track].Resize(iTemp);
|
||||||
|
|
||||||
fFile.ReadInt32(iTemp);
|
fFile.ReadInt32(iTemp);
|
||||||
gA_FrameCache[style][track][1] = iTemp;
|
gA_FrameCache[style][track].fTime = view_as<float>(iTemp);
|
||||||
|
|
||||||
char sAuthID[32];
|
char sAuthID[32];
|
||||||
fFile.ReadString(sAuthID, 32);
|
fFile.ReadString(sAuthID, 32);
|
||||||
@ -976,14 +984,14 @@ bool LoadReplay(int style, int track, const char[] path)
|
|||||||
int cells = CELLS_PER_FRAME;
|
int cells = CELLS_PER_FRAME;
|
||||||
|
|
||||||
// backwards compatibility
|
// backwards compatibility
|
||||||
if(gA_FrameCache[style][track][3] == 0x01)
|
if(gA_FrameCache[style][track].iReplayVersion == 0x01)
|
||||||
{
|
{
|
||||||
cells = 6;
|
cells = 6;
|
||||||
}
|
}
|
||||||
|
|
||||||
any[] aReplayData = new any[cells];
|
any[] aReplayData = new any[cells];
|
||||||
|
|
||||||
for(int i = 0; i < gA_FrameCache[style][track][0]; i++)
|
for(int i = 0; i < gA_FrameCache[style][track].iFrameCount; i++)
|
||||||
{
|
{
|
||||||
if(fFile.Read(aReplayData, cells, 4) >= 0)
|
if(fFile.Read(aReplayData, cells, 4) >= 0)
|
||||||
{
|
{
|
||||||
@ -994,7 +1002,7 @@ bool LoadReplay(int style, int track, const char[] path)
|
|||||||
gA_Frames[style][track].Set(i, view_as<float>(aReplayData[4]), 4);
|
gA_Frames[style][track].Set(i, view_as<float>(aReplayData[4]), 4);
|
||||||
gA_Frames[style][track].Set(i, view_as<int>(aReplayData[5]), 5);
|
gA_Frames[style][track].Set(i, view_as<int>(aReplayData[5]), 5);
|
||||||
|
|
||||||
if(gA_FrameCache[style][track][3] >= 0x02)
|
if(gA_FrameCache[style][track].iReplayVersion >= 0x02)
|
||||||
{
|
{
|
||||||
gA_Frames[style][track].Set(i, view_as<int>(aReplayData[6]), 6);
|
gA_Frames[style][track].Set(i, view_as<int>(aReplayData[6]), 6);
|
||||||
gA_Frames[style][track].Set(i, view_as<int>(aReplayData[7]), 7);
|
gA_Frames[style][track].Set(i, view_as<int>(aReplayData[7]), 7);
|
||||||
@ -1002,15 +1010,15 @@ bool LoadReplay(int style, int track, const char[] path)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gA_FrameCache[style][track][2] = true; // not wr-based
|
gA_FrameCache[style][track].bNewFormat = true; // not wr-based
|
||||||
}
|
}
|
||||||
|
|
||||||
else if(StrEqual(sExplodedHeader[1], REPLAY_FORMAT_V2))
|
else if(StrEqual(sExplodedHeader[1], REPLAY_FORMAT_V2))
|
||||||
{
|
{
|
||||||
int iReplaySize = gA_FrameCache[style][track][0] = StringToInt(sExplodedHeader[0]);
|
int iReplaySize = gA_FrameCache[style][track].iFrameCount = StringToInt(sExplodedHeader[0]);
|
||||||
gA_Frames[style][track].Resize(iReplaySize);
|
gA_Frames[style][track].Resize(iReplaySize);
|
||||||
|
|
||||||
gA_FrameCache[style][track][1] = 0.0; // N/A at this version
|
gA_FrameCache[style][track].fTime = 0.0; // N/A at this version
|
||||||
|
|
||||||
any[] aReplayData = new any[6];
|
any[] aReplayData = new any[6];
|
||||||
|
|
||||||
@ -1027,8 +1035,8 @@ bool LoadReplay(int style, int track, const char[] path)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gA_FrameCache[style][track][2] = false;
|
gA_FrameCache[style][track].bNewFormat = false;
|
||||||
strcopy(gS_ReplayNames[style][track], MAX_NAME_LENGTH, "invalid");
|
strcopy(gA_FrameCache[style][track].sReplayName, MAX_NAME_LENGTH, "invalid");
|
||||||
}
|
}
|
||||||
|
|
||||||
else // old, outdated and slow - only used for ancient replays
|
else // old, outdated and slow - only used for ancient replays
|
||||||
@ -1050,10 +1058,10 @@ bool LoadReplay(int style, int track, const char[] path)
|
|||||||
gA_Frames[style][track].Set(i, (iStrings == 6)? StringToInt(sExplodedLine[5]):0, 5);
|
gA_Frames[style][track].Set(i, (iStrings == 6)? StringToInt(sExplodedLine[5]):0, 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
gA_FrameCache[style][track][0] = gA_Frames[style][track].Length;
|
gA_FrameCache[style][track].iFrameCount = gA_Frames[style][track].Length;
|
||||||
gA_FrameCache[style][track][1] = 0.0; // N/A at this version
|
gA_FrameCache[style][track].fTime = 0.0; // N/A at this version
|
||||||
gA_FrameCache[style][track][2] = false; // wr-based
|
gA_FrameCache[style][track].bNewFormat = false; // wr-based
|
||||||
strcopy(gS_ReplayNames[style][track], MAX_NAME_LENGTH, "invalid");
|
strcopy(gA_FrameCache[style][track].sReplayName, MAX_NAME_LENGTH, "invalid");
|
||||||
}
|
}
|
||||||
|
|
||||||
delete fFile;
|
delete fFile;
|
||||||
@ -1111,10 +1119,10 @@ bool SaveReplay(int style, int track, float time, char[] authid, char[] name)
|
|||||||
|
|
||||||
delete fFile;
|
delete fFile;
|
||||||
|
|
||||||
gA_FrameCache[style][track][0] = iSize;
|
gA_FrameCache[style][track].iFrameCount = iSize;
|
||||||
gA_FrameCache[style][track][1] = time;
|
gA_FrameCache[style][track].fTime = time;
|
||||||
gA_FrameCache[style][track][2] = true;
|
gA_FrameCache[style][track].bNewFormat = true;
|
||||||
strcopy(gS_ReplayNames[style][track], MAX_NAME_LENGTH, name);
|
strcopy(gA_FrameCache[style][track].sReplayName, MAX_NAME_LENGTH, name);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1138,10 +1146,10 @@ bool DeleteReplay(int style, int track)
|
|||||||
}
|
}
|
||||||
|
|
||||||
gA_Frames[style][track].Clear();
|
gA_Frames[style][track].Clear();
|
||||||
gA_FrameCache[style][track][0] = 0;
|
gA_FrameCache[style][track].iFrameCount = 0;
|
||||||
gA_FrameCache[style][track][1] = 0.0;
|
gA_FrameCache[style][track].fTime = 0.0;
|
||||||
gA_FrameCache[style][track][2] = false;
|
gA_FrameCache[style][track].bNewFormat = false;
|
||||||
strcopy(gS_ReplayNames[style][track], MAX_NAME_LENGTH, "invalid");
|
strcopy(gA_FrameCache[style][track].sReplayName, MAX_NAME_LENGTH, "invalid");
|
||||||
gI_ReplayTick[style] = -1;
|
gI_ReplayTick[style] = -1;
|
||||||
|
|
||||||
if(gI_ReplayBotClient[style] != 0)
|
if(gI_ReplayBotClient[style] != 0)
|
||||||
@ -1168,7 +1176,7 @@ public void SQL_GetUserName_Callback(Database db, DBResultSet results, const cha
|
|||||||
|
|
||||||
if(results.FetchRow())
|
if(results.FetchRow())
|
||||||
{
|
{
|
||||||
results.FetchString(0, gS_ReplayNames[style][track], MAX_NAME_LENGTH);
|
results.FetchString(0, gA_FrameCache[style][track].sReplayName, MAX_NAME_LENGTH);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1291,7 +1299,7 @@ void UpdateReplayInfo(int client, int style, float time, int track)
|
|||||||
}
|
}
|
||||||
|
|
||||||
char sName[MAX_NAME_LENGTH];
|
char sName[MAX_NAME_LENGTH];
|
||||||
int iFrameCount = view_as<int>(gA_FrameCache[style][track][0]);
|
int iFrameCount = gA_FrameCache[style][track].iFrameCount;
|
||||||
|
|
||||||
if(central || iFrameCount > 0)
|
if(central || iFrameCount > 0)
|
||||||
{
|
{
|
||||||
@ -1474,10 +1482,9 @@ public void Shavit_OnFinish(int client, int style, float time, int jumps, int st
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool newformat = view_as<bool>(gA_FrameCache[style][track][2]);
|
|
||||||
float length = GetReplayLength(style, track);
|
float length = GetReplayLength(style, track);
|
||||||
|
|
||||||
if(newformat)
|
if(gA_FrameCache[style][track].bNewFormat)
|
||||||
{
|
{
|
||||||
if(length > 0.0 && time > length)
|
if(length > 0.0 && time > length)
|
||||||
{
|
{
|
||||||
@ -1603,14 +1610,12 @@ public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3
|
|||||||
vel[0] = 0.0;
|
vel[0] = 0.0;
|
||||||
vel[1] = 0.0;
|
vel[1] = 0.0;
|
||||||
|
|
||||||
int iFrameCount = view_as<int>(gA_FrameCache[style][track][0]);
|
if(gA_Frames[style][track] == null || gA_FrameCache[style][track].iFrameCount <= 0) // if no replay is loaded
|
||||||
|
|
||||||
if(gA_Frames[style][track] == null || iFrameCount <= 0) // if no replay is loaded
|
|
||||||
{
|
{
|
||||||
return Plugin_Changed;
|
return Plugin_Changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(gI_ReplayTick[style] != -1 && iFrameCount >= 1)
|
if(gI_ReplayTick[style] != -1 && gA_FrameCache[style][track].iFrameCount >= 1)
|
||||||
{
|
{
|
||||||
float vecPosition[3];
|
float vecPosition[3];
|
||||||
float vecAngles[3];
|
float vecAngles[3];
|
||||||
@ -1619,7 +1624,7 @@ public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3
|
|||||||
{
|
{
|
||||||
bool bStart = (gRS_ReplayStatus[style] == Replay_Start);
|
bool bStart = (gRS_ReplayStatus[style] == Replay_Start);
|
||||||
|
|
||||||
int iFrame = (bStart)? 0:(iFrameCount - 1);
|
int iFrame = (bStart)? 0:(gA_FrameCache[style][track].iFrameCount - 1);
|
||||||
|
|
||||||
vecPosition[0] = gA_Frames[style][track].Get(iFrame, 0);
|
vecPosition[0] = gA_Frames[style][track].Get(iFrame, 0);
|
||||||
vecPosition[1] = gA_Frames[style][track].Get(iFrame, 1);
|
vecPosition[1] = gA_Frames[style][track].Get(iFrame, 1);
|
||||||
@ -1644,7 +1649,7 @@ public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3
|
|||||||
return Plugin_Changed;
|
return Plugin_Changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(++gI_ReplayTick[style] >= iFrameCount)
|
if(++gI_ReplayTick[style] >= gA_FrameCache[style][track].iFrameCount)
|
||||||
{
|
{
|
||||||
gI_ReplayTick[style] = 0;
|
gI_ReplayTick[style] = 0;
|
||||||
gRS_ReplayStatus[style] = gA_CentralCache.iReplayStatus = Replay_End;
|
gRS_ReplayStatus[style] = gA_CentralCache.iReplayStatus = Replay_End;
|
||||||
@ -1685,7 +1690,7 @@ public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3
|
|||||||
|
|
||||||
MoveType mt = MOVETYPE_NOCLIP;
|
MoveType mt = MOVETYPE_NOCLIP;
|
||||||
|
|
||||||
if(gA_FrameCache[style][track][3] >= 0x02)
|
if(gA_FrameCache[style][track].iReplayVersion >= 0x02)
|
||||||
{
|
{
|
||||||
int iReplayFlags = gA_Frames[style][track].Get(gI_ReplayTick[style], 6);
|
int iReplayFlags = gA_Frames[style][track].Get(gI_ReplayTick[style], 6);
|
||||||
int iEntityFlags = GetEntityFlags(client);
|
int iEntityFlags = GetEntityFlags(client);
|
||||||
@ -1750,6 +1755,7 @@ public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3
|
|||||||
{
|
{
|
||||||
if((gI_PlayerFrames[client] / gF_Tickrate) > gF_TimeLimit)
|
if((gI_PlayerFrames[client] / gF_Tickrate) > gF_TimeLimit)
|
||||||
{
|
{
|
||||||
|
Shavit_PrintToChat(client, "stopped recording: %d", gI_PlayerFrames[client]);
|
||||||
// in case of bad timing
|
// in case of bad timing
|
||||||
if(gB_HijackFrame[client])
|
if(gB_HijackFrame[client])
|
||||||
{
|
{
|
||||||
@ -1971,7 +1977,7 @@ public void Shavit_OnWRDeleted(int style, int id, int track)
|
|||||||
float time = 0.0;
|
float time = 0.0;
|
||||||
Shavit_GetWRTime(style, time, track);
|
Shavit_GetWRTime(style, time, track);
|
||||||
|
|
||||||
if(view_as<int>(gA_FrameCache[style][track][0]) > 0 && GetReplayLength(style, track) - gF_Tickrate <= time) // -0.1 to fix rounding issues
|
if(gA_FrameCache[style][track].iFrameCount > 0 && GetReplayLength(style, track) - gF_Tickrate <= time) // -0.1 to fix rounding issues
|
||||||
{
|
{
|
||||||
DeleteReplay(style, track);
|
DeleteReplay(style, track);
|
||||||
}
|
}
|
||||||
@ -1996,7 +2002,7 @@ public Action Command_DeleteReplay(int client, int args)
|
|||||||
|
|
||||||
for(int j = 0; j < TRACKS_SIZE; j++)
|
for(int j = 0; j < TRACKS_SIZE; j++)
|
||||||
{
|
{
|
||||||
if(view_as<int>(gA_FrameCache[i][j][0]) == 0)
|
if(gA_FrameCache[i][j].iFrameCount == 0)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -2165,7 +2171,7 @@ Action OpenReplayMenu(int client)
|
|||||||
|
|
||||||
for(int j = 0; j < gI_Styles; j++)
|
for(int j = 0; j < gI_Styles; j++)
|
||||||
{
|
{
|
||||||
if(view_as<int>(gA_FrameCache[j][i][0]) > 0)
|
if(gA_FrameCache[j][i].iFrameCount > 0)
|
||||||
{
|
{
|
||||||
records = true;
|
records = true;
|
||||||
|
|
||||||
@ -2252,7 +2258,7 @@ void OpenReplaySubMenu(int client, int track)
|
|||||||
strcopy(sDisplay, 64, gS_StyleStrings[i].sStyleName);
|
strcopy(sDisplay, 64, gS_StyleStrings[i].sStyleName);
|
||||||
}
|
}
|
||||||
|
|
||||||
menu.AddItem(sInfo, sDisplay, (view_as<int>(gA_FrameCache[i][track][0]) > 0)? ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED);
|
menu.AddItem(sInfo, sDisplay, (gA_FrameCache[i][track].iFrameCount > 0)? ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(menu.ItemCount == 0)
|
if(menu.ItemCount == 0)
|
||||||
@ -2286,7 +2292,7 @@ public int MenuHandler_ReplaySubmenu(Menu menu, MenuAction action, int param1, i
|
|||||||
|
|
||||||
int style = StringToInt(info);
|
int style = StringToInt(info);
|
||||||
|
|
||||||
if(style == -1 || !ReplayEnabled(style) || view_as<int>(gA_FrameCache[style][gI_Track[param1]][0]) == 0 || gA_CentralCache.iClient <= 0)
|
if(style == -1 || !ReplayEnabled(style) || gA_FrameCache[style][gI_Track[param1]].iFrameCount == 0 || gA_CentralCache.iClient <= 0)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -2331,7 +2337,7 @@ public int MenuHandler_ReplaySubmenu(Menu menu, MenuAction action, int param1, i
|
|||||||
|
|
||||||
void TeleportToStart(int client, int style, int track)
|
void TeleportToStart(int client, int style, int track)
|
||||||
{
|
{
|
||||||
if(view_as<int>(gA_FrameCache[style][track][0]) == 0)
|
if(gA_FrameCache[style][track].iFrameCount == 0)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -2444,9 +2450,9 @@ void GetTrackName(int client, int track, char[] output, int size)
|
|||||||
|
|
||||||
float GetReplayLength(int style, int track)
|
float GetReplayLength(int style, int track)
|
||||||
{
|
{
|
||||||
if(view_as<bool>(gA_FrameCache[style][track][2]))
|
if(gA_FrameCache[style][track].bNewFormat)
|
||||||
{
|
{
|
||||||
return view_as<float>(gA_FrameCache[style][track][1]);
|
return gA_FrameCache[style][track].fTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
float fWRTime = 0.0;
|
float fWRTime = 0.0;
|
||||||
@ -2457,9 +2463,9 @@ float GetReplayLength(int style, int track)
|
|||||||
|
|
||||||
void GetReplayName(int style, int track, char[] buffer, int length)
|
void GetReplayName(int style, int track, char[] buffer, int length)
|
||||||
{
|
{
|
||||||
if(view_as<bool>(gA_FrameCache[style][track][2]))
|
if(gA_FrameCache[style][track].bNewFormat)
|
||||||
{
|
{
|
||||||
strcopy(buffer, length, gS_ReplayNames[style][track]);
|
strcopy(buffer, length, gA_FrameCache[style][track].sReplayName);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -2493,7 +2499,7 @@ bool File_Copy(const char[] source, const char[] destination)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int[] buffer = new int[32];
|
int buffer[32];
|
||||||
int cache = 0;
|
int cache = 0;
|
||||||
|
|
||||||
while(!IsEndOfFile(file_source))
|
while(!IsEndOfFile(file_source))
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user