#pragma once
#include <string>
#include <map>
namespace SAMPGDK
{
namespace ZCMD
{
class Command
{
public:
virtual bool do_command(int playerid, std::string params) = 0;
};
namespace Internal
{
void register_command(Command* cmd, std::string name);
extern std::map<std::string, Command*> command_map;
};
};
};
//VS and clang have a mangled name limit of 2048 chars, g++ "unlimited" (well, limited by memory).
#define ZERO_COMMAND(name) \
class cmd ## name : public SAMPGDK::ZCMD::Command\
{\
public:\
cmd ## name() { SAMPGDK::ZCMD::Internal::register_command(this, "/"#name); }\
bool do_command(int playerid, std::string params);\
};\
inline bool cmd ## name::do_command(int playerid, std::string params)
bool OnPlayerCommandReceived(int playerid,std::string command, std::string params);
void OnPlayerCommandExecuted(int playerid, std::string, std::string params, bool success);
//note that the 'command' is always in lower-case because of the transformation done in the main processing step
bool OnUnknownCommand(int playerid, std::string command, std::string params);
I3ByYWdtYSBvbmNlCgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8bWFwPgoKbmFtZXNwYWNlIFNBTVBHREsKewogICAgbmFtZXNwYWNlIFpDTUQKCXsKCQljbGFzcyBDb21tYW5kCgkJewoJCXB1YmxpYzoKCQkgICB2aXJ0dWFsIGJvb2wgZG9fY29tbWFuZChpbnQgcGxheWVyaWQsIHN0ZDo6c3RyaW5nIHBhcmFtcykgPSAwOwoJCX07CgkJbmFtZXNwYWNlIEludGVybmFsCgkJewoJCQl2b2lkIHJlZ2lzdGVyX2NvbW1hbmQoQ29tbWFuZCogY21kLCBzdGQ6OnN0cmluZyBuYW1lKTsKCQkJZXh0ZXJuIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBDb21tYW5kKj4gY29tbWFuZF9tYXA7CgkJfTsKCX07Cn07CgovL1ZTIGFuZCBjbGFuZyBoYXZlIGEgbWFuZ2xlZCBuYW1lIGxpbWl0IG9mIDIwNDggY2hhcnMsIGcrKyAidW5saW1pdGVkIiAod2VsbCwgbGltaXRlZCBieSBtZW1vcnkpLgojZGVmaW5lIFpFUk9fQ09NTUFORChuYW1lKSBcCmNsYXNzIGNtZCAjIyBuYW1lIDogcHVibGljIFNBTVBHREs6OlpDTUQ6OkNvbW1hbmRcCgl7XAoJCXB1YmxpYzpcCgkJY21kICMjIG5hbWUoKSB7IFNBTVBHREs6OlpDTUQ6OkludGVybmFsOjpyZWdpc3Rlcl9jb21tYW5kKHRoaXMsICIvIiNuYW1lKTsgfVwKCQlib29sIGRvX2NvbW1hbmQoaW50IHBsYXllcmlkLCBzdGQ6OnN0cmluZyBwYXJhbXMpO1wKCX07XAoJaW5saW5lIGJvb2wgY21kICMjIG5hbWU6OmRvX2NvbW1hbmQoaW50IHBsYXllcmlkLCBzdGQ6OnN0cmluZyBwYXJhbXMpCgpib29sIE9uUGxheWVyQ29tbWFuZFJlY2VpdmVkKGludCBwbGF5ZXJpZCxzdGQ6OnN0cmluZyBjb21tYW5kLCBzdGQ6OnN0cmluZyBwYXJhbXMpOwp2b2lkIE9uUGxheWVyQ29tbWFuZEV4ZWN1dGVkKGludCBwbGF5ZXJpZCwgc3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nIHBhcmFtcywgYm9vbCBzdWNjZXNzKTsKCi8vbm90ZSB0aGF0IHRoZSAnY29tbWFuZCcgaXMgYWx3YXlzIGluIGxvd2VyLWNhc2UgYmVjYXVzZSBvZiB0aGUgdHJhbnNmb3JtYXRpb24gZG9uZSBpbiB0aGUgbWFpbiBwcm9jZXNzaW5nIHN0ZXAKYm9vbCBPblVua25vd25Db21tYW5kKGludCBwbGF5ZXJpZCwgc3RkOjpzdHJpbmcgY29tbWFuZCwgc3RkOjpzdHJpbmcgcGFyYW1zKTs=