AMX MOD X
Четверг, 25.04.2024, 09:02:40



Приветствую Вас Гость | RSS
[ Главная ] [ [РЕШЕНА] Наилучший способ словить столкновение гранаты с ... - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: slogic, AlMod  
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » [РЕШЕНА] Наилучший способ словить столкновение гранаты с ... (точнее момент взрыва smokegrenade)
[РЕШЕНА] Наилучший способ словить столкновение гранаты с ...
slogicДата: Четверг, 07.12.2006, 00:04:31 | Сообщение # 1
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
У меня есть огромное желание исправить пару багов в metamod плагине AXN. Один из труднорешаемых связан с отловом самого первого столкновения с землей. Ведь именно в этом случае происходит выпускание газа. Или нет? Потом граната может отскачать далеко от этого газа. AXN работает по принципу - где граната - там и ядовитый газ, что неправильно и раздаражет, когда вроде бы находишься в облаке газа, а ты не задыхаешься.

Для этого использовать EntityThink и ловить изменение флагов?

Сообщение отредактировал slogic - Пятница, 26.01.2007, 02:12:21
 
VENДата: Четверг, 07.12.2006, 11:24:21 | Сообщение # 2
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Quote
связан с отловом самого первого столкновения с землей. Ведь именно в этом случае происходит выпускание газа. Или нет?
Нет, касание - достаточное, но не необходимое требование - должно пройти какое-то время после приземления.

На мой взгляд, самый точный способ - отлов второго "events/createsmoke.sc" PlaybackEvent для конкретной entity. Вычислить entity index можно через origin, который передается hook.

Пример элементарного PlaybackEvent hook в "Teleport Smoke Grenade"

Сообщение отредактировал VEN - Четверг, 07.12.2006, 12:13:02
 
AlModДата: Четверг, 07.12.2006, 11:48:14 | Сообщение # 3
Сонный кодер
Группа: Админы
Сообщений: 600
Репутация: 27
Статус: Не в сети
А можно просто посчитать примерно и поставить через сет_таск

 
VENДата: Четверг, 07.12.2006, 12:24:10 | Сообщение # 4
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Как я отметил, самый точный способ, т.е. с точностью до фрэйма, будет именно отлов второго "events/createsmoke.sc" PlaybackEvent, ведь именно это событие заставляет прорисовывать дым на клиенте.
На втором месте по точности будет отлов изменения значения в соответствующем pvPrivateData offset'е. Но тут есть проблема - на разных платформах offset'ы обычно немного сдивинуты. Все остальные способы будут еще менее точные, в частности set_task, у которого предел точности 0.1 сек.
 
slogicДата: Четверг, 07.12.2006, 12:28:07 | Сообщение # 5
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
set_task - это ламеровский способ, когда есть события. Если нет событий, то да - тогда set_task(0.1, ...). Но такой плагин, imho, луше вообще не издавать.

Хорошо, а может есть способ определить, находишьсяли ты в дыме или нет? Или это чисто клиентская фишка и нифига тут не узнаешь? Можно же определить в точке какой entity в ней находится (это утверждение). Наличие дыма можно примерно так же определить?

 
VENДата: Четверг, 07.12.2006, 13:42:51 | Сообщение # 6
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Если нет событий, то StartFrame с предельной оптимизацией. :]
set_task в таких случаях я тоже не признаю - точность довольна низкая.

Не все вопросы понял, но могу предположить, что в случае наличия у нас исходного кода "events/createsmoke.sc", можно (пере)просчитать физику клиентского дыма на сервере.

Добавлено (2006-12-07, 1:25 Pm)
---------------------------------------------

В ином случае результаты вычислений будут довольно грубые.

Добавлено (2006-12-07, 1:42 Pm)
---------------------------------------------
О каком Game Mod речь? Я вообще-то про CS говорил.

Сообщение отредактировал VEN - Четверг, 07.12.2006, 13:27:02
 
AlModДата: Четверг, 07.12.2006, 14:48:12 | Сообщение # 7
Сонный кодер
Группа: Админы
Сообщений: 600
Репутация: 27
Статус: Не в сети
Думаю можно, обратись к исходному коду SH_Fartman.sma в супер-херо моде

 
VENДата: Четверг, 07.12.2006, 15:09:32 | Сообщение # 8
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Посмотрел sh_fartman.sma - никакого особенного метода не используется, обычный хардкодинг радиуса дыма.
 
slogicДата: Четверг, 07.12.2006, 15:32:52 | Сообщение # 9
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
Quote (VEN)
Не все вопросы понял, но могу предположить, что в случае наличия у нас исходного кода "events/createsmoke.sc", можно (пере)просчитать физику клиентского дыма на сервере.

Нет, я имел в виду тукнуть в точку пространства и определить, есть там дым или нет - аналог point_contents().

Quote (VEN)
О каком Game Mod речь?

CS.

 
VENДата: Четверг, 07.12.2006, 16:06:43 | Сообщение # 10
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Quote
я имел в виду тукнуть в точку пространства и определить, есть там дым или нет
Не получится, т.к. smokegren дым - это, скорее всего, clientside tempentity msg.


Сообщение отредактировал VEN - Четверг, 07.12.2006, 16:09:36
 
slogicДата: Пятница, 15.12.2006, 17:30:33 | Сообщение # 11
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
Я посмотрел вчера подробнее. Граната взрывается всегда через определенный промежуток времени после первого столкновения с землей. Где-то около секунды или чуть больше. Т.о. после столкновения можно включить set_task(1.0,...) и точнее определить центр дымовой завесы. Погрешность будет видна даже на глаз если после первого столкновения граната начала падать с большой высоты или вниз по лестнице. Осталось найти такую карту.

Еще есть одна мысль. В момент выпускания газа граната приобретает ускорение. Только надо делать анализ свойств, чтобы узнать, можно ли со 100% вероянтностью отличить это событие от свободного падения.

Сообщение отредактировал slogic - Пятница, 15.12.2006, 17:31:11
 
slogicДата: Четверг, 04.01.2007, 18:25:56 | Сообщение # 12
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
В общем все на самом деле проще. Достаточно словить FM_EmitSound и сравнить имя аудио файла, который воспроизводит звук соотв. взрыва.

Источник: плагин Flashbang Dynamic Light.

Теперь осталось добавить, что тема не соответсвовала задаче. Нужно было словить именно момент взрыва гранаты.

 
VENДата: Четверг, 04.01.2007, 20:27:47 | Сообщение # 13
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Я просто сразу не понял из твоего поста, что ты хочешь использовать set_task именно, чтобы определить момент взрыва гранаты. А сейчас перечитал и понял, и уже было хотел предложить EmitSound метод, но вижу, ты уже сам его нашел. Я сам всегда использую такой метод (возможно, даже это был я, кто впервые предложил его использовать).

Итак, подводим итоги:

- чтобы определить момент начала выпуска дыма из гранаты, "ловим" второй "events/createsmoke.sc" PlaybackEvent для конкретной entity (вычислить entity index можно через origin, который передается в handler, пример элементарного PlaybackEvent hook'a см. в "Teleport Smoke Grenade")

- чтобы определить момент взрыва гранаты, "ловим" "weapons/sg_explode.wav" EmitSound (пример см. в "Teleport Smoke Grenade")

Имена звуковых файлов, проигрываемых при взрывах гранат всех типов:

/* HE Grenade
weapons/debris1.wav
weapons/debris2.wav
weapons/debris3.wav */

/* Flashbang
weapons/flashbang-1.wav
weapons/flashbang-2.wav */

/* Smoke Grenade
weapons/sg_explode.wav */

 
slogicДата: Воскресенье, 07.01.2007, 23:08:20 | Сообщение # 14
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
Quote (VEN)
чтобы определить момент начала выпуска дыма из гранаты, "ловим" второй "events/createsmoke.sc"

Не понял, EmitSound для дымовой гранаты - недостаточное условие? Я доработал AXN. Меня все устраивает.
 
VENДата: Понедельник, 08.01.2007, 00:13:18 | Сообщение # 15
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Quote
недостаточное условие?
Дым создается сразу перед издаванием звука, поэтому PlaybackEvent hook наиболее приемлемый метод для многих случаев. Например, в "Teleport Smoke Grenade" мне приходится блокировать дым, так как даже удаляя grenade entity в EmitSound, одна "дыминка" все равно проскакивает, причем, хитрым образом - origin абсолютно не имеет отношения к месту взрыва, == {0,0,0} - заметил абсолютно случайно. Т.о., все зависит от целей. Если не нужно блокировать дым, то думаю в подавляющем большинстве случаев подойдет EmitSound hook.


Сообщение отредактировал VEN - Понедельник, 08.01.2007, 00:15:03
 
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » [РЕШЕНА] Наилучший способ словить столкновение гранаты с ... (точнее момент взрыва smokegrenade)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

AMX Mod X Russian Community © 2006-2024