Если ввести команду и 1 пробел, то команда не сработает.
Можна ли как нибудь это исправить ?
(тестировал на шиндовс)
Вид для печати
Если ввести команду и 1 пробел, то команда не сработает.
Можна ли как нибудь это исправить ?
(тестировал на шиндовс)
Это не баг, а твой косяк в коде, ибо это и есть суть команды - она определяет конец команды там где и стоит пробел. Насчёт твоего кода:
Если после probel у тебя есть ещё параметры, придётся использовать sscanf либо примитивный strtok.PHP код:
CMD:cerez(playerid, params[])
{
if(!strcmp("probel", params, true))
{
//Тело команды /cerez probel
}
}
Это баг. Только что попробовал у себя ввести "/help " (с пробелом в конце) - не сработало. По идее ненужные пробелы в конце должны отбрасываться автоматически.
Спасибо, что сообщили, попробую исправить.
Когда исправишь? :)
Плагин обновлён до версии 2.7
Скачать его можно здесь: http://rghost.ru/53035948
Что нового:
- Исправлен баг, возникавший при загрузке/выгрузке фильтрскриптов.
- Исправлена обработка пробелов в конце команд.
- Добавлена проверка соответствия версии плагина и инклуда. Теперь не получится использовать новую версию плагина со старой версией инклуда и наоборот.
- Убрана необходимость использования #define FILTERSCRIPT в каждом фильтрскрипте.
Fun fact: Файл dc_cmd.inc может быть использован как в Pawn, так и в C++ для компиляции плагина (в него были вынесены некоторые общие константы).
1-й пост обновлён.
А в инклюде 2013 на 2014 не исправлен))
DC_CMD v2.8 (20th anniversary edition): http://rghost.ru/53289178
- В инклуде (.inc) исправлен копирайт с 2013 на 2014 год (imma slowpoke -_-).
- Добавлены функции RenameCmd и RemoveCmd для диманического переименования и удаления команд.
Примеры использования:
PHP код:
RenameCmd("/help", "/menu"); // команда /help будет переименована в /menu
PHP код:
RemoveCmd("/makeadmin"); // команда /makeadmin будет удалена и больше не будет работать
Процессор хороший. Всё работает стабильно, но поможете ли вы мне решить пару проблем?
1)
Если я сокращаю строки у команды, то мод при компиляции начинает виснуть.
Пример:
2)PHP код:
CMD:stats(playerid, params[]) return ShowStats(playerid); - ВИСНЕТ
CMD:stats(playerid, params[]) - СТАБИЛЬНО
{
return ShowStats(playerid);
}
Если написать к примеру /dance 3, то он всё равно воспроизводит /dance 1.
PHP код:
CMD:dance(playerid, params[])
{
if(sscanf(params, "i", params[0])) return Message(playerid, COLOR_GREEN,"/dance [1-3]");
else if(strcmp(params[0],"1",true)) SetPlayerSpecialAction(playerid,SPECIAL_ACTION_DANCE1);
else if(strcmp(params[0],"2",true)) SetPlayerSpecialAction(playerid,SPECIAL_ACTION_DANCE2);
else if(strcmp(params[0],"3",true)) SetPlayerSpecialAction(playerid,SPECIAL_ACTION_DANCE3);
return true;
}
Странно не качает плагин(
Потому что у вас лишний "else if". После "if(sscanf" должен стоять просто "if", ибо иначе сработает только первое условие (sscanf), а остальные будут пропущены. Да и strcmp тут неуместен, ибо в "params[0]" хранится число, а не строка
Ну вот так, по моему, удобнее будет
PHP код:
CMD:dance(playerid, params[])
{
if(sscanf(params, "i", params[0])) return Message(playerid, COLOR_GREEN,"/dance [1-3]");
switch(strval(params[0]))
{
case 1: SetPlayerSpecialAction(playerid,SPECIAL_ACTION_DANCE1);
case 2: SetPlayerSpecialAction(playerid,SPECIAL_ACTION_DANCE2);
case 3: SetPlayerSpecialAction(playerid,SPECIAL_ACTION_DANCE3);
default: return Message(playerid, COLOR_GREEN,"/dance [1-3]");
}
return true;
}
Спасибо за помощь.
Уважаемый, установите нормальный антивирус и не оставляйте здесь глупых постов.
Что лучше? DC_CMD или LIFE:CMD? Мне говорит Kazon что лучше его процессор.
В плане скорости - в 1-м посте есть тест, DC_CMD обгоняет LIFE:CMD в 3 раза при командах без параметов и в 5 с лишним раз при командах с параметрами. По возможностям DC_CMD тоже в выигрыше: функции OnPlayerCommandReceived и OnPlayerCommandPerformed, упрощённое создание альт. команд, команды с русскими именами, изменение уже существующих команд во время работы сервера - у многих командных процессоров нет ни одного из этих преимуществ и LIFE:CMD тому не исключение.
Исправил бы он лучше свои баги -_-
Я сначала вообще не хотел добавлять в тест скорости его командный процессор, т.к. он даже не умеет адекватно обрабатывать ни команды, ни параметры. "/help" и "/HELP" для него - совершенно разные команды. Да и отсеивания лишних пробелов в начале и в конце параметров тоже нет.
А что самое интересное, если использовать команды на этом процессоре в фильтрскипте, в моде команды работать не будут.
Если же Kazon исправит все эти баги, его плагин будет работать, как минимум, ещё в 1,5-2 раза медленнее.
Касаемо инклуда с тем же названием, он работает всего в 1,2 раза быстрее, чем ZCMD.
Скриншот тестов Kazon'а:
Для сравнения: DC_CMD обгоняет ZCMD почти в 10 раз. Если же к командам в тесте добавить параметры, приблизив тест к реальным условиям, разрыв во времени только увеличится.
[sarcasm]Конечно же, LIFE:CMD лучше! Как инклуд, так и плагин.[/sarcasm]
Подскажите пожалуйста почему при подключении этого плагина не работают команды такого типа какPHP код:
else if(strcmp(cmd,"/members",true)==0)
Просто убрать из инклудов y_commands...
Не подскажите как сделать так, чтобы команда вызывалась на клавишу.
К примеру на команде:
PHP код:
CMD:menu(playerid, params[])
{
return SendClientMessage(playerid, 0xFFFFFFAA, "Вы вызвали меню.");
}
В версии 2.02 был добавлен макрос "cmd::", благодаря которому можно удобно вызывать команды из любого места в моде.
Пример использования:
PHP код:
// без параметров
cmd::help(playerid, "");
// с параметрами
new param_str[11]; // размер строки зависит от параметров
format(param_str, sizeof(param_str), "%d", targetid);
cmd::invite(playerid, param_str);
Если создать переменную new bool:player_is_logged[MAX_PLAYERS char]; и сделать так:
То в логе выдаёт:PHP код:
public OnPlayerCommandPerformed(playerid, cmdtext[], success)
{
if(player_is_logged{playerid} == false) return MSG_NOLOGIN(playerid);
return true;
}
4642 - строка if(player_is_logged{playerid} == false) return MSG_NOLOGIN(playerid); в паблике.PHP код:
[22:37:11] [debug] Run time error 6: "Invalid instruction"
[22:37:11] [debug] Unknown opcode 0x0 at address 0x00000108
[22:37:11] [debug] AMX backtrace:
[22:37:11] [debug] #0 ???????? in public cmd_saveall ()
[22:37:11] [debug] #1 native DC_CMD () [021a1310] from dc_cmd.DLL
[22:37:11] [debug] #2 ???????? in public OnPlayerCommandText ()
[22:37:11] [debug] Run time error 4: "Array index out of bounds"
[22:37:11] [debug] Accessing element at index 134217729 past array upper bound 99
[22:37:11] [debug] AMX backtrace:
[22:37:11] [debug] #0 0007e140 in public OnPlayerCommandPerformed (playerid=134217729, cmdtext[]=@0x000fdeb4 "/saveall", success=296) at C:\MyFiles\ProjectPAWN\my mod\gamemodes\StateLS.pwn:4642
[22:37:11] [debug] #1 native DC_CMD () [021a1310] from dc_cmd.DLL
[22:37:11] [debug] #2 00000108 in public OnPlayerCommandText () at C:\MyFiles\ProjectPAWN\my mod\pawno\include\float.inc:121
Если же создавать переменную так - new player_is_logged[MAX_PLAYERS char]; - и использовать в паблике if(player_is_logged{playerid} == 0) return MSG_NOLOGIN(playerid);, то ошибки не выдаёт.
Команда /saveall:
PHP код:
CMD:saveall(playerid)
{
if(PlayerInfo[playerid][pAdmin] < 5) return MSG_NOADMIN(playerid);
foreach(new i: Player)
{
if(IsPlayerNPC(i) || player_is_logged{i} == 0) continue;
SavePlayer(i);
}
for(new biz = 1; biz <= TOTALBIZ; biz++)
{
SaveBiz(biz);
}
return true;
}
На 8.1 винде не хочет запускаться.Установил весь софт, который сказан в теме, все равно.(это последняя версия 2.8)PHP код:
[06:46:27] [debug] Run time error 19: "File or function is not found"
[06:46:27] [debug] DC_CMD
[06:46:27] [debug] DC_CMD_Init
[06:46:27] [debug] Run time error 19: "File or function is not found"
[06:46:27] [debug] DC_CMD
[06:46:27] [debug] DC_CMD_Init
[06:46:27] Script[gamemodes/SCRP.amx]: Run time error 19: "File or function is not found"
У меня работает на 8.1.