PDA

Просмотр полной версии : [Вопрос] По командам



gangzone.ini
18.10.2014, 01:26
Почему команда сделана "/stats", но если ввожу любую букву через / , например: /123, /asdad и т.д
Показывает команду "/stats"
Код:

public OnPlayerCommandText(playerid, cmdtext[]){
new cmd[128];
if(strcmp(cmd, "/stats", true) == 0){
ShowPlayerDialog(playerid, 3, DIALOG_STYLE_LIST, "Главное меню", "{FFFFFF}1. Статистика", "Принять", "Отмена");
return true;}
//next cmd
return true;}

L0ndl3m
18.10.2014, 11:34
public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp(cmdtext, "/stats", true) == 0)
return ShowPlayerDialog(playerid, 3, DIALOG_STYLE_LIST, "Главное меню", "{FFFFFF}1. Статистика", "Принять", "Отмена");

return 0;
}

?

gangzone.ini
18.10.2014, 11:38
Не помогло

L0ndl3m
18.10.2014, 15:49
Только стандартный командный процессор используете?

gangzone.ini
18.10.2014, 18:54
Только стандартный командный процессор используете?
Ну да, весь же паблик скинула)

DeimoS
20.10.2014, 22:06
public OnPlayerCommandText(playerid, cmdtext[])
{
new cmd[128], idx;
cmd = strtok(cmdtext, idx);

if(strcmp(cmd, "/stats", true) == 0)
{
ShowPlayerDialog(playerid, 3, DIALOG_STYLE_LIST, "Главное меню", "{FFFFFF}1. Статистика", "Принять", "Отмена");
return true;
}
//next cmd
return true;
}

И вот strtock, если что

strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}

new offset = index;
new result[20];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}

Но тогда во всех командах придётся использовать именно его, а не sscanf или какой-либо другой разделитель аргументов

gangzone.ini
21.10.2014, 11:18
public OnPlayerCommandText(playerid, cmdtext[])
{
new cmd[128], idx;
cmd = strtok(cmdtext, idx);

if(strcmp(cmd, "/stats", true) == 0)
{
ShowPlayerDialog(playerid, 3, DIALOG_STYLE_LIST, "Главное меню", "{FFFFFF}1. Статистика", "Принять", "Отмена");
return true;
}
//next cmd
return true;
}

И вот strtock, если что

strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}

new offset = index;
new result[20];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}

Но тогда во всех командах придётся использовать именно его, а не sscanf или какой-либо другой разделитель аргументов

Спасибо)