diff options
| author | aura <nw@moneybot.cc> | 2026-02-17 23:42:09 +0100 |
|---|---|---|
| committer | aura <nw@moneybot.cc> | 2026-02-17 23:42:09 +0100 |
| commit | 5e2eb7d67ae933b7566f1944d0bb7744da03d586 (patch) | |
| tree | 054acff1113270a9cd07933df760f3768c1b6853 /sourcemod/scripting/sm_speedometer.sp | |
| parent | 341db13a008dc12bb22ceb50452d93d01476308c (diff) | |
move source stuff to its own folder
Diffstat (limited to 'sourcemod/scripting/sm_speedometer.sp')
| -rw-r--r-- | sourcemod/scripting/sm_speedometer.sp | 585 |
1 files changed, 0 insertions, 585 deletions
diff --git a/sourcemod/scripting/sm_speedometer.sp b/sourcemod/scripting/sm_speedometer.sp deleted file mode 100644 index a52d742..0000000 --- a/sourcemod/scripting/sm_speedometer.sp +++ /dev/null @@ -1,585 +0,0 @@ -/* - Removed unnecessary (and incorrect) usage of void: from newbie days. - Fixed a case where late-loading state was never disabled. - Modified a few cases to ensure handles are detected and closed, even if redundant. - Changed version cvar to sm_speedometer_version rather than sm_surfing_meter_version. - Removed cvars sm_speedometer_format, sm_speedometer_message, and sm_speedometer_accuracy. - Added translations support. - Optimized several areas of code. -*/ - -#pragma semicolon 1 -#include <sourcemod> -#include <clientprefs> - -#define PLUGIN_VERSION "1.0.6" - -new Handle:g_hMethod = INVALID_HANDLE; -new Handle:g_hFactor = INVALID_HANDLE; -new Handle:g_hDisplay = INVALID_HANDLE; -new Handle:g_hFastest = INVALID_HANDLE; -new Handle:g_hDefault = INVALID_HANDLE; -new Handle:g_hCookie = INVALID_HANDLE; - -new g_iTeam[MAXPLAYERS + 1]; -new bool:g_bLoaded[MAXPLAYERS + 1]; -new bool:g_bAlive[MAXPLAYERS + 1]; -new bool:g_bShowDisplay[MAXPLAYERS + 1]; -new Handle:g_hTimer_Display[MAXPLAYERS + 1] = { INVALID_HANDLE, ... }; - -new bool:g_bEnabled, bool:g_bLateLoad, bool:g_bUseOnFrame, bool:g_bUseTimer, bool:g_bEnding, bool:g_bShowFastest, bool:g_bDefault; -new g_iDisplayMethod, g_iFastestClient; -new Float:g_fTimerRate, Float:g_fVelocityFactor, Float:g_fFastestVelocity; - -public Plugin:myinfo = -{ - name = "Speedometer", - author = "Twisted|Panda, networkheaven.net", - description = "Plugin that provides a few options for displaying a user's current velocity for surfing.", - version = PLUGIN_VERSION, - url = "https://forums.alliedmods.net/index.php" -} - -public APLRes:AskPluginLoad2(Handle:myself, bool:late, String:error[], err_max) -{ - g_bLateLoad = late; - return APLRes_Success; -} - -public OnPluginStart() -{ - LoadTranslations("common.phrases"); - LoadTranslations("sm_speedometer.phrases"); - - CreateConVar("sm_speedometer_version", PLUGIN_VERSION, "Speedometer: Version", FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY|FCVAR_DONTRECORD); - g_hMethod = CreateConVar("sm_speedometer_method", "0.1", "Determines plugin functionality. (-1.0 = OnGameFrame(), 0.0 = Disabled, 0.1 <-> 2.0 = Refresh Rate)", FCVAR_NONE, true, -1.0, true, 2.0); - HookConVarChange(g_hMethod, Action_OnSettingsChange); - g_hFactor = CreateConVar("sm_speedometer_factor", "0.0", "Optional numerical value that can be used to derive real world units from in-game velocity.", FCVAR_NONE, true, 0.0); - HookConVarChange(g_hFactor, Action_OnSettingsChange); - g_hDisplay = CreateConVar("sm_speedometer_area", "0", "Determines printing area functionality. (0 = Hint, 1 = Center, 2 = Hud Hint, 3 = hud panel)", FCVAR_NONE, true, 0.0, true, 3.0); - HookConVarChange(g_hDisplay, Action_OnSettingsChange); - g_hFastest = CreateConVar("sm_speedometer_fastest", "1", "If enabled, the player with the highest velocity will be displayed at the end of the round.", FCVAR_NONE, true, 0.0, true, 1.0); - HookConVarChange(g_hFastest, Action_OnSettingsChange); - g_hDefault = CreateConVar("sm_speedometer_default", "1", "If enabled, new clients will start with the speedometer enabled.", FCVAR_NONE); - HookConVarChange(g_hDefault, Action_OnSettingsChange); - AutoExecConfig(true, "sm_speedometer"); - - RegConsoleCmd("sm_meter", Command_Meter); - RegConsoleCmd("sm_speedometer", Command_Meter); - - HookEvent("player_team", Event_OnPlayerTeam); - HookEvent("player_spawn", Event_OnPlayerSpawn); - HookEvent("player_death", Event_OnPlayerDeath); - HookEvent("round_start", Event_OnRoundStart); - HookEvent("round_end", Event_OnRoundEnd); - HookEvent("bomb_planted", Event_OnBombPlanted); - HookEvent("bomb_defused", Event_OnBombDefused); - - g_hCookie = RegClientCookie("Cookie_Speedometer", "The client's setting for speedometer.", CookieAccess_Protected); - SetCookieMenuItem(Menu_Status, 0, "Speedometer"); - - Define_Defaults(); -} - -public OnConfigsExecuted() -{ - if(g_bEnabled) - { - if(g_bLateLoad) - { - for(new i = 1; i <= MaxClients; i++) - { - if(IsClientInGame(i)) - { - g_bAlive[i] = IsPlayerAlive(i) ? true : false; - if(!IsFakeClient(i)) - { - if(AreClientCookiesCached(i)) - LoadCookies(i); - - if(g_bUseTimer && !g_bEnding && g_fTimerRate) - g_hTimer_Display[i] = CreateTimer(g_fTimerRate, Timer_Display, i, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); - } - } - } - - g_bLateLoad = false; - } - } -} - -public OnClientConnected(client) -{ - if(g_bEnabled) - { - g_bShowDisplay[client] = g_bDefault; - if(AreClientCookiesCached(client) && !g_bLoaded[client] && !IsFakeClient(client)) - LoadCookies(client); - } -} - -public OnClientDisconnect(client) -{ - if(g_bEnabled) - { - g_iTeam[client] = 0; - g_bAlive[client] = g_bLoaded[client] = g_bShowDisplay[client] = false; - - if(g_iFastestClient == client) - g_iFastestClient = 0; - - if(g_bUseTimer && g_hTimer_Display[client] != INVALID_HANDLE && CloseHandle(g_hTimer_Display[client])) - g_hTimer_Display[client] = INVALID_HANDLE; - } -} - -public Action:Event_OnPlayerTeam(Handle:event, const String:name[], bool:dontBroadcast) -{ - if(g_bEnabled) - { - new client = GetClientOfUserId(GetEventInt(event, "userid")); - if(!client || !IsClientInGame(client)) - return Plugin_Continue; - - g_iTeam[client] = GetEventInt(event, "team"); - if(g_iTeam[client] <= 1) - { - g_bAlive[client] = false; - if(g_bUseTimer && g_hTimer_Display[client] != INVALID_HANDLE && CloseHandle(g_hTimer_Display[client])) - g_hTimer_Display[client] = INVALID_HANDLE; - } - } - - return Plugin_Continue; -} - -public Action:Event_OnPlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast) -{ - if(g_bEnabled) - { - new client = GetClientOfUserId(GetEventInt(event, "userid")); - if(!client || !IsClientInGame(client) || g_iTeam[client] <= 1) - return Plugin_Continue; - - g_bAlive[client] = true; - if(g_bUseTimer && g_bShowDisplay[client] && !g_bEnding && !IsFakeClient(client)) - g_hTimer_Display[client] = CreateTimer(g_fTimerRate, Timer_Display, client, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); - } - - return Plugin_Continue; -} - -public Action:Event_OnPlayerDeath(Handle:event, const String:name[], bool:dontBroadcast) -{ - if(g_bEnabled) - { - new client = GetClientOfUserId(GetEventInt(event, "userid")); - if(!client || !IsClientInGame(client)) - return Plugin_Continue; - - g_bAlive[client] = false; - if(g_bUseTimer && g_hTimer_Display[client] != INVALID_HANDLE && CloseHandle(g_hTimer_Display[client])) - g_hTimer_Display[client] = INVALID_HANDLE; - } - - return Plugin_Continue; -} - -public Action:Event_OnRoundStart(Handle:event, const String:name[], bool:dontBroadcast) -{ - if(g_bEnabled) - { - g_bEnding = false; - - if(g_bShowFastest) - { - g_iFastestClient = 0; - g_fFastestVelocity = 0.0; - } - } - - return Plugin_Continue; -} - -public Action:Event_OnBombPlanted(Handle:event, const String:name[], bool:dontBroadcast) { - for(new i = 1; i <= MaxClients; i++) - { - if( g_bShowDisplay[i] && g_iDisplayMethod == 1 && IsClientInGame(i) && IsPlayerAlive(i) && !IsFakeClient(i) ) { - PrintHintText( i, "Bomb has been planted" ); - } - } -} - -public Action:Event_OnBombDefused(Handle:event, const String:name[], bool:dontBroadcast) { - for(new i = 1; i <= MaxClients; i++) - { - if( g_bShowDisplay[i] && g_iDisplayMethod == 1 && IsClientInGame(i) && IsPlayerAlive(i) && !IsFakeClient(i) ) { - PrintHintText( i, "Bomb has been defused" ); - } - } -} - -public Action:Event_OnRoundEnd(Handle:event, const String:name[], bool:dontBroadcast) -{ - if(g_bEnabled) - { - g_bEnding = true; - new reason = GetEventInt(event, "reason"); - new winner = GetEventInt(event, "winner"); - - for(new i = 1; i <= MaxClients; i++) - { - if(IsClientInGame(i)) - { - if(g_bUseTimer) - { - if(g_hTimer_Display[i] != INVALID_HANDLE && CloseHandle(g_hTimer_Display[i])) - g_hTimer_Display[i] = INVALID_HANDLE; - } - - if( g_bShowDisplay[i] && g_iDisplayMethod == 1 && IsPlayerAlive(i) && !IsFakeClient(i) ) { - if( reason == 15 ) - PrintHintText( i, "Game commencing" ); - else if( winner == 1 ) - PrintHintText( i, "Round Draw" ); - else if( winner == 2 ) - PrintHintText( i, "Terrorists Win" ); - else if( winner == 3 ) - PrintHintText( i, "Counter-Terrorists Win" ); - } - } - } - - if(g_bShowFastest) - { - decl String:sName[MAX_NAME_LENGTH]; - if(IsClientInGame(g_iFastestClient)) - GetClientName(g_iFastestClient, sName, sizeof(sName)); - else - Format(sName, sizeof(sName), "%T", "Phrase_Mystery_Winner", LANG_SERVER); - - PrintToChatAll("%t%t", "Prefix_Chat", "Phrase_Highest_Velocity", sName, g_fFastestVelocity); - } - } - return Plugin_Continue; -} - -public Action:Command_Meter(client, args) -{ - if(g_bEnabled && client) - { - if(g_bShowDisplay[client]) - { - SetClientCookie(client, g_hCookie, "0"); - PrintToChat(client, "%t%t", "Prefix_Chat", "Phrase_Disable_Speedometer"); - - if(g_bUseTimer && g_hTimer_Display[client] != INVALID_HANDLE && CloseHandle(g_hTimer_Display[client])) - g_hTimer_Display[client] = INVALID_HANDLE; - - switch(g_iDisplayMethod) - { - case 0: - PrintHintText(client, ""); - case 1: - PrintCenterText(client, ""); - case 2: - { - new Handle:hTemp = StartMessageOne("KeyHintText", client); - BfWriteByte(hTemp, 1); - BfWriteString(hTemp, ""); - EndMessage(); - } - } - } - else - { - SetClientCookie(client, g_hCookie, "1"); - PrintToChat(client, "%t%t", "Prefix_Chat", "Phrase_Enable_Speedometer"); - - if(g_bUseTimer) - g_hTimer_Display[client] = CreateTimer(g_fTimerRate, Timer_Display, client, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); - } - - g_bShowDisplay[client] = !g_bShowDisplay[client]; - } - - return Plugin_Handled; -} - -public Action:OnPlayerRunCmd(iClient, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapon) { - if(g_bUseOnFrame) - { - decl String:sBuffer[128]; - decl Float:_fTemp[3], Float:_fVelocity; - new i = iClient; - if(g_bAlive[i] && g_iTeam[i] >= 2 && g_bShowDisplay[i]) - { - GetEntPropVector(i, Prop_Data, "m_vecVelocity", _fTemp); - for(new j = 0; j <= 1; j++) - _fTemp[j] *= _fTemp[j]; - - _fVelocity = SquareRoot(_fTemp[0] + _fTemp[1]); - if(g_fVelocityFactor) - _fVelocity /= g_fVelocityFactor; - - switch(g_iDisplayMethod) - { - case 0: - PrintHintText(i, "%t", "Phrase_Velocity_Display", _fVelocity); - case 1: - PrintCenterText(i, "%t", "Phrase_Velocity_Display", _fVelocity); - case 2: - { - Format(sBuffer, sizeof(sBuffer), "%T", "Phrase_Velocity_Display", i, _fVelocity); - new Handle:hTemp = StartMessageOne("KeyHintText", i); - BfWriteByte(hTemp, 1); - BfWriteString(hTemp, sBuffer); - EndMessage(); - } - case 3: - { - Format(sBuffer, sizeof(sBuffer), "%T", "Phrase_Velocity_Display", i, _fVelocity); - - SetHudTextParams(-1.0, 0.85, 0.05, 255, 255, 255, 255, 0, 0.0, 0.0, 0.0); - ShowHudText(i, 1, sBuffer); - } - } - - if(g_bShowFastest && _fVelocity > g_fFastestVelocity) - { - g_fFastestVelocity = _fVelocity; - g_iFastestClient = i; - } - } - } -} - -public Action:Timer_Display(Handle:timer, any:client) -{ - if(!g_bAlive[client] || g_iTeam[client] <= 1 || !g_bShowDisplay[client]) - { - g_hTimer_Display[client] = INVALID_HANDLE; - return Plugin_Stop; - } - - decl Float:_fTemp[3], Float:_fVelocity; - GetEntPropVector(client, Prop_Data, "m_vecVelocity", _fTemp); - for(new i = 0; i <= 1; i++) - _fTemp[i] *= _fTemp[i]; - - _fVelocity = SquareRoot(_fTemp[0] + _fTemp[1]); - if(g_fVelocityFactor) - _fVelocity /= g_fVelocityFactor; - - switch(g_iDisplayMethod) - { - case 0: - PrintHintText(client, "%t", "Phrase_Velocity_Display", _fVelocity); - case 1: - PrintCenterText(client, "%t", "Phrase_Velocity_Display", _fVelocity); - case 2: - { - decl String:sBuffer[128]; - Format(sBuffer, sizeof(sBuffer), "%T", "Phrase_Velocity_Display", client, _fVelocity); - new Handle:hTemp = StartMessageOne("KeyHintText", client); - BfWriteByte(hTemp, 1); - BfWriteString(hTemp, sBuffer); - EndMessage(); - } - } - - if(g_bShowFastest && _fVelocity > g_fFastestVelocity) - { - g_fFastestVelocity = _fVelocity; - g_iFastestClient = client; - } - - return Plugin_Continue; -} - -public OnGameFrame() -{ - -} - -public OnClientCookiesCached(client) -{ - if(g_bEnabled) - { - if(!g_bLoaded[client]) - LoadCookies(client); - } -} - -LoadCookies(client) -{ - new String:sCookie[2]; - GetClientCookie(client, g_hCookie, sCookie, sizeof(sCookie)); - - if(StrEqual(sCookie, "", false)) - { - if(g_bDefault) - SetClientCookie(client, g_hCookie, "1"); - else - SetClientCookie(client, g_hCookie, "0"); - } - else - g_bShowDisplay[client] = StrEqual(sCookie, "0") ? false : true; - - g_bLoaded[client] = true; -} - -public Menu_Status(client, CookieMenuAction:action, any:info, String:buffer[], maxlen) -{ - switch(action) - { - case CookieMenuAction_DisplayOption: - Format(buffer, maxlen, "%T", "Menu_Cookie_Display", client); - case CookieMenuAction_SelectOption: - { - if(!g_bEnabled) - PrintToChat(client, "%t%t", "Prefix_Chat", "Phrase_Plugin_Disabled"); - else - Menu_Cookies(client); - } - } -} - -Menu_Cookies(client) -{ - decl String:sBuffer[128]; - Format(sBuffer, sizeof(sBuffer), "%T", "Menu_Cookie_Title", client); - new Handle:hMenu = CreateMenu(MenuHandler_CookieMenu); - SetMenuExitBackButton(hMenu, true); - SetMenuExitButton(hMenu, true); - SetMenuTitle(hMenu, sBuffer); - - if(g_bShowDisplay[client]) - { - Format(sBuffer, sizeof(sBuffer), "%T", "Menu_Cookie_Disable", client); - AddMenuItem(hMenu, "0", sBuffer); - } - else - { - Format(sBuffer, sizeof(sBuffer), "%T", "Menu_Cookie_Enable", client); - AddMenuItem(hMenu, "1", sBuffer); - } - - DisplayMenu(hMenu, client, MENU_TIME_FOREVER); -} - -public MenuHandler_CookieMenu(Handle:menu, MenuAction:action, param1, param2) -{ - switch (action) - { - case MenuAction_End: - CloseHandle(menu); - case MenuAction_Cancel: - { - if(param2 == MenuCancel_ExitBack) - ShowCookieMenu(param1); - } - case MenuAction_Select: - { - if(g_bShowDisplay[param1]) - { - SetClientCookie(param1, g_hCookie, "0"); - PrintToChat(param1, "%t%t", "Prefix_Chat", "Phrase_Disable_Speedometer"); - - if(g_bUseTimer && g_hTimer_Display[param1] != INVALID_HANDLE && CloseHandle(g_hTimer_Display[param1])) - g_hTimer_Display[param1] = INVALID_HANDLE; - - switch(g_iDisplayMethod) - { - case 0: - PrintHintText(param1, ""); - case 1: - PrintCenterText(param1, ""); - case 2: - { - new Handle:hTemp = StartMessageOne("KeyHintText", param1); - BfWriteByte(hTemp, 1); - BfWriteString(hTemp, ""); - EndMessage(); - } - } - } - else - { - SetClientCookie(param1, g_hCookie, "1"); - PrintToChat(param1, "%t%t", "Prefix_Chat", "Phrase_Enable_Speedometer"); - - if(g_bUseTimer) - g_hTimer_Display[param1] = CreateTimer(g_fTimerRate, Timer_Display, param1, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); - } - - g_bShowDisplay[param1] = !g_bShowDisplay[param1]; - Menu_Cookies(param1); - } - } -} - -Define_Defaults() -{ - new Float:_fTemp = GetConVarFloat(g_hMethod); - if(!_fTemp) - { - g_bEnabled = false; - g_bUseOnFrame = false; - g_bUseTimer = false; - } - else - { - g_bEnabled = true; - g_bUseOnFrame = _fTemp < 0.0 ? true : false; - g_bUseTimer = _fTemp < 0.0 ? false : true; - g_fTimerRate = _fTemp < 0.0 ? 0.0 : _fTemp; - } - - g_fVelocityFactor = GetConVarFloat(g_hFactor); - g_iDisplayMethod = GetConVarInt(g_hDisplay); - g_bShowFastest = GetConVarBool(g_hFastest); - g_bDefault = GetConVarBool(g_hDefault); -} - -public Action_OnSettingsChange(Handle:cvar, const String:oldvalue[], const String:newvalue[]) -{ - if(cvar == g_hMethod) - { - new Float:_fTemp = StringToFloat(newvalue); - if(_fTemp == 0.0) - { - g_bEnabled = false; - g_bUseOnFrame = false; - g_bUseTimer = false; - } - else - { - g_bEnabled = true; - g_bUseOnFrame = _fTemp < 0.0 ? true : false; - g_bUseTimer = _fTemp < 0.0 ? false : true; - g_fTimerRate = _fTemp < 0.0 ? 0.0 : _fTemp; - - for(new i = 1; i <= MaxClients; i++) - { - if(g_hTimer_Display[i] != INVALID_HANDLE && CloseHandle(g_hTimer_Display[i])) - g_hTimer_Display[i] = INVALID_HANDLE; - - g_bAlive[i] = (IsClientInGame(i) && IsPlayerAlive(i)) ? true : false; - if(!g_bEnding && g_bUseTimer && IsClientInGame(i)) - { - if(g_fTimerRate && !IsFakeClient(i)) - g_hTimer_Display[i] = CreateTimer(g_fTimerRate, Timer_Display, i, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); - } - } - } - } - else if(cvar == g_hFactor) - g_fVelocityFactor = StringToFloat(newvalue); - else if(cvar == g_hDisplay) - g_iDisplayMethod = StringToInt(newvalue); - else if(cvar == g_hFastest) - g_bShowFastest = StringToInt(newvalue) ? true : false; - else if(cvar == g_hDefault) - g_bDefault = StringToInt(newvalue) ? true : false; -}
\ No newline at end of file |
