Я действительно открыл это на обсуждение, мне надоело вводить DCMD (CMD, размер, cmdtext), то необходимости выделите бог знает где, чтобы сделать новую функцию. Так что я решил вернуться к старому методу параметров в OnPlayerCommandText.
strtok, вы думаете? вещи, которые вне данных мусора! требует sscanf но я просто предпочитаю решений команды обратного вызова, а не отдельные функции для каждого [другие люди могут предпочесть другому, это только мое мнение]
Так или иначе, я потом надоело письменной форме, если (! STRCMP (cmdtext, команда)) так сделал макрос сделать это для меня
В основном это просто распадается cmdtext как только обратного вызова называется, и помещает его в двух массивах ['Cmd "+" параметры "] Оба из которых являются размера надлежащим основан на том, что я знаю, это мой крупнейших команды и наибольшее количество параметров [да я знаю, что мой сценарий достаточно хорошо]
Во всяком случае код:
Один определить для, если заявление, и я сделал еще один для тех, кто, как и их команд в функции:
Code
#define cmd(%1) if((!strcmp(cmd,%1,true,strlen(%1)))&&(cmd[strlen(%1)+1]==EOS)) // the normal command method, inside OnPlayerCommandText #define pCmd(%1,%2) if(!strcmp(cmd[1],#%1,true,%2)&&cmd[%2+1]==EOS)return cmd_%1(playerid,params) // dcmd style, don't know if it's faster or whatever, doesn't seem to make a difference in game, I just find it easier to script [BAD HABIT I KNOW! :(]
В любом случае, там должно быть некоторые вещи в обратный вызов, потому что иначе WTF является "CMD [] 'и' Params []
Code
public OnPlayerCommandText(playerid, cmdtext[]) { // I wish I could do 'new cmd[ strlen(cmdtext) ]' or something, but oh well lol new cmd[17], params[32]; // Change these based on how big your commands/params are etc. sscanf(cmdtext, "s[17]s[32]", cmd, params); // splits it at the first space
И, конечно, как я использую это
Code
cmd("/own") { new id = strval(params); SendClientMessage(id, 0xFF0000FF, "You just got Owned! :D"); return 1; }
Вероятно, может письменного простой код, чтобы сделать расщепления [sscanf немного ненужной Я полагаю, для этого, нужно только один пробел в качестве разделителя] Кроме того, я мог бы добавить проверить так, если это не параметры команды, нет необходимости для расщепления, следовательно, быстрее ... но ... ЦБ .. -_-
Во всяком случае, это мой метод, я сделал это сам [как правило, не используют другие народы работы сейчас, не знаю, почему я просто хотел бы гордиться, когда я сделать мои собственные вещи]
Открыть для "Код захвата" и обсуждение: P Источник:sa-mp.com