The one thing command dispatch needs a running server for.
virtual ~ArgBinder()=default
virtual std::expected< std::vector< Player * >, TargetFailure > Resolve(std::string_view token, Player *caller, const TargetRules &rules)=0
std::expected< std::vector< Player * >, TargetFailure > Resolve(std::string_view token, Player *caller, const TargetRules &rules) override
EngineArgBinder(PlayerManager &players, const Policy &policy, EntitySystem &entities)
runtime.Entities: finds and creates entities. Everything it returns is valid for this frame only; see...
The roster: every connected player, and the signals for the connection lifecycle.
One connected player, owned by PlayerManager for the length of the connection.
The one permission and targeting gate, plus the plugin's reply callback.
std::expected< std::vector< BoundArg >, ArgError > BindArgs(const CommandDefinition &def, std::span< const std::string > tokens, Player *caller, ArgBinder &binder)
static std::string ReadFile(const std::filesystem::path &path)
std::map< std::string, std::string > Tokens
A binding failure, as the key and tokens the reply is built from.
One command as the builder assembled it.