I'm Scripter
Ученик
Введение.
Для начала надо знать:
1. Pawn - язык программирования. Приспособлен для создание модов и скриптов в SA-MP.
2. Чтобы использовать данный язык, нужна программа Pawno.
Неплохо знать английский язык, т.к. именно на нём записаны все функции и калбеки.
Оглавление:
Урок 1. Начало.
Урок 2. Паблики.
Урок 3. Функции.
Урок 4. Переменные.
Урок 5. Проверки.
Урок 6. Создание новых пабликов.
Урок 7. Таймер.
Урок 8. Циклы.
Урок 9. #define.
Урок 10. enum.
Дополнение 1. Работа с dcmd.
Дополнение 2. Работа с strtok.
Урок 1. Начало.
Если вы делаете мод, то сначала стоит записать данные строки:
a_samp.inc - это файл, содержащий в себе все функции и паблики sa-mp.
Урок 2. Паблики.
Паблики (public), иногда их называют калбеки (callbacks).
Callback, переводится как "функция, вызываемая автоматически".
Это процедуы, которые определяют, что будет
выполняться при данном действии, будь то игрока написал что то в чате,
или запустился мод. Каждый калбек имеет определённое название и определённые параметры.
Пример паблика:
Данный паблик паблик отвечает за то, что будет, когда игрок сдохнет.
playerid - ИД того, кто погиб
killerid - ИД того, кто убил игрока
reason - причина (в смысле, каким оружием)
В конце каждого паблика должен стоять return.
Если паблик находится в моде, то вводим return 1;
Если паблик находится в скрипте, то вводим return 0;
Если установить return 1; в скрипте, то выйдет такая ситуация:
паблик в скрипте работать не будет!
Исключение: OnPlayerText.
Основные паблики.
OnGameModeInit() - события, когда загружается мод
OnGameModeExit() - события, когда выгружается мод
OnPlayerConnect(playerid) - события, когда игрок подключается к серверу
OnPlayerDisconnect(playerid,reason) - события, когда игроку отключается от сервера. reason - причина отключения.
OnPlayerDeath(playerid, killerid, reason) - события, когда игрок погибает. reason - причина гибели.
OnPlayerRequestClass(playerid, classid) - события, когда игрок выбирает скина. classid - какой скин выбран на данный
момент.
OnPlayerCommandText(playerid,cmdtext[]) - события, когда игрок ввёл команду. cmdtext - команда, используется в strcmp.
OnPlayerPickUpPickup(playerid, pickupid) - события, когда игрок поднял пикап. pickupid - ID пикапа
OnPlayerText(playerid,text[]) - события, когда игрок ввёл текст в чат.
Типы return-ов. Если return1; - текст игрока отображается в чате,
если return 0; - текст игрока не отображается в чате.
OnPlayerSpawn(playerid) - события, когда игрок отправился на спавн.
OnFilterScriptInit() - события, когда скрипт загружается на сервер
OnFilterScriptExit() - события, когда скрипт выгружается из памяти сервера
Практика.
Урок 3. Функции.
Функции - они и в Африке функции. Каждая функция, как и паблик,
имеет определённые параметры. Синтаксис нативной функции:
Данная функция даёт игроку playerid деньги money.
Может быть функция с одним параметром, например:
Данная функция определяет число денег у игрока playerid. Cама по себе бесполезна,
используется для других фукнций.
Основные функции.
SetPlayerHealth(playerid,health); - установить игроку playerid здоровье health
SetPlayerArmour(playerid,armour); - установить игроку playerid уровень брони armour
GivePlayerMoney(playerid,money); - дать игроку playerid деньги money
ResetPlayerMoney(playerid); - все деньги игроку обнуляются
ResetPlayerWeapons(playerid); - игрок лишается всего оружие
GivePlayerWeapon(playerid,weaponid,var1); - игроку playerid даётся оружие weaponid с патронами var1
CreatePickup(model,type,Float:X,Float:Y,Float:Z); - создаёт пикап (разбросанное оружие) с ид model, с типом пикапа type
и с координатами X,Y,Z
Если пикап будет перерождаться, то ставим type 2. Если создаётся только один раз - type 3.
AddStaticPickup(model,type,Float:X,Float:Y,Float:Z); - создаётся пикап model с типом type и координатами X,Y,Z
CreateVehicle(modelid, Float:x, Float:y,Float:z, Float:angle, color1, color2, respawn_delay); - создаётся автомобиль modelid,
x,y,z - координаты, angle - угол поворота, color1, color2 - цвета, respawn_delay - время в секундах, через которое
автомобиль будет респавниться после того, как оно было покинуто водителем.
AddStaticVehicle(modelid, Float:spawn_x, Float:spawn_y,Float:spawn_z, Float:angle, color1, color2); - создаётся автомобиль
modelid,
spawn_x, spawn_y, spawn_z - координаты, angle - угол поворота, color1, color2 - цвета авто. Используется только в
OnGameModeInit().
SendClientMessage(playerid, 0xDEEE20FF, "Hello."); - отправляет текст в чат игроку playerid с определённом цветом, и с
текстом
"Hello."
SendClientMessageToAll(0xDEEE20FF, "Hello."); - аналогично, только тот же текст отправляется всем игрокам в общий чат.
И теперь практика!
Урок 4. Переменные.
Строго говоря это адреса памяти, имеющие определённое значение.
Говоря проще, это некое слово, имеющие числовое значение
Существуют несколько видов переменных:
1. серверные переменные,
2. переменные игроков,
3. текстовые переменные.
1. Серверные переменные.
Так будем называть общие переменные.
Создана перменная server_players со значением 0.
Присвоение значения:
Переменной server_players присвоено значение 5.
Функция прибавление к значению опред. числа:
Функция отнятия из значения опред. числа:
+1 к значению:
-1 к значению:
К переменной можно присвоить значение функции.
Также к переменной можно присвоить ИД, например, транспорта.
vehicle=CreateVehicle(522, 1683, 785,0, 0, 6, 9,-1);//Переменной 'vehicle' присвоено значение ИД транспорта.
DestroyVehicle(vehicle);//Транспорт уничтожается.
Практика.
2. Переменные игроков.
Переменная, которая приклепляется к каждому игроку на сервере.
Создана переменная player со значением 0.
На данном этапе каждый игрок имеет значение 0.
Переменной player одного игрока playerid присваивается значение 5.
Также с данной переменной совершаются все действия серверной переменной.
Практика.
3. Текстовые переменные.
Текстовые переменные - переменные, значением которых может быть только текст.
Такая переменная в основном используется для создания форматированного текста.
%d - некое числовое значение
%s - некое текстовое значение
Переменной string присвоено текстовое значение, указанное в кавычках.
Есть ещё переменная, используемая для имени:
Cоздана переменная name.
Практика.
Урок 5. Проверки.
Проверка - функция, проверящая, выполняется ли данная функция. Если выполняется функция,
то и выполняется определённый код.
В качестве проверки может использоваться:
1. сравнению переменных, либо значений функций,
2. выполняеться ли некая функция.
1. Сравнение переменных.
В данной проверка произведено сравнение:
ЕСЛИ деньги_игрока >= (больше или равно) money
ТО выполнение_кода
Есть разных виды сравнений:
!= - не равно
>= - больше или равно
<= - меньше или равно
> - больше
< - меньше
== - равно
Практика.
2. Выполнение определённой фукнции.
Проверяет, выполняеться ли данная функция.
Выполняется проверка, подключён ли игрок к серверу.
Практика.
Конечно, есть функия, использующаяся при невыполнениии проверки.
Называется else. Используется так.
Урок 6. Создание новых пабликов.
Новый паблик создаётся так:
Создаётся он для того, чтобы вызвать некоторые функции одновременно.
Например, функция установки денег.
Урок 7. Таймер.
Таймер - функция, вызвающая определённый паблик в определённое время.
Функция может вызваться единожды, либо повторяться через
заданные промежутки времени.
Для того, чтобы повесить таймер на определённый паблик,
создаётся такая фукнция.
В 1 секунде - 1000 миллисекунд.
1000 - заданный промежуток времени в миллисекундах, после которого паблик запускается заново.
1 - тип таймер. Если установлено 1, то таймер перезапускается бесконечное кол-во раз. Если 0, то таймер вызывает
паблик только первый раз.
Примечание: не стоит ставить значение таймера < 100, это может вызвать нагрузку на процессор.
Пример использования:
Урок 8. Циклы.
Цикл - функция, которая перебирает все значения определённой
переменной, в указанных рамках.
Код цикла:
Примечание: не стоит ставить ограничение цикла на MAX_PLAYERS (500). Это вызывает большую
нагрузку на процессор.
Пример использования цикла.
Урок 9. #define.
Данная функция используется довольно редко. Позволяет на одно слово "поставить" другое.
Слово COLOR_ZEL теперь понимается компилятором как определённый код цвета.
Урок 10. enum
enum - это вещь, позволяющая создавать большее количество адресов одной переменной.
Пример:
Здесь у адреса PVar создаются подразделы PHealth, PArmour.
Теперь игрок может на одну переменную игрока ставить несколько адресов.
Под PVar подразумевается PHealth, либо PArmour.
Разумеется, enum можно юзать и в общей (серверной) переменной.
Пример использования.
Дополнение 1. Работа с dcmd.
dcmd - командный процессор, с помощью которого можно более просто (обходя strtok) создавать команды с переменными.
Вообще сама функция dcmd создаётся при помощи define. Код:
Перед созданием самой команды надо обозначить её в OnPlayerCommandText(playerid,cmdtext[])
healplayer - название команды, 10 - кол-во символов в команде.
Сама команда создаётся так:
Дополнение 2. Работа с strtok.
strtok - функция, аналогичная dcmd. Позволяет создать команды с переменными.
Сама функция strtok .
Переходим к паблику OnPlayerCommandText. Сначала пишем там код:
Создаём саму команду:
Всё, команда создана.
Вот и весь Урок.
Автор: Не известен.
Доработал: Я
Для начала надо знать:
1. Pawn - язык программирования. Приспособлен для создание модов и скриптов в SA-MP.
2. Чтобы использовать данный язык, нужна программа Pawno.
Неплохо знать английский язык, т.к. именно на нём записаны все функции и калбеки.
Оглавление:
Урок 1. Начало.
Урок 2. Паблики.
Урок 3. Функции.
Урок 4. Переменные.
Урок 5. Проверки.
Урок 6. Создание новых пабликов.
Урок 7. Таймер.
Урок 8. Циклы.
Урок 9. #define.
Урок 10. enum.
Дополнение 1. Работа с dcmd.
Дополнение 2. Работа с strtok.
Урок 1. Начало.
Если вы делаете мод, то сначала стоит записать данные строки:
PHP:
#include <a_samp>//Включение в мод все функций и калбеков sa-mp.
main(){}
Урок 2. Паблики.
Паблики (public), иногда их называют калбеки (callbacks).
Callback, переводится как "функция, вызываемая автоматически".
Это процедуы, которые определяют, что будет
выполняться при данном действии, будь то игрока написал что то в чате,
или запустился мод. Каждый калбек имеет определённое название и определённые параметры.
Пример паблика:
PHP:
public OnPlayerDeath(playerid,killerid,reason)//Строка определяет, что это за паблик, его параметры.
{//Начало действия.
}//Конец действия
playerid - ИД того, кто погиб
killerid - ИД того, кто убил игрока
reason - причина (в смысле, каким оружием)
PHP:
public OnPlayerDeath(playerid,killerid,reason) //Игрок умер.
{
//здесь описывается то, что будет, если игрок умер
}
Если паблик находится в моде, то вводим return 1;
Если паблик находится в скрипте, то вводим return 0;
Если установить return 1; в скрипте, то выйдет такая ситуация:
паблик в скрипте работать не будет!
Исключение: OnPlayerText.
Основные паблики.
OnGameModeInit() - события, когда загружается мод
OnGameModeExit() - события, когда выгружается мод
OnPlayerConnect(playerid) - события, когда игрок подключается к серверу
OnPlayerDisconnect(playerid,reason) - события, когда игроку отключается от сервера. reason - причина отключения.
OnPlayerDeath(playerid, killerid, reason) - события, когда игрок погибает. reason - причина гибели.
OnPlayerRequestClass(playerid, classid) - события, когда игрок выбирает скина. classid - какой скин выбран на данный
момент.
OnPlayerCommandText(playerid,cmdtext[]) - события, когда игрок ввёл команду. cmdtext - команда, используется в strcmp.
OnPlayerPickUpPickup(playerid, pickupid) - события, когда игрок поднял пикап. pickupid - ID пикапа
OnPlayerText(playerid,text[]) - события, когда игрок ввёл текст в чат.
Типы return-ов. Если return1; - текст игрока отображается в чате,
если return 0; - текст игрока не отображается в чате.
OnPlayerSpawn(playerid) - события, когда игрок отправился на спавн.
OnFilterScriptInit() - события, когда скрипт загружается на сервер
OnFilterScriptExit() - события, когда скрипт выгружается из памяти сервера
Практика.
PHP:
public OnPlayerDeath(playerid,killerid,reason)//Игрок умер.
{
//некий код
return 1;//т.к. стоит в моде
}
Функции - они и в Африке функции. Каждая функция, как и паблик,
имеет определённые параметры. Синтаксис нативной функции:
PHP:
GivePlayerMoney(playerid,money);
Может быть функция с одним параметром, например:
PHP:
GetPlayerMoney(playerid);
используется для других фукнций.
Основные функции.
SetPlayerHealth(playerid,health); - установить игроку playerid здоровье health
SetPlayerArmour(playerid,armour); - установить игроку playerid уровень брони armour
GivePlayerMoney(playerid,money); - дать игроку playerid деньги money
ResetPlayerMoney(playerid); - все деньги игроку обнуляются
ResetPlayerWeapons(playerid); - игрок лишается всего оружие
GivePlayerWeapon(playerid,weaponid,var1); - игроку playerid даётся оружие weaponid с патронами var1
CreatePickup(model,type,Float:X,Float:Y,Float:Z); - создаёт пикап (разбросанное оружие) с ид model, с типом пикапа type
и с координатами X,Y,Z
Если пикап будет перерождаться, то ставим type 2. Если создаётся только один раз - type 3.
AddStaticPickup(model,type,Float:X,Float:Y,Float:Z); - создаётся пикап model с типом type и координатами X,Y,Z
CreateVehicle(modelid, Float:x, Float:y,Float:z, Float:angle, color1, color2, respawn_delay); - создаётся автомобиль modelid,
x,y,z - координаты, angle - угол поворота, color1, color2 - цвета, respawn_delay - время в секундах, через которое
автомобиль будет респавниться после того, как оно было покинуто водителем.
AddStaticVehicle(modelid, Float:spawn_x, Float:spawn_y,Float:spawn_z, Float:angle, color1, color2); - создаётся автомобиль
modelid,
spawn_x, spawn_y, spawn_z - координаты, angle - угол поворота, color1, color2 - цвета авто. Используется только в
OnGameModeInit().
SendClientMessage(playerid, 0xDEEE20FF, "Hello."); - отправляет текст в чат игроку playerid с определённом цветом, и с
текстом
"Hello."
SendClientMessageToAll(0xDEEE20FF, "Hello."); - аналогично, только тот же текст отправляется всем игрокам в общий чат.
И теперь практика!
PHP:
public OnPlayerDeath(playerid,killerid,reason)//Игрок умер.
{
//Начало действия паблика
GivePlayerMoney(killerid,GetPlayerMoney(playerid));//Игроку killerid (тот кто убил) даются все деньги playerid (тот, кто умер).
//Конец действия
}
Урок 4. Переменные.
Строго говоря это адреса памяти, имеющие определённое значение.
Говоря проще, это некое слово, имеющие числовое значение
Существуют несколько видов переменных:
1. серверные переменные,
2. переменные игроков,
3. текстовые переменные.
1. Серверные переменные.
Так будем называть общие переменные.
PHP:
new server_players=0;
Присвоение значения:
PHP:
server_players=5;
Функция прибавление к значению опред. числа:
PHP:
server_players+=5;
PHP:
server_players-=5;
PHP:
server_players++;
PHP:
server_players--;
PHP:
server_players=GetPlayerMoney(playerid);//переменной server_players присвоено значение денег игрока playerid
PHP:
new vehicle;//Создаётся переменная.
DestroyVehicle(vehicle);//Транспорт уничтожается.
Практика.
PHP:
public OnPlayerDeath(playerid,killerid,reason)//Паблик
{//Начало выполнения
server_players++;//+ 1 к значению server_players
}//Конец выполнения
Переменная, которая приклепляется к каждому игроку на сервере.
PHP:
new player[MAX_PLAYERS]=0;
На данном этапе каждый игрок имеет значение 0.
PHP:
player[playerid]=5;
Также с данной переменной совершаются все действия серверной переменной.
Практика.
PHP:
new kills[MAX_PLAYERS]=0;//Создана переменная kills. Для всех игроков установлено значение 0.
new deaths[MAX_PLAYERS]=0;//Создана переменная deaths. Для всех игроков установлено значение 0.
public OnPlayerDeath(playerid,killerid,reason)//Паблик
{
kills[killerid]++;//+1 к значению kills у игрока killerid
deaths[playerid]++;//+1 к значению deaths у игрока playerid
}
Текстовые переменные - переменные, значением которых может быть только текст.
PHP:
new string[256];//cоздана переменная string
PHP:
format(string,256," Ваши деньги: %d",GetPlayerMoney(playerid));
%s - некое текстовое значение
Переменной string присвоено текстовое значение, указанное в кавычках.
Есть ещё переменная, используемая для имени:
PHP:
new name[MAX_PLAYER_NAME];
Практика.
PHP:
GetPlayerName(playerid,name,256);//Получено имя игрока
format(string,256," Ваше имя: %s",name);//Форматирование текста
SendClientMessage(playerid,0xAAFF00,string);//Отправлено сообщение
Проверка - функция, проверящая, выполняется ли данная функция. Если выполняется функция,
то и выполняется определённый код.
PHP:
if(некая_функция)
{
// код, который должен выполняться, при выполнение некая_функция
}
1. сравнению переменных, либо значений функций,
2. выполняеться ли некая функция.
1. Сравнение переменных.
PHP:
if(GetPlayerMoney(playerid) >= money)
{
выполнение_кода;
}
ЕСЛИ деньги_игрока >= (больше или равно) money
ТО выполнение_кода
Есть разных виды сравнений:
!= - не равно
>= - больше или равно
<= - меньше или равно
> - больше
< - меньше
== - равно
Практика.
PHP:
new kills[MAX_PLAYERS]=0;//Создана переменная kills. Для всех игроков установлено значение 0.
new string[256];
public OnPlayerDeath(playerid,killerid,reason)//Паблик
{
kills[killerid]++;//+1 к значению kills у игрока killerid
if(kills[killerid] == 10)//Если значение kills игрока killerid равно 10
{//Начало выполнения кода
SendClientMessage(playerid,0x000FFF,"Вы убили уже 10 раз, вы получили бонус $10000.");//Сообщение
GivePlayerMoney(playerid,10000);//Выдаются деньги
}//Конец выполнения кода
}
Проверяет, выполняеться ли данная функция.
PHP:
if(IsPlayerConnected(playerid))
{
}
Практика.
PHP:
public OnPlayerCommandText(playerid,cmdtext[])//Паблик
{
if(strcmp(cmdtext,"/testmessage",true)==0)//Проверка, выполнена ли данная комманда.
{//Начало выполнения кода
SendClientMessage(playerid,0xAFF00000,"Команда выполнена.");
return 1;//Здесь тоже нужен return.
}//Конец выполнения кода
return 1;
}
Называется else. Используется так.
PHP:
public OnPlayerCommandText(playerid,cmdtext[])
{
if(strcmp(cmdtext,"/testmessage",true)==0)
{
if(IsPlayerAdmin(playerid))//Являеться ли игрок ркон-админом.
{
SendClientMessage(playerid,0xAFF00000,"Команда выполнена.");//Если да, то выполняеться данная функция.
}
else SendClientMessage(playerid,0xAFF00000,"Вы не являетесь ркон админом.");//Если нет, то выполняется другая функция..
return 1;
}
return 1;
}
Новый паблик создаётся так:
PHP:
forward SetPlayerMoney(playerid,money);
Например, функция установки денег.
PHP:
forward SetPlayerMoney(playerid,money);//Создан паблик
public SetPlayerMoney(playerid,money)
{
ResetPlayerMoney(playerid);//Все деньги у игрока отбираются.
GivePlayerMoney(playerid,money);//Игрок получат деньги.
}
Таймер - функция, вызвающая определённый паблик в определённое время.
Функция может вызваться единожды, либо повторяться через
заданные промежутки времени.
Для того, чтобы повесить таймер на определённый паблик,
создаётся такая фукнция.
PHP:
SetTimer("NewPublic",1000,1);
1000 - заданный промежуток времени в миллисекундах, после которого паблик запускается заново.
1 - тип таймер. Если установлено 1, то таймер перезапускается бесконечное кол-во раз. Если 0, то таймер вызывает
паблик только первый раз.
Примечание: не стоит ставить значение таймера < 100, это может вызвать нагрузку на процессор.
Пример использования:
PHP:
public OnGameModeInit()
{
SetTimer("AllMessage",120000,1);//Cоздан таймер, поставленный на паблик NewPublic.
//Таймер запускается каждые 2 минуты
}
forward AllMessage();
public AllMessage()
{
SendClientMessageToAll(0xAFDAFD00," >> Серверу требуются модераторы.");
//Cообщение. Отправляется всем игрокам каждые 2 минуты.
Урок 8. Циклы.
Цикл - функция, которая перебирает все значения определённой
переменной, в указанных рамках.
Код цикла:
PHP:
for(new i=0;i<50;i++)//Цикл
{//Начало действия цикла
GivePlayerMoney(i,1000);//Даются деньги
GameTextForPlayer(i,"~r~bonus!",1000,1);//Сообщение
//Перебираюся все значения i, выходит, что функция выполняется для всех игроков с ID < 50
//Конец действия цикла
}
нагрузку на процессор.
Пример использования цикла.
PHP:
public OnGameModeInit()
{
SetTimer("TTimer",120000,1);//Создаётся таймер.
}
forward TTimer();//Создаётся паблик.
public TTimer()
{
for(new i=0;i<50;i++)//Цикл, просматриваются все значения i до 50.
{
SendClientMessage(i,0xAFAFAF," >> Серверу требуются модераторы.");//Всем игрокам с ID < 50 отправляется сообщение.
}
}
Данная функция используется довольно редко. Позволяет на одно слово "поставить" другое.
PHP:
#define COLOR_ZEL 0x00FF00AA
Урок 10. enum
enum - это вещь, позволяющая создавать большее количество адресов одной переменной.
Пример:
PHP:
enum PVar
{
PHealth,
PArmour
}
PHP:
new PlayerVar[MAX_PLAYERS][PVar];
Под PVar подразумевается PHealth, либо PArmour.
Разумеется, enum можно юзать и в общей (серверной) переменной.
PHP:
enum SVar//Создан адрес SVar с подразделами Players и AllPlayers
{
Players,
AllPlayers
}
new PlayerServer[SVar];
PHP:
enum Var1//Создан адрес Var1 с подразделами PBank, PKills и PDeaths.
{
PBank,
PKills,
PDeaths
}
new PlayerVar[MAX_PLAYERS][Var1];//Создана переменная с данными адресами
public OnPlayerDeath(playerid,killerid,reason)
{
PlayerVar[playerid][PDeaths]+=1;//К адресу PDeaths переменной игрока ставиться +1
PlayerVar[killerid][PKills]+=1;//К адресу PKills переменной игрока ставиться +1
}
dcmd - командный процессор, с помощью которого можно более просто (обходя strtok) создавать команды с переменными.
Вообще сама функция dcmd создаётся при помощи define. Код:
PHP:
#define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
PHP:
public OnPlayerCommandText(playerid,cmdtext[])
{
dcmd(healplayer,10,cmdtext);
return 1;
}
Сама команда создаётся так:
PHP:
dcmd_healplayer(playerid,params[])//Создана команда healplayer
{
new player1;//создана переменная
player1 = strval(params[0]);//к player1 присваивается числовое значение params[0]
if(IsPlayerConnected(player1))//Проверка, подключён ли игрок к серверу
{
if(IsPlayerAdmin(playerid))//Проверка, является ли игрок, вводивший команду, rcon-админом
{
SetPlayerHealth(player1,100);//ХП того игрока становиться 100
}
}
}
strtok - функция, аналогичная dcmd. Позволяет создать команды с переменными.
Сама функция strtok .
PHP:
strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}
new offset = index;
new result[20];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}
PHP:
new cmd[256],idx;
cmd = strtok(cmdtext,idx);
PHP:
if(strcmp(cmd,"/healplayer",true)==0)//Проверка на введёную команду
{
new tmp[256];//Создаём 1 переменную tmp[256]. Обязательна для strtok
new splayer;//Создаём общую переменную
//Далее код переменной в команде. splayer можно заменить любой другой подходящей переменной
tmp = strtok(cmdtext,idx);
if(!strlen(tmp))
{
SendClientMessage(playerid,0xFFFFF00,"Юзайте: /healplayer [playerid]");
}
splayer = strval(tmp);
if(IsPlayerConnected(splayer))//На сервере ли игрок?
{
if(IsPlayerAdmin(playerid))//Являетесь ли вы rcon-админом?
{
SetPlayerHealth(splayer,100);//Игроку даётся 100 хп.
}
else SendClientMessage(playerid,0xFFFFF00,"Вы не являетесь RCON-админом!");//Иначе мисага
}
else SendClientMessage(playerid,0xFFFFF00,"Игрок не находится на сервере.");//Иначе мисага
return 1;
}
Вот и весь Урок.
Автор: Не известен.
Доработал: Я
