#pragma once namespace Components { class Events : public Component { public: using Callback = std::vector>; using ClientConnectCallback = std::vector>; using ClientCallback = std::vector>; using ClientCmdCallback = std::vector>; Events(); // Server side static void OnClientDisconnect(const std::function& callback); // Server side static void OnClientConnect(const std::function& callback); // Client side static void OnSteamDisconnect(const std::function& callback); static void OnVMShutdown(const std::function& callback); static void OnClientInit(const std::function& callback); static void OnClientCmdButtons(const std::function& callback); static void OnClientKeyMove(const std::function& callback); // Client & Server (triggered once) static void OnSVInit(const std::function& callback); // Client & Server (triggered once) static void OnDvarInit(const std::function& callback); // Client & Server (triggered once) static void OnNetworkInit(const std::function& callback); private: static Utils::Concurrency::Container ClientDisconnectTasks_; static Utils::Concurrency::Container ClientConnectTasks_; static Utils::Concurrency::Container SteamDisconnectTasks_; static Utils::Concurrency::Container ShutdownSystemTasks_; static Utils::Concurrency::Container ClientInitTasks_; static Utils::Concurrency::Container ServerInitTasks_; static Utils::Concurrency::Container DvarInitTasks_; static Utils::Concurrency::Container NetworkInitTasks_; // For speed this one does not use concurrency container. Be careful static ClientCmdCallback ClientCmdButtonsTasks_; static ClientCmdCallback ClientKeyMoveTasks_; static void ClientDisconnect_Hk(int clientNum); static void SV_UserinfoChanged_Hk(Game::client_s* cl); static void SteamDisconnect_Hk(); static void Scr_ShutdownSystem_Hk(unsigned char sys); static void CL_InitOnceForAllClients_HK(); static void CL_CmdButtons(Game::usercmd_s* cmd); static void CL_CmdButtons_Stub(); static void CL_KeyMove(Game::usercmd_s* cmd); static void CL_KeyMove_Stub(); static void SV_Init_Hk(); static void Com_InitDvars_Hk(); static void NetworkStart(); static void NET_OpenSocks_Hk(); }; }