mirror of
https://github.com/shavitush/bhoptimer.git
synced 2025-12-07 10:28:26 +00:00
parent
a099fc7600
commit
d429dd0a78
@ -130,6 +130,23 @@ enum
|
||||
CHATSETTINGS_SIZE
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
bTimerEnabled,
|
||||
fStartTime,
|
||||
fCurrentTime,
|
||||
fPauseStartTime,
|
||||
fPauseTotalTime,
|
||||
bClientPaused,
|
||||
iJumps,
|
||||
bsStyle,
|
||||
iStrafes,
|
||||
iTotalMeasures,
|
||||
iGoodGains,
|
||||
fServerTime,
|
||||
TIMERSNAPSHOT_SIZE
|
||||
};
|
||||
|
||||
#if defined USES_CHAT_COLORS
|
||||
// hardcoded colors
|
||||
char gS_GlobalColorNames[][] =
|
||||
@ -742,6 +759,44 @@ native int Shavit_GetChatStrings(int stringtype, char[] ChatStrings, int size);
|
||||
*/
|
||||
native int Shavit_GetHUDSettings(int client);
|
||||
|
||||
/**
|
||||
* Sets practice mode on a client.
|
||||
* Practice mode means that the client's records will not be saved, just like unranked mode, but for ranked styles.
|
||||
* Intended to be used by checkpoints.
|
||||
*
|
||||
* @param client Client index.
|
||||
* @param practice Enable or disable practice modce.
|
||||
* @param alert Alert the client about practice mode?
|
||||
* @noreturn
|
||||
*/
|
||||
native void Shavit_SetPracticeMode(int client, bool practice, bool alert);
|
||||
|
||||
/**
|
||||
* Gets a client's practice mode status.
|
||||
*
|
||||
* @param client Client index.
|
||||
* @return Practice mode status.
|
||||
*/
|
||||
native bool Shavit_IsPracticeMode(int client);
|
||||
|
||||
/**
|
||||
* Save a client's timer into a snapshot.
|
||||
* See the enumeration that ends with TIMERSNAPSHOT_SIZE.
|
||||
*
|
||||
* @param client Client index.
|
||||
* @param snapshot Full snapshot of the client's timer.
|
||||
* @noreturn
|
||||
*/
|
||||
native void Shavit_SaveSnapshot(int client, any snapshot[TIMERSNAPSHOT_SIZE]);
|
||||
|
||||
/**
|
||||
* Restores the client's timer from a snapshot.
|
||||
*
|
||||
* @param client Client index.
|
||||
* @param snapshot Full snapshot of the client's timer.
|
||||
*/
|
||||
native void Shavit_LoadSnapshot(int client, any snapshot[TIMERSNAPSHOT_SIZE]);
|
||||
|
||||
/**
|
||||
* Use this native when printing anything in chat if it's related to the timer.
|
||||
* This native will auto-assign colors and a chat prefix.
|
||||
@ -813,12 +868,16 @@ public void __pl_shavit_SetNTVOptional()
|
||||
MarkNativeAsOptional("Shavit_GetWRTime");
|
||||
MarkNativeAsOptional("Shavit_InsideZone");
|
||||
MarkNativeAsOptional("Shavit_IsClientCreatingZone");
|
||||
MarkNativeAsOptional("Shavit_IsPracticeMode");
|
||||
MarkNativeAsOptional("Shavit_IsReplayDataLoaded");
|
||||
MarkNativeAsOptional("Shavit_LoadSnapshot");
|
||||
MarkNativeAsOptional("Shavit_OpenStatsMenu");
|
||||
MarkNativeAsOptional("Shavit_PauseTimer");
|
||||
MarkNativeAsOptional("Shavit_PrintToChat");
|
||||
MarkNativeAsOptional("Shavit_RestartTimer");
|
||||
MarkNativeAsOptional("Shavit_ResumeTimer");
|
||||
MarkNativeAsOptional("Shavit_SaveSnapshot");
|
||||
MarkNativeAsOptional("Shavit_SetPracticeMode");
|
||||
MarkNativeAsOptional("Shavit_StartTimer");
|
||||
MarkNativeAsOptional("Shavit_StopTimer");
|
||||
MarkNativeAsOptional("Shavit_ZoneExists");
|
||||
|
||||
@ -72,6 +72,7 @@ int gI_TotalMeasures[MAXPLAYERS+1];
|
||||
int gI_GoodGains[MAXPLAYERS+1];
|
||||
bool gB_DoubleSteps[MAXPLAYERS+1];
|
||||
float gF_StrafeWarning[MAXPLAYERS+1];
|
||||
bool gB_PracticeMode[MAXPLAYERS+1];
|
||||
|
||||
float gF_HSW_Requirement = 0.0;
|
||||
StringMap gSM_StyleCommands = null;
|
||||
@ -162,6 +163,10 @@ public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max
|
||||
CreateNative("Shavit_GetStyleSettings", Native_GetStyleSettings);
|
||||
CreateNative("Shavit_GetStyleStrings", Native_GetStyleStrings);
|
||||
CreateNative("Shavit_GetChatStrings", Native_GetChatStrings);
|
||||
CreateNative("Shavit_SetPracticeMode", Native_SetPracticeMode);
|
||||
CreateNative("Shavit_IsPracticeMode", Native_IsPracticeMode);
|
||||
CreateNative("Shavit_SaveSnapshot", Native_SaveSnapshot);
|
||||
CreateNative("Shavit_LoadSnapshot", Native_LoadSnapshot);
|
||||
|
||||
// registers library, check "bool LibraryExists(const char[] name)" in order to use with other plugins
|
||||
RegPluginLibrary("shavit");
|
||||
@ -478,7 +483,7 @@ public Action Command_StopTimer(int client, int args)
|
||||
|
||||
public Action Command_TogglePause(int client, int args)
|
||||
{
|
||||
if(!IsValidClient(client))
|
||||
if(!IsValidClient(client) || !gB_TimerEnabled[client])
|
||||
{
|
||||
return Plugin_Handled;
|
||||
}
|
||||
@ -507,6 +512,13 @@ public Action Command_TogglePause(int client, int args)
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
if(gB_PracticeMode[client])
|
||||
{
|
||||
Shavit_PrintToChat(client, "%T", "PausePractice", client, gS_ChatStrings[sMessageWarning], gS_ChatStrings[sMessageText]);
|
||||
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
if(gB_ClientPaused[client])
|
||||
{
|
||||
ResumeTimer(client);
|
||||
@ -880,6 +892,69 @@ public int Native_GetChatStrings(Handle handler, int numParams)
|
||||
return SetNativeString(2, gS_ChatStrings[GetNativeCell(1)], GetNativeCell(3));
|
||||
}
|
||||
|
||||
public int Native_SetPracticeMode(Handle handler, int numParams)
|
||||
{
|
||||
int client = GetNativeCell(1);
|
||||
bool practice = view_as<bool>(GetNativeCell(2));
|
||||
bool alert = view_as<bool>(GetNativeCell(3));
|
||||
|
||||
if(alert && practice && !gB_PracticeMode[client])
|
||||
{
|
||||
Shavit_PrintToChat(client, "%T", "PracticeModeAlert", client, gS_ChatStrings[sMessageWarning], gS_ChatStrings[sMessageText]);
|
||||
}
|
||||
|
||||
gB_PracticeMode[client] = practice;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
public int Native_IsPracticeMode(Handle handler, int numParams)
|
||||
{
|
||||
return view_as<int>(gB_PracticeMode[GetNativeCell(1)]);
|
||||
}
|
||||
|
||||
public int Native_SaveSnapshot(Handle handler, int numParams)
|
||||
{
|
||||
int client = GetNativeCell(1);
|
||||
|
||||
any[] snapshot = new any[TIMERSNAPSHOT_SIZE];
|
||||
snapshot[bTimerEnabled] = gB_TimerEnabled[client];
|
||||
snapshot[fStartTime] = gF_StartTime[client];
|
||||
snapshot[fPauseStartTime] = gF_PauseStartTime[client];
|
||||
snapshot[fPauseTotalTime] = gF_PauseTotalTime[client];
|
||||
snapshot[bClientPaused] = gB_ClientPaused[client];
|
||||
snapshot[iJumps] = gI_Jumps[client];
|
||||
snapshot[bsStyle] = gBS_Style[client];
|
||||
snapshot[iStrafes] = gI_Strafes[client];
|
||||
snapshot[iTotalMeasures] = gI_TotalMeasures[client];
|
||||
snapshot[iGoodGains] = gI_GoodGains[client];
|
||||
snapshot[fServerTime] = GetEngineTime();
|
||||
snapshot[fCurrentTime] = CalculateTime(client);
|
||||
|
||||
return SetNativeArray(2, snapshot, TIMERSNAPSHOT_SIZE);
|
||||
}
|
||||
|
||||
public int Native_LoadSnapshot(Handle handler, int numParams)
|
||||
{
|
||||
int client = GetNativeCell(1);
|
||||
|
||||
any[] snapshot = new any[TIMERSNAPSHOT_SIZE];
|
||||
GetNativeArray(2, snapshot, TIMERSNAPSHOT_SIZE);
|
||||
|
||||
gB_TimerEnabled[client] = view_as<bool>(snapshot[bTimerEnabled]);
|
||||
gF_PauseStartTime[client] = view_as<float>(snapshot[fPauseStartTime]);
|
||||
gF_PauseTotalTime[client] = view_as<float>(snapshot[fPauseTotalTime]);
|
||||
gB_ClientPaused[client] = false; // Pausing is disabled in practice mode.
|
||||
gI_Jumps[client] = view_as<int>(snapshot[iJumps]);
|
||||
gBS_Style[client] = view_as<BhopStyle>(snapshot[bsStyle]);
|
||||
gI_Strafes[client] = view_as<int>(snapshot[iStrafes]);
|
||||
gI_TotalMeasures[client] = view_as<int>(snapshot[iTotalMeasures]);
|
||||
gI_GoodGains[client] = view_as<int>(snapshot[iGoodGains]);
|
||||
gF_StartTime[client] = GetEngineTime() - view_as<float>(snapshot[fCurrentTime]);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void StartTimer(int client)
|
||||
{
|
||||
if(!IsValidClient(client, true) || GetClientTeam(client) < 2 || IsFakeClient(client))
|
||||
@ -887,8 +962,6 @@ void StartTimer(int client)
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
float fSpeed[3];
|
||||
GetEntPropVector(client, Prop_Data, "m_vecVelocity", fSpeed);
|
||||
|
||||
@ -908,6 +981,7 @@ void StartTimer(int client)
|
||||
|
||||
gF_PauseTotalTime[client] = 0.0;
|
||||
gB_ClientPaused[client] = false;
|
||||
gB_PracticeMode[client] = false;
|
||||
|
||||
SetEntityGravity(client, gA_StyleSettings[gBS_Style[client]][fGravityMultiplier]);
|
||||
SetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue", gA_StyleSettings[gBS_Style[client]][fSpeedMultiplier]);
|
||||
@ -1028,6 +1102,7 @@ public void OnClientPutInServer(int client)
|
||||
gB_DoubleSteps[client] = false;
|
||||
gF_StrafeWarning[client] = 0.0;
|
||||
gBS_Style[client] = view_as<BhopStyle>(0);
|
||||
gB_PracticeMode[client] = false;
|
||||
UpdateAutoBhop(client);
|
||||
|
||||
if(AreClientCookiesCached(client))
|
||||
|
||||
@ -469,11 +469,11 @@ void UpdateHUD(int client)
|
||||
{
|
||||
if(!IsFakeClient(target))
|
||||
{
|
||||
float fTime = Shavit_GetClientTime(target);
|
||||
int iJumps = Shavit_GetClientJumps(target);
|
||||
TimerStatus tStatus = Shavit_GetTimerStatus(target);
|
||||
int iStrafes = Shavit_GetStrafeCount(target);
|
||||
int iPotentialRank = Shavit_GetRankForTime(gBS_Style[target], fTime);
|
||||
float time = Shavit_GetClientTime(target);
|
||||
int jumps = Shavit_GetClientJumps(target);
|
||||
TimerStatus status = Shavit_GetTimerStatus(target);
|
||||
int strafes = Shavit_GetStrafeCount(target);
|
||||
int rank = Shavit_GetRankForTime(gBS_Style[target], time);
|
||||
|
||||
float fWR = 0.0;
|
||||
Shavit_GetWRTime(gBS_Style[target], fWR);
|
||||
@ -485,27 +485,27 @@ void UpdateHUD(int client)
|
||||
FormatSeconds(fPB, sPB, 32);
|
||||
|
||||
char[] sTime = new char[32];
|
||||
FormatSeconds(fTime, sTime, 32, false);
|
||||
FormatSeconds(time, sTime, 32, false);
|
||||
|
||||
if(gEV_Type == Engine_CSGO)
|
||||
{
|
||||
strcopy(sHintText, 512, "<font size=\"18\" face=\"Stratum2\">");
|
||||
|
||||
if(tStatus >= Timer_Running)
|
||||
if(status >= Timer_Running)
|
||||
{
|
||||
char[] sColor = new char[8];
|
||||
|
||||
if(tStatus == Timer_Paused)
|
||||
if(status == Timer_Paused)
|
||||
{
|
||||
strcopy(sColor, 8, "FF0000");
|
||||
}
|
||||
|
||||
else if(fTime < fWR || fWR == 0.0)
|
||||
else if(time < fWR || fWR == 0.0)
|
||||
{
|
||||
strcopy(sColor, 8, "00FF00");
|
||||
}
|
||||
|
||||
else if(fPB != 0.0 && fTime < fPB)
|
||||
else if(fPB != 0.0 && time < fPB)
|
||||
{
|
||||
strcopy(sColor, 8, "FFA500");
|
||||
}
|
||||
@ -519,19 +519,19 @@ void UpdateHUD(int client)
|
||||
FormatEx(sPauseItem, 64, "%T\t</font>", "HudPaused", client);
|
||||
|
||||
char[] sUnpausedItem = new char[64];
|
||||
FormatEx(sUnpausedItem, 64, "%s</font> (%d)\t", sTime, iPotentialRank);
|
||||
FormatEx(sUnpausedItem, 64, "%s</font> (%d)\t", sTime, rank);
|
||||
|
||||
Format(sHintText, 512, "%s%T: <font color='#%s'>%s", sHintText, "HudTimeText", client, sColor, (tStatus == Timer_Paused)? sPauseItem:sUnpausedItem);
|
||||
Format(sHintText, 512, "%s%T: <font color='#%s'>%s", sHintText, "HudTimeText", client, sColor, (status == Timer_Paused)? sPauseItem:sUnpausedItem);
|
||||
}
|
||||
|
||||
if(fPB > 0.0)
|
||||
{
|
||||
Format(sHintText, 512, "%s%s%T: %s (#%d)", sHintText, (tStatus >= Timer_Running)? "\t":"", "HudBestText", client, sPB, (Shavit_GetRankForTime(gBS_Style[target], fPB) - 1));
|
||||
Format(sHintText, 512, "%s%s%T: %s (#%d)", sHintText, (status >= Timer_Running)? "\t":"", "HudBestText", client, sPB, (Shavit_GetRankForTime(gBS_Style[target], fPB) - 1));
|
||||
}
|
||||
|
||||
if(tStatus >= Timer_Running)
|
||||
if(status >= Timer_Running)
|
||||
{
|
||||
Format(sHintText, 512, "%s\n%T: %d%s\t%T: <font color='#%s'>%s</font>", sHintText, "HudJumpsText", client, iJumps, (iJumps < 1000)? "\t":"", "HudStyleText", client, gS_StyleStrings[gBS_Style[target]][sHTMLColor], gS_StyleStrings[gBS_Style[target]][sStyleName]);
|
||||
Format(sHintText, 512, "%s\n%T: %d%s\t%T: <font color='#%s'>%s</font>", sHintText, "HudJumpsText", client, jumps, (jumps < 1000)? "\t":"", "HudStyleText", client, gS_StyleStrings[gBS_Style[target]][sHTMLColor], gS_StyleStrings[gBS_Style[target]][sStyleName]);
|
||||
}
|
||||
|
||||
else
|
||||
@ -541,16 +541,16 @@ void UpdateHUD(int client)
|
||||
|
||||
Format(sHintText, 512, "%s\n%T: %d", sHintText, "HudSpeedText", client, iSpeed);
|
||||
|
||||
if(tStatus >= Timer_Running)
|
||||
if(status >= Timer_Running)
|
||||
{
|
||||
if(gA_StyleSettings[gBS_Style[target]][bSync])
|
||||
{
|
||||
Format(sHintText, 512, "%s%s\t%T: %d (%.02f%%)", sHintText, (iSpeed < 1000)? "\t":"", "HudStrafeText", client, iStrafes, Shavit_GetSync(target));
|
||||
Format(sHintText, 512, "%s%s\t%T: %d (%.02f%%)", sHintText, (iSpeed < 1000)? "\t":"", "HudStrafeText", client, strafes, Shavit_GetSync(target));
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
Format(sHintText, 512, "%s%s\t%T: %d", sHintText, (iSpeed < 1000)? "\t":"", "HudStrafeText", client, iStrafes);
|
||||
Format(sHintText, 512, "%s%s\t%T: %d", sHintText, (iSpeed < 1000)? "\t":"", "HudStrafeText", client, strafes);
|
||||
}
|
||||
}
|
||||
|
||||
@ -559,11 +559,19 @@ void UpdateHUD(int client)
|
||||
|
||||
else
|
||||
{
|
||||
if(tStatus != Timer_Stopped)
|
||||
if(status != Timer_Stopped)
|
||||
{
|
||||
if(Shavit_GetTimerStatus(target) == Timer_Running)
|
||||
{
|
||||
FormatEx(sHintText, 512, "%s\n%T: %s (%d)\n%T: %d\n%T: %d\n%T: %d%s", gS_StyleStrings[gBS_Style[target]][sStyleName], "HudTimeText", client, sTime, iPotentialRank, "HudJumpsText", client, iJumps, "HudStrafeText", client, iStrafes, "HudSpeedText", client, iSpeed, (gA_StyleSettings[gBS_Style[target]][fVelocityLimit] > 0.0 && Shavit_InsideZone(target, Zone_NoVelLimit))? "\nNo Speed Limit":"");
|
||||
char[] sFirstLine = new char[64];
|
||||
strcopy(sFirstLine, 64, gS_StyleStrings[gBS_Style[target]][sStyleName]);
|
||||
|
||||
if(Shavit_IsPracticeMode(target))
|
||||
{
|
||||
Format(sFirstLine, 64, "%s %T", sFirstLine, "HudPracticeMode", client);
|
||||
}
|
||||
|
||||
FormatEx(sHintText, 512, "%s\n%T: %s (%d)\n%T: %d\n%T: %d\n%T: %d%s", sFirstLine, "HudTimeText", client, sTime, rank, "HudJumpsText", client, jumps, "HudStrafeText", client, strafes, "HudSpeedText", client, iSpeed, (gA_StyleSettings[gBS_Style[target]][fVelocityLimit] > 0.0 && Shavit_InsideZone(target, Zone_NoVelLimit))? "\nNo Speed Limit":"");
|
||||
}
|
||||
|
||||
else
|
||||
@ -583,27 +591,27 @@ void UpdateHUD(int client)
|
||||
|
||||
else if(gB_Replay)
|
||||
{
|
||||
BhopStyle bsStyle = view_as<BhopStyle>(0);
|
||||
BhopStyle style = view_as<BhopStyle>(0);
|
||||
|
||||
for(int i = 0; i < gI_Styles; i++)
|
||||
{
|
||||
if(Shavit_GetReplayBotIndex(view_as<BhopStyle>(i)) == target)
|
||||
{
|
||||
bsStyle = view_as<BhopStyle>(i);
|
||||
style = view_as<BhopStyle>(i);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
float fStart = 0.0;
|
||||
Shavit_GetReplayBotFirstFrame(bsStyle, fStart);
|
||||
float start = 0.0;
|
||||
Shavit_GetReplayBotFirstFrame(style, start);
|
||||
|
||||
float fTime = GetEngineTime() - fStart;
|
||||
float time = GetEngineTime() - start;
|
||||
|
||||
float fWR = 0.0;
|
||||
Shavit_GetWRTime(bsStyle, fWR);
|
||||
Shavit_GetWRTime(style, fWR);
|
||||
|
||||
if(fTime > fWR || !Shavit_IsReplayDataLoaded(bsStyle))
|
||||
if(time > fWR || !Shavit_IsReplayDataLoaded(style))
|
||||
{
|
||||
PrintHintText(client, "%T", "NoReplayData", client);
|
||||
|
||||
@ -611,7 +619,7 @@ void UpdateHUD(int client)
|
||||
}
|
||||
|
||||
char[] sTime = new char[32];
|
||||
FormatSeconds(fTime, sTime, 32, false);
|
||||
FormatSeconds(time, sTime, 32, false);
|
||||
|
||||
char[] sWR = new char[32];
|
||||
FormatSeconds(fWR, sWR, 32, false);
|
||||
@ -619,7 +627,7 @@ void UpdateHUD(int client)
|
||||
if(gEV_Type == Engine_CSGO)
|
||||
{
|
||||
FormatEx(sHintText, 512, "<font face='Stratum2'>");
|
||||
Format(sHintText, 512, "%s\t<u><font color='#%s'>%s %T</font></u>", sHintText, gS_StyleStrings[bsStyle][sHTMLColor], gS_StyleStrings[bsStyle][sStyleName], "ReplayText", client);
|
||||
Format(sHintText, 512, "%s\t<u><font color='#%s'>%s %T</font></u>", sHintText, gS_StyleStrings[style][sHTMLColor], gS_StyleStrings[style][sStyleName], "ReplayText", client);
|
||||
Format(sHintText, 512, "%s\n\t%T: <font color='#00FF00'>%s</font> / %s", sHintText, "HudTimeText", client, sTime, sWR);
|
||||
Format(sHintText, 512, "%s\n\t%T: %d", sHintText, "HudSpeedText", client, iSpeed);
|
||||
Format(sHintText, 512, "%s</font>", sHintText);
|
||||
@ -627,7 +635,7 @@ void UpdateHUD(int client)
|
||||
|
||||
else
|
||||
{
|
||||
FormatEx(sHintText, 512, "%s Replay", gS_StyleStrings[bsStyle][sStyleName], sHintText);
|
||||
FormatEx(sHintText, 512, "%s Replay", gS_StyleStrings[style][sStyleName], sHintText);
|
||||
Format(sHintText, 512, "%s\n%T: %s/%s", sHintText, "HudTimeText", client, sTime, sWR);
|
||||
Format(sHintText, 512, "%s\n%T: %d", sHintText, "HudSpeedText", client, iSpeed);
|
||||
}
|
||||
|
||||
@ -62,6 +62,7 @@ ConVar gCV_Hostport = null;
|
||||
BhopStyle gBS_Style[MAXPLAYERS+1];
|
||||
float gF_Checkpoints[MAXPLAYERS+1][2][3][3]; // 3 - position, angles, velocity
|
||||
int gI_CheckpointsSettings[MAXPLAYERS+1];
|
||||
any gA_CheckpointsSnapshots[MAXPLAYERS+1][2][TIMERSNAPSHOT_SIZE];
|
||||
|
||||
// cookies
|
||||
Handle gH_HideCookie = null;
|
||||
@ -765,6 +766,21 @@ public void OnClientPutInServer(int client)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(int i = 0; i <= 1; i++)
|
||||
{
|
||||
gA_CheckpointsSnapshots[client][i][bTimerEnabled] = false;
|
||||
gA_CheckpointsSnapshots[client][i][fStartTime] = 0.0;
|
||||
gA_CheckpointsSnapshots[client][i][fCurrentTime] = 0.0;
|
||||
gA_CheckpointsSnapshots[client][i][fPauseStartTime] = 0.0;
|
||||
gA_CheckpointsSnapshots[client][i][fPauseTotalTime] = 0.0;
|
||||
gA_CheckpointsSnapshots[client][i][bClientPaused] = false;
|
||||
gA_CheckpointsSnapshots[client][i][iJumps] = 0;
|
||||
gA_CheckpointsSnapshots[client][i][bsStyle] = view_as<BhopStyle>(0);
|
||||
gA_CheckpointsSnapshots[client][i][iStrafes] = 0;
|
||||
gA_CheckpointsSnapshots[client][i][iTotalMeasures] = 0;
|
||||
gA_CheckpointsSnapshots[client][i][iGoodGains] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
public Action OnTakeDamage(int victim, int attacker)
|
||||
@ -1170,7 +1186,7 @@ public Action OpenCheckpointsMenu(int client, int item)
|
||||
}
|
||||
|
||||
Menu menu = new Menu(MenuHandler_Checkpoints, MENU_ACTIONS_DEFAULT|MenuAction_DisplayItem);
|
||||
menu.SetTitle("%T\n%T", "MiscCheckpointMenu", client, "MiscCheckpointWarning", client);
|
||||
menu.SetTitle("%T\n%T\n ", "MiscCheckpointMenu", client, "MiscCheckpointWarning", client);
|
||||
|
||||
char[] sDisplay = new char[64];
|
||||
FormatEx(sDisplay, 64, "%T", "MiscCheckpointSave1", client);
|
||||
@ -1268,15 +1284,13 @@ void SaveCheckpoint(int client, int index)
|
||||
GetClientAbsOrigin(client, gF_Checkpoints[client][index][0]);
|
||||
GetClientEyeAngles(client, gF_Checkpoints[client][index][1]);
|
||||
GetEntPropVector(client, Prop_Data, "m_vecAbsVelocity", gF_Checkpoints[client][index][2]);
|
||||
Shavit_SaveSnapshot(client, gA_CheckpointsSnapshots[client][index]);
|
||||
}
|
||||
|
||||
void TeleportToCheckpoint(int client, int index)
|
||||
{
|
||||
if(Shavit_GetTimerStatus(client) != Timer_Stopped)
|
||||
{
|
||||
Shavit_PrintToChat(client, "%T", "MiscCheckpointsStopped", client, gS_ChatStrings[sMessageWarning], gS_ChatStrings[sMessageText]);
|
||||
Shavit_StopTimer(client);
|
||||
}
|
||||
Shavit_SetPracticeMode(client, true, true);
|
||||
Shavit_LoadSnapshot(client, gA_CheckpointsSnapshots[client][index]);
|
||||
|
||||
TeleportEntity(client, gF_Checkpoints[client][index][0],
|
||||
((gI_CheckpointsSettings[client] & CP_ANGLES) > 0)? gF_Checkpoints[client][index][1]:NULL_VECTOR,
|
||||
|
||||
@ -401,22 +401,22 @@ public void OpenStatsMenuCallback(Database db, DBResultSet results, const char[]
|
||||
FormatTime(sLastLogin, 32, "%Y-%m-%d %H:%M:%S", iLastLogin);
|
||||
Format(sLastLogin, 32, "%T: %s", "LastLogin", client, (iLastLogin != -1)? sLastLogin:"N/A");
|
||||
|
||||
int iRank = -1;
|
||||
float fPoints = -1.0;
|
||||
int rank = -1;
|
||||
float points = -1.0;
|
||||
|
||||
if(gB_Rankings)
|
||||
{
|
||||
fPoints = results.FetchFloat(6);
|
||||
iRank = results.FetchInt(7);
|
||||
points = results.FetchFloat(6);
|
||||
rank = results.FetchInt(7);
|
||||
}
|
||||
|
||||
char[] sRankingString = new char[64];
|
||||
|
||||
if(gB_Rankings)
|
||||
{
|
||||
if(iRank > 0 && fPoints > 0.0)
|
||||
if(rank > 0 && points > 0.0)
|
||||
{
|
||||
FormatEx(sRankingString, 64, "\n%T: #%d/%d\n%T: %.02f", "Rank", client, iRank, Shavit_GetRankedPlayers(), "Points", client, fPoints);
|
||||
FormatEx(sRankingString, 64, "\n%T: #%d/%d\n%T: %.02f", "Rank", client, rank, Shavit_GetRankedPlayers(), "Points", client, points);
|
||||
}
|
||||
|
||||
else
|
||||
@ -605,23 +605,23 @@ public void ShowMapsCallback(Database db, DBResultSet results, const char[] erro
|
||||
|
||||
if(gI_MapType[client] == MAPSDONE)
|
||||
{
|
||||
float fTime = results.FetchFloat(1);
|
||||
int iJumps = results.FetchInt(2);
|
||||
int iRank = results.FetchInt(4);
|
||||
float time = results.FetchFloat(1);
|
||||
int jumps = results.FetchInt(2);
|
||||
int rank = results.FetchInt(4);
|
||||
|
||||
char[] sTime = new char[32];
|
||||
FormatSeconds(fTime, sTime, 32);
|
||||
FormatSeconds(time, sTime, 32);
|
||||
|
||||
float fPoints = results.FetchFloat(5);
|
||||
float points = results.FetchFloat(5);
|
||||
|
||||
if(gB_Rankings && fPoints > 0.0)
|
||||
if(gB_Rankings && points > 0.0)
|
||||
{
|
||||
FormatEx(sDisplay, 192, "[#%d] %s - %s (%.03f %T)", iRank, sMap, sTime, fPoints, "MapsPoints", client);
|
||||
FormatEx(sDisplay, 192, "[#%d] %s - %s (%.03f %T)", rank, sMap, sTime, points, "MapsPoints", client);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
FormatEx(sDisplay, 192, "[#%d] %s - %s (%d %T)", iRank, sMap, sTime, iJumps, "MapsJumps", client);
|
||||
FormatEx(sDisplay, 192, "[#%d] %s - %s (%d %T)", rank, sMap, sTime, jumps, "MapsJumps", client);
|
||||
}
|
||||
|
||||
int iRecordID = results.FetchInt(3);
|
||||
@ -710,22 +710,22 @@ public void SQL_SubMenu_Callback(Database db, DBResultSet results, const char[]
|
||||
results.FetchString(0, sName, MAX_NAME_LENGTH);
|
||||
|
||||
// 1 - time
|
||||
float fTime = results.FetchFloat(1);
|
||||
float time = results.FetchFloat(1);
|
||||
char[] sTime = new char[16];
|
||||
FormatSeconds(fTime, sTime, 16);
|
||||
FormatSeconds(time, sTime, 16);
|
||||
|
||||
char[] sDisplay = new char[128];
|
||||
FormatEx(sDisplay, 128, "%T: %s", "Time", client, sTime);
|
||||
m.AddItem("-1", sDisplay);
|
||||
|
||||
// 2 - jumps
|
||||
int iJumps = results.FetchInt(2);
|
||||
FormatEx(sDisplay, 128, "%T: %d", "Jumps", client, iJumps);
|
||||
int jumps = results.FetchInt(2);
|
||||
FormatEx(sDisplay, 128, "%T: %d", "Jumps", client, jumps);
|
||||
m.AddItem("-1", sDisplay);
|
||||
|
||||
// 3 - style
|
||||
BhopStyle bsStyle = view_as<BhopStyle>(results.FetchInt(3));
|
||||
FormatEx(sDisplay, 128, "%T: %s", "Style", client, gS_StyleStrings[bsStyle][sStyleName]);
|
||||
BhopStyle style = view_as<BhopStyle>(results.FetchInt(3));
|
||||
FormatEx(sDisplay, 128, "%T: %s", "Style", client, gS_StyleStrings[style][sStyleName]);
|
||||
m.AddItem("-1", sDisplay);
|
||||
|
||||
// 4 - steamid3
|
||||
@ -734,11 +734,11 @@ public void SQL_SubMenu_Callback(Database db, DBResultSet results, const char[]
|
||||
// 6 - map
|
||||
results.FetchString(6, sMap, 256);
|
||||
|
||||
float fPoints = results.FetchFloat(9);
|
||||
float points = results.FetchFloat(9);
|
||||
|
||||
if(gB_Rankings && fPoints > 0.0)
|
||||
if(gB_Rankings && points > 0.0)
|
||||
{
|
||||
FormatEx(sDisplay, 192, "%T: %.03f", "Points", client, fPoints);
|
||||
FormatEx(sDisplay, 192, "%T: %.03f", "Points", client, points);
|
||||
m.AddItem("-1", sDisplay);
|
||||
}
|
||||
|
||||
@ -754,12 +754,12 @@ public void SQL_SubMenu_Callback(Database db, DBResultSet results, const char[]
|
||||
FormatEx(sDisplay, 128, "%T: %s", "Date", client, sDate);
|
||||
m.AddItem("-1", sDisplay);
|
||||
|
||||
int iStrafes = results.FetchInt(7);
|
||||
float fSync = results.FetchFloat(8);
|
||||
int strafes = results.FetchInt(7);
|
||||
float sync = results.FetchFloat(8);
|
||||
|
||||
if(iJumps > 0 || iStrafes > 0)
|
||||
if(jumps > 0 || strafes > 0)
|
||||
{
|
||||
FormatEx(sDisplay, 128, (fSync > 0.0)? "%T: %d (%.02f%%)":"%T: %d", "Strafes", client, iStrafes, fSync, "Strafes", client, iStrafes);
|
||||
FormatEx(sDisplay, 128, (sync > 0.0)? "%T: %d (%.02f%%)":"%T: %d", "Strafes", client, strafes, sync, "Strafes", client, strafes);
|
||||
m.AddItem("-1", sDisplay);
|
||||
}
|
||||
|
||||
|
||||
@ -630,15 +630,15 @@ public void SQL_OpenDelete_Callback(Database db, DBResultSet results, const char
|
||||
results.FetchString(1, sName, MAX_NAME_LENGTH);
|
||||
|
||||
// 2 - time
|
||||
float fTime = results.FetchFloat(2);
|
||||
float time = results.FetchFloat(2);
|
||||
char[] sTime = new char[16];
|
||||
FormatSeconds(fTime, sTime, 16);
|
||||
FormatSeconds(time, sTime, 16);
|
||||
|
||||
// 3 - jumps
|
||||
int iJumps = results.FetchInt(3);
|
||||
int jumps = results.FetchInt(3);
|
||||
|
||||
char[] sDisplay = new char[128];
|
||||
FormatEx(sDisplay, 128, "#%d - %s - %s (%d jump%s)", iCount, sName, sTime, iJumps, (iJumps != 1)? "s":"");
|
||||
FormatEx(sDisplay, 128, "#%d - %s - %s (%d jump%s)", iCount, sName, sTime, jumps, (jumps != 1)? "s":"");
|
||||
m.AddItem(sID, sDisplay);
|
||||
}
|
||||
|
||||
@ -956,15 +956,15 @@ public void SQL_WR_Callback(Database db, DBResultSet results, const char[] error
|
||||
results.FetchString(1, sName, MAX_NAME_LENGTH);
|
||||
|
||||
// 2 - time
|
||||
float fTime = results.FetchFloat(2);
|
||||
float time = results.FetchFloat(2);
|
||||
char[] sTime = new char[16];
|
||||
FormatSeconds(fTime, sTime, 16);
|
||||
FormatSeconds(time, sTime, 16);
|
||||
|
||||
// 3 - jumps
|
||||
int iJumps = results.FetchInt(3);
|
||||
int jumps = results.FetchInt(3);
|
||||
|
||||
char[] sDisplay = new char[128];
|
||||
FormatEx(sDisplay, 128, "#%d - %s - %s (%d %T)", iCount, sName, sTime, iJumps, "WRJumps", client);
|
||||
FormatEx(sDisplay, 128, "#%d - %s - %s (%d %T)", iCount, sName, sTime, jumps, "WRJumps", client);
|
||||
m.AddItem(sID, sDisplay);
|
||||
}
|
||||
|
||||
@ -1095,23 +1095,23 @@ public void SQL_RR_Callback(Database db, DBResultSet results, const char[] error
|
||||
results.FetchString(2, sName, MAX_NAME_LENGTH);
|
||||
|
||||
char[] sTime = new char[16];
|
||||
float fTime = results.FetchFloat(3);
|
||||
FormatSeconds(fTime, sTime, 16);
|
||||
float time = results.FetchFloat(3);
|
||||
FormatSeconds(time, sTime, 16);
|
||||
|
||||
int iJumps = results.FetchInt(4);
|
||||
BhopStyle bsStyle = view_as<BhopStyle>(results.FetchInt(5));
|
||||
int jumps = results.FetchInt(4);
|
||||
BhopStyle style = view_as<BhopStyle>(results.FetchInt(5));
|
||||
float fPoints = results.FetchFloat(6);
|
||||
|
||||
char[] sDisplay = new char[192];
|
||||
|
||||
if(gB_Rankings && fPoints > 0.0)
|
||||
{
|
||||
FormatEx(sDisplay, 192, "[%s] %s - %s @ %s (%.03f %T)", gS_StyleStrings[bsStyle][sShortName], sDisplayMap, sName, sTime, fPoints, "WRPoints", client);
|
||||
FormatEx(sDisplay, 192, "[%s] %s - %s @ %s (%.03f %T)", gS_StyleStrings[style][sShortName], sDisplayMap, sName, sTime, fPoints, "WRPoints", client);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
FormatEx(sDisplay, 192, "[%s] %s - %s @ %s (%d %T)", gS_StyleStrings[bsStyle][sShortName], sDisplayMap, sName, sTime, iJumps, "WRJumps", client);
|
||||
FormatEx(sDisplay, 192, "[%s] %s - %s @ %s (%d %T)", gS_StyleStrings[style][sShortName], sDisplayMap, sName, sTime, jumps, "WRJumps", client);
|
||||
}
|
||||
|
||||
char[] sInfo = new char[192];
|
||||
@ -1204,22 +1204,22 @@ public void SQL_SubMenu_Callback(Database db, DBResultSet results, const char[]
|
||||
results.FetchString(0, sName, MAX_NAME_LENGTH);
|
||||
|
||||
// 1 - time
|
||||
float fTime = results.FetchFloat(1);
|
||||
float time = results.FetchFloat(1);
|
||||
char[] sTime = new char[16];
|
||||
FormatSeconds(fTime, sTime, 16);
|
||||
FormatSeconds(time, sTime, 16);
|
||||
|
||||
char[] sDisplay = new char[128];
|
||||
FormatEx(sDisplay, 128, "%T: %s", "WRTime", client, sTime);
|
||||
m.AddItem("-1", sDisplay);
|
||||
|
||||
// 2 - jumps
|
||||
int iJumps = results.FetchInt(2);
|
||||
FormatEx(sDisplay, 128, "%T: %d", "WRJumps", client, iJumps);
|
||||
int jumps = results.FetchInt(2);
|
||||
FormatEx(sDisplay, 128, "%T: %d", "WRJumps", client, jumps);
|
||||
m.AddItem("-1", sDisplay);
|
||||
|
||||
// 3 - style
|
||||
BhopStyle bsStyle = view_as<BhopStyle>(results.FetchInt(3));
|
||||
FormatEx(sDisplay, 128, "%T: %s", "WRStyle", client, gS_StyleStrings[bsStyle][sStyleName]);
|
||||
BhopStyle style = view_as<BhopStyle>(results.FetchInt(3));
|
||||
FormatEx(sDisplay, 128, "%T: %s", "WRStyle", client, gS_StyleStrings[style][sStyleName]);
|
||||
m.AddItem("-1", sDisplay);
|
||||
|
||||
// 6 - map
|
||||
@ -1250,12 +1250,12 @@ public void SQL_SubMenu_Callback(Database db, DBResultSet results, const char[]
|
||||
FormatEx(sDisplay, 128, "%T: %s", "WRDate", client, sDate);
|
||||
m.AddItem("-1", sDisplay);
|
||||
|
||||
int iStrafes = results.FetchInt(7);
|
||||
float fSync = results.FetchFloat(8);
|
||||
int strafes = results.FetchInt(7);
|
||||
float sync = results.FetchFloat(8);
|
||||
|
||||
if(iJumps > 0 || iStrafes > 0)
|
||||
if(jumps > 0 || strafes > 0)
|
||||
{
|
||||
FormatEx(sDisplay, 128, (fSync != -1.0)? "%T: %d (%.02f%%)":"%T: %d", "WRStrafes", client, iStrafes, fSync);
|
||||
FormatEx(sDisplay, 128, (sync != -1.0)? "%T: %d (%.02f%%)":"%T: %d", "WRStrafes", client, strafes, sync);
|
||||
m.AddItem("-1", sDisplay);
|
||||
}
|
||||
char[] sMenuItem = new char[64];
|
||||
@ -1462,7 +1462,7 @@ public void Shavit_OnFinish(int client, BhopStyle style, float time, int jumps,
|
||||
// 2 - update
|
||||
int overwrite = 0;
|
||||
|
||||
if(gA_StyleSettings[style][bUnranked])
|
||||
if(gA_StyleSettings[style][bUnranked] || Shavit_IsPracticeMode(client))
|
||||
{
|
||||
overwrite = 0; // ugly way of not writing to database
|
||||
}
|
||||
|
||||
@ -1127,13 +1127,6 @@ public Action OnPlayerRunCmd(int client, int &buttons)
|
||||
}
|
||||
}
|
||||
|
||||
// temp variables
|
||||
static float fTime;
|
||||
static int iJumps;
|
||||
static BhopStyle bsStyle;
|
||||
bool bStarted;
|
||||
Shavit_GetTimer(client, fTime, iJumps, bsStyle, bStarted);
|
||||
|
||||
if(InsideZone(client, view_as<int>(Zone_Start)))
|
||||
{
|
||||
Shavit_ResumeTimer(client);
|
||||
@ -1149,7 +1142,7 @@ public Action OnPlayerRunCmd(int client, int &buttons)
|
||||
ForcePlayerSuicide(client);
|
||||
}
|
||||
|
||||
if(bStarted)
|
||||
if(Shavit_GetTimerStatus(client) == Timer_Running)
|
||||
{
|
||||
if(InsideZone(client, view_as<int>(Zone_Stop)))
|
||||
{
|
||||
|
||||
@ -59,6 +59,11 @@
|
||||
"#format" "{1:s},{2:s}"
|
||||
"en" "{1}WARNING: {2}This style is unranked. Your times WILL NOT be saved and will be only displayed to you!"
|
||||
}
|
||||
"PracticeModeAlert"
|
||||
{
|
||||
"#format" "{1:s},{2:s}"
|
||||
"en" "{1}WARNING: {2}You're now in practice mode. Your times WILL NOT be saved and will be only displayed to you!"
|
||||
}
|
||||
// ---------- Pauses ---------- //
|
||||
"MessagePause"
|
||||
{
|
||||
@ -90,6 +95,11 @@
|
||||
"#format" "{1:s},{2:s}"
|
||||
"en" "Timer has been {1}paused{2}."
|
||||
}
|
||||
"PausePractice"
|
||||
{
|
||||
"#format" "{1:s},{2:s}"
|
||||
"en" "You {1}are not{2} allowed to pause while in practice mode."
|
||||
}
|
||||
// ---------- Zones ---------- //
|
||||
"StartZoneUndefined"
|
||||
{
|
||||
|
||||
@ -56,6 +56,10 @@
|
||||
{
|
||||
"en" "Sync"
|
||||
}
|
||||
"HudPracticeMode"
|
||||
{
|
||||
"en" "[PRACTICE]"
|
||||
}
|
||||
// ---------- Menus ---------- //
|
||||
"HUDMenuTitle"
|
||||
{
|
||||
|
||||
@ -63,11 +63,6 @@
|
||||
{
|
||||
"en" "Invalid target."
|
||||
}
|
||||
"MiscCheckpointsStopped"
|
||||
{
|
||||
"#format" "{1:s},{2:s}"
|
||||
"en" "Your timer has been {1}stopped{2} due to teleporting."
|
||||
}
|
||||
"MiscCheckpointsSaved"
|
||||
{
|
||||
"#format" "{1:s},{2:s}"
|
||||
|
||||
@ -39,33 +39,33 @@
|
||||
// ---------- Points ---------- //
|
||||
"ApproximatePoints"
|
||||
{
|
||||
"#format" "{1s},{2:s},{3s},{4s},{5:.01f},{6s},{7s},{8:i},{9:s}"
|
||||
"#format" "{1:s},{2:s},{3:s},{4:s},{5:.01f},{6:s},{7:s},{8:i},{9:s}"
|
||||
"en" "{1}{2}{3}: Around {4}{5}{6} points for a time of {7}{8}{9}."
|
||||
}
|
||||
"Rank"
|
||||
{
|
||||
"#format" "{1s},{2:N},{3s},{4s},{5:i},{6s},{7s},{8:i},{9s},{10s},{11:.02f},{12:s}"
|
||||
"#format" "{1:s},{2:N},{3:s},{4:s},{5:i},{6:s},{7:s},{8:i},{9:s},{10:s},{11:.02f},{12:s}"
|
||||
"en" "{1}{2}{3} is ranked {4}{5}{6} out of {7}{8}{9} with {10}{11} points {12}."
|
||||
}
|
||||
"UnknownPoints"
|
||||
{
|
||||
"#format" "{1s},{2:s},{3s}"
|
||||
"#format" "{1:s},{2:s},{3:s}"
|
||||
"en" "{1}{2}{3}: Unknown points, no records on map."
|
||||
}
|
||||
"Unranked"
|
||||
{
|
||||
"#format" "{1s},{2:N},{3s},{4s},{5s}"
|
||||
"#format" "{1:s},{2:N},{3:s},{4:s},{5:s}"
|
||||
"en" "{1}{2}{3} is {4}unranked{5}."
|
||||
}
|
||||
// ---------- Tiers ---------- //
|
||||
"Tier"
|
||||
{
|
||||
"#format" "{1s},{2:s},{3s},{4s},{5:.01f},{6s}"
|
||||
"#format" "{1:s},{2:s},{3:s},{4:s},{5:.01f},{6:s}"
|
||||
"en" "{1}{2}{3} is rated as {4}Tier {5}{6}."
|
||||
}
|
||||
"TierUnset"
|
||||
{
|
||||
"#format" "{1s},{2:s},{3s}"
|
||||
"#format" "{1:s},{2:s},{3:s}"
|
||||
"en" "{1}{2}{3} is not rated."
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user