Welcome to U.A.C. [O.S.A.]
login / register
Status: Guest
Архивы форума | iddqd.ru
Wolf 3D
ПравилаПравила ПоискПоиск
18+
Тема для новичков. Вопросы по маппингу/моддингу - любые! Пред.  1, 2, 3 ... , 195, 196, 197  След.
   Список разделов - Местечко мапперов и моддеров - Тема для новичков. Вопросы по маппингу/моддингу - любые!Ответить
АвторСообщение
Void Weaver
- 1st Lieutenant -
Next rank: = 1st Lieutenant = after 166 points
1674

Doom Rate: 1.83

Posts quality: +494
Ссылка на пост №3901 Отправлено: 16.04.19 18:17:37
Мог бы сразу вынести вердикт касаемо декора, а не снова приплетать зскрипт. )

Про здоровье не понял. Мой шилд это 1 актор с единым запасом хп со всех сторон. И более того, на данный момент он никому не отвечает поскольку я ещё не решил какова должна быть в итоге реакция шилда на входящий урон.

ZZYZX пишет:
и поведение вида - если любого монстра ударило щитом, насильственно переставить ему таргет.
Это-то НЕ проблема, проблема в том что просто так шилд НЕ кусают а таргетятся на игрока; если же скрыть игрока инвиз флагом например, то мобы вообще перестанут кого бы то ни было чейсить.
Я ставил рефлектив флаги щиту и в этом случае мобы с комбо атаками переагривались непосредственно на щит, но это совершенно не работает с пинки например, плюс надо постоянно соблюдать дистанцию чтобы монстр с комбо-атакой не подобрался через щит слишком близко к игроку.

ZZYZX пишет:
Вообще монстры агрятся на любое + FRIENDLY, но сомневаюсь что тебе это поможет, там по идее всё равно игрок в приоритете, будут баги.
Регулярные мобы никогда не отвечают флагу ФРЕНДЛИ, пока последние не нападут сами.

ZZYZX пишет:
Ещё на зскрипте можно определять дамаг по игроку и переносить его на щит. DamageMobj если что.
Хороший костыль, да и виртуально возможный на декоре с помощью алгоритма Смертоносца. Вот только:
а) придётся править самого игрока, что совсем не труЪ для единичной волыны. :/
б) это не труЪ редирект урона, а только эмуляция.
1 7 1
ZZYZX
= Colonel =
Next rank: - Commissar - after 16 pointsМодератор форума
4874

Doom Rate: 1.74

Posts quality: +1312
Ссылка на пост №3902 Отправлено: 17.04.19 00:08:23
Void Weaver пишет:
Про здоровье не понял. Мой шилд это 1 актор с единым запасом хп со всех сторон. И более того, на данный момент он никому не отвечает поскольку я ещё не решил какова должна быть в итоге реакция шилда на входящий урон.

а. Я думал много маленьких. Тогда сделай много маленьких, и пусть щит естественным образом угасает при столкновении с монстрой или ракетами ) По частям.

Кстати. А монстры активируют BUMPSPECIAL?
https://zdoom.org/wiki/Actor_properties#Activation

Сделай щит непроницаемым для монстров и пусть в него тыкаются. Каждый тычок снимает хп.

Рейтинг сообщения: +1, отметил(и): Void Weaver
2 2 1
Void Weaver
- 1st Lieutenant -
Next rank: = 1st Lieutenant = after 166 points
1674

Doom Rate: 1.83

Posts quality: +494
Ссылка на пост №3903 Отправлено: 17.04.19 00:20:56
Как-то не очень - чревато образованием дыр, плюс, будет более ресурсоёмким.
-----
Полуркав здум форум внезапно узнал что выполнение мили зависит от "дальности зрения" монстра. Тогда возникает такой вопрос: можно ли на декоре временно извне заблочитьпонизить обзор монстра?

Добавлено спустя 9 часов 36 минут 8 секунд:

ZZYZX пишет:
Кстати. А монстры активируют BUMPSPECIAL?
https://zdoom.org/wiki/Actor_properties#Activation
Грэйт Сэнкс, получилось! ^_^
Правда небезупречно. Если НЕ монстр натыкается на щит а сам щит НА монстра, то THINGSPEC_MonsterTrigger|THINGSPEC_TriggerTargets естественно не срабатывают а оставшиеся флаги это не фиксят.

И ещё я так и не понял как активировать спешэлы через эту байду. Это что, надо прописывать экшн_спешелы в отдельном стэйте "Active:" внутри актора или как?
И чем отличаются триггер от активатора?

ZZYZX пишет:
Сделай щит непроницаемым для монстров
В смысле через "Activation" или как?
1 7 1
ZZYZX
= Colonel =
Next rank: - Commissar - after 16 pointsМодератор форума
4874

Doom Rate: 1.74

Posts quality: +1312
Ссылка на пост №3904 Отправлено: 17.04.19 10:24:00
Если и так работает то никак. А вообще через species.

Рейтинг сообщения: +1, отметил(и): Void Weaver
2 2 1
Void Weaver
- 1st Lieutenant -
Next rank: = 1st Lieutenant = after 166 points
1674

Doom Rate: 1.83

Posts quality: +494
Ссылка на пост №3905 Отправлено: 23.04.19 09:43:42
1. Чем регулируется длительность A_GenericFreezeDeath?
2. Если этот параметр хардкодед то каким способом можно прервать извне действие ф-ции, кроме как принудительным переводом актора в другой стэйт (боли например)?
3. Как вернуть актору оригинальную палитру (обнулить трансляцию) после прекращения действия A_GenericFreezeDeath? Т. е. я в курсе насчёт A_SetTranslation и Thing_SetTranslation, но я хз какой стринг\значения нужно вписывать для возврата каждому актору его исходных цветов.

EDIT:
Скрытый текст:

Поясняю дабы не было непоняток: ф-ция вызывается живым актором через кастомитем:
Actor Freezer : CustomInventory
{
+INVENTORY.ALWAYSPICKUP
Inventory.MaxAmount 0
States
{
Pickup:
"####" "#" 0 A_GenericFreezeDeath
Stop
}
}
Т. е. по истечении пресловутой длительности ф-ции, актор "размораживается" и действует дальше как ни в чём ни бывало. Но к сожалению исходная палитра не восстанавливается. Также актор может быть принудительно "разморожен" при переходе в пэйн.

1 7 1
JSO x
- Sergeant Major -
Next rank: = Sergeant Major = after 70 points
530

Doom Rate: 2.45

Posts quality: +186
Ссылка на пост №3906 Отправлено: 23.04.19 18:56:09
С достаточной точностью могу только на третий пункт ответить: пишешь в TRNSLATE строку 'Normal = "0:0=0:0"' и в параметр A_SetTranslation пишешь "Normal", либо прописываешь "0:0=0:0" любым другим способом.

Первый -- никак, если ты ни в какую не хочешь использовать ZScript, так как там его код находится в открытом доступе по пути "\zscript\shared\ice.txt" (в qzdoom.pk3, v2.2pre). Через Decorate изменить невозможно, через ZScript проще всего написать свою на основе той, так как переопределить у тебя её не удастся.

Второй пункт -- смотри ответ на первый.

Рейтинг сообщения: +1, отметил(и): Void Weaver
1 5
ZZYZX
= Colonel =
Next rank: - Commissar - after 16 pointsМодератор форума
4874

Doom Rate: 1.74

Posts quality: +1312
Ссылка на пост №3907 Отправлено: 23.04.19 20:12:18
В теории можно на ацс сделать имитацию, как я сделал имитацию заморозки из Duke Nukem ранее.
Морозишь актора через deactivate, меняешь ему палитру, ждёшь, убиваешь, потом обратно. Если игрок то ещё TOTALLYFROZEN добавить.
Ацс запускать из итема, который и так даётся.

Я надеюсь ацс для тебя не настолько отвратителен?)

Рейтинг сообщения: +1, отметил(и): Void Weaver
2 2 1
Void Weaver
- 1st Lieutenant -
Next rank: = 1st Lieutenant = after 166 points
1674

Doom Rate: 1.83

Posts quality: +494
Ссылка на пост №3908 Отправлено: 23.04.19 22:50:57
JSO x
Сэнкс за трансляцию. ^_^
И еяпп, то Граф подтверждает твои слова: у A_(Generic)FreezeDeath имеется собственный внутренний таймер с небольшой рандомизацией, который нельзя ничем контролировать извне поскольку по умолчанию оный таймер управляется только через летальную ф-цию A_FreezeDeathChunks.
Ну или таки "размораживать" актор путём его насильственного перевода в другой стэйт.

ZZYZX
Ацс тоже ересь, но не столь богомерзкая по сравнению с зскриптом.
Уже делал такое на декоре, но через +FORCEPAIN +RIPPER миссиль с A_Countdown без (Де)\Активэйт.
----------
В общем вопрос был не столь в том "как сэмулировать временную заморозку" (хотя итоговая цель именно такова), а в том "как именно работает A_GenericFreezeDeath". Просто эта ф-ция выглядела столь соблазнительно своей компактностью что грех было не попробовать поэкспериментировать. )
1 7 1
Void Weaver
- 1st Lieutenant -
Next rank: = 1st Lieutenant = after 166 points
1674

Doom Rate: 1.83

Posts quality: +494
Ссылка на пост №3909 Отправлено: 29.04.19 19:35:58
1. Актор стреляет Рельсой в рандомную цель.
2. У него есть сиблинги (siblings, - акторы у которых один и тот же AAPTR_MASTER поинтер).
Вопрос: как прописать на декоре (можно в анон ф-циях) чтобы сиблинги игнорировали ту же цель, т. е. чтобы её видел только актор атаковавший первым? Причём убийство сиблингов (A_KillSiblings) не допустимо, они должны оставаться живы и выбирать другие "не занятые" цели.
1 7 1
ZZYZX
= Colonel =
Next rank: - Commissar - after 16 pointsМодератор форума
4874

Doom Rate: 1.74

Posts quality: +1312
Ссылка на пост №3910 Отправлено: 30.04.19 01:04:12
Мы тут посовещались в дискорде немного и пришли к выводу что тебе всё же нужен зскрипт :oops:

Хотя очень примитивный способ это сделать — сделай итем какой-нибудь, и давай его цели монстра.
Когда цель меняется или монстр умирает то обязательно нужно забрать итем (иначе всё сломается и появятся цели на которые не нападает НИКТО).

После этого делаешь A_Look и если у цели есть этот итем (соответственно его кто-то затаргетил) то не нападаешь на него и переводишь своего актора обратно в Spawn, пусть дальше врагов ищет.
Но мне кажется это будет чревато прыжками из стейта в стейт (если у тебя стейт где врага ищут анимирован)
Соответственно если ты делаешь A_Look и у цели нет итема, то ты переходишь в стейт See и там эта проверка делаться не должна (иначе монстр будет мешать сам себе)

Для отслеживания смерти самого целевого монстра я думаю нужен ацс, который будет запускаться итемом и следить за здоровьем "своей" цели. Если упало до 0 — стоп скрипта и удаляем итем.
Этот же скрипт будет вешать на цель в TRACER указатель на мастера монстра, который его атакует в данный момент.
Это нужно чтобы если кого-то реснет арчвайл, его опять взяли в цель.

Кроме итема необходимо назначить мастеру TID (для примера 16000, но вообще лучше юзать UniqueTID) и при выборе цели сверять следующее:
(ацс)
script "CheckIfTargetedByCurrentGroup" (int needTid) // ACS_NamedExecuteWithResult("CheckIfTargetedByCurrentGroup", 16000)
{
  SetActivator(0, AAPTR_TARGET);
  SetActivator(0, AAPTR_TRACER);
  if (ActivatorTID() == needTid) // моб выделен текущей группой (с текущим мастером)
    SetResultValue(1);
}

Минус подхода — неоптимизировано (все монстры будут перебираться по 100500 раз, причём дум старается каждый раз выбирать ближайших, он выбирает — ты отклоняешь, и так пока не надоест).
Возможно впадание в бесконечные циклы.

Также если несколько разных групп пересекутся и выберут одну цель то будет полная жопа. Это надёжно реализуемо только для категорий в стиле "все монстры определённого класса", но не "все монстры определённого класса под определённым мастером".

Рейтинг сообщения: +1, отметил(и): Serious_MOod
2 2 1
Void Weaver
- 1st Lieutenant -
Next rank: = 1st Lieutenant = after 166 points
1674

Doom Rate: 1.83

Posts quality: +494
Ссылка на пост №3911 Отправлено: 30.04.19 04:01:00
Мда... я полагал что прошаренные профи сразу заподозрят о чём идёт речь. В общем сам виноват, надо было сразу вскрывать карты.

1. Всё предложенное выше прекрасно пишется без ацс и перебора тидов.
2. Но к сожалению всё это даже близко не решает проблему ибо все сиблинги это стрелкИ рельсо-лучей из бфг-шара. Т. е. поскольку у них у всех обзор в 360 градусов + находятся в одной точке, то сколько ни переводи других сиблингов в спаун (даже с затиранием таргетфилда А_КлирТаргетом или А_РеарранжПоинтерс), а они всё равно будут начинать поиск цели с ближайшей, т. е. уже занятой самым первым лучом. Соответственно все сиблинги будут дружно игнорить любые цели кроме ближайшей.

Я пробовал в спауне ставить A_LookEx(LOF_NOSOUNDCHECK,0,frandom(128,1024)) но во-первых, это по-прежнему дичайшая рулетка, а во-вторых, опять-таки потеря КПД.

На данный момент "лучший" вариант получается если "маркировать" цели флагом A_ChangeFlag("INVISIBLE",1), а того кто "наградил" цель этим "маркером" также "награждать" флагом A_ChangeFlag("SEEINVISIBLE",1). Получается что только тот луч который первым ударил цель может её же видеть, тогда как остальные лучи-сиблинги будут вынуждены начать искать новые цели среди видимых акторов. Всё было бы хорошо если бы не одно "но"... Флаг SEEINVISIBLE НЕ РАБОТАЕТ для игрока! И я хз как вообще игрок может увидеть инвиз актор.

Кароч фундаментальная трабла никуда не делась - просто запретить атаковать "занятую" цель это не проблема, проблема же в том чтобы полностью исключить оную цель из последующих проверок сиблингами на приемлемость цели.
1 7 1
ZZYZX
= Colonel =
Next rank: - Commissar - after 16 pointsМодератор форума
4874

Doom Rate: 1.74

Posts quality: +1312
Ссылка на пост №3912 Отправлено: 30.04.19 13:40:40
Void Weaver пишет:
Мда... я полагал что прошаренные профи сразу заподозрят о чём идёт речь. В общем сам виноват, надо было сразу вскрывать карты.

Я в пм муду заподозрил, а сюда как-то не просочилось :oops:


Void Weaver пишет:
На данный момент "лучший" вариант получается если "маркировать" цели флагом A_ChangeFlag("INVISIBLE",1), а того кто "наградил" цель этим "маркером" также "награждать" флагом A_ChangeFlag("SEEINVISIBLE",1). Получается что только тот луч который первым ударил цель может её же видеть, тогда как остальные лучи-сиблинги будут вынуждены начать искать новые цели среди видимых акторов. Всё было бы хорошо если бы не одно "но"... Флаг SEEINVISIBLE НЕ РАБОТАЕТ для игрока! И я хз как вообще игрок может увидеть инвиз актор.

Это ничем не лучше моего варианта с итемами. Два бфг шара не смогут бить мобов друг друга, и ещё надо эти самые награждения флагами возвращать как было после того как бфг пропадает.

Вообще на самом деле ты усложняешь.
Такие извращения нужны если эти акторы физически должны быть разными (например если игрок оружием выпускает стаю дронов которые бьют врага).
А для бфг шаров есть техника отработанная годами за время эмуляции дум3/дум4. Пусть шар будет одним монстром и сам бьёт всех. Конструкция следующая — A_LookEx(LOF_NOJUMP) чтобы сменить цель без прыжка стейтов, потом A_CustomRailgun, потом повторяешь. И так несколько раз в цикле по количеству лучей. Работает гораздо лучше.

Void Weaver пишет:
а они всё равно будут начинать поиск цели с ближайшей

И к слову нет, там всё же рандом. Только его очень сложно заставить работать как надо, в описанном тобой сценарии (где каждый актор отделен)

Рейтинг сообщения: +2, отметил(и): Serious_MOod, Void Weaver
2 2 1
Void Weaver
- 1st Lieutenant -
Next rank: = 1st Lieutenant = after 166 points
1674

Doom Rate: 1.83

Posts quality: +494
Ссылка на пост №3913 Отправлено: 30.04.19 14:07:30
Я в тебе не сомневался.

ZZYZX пишет:
Два бфг шара не смогут бить мобов друг друга, и ещё надо эти самые награждения флагами возвращать как было после того как бфг пропадает.
Могут. Как только луч второго шара получит свой СИИНВИЗ. Невидимость снимается так же как и выдавалась. Проблема в том что игрок нифига не видит.

ZZYZX пишет:
А для бфг шаров есть техника отработанная годами за время эмуляции дум3/дум4. Пусть шар будет одним монстром и сам бьёт всех. Конструкция следующая — A_LookEx(LOF_NOJUMP) чтобы сменить цель без прыжка стейтов, потом A_CustomRailgun, потом повторяешь. И так несколько раз в цикле по количеству лучей. Работает гораздо лучше.
Всё так же остаётся проблема распределения "1 луч на 1 цель". Шар может выбрать одну и ту же цель повторно, и походу в этом случае без АЦС уже не обойтись. Тогда как в случае с отдельными монстро-лучами они легче привязываются к цели через флаг NOTARGETSWITCH.
Хотя можно попробовать считать ко-во монстров в радиусе и вызывать рельс-атак не более чем есть мобов вокруг... сссука, хотя это по-прежнему не лечит проблему распределения лучей.
Блин, я конечно чуял что мороки с Ку2-бфг будет много...

Добавлено спустя 10 минут 29 секунд:

Хотя наверное между A_LookEx и рельсой можно вызывать проверку нумерованных итмем-токенов у намеченной цели по принципу "этому дала, этому дала, а тому ещё не дала", но это писец какое извращение даже для меня. :crazy:
1 7 1
ZZYZX
= Colonel =
Next rank: - Commissar - after 16 pointsМодератор форума
4874

Doom Rate: 1.74

Posts quality: +1312
Ссылка на пост №3914 Отправлено: 30.04.19 14:42:18
Для 100% гарантии именно того что тебе нужно делается примерно так:
1) помечаешь шар тидом (любым)
2) делаешь A_RadiusGive со скриптом вызываемым из итема
3) скрипт задаёт временный тид монстру (которому упал итем), переключается на мастера (на шар) и заставляет его выстрелить рейлганом 1 раз, установив цель на монстра (через SetActorState)

И никакого зскрипта, что характерно. Огрызки подобной логики можно увидеть в коде моего монстра, который был написан задолго до зскрипта: https://www.youtube.com/watch?v=F2P-le_aSWY
Но там именно что подобной, реализовывается связь бфг-шаров с мастером-арчем. Но в принципе если бы мне захотелось чтобы вся эта конструкция светилась рейлганом то это реализовалось бы добавлением пары строк в декор )

Добавлено спустя 2 часа 41 минуту 8 секунд:

Условная реализация https://www.mediafire.com/file/x3nt8vxcyvfgii5/newbfgball.pk3


Если лень качать, декор: https://pastebin.com/SWP1kbZ0
ацс: https://pastebin.com/mtJRfkGJ

Начинай уже учиться, а не морочиться. Я на это 15 минут потратил и всё работает.
Ты бы это время мог потратить на разработку новых идей для мода, а не извращизмов на декоре.
Или раба себе найди который загорится идеей и будет за тебя всё прогать ))))) Если прям вообще никак к программированию подступиться не можешь, так хоть навыки управленца развивай, чо.

Рейтинг сообщения: +1, отметил(и): Void Weaver
2 2 1
Zeberpal_98
= Sergeant Major =
Next rank: UAC Sergeant Major after 55 points
625

Doom Rate: 1.88

Posts quality: +75
Ссылка на пост №3915 Отправлено: 01.05.19 12:57:05
Gzdoom/zscript, можно ли нынче в нем сделать такую сложнейшую вещь как камера от третьего лица,
особенностями, которой были бы:

•свободный поворот камеры мышкой, и привязанное к такой камере управление думгаем.
•динамическое изменение прозрачности rstyle translucent- акторов, если они очень близки к камере.
•насколько это возможно незастревание в 1-side стенках
•захват монстра в цель, при этом, чтобы думгай не выпадал из объектива.

Любой из этих пунктов - титаническая работа, но я пока просто хочу понять возможно ли это на сегодняшний день.
стоит ли мне засунуть голову под кран или это выполнимо
1
ZZYZX
= Colonel =
Next rank: - Commissar - after 16 pointsМодератор форума
4874

Doom Rate: 1.74

Posts quality: +1312
Ссылка на пост №3916 Отправлено: 01.05.19 13:03:10
Все 4 пункта можно.
Пожалуй с прозрачностью акторов почти самое сложное, т.к. некоторые акторы насильственно ставят себе в каждом кадре прозрачность (те которые это анимируют).

Но вот ваще самый сложный пункт это как ни странно первый. Потому что нужно правильно состыковывать направление прицела от третьего лица с выстрелом из оружия от первого (углы пересчитывать).
Так же и с последним больше проблема не в зскрипте, а в математике процесса которую нужно понимать )

Незастревание делается очень легко. Актора камеры делаешь +NOINTERACTION, а вот позицию камеры определяешь с помощью Trace (этим классом). После чего этого актора телепортируешь в то место где остановился Trace, минус пару пикселей чтобы достать его из стены. При таком подходе застревать он не будет нигде и никогда.

Рейтинг сообщения: +3, отметил(и): Zeberpal_98, JSO x, Void Weaver
2 2 1
Void Weaver
- 1st Lieutenant -
Next rank: = 1st Lieutenant = after 166 points
1674

Doom Rate: 1.83

Posts quality: +494
Ссылка на пост №3917 Отправлено: 01.05.19 13:18:26
ZZYZX пишет:
Шары несамостоятельны, потестировал, ни разу не видел чтобы два шара били одного моба, независимо от дистанции.
Да, есть такое я в инфо-лумпе это сразу упомянул. Я так полагаю что перед тем как "залочить" цель нужен более хитрый чек одновременно как на наличие у цели таргетлок-токена, так И на принадлежность луча к одному ААПТР_МАСТЕР. Т. е. нужна аутентификация МАСТЕРА, но я хз как это можно надекорить. (

ZZYZX пишет:
Но выглядят получше, каюсь, мне было дико влом
Да это ерунда, косметика же. Твой шар по функционалу значительно лучше и каноничнее, молодца, красивый код. Я так понял там каждый моб получивший скрипт-итем говорит что он "уник" и заставляет выстрелить в него, лол. )
1 7 1
ZZYZX
= Colonel =
Next rank: - Commissar - after 16 pointsМодератор форума
4874

Doom Rate: 1.74

Posts quality: +1312
Ссылка на пост №3918 Отправлено: 01.05.19 13:29:59
Void Weaver пишет:
Т. е. нужна аутентификация МАСТЕРА, но я хз как это можно надекорить.

Вообще есть такое выражение https://zdoom.org/wiki/IsPointerEqual
Но у тебя проблема в том, что ты даёшь монстру итем, и мастера можно назначить только этому итему. А добыть мастера из итема невозможно (да и итемы разные могут быть, а если дать много итемов то это будет физически один объект, только со счётчиком количества). Поэтому затея с тем чтобы что-то давать монстру изначально неполноценна (даже в зскрипте), этим должен управлять исходный актор (тот который стреляет).
2 2 1
Zeberpal_98
= Sergeant Major =
Next rank: UAC Sergeant Major after 55 points
625

Doom Rate: 1.88

Posts quality: +75
Ссылка на пост №3919 Отправлено: 01.05.19 13:30:40
ZZYZX
Спасибо за подробный ответ
1
Void Weaver
- 1st Lieutenant -
Next rank: = 1st Lieutenant = after 166 points
1674

Doom Rate: 1.83

Posts quality: +494
Ссылка на пост №3920 Отправлено: 02.05.19 04:27:08
ZZYZX пишет:
Вообще есть такое выражение https://zdoom.org/wiki/IsPointerEqual
Но у тебя проблема в том, что ты даёшь монстру итем, и мастера можно назначить только этому итему. А добыть мастера из итема невозможно (да и итемы разные могут быть, а если дать много итемов то это будет физически один объект, только со счётчиком количества). Поэтому затея с тем чтобы что-то давать монстру изначально неполноценна (даже в зскрипте), этим должен управлять исходный актор (тот который стреляет).
IsPointerEqual и так задействована, но к сожалению на декоре не существует явных поинтеров AAPTR_CHILDREN\SIBLINGS.
Накостылил обособление всех лучей одного шара путём объединением через A_GiveToSiblings, теперь разные шары могут стрелять в одну цель:


Но порочный круг продолжился в несколько ином ключе.
Во-первых, одна цель не всегда выбирается разными шарами даже когда ко-во потенциальных целей вокруг незначительно:


Во-вторых, в толпе шанс того что одна цель будет выбрана более чем одним шаром стремится к нулю:


Ну и наконец очень редко происходят коллизии когда шар вообще остаётся без целей:


В общем буду признателен если кто укажет где косяк, и можно ли его пофиксить или для декора это уже предел костылизма.
Новый код лучей:
Скрытый текст:

Actor Q2BFGRail
{
Radius 1
Height 1
//MaxTargetRange 2048
//FriendlySeeBlocks 20 //measured in blocks of 128 map unit per block
Species "Q2BFGAllies" //Need for safety shooting
+ISMONSTER
+FRIENDLY
+NOINTERACTION
+LOOKALLAROUND
+DONTTHRUST

States
{
Spawn:
TNT1 A 0 NoDelay A_LookEx(LOF_NOJUMP|LOF_NOSOUNDCHECK,0,frandom(512,128*random(5,10))) //Distance values defines rays distance activation
//TNT1 A 0 A_GiveToSiblings("ItIsMyRay")
TNT1 A 0 A_JumpIf(IsPointerEqual(AAPTR_MASTER,AAPTR_NULL)==1,"DeathMarked") //If BFGBall is dead
TNT1 A 0 A_JumpIf(IsPointerEqual(AAPTR_TARGET,AAPTR_NULL)==1,"DeathMarked") //If no more available targets
TNT1 A 0 A_CheckFlag("CORPSE","DeathMarked",AAPTR_TARGET) //If curent target is dead
//TNT1 A 0 A_GiveToSiblings("ItIsMyRay")
TNT1 A 0 A_JumpIf((CountInv("PersonalTargetMark",AAPTR_TARGET)==1)&&(CountInv("ItIsMyRay")==1),"DeathMarked") //Combined сheck for occupied target + проверка на принадлежность лучей к одному БФГ-шару
TNT1 A 0 A_GiveToTarget("PersonalTargetMark") //Lock target token-mark
TargetLocked:
TNT1 A 0 A_GiveToSiblings("ItIsMyRay") //Lock target token-mark2, allow to shoot from anoter BFGBall
TNT1 A 0 A_CheckFlag("CORPSE","Death",AAPTR_TARGET) //Если текущая цель труп 
TNT1 A 0 A_JumpIf(IsPointerEqual(AAPTR_MASTER,AAPTR_NULL)==1,"Death") //Если BFGBall лопнул
TNT1 A 0 A_JumpIf(IsPointerEqual(AAPTR_TARGET,AAPTR_NULL)==1,"Death") //Если больше нет доступных целей
//TNT1 A 0 A_JumpIf(GetDistance(1,AAPTR_TARGET)>512,"Death") //Если дистанция до цели слишком велика; чем больше значение тем дольше и дальше держится луч
POSS A 1 
{
A_Warp(AAPTR_MASTER,0,0,8,WARPF_NOCHECKPOSITION|WARPF_COPYINTERPOLATION);
A_GiveToSiblings("ItIsMyRay");
A_CustomRailgun(Random(3,8),0,None,"00 FF 00",RGF_SILENT|RGF_FULLBRIGHT|RGF_NORANDOMPUFFZ,2,0,"Q2BFGRailPuff",0,0,0,1,1.00,0.0,"Q2BFGRailRayNode",0,270,5); //5 targets allowed to pierce 
}
Loop

DeathMarked: //Alt-Death state for rays without accepted target
TNT1 A 0
Stop

Death: //Death state for active rays
TNT1 A 0 A_TakeFromTarget("PersonalTargetMark") //Releases target lock
Stop
}
}

Actor ItIsMyRay : Inventory {Inventory.MaxAmount 1}
Actor PersonalTargetMark : Inventory {Inventory.MaxAmount 1}

1 7 1
Страница 196 из 197Перейти наверх Пред.  1, 2, 3 ... , 195, 196, 197  След.
   Список разделов - Местечко мапперов и моддеров - Тема для новичков. Вопросы по маппингу/моддингу - любые!