Доступ к архиву

Переход в группу "Пользователь"

300.00
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

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

Статус
В этой теме нельзя размещать новые ответы.

ChIp*

Изучающий
Пользователь
Регистрация
2 Янв 2012
Сообщения
726
Лучшие ответы
0
Репутация
191
И так начнем урок что нам нужно
2 инклуда sscanf и zcmd
ZCM

SSCANF:


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

PHP:
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]

PHP:
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]
PHP:
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

PHP:
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 [имя]
меняет имя игроку на введеное им
PHP:
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 игрока] [сообщение]
PHP:
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
PHP:
stock GN(playerid) 
{ 
        new pName[MAX_PLAYER_NAME]; 
        GetPlayerName(playerid, pName, sizeof pName); 
        return pName; 
}
теперь создадим команду с Float
например /gotocord X Y Z

PHP:
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

PHP:
    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;}
Автор: sk47
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу