PDA

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



Mikiadier
07.09.2016, 23:38
if(strcmp(cmd, "/motd", true) == 0)
{
if(IsPlayerConnected(playerid)) return true;
if(PlayerInfo[playerid][pLeader] == 0) return SendClientMessage(playerid, COLOR_GREY, "Нет прав на использование команды.");
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[64];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
if(!strlen(result)) return SendClientMessage(playerid, COLOR_GREY, "Используйте: /motd [текст]");
strmid(MOTDINFO[PlayerInfo[playerid][pLeader]][mNews], result, 0, strlen(result), 255);
SendClientMessage(playerid,-1,"Вы установили новость для членов фракции.");
SaveMotd();
}

Кому не сложно переведите команду на DC_CMD, большое спасибо!

Saibot
07.09.2016, 23:48
CMD:motd(playerid, params[])
{
if(!PlayerInfo[playerid][pLeader])
return SendClientMessage(playerid, -1, !"Нет прав на использование команды.");

if(sscanf(params, "s[64]", params))
return SendClientMessage(playerid, -1, !"Используйте: /motd [текст]");

strins(MOTDINFO[PlayerInfo[playerid][pLeader]][mNews], params, 0);
SendClientMessage(playerid, -1, !"Вы установили новость для членов фракции.");
return SaveMotd();
}

ziggi
08.09.2016, 00:38
CMD:motd(playerid, params[])
{
new leader = PlayerInfo[playerid][pLeader];
if (leader == 0) {
SendClientMessage(playerid, COLOR_GREY, "Нет прав на использование команды.");
return 1;
}

if (isnull(params)) {
SendClientMessage(playerid, COLOR_GREY, "Используйте: /motd [текст]");
return 1;
}

MOTDINFO[leader][mNews][0] = '\0';
strcat(MOTDINFO[leader][mNews], params, 255);
SaveMotd();

SendClientMessage(playerid, -1, "Вы установили новость для членов фракции.");
return 1;
}

Saibot
08.09.2016, 01:56
if (strlen(params) == 0) {
SendClientMessage(playerid, COLOR_GREY, "Используйте: /motd [текст]");
return 1;
}
Тогда уже лучше использовать макрос isnull, он проверяет только первый символ на \0, а strlen проходит через весь массив.

Daniel_Cortez
08.09.2016, 06:03
Тогда уже лучше использовать макрос isnull, он проверяет только первый символ на \0, а strlen проходит через весь массив.
Не совсем верно. strlen просматривает массив только до тех пор, пока не найдёт '\0', а меньшая производительность, чем в isnull, выходит из-за того, что strlen - нативная функция.

ziggi
08.09.2016, 11:04
Тогда уже лучше использовать макрос isnull, он проверяет только первый символ на \0, а strlen проходит через весь массив.

Что-то эта функция из головы вылетела, обновил.

Skyline
08.09.2016, 12:52
А если добавить еще один аргумент, Ник игрока например. strcat уже не подойдет, что тогда подойдет?

CMD:motd(playerid, params[])
{
new leader = PlayerInfo[playerid][pLeader];
if (leader == 0) {
SendClientMessage(playerid, COLOR_GREY, "Нет прав на использование команды.");
return 1;
}
if (isnull(params)) {
SendClientMessage(playerid, COLOR_GREY, "Используйте: /motd [текст]");
return 1;
}
MOTDINFO[leader][mNews][0] = '\0';
strcat(PlayerInfo[playerid][pName],MOTDINFO[leader][mNews], params, 255); // Как ту поменять?
SaveMotd();
SendClientMessage(playerid, -1, "Вы установили новость для членов фракции.");
return 1;
}

ziggi
08.09.2016, 15:09
А если добавить еще один аргумент, Ник игрока например. strcat уже не подойдет, что тогда подойдет?

CMD:motd(playerid, params[])
{
new leader = PlayerInfo[playerid][pLeader];
if (leader == 0) {
SendClientMessage(playerid, COLOR_GREY, "Нет прав на использование команды.");
return 1;
}
if (isnull(params)) {
SendClientMessage(playerid, COLOR_GREY, "Используйте: /motd [текст]");
return 1;
}
MOTDINFO[leader][mNews][0] = '\0';
strcat(PlayerInfo[playerid][pName],MOTDINFO[leader][mNews], params, 255); // Как ту поменять?
SaveMotd();
SendClientMessage(playerid, -1, "Вы установили новость для членов фракции.");
return 1;
}


CMD:motd(playerid, params[])
{
new leader = PlayerInfo[playerid][pLeader];
if (leader == 0) {
SendClientMessage(playerid, COLOR_GREY, "Нет прав на использование команды.");
return 1;
}
if (isnull(params)) {
SendClientMessage(playerid, COLOR_GREY, "Используйте: /motd [текст]");
return 1;
}
format(MOTDINFO[leader][mNews], 255, "%s: %s", PlayerInfo[playerid][pName], params);
SaveMotd();
SendClientMessage(playerid, -1, "Вы установили новость для членов фракции.");
return 1;
}

Skyline
08.09.2016, 15:40
Пробовал, warning 213: tag mismatch.

ziggi
08.09.2016, 16:05
Пробовал, warning 213: tag mismatch.
Обновил