Тут между 22 и 23 страницами поднимался вопрос об активации скрипта после смерти группы монстров. Попытался реализовать --- возникли проблемы:
Скрытый текст:
Script 3 (void) { //вызывается при смерти одного из монстров
for(int i = 1; i < m_kill; i++) { //m_kill = monsters to kill, suspend'им скрипт (m_kill - 1) раз, а затем выполняем полезную часть
suspend; //приостановка до сл. запуска скрипта
}
//собственно полезная часть скрипта здесь
}
Убиваю всех --- полезная часть почему-то не запускается. Не подскажете, в чём проблема?
N00b2015 В общем смотри, есть несколько вариантов, я напишу тот который считаю проще:
int Count_Monster; //Переменная объявляется вне скрипта по умолчанию == 0
Script "AfterKill" (void) //выделяешь свою группу монстров и ставишь им action на выполнение этого скрипта (в UDMF по моему 80...)
{
Count_Monster++;//говорим гоззе что 1 монстра убили, теперь переменная Count_Monster ==1
if(Count_Monster == 3) //после убийства каждого монстра скрипт чекает убил ли ты 3их, если нет, то выполнится else и завершится, если убил 3их, выполнится if
{//тут уже пиши что надо делать когда всех перебьешь
}
else printBold(s:"check");// это так для проверки.. блок else можешь вообще удалить..
}
т.е. каждый убитый монстр будет вызывать этот скрипт и проверять всех ли ты убил.
Добавлено спустя 10 минут 56 секунд:
navy_seals:
А где эта формула прописана? Просто в проперти damage прописать random - не прокатывает.
мб он имел ввиду damage type, там по моему можно было писать рендом.
alekv Сначала я и пытался так сделать. Когда монстры убиваются постепенно, счётчик увеличивается, и содержательная часть обычно выполняется. Однако потом я пострелял по ним из BFG, и оказывается, что почему-то при убийстве двоих (и более) монстров одновременно инкремент производится только один раз, и после экзекуции от 16 монстров в переменной остаётся 13 (и содержательный код в скрипте, соответственно, не выполнится никак).
Скрытый текст:
Кстати, что за другие варианты?
VladGuardian Нет, определённо "<" (иначе после убийства последнего монстра тоже выполнится suspend). Если с 0, то i < m_kill - 1 (все кроме одного).
Может, скрипт не умеет запускаться два раза за тик/короткий промежуток? Тогда как реализовывать, с помощью Delay(1)? Может, это специфика Zandronum? Вряд ли. Ничего не понимаю.
Сначала я и пытался так сделать. Когда монстры убиваются постепенно, счётчик увеличивается, и содержательная часть обычно выполняется. Однако потом я пострелял по ним из BFG, и оказывается, что почему-то при убийстве двоих (и более) монстров одновременно инкремент производится только один раз, и после экзекуции от 16 монстров в переменной остаётся 13 (и содержательный код в скрипте, соответственно, не выполнится никак).
Тогда понятно почему ты мучил способ с for.. Смотри так происходит потому что ты убиваешь сразу 2-3 монстра, а у тебя каждый монстр вызывает один и тот же скрит, а в гоззе пока 1 скрипт не выполнился он еще раз не запустится.. Выход есть, вешать на монстров вызывание скрипта с помощью ACS_ExecuteAlways(); тогда по идее один и тот же скрипт сможет выполнится одновременно хз сколько раз (опять таки если мне не изменяет память, давненько не скриптовал)
еще есть вариант, не много дибильный конеш, но этж гозза, вешать каждому монстру отдельный скрипт который будет менять значение переменной и 1 скрипт цикл который будет чекать эту переменную каждый игровой тик...
Но есть и еще способы, к примеру дать каждому монстру tag и в скрипте проверять живы эти монстры или нет.
при нажатии на кнопку должна меняться текстура и проигрываться звук. и ничего более. один раз. при последующих нажатиях - другой звук.
я, в общем, придумал при нажатии чекать живость зомби в коробке где-то вне локации, затем запускать один скрипт и умерщвлять зомби. при последующих нажатиях он не будет его находить в здравии и, соответственно, пускать второй скрипт. но это как-то нагороженно получается. да и на показателе врагов будет отражаться.
Скрытый текст:
будут ещё игроки лазать по локации, искать врага, которого в принципе не найти.
MyNameIs Просто объяви глобальную переменную (вне скриптов, как тут в начале http://zdoom.org/wiki/ACS#Introduction ), в скрипте кнопки меняй значение этой переменной в конце, а в начале проверяй значение и если оно уже изменено то другое действие.
Главная разница между ACS_Execute(Always) и ACS_ExecuteWithResult: первые два выполняются в рандомном порядке ЧЕРЕЗ ОДИН ТИК ПОСЛЕ ВЫЗОВА. ACS_ExecuteWithResult = ACS_ExecuteAlways, но выполняется в тот же тик из которого его вызывали. В случае с смертью монстров — гарантировано в порядке умирания (скорее всего слева направо от игрока).
Такой вопрос, допустим, есть папка с gzdoom 1.8.4 с настроенным ini файлом на одной учетке винды. При запуске exeшника с другой учетки, гздум генерирует другой ini файл и соотв.-но все настройки в нем сбиваются. Как сделать так, что бы игра использовала конкретный ini файл с любой учетки винды и не генерировала новый ini файл с дефолтными настройками?
Нужен именно комфортный для пользователя, вообще не знакомого с тонкостями настроек, запуск путем простого дабл клика по ярлыку. Нашел на вики Command line parameters, там есть -config configfile. Я правильно понимаю, что это прописывается в ярлыке как параметр запуска в виде (к примеру):
? Может кто уже разбирался с этим, подскажите, правильно вообще прописано? В таком виде почему то все равно создает новый ini при запуске с ярлыка. Вобщем, вопрос закрыт, если у кого такая же пробелма, правильная запись выделена выше.
ZZYZX Спасибо, а можно расшифровать? У меня с записью "С:\gzdoom 1.8.4\gzdoom.exe" zdoom -config zdoom-myini.ini игра запускается с настройками zdoom-myini.ini и не создает новый ini, т.е. как раз то, что мне и надо было, за исключением того, что путь к exe должен быть на разных учетках один и тот же. Твоя же запись делает тоже самое? или она и путь к exe из currentfolder ищет?
Моя запись делает ссылку на один файл из другого. То есть при mlink zdoom-derp.ini zdoom-hurr.ini здум будет искать новое название (например zdoom-derp.ini) а реально будет читать и писать старое (zdoom-hurr.ini)
Смысл в том, что тебе не надо будет после этого никаких батников делать, и сможешь просто запускать gzdoom.exe.
А если название новой учетки неизвестно, то можно как нибудь заставить ссылаться на ini старой учетки в именно ДАННОМ фолдере, чтобы, например, при переносе всей папки на другой комп не надо было в ярлыке путь править.
В игре у акторов не отображаются спрайты(?прозрачные), но они берутся Порт GZDoom 1 7 01 (Не отображаются новые спрайты, добавленные в папку Sprites, формата PNG, глубины цвета 32, архив PK3) Что такое?