Использование sscanf
#1

Хотел перевести команды мода на более быстрые, с помощью zcmd+sscanf, но не хватает времени, ибо на перевод его нужно много, а я часто пишу обновления и получается нестыковка.

Придумал свое применение sscanf, хоть для какой-то оптимизации команд.

pawn Code:
else if(strcmp(cmd, "/warn", true) == 0)
    {
        if(PlayerInfo[playerid][pAdmin] < 2)return 1;
        if(dostup[playerid] != 1) return ShowPlayerDialog(playerid,2934,DIALOG_STYLE_INPUT,"Админ авторизация","Введите пароль\n\nПароль должен состоять из латинских букв и цифр\n размером от 6 до 15 символов","Ок","Отмена");
        strdel(cmdtext,0,5);
        new reason[65];
        if(sscanf(cmdtext,"us",giveplayerid,reason))return SendClientMessage(playerid,-1, "::: Введите: /warn [id] [причина]");
        if(giveplayerid == INVALID_PLAYER_ID || !IsPlayerConnected(giveplayerid))return SendClientMessage(playerid,COLOR_GRAD1,"Игрок не найден");
        if(PlayerInfo[giveplayerid][pWarns] < 0) PlayerInfo[giveplayerid][pWarns] = 0;
        PlayerInfo[giveplayerid][pWarns] += 1;
        PlayerInfo[giveplayerid][pRp] -= 10;
        PlayerInfo[giveplayerid][pMember] = 0;
        PlayerInfo[giveplayerid][pLeader] = 0;
        PlayerInfo[giveplayerid][pJob] = 0;
        if(PlayerInfo[giveplayerid][pWarns] >= 3)
        {
            new ip[16];
            GetPlayerIp(giveplayerid,ip,16);
            format(string, sizeof(string), "Администратор %s забанил %s [3 предупреждения]. Причина: %s ", sendername,Name(giveplayerid), reason);
            SendClientMessageToAll(COLOR_LIGHTRED, string);
            format(string, sizeof(string), "- Ник: [%s] IP: [%s]",Name(giveplayerid),ip);
            SendAdminMessage(COLOR_LIGHTRED,string);
            PlayerInfo[giveplayerid][pLocked] = 1;
            Kick(giveplayerid);
            return 1;
        }
        format(string, sizeof(string), "Администратор %s выдал Warn %s. Причина: %s", sendername, Name(giveplayerid), reason);
        SendClientMessageToAll(COLOR_LIGHTRED,string);
        SendClientMessage(giveplayerid, COLOR_LIGHTRED, "- Для снятия Warna подайте заявку в личном меню /mm - [8] Доступ к игре");
        Kick(giveplayerid);
        return 1;
    }
Что именно изменил в коммандах (пример):

strdel(cmdtext,0,5);
if(sscanf(cmdtext,"us",giveplayerid,reason))return SendClientMessage(playerid,-1, "::: Введите: /warn [id] [причина]");


Это заменяет большой участок кода который использован сейчас у меня. Собственно... я удаляю текст команды и пробел после нее из cmdtext, а потом из него же, через sscanf извлекаю параметры.

Хочу узнать, стоит ли так делать? И не будет ли от этого только хуже?
Спасибо
Reply


Messages In This Thread
Использование sscanf - by stabker - 28.08.2012, 21:59
Re: Использование sscanf - by eakwarp - 30.08.2012, 06:23
Re: Использование sscanf - by stabker - 30.08.2012, 09:08
Re: Использование sscanf - by eakwarp - 31.08.2012, 12:22
Re: Использование sscanf - by ZiGGi - 31.08.2012, 13:14

Forum Jump:


Users browsing this thread: 2 Guest(s)