dc_movobj - управление объектами ворот, шлагбаумов, дверей
Всем привет.
При разработке своего мода вам наверняка приходилось иметь дело с созданием передвижных дверей, ворот и/или шлагбаумов.
Что обычно для этого нужно (помимо создания самого объекта)?
- Сделать перемещение объекта с помощью MoveObject().
- Установить таймер.
- Сделать таймерную функцию, которая возвращает объект на исходные координаты.
- А что, если игрок, например, захочет, чтобы ворота оставались открытыми подольше? Возможно, стоит как-то сделать задержку закрытия при повторном нажатии клавиши или вводе команды? (К примеру, уничтожить старый таймер и установить новый - но тогда ID таймера нужно заранее сохранять куда-то.)
И, делая всё это, вы наверняка задумывались: "Неужели нельзя сделать всё это как-то проще?" Можно. Именно для этого и предназначен сегодняшний релиз.
Описание
Основная цель инклуда dc_movobj.inc - упростить управление временно перемещаемыми объектами. Установка таймера, возвращение объекта на исходные координаты, продление времени открытия - всё это инклуд берёт на себя, от Вас требуется только вызвать функцию MoveObjectTemporarily().
Для сравнения рассмотрим перемещение объекта ворот обычным методом:
MoveObject(lspd_door
, 246.4375, 72.4375, 1006.5, 3.0); // ...
forward GateClose();
public GateClose()
{
return MoveObject(lspd_door
, 246.4375, 72.4375, 1004.25, 3.0); }
Перемещение с помощью dc_movobj:
MoveObjectTemporarily(lspd_door, 3000, 246.4375, 72.4375, 1006.5, 3.0);
С использованием инклуда всё, что вам остаётся сделать - это вызвать одну функцию, остальное инклуд сделает за вас.
Использование
- Подключить инклуд.
- Если объекты ворот/дверей/шлагбаумов статические (т.е. созданы не с помощью стримера), перед подключением инклуда добавить объявление "DC_MOVOBJ_DONT_USE_STREAMER", чтобы сообщить инклуду, что от него требуется работа со статическими объектами.
#define DC_MOVOBJ_DONT_USE_STREAMER
#include <dc_movobj>
Если же вам требуется работа с динамическими объектами, то ничего объявлять не нужно, по умолчанию инклуд уже работает с объектами стримера.
- Для временного перемещения объектов использовать функцию MoveObjectTemporarily().
Функция MoveObjectTemporarily():
Параметры:
- objectid - ID перемещаемого объекта;
- time - время (в миллисекундах), по истечению которого объект возвращается на исходные координаты;
- Float:x, Float:y, Float:z - координаты, на которые требуется временно переместить объект;
- Float:speed - скорость перемещения (ед./сек.);
- Float:rx, Float:ry, Float:rz - углы поворота объекта на новых координатах.
Возвращаемые значения:
- DC_MOVOBJ_ERROR (0) - неудачное выполнение: указан неправильный ID объекта, или же объект уже возвращается на исходные координаты;
- DC_MOVOBJ_MOVED (1) - успешно начато перемещение объекта на новые координаты;
- DC_MOVOBJ_DELAYED (2) - объект уже был временно перемещён, поэтому с повторным вызовом функции было продлено время нахождения объекта на новых координатах.
Пример использования (простой):
MoveObjectTemporarily(lspd_door, 5_000, 246.4375, 72.4375, 1006.5, 2.0);
Ещё один пример (посложнее, с использованием возвращаемого значения):
new moveresult = MoveObjectTemporarily(lspd_door, 5_000, 246.4375, 72.4375, 1006.5, 2.0);
if (moveresult == DC_MOVOBJ_MOVED)
else if (moveresult == DC_MOVOBJ_DELAYED) // дверь уже была открыта
Скачать: https://www.dropbox.com/s/3orqz11ddj...ovobj.zip?dl=1
Автор: Daniel_Cortez
Специально для
Pro-Pawn.ru
Копирование данной статьи на других ресурсах без разрешения автора запрещено!