| Будет ли эта тема полезной/жизнеспособной? |
| Ответ если Вы программист: [Да! Буду просматривать заказы и размещать скрипты] | | 19% | [ 8 ] |
| Ответ если Вы программист: [Нет! Эта тема бред] | | 4% | [ 2 ] |
| Ответ если Вы программист: [Буду иногда размещать скрипты, но заказы.. лень] | | 34% | [ 14 ] |
| Ответ если Вы заказчик: [Да!] | | 41% | [ 17 ] |
| Ответ если Вы заказчик: [Нет!] | | 0% | [ 0 ] |
|
| Проголосовало думеров : 29 |
| Всего оставлено голосов : 41 |
|
| Голосование без ограничения по времени |
|
| Автор | Сообщение |
theleo_ua - Commissar -
 | | 5316 |
 Doom Rate: 1.79 Posts quality: +1221 |
Отправлено: 21.11.20 05:19:46 | |
|
| N00b2015 т.е. по большому счету, можно не париться? |
Рейтинг сообщения: +1, отметил(и): N00b |
|
| 4 |
1 |
 |
|
| |
md3d Recruit
 | | 2 |
 Doom Rate: 2
|
Отправлено: 10.08.22 11:06:42 | |
|
Всем привет.
Пытаюсь сделать такую ностальгическую фичу, как мигающая дискета в нижнем, правом углу экрана.
Код у меня получился весьма «индусский», и фича срабатывает только в начале уровня.
Хотелось бы получить более «гибкий код». К тому же картинка дискеты у меня выводится только под изображение экрана 16:9 с выключенными HUD.
Код скрипта должен быть примерно следующий:
Если расстояние от игрока до двери составляет 5 шагов (условно), то с вероятностью 20% нужно вывести на экран сообщение «TEST»
Сообщение «TEST» выводится на экран при следующих условиях:
Если изображение экрана 16:9, HUD включен, то сообщение выводится с координатами х=10 у=20
Если изображение экрана 16:9, HUD выключен, то сообщение выводится с координатами х=10 у=30
Если изображение экрана 4:3, HUD включен, то сообщение выводится с координатами х=20 у=40
Если изображение экрана 4:3, HUD выключен, то сообщение выводится с координатами х=20 у=50
Поможет ли кто нибудь осуществить задуманное? |
|
|
| |
Shadowman UAC General
 | | 9365 |
Doom Rate: 2 Posts quality: +2696 |
Отправлено: 15.08.26 20:08:17 | |
|
Хотелось бы прояснить одну вещь. Я не глубокий знаток подноготной механики декорэйта, поэтому то, что мне ответил ИИ, вызывает необходимость проверки.
ИИ написал:
| | В GZDoom стандартное поведение A_Chase таково: при потере цели он вызывает A_Chase с параметрами, которые могут вызвать переход в See (если есть цель) или в Spawn (если цели нет). Однако в вашем коде вы не используете явный переход, но движок может сам сгенерировать переход в Spawn, если цель потеряна и состояние See не содержит явного goto. В большинстве случаев, если цель потеряна, A_Chase возвращает монстра в состояние, указанное в свойстве SeeState, но если оно не задано, то в Spawn. Это зависит от движка и настроек. |
Другими словами, есть вероятность, что движок отправит монстра в Spawn, даже если в коде явно указана зацикленность See стейта, или ИИ тут глючит в ответе?
Это важно, потому что я хочу установить некоторые базовые параметры моба в Spawn-стейте, и потому если моба движок каким-то образом может кинуть в Spawn помимо прямых команд, меня такой расклад не устраивает (т.к. тогда параметры будут устанавливаться заново).
В моем случае See стейт устроен вот так:
See:
SCMP AABBCCDDEEFFGG 2 A_Chase
loop
Из всех других статов (атака, боль и т.п.) переход идет напрямую в See
Стоит ли опасаться каких-то сбросов в Spawn самим движком? |
|
|
| 1 |
8 |
2 |
 |
|
| |
JSO x = 2nd Lieutenant =
 | | 1508 |
 Doom Rate: 2.39 Posts quality: +819 |
Отправлено: 16.08.26 17:08:40 | |
|
В "Spawn:" актор перейдёт, если потеряет смысл жизни последнего врага из поля target/AAPTR_TARGET — может произойти, когда текущая цель мертва и у него не осталось других врагов, которых он любым способом запомнил (от выстрела в пределах слышимости, от того, с кем он не до конца сразился в прошлый раз, и так далее). Так, например, если по монстру, который не слышал и не видел игрока, кто-то попал, то после смерти обидчика он снова замрёт на месте в "Spawn:".
Если нужно всё инициализировать ровно один раз, можно ввести дополнительный предмет-маркер, выдающийся вместе с остальными предметами:
Spawn:
TNT1 A 0 NoDelay
TNT1 A 0 A_JumpIfInventory( "MarkerInventory", 0, "SpawnLoop" )
TNT1 A 0 A_GiveInventory( "MarkerInventory" )
TNT1 A 0 A_GiveInventory( "SomeInv1" )
TNT1 A 0 A_GiveInventory( "SomeInv2" )
TNT1 A 0 A_GiveInventory( "SomeInv3" )
SpawnLoop:
SCMP AB 8 A_Look
Loop
Также можно следить за каким-то из уже существующих предметов (здесь обозначены как "SomeInv*"), но это менее универсальный способ, особенно если количество всех предметов может меняться произвольно. |
|
|
| 3 |
10 |
1 |
 |
|
| |
Shadowman UAC General
 | | 9365 |
Doom Rate: 2 Posts quality: +2696 |
Отправлено: 16.08.26 18:46:55 | |
|
JSO x
Большое спасибо! Именно этот момент и хотелось уточнить. Теперь буду знать, что Spawn может вызываться движком в отдельных случаях.
Проверку на предмет-маркер я в итоге и сделал. |
Рейтинг сообщения: +1, отметил(и): JSO x |
|
| 1 |
8 |
2 |
 |
|
| |
AleksV Marine 1st class
 | | 38 |
Doom Rate: 2 Posts quality: +17 |
Отправлено: 16.08.26 22:25:59 | |
|
Если не ошибаюсь, при потере цели монстр переходит в Spawn, если нет стейта Idle. Так что можно в Spawn спокойно инициализировать монстра. Главное, чтобы в самом коде нигде не было Goto Spawn или A_Jump ("Spawn").
Лучше конечно использовать ZScript и переопределить PostbeginPlay. |
|
|
| |
Shadowman UAC General
 | | 9365 |
Doom Rate: 2 Posts quality: +2696 |
Отправлено: 16.08.26 23:51:36 | |
|
| AleksV пишет: | | при потере цели монстр переходит в Spawn, если нет стейта Idle. |
О, а вот это еще лучше, упрощает код (не нужен токен-итем для проверки выставленных условий в Спаун)! Спасибо!
Жаль, что тупой ИИ не умеет сразу предлагать оптимальные решения. Я заметил, что он идет всегда по самому сложному пути. Например, стал предлагать мне скрипт с массивом тагов вместо более изящного решения, пока я его не направил на нужный путь. Вывод: без знания основ декорэйа и скриптов общение с ИИ на эту тему может увести в неоптимальный код. По этой причине я не рискую что-то делать через зскрипт, т.к. не знаю его азов вообще (а ИИ, как выясняется, всегда уведет в неоптимальную сторону, если его не одергивать). |
|
|
| 1 |
8 |
2 |
 |
|
| |
AleksV Marine 1st class
 | | 38 |
Doom Rate: 2 Posts quality: +17 |
Отправлено: 17.08.26 00:36:56 | |
|
| Кстати вместо итемов лучше использовать переменные, если эти итемы не доджны проверяться из других акторов (через A_JumpIfInTargetInventory или типа того). |
|
|
| |