PDA

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



Kevin_Patterson
10.06.2014, 17:53
Здравствуйте, вот решил написать кое-какую сис-му и столкнулся с проблемой.
Я использую DC_CMD+SSCANF, но возникла такая проблема.
У меня команда так сказать многоуровневая, приведу в пример систему жучков для FBI, выложенную здесь очень давно...

CMD:tipster(playerid, params[])
{
if(sscanf(params, "s[12]", params[0])) return SendClientMessage(playerid, -1, "Введите: /tipster [действие]"), SendClientMessage(playerid, COLOR_WHITE, " /tipster get - Взять жучок."), SendClientMessage(playerid, COLOR_WHITE, " /tipsterset - Прикрепить жучок к игроку."), SendClientMessage(playerid, COLOR_WHITE, " /tipster remove - Деактивировать жучок."), SendClientMessage(playerid, COLOR_WHITE, " /tipster listen - Начать прослушивание чата фракции.");
if(strcmp(params[0], "get",true) == 0)
{
if(PlayerInfo[playerid][pRang] < 6 && PlayerInfo[playerid][pMember] != TEAM_FBI) return SendClientMessage(playerid, -1,"Вам недоступна данная функция!");
if(vehicle >= FBICARS[0] && vehicle <= FBICARS[1]) {}
else return SendClientMessage(playerid,COLOR_GREY,"Вы должны находиться в автомобиле FBI");
if(tipsterq[playerid]) return SendClientMessage(playerid, -1,"У вас уже есть жучок!");
tipsterq[playerid] = 1;
SendClientMessage(playerid,COLOR_LIGHTGREEN, "Вы взяли жучок! Используйте /tipster SET [id].");
format(nsa, 80,"%s взял жучок из автомобиля", Name(playerid));
ProxDetector(5.0, playerid, nsa, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
}
else if(strcmp(params[0], "set",true) == 0)
{
if(PlayerInfo[playerid][pRang] < 6 && PlayerInfo[playerid][pMember] != TEAM_FBI) return SendClientMessage(playerid, -1,"Вам недоступна данная функция!");
if(!tipsterq[playerid]) return SendClientMessage(playerid, -1,"У вас нет жучка!");
if(!ProxDetectorS(2.0, playerid, params[1])) return SendClientMessage(playerid, -1,"Игрок далеко от вас!");
if(tipsterw != -1) return SendClientMessage(playerid, COLOR_LIGHTGREEN, "Жучок уже прикреплен! Используйте /tipster REMOVE");
if(!PlayerInfo[params[1]][pMember]) return SendClientMessage(playerid, -1,"Игрок не состоит в организации!");
tipsterq[playerid] = 0;
tipsterw = PlayerInfo[params[1]][pMember];
tipstere = params[1];
format(nsa, 144,"%s прикрепил жучок к игроку %s. Используйте /tipster LISTEN для прослушивания", Name(playerid),Name(params[1]));
SFM(2, COLOR_LIGHTRED, nsa);
SendClientMessage(playerid, COLOR_LIGHTGREEN,"Вы прикрепили жучок к игроку! Используйте /tipster LISTEN");
}
else if(strcmp(params[0], "listen",true) == 0)
{
if(tipsterw == -1) return SendClientMessage(playerid, -1, "Жучок не прикреплен!");
if(!tipsterl[playerid])
{
tipsterl[playerid] = 1;
SendClientMessage(playerid, COLOR_LIGHTGREEN, "Вы включили прослушивание!");
}
else
{
tipsterl[playerid] = 0;
SendClientMessage(playerid, COLOR_LIGHTGREEN, "Вы отключили прослушивание!");
}
}
else if(strcmp(params[0], "remove",true) == 0)
{
if(PlayerInfo[playerid][pRang] < 6 && PlayerInfo[playerid][pMember] != TEAM_FBI) return SendClientMessage(playerid, -1, "Вам недоступна данная функция!");
if(tipsterw == -1) return SendClientMessage(playerid, -1, "Жучок не прикреплен!");
tipsterw = -1;
tipstere = -1;
SendClientMessage(playerid, COLOR_LIGHTGREEN, "Вы отключили жучок!");
}
return 1;
}

Дак вот..Меня интересует часть с

else if(strcmp(params[0], "set",true) == 0)
{
if(PlayerInfo[playerid][pRang] < 6 && PlayerInfo[playerid][pMember] != TEAM_FBI) return SendClientMessage(playerid, -1,"Вам недоступна данная функция!");
if(!tipsterq[playerid]) return SendClientMessage(playerid, -1,"У вас нет жучка!");
if(!ProxDetectorS(2.0, playerid, params[1])) return SendClientMessage(playerid, -1,"Игрок далеко от вас!");
if(tipsterw != -1) return SendClientMessage(playerid, COLOR_LIGHTGREEN, "Жучок уже прикреплен! Используйте /tipster REMOVE");
if(!PlayerInfo[params[1]][pMember]) return SendClientMessage(playerid, -1,"Игрок не состоит в организации!");
tipsterq[playerid] = 0;
tipsterw = PlayerInfo[params[1]][pMember];
tipstere = params[1];
format(nsa, 144,"%s прикрепил жучок к игроку %s. Используйте /tipster LISTEN для прослушивания", Name(playerid),Name(params[1]));
SFM(2, COLOR_LIGHTRED, nsa);
SendClientMessage(playerid, COLOR_LIGHTGREEN,"Вы прикрепили жучок к игроку! Используйте /tipster LISTEN");
}
Команда по идеи должна прописываться так: /tipster set id
Но как это реализовать?
Пытался так:

else if(strcmp(params[0], "set",true) == 0)
{
if(sscanf(params, "u", params[0])) return SendClientMessage(playerid, -1, "Введите: /tipster set [id]");
if(PlayerInfo[playerid][pRang] < 6 && PlayerInfo[playerid][pMember] != TEAM_FBI) return SendClientMessage(playerid, -1,"Вам недоступна данная функция!");
if(!tipsterq[playerid]) return SendClientMessage(playerid, -1,"У вас нет жучка!");
if(!ProxDetectorS(2.0, playerid, params[1])) return SendClientMessage(playerid, -1,"Игрок далеко от вас!");
if(tipsterw != -1) return SendClientMessage(playerid, COLOR_LIGHTGREEN, "Жучок уже прикреплен! Используйте /tipster REMOVE");
if(!PlayerInfo[params[1]][pMember]) return SendClientMessage(playerid, -1,"Игрок не состоит в организации!");
tipsterq[playerid] = 0;
tipsterw = PlayerInfo[params[1]][pMember];
tipstere = params[1];
format(nsa, 144,"%s прикрепил жучок к игроку %s. Используйте /tipster LISTEN для прослушивания", Name(playerid),Name(params[1]));
SFM(2, COLOR_LIGHTRED, nsa);
SendClientMessage(playerid, COLOR_LIGHTGREEN,"Вы прикрепили жучок к игроку! Используйте /tipster LISTEN");
}
Но безысходно...Надеюсь на вашу помощь, заранее спасибо!

DeimoS
10.06.2014, 19:02
Как-то так

CMD:tipster(playerid, params[])
{
new action[13], id;
sscanf(params, "s[12]u", action, id);
if(!strlen(action)) return SendClientMessage(playerid, -1, "Введите: /tipster [действие]"),
SendClientMessage(playerid, COLOR_WHITE, "/tipster get - Взять жучок."),
SendClientMessage(playerid, COLOR_WHITE, "/tipster set - Прикрепить жучок к игроку."),
SendClientMessage(playerid, COLOR_WHITE, "/tipster remove - Деактивировать жучок."),
SendClientMessage(playerid, COLOR_WHITE, "/tipster listen - Начать прослушивание чата фракции.");
if(strcmp(action, "get",true) == 0)
{
if(PlayerInfo[playerid][pRang] < 6 && PlayerInfo[playerid][pMember] != TEAM_FBI) return SendClientMessage(playerid, -1,"Вам недоступна данная функция!");
if(!(vehicle >= FBICARS[0] && vehicle <= FBICARS[1])) return SendClientMessage(playerid,COLOR_GREY,"Вы должны находиться в автомобиле FBI");
if(tipsterq[playerid]) return SendClientMessage(playerid, -1,"У вас уже есть жучок!");
tipsterq[playerid] = 1;
SendClientMessage(playerid,COLOR_LIGHTGREEN, "Вы взяли жучок! Используйте /tipster SET [id].");
format(nsa, 80,"%s взял жучок из автомобиля", Name(playerid));
ProxDetector(5.0, playerid, nsa, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
}
else if(strcmp(action, "set",true) == 0)
{
if(PlayerInfo[playerid][pRang] < 6 && PlayerInfo[playerid][pMember] != TEAM_FBI) return SendClientMessage(playerid, -1,"Вам недоступна данная функция!");
if(!tipsterq[playerid]) return SendClientMessage(playerid, -1,"У вас нет жучка!");
if(!ProxDetectorS(2.0, playerid, id)) return SendClientMessage(playerid, -1,"Игрок далеко от вас!");
if(tipsterw != -1) return SendClientMessage(playerid, COLOR_LIGHTGREEN, "Жучок уже прикреплен! Используйте /tipster REMOVE");
if(!PlayerInfo[id][pMember]) return SendClientMessage(playerid, -1,"Игрок не состоит в организации!");
tipsterq[playerid] = 0;
tipsterw = PlayerInfo[id][pMember];
tipstere = id;
format(nsa, 144,"%s прикрепил жучок к игроку %s. Используйте /tipster LISTEN для прослушивания", Name(playerid),Name(id));
SFM(2, COLOR_LIGHTRED, nsa);
SendClientMessage(playerid, COLOR_LIGHTGREEN,"Вы прикрепили жучок к игроку! Используйте /tipster LISTEN");
}
else if(strcmp(action, "listen",true) == 0)
{
if(tipsterw == -1) return SendClientMessage(playerid, -1, "Жучок не прикреплен!");
if(!tipsterl[playerid])
{
tipsterl[playerid] = 1;
SendClientMessage(playerid, COLOR_LIGHTGREEN, "Вы включили прослушивание!");
}
else
{
tipsterl[playerid] = 0;
SendClientMessage(playerid, COLOR_LIGHTGREEN, "Вы отключили прослушивание!");
}
}
else if(strcmp(action, "remove",true) == 0)
{
if(PlayerInfo[playerid][pRang] < 6 && PlayerInfo[playerid][pMember] != TEAM_FBI) return SendClientMessage(playerid, -1, "Вам недоступна данная функция!");
if(tipsterw == -1) return SendClientMessage(playerid, -1, "Жучок не прикреплен!");
tipsterw = -1;
tipstere = -1;
SendClientMessage(playerid, COLOR_LIGHTGREEN, "Вы отключили жучок!");
}
return 1;
}

Flime
11.06.2014, 17:01
CMD:tipster(playerid, params[])
{
new id;
if(isnull(params)) return return SendClientMessage(playerid, -1, "Введите: /tipster [действие]"),
SendClientMessage(playerid, COLOR_WHITE, "/tipster get - Взять жучок."),
SendClientMessage(playerid, COLOR_WHITE, "/tipster set - Прикрепить жучок к игроку."),
SendClientMessage(playerid, COLOR_WHITE, "/tipster remove - Деактивировать жучок."),
SendClientMessage(playerid, COLOR_WHITE, "/tipster listen - Начать прослушивание чата фракции.");
if(strcmp(params, "get",true) == 0)
{
if(PlayerInfo[playerid][pRang] < 6 && PlayerInfo[playerid][pMember] != TEAM_FBI) return SendClientMessage(playerid, -1,"Вам недоступна данная функция!");
if(!(vehicle >= FBICARS[0] && vehicle <= FBICARS[1])) return SendClientMessage(playerid,COLOR_GREY,"Вы должны находиться в автомобиле FBI");
if(tipsterq[playerid]) return SendClientMessage(playerid, -1,"У вас уже есть жучок!");
tipsterq[playerid] = 1;
SendClientMessage(playerid,COLOR_LIGHTGREEN, "Вы взяли жучок! Используйте /tipster SET [id].");
format(nsa, 80,"%s взял жучок из автомобиля", Name(playerid));
ProxDetector(5.0, playerid, nsa, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
}
else if(params(action, "set",true) == 0)
{
if(PlayerInfo[playerid][pRang] < 6 && PlayerInfo[playerid][pMember] != TEAM_FBI) return SendClientMessage(playerid, -1,"Вам недоступна данная функция!");
if(!tipsterq[playerid]) return SendClientMessage(playerid, -1,"У вас нет жучка!");
if(!ProxDetectorS(2.0, playerid, id)) return SendClientMessage(playerid, -1,"Игрок далеко от вас!");
if(tipsterw != -1) return SendClientMessage(playerid, COLOR_LIGHTGREEN, "Жучок уже прикреплен! Используйте /tipster REMOVE");
if(!PlayerInfo[id][pMember]) return SendClientMessage(playerid, -1,"Игрок не состоит в организации!");
tipsterq[playerid] = 0;
tipsterw = PlayerInfo[id][pMember];
tipstere = id;
format(nsa, 144,"%s прикрепил жучок к игроку %s. Используйте /tipster LISTEN для прослушивания", Name(playerid),Name(id));
SFM(2, COLOR_LIGHTRED, nsa);
SendClientMessage(playerid, COLOR_LIGHTGREEN,"Вы прикрепили жучок к игроку! Используйте /tipster LISTEN");
}
else if(strcmp(params, "listen",true) == 0)
{
if(tipsterw == -1) return SendClientMessage(playerid, -1, "Жучок не прикреплен!");
if(!tipsterl[playerid])
{
tipsterl[playerid] = 1;
SendClientMessage(playerid, COLOR_LIGHTGREEN, "Вы включили прослушивание!");
}
else
{
tipsterl[playerid] = 0;
SendClientMessage(playerid, COLOR_LIGHTGREEN, "Вы отключили прослушивание!");
}
}
else if(strcmp(params, "remove",true) == 0)
{
if(PlayerInfo[playerid][pRang] < 6 && PlayerInfo[playerid][pMember] != TEAM_FBI) return SendClientMessage(playerid, -1, "Вам недоступна данная функция!");
if(tipsterw == -1) return SendClientMessage(playerid, -1, "Жучок не прикреплен!");
tipsterw = -1;
tipstere = -1;
SendClientMessage(playerid, COLOR_LIGHTGREEN, "Вы отключили жучок!");
}
else return SendClientMessage(playerid, COLOR_LIGHTGREEN, "Данного действия нет!");
return 1;
}