33 if (name.empty() ||
FindPlugin(name) !=
nullptr)
38 _plugins.push_back(std::make_unique<PluginContext>(_state, std::string(name),
39 std::string(logTag.empty() ? name : logTag),
40 std::string(version), _state.
NextOrder++));
41 return _plugins.back().get();
46 const auto found = std::ranges::find_if(_plugins, [name](
const auto&
plugin) {
return plugin->Name() == name; });
47 return found != _plugins.end() ?
found->get() :
nullptr;
52 const auto found = std::ranges::find_if(_plugins, [name](
const auto&
plugin) {
return plugin->Name() == name; });
53 if (
found == _plugins.end())
59 _plugins.erase(
found);
92 return reason[0] !=
'\0' ? std::string(
reason) : std::string(
"Refused by the server.");
bool Dispatch(Visit &&visit)
void Reserve(std::string_view name)
std::string RaiseClientConnecting(int slot, int64_t steamId, std::string_view name)
void RaiseButtonPress(int slot, std::string_view buttonId)
void RaiseClientSettingsChanged(int slot)
void RegisterHostCommand(std::string_view name)
void RaiseCheckTransmit(CCheckTransmitInfo **infoList, int infoCount)
void SetSchemaLayout(uint64_t stamp, bool verified)
PluginContext * FindPlugin(std::string_view name)
bool HasCommandListeners() const
void RaiseClientConnected(int slot, int64_t steamId, std::string_view name, std::string_view address)
void RaiseServerStartup(std::string_view mapName)
PluginRegistry(LoaderHandoff start={}, IPluginGameData *gameData=nullptr, IPluginAddons *addons=nullptr)
void RaiseBuildGameSessionManifest(IEntityResourceManifest *manifest)
bool RaiseConsoleCommand(std::string_view name, std::string_view arguments, int slot)
LeakReport RemovePlugin(std::string_view name)
void RaiseClientFullyConnected(int slot)
PluginContext * AddPlugin(std::string_view name, std::string_view logTag={}, std::string_view version={})
void RaiseClientDisconnected(int slot)
void RaisePlayerCommand(int slot, const PlayerInput &input)
void RaisePlayerCommandDone(int slot, const PlayerInput &input)
static std::string ReadFile(const std::filesystem::path &path)
constexpr bool IsValidSlot(int slot)
static void RaiseCommand(CallbackList< IPluginEvents::PlayerCommandFn > &listeners, int slot, const PlayerInput &input)
void(*)(void *context, int slot) ClientFullyConnectedFn
void(*)(void *context, int slot) ClientSettingsChangedFn
void(*)(void *context, int slot, std::string_view buttonId) ButtonPressFn
void(*)(void *context, std::string_view mapName) ServerStartupFn
void(*)(void *context, int slot, int64_t steamId, std::string_view name, std::string_view address) ClientConnectedFn
bool(*)(void *context, std::string_view name, std::string_view arguments, int slot) ConsoleCommandFn
void(*)(void *context, CCheckTransmitInfo **infoList, int infoCount) CheckTransmitFn
void(*)(void *context, IEntityResourceManifest *manifest) BuildGameSessionManifestFn
void(*)(void *context) FrameFn
void(*)(void *context, int slot, const PlayerInput &input) PlayerCommandFn
bool(*)(void *context, int slot, int64_t steamId, std::string_view name, char *reason, size_t reasonSize) ClientConnectingFn
void(*)(void *context, int slot) ClientDisconnectedFn
CallbackList< IPluginEvents::BuildGameSessionManifestFn > BuildGameSessionManifest
CallbackList< IPluginEvents::PlayerCommandFn > PlayerCommand
CallbackList< IPluginEvents::ClientFullyConnectedFn > ClientFullyConnected
CallbackList< IPluginEvents::ClientSettingsChangedFn > ClientSettingsChanged
CallbackList< IPluginEvents::FrameFn > Frame
PerSlot< std::optional< ConnectedClient > > Clients
CallbackList< IPluginEvents::ClientConnectingFn > ClientConnecting
CallbackList< IPluginEvents::CheckTransmitFn > CheckTransmit
uint64_t NextOrder
load positions keep rising, so a reloaded plugin dispatches last
CallbackList< IPluginEvents::ButtonPressFn > ButtonPress
CallbackList< IPluginEvents::ConsoleCommandFn > ConsoleCommand
CallbackList< IPluginEvents::PlayerCommandFn > PlayerCommandDone
CallbackList< IPluginEvents::ClientDisconnectedFn > ClientDisconnected
CallbackList< IPluginEvents::ClientConnectedFn > ClientConnected
uint64_t SchemaLayoutStamp
zero until the host has checked its own layout
CallbackList< IPluginEvents::ServerStartupFn > ServerStartup