Использование динамической зоны
Всех приветствую дорогие читатели Pro-Pawn.Ru
Недавно приступил к помощи игрокам и созданиям мануалов. Просьба не судить строго, буду рад каждой помощи
Преимущество между моим кодом и кодом IsPlayerRangeOfPoint не большая. Вместо того чтобы нагружать сервер проверкой на нужное местоположение, проходит ежесекундная проверка Streamer, конечно можно сделать функцию, которая будет вызываться при нажатие ALT, он будет узнавать ваши координаты и проводить проверку, если вы не находитесь рядом с сферой, то будет происходить завершение.
Это лишь мои предположение, проверку она не проходило.
Теперь приступаем к коду изложенный мною.
enum AREAS
{
gExitHospital, // выход из больницы
// и тд
}
new g_areas[AREAS]; // переменная, которая в будущим будет присваивать нашу зону
new player_zone[MAX_PLAYERS char]; // переменная которая будет принимать ид территория на игрока
После переходим к пабликам как OnGameModeInit и OnPlayerEnterDynamic/OnPlayerLeaveDynamic
public OnGameModeInit()
{
g_areas[gExitHospital] = CreateDynamicSphere(/*Ваши координаты X,Y,Z, радиус, виртуальный мир, интерьер, -1 (ид игрока (то есть любой))*/);
return true;
}
public OnPlayerEnterDynamicArea(playerid,areaid)
{
if(areaid == g_areas[gExitHospital]) player_zone{playerid} = 1; // присваем
return true;
}
public OnPlayerLeaveDynamicArea(playerid,areaid)
{
player_zone{playerid} = 0; // очищаем
}
Теперь отправляемся к нашему паблику OnPlayerKeyStateChange
public OnPlayerKeyStateChange
{
switch(newkeys)
{
case KEY_WALK:
{
switch(player_zone{playerid})
{
case 1:
{
SetPlayerPos(playerid,/*устанавливаем свои координаты*/);
/*
Дальше убираем виртуальный мир и Т.Д
*/
}
default: return 0;
}
}
}
return true;
}
Код готов, если появятся вопросы либо исправить можно будет как то лучше, то напишите в теме, каждое предложение очень много стоит для меня
Благодарю всех за внимание