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

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

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

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

Создание чекпоинтов.

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

Axel_Fouley

Изучающий
Пользователь
Регистрация
3 Дек 2010
Сообщения
666
Лучшие ответы
0
Репутация
90
В данном уроке поговорим о том, как создавать и использовать чекпоинты.
Для начала рассмотрим как использовать обычные чекпоинты. Что для этого необходимо:
Функции:
а)SetPlayerCheckpoint(playerid,Float:x,Float:y,Float:z,Float:size); - Создает маркер на установленном месте, и нужного размера.
Параметры:
playerid ID игрока, для которого создается чекпоинт
Float:x Х-координата
Float:y Y-координата
Float:z Z-координата
Float:size Размер чекпоинта.
б)IsPlayerInCheckpoint(playerid) - проверяет, находится ли игрок в чекпоинте
Параметры:
playerid - IDпроверяемого игрока.
в)DisablePlayerCheckpoint(playerid); - Функция прячет чекпоинт и дезактивирует его.
Параметры:
playerid - ID игрока, для которого чекпоинт должен исчезнуть.
Колбэки:
OnPlayerEnterCheckpoint(playerid) - срабатывает когда игрок входит в чекпоинт.
OnPlayerLeaveCheckpoint(playerid) - срабатывает в момент выхода игрока из чекпоинта

Стандартный код использования Чекпоинта:
PHP:
#include <a_samp> 
public OnPlayerSpawn(playerid) 
{ 
SetPlayerCheckpoint(playerid,1232.122,1235.552,10.223423,3.0);// Координаты взяты из головы, только для примера. 
return 1; 
} 

public OnPlayerEnterCheckpoint(playerid) 
{ 
GivePlayerMoney(playerid,500); 
SendClientMessage(playerid,0x00FF00FF,"-! Чувак, вот тебе 500$"); 
DisablePlayerCheckpoint(playerid);// Если мы хотим, чтобы чекпоинт после этого исчез, то вставляем эту функцию. 
return 1; 
}
В данном скрипте при заходе на чекпоинт игроку будет даваться 500$ и чекпоинт исчезнет. Но в большинстве случаев, большинству необходимо, чтобы разные чекпоинты выполняли разные действия. Сейчас разберем следующий скрипт:
PHP:
#include <a_samp> 

new pCheckpoint[MAX_PLAYERS];// Массив, который будет содержать какое действие должен выполнять действующий чекпоинт. 
enum // Воспользуемся конструкцей enum для создания состояния чекпонта, т.е. действующий чекпоинт должен давать деньги, или здоровье к примеру 
{ 
CHECKPOINT_MONEY, 
CHECKPOINT_HEALTH 
} 
public OnPlayerCommandText(playerid,cmdtext[]) // для данного примера, чекпоинты будут вызываться командой 
{ 
if(!strcmp(cmdtext,"/checkmoney",true)) 
{ 
SetPlayerCheckpoint(playerid,1232.122,1235.552,10.223423,3.0);// Координаты взяты из головы, только для примера. 
pCheckpoint[playerid]=CHECKPOINT_MONEY;// Т.е. мы скрипту даем понять, что чекпоинт должен давать деньги 
return 1; 
} 
if(!strcmp(cmdtext,"/checkhealth",true)) 
{ 
SetPlayerCheckpoint(playerid,1232.122,1235.552,10.223423,3.0);// Координаты взяты из головы, только для примера. 
pCheckpoint[playerid]=CHECKPOINT_HEALTH;// Т.е. мы скрипту даем понять, что чекпоинт должен давать здоровье 
return 1; 
} 
return 1; 
} 

public OnPlayerEnterCheckpoint(playerid) 
{ 
switch(pCheckpoint[playerid]) 
{ 
case CHECKPOINT_MONEY: 
{ 
GivePlayerMoney(playerid,500); 
SendClientMessage(playerid,0x00FF00FF,"-! Чувак, вот тебе 500$"); 
DisablePlayerCheckpoint(playerid);// Если мы хотим, чтобы чекпоинт после этого исчез, то вставляем эту функцию. 
return 1; 
} 
case CHECKPOINT_HEALTH: 
{ 
new Float:health; 
GetPlayerHealth(playerid,health); 
SetPlayerHealth(playerid,health+10.0); 
SendClientMessage(playerid,0x00FF00FF,"-! Чувак, вот тебе не много здоровья"); 
DisablePlayerCheckpoint(playerid);// Если мы хотим, чтобы чекпоинт после этого исчез, то вставляем эту функцию. 
return 1; 
} 
} 
return 1; 
}
Но опять же, скрипт будет выполняться, только в момент входа игрока в чекпоинт. Сейчас мы попробуем сделать скрипт, который будет давать либо здоровье либо деньги, по желанию использующего.
PHP:
#include <a_samp> 
forward inCheckpoint(); 
new pCheckpoint[MAX_PLAYERS];// Массив, который будет содержать какое действие должен выполнять действующий чекпоинт. 
enum // Воспользуемся конструкцей enum для создания состояния чекпонта, т.е. действующий чекпоинт должен давать деньги, или здоровье к примеру 
{ 
CHECKPOINT_MONEY, 
CHECKPOINT_HEALTH 
} 
public OnGameModeInit() 
{ 
SetTimer("inCheckpoint",10000,true);// 1 раз в 10 секунд таймер будет выполняться 
return 1; 
} 
public OnPlayerCommandText(playerid,cmdtext[]) // для данного примера, чекпоинты будут вызываться командой 
{ 
if(!strcmp(cmdtext,"/checkmoney",true)) 
{ 
SetPlayerCheckpoint(playerid,1232.122,1235.552,10.223423,3.0);// Координаты взяты из головы, только для примера. 
pCheckpoint[playerid]=CHECKPOINT_MONEY;// Т.е. мы скрипту даем понять, что чекпоинт должен давать деньги 
return 1; 
} 
if(!strcmp(cmdtext,"/checkhealth",true)) 
{ 
SetPlayerCheckpoint(playerid,1232.122,1235.552,10.223423,3.0);// Координаты взяты из головы, только для примера. 
pCheckpoint[playerid]=CHECKPOINT_HEALTH;// Т.е. мы скрипту даем понять, что чекпоинт должен давать здоровье 
return 1; 
} 
return 1; 
} 

public inCheckpoint() 
{ 
for(new idx=GetMaxPlayers();idx>=0;--idx) 
{ 
if(IsPlayerConnected(idx)&&IsPlayerInCheckpoint(idx)) 
{ 
switch(pCheckpoint[idx]) 
{ 
case CHECKPOINT_MONEY: 
{ 
GivePlayerMoney(idx,500); 
SendClientMessage(idx,0x00FF00FF,"-! Чувак, вот тебе 500$"); 
return 1; 
} 
case CHECKPOINT_HEALTH: 
{ 
GetPlayerHealth(playerid,health); 
SetPlayerHealth(playerid,health+10.0); 
SendClientMessage(idx,0x00FF00FF,"-! Чувак, вот тебе не много здоровья"); 
return 1; 
} 
} 
} 
} 
return 1; 
}
А теперь рассмотрим гоночные чекпоинты.
Функции:
а)SetPlayerRaceCheckpoint(playerid, type, Float:x, Float:y, Float:z, Float:nextx, Float:nexty, Float:nextz, Float:size) - Создает гоночный чекпоинт
Парамерты:
playerid - ID для которого чекпоинт длжен появиться
type - Тип чекпоинта.0-Обычный, 1-Финишный, 2-Пустой чекпоинт(без стрелок внутри), 3-Воздушный обычный, 4-Воздушный финишный
Float:x - X-Координата
Float:y - Y-Координата
Float:z - Z-Координата
Float:nextx - X-Координата следующего чекпоинта, т.е. куда будет показываться стрелка.
Float:nexty - Y-Координата следующего чекпоинта, т.е. куда будет показываться стрелка.
Float:nextz - Z-Координата следующего чекпоинта, т.е. куда будет показываться стрелка.
Float:size - размер(Диаметр чекпоинта)
б)DisablePlayerRaceCheckpoint(playerid); - деактивирует и скрывает гоночный чекпоинт
Колбэки:
в)IsPlayerInRaceCheckpoint(playerid) - Проверяет, находится ли игрок в гоночном чекпоинте
а)OnPlayerEnterRaceCheckpoint(playerid) - Срабатывает когда игрок входит в гоночный чекпоинт
б)OnPlayerLeaveRaceCheckpoint(playerid) - Срабатывает когда игрок покидает гоночный чекпоинт

Простой пример скрипта:
PHP:
#include <a_samp> 
public OnPlayerSpawn(playerid) 
{ 
SetPlayerRaceCheckpoint(playerid,2,1233.1222,1456.7442,15.1244,0.0,0.0,0.0,5.0);// Координаты взяты из головы. Координаты следующего чекпоинта 0.0, потому что тип чекпоинта 2, стрелки все равно не будет. 
return 1; 
} 
public OnPlayerEnterRaceCheckpoint(playerid) 
{ 
SendClientMessage(playerid,0xff0000ff,"It work."); 
DisablePlayerRaceCheckpoint(playerid); 
return 1; 
}
Данный скрипт будет выдавать текст ,"It work.", и исчезнет гоночный чекпоинт. Сейчас мы попробуем написать простеший скрипт гонки:
PHP:
#include <a_samp> 
new race[MAX_PLAYERS];// Массив будет отслеживать на каком этапе игрок. 
new Float:Race[3][6]= { 
{12.1234,15.5112,20.2222,15.2122,9.2322,16.2322}, 
{15.2122,9.2322,16.2322,18.1233,7.1222,14.0002}, 
{18.1233,7.1222,14.0002,0.0,0.0,0.0} 
};// Массив с этапами гонки, в данномпримере всего 3 этапа, но вы можете сделать больше по своему желанию 
public OnPlayerCommandText(playerid, cmdtext[]) 
{ 
if(!strcmp(cmdtext,"/racestart",true)) 
{ 
race[playerid]=0; 
SetPlayerRaceCheckpoint(playerid,2,Race[race[playerid]][0],Race[race[playerid]][1],Race[race[playerid]][2],0.0,0.0,0.0,5.0);// Координаты следющего чекпоинта 0.0 потому что тип чекпонита 2. 
return 1; 
} 
return 1; 
} 

public OnPlayerEnterRaceCheckpoint(playerid) 
{ 
race[playerid]++; 
if(race[playerid]<sizeof(Race))SetPlayerRaceCheckpoint(playerid,0,Race[race[playerid]][0],Race[race[playerid]][1],Race[race[playerid]][2],Race[race[playerid]][3],Race[race[playerid]][4],Race[race[playerid]][5],5.0);// А тут присутствуют координаты следующего чекпоинта, потому что тип чекпоинта 0. 
else if(race[playerid]==sizeof(Race)) DisablePlayerRaceCheckpoint(playerid); 

return 1; 
}
Вот это собственно все, что я хотел Вам передать.
Автор-Morino_Reigan сайт: samp-rus.com
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу