Current time: 10.04.2025, 07:36 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
Школа ERM 2
» ERM 2.0 для ERA III
Author Message
Bes Offline

Posts: 5459
Post: #46

SergOz, меня уже Berserker осадил этим:
Quote:внутри %I() нельзя использовать проценты.
23.10.2020 20:50
Visit this user's website Find all posts by this user Quote this message in a reply
SergOz Offline

Posts: 1332
Post: #47

(23.10.2020 20:17)Berserker Wrote:  внутри %I() нельзя использовать проценты.
И нельзя принудительно задавать ID ни в i^...^, ни в (...:y).
Только автоматическое выделение.


Карта-мод "Война на Холсте"
23.10.2020 21:01
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16733
Post: #48

SergOz, но работает синтаксис ^%y(somePtr)^ или y(somePtr). Если я верно понял часть вопроса.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
23.10.2020 21:54
Find all posts by this user Quote this message in a reply
Bes Offline

Posts: 5459
Post: #49

Quote:И нельзя принудительно задавать ID ни в i^...^
хм, точно нельзя?
Ведь если в SN:W^^ можно
а
  1. !!VRy1:S10;
  2. !!SN:W^var%Y1^/55; = !!VRi^var10^:S55;
то почему i^var%y1^ не поддерживается?
23.10.2020 22:25
Visit this user's website Find all posts by this user Quote this message in a reply
SergOz Offline

Posts: 1332
Post: #50

Bes, как я понял в i^var%y1^ значение y1 будет восприниматься как имя, а не как ID. Само имя и будет ID, но, хз какое оно (автовыделение) и где его искать.
Berserker, а нужно ли перед первым чтением из, например,
  1. !!SN:W^%(colPlayer)_%(colTent)^/?i^visit%(colPlayer)%(colTent)^;
писать
  1. !!VRi^visit%(colPlayer)%(colTent)^:S0;
?


Карта-мод "Война на Холсте"
(This post was last modified: 24.10.2020 00:01 by SergOz.)
23.10.2020 22:39
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16733
Post: #51

Внутри i^...^ идёт обычная интерполяция, как и внутри ^...^. Там можно что угодно использовать. Например, значения локальных переменных:
  1. i^battle_hero_%(stackSide)^.
  2. или, упаси боже,
  3. i^battle_hero_%v9950^.
Даже в простом варианте можно сослаться на другую глобальную переменную:
  1. !!VRi^battle_side^:S(BATTLE_LEFT);
  2. ...
  3. i^battle_hero_%I(battle_side)^


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
23.10.2020 22:51
Find all posts by this user Quote this message in a reply
Bes Offline

Posts: 5459
Post: #52

но при всём при этом нельзя такую солянку в диалоге отобразить? странно
Dry
  1. !!VRi^battle_hero_%v9950^:S?(var_copy:y); ### ERA3 не поддерживает такой GET-syntax ###
  2. !!IF:M^%(var_copy)^; correct
  3. !!IF:M^%I(battle_hero_%v9950)^; not correct
24.10.2020 00:13
Visit this user's website Find all posts by this user Quote this message in a reply
SergOz Offline

Posts: 1332
Post: #53

Bes, !!IF:M^%i(battle_hero_%v9950)^;
нижний регистр i


Карта-мод "Война на Холсте"
24.10.2020 00:20
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16733
Post: #54

S больше не поддерживает GET-syntax.

!!IF:M^%I(battle_hero_%v9950)^; not correct
Так нельзя, поскольку это вложенный % в %I(). Интерполяция внутри интерполяции не поддерживается.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
24.10.2020 00:26
Find all posts by this user Quote this message in a reply
Bes Offline

Posts: 5459
Post: #55

(24.10.2020 00:26)Berserker Wrote:  S больше не поддерживает GET-syntax.
начиная с какой версии, не напомнишь? надеюсь с ERA3 Rolleyes

SergOz, я до сих пор оперирую справочными данными от ERA2, а там нижний регистр в ^^ диалога не поддерживался
24.10.2020 00:42
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16733
Post: #56

Bes, да, с третьей, где VR полностью переписан.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
24.10.2020 00:53
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16733
Post: #57

Задача: по клавише "H" войти в оборону всеми отрядами до хода следующего стека противника.
Применение: возможность массово пропускать ходы при ослеплённом противнике.
Требования: Эра 3.1.3+
  1. ; После любого боя, как сетевого, как и локального сбросим флаг спец. действия «Защита всем»,
  2. ; чтобы в новом бою по умолчанию он был не активен. А так как любая глобальная переменная имеет значение
  3. ; 0 по умолчанию, то заранее инициализировать флаг не нужно.
  4. !?FU(OnAfterBattleUniversal);
  5. !!VRi^nig_isAllDefendAction^:S(FALSE); Установили глобальный флаг спец. действия «Защита всем» в ложь (FALSE)
  6. ; Константы (TRUE) - истина и (FALSE) - ложь заменяют 1 и 0 для логических значений
  7. !!VRi^nig_allDefendSide^:S0; Удаляем переменные, которые использовали в бою. Нули не записываются в сохранения
  8. !!VRi^nig_allDefendRound^:S0;
  9. ; События нажатия клавиши в бою. Первый аргумент (x1) код клавиши. Второй — предотвратить ли реакцию по умолчанию
  10. ; Список кодов клавиш встроен в ЕРМ редактор и отдельно есть в Mods\Era Erm Framework\9999 key codes.erm
  11. !?FU(OnKeyPressed_Battle)&x1=(KEY_H);
  12. !#VA(key:x) (preventDefault:x);
  13. !!BG:N?(stackId:y); Получили ID текущего стека
  14. !!VR(stackSide:y):S(stackId) :(BATTLE_STACKS_PER_SIDE); Получили активную сторону, поделив ID на макс числов стеков для одной стороны
  15. !!FU&i^battle_localHuman_%(stackSide)^<>(TRUE):E; Вышли, если текущая сторона — не человек, сидящий за данным компьютером
  16. ; Глобальные переменные battle_localHuman_0 и battle_localHuman_1 устанавливаются
  17. ; в библиотеке ЭРЫ в событиях «до боя»
  18. ; Так как (stackSide) хранит 0 или 1, то вся строка будет раскрыта в battle_localHuman_0
  19. ; или battle_localHuman_1, то есть вернёт значение для текущей стороны
  20. !!VR(preventDefault):S(TRUE); Запрещаем реакцию на клавишу по умолчанию
  21. !!VRi^nig_isAllDefendAction^:S(TRUE); Устанавливаем флаг действия «Защита всем» в ИСТИНУ
  22. !!VRi^nig_allDefendSide^:S(stackSide); Запоминаем сторону, отряды которой должны войти в оборону
  23. !!VRi^nig_allDefendRound^:Si^battle_round^; Запоминаем текущий раунд
  24. !!BG:A(BATTLE_ACTION_DEFEND); Входим в оборону текущим отрядом
  25. ; После очередного действия в бою, если активен флаг «Защита всем»
  26. !?FU(OnAfterBattleAction)&i^nig_isAllDefendAction^=(TRUE);
  27. !!BG:N?(stackId:y); Получили ID текущего стека. В событии "OnAfterBattleAction" текущий стек уже не тот,
  28. ; что был в событии "OnBeforeBattleAction", а тот, который получит управление
  29. !!VR(stackSide:y):S(stackId) :(BATTLE_STACKS_PER_SIDE); Получили активную сторону, поделив ID на макс числов стеков для одной стороны
  30. !!if&(stackSide)=i^nig_allDefendSide^:; Если текущая сторона — та, что активировала «Защита всем»
  31. !!BG:A(BATTLE_ACTION_DEFEND); Выбираем действие «Защита»
  32. !!el:;
  33. !!VRi^nig_isAllDefendAction^:S(FALSE); Иначе отключаем флаг «Защита всем», давая противнику сделать ход, а человеку потом среагировать на него
  34. !!en:;
  35. ; Если новый раунд наступил при активном действии «Защита всем», то сбросить флаг действия «Защита всем»
  36. !?FU(OnBattleRound)&i^nig_isAllDefendAction^=(TRUE)/i^battle_round^<>i^nig_allDefendRound^;
  37. !!VRi^nig_isAllDefendAction^:S(FALSE);


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
24.10.2020 01:30
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16733
Post: #58

(23.10.2020 06:23)SergOz Wrote:  
Мне нужно контролировать Палатки Ключников, потому приведу этот пример: (Click to View)
Вопрос: как можно оптимизировать этот скрипт?

SergOz, сформулируй тезисно, что должен делать скрипт.

Для палатки с определённым цветом вывести по ПКМ число раз, сколько заходили в объект?


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
24.10.2020 02:03
Find all posts by this user Quote this message in a reply
SergOz Offline

Posts: 1332
Post: #59

Berserker, да, по ЛКМ+Ctrl. Чтобы на каждой палатке количество посещений каждого игрока.
У меня там заморочка с этими палатками и этот скрипт нужен только для контроля поведения ИИ на фазе тестирования.
Мой скрипт работает и мне этого достаточно. Просто, в процессе написания, возникли вопросы почему глючит !!OBi^...^ и как именованную y уподобить синтаксису !!SN:W^..^/Syx1;
Ну и узнать про другие возможные упрощения/улучшения в скрипте, в качестве повышения уровня понимания ERM2.


Карта-мод "Война на Холсте"
(This post was last modified: 24.10.2020 02:34 by SergOz.)
24.10.2020 02:24
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16733
Post: #60

Пожалуйста, используйте уникальный префикс для своих глобальных переменных вроде "serg_". Иначе не оберётесь проблем с совместимостью и багами.
  1. !?OB10;
  2. !!HE-1:O?(colPlayer:y); узнаю цвет игрока
  3. !!OB998:U?(colTent:y); узнаю подтип палатки (цвет)
  4. ; для показа посещений палатки всеми игроками при клике на ней
  5. !!SN:W^%(colPlayer)_%(colTent)^/?i^visit%(colPlayer)%(colTent)^;
  6. !!VRi^visit%(colPlayer)%(colTent)^:+1;
  7. !!SN:W^%(colPlayer)_%(colTent)^/i^visit%(colPlayer)%(colTent)^;
меняем на:
  1. !?OB(OBJ_KEYMASTERS_TENT);
  2. !!HE-1:O?(player:y);
  3. !!OB998:U?(tentColor:y);
  4. !!VRi^serg_tent_visits_%(tentColor)_%(player)^:+1;


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
24.10.2020 02:37
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2025 MyBB Group