Drift Points Counter Plug-In by Gamer_Z (RUS)
Данный пост будет представлять собой небольшой разбор плагина подсчета дрифт-очков by Gamer_Z
Плагин имеет ряд функций и колбэков которые существенно упрощают работу над какими-либо скриптами и т.п. использующие подсчет дрифт очков.
Получает/Устанавливает интервал между обновлениями дрифта.
Получает/Устанавливает интервал между обновлениями дрифта.(В тиках, не секундах или миллисекундах!)
DriftSet_UpdateDelay
PHP код:
native DriftSet_UpdateDelay(delay);
Пример
PHP код:
public OnFilterScriptInit()
{
DriftSet_UpdateDelay(5);
//Приведенный выше код будет устанавливать интервал обновления дрифта в 5 тиков.
return 1;
}
Эта функция не возвращает никакого значения
DriftGet_UpdateDelay
PHP код:
native DriftGet_UpdateDelay();
Пример
PHP код:
public OnFilterScriptInit()
{
new delay = 0;//переменная
delay = DriftGet_UpdateDelay();//Сохраняет количество тиков в переменной
if(5 <= delay <= 15)//если интервал между 5 и 15
{
DriftSet_UpdateDelay(7);//установим интервал на 7
}
else
{
DriftSet_UpdateDelay(12);//установить интервал на 12
}
//Этот код будет становить интервал на 7 или на 12 тиков.
return 1;
}
Возвращает количество тиков между обновлениями дрифта.
Получает/Устанавливает минимальную скорость дрифта.
Получает/Устанавливает минимальную скорость дрифта.
DriftSet_MinimalSpeed
PHP код:
native DriftSet_MinimalSpeed(Float:MinimalSpeed,playerid = (-1));
Пример
PHP код:
public OnFilterScriptInit()
{
DriftSet_MinimalSpeed(15.0);
//Приведенный выше код установит для всех игроков минимальную скорость для подсчета дрифта в размере 15 км/ч
DriftSet_MinimalSpeed(15.0,33);
//Приведенный выше код установит для playerid 33 минимальную скорость для подсчета дрифта в размере 15 км/ч
//(если зайти в дрифт на скорости меньше 15 км/ч,то дрифт засчитываться не будет!)
return 1;
}
Эта функция не возвращает никакого значения.
DriftGet_MinimalSpeed
PHP код:
native DriftGet_MinimalSpeed(&Float:MinimalSpeed,playerid = (0));
Пример
PHP код:
public OnFilterScriptInit()
{
new Float:Speed;//Переменная типа float(с плавающей точкой)
DriftGet_MinimalSpeed(Speed);
//Код выше получает минимальную скорость для подсчета дрифта и передает данные в переменную Speed
DriftGet_MinimalSpeed(Speed,45);
//Код выше получает минимальную скорость для подсчета дрифта от playerid 45 и передает данные в переменную Speed
#define MAX_PLAYERS (500)
new Float:AllSpeed[MAX_PLAYERS];//Переменная типа float(с плавающей точкой)
for(new i; i < MAX_PLAYERS; ++i)
{
DriftGet_MinimalSpeed(AllSpeed[i],i);
}
//Код выше будет получать минимальную скорость для подсчета дрифта от всех игроков и передает ее в массив AllSpeed что-бы проверить всех игроков на значение минимальной скорости подсчета дрифта
new IsEverybodySynced = 1;//присвоим новой переменной 1
for(new i; i < MAX_PLAYERS-1; ++i)
{
if(AllSpeed[i] != AllSpeed[i+1])
{
IsEverybodySynced = 0;//Если не все имеют одинаковую минимальную скорость подсчета дрифта
break;//Выйдем из цикла,"мы получили то,что мы хотели"
}
}
if(IsEverybodySynced == 0)
{
print("Не все имеют одинаковую минимальную скорость подсчета дрифта!");
}
return 1;
}
Эта функция не возвращает никакого значения.
Получает/Устанавливает максимальную скорость дрифта.
Получает/Устанавливает максимальную скорость дрифта.
DriftSet_MaximalSpeed
PHP код:
native DriftSet_MaximalSpeed(Float:MaximalSpeed,playerid = (-1));
Пример
PHP код:
public OnFilterScriptInit()
{
DriftSet_MaximalSpeed(100.0);
//Приведенный выше код установит для всех игроков максимальную скорость для подсчета дрифта в размере 100 км/ч
DriftSet_MaximalSpeed(100.0,33);
//Приведенный выше код установит для playerid 33 максимальную скорость для подсчета дрифта в размере 100 км/ч
//(если зайти в дрифт на скорости больше 100 км/ч,то дрифт засчитываться не будет!)
return 1;
}
Эта функция не возвращает никакого значения.
DriftGet_MaximalSpeed
PHP код:
native DriftGet_MaximalSpeed(&Float:MaximalSpeed,playerid = (0));
Пример
PHP код:
public OnFilterScriptInit()
{
new Float:Speed;//Переменная типа float(с плавающей точкой)
DriftGet_MaximalSpeed(Speed);
//Код выше получает максимальную скорость для подсчета дрифта и передает данные в переменную Speed
DriftGet_MaximalSpeed(Speed,45);
//Код выше получает максимальную скорость для подсчета дрифта от playerid 45 и передает данные в переменную Speed
#define MAX_PLAYERS (500)
new Float:AllSpeed[MAX_PLAYERS];//Переменная типа float(с плавающей точкой)
for(new i; i < MAX_PLAYERS; ++i)
{
DriftGet_MaximalSpeed(AllSpeed[i],i);
}
//Код выше будет получать максимальную скорость для подсчета дрифта от всех игроков и передает ее в массив AllSpeed что-бы проверить всех игроков на значение максимальной скорости подсчета дрифта
new IsEverybodySynced = 1;//присвоим новой переменной 1
for(new i; i < MAX_PLAYERS-1; ++i)
{
if(AllSpeed[i] != AllSpeed[i+1])
{
IsEverybodySynced = 0;//Если не все имеют одинаковую максимальную скорость подсчета дрифта
break;//Выйдем из цикла,"мы получили то,что мы хотели"
}
}
if(IsEverybodySynced == 0)
{
print("Не все имеют одинаковую максимальную скорость подсчета дрифта!");
}
return 1;
}
Эта функция не возвращает никакого значения.
Получает/Устанавливает минимальный угол дрифта.
Получает/Устанавливает минимальный угол дрифта.
DriftSet_MinimalAngle
PHP код:
native DriftSet_MinimalAngle(Float:MinimalAngle,playerid = (-1));
Пример
PHP код:
public OnFilterScriptInit()
{
DriftSet_MinimalAngle(15.0);
//Приведенный выше код устанавливает минимальный угол в расчета дрифта размере 15.0 для всех игроков
DriftSet_MinimalAngle(15.0,12);
//Приведенный выше код устанавливает минимальный угол в расчета дрифта размере 15.0 для playerid 12
return 1;
}
Эта функция не возвращает никакого значения.
DriftGet_MinimalAngle
PHP код:
native DriftGet_MinimalAngle(&Float:MinimalAngle,playerid = (0));
Пример
PHP код:
public OnPlayerDriftStart(playerid)
{
DriftSet_MinimalAngle(12.5,playerid);
//Приведенный выше код устанавливает минимальный угол в расчета дрифта размере 12.5 для playerid
return 1;
}
public OnPlayerDriftUpdate(playerid,value,combo,flagid,Float:distance,Float:speed)
{
if(combo % 50 == 0) //Если деление комбо на 50
//as many as possible leaves us with rest of 0
//example: 150-50 = 100, 100-50 = 50, 50-50 = 0 so we get rest of 0.
//example two: 143-50 = 93, 93 - 50 = 43, rest is 43, it is not equal to 0
//note: why? -> 43 is not dividable by 50 so it is the remaining rest!
{
new Float:minangle;//Объявляем переменную типа float
DriftGet_MinimalAngle(minangle,playerid);//Получаем минимальный угол игрока
if(minangle+0.5 < 65.0)//Если минимальный угол 0.5 меньше 65 градусов
{
DriftSet_MinimalAngle(minangle+0.5,playerid);
//if yes add 0.5 degrees to the minimal angle to make it harder
//to drift
}
}
return 1;
}
Эта функция не возвращает никакого значения.
Получает/Устанавливает задержку окончания дрифта в тиках.
Получает/Устанавливает задержку окончания дрифта в тиках.
DriftSet_StartEndDelay
PHP код:
native DriftSet_StartEndDelay(delay,playerid = (-1));
Пример
PHP код:
public OnFilterScriptInit()
{
DriftSet_StartEndDelay(20);
//Приведенный выше код устанавливает задержку дрифта до 20 тиков для всех игроков
DriftSet_StartEndDelay(20,23);
//Приведенный выше код устанавливает задержку дрифта до 20 тиков для plyerid 23
return 1;
}
//Функция устанавливает кол-во тиков до полной остановки набора дрифт очков.
Эта функция не возвращает никакого значения.
DriftGet_StartEndDelay
PHP код:
native DriftGet_StartEndDelay(playerid = (0));
Пример
PHP код:
public OnFilterScriptInit()
{
new playerdelay = 0;
playerdelay = DriftGet_StartEndDelay(0);
//Приведенный выше код получает кол-во тиков до полной остановки подсчета дрифта и передает их в переменную playerdealy
return 1;
}
Эта функция возвращает кол-во тиков StartEndDelay.
Устанавливает делитель очков.
Устанавливает разделитель очков, так что вы не будете получать огромное количество очков в OnDirftUpdate и OnDriftEnd. по умолчанию 350.
DriftSet_Divider
PHP код:
native DriftSet_Divider(divider,playerid = (-1));
Пример
PHP код:
public OnFilterScriptInit ()
{
DriftSet_Divider (300);
// Приведенный выше код будет установлен разделитель до 300 для всех игроков.
DriftSet_Divider (300,88);
// Приведенный выше код будет установлен разделитель до 300 для playerid 88
return 1;
}
Эта функция не возвращает никакого значения.
DriftGet_Divider
PHP код:
native DriftGet_Divider(playerid = (0));
Пример
PHP код:
public OnFilterScriptInit()
{
new divider = DriftGet_Divider(0);
//Приведенный выше код получит делитель очков дрифта у playerid 0
return 1;
}
Эта функция возвращает делитель очков дрифта.
Проверка на изменение здоровья транспорта
Проверка на изменение здоровья транспорта, если у транспортного средства изменилось(уменьшилось) здоровье,то дрифт заканчивается и вызывается OnDriftEnd. В MaxHealthLoose, можно задать максимальное количество hp которое при его достижении остановит набор дрифт очков.
DriftSet_DamageCheck
PHP код:
native DriftSet_DamageCheck(enable = 1,playerid = (-1),Float:MaxHealthLoose = 0.0);//default = disabled (0), enabled = 1
Пример
PHP код:
public OnFilterScriptInit()
{
DriftSet_DamageCheck(1,-1,10.0);
//Вышеприведенный код включает(1) проверку, для всех игроков т.к. 2 параметр -1,максимальный урон за удар равняется 10hp
DriftSet_DamageCheck(0,-1,0.0);
//Выключает(0) проверку,для всех игроков т.к. 2 параметр -1
DriftSet_DamageCheck(1,12,0.0);
//Вышеприведенный код включает(1) проверку, для playerid 12,максимальный урон за удар равняется 0hp (id 12 запрещенно повреждать авто при наборе дрифт очков)
return 1;
}
Эта функция не возвращает никакого значения.
DriftGet_DamageCheck
PHP код:
native DriftGet_DamageCheck(playerid = (0),&Float:MaxHealthLoose = 0);
Пример
PHP код:
public OnFilterScriptInit()
{
new Float:MaxLoose;
new status = DriftGet_DamageCheck(4,MaxLoose);
//Вышеприведенный код получает допустимое значение потери hp во время набора дрифт очков у playerid 4
return 1;
}
Эта функция возвращает включенный статус,0/falce если выключен,1/true если включен.
Проверка на то, находится-ли игрок в дрифте.
Проверка на то, находится-ли игрок в дрифте.
PHP код:
native IsPlayerDrifting(playerid);
Пример
PHP код:
public OnPlayerUpdate(playerid)
{
if(IsPlayerDrifting(playerid) == 1)
{
printf("Игрок %d дрифтует!",playerid);
}
else
{
//Игрок не дрифтует!
}
return 1;
}
Эта функция возвращает 1/true если дрифт начался или 0/false если дрифт окончен и паблик OnPlayerDriftEnd был вызван.
Паблик вызывается при начале обновлении дрифта.
Паблик вызывается при начале дрифта,удобно для вызова textdraw`ов.
PHP код:
forward OnPlayerDriftStart(playerid);
Пример
PHP код:
public OnPlayerDriftStart(playerid)
{
SendClientMessage(playerid,0xFFFFFFFF,"Вы начали дрифтовать!");
return 1;
}
Этот колбэк нечего не возвращает.
Паблик обновления.
Этот паблик вызывается по очень много раз на каждого игрока, если игрок дрифтует.
value -
это количество очков дрифта, накопленные за последний завершенный дрифт.
combo -
комбо дрифт(x2,x3...) увеличивается до тех пор, пока не сработает OnPlayerDriftEnd.
flagid -
это ближайший флаг в 10 метрах.
distance -
расстояние до ближайшей флага.
speed -
скорость в км/ч.
PHP код:
forward OnPlayerDriftUpdate(playerid,value,combo,flagid,Float:distance,Float:speed);
Пример
PHP код:
new string[128];
public OnPlayerDriftUpdate(playerid,value,combo,flagid,Float:distance,Float:speed)
{
format(string,128,"Drift! Points: %d, combo %d, flagid %d, distance %.2f, speed %.2f",value,combo,flagid,distance,speed);
GameTextForPlayer(playerid,string,200,2);
return 1;
}
Этот колбэк нечего не возвращает.
Паблик завершения дрифта.
Паблик вызывается, когда время задержки дрифта кончается или когда изменяется(уменьшается) здоровье авто.
PHP код:
forward OnPlayerDriftEnd(playerid,value,combo,reason);
Пример
PHP код:
new string[128];
public OnPlayerDriftEnd(playerid,value,combo,reason)
{
if(reason == DRIFT_REASON_TIME_EXPIRE)
{
format(string,128,"You ended your drift because you time has expired to resume it! Points: %d, combo %d",value,combo);//дрифт окончен т.к. тики закончили отсчет.
}
else
if(reason == DRIFT_REASON_CAR_DAMAGED)
{
format(string,128,"You ended your drift because you you damaged your car too much! Points: %d, combo %d",value,combo);//дрифт окончен т.к. повреждения машины за 1 удар превышены
}
else
if(reason == DRIFT_REASON_PLAYER_EXIT_VEHICLE)
{
format(string,128,"You ended your drift because you you exited your vehicle! Points: %d, combo %d",value,combo);//дрифт окончен т.к. игрок вышел из транспорта
}
else
{
format(string,128,"What the hell did you do to end this drift ?! Points: %d, combo %d",value,combo);//прекращение дрифта по другим причинам,например смерть игрового персонажа.
}
GameTextForPlayer(playerid,string,200,2);
return 1;
}
Этот колбэк нечего не возвращает.
Эта функция точнее, чем IsPlayerDrifting.
Эта функция точнее, чем IsPlayerDrifting, функция на самом деле говорит вам о том,что автомобиль действительно (на момент вызова) дрифтует,а не сам игрок.
PHP код:
native IsPlayerDrifting_precise(playerid);
Пример
PHP код:
public OnPlayerUpdate(playerid)
{
if(IsPlayerDrifting(playerid) == 1)
{
if(IsPlayerDrifting_precise(playerid) == 1)
{
printf("Игрок %d находится в дрифте и на самом деле дрифтует!",playerid);
}
else
{
printf("Игрок %d находится в дрифте но не дрифтует!",playerid);
}
}
else
{
//Игрок не в дрифте
}
return 1;
}
Эта функция возвращает 1/true если игрок дрифтует и 0/false если нет.
Бонусные зоны дрифта.
Добавляет бонусную зону.
Добавляет зону в которой начисляются бонусные очки за дрифт.
PHP код:
native Drift_AddFLAG(Float:X,Float:Y,Float:Z);
Пример
PHP код:
public OnFilterScriptInit()
{
new MyFlag = Drift_AddFLAG(462.283,2576.455,953.235);
return 1;
}
Эта функция возвращает flagid.
Отключает бонусную зону.
Отключает Drift Checkpoint.
PHP код:
native Drift_DisableFLAG(flagid);
Пример
PHP код:
public OnFilterScriptInit()
{
new MyFlag = Drift_AddFLAG(462.283,2576.455,953.235);
Drift_DisableFLAG(MyFlag);
return 1;
}
Эта функция не возвращает никакого значения.
Удаляет бонусную зону.
Удаляет бонусную зону(если не была создана новая бонусная зона,то это действие может быть отменено функцией EnableFLAG(flagid)).
PHP код:
native Drift_DeleteFLAG(flagid);
Пример
PHP код:
public OnFilterScriptInit()
{
new MyFlag = Drift_AddFLAG(462.283,2576.455,953.235);
Drift_DeleteFLAG(MyFlag);//удаляет зону
Drift_EnableFLAG(MyFlag);//Восстанавливает ее.
return 1;
}
Эта функция не возвращает никакого значения.
Включает бонусную зону.
Включает выключенную(или удаленную) бонусную зону.
PHP код:
native Drift_EnableFLAG(flagid);
Пример
PHP код:
public OnFilterScriptInit()
{
new MyFlag = Drift_AddFLAG(462.283,2576.455,953.235);//создает зону.
Drift_DisableFLAG(MyFlag);//выключает зону.
Drift_EnableFLAG(MyFlag);//включает зону.
return 1;
}
Эта функция не возвращает никакого значения.
Задает бонусной зоне новую позицию.
Задает бонусной зоне новую позицию.
PHP код:
native Drift_MoveFLAG(flagid,Float:X,Float:Y,Float:Z);
Пример
PHP код:
public OnFilterScriptInit()
{
new MyFlag = Drift_AddFLAG(462.283,2576.455,953.235);//создаем зону
Drift_MoveFLAG(MyFlag,765.353,9876.343,12.34586);//присваиваем зоне новую позицию
return 1;
}
Эта функция не возвращает никакого значения.
Включает/Отключает получение настроек для проверки бонусной зоны.
Включает/Отключает получение настроек для проверки,если игрок(или указанный игрок) в диапазоне бонусной зоны.
Drift_SetCheckForFlags
PHP код:
native Drift_SetCheckForFlags(enabled = 1,playerid =(-1));
Пример
PHP код:
public OnFilterScriptInit()
{
Drift_SetCheckForFlags(true,-1);//Включает проверку для всех игроков
Drift_SetCheckForFlags(false,22);//Выключает проверку для playerid 22
return 1;
}
Эта функция не возвращает никакого значения
Drift_GetCheckForFlags
PHP код:
native Drift_GetCheckForFlags(playerid = 0);
Пример
PHP код:
public OnFilterScriptInit()
{
new status = Drift_GetCheckForFlags(2);
//Код получает статус проверки playerid 2 и передает данные в переменную status
return 1;
}
Эта функция возвращает статус проверки (true-включена,false-выключена)
Не рекомендуемый к использованию native.
Этот native используется внутри плагина для получения вектора игроков,не рекомендуется использовать это, если вы не знаете, что вы делаете!
PHP код:
native Drift_Private_ChangeState(playerid,newstate);
Эта функция возвращает значения от -1 до 3 в зависимости от отказа/успеха.
Включает/Отключает плагин.
Включает/Отключает весь плагин,может быть использовано в любое время.
Drift_SetGlobalCheck
PHP код:
native Drift_SetGlobalCheck(enable = 1);
Пример
PHP код:
public OnFilterScriptInit()
{
Drift_SetGlobalCheck(true);//Код включает плагин
Drift_SetGlobalCheck(false);//Код выключает плагин
return 1;
}
Эта функция не возвращает никакого значения.
Drift_GetGlobalCheck
PHP код:
native Drift_GetGlobalCheck();
Примемр
PHP код:
public OnFilterScriptInit()
{
if(Drift_SetGlobalCheck() == 0)//Если плагин выключен
{
Drift_SetGlobalCheck();//Включим плагин
}
return 1;
}
Эта функция возвращает true если плагин включен,false если отключен.
Включает/Отключает проверку, находится ли игрок в дрифте.
Включает/Отключает проверку на то,находится-ли игрок в дрифте или нет.
(Если поставить 0,то дрифт для указанного игрока будет отключен.)
Drift_SetPlayerCheck
PHP код:
native Drift_SetPlayerCheck(playerid = (-1),enable = 1);
Пример
PHP код:
public OnFilterScriptInit()
{
Drift_SetPlayerCheck(-1,true);//Включает проверку на всех игроков
Drift_SetPlayerCheck(55,false);//Отключает проверку для playerid 55
return 1;
}
Эта функция не возвращает никакого значения
Drift_GetPlayerCheck
PHP код:
native Drift_GetPlayerCheck(playerid = (0));
Пример
PHP код:
public OnFilterScriptInit()
{
new status = Drift_GetPlayerCheck(4);
//Код выше проверяет статус plyerid 4 на включенную или выключенную функцию проверки дрифта и записывает данные в переменную status.
return 1;
}
Эта функция возвращает статус, включен - 1, отключен - 0.
Включает/Отключает возможность дрифта задним ходом.
Включает/Отключает возможность дрифта задним ходом.
Drift_SetBackwardsCheck
PHP код:
native Drift_SetBackwardsCheck(enabled = 1,playerid =(-1));
Пример
PHP код:
public OnFilterScriptInit()
{
Drift_SetBackwardsCheck(true,-1);//Отключает дрифт задним ходом для всех игроков
Drift_SetBackwardsCheck(false,21);//Позволит playerid 21 дрифтовать задним ходом
return 1;
}
Эта функция не возвращает никакого значения
Drift_GetBackwardsCheck
PHP код:
native Drift_GetBackwardsCheck(playerid = 0);
Пример
PHP код:
public OnFilterScriptInit()
{
new status = Drift_GetBackwardsCheck(98);
//Код получает статус проверки у playerid 98 (false-отключена,true-включена)
return 1;
}
Эта функция возвращает статус проверки.
Смотрите раздел "DriftSet_DamageCheck" или "Проверка на изменение здоровья транспорта".
Смотрите раздел "DriftSet_DamageCheck" или "Проверка на изменение здоровья транспорта".
Drift_SetDriftMaxHealthLoose
PHP код:
native Drift_SetDriftMaxHealthLoose(Float:MaximalHealthLoose = 0.0,playerid = (-1));
Пример
PHP код:
public OnFilterScriptInit()
{
Drift_SetDriftMaxHealthLoose();
//Приведенный выше код установит на всех игроков вызов паблика OnPlayerDriftEnd если транспортное средство будет повреждено.
Drift_SetDriftMaxHealthLoose(20.0,44);
//Приведенный выше код установит кол-во макс. здоровья,что транспортное средство может потерять за удар для playerid 44.
return 1;
}
Эта функция не возвращает никакого значения.
Drift_GetDriftMaxHealthLoose
PHP код:
native Drift_GetDriftMaxHealthLoose(&Float:MaximalHealthLoose,playerid = (0));
Пример
PHP код:
public OnFilterScriptInit()
{
new Float:MaxLoose;
Drift_GetDriftMaxHealthLoose(MaxLoose,35);
//Код выше получает количество максимального здоровья, что транспортное средство может потерять за удар.
return 1;
}
Возвращает: This function returns the status, enabled - 1 (backwars drifting not allowed), disabled - 0 (backwards drifting allowed)
Разработчики
Gamer_Z
Pghpunkid
Incognito
Kyosaur
RyDeR`
Zeex
Rock_Ro
Nero_3D
Kyosaur
RyDeR`
Оф. тема
Ссылки
Плагин,инклуды,исходники,пробный ФС
Работы и т.п. by Gamer_Z
Wiki по плагину (Англ.)
Перевод,дополнение статьи:[ForD]
Специально для:Pro-Pawn.Ru
Копирование данной статьи без разрешения автора запрещено! by Salvacore