Berserker
Posts: 16657
|
|
01.08.2022 13:13 |
|
SergOz
Posts: 1315
|
Panda, на любой чистой карте можно быстро проверить.
Ставишь объект, красного героя, даёшь ему Архнгела и посещаешь объект.
Вот код:
Специально можно проиграть бой, можно выиграть.
Результат - налицо
UPD. Очень странно, но теперь стало работать. Ща разберусь в чём дело...
Карта-мод "Война на Холсте"
(This post was last modified: 01.08.2022 14:50 by SergOz.)
|
|
01.08.2022 14:01 |
|
wessonsm
Posts: 792
|
SergOz, триггеры BA1 и OnAfterBattleUniversal срабатывают до того, как ты присваиваешь значение переменной. Убери условия, и оба сработают. !?OB5/5/0; объект в произвольной координате !!OB5/5/0:D0; запрет красному на посещение !!HE-1:T5/5/0/9/20; вызов боя с 20 фанатиками !!IF:M^Бой уже давно закончился^; !?FU(OnAfterBattleUniversal); !!IF:M^ OnAfterBattleUniversal ^; !?BA1; !!IF:M^ BA1 ^;
Если твой детект сработал - это чистая случайность, из-за того, что переменная уже имела значение 10 до боя.
|
|
01.08.2022 14:42 |
|
SergOz
Posts: 1315
|
wessonsm, без условий никак: на карте десятки скриптовых боёв - они должны различаться.
Но я догадываюсь в чём дело, но не могу сообразить как с этим бороться.
Объясню подробнее. Стоит на карте монстр и никого не пропускает. Мимо него можно пройти, но сейчас не об этом. Монстр (снайпер) в бою имеет первый ход и стреляет без перерыва, пока не уничтожит всю армию героя. Так вот в конце этого боя и не срабатывает !?FU(OnAfterBattleUniversal);
Я сделал этот бой на выпадении постоянной морали у Снайпера, так как если через UN:C давать повторный ход, то идут разные глюки и в бою и после боя. Так вот я подозреваю, что когда Снайпер всех убивает, то бой как бы не заканчивается... Его где-то нужно прервать.
Вот код после вызова и идентификации боя:
P.S. а !?BA1 - срабатывает
Карта-мод "Война на Холсте"
(This post was last modified: 02.08.2022 02:04 by SergOz.)
|
|
01.08.2022 15:14 |
|
Berserker
Posts: 16657
|
|
02.08.2022 04:16 |
|
SergOz
Posts: 1315
|
Berserker, я делал такую проверку, но это не помогло.
Но тут вопрос даже в дугом: почему !?BA1 срабатывает, а !?FU(OnAfterBattleUniversal) - нет?
Пусть даже и в этом, отдельно взятом, скрипте.
Карта-мод "Война на Холсте"
|
|
02.08.2022 04:21 |
|
SergOz
Posts: 1315
|
daemon_n, я переделал момент нападения: теперь не через HE#:T, а путем телепортации Снайпера к герою, перешедшему определённую "красную черту". Итог тот же.
Карта-мод "Война на Холсте"
(This post was last modified: 02.08.2022 04:33 by SergOz.)
|
|
02.08.2022 04:33 |
|
daemon_n
Posts: 4343
|
|
02.08.2022 04:53 |
|
SergOz
Posts: 1315
|
daemon_n, там два варианта.
Первый: когда герой дошёл до Снайпера и напал на него - тогда id_BAttle выставляется в !?OBx/y/z
Второй: когда герой сделал "лишний" шаг - тогда идет идентификация и после этого произвожу телепорт Снайпера к герою, что вызывает бой.
P.S. Дело точно не в идентификации: я её убирал и результаты те же.
То есть: если герой убит !?FU(OnAfterBattleUniversal) не срабатывает, а !?ВА1 - срабатывает.
Если герой выиграет битву (возможно при экипировке определённого арта), то срабатывают оба триггера.
Мне, со стороны работоспособности скрипта, всё равно какой триггер стоит срабатывает - работает и фиг с ним, но вот это шило в заднице зудение в голове не даёт покоя: а чё ж так происходит?
Карта-мод "Война на Холсте"
(This post was last modified: 02.08.2022 05:35 by SergOz.)
|
|
02.08.2022 05:04 |
|
XEPOMAHT
Posts: 2356
|
(01.08.2022 15:14)SergOz Wrote: Стоит на карте монстр и никого не пропускает. Мимо него можно пройти, но сейчас не об этом. Монстр (снайпер) в бою имеет первый ход и стреляет без перерыва, пока не уничтожит всю армию героя.
Использовать в данном случае мораль для бесконечной атаки = кастыли. Так делать точно не нужно. В чём затруднение в вызове функции, производящую атаку монстра на монстра на поле брани? В эровском триггере "перед_передачей_контроля" атакуешь снайпером поочерёдно с 1 по 21 стеки (естественно с проверкой на трупность) с уроном, 100% уничтожающим стек.
Ну а если делать такую вещь вообще без заморочек, до при посещении снайперов на карте можно сразу вызывать функцию killHero с выводом сообщения, что снайперы всех перебили (т.к. игроку всё равно не обязательно лицезреть бой с ними, заведомо зная, что герой всегда умрёт).
|
|
02.08.2022 06:04 |
|
SergOz
Posts: 1315
|
XEPOMAHT, ну "мораль", как я понимаю, здесь условная и назвал я её так потому что принцип взят из скрипта Берсеркера "Моральный дух". Там просто идет цикличная передача хода одному и тому же стеку.
Quote:Ну а если делать такую вещь вообще без заморочек, до при посещении снайперов на карте можно сразу вызывать функцию killHero с выводом сообщения, что снайперы всех перебили (т.к. игроку всё равно не обязательно лицезреть бой с ними, заведомо зная, что герой всегда умрёт).
В корне не согласен. Зачем тогда в ERA все эти заморочки с .png, прозрачностями, цветными текстами и пр.?
Правильно - для красивой визуализации. Для того чтобы игрок увидел чем ERA отличается от других геройских платформ. Следуя твоей логике, можно договориться до того, что при запуске игры игроку можно выдать текст о том, что его герой сделал то-то, пошёл туда-то, разгромил того-то, преодолел такие-то трудности и одержал невероятную эффектную победу и - game over
Карта-мод "Война на Холсте"
|
|
02.08.2022 07:05 |
|
wessonsm
Posts: 792
|
Berserker, чтобы !!SN:A находил функцию по имени, она должна быть в списке экспорта?
По смещению вызывается:
Только нужно менять значение в скрипте, если перекомпилировать dll-ку, что не очень удобно.
Может есть другие способы, кроме как писать экспортируемую функцию, потому что я до этого пока не дошел, даже не знаю как подступиться.
|
|
21.08.2022 11:52 |
|