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