Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static void ProcessCommand(cell playerid, const char *cmdtext) {
- if (
- !cmdtext
- || cmdtext[0] != '/'
- ) {
- return;
- }
- _logprintf("1: ");
- char cmd[32]{};
- const char *params{};
- int i = 1;
- while (cmdtext[i] == ' ') {
- i++;
- } // remove extra spaces before cmd name
- params = &cmdtext[i];
- _logprintf("2: ");
- i = 0;
- char symbol{};
- while (
- (symbol = params[i])
- && symbol != ' '
- ) {
- if (i >= sizeof(cmd)) {
- return;
- }
- cmd[i++] = std::tolower(symbol, _locale);
- }
- _logprintf("3: ");
- while (params[i] == ' ') {
- i++;
- } // remove extra spaces before params
- _logprintf("4: ");
- params = ¶ms[i];
- CommandMap::const_iterator iter_cmd{};
- cell addr_cmdtext{}, addr_cmd_name{}, addr_params{}, retval{}, flags{};
- bool command_exists{};
- _logprintf("4: ");
- for (const auto &script : _scripts) {
- if (script.opct_addr) {
- amx_PushString(script.amx, &addr_cmdtext, nullptr, cmdtext, 0, 0);
- amx_Push(script.amx, playerid);
- ExecAmxPublic(script.amx, &retval, script.opct_addr);
- amx_Release(script.amx, addr_cmdtext);
- if (retval == 1) {
- break;
- }
- }
- if (command_exists = ((iter_cmd = script.cmds.find(cmd)) != script.cmds.end())) {
- flags = iter_cmd->second.flags;
- }
- if (script.opcr_addr) {
- amx_Push(script.amx, flags);
- amx_PushString(script.amx, &addr_params, nullptr, params, 0, 0);
- amx_PushString(script.amx, &addr_cmd_name, nullptr, cmd, 0, 0);
- amx_Push(script.amx, playerid);
- ExecAmxPublic(script.amx, &retval, script.opcr_addr);
- amx_Release(script.amx, addr_cmd_name);
- amx_Release(script.amx, addr_params);
- if (!retval) {
- continue;
- }
- }
- if (command_exists) {
- amx_PushString(script.amx, &addr_params, nullptr, params, 0, 0);
- amx_Push(script.amx, playerid);
- ExecAmxPublic(script.amx, &retval, iter_cmd->second.addr);
- amx_Release(script.amx, addr_params);
- } else {
- retval = -1;
- }
- if (script.opcp_addr) {
- amx_Push(script.amx, flags);
- amx_Push(script.amx, retval);
- amx_PushString(script.amx, &addr_params, nullptr, params, 0, 0);
- amx_PushString(script.amx, &addr_cmd_name, nullptr, cmd, 0, 0);
- amx_Push(script.amx, playerid);
- ExecAmxPublic(script.amx, &retval, script.opcp_addr);
- amx_Release(script.amx, addr_cmd_name);
- amx_Release(script.amx, addr_params);
- }
- if (retval == 1) {
- break;
- }
- }
- _logprintf("5: ");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement