У тебя отсутствует открывающая скобка скрипта '{'
(ну и парная закрывающая, есесено)
Её не может отсутствовать, потому как я взял скрипт предложенный Смертоносцем, от куда мне мапперу знать такое =D ну да ладно.
Вбил твой вариант(подогнал точнее):
script 400 OPEN
{ if ThingCountNameSector("Screamer", 0, 1000)<1
ACS_Execute(701, 0, 0, 0, 0);
terminate;
Delay(35);
restart;
}
Пишет примерно то же самое слейд:
SCRIPTS.acs:11: Missing '('.
> { if ThingCountNameSector(
Мне приходится использовать против своей воли магические цифры 1000, 701 и т.п. потому что слейд понимает только цифры в "названиях" скриптов =(
А вот про использование фиксированной цифры то же думал, немного не удобно, но вариант.
Да, скомпилировалось. Осталось теперь понять почему не воспроизводится звук в игре))) думаю тут уже я должен искать косяк, хотя не понятно, даже при учёте того что в звуковой скрипт я добавил TID. Спасибо!
Мне приходится использовать против своей воли магические цифры 1000, 701 и т.п. потому что слейд понимает только цифры в "названиях" скриптов
Используй команду ACS_NamedExecute, чтобы использовать скрипт с текстом(стринг) в названии. ACS_Execute реагирует только на числа.
По поводу звука рискну предположить, что он мог быть не прописан в SNDINFO.
P.S Почитал тему. Чекать пока актор в секторе, ну такое, какая-то совершенно костыльная история. Я бы:
1) Сжал зубы в кулак и таки прописал своим монстрам в декорейт в See стэйте.
See:
LOOL A 0 ACS_NamedExecute("MoiSkript", 0)
...
Потому что чекать, заметил ли монстр игрока куда как аккуратнее в ДИКОРЕЙТ, там и функции специальные есть, например A_JumpIfTargetInLOS, позволяющая видеть игрока только на определенном расстоянии и пр.
Я сам ненавижу ДИКОРЕЙТ и все, что можно стараюсь делать в скриптах, но тут по-моему лучше всего так/
Script "MoiSkript" (void)
{
ActivatorSound("Hell/Sound18", 127); //ya tak ponyal ti hochesh shtobi etot monstr isdal zvuk. Kuda proshe sdelat eto v dekoreit, no vot variant v decoreit-acs svyazke.
}
Используй команду ACS_NamedExecute, чтобы использовать скрипт с текстом(стринг) в названии. ACS_Execute реагирует только на числа.
По поводу звука рискну предположить, что он мог быть не прописан в SNDINFO.
В слейде, в самом редакторе карт, где прописывается название скрипта, редактор не принимает буквы, сразу красным выделяет и окно с предупреждением вылезает.
Если бы звук не был прописан в SNDINFO, то он бы не играл при использовании этого скрипта:
сразу красным выделяет и окно с предупреждением вылезает.
Такое?
Какая у тебя задача, если чуть-чуть детальнее? Идет игрок, идет идет идет, вдруг его видит монстр и он издает звук? Верно? или звук должен воспроизвестить у игрока? Или еще у кого-то? Или у всех игроков?
На скрине ты находишся в текстовом редакторе скрипта, а я тебе говорю про редактор карт. Если я начну давать имена всем скриптам, как мне предлагали выше, то я не смогу использовать скрипты в редакторе карт слейда, если повешу спейшел на линию ACS_Execute. В редакторе карт слейда нельзя использовать ACS_NamedExecute на спейшелах линий увы.
Задачу я описал детально выше.
Скрытый текст:
Активация звука, если игрока заметил объект. При чём объект должен быть универсальным, что бы не нужно было создавать его клоны с другими значениями, то есть вбивать в него переменные от случай к случаю.
Для примера есть ОДИН универсальный скрипт, который активируется разными линиями, и посылает воспроизводимый звук на разные объекты.
Ребят, вы какие-то костыли предлагаете. С циклами, работающими с начала уровня, и/или с дополнительным вызовом скрипта... Возможно, это, конечно, и максимум, который можно сделать на Decorate+ACS (в чём я, честно говоря, сомневаюсь), но какой-то он длинный.
Могу предложить более короткий и потенциально универсальный вариант (под вторым спойлером, ниже, есть один код, без комментариев и альтернатив, для сравнения длины; ссылка на "A_LookEx()").
Скрытый текст:
class Observer1: Actor {
Default {
ReactionTime 1;
Radius 4;
+NOGRAVITY;
+ISMONSTER;
-SOLID;
-SHOOTABLE;
Args 0, 0, 0; // Пусть по умолчанию такие будет...
}
States {
Spawn:
TNT1 A 1 A_LookEx( LOF_NOSOUNDCHECK, 0, 512, fov: 360.0, label: "Death" );
loop;
Death:
TNT1 A 1 {
// Сделал анонимное исполнение, так как так проще комментарии расставлять.
// Вариант с автоматическим подставлением номера карты.
//arg0: номер звука.
// String alertsnd = "AlertSound/Map" .. level.levelnum .. "/Sound" .. args[ 0 ];
// Вариант с выбором карты/части и звука.
//arg0: номер звука;
//arg1: номер карты/части/etc.
// String alertsnd = "AlertSound/Map" .. args[ 1 ] .. "/Sound" .. args[ 0 ];
// Вариант с тремя аргументами и расширенным диапазоном значений
//arg0: младший байт;
//arg1: старший байт;
//arg2: номер карты/части/etc.
String alertsnd = "AlertSound/Map" .. args[ 2 ] .. "/Sound" .. ( args[ 0 ] + ( args[ 1 ] << 8 ) );
// Звуки делать мне незачем, так что пусть просто в консоль
//выводит полученное название. Раскомментировать "A_PlaySound()" —
//для воспроизведения соответственного сэмпла.
console.printf( alertsnd );
//A_PlaySound( alertsnd );
}
Stop;
}
} // of class Observer1: Actor {
Именно изменить -- только если залезть в g-/q-/lzdoom.pk3. Но, очевидно, это нарушит совместимость со всем, чем только возможно.
Вариант с наследованием ("class MyBaseInventory: Inventory {}") не предлагать, насколько понял?
К слову, если именно при поднятии каждого из предметов необходимо что-либо делать без изменения этих самых предметов, можешь в игроке переопределить следующий код:
// Called by inventory items to see if this actor is capable of touching them.
// If true, the item will attempt to be picked up. Useful for things like
// allowing morphs to pick up limited items such as keys while preventing
// them from picking other items up.
virtual bool CanTouchItem( Inventory item ) {
return true;
}
решил я значит "помаппить" в GZDOOM Builder-е ,нажал какую-то кнопку и подсветка выделенных объектов пропала ,тоесть когда наводишь в 3D режиме на обьект прицел он не подсвечивается оранжевым и то-же самое при выделении,подсветки нет ,HELP!