summaryrefslogtreecommitdiff
path: root/sourcemod/scripting/gokz-jumpstats.sp
diff options
context:
space:
mode:
authornavewindre <nw@moneybot.cc>2023-12-04 18:06:10 +0100
committernavewindre <nw@moneybot.cc>2023-12-04 18:06:10 +0100
commitaef0d1c1268ab7d4bc18996c9c6b4da16a40aadc (patch)
tree43e766b51704f4ab8b383583bdc1871eeeb9c698 /sourcemod/scripting/gokz-jumpstats.sp
parent38f1140c11724da05a23a10385061200b907cf6e (diff)
bbbbbbbbwaaaaaaaaaaa
Diffstat (limited to 'sourcemod/scripting/gokz-jumpstats.sp')
-rw-r--r--sourcemod/scripting/gokz-jumpstats.sp216
1 files changed, 216 insertions, 0 deletions
diff --git a/sourcemod/scripting/gokz-jumpstats.sp b/sourcemod/scripting/gokz-jumpstats.sp
new file mode 100644
index 0000000..74d9220
--- /dev/null
+++ b/sourcemod/scripting/gokz-jumpstats.sp
@@ -0,0 +1,216 @@
+#include <sourcemod>
+
+#include <dhooks>
+#include <sdkhooks>
+#include <sdktools>
+
+#include <gokz/core>
+#include <gokz/jumpstats>
+
+#undef REQUIRE_EXTENSIONS
+#undef REQUIRE_PLUGIN
+#include <gokz/localdb>
+#include <updater>
+
+#include <gokz/kzplayer>
+
+#pragma newdecls required
+#pragma semicolon 1
+
+
+
+public Plugin myinfo =
+{
+ name = "GOKZ Jumpstats",
+ author = "DanZay",
+ description = "Tracks and outputs movement statistics",
+ version = GOKZ_VERSION,
+ url = GOKZ_SOURCE_URL
+};
+
+#define UPDATER_URL GOKZ_UPDATER_BASE_URL..."gokz-jumpstats.txt"
+
+// This must be global because it's both used by jump tracking and validating.
+bool gB_SpeedJustModifiedExternally[MAXPLAYERS + 1];
+
+#include "gokz-jumpstats/api.sp"
+#include "gokz-jumpstats/commands.sp"
+#include "gokz-jumpstats/distance_tiers.sp"
+#include "gokz-jumpstats/jump_reporting.sp"
+#include "gokz-jumpstats/jump_tracking.sp"
+#include "gokz-jumpstats/jump_validating.sp"
+#include "gokz-jumpstats/options.sp"
+#include "gokz-jumpstats/options_menu.sp"
+
+
+// =====[ PLUGIN EVENTS ]=====
+
+public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max)
+{
+ CreateNatives();
+ RegPluginLibrary("gokz-jumpstats");
+ return APLRes_Success;
+}
+
+public void OnPluginStart()
+{
+ LoadTranslations("gokz-common.phrases");
+ LoadTranslations("gokz-jumpstats.phrases");
+
+ LoadBroadcastTiers();
+ CreateGlobalForwards();
+ RegisterCommands();
+
+ OnPluginStart_JumpTracking();
+ OnPluginStart_JumpValidating();
+}
+
+public void OnAllPluginsLoaded()
+{
+ if (LibraryExists("updater"))
+ {
+ Updater_AddPlugin(UPDATER_URL);
+ }
+
+ TopMenu topMenu;
+ if (LibraryExists("gokz-core") && ((topMenu = GOKZ_GetOptionsTopMenu()) != null))
+ {
+ GOKZ_OnOptionsMenuReady(topMenu);
+ }
+
+ for (int client = 1; client <= MaxClients; client++)
+ {
+ if (IsClientInGame(client))
+ {
+ OnClientPutInServer(client);
+ }
+ }
+}
+
+public void OnLibraryAdded(const char[] name)
+{
+ if (StrEqual(name, "updater"))
+ {
+ Updater_AddPlugin(UPDATER_URL);
+ }
+}
+
+
+
+// =====[ CLIENT EVENTS ]=====
+
+public void OnClientPutInServer(int client)
+{
+ HookClientEvents(client);
+ OnClientPutInServer_Options(client);
+ OnClientPutInServer_JumpTracking(client);
+}
+
+public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3], float angles[3], int &weapon, int &subtype, int &cmdnum, int &tickcount, int &seed, int mouse[2])
+{
+ OnPlayerRunCmd_JumpTracking(client, buttons, tickcount);
+ return Plugin_Continue;
+}
+
+public void OnPlayerRunCmdPost(int client, int buttons, int impulse, const float vel[3], const float angles[3], int weapon, int subtype, int cmdnum, int tickcount, int seed, const int mouse[2])
+{
+ OnPlayerRunCmdPost_JumpTracking(client);
+}
+
+public void Movement_OnStartTouchGround(int client)
+{
+ OnStartTouchGround_JumpTracking(client);
+}
+
+public void GOKZ_OnJumpInvalidated(int client)
+{
+ OnJumpInvalidated_JumpTracking(client);
+}
+
+public void GOKZ_OnJumpValidated(int client, bool jumped, bool ladderJump, bool jumpbug)
+{
+ OnJumpValidated_JumpTracking(client, jumped, ladderJump, jumpbug);
+}
+
+public void GOKZ_OnOptionChanged(int client, const char[] option, any newValue)
+{
+ OnOptionChanged_JumpTracking(client, option);
+ OnOptionChanged_Options(client, option, newValue);
+}
+
+public void GOKZ_JS_OnLanding(Jump jump)
+{
+ OnLanding_JumpReporting(jump);
+}
+
+public void GOKZ_JS_OnFailstat(Jump jump)
+{
+ OnFailstat_FailstatReporting(jump);
+}
+
+public void GOKZ_JS_OnJumpstatAlways(Jump jump)
+{
+ OnJumpstatAlways_JumpstatAlwaysReporting(jump);
+}
+
+public void GOKZ_JS_OnFailstatAlways(Jump jump)
+{
+ OnFailstatAlways_FailstatAlwaysReporting(jump);
+}
+
+public void SDKHook_StartTouch_Callback(int client, int touched) // SDKHook_StartTouchPost
+{
+ OnStartTouch_JumpTracking(client, touched);
+}
+
+public void SDKHook_Touch_CallBack(int client, int touched)
+{
+ OnTouch_JumpTracking(client);
+}
+
+public void SDKHook_EndTouch_Callback(int client, int touched) // SDKHook_EndTouchPost
+{
+ OnEndTouch_JumpTracking(client, touched);
+}
+
+public void GOKZ_OnTeleport(int client)
+{
+ OnTeleport_FailstatAlways(client);
+}
+
+
+
+// =====[ OTHER EVENTS ]=====
+
+public void OnMapStart()
+{
+ OnMapStart_JumpReporting();
+ OnMapStart_DistanceTiers();
+}
+
+public void GOKZ_OnOptionsMenuCreated(TopMenu topMenu)
+{
+ OnOptionsMenuCreated_OptionsMenu(topMenu);
+}
+
+public void GOKZ_OnOptionsMenuReady(TopMenu topMenu)
+{
+ OnOptionsMenuReady_Options();
+ OnOptionsMenuReady_OptionsMenu(topMenu);
+}
+
+public void GOKZ_OnSlap(int client)
+{
+ InvalidateJumpstat(client);
+}
+
+
+
+// =====[ PRIVATE ]=====
+
+static void HookClientEvents(int client)
+{
+ SDKHook(client, SDKHook_StartTouchPost, SDKHook_StartTouch_Callback);
+ SDKHook(client, SDKHook_TouchPost, SDKHook_Touch_CallBack);
+ SDKHook(client, SDKHook_EndTouchPost, SDKHook_EndTouch_Callback);
+}