• Страница 1 из 1
  • 1
Модератор форума: valych  
[Tutorial]по использованию sscanf с zcmd
26_RUSSSДата: Среда, 10.11.2010, 05:01 | Сообщение # 1
.::Offline::.
Вор в законе
Сообщений: 73
[ 10 ]
Награды: 13

Статус отсутствует
И так начнем урок что нам нужно
2 инклуда sscanf и zcmd
ZCMD:
Pastebin
SSCANF:
Pastebin

И так научимся делать команды с одним параметром
Например :/skin [id]
Эта команда даст нам скин который мы введем

Code

        COMMAND:skin(playerid, params[]){//команды надо вводить без "/"
            new skinid;//переменая куда занесется значение которое введет игрок
            if(sscanf(params,"d", skinid))//занесем значение которе ввел игрок в переменую skinid
            return SendClientMessage(playerid, 0xFF0000AA, "Используй: /buyskin [id]");//если игрок не ввел значение то выдаем собщение
            SetPlayerSkin(playerid,skinid);//меняем игроку скин на который он выбрал
            return 1;}

Давайте попробуем сделать команду с 2-мя параметрами
например /money [id] [ammount]

Code

        COMMAND:money(playerid, params[]){
            new playa,cash;//playa(будет хранить ид игрока) а cash(количество денег)
            if(sscanf(params,"ud",playa,cash))//занесем первый параметр в playa а второй в cash
            return SendClientMessage(playerid, 0xFF0000AA, "Используй: /money [id] [ammount]");
            GivePlayerMoney(playa,cash);//даем денег игроку
            return 1;}

Теперь сделаем команду с тремя параметрами
например /car [id] [color1] [color2]
Code

        COMMAND:car(playerid, params[]){
            new id,color1,color2;//переменные
            if(sscanf(params,"ddd",id,color1,color2))//ну это понятно
            return SendClientMessage(playerid, 0xFF0000AA, "Используй: /veh [id] [color1] [color2]");
            new Float:pos[4];//перемные куда занесем кординаты игрокаи его угол поворота
            GetPlayerPos(playerid,pos[0],pos[1],pos[2]);//узнаем кординаты игрока
            GetPlayerFacingAngle(playerid,pos[3]);//узнаем угол поворота игрока
            CreateVehicle(id,pos[0],pos[1],pos[2],pos[3],color1,color2,600000);
             //создаем машину с id(который ввел игрок) на тех кординатах где он стоит
             //с цветами которыми ввел игрок
            return 1;}

Теперь отличие от стандартной команды и strtok

Code

        if(strcmp(cmd, "/veh", true) == 0){
            tmp = strtok(cmdtext, idx);
            if(!strlen(tmp))
            return    SendClientMessage(playerid, COLOR_GRAD2, "USAGE: /veh [id]  [color1] [color2]");
            new id = strval(tmp);
            tmp = strtok(cmdtext, idx);
            if(!strlen(tmp))
            return    SendClientMessage(playerid, COLOR_GRAD2, "USAGE: /veh [id]  [color1] [color2]");
            new col1 = strval(tmp);
            tmp = strtok(cmdtext, idx);
            if(!strlen(tmp))
            return    SendClientMessage(playerid, COLOR_GRAD2, "USAGE: /veh [id]  [color1] [color2]");
            new col2 = strval(tmp);
            new Float:X,Float:Y,Float:Z,Float:A;
            GetPlayerFacingAngle(playerid, A);
            GetPlayerPos(playerid,X,Y,Z);
            CreateVehicle(id,X,Y,Z,A,col1,col2,60000);
            return 1;}

Теперь создадим команду не с числовым значением а буквеным
например /name [имя]
меняет имя игроку на введеное им
Code

        COMMAND:name(playerid, params[]){
            new name[34],string[256];//пеменая name которая будет хранить имя
            if(sscanf(params,"s",name))return SendClientMessage(playerid, 0xFF0000AA, "Используй: /name [имя]");
            format(string,sizeof(string),"%s",name);//форматируем name
            SetPlayerName(playerid,string);//ставим ворматированое имя
            return 1;}

Теперь создадим команду и с числовым и с буквеным
например /pm [id игрока] [сообщение]
Code

        COMMAND:pm(playerid, params[]){
            new string[256],message[256],id;//перменая message хранит собщение а id ид игрока
            if(sscanf(params,"us",id,message))return SendClientMessage(playerid, 0xFF0000AA, "Используй: /pm [id] [message]");
            format(string, sizeof(string), "ПМ к %s: %s", GN(id),message);
            //форматируем собщенние GN(id)(узнаем ник получателя),message(собщение которое ввел игрок)
            SendClientMessage(playerid, 0xFF0000FF, string);//отпровляем собщение себе=)
            format(string, sizeof(string), "ПМ от %s: %s", GN(playerid),message);
             //форматируем собщенние GN(playerid)(узнаем ник отправителя),message(собщение которое ввел игрок)
             SendClientMessage(id, 0xFF0000FF, string);//отпровляем форматированое сообщение получателю=)
            return 1;}

Если что вот stock GN
Code

        stock GN(playerid)
        {
                new pName[MAX_PLAYER_NAME];
                GetPlayerName(playerid, pName, sizeof pName);
                return pName;
        }

теперь создадим команду с Float
например /gotocord X Y Z

Code

        COMMAND:gotocord(playerid, params[]){
            new Float:p[3];//переменая которая будт хранить кординаты
            if(sscanf(params,"fff",p[0],p[1],p[2]))//записываем значение в перменые
            return SendClientMessage(playerid, 0xFF0000AA, "Используй: /gotocord X Y Z");
            SetPlayerPos(playerid,p[0],p[1],p[2]);//телепортируем игрока на введенные кординаты
            return 1;}

Теперь отличие между стандартной командой и strtok

Code

            if(strcmp(cmd, "/gotocord", true) == 0){
            tmp = strtok(cmdtext, idx);
            if(!strlen(tmp))
            return    SendClientMessage(playerid, COLOR_GRAD2, "Используй: /gotocord X Y Z");
            new Float:X = floatstr(tmp);
            tmp = strtok(cmdtext, idx);
            if(!strlen(tmp))
            return    SendClientMessage(playerid, COLOR_GRAD2, "Используй: /gotocord X Y Z");
            new Float:Y = floatstr(tmp);
            tmp = strtok(cmdtext, idx);
            if(!strlen(tmp))
            return    SendClientMessage(playerid, COLOR_GRAD2, "Используй: /gotocord X Y Z");
            new Float:Z = floatstr(tmp);
            SetPlayerPos(playerid,X,Y,Z);
            return 1;}  


Нарушение О_о какое нарушение?
мои разработки
[FS]bank,[FS]vip2,[FS]console,[FS]RACE v2.5.
Кому надо скрипт разработать пиши на мыло admin@samp-pawno.ru :)
 
  • Страница 1 из 1
  • 1
Поиск:


Copyright www.SAMP-TEAM.com (c) 2009-2024
Правила использования материалов сайта

При копировании материалов из нашего сайта
ссылка на www.SAMP-TEAM.com обязательна!
Нарушители правил будут строго наказаны!

Хостинг от uCoz   
Для корректного просмотра мы рекомендуем Вам использовать браузер Google Chrome.
Яндекс.Метрика
Яндекс.Метрика