#pragma once #include #include #include "Entity.h" class ChatCommandParameter; class ChatCommand : public Framework::ConsoleCommand { private: Framework::Text description; int securityLevel; Framework::RCArray params; public: ChatCommand( Framework::Text name, Framework::Text description, int securityLevel); protected: void addParam(ChatCommandParameter* param); public: virtual bool execute( Framework::RCArray& params, Entity* zActor) const = 0; bool execute(Framework::RCArray& params) const override; void addAutocompletePossibilities( const Framework::RCArray& args, bool appendToLast, Framework::RCArray& possibilities) const override; const Framework::RCArray& getParams() const; Framework::Text getHelp() const; virtual int getSecurityLevel( Framework::RCArray params) const; }; class ChatCommandParameter : public virtual Framework::ReferenceCounter { private: Framework::Text name; Framework::Text description; bool optional; public: ChatCommandParameter( Framework::Text name, Framework::Text description, bool optional); virtual bool isLegalValue(Framework::Text value) const; virtual Framework::Text getDefaultValue(Entity* zActor) const; Framework::Text getName() const; Framework::Text getDescription() const; bool isOptional() const; virtual Framework::RCArray getAutocompleteValues( const Framework::Text& current) const; }; class PlayerNameParameter : public ChatCommandParameter { public: PlayerNameParameter(); bool isLegalValue(Framework::Text value) const override; Framework::Text getDefaultValue(Entity* zActor) const override; Framework::RCArray getAutocompleteValues( const Framework::Text& current) const override; }; class IntegerParameter : public ChatCommandParameter { private: std::function calculateDefault; public: IntegerParameter(Framework::Text name, Framework::Text description, bool optional, std::function calculateDefault); bool isLegalValue(Framework::Text value) const override; Framework::Text getDefaultValue(Entity* zActor) const override; };