Так, конечно, можно сделать, но если, например, светильников много, они расположены в разных местах платформы, на разных высотах и, возможно, даже вне платформы (сбоку или, например, если это 3D-пол, снизу), то менять оффсеты (не только по z, а ещё и по x и y, если свет должен быть вне лифта!) вручную у каждого из этих акторов мне лично было бы менее удобно, чем скопипастить строчку в ACS и поменять там помимо tid один параметр z.
Не думаю, что при большом количестве светильников будет сильная разница в производительности между этими способами.
С другой стороны, если это будут типовые лифты с одной-двумя лампочками, то проще будет, действительно, сделать актором.
Есть вопрос по ACS. Возможно ли как-то вызвать один и тот-же скрипт (например: "Buy_Button") по несколько раз? т.е. ещё до конца его выполнения.
У меня есть несколько кнопок которые вызывают один и тот-же скрипт, но с разными аргументами. Скрипт при нажатии кнопки запускается, но если попытаться запустить этот скрипт у другой кнопки пока этот-же выполняется у ещё другой, то он не сможет запуститься.
Like ACS_Execute, this special starts a script. However, it will allow multiple instances of a script to run simultaneously. The downside is that any scripts started with this special cannot be suspended or terminated with ACS_Suspend or ACS_Terminate, respectively.
ACTOR SmallWorklight 15000
{
Radius 25
Height 40
+SOLID
+PUSHABLE // Makes Worklight pushable. Remove if unwanted.
PushFactor 0.5 // Makes Worklight pushable. Remove if unwanted.
States
{
Spawn:
WLGH A 6
{
if(velx != 0 || vely != 0) // Makes the Worklight spin when pushed.
{ A_SetAngle(angle+Random(0,15)); } // Remove if unwanted. Use WLGH A -1 and stop instead.
}
loop
}
}
Народ если у парент актора изменена "Translation", а мне нужно от него наследовать актора, но чтобы эта самая "Translation" была по дефаулту. Как это реализуется? Что-то в Вики не нахожу...
Вроде можно, да. Translation "None", наверное.
Нашёл тему трёхлетней давности, в которой поднимался тот же вопрос и, что самое характерное, с таким же ответом, как и у меня Но зачем искать на вики нечто труднонаходимое, если можно написать свой костыль?
--
Теперь мой вопрос. Вот есть такая штука — ActorMover. Я хочу двигать им игрока. Видимо, ActorMover проверяет наличие на карте thing-а с заданным ему tid сразу после загрузки карты. Поэтому ENTER-скрипт, выдающий игроку TID, на этот момент отработать не успевает, и возникает ошибка "не найден актор, которого двигать".
Я бы, на самом деле, скопипастил определение ActorMover да поменял там место этой проверки, но нет ли способа двигать игрока (именно ActorMover-ом!) поизящнее?
Пытаюсь перепилить код крови, чтоб рандомно спаунился либо PUFF, либо BLUD. Но у меня спаунится только BLUD.
Код:
Скрытый текст:
ACTOR Bluff
{
Mass 5
+NOBLOCKMAP
+NOTELEPORT
States
{
Spawn:
TNT1 A 0 A_Jump(128, "Spawn2")
BLUD CBA 8
Stop
Spawn2:
PUFF A 4 Bright
PUFF B 2 Bright
PUFF B 2
PUFF CD 4
Stop
Spray:
SPRY ABCDEF 3
SPRY G 2
Stop
}
}
В чём ошибка, не подскажете? Проверял правильность написания BloodType в Слэйде — безрезультатно
3) А чем разнообразить блокировки передвижения на такоом уровне? Ключа 3. Далее получается переключателями.
Блокировки движения? Ты про постепенное прохождения уровня через локации на нём? Если да, то переключателями. В пример тот же - Infraworld - The Hatehammer. Там использовались переключатели для открытия новых локаций на уровне.
Можно отдельно закрыть двери на ключ-карту и отдельно на ключ-череп. Так же есть возможность поставить дверь, для открытия которой будут нужны все ключи сразу. Для этого нужно смотреть список активных линий для дверей.
Еще вот такое есть, из достаточно известных.
Ключ-карта и отдельно ключ-череп — это в формате Boom; оригинальный Doom, если что, при открытии дверей и активации объектов их просто не различает. Но карты в формате Boom все равно сейчас наиболее распространены среди новых релизов.
Если нужно очень много ключей, ZDoom позволяет добавлять свои (сверх тех шести, что уже есть, или в качестве замены). Однако необходимо помнить, что существенная часть игроков не любит слишком запутанные уровни; помимо этого, далеко не все жалуют уровни с большим количеством дверей.
Возникла небольшая проблемка, до решения которой я никак не могу додуматься. Итак, по порядку...
Я использую в моде анси скрипты для изменения максимальной вместимости патронов у игрока. Вот интересующая в плане вопроса часть кода.
В моде есть объект FakeAmmoBelt, при взятии которого вызывается соответственно и скрипт на анси.
ACTOR FakeAmmoBelt : CustomInventory
{
Inventory.PickUpMessage "You equipped a Ammo Belt!"
States
{
PickUp:
TNT1 A 0 A_JumpIfInventory("BackPackSlot", 0, 4)
TNT1 A 0 A_GiveInventory("EquippedAmmoBelt", 1)
TNT1 A 0 A_GiveInventory("BackPackSlot", 1)
TNT1 A 0 ACS_NamedExecuteAlways("AmmoBeltPickUp", 0, 0, 0, 0)
Stop
ABLT A 35
Fail
Spawn:
ABLT A -1
Stop
}
}
Далее, предмет FakeAmmoBelt даётся при старте в акторе игрока с помощью проперти Player.StartItem "FakeAmmoBelt".
И вроде бы всё хорошо, при пистол старте, игрок действительно экипирует этот рюкзак и максимум патронов увеличивается до указанного. Но решил я тестить мод с разными мегавадами... Итак, проблема заключается в том, что на некоторых уровнях или на всех уровнях разных мегавадов (Например acient aliens на всех уровнях, urania на 4 и 9), при пистол старте, игроку даётся рюкзак, всё как положено, но анси скрипт не вызывается или не отрабатывает!
А сам вопрос - каковы могут быть причины этого? Я правда мало шарю что в декорейте, что в анси, я буду благодарен любой помощи.
Совсем забыл, я использовал для теста zandronum 3.0 и lzdoom 3.84.