[1.1] Модуль урона и дружественного огня

  • Автор темы Автор темы SlowSuicide
  • Дата начала Дата начала

SlowSuicide

Middle Developer
Скриптер
Хотел поинтересоваться касаемо идеи реализации изменения стандартного урона GTA на собственный список (на текущий момент есть пара мыслей но в них не уверен). Существует ивент на получение урона OnPlayerDamage (на серверной стороне), в данном случае не удастся узнать какой игрок нанёс урон, из какого оружия для переопределения урона. В качестве аргументов у данного ивента выступает сам игрок получивший дамаг, потерянное здоровье и броня.

На клиенте же существуют ивенты: OutgoingDamage (описание вики: Срабатывает при повреждении, которое объект собирается нанести другому объекту) и IncomingDamage (Срабатывает при нанесении урона игроку). Вероятно резоннее использовать OutgoingDamage, однако тогда стоит другой вопрос: как отменить/запретить/привести значения урона к нулю игроку, находящийся в твоей команде при условии, если фракция прикреплена к игроку на серверной части.
И как всё же корректно попытаться использовать ивент нанесения дамага?
 
Решение
В результате подведения итогов текущих задач:
- В рамках данной темы была решена проблема настройки урона для оружия (протестировано, работает);
- Функции addRelationshipGroup, addRelationshipGroup работают только на НПС (PEDS), на игроков эти функции не распространяются и НЕ РАБОТАЮТ. Пришлось придумывать костыль и реализовывать данный модуль с нуля самостоятельно. В результате удалось решить проблему. Здесь я не стану описывать весь свой код, однако опишу главные моменты от которых можно отталкиваться:

Работал я исключительно с классом entity, для entity и для localplayer я добавил новую переменную team (entity.team=numteam, localplayer.team=numteam)

Присваивание команды сущности (entity) происходит в момент когда сущность входит в...
В результате подведения итогов текущих задач:
- В рамках данной темы была решена проблема настройки урона для оружия (протестировано, работает);
- Функции addRelationshipGroup, addRelationshipGroup работают только на НПС (PEDS), на игроков эти функции не распространяются и НЕ РАБОТАЮТ. Пришлось придумывать костыль и реализовывать данный модуль с нуля самостоятельно. В результате удалось решить проблему. Здесь я не стану описывать весь свой код, однако опишу главные моменты от которых можно отталкиваться:

Работал я исключительно с классом entity, для entity и для localplayer я добавил новую переменную team (entity.team=numteam, localplayer.team=numteam)

Присваивание команды сущности (entity) происходит в момент когда сущность входит в зону видимости игрока (ивент mp.events.add("entityStreamIn", (entity) => {}).
Проверка принадлежности команды сущности к команде игрока происходит в ивенте render, и функции mp.game.player.isFreeAimingAtEntity(player.handle) (функция возращает true если игрок нацелен на другую сущность) - в данном случае уже проверяем в какой команде сущность а в какой игрок и блокируем урон огневой - mp.game.invoke("0x5E6CC07646BBEAB8", localplayer, true); (требуется ознакомиться с нативными функциями https://cdn.rage.mp/public/natives/). Так же блокировка ближнего боя контролируется функцией mp.game.controls.disableControlAction - ознакомиться можно на ВИКИ рейджа. Надеюсь данная инфа поможет кому-то. Спасибо за внимание, задачу считаю решённой
 
Последнее редактирование:
Решение
Надеюсь когда-нибудь будет более простой способ выключать friendly fire :)
 
Назад
Верх