Zoxan_Scripter
Дебютант
Всем доброго времени суток. Я долго не мог понять почему не работают плавные шлагбаумы и вот когда нашел ответ решил помочь тем кто еще не знает.
И так. Вся проблема в том что когда вы пытаетесь изменить (R-x,R-y,R-z) координаты шлагбаум то бишь поднять его вам ещё нужно переместить хоть немного его по X,Y,Z. Это все происходит из за так званого "бага" в функции MoveDynamicObject.
Собственно приступим к делу:
1) ко всем define в начале мода добавляем:
Где "1" - количество шлагбаумов которое есть у вас на сервере.
2) Ко всем new там же в начале мода добавляем:
3) Ко всем forward там же в начале мода добавляем:
4) В конец мода вставляем код:
Где:
i - id шлагбаума. Пример: у нас есть масив Shlack[0] нам нужно с него взять цифру 0 и вводим туда;
Float:crx,Float:cry,Float:crz - координаты закрытого шлагбаума (выделены ниже красным);
Float:rx,Float:ry,Float:rz - координаты открытого шлагбаума (тоже выделены ниже красным);
tm - время в миллисекундах до его автоматического закрытия (если нужно чтобы он закрылся через 5-ть секунд то нужно вписать 5000);
CreateDynamicObject(968,-1572.18396, 658.76898, 6.82800, 0.00000, 270.00000, 270.00000 );
Затем в OnGameModeInit создаём наш шлагбаум:
К примеру мы хотим сделать открытие на команду (для тех у кого установлен zcmd плагин команда будет выглядеть именно так):
Строго не судите так как это мой первый урок. Спасибо за внимание.
И так. Вся проблема в том что когда вы пытаетесь изменить (R-x,R-y,R-z) координаты шлагбаум то бишь поднять его вам ещё нужно переместить хоть немного его по X,Y,Z. Это все происходит из за так званого "бага" в функции MoveDynamicObject.
Собственно приступим к делу:
1) ко всем define в начале мода добавляем:
PHP:
#define MAX_SHLACK 1
2) Ко всем new там же в начале мода добавляем:
PHP:
new bool:ShlackSost[MAX_SHLACK];
new Shlack[MAX_SHLACK];
PHP:
forward MoveShlack(i,Float:crx,Float:cry,Float:crz,Float:rx,Float:ry,Float:rz,tm);
PHP:
public MoveShlack(i,Float:crx,Float:cry,Float:crz,Float:rx,Float:ry,Float:rz,tm){
new Float:p[3];
GetDynamicObjectPos(Shlack[i], p[0], p[1], p[2]);
if(!ShlackSost[i]){
MoveDynamicObject(Shlack[i], p[0], p[1], p[2]-0.02,0.02,rx,ry,rz);
SetTimerEx("MoveShlack", tm, false, "dffffffdb",i,crx,cry,crz,rx,ry,rz,0,false);
ShlackSost[i] = true;
}else{
MoveDynamicObject(Shlack[i], p[0], p[1], p[2]+0.02,0.02,crx,cry,crz);
ShlackSost[i] = false;
}
return true;
}
i - id шлагбаума. Пример: у нас есть масив Shlack[0] нам нужно с него взять цифру 0 и вводим туда;
Float:crx,Float:cry,Float:crz - координаты закрытого шлагбаума (выделены ниже красным);
Float:rx,Float:ry,Float:rz - координаты открытого шлагбаума (тоже выделены ниже красным);
tm - время в миллисекундах до его автоматического закрытия (если нужно чтобы он закрылся через 5-ть секунд то нужно вписать 5000);
CreateDynamicObject(968,-1572.18396, 658.76898, 6.82800, 0.00000, 270.00000, 270.00000 );
Затем в OnGameModeInit создаём наш шлагбаум:
PHP:
Shlack[0] = CreateDynamicObject(968,-1572.18396, 658.76898, 6.82800, 0.00000, 270.00000, 270.00000);
PHP:
CMD:open(playerid, params[])
{
if(ShlackSost[0])return true;
MoveShlack(0,0.00000, 270.00000, 270.00000,0.0000, 350.0000, 270.0000,5000);
send(playerid, COLOR_GRAD1, " Вы открыли шлагбаум!");
return true;
}
Последнее редактирование:
