-
По ssccanf и DC_CMD
Можете максимально оптимизировать эту команду.
Или дать советы по оптимизации.
И главный вопрос, как подстроить sscanf под динамичный параметр 1 (причина.)
То есть, если параметра 1 нет, то не выводить слово причина:
PHP код:
CMD:unjail(playerid, params[])
{
if(sscanf(params, "us[24]",params[0],params[1])) return SendClientMessage(playerid, 0xAFAFAFAA, "Используйте: /unjail [id игрока] ([Причина])");//Вот тут
if(strlen(params[1]) < 2)
{
static const fmt_string[] = "Администратор: %s выпустил из тюрьмы %s";
new string[sizeof(fmt_string)-2+MAX_PLAYER_NAME-2+MAX_PLAYER_NAME];
format(string, sizeof(string), fmt_string, PlayerInfo[playerid][pName], PlayerInfo[params[0]][pName]);
SendClientMessageToAll(0xFF6347AA, string);
}
else
{
static const fmt_string[] = "Администратор: %s выпустил из тюрьмы %s. Причина: %s";
const size0 = sizeof(fmt_string)-2+MAX_PLAYER_NAME-2+MAX_PLAYER_NAME-2+24;
#if size0 > 144
#define size 144
#else
#define size size0
#endif
new string[size];
#undef size
format(string, sizeof(string), fmt_string, PlayerInfo[playerid][pName], PlayerInfo[params[0]][pName], params[1]);
SendClientMessageToAll(0xFF6347AA, string);
}
PlayerInfo[params[0]][pPrison] = 0;
SpawnPlayer(params[0]);
return 1;
}
-
Ну для начала можно было не создавать константу, а прямо в квадратные скобки занести расчёты, которые будет производить компилятор.
Ещё можно было создать единственный массив. Для таких случаев можно было посчитать размер строки самому.
Далее можно вместо двух форматов, сделать один, использовав в аргументе функции тернарный оператор.
-
Хорошо, а как проблему с sscanf решить?
-
PHP код:
CMD:unjail(playerid, params[])
{
if(sscanf(params, "us[24]", params[0], params[1])) return SendClientMessage(playerid, 0xAFAFAFAA, "Используйте: /unjail [id игрока] ([Причина])");
new string[119];
if(!strlen(params[1]))
format(string, sizeof string, "Администратор: %s выпустил из тюрьмы %s", PlayerInfo[playerid][pName], PlayerInfo[params[0]][pName]);
else
format(string, sizeof string, "Администратор: %s выпустил из тюрьмы %s. Причина: %s", PlayerInfo[playerid][pName], PlayerInfo[params[0]][pName], params[1]);
SendClientMessageToAll(0xFF6347AA, string);
PlayerInfo[params[0]][pPrison] = 0;
SpawnPlayer(params[0]);
return 1;
}
Возможно, так будет работать)
-
Нет, т.к. sscanf будет постоянно требовать ввести параметр причины!