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
igrik Offline

Posts: 2819
Post: #76

Image: Image.jpg
Расширенные подсказки по двеллингам на ERM 2 (Click to View)
Обучающий и показательный пример как правильно конвертировать дублирующийся код в цикл © Berserker (Click to View)
26.10.2020 23:07
Visit this user's website Find all posts by this user Quote this message in a reply
Night Offline

Posts: 462
Post: #77

igrik,
Quote:Расширенные подсказки по двеллингам на ERM 2 (Click to View)

А этот пример под какую версию библиотеки и эры?
Я попробовал у себя на последних доступных для скачивания файлах (от 25.10.2020), у меня:
Так это выглядит (Click to View)
Код из ERm tracking (красиво смотрится) (Click to View)
(This post was last modified: 27.10.2020 17:36 by Night.)
27.10.2020 17:28
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16733
Post: #78

Night, попроси у Игрика пару функций, что у него в библиотеке. Там получение строки с названием жилища и строки о принадлежности жилища. Сейчас функций нет и s^result^ пустая.


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

Posts: 2819
Post: #79

WoG Scrips 2 library

Но учтите: она ещё далеко не закончена и активно пилится поэтому в будущем многое в ней может поменяться.
27.10.2020 18:11
Visit this user's website Find all posts by this user Quote this message in a reply
Bes Offline

Posts: 5459
Post: #80

Code:
New command !!VR$1:Z#2. Creates trigger local temporary z-variable with given contents and assigns its index to integer variable.
    $1 - integer variable.
    #2 - any string.

    The command can be used to create temporal z-variables to change, for example, artifact description,
    show message and restore description.
Berserker, можно один пример, а то не совсем понял как параметр #2 прописывать (литералами, или индексом строки)
28.10.2020 05:00
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16733
Post: #81

Любая строка:
^bes is nice^
(someLocalStr) для (someLocalStr:z)
z5 - забудьте уже про эти глобальные неименованные, но в качестве исключения можно
z(strPtr), где (strPtr:y) — индекс строки

Любая поддерживая движком строка.
Будет создана её копия в виде временной z-переменной с огромный индексом, как у ERT-переменных. Эта переменная только для чтения. Как и ERT. Писать в неё не выйдет.


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

Posts: 5459
Post: #82

блин, напиши для примера ЛЮБУЮ строку кода с этой командой
и да, забыл попросить, если надо такую конструкцию делать в коде, как мне замутить через VA:(name[9]:z)
  1. !!VRz1:S^CRBKG^;
  2. !!FU29756:P(тип_города)/1; получить приставку к имени файла подложки
  3. !!VRz1:+^.pcx^;
  4. !?FU29756;
  5. ;x1 - town type
  6. ;x2 - result number z-var
  7. !!VRzx2&x1=0:+^CAS^;
  8. !!VRzx2&x1=1:+^RAM^;
  9. !!VRzx2&x1=2:+^TOW^;
  10. !!VRzx2&x1=3:+^INF^;
  11. !!VRzx2&x1=4:+^NEC^;
  12. !!VRzx2&x1=5:+^DUN^;
  13. !!VRzx2&x1=6:+^STR^;
  14. !!VRzx2&x1=7:+^FOR^;
  15. !!VRzx2&x1=8:+^ELE^;

   P.S.имеется ввиду, я ни как не обойдусь без девяти отдельных строк для конкатенации к голове и хвосту имени файла уникальную серединку?
28.10.2020 05:53
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16733
Post: #83

Тебе нужна самая свежая версия Эры.
https://dropmefiles.com/5p4Rt
Там реализована, наконец-то, возможность возвращать строки из функций.
  1. ZVSE2
  2. !?PI;
  3. !!VR(pcxName:z):S^CRBKG^;
  4. !!FU(bes_GetTownResourceSuffix):P(TOWN_RAMPART)/?(townSuffix:z);
  5. !!VR(pcxName):+(townSuffix) +^.pcx^;
  6. !?FU(bes_GetTownResourceSuffix);
  7. !#VA(town:x);
  8. !#VA(resultPtr:x);
  9. !!VR(emptyStr:z):S^^;
  10. !!VR(resultPtr):S(@emptyStr);
  11. !!VR(resultPtr)&(town)=(TOWN_CASTLE):Z^CAS^;
  12. !!VR(resultPtr)&(town)=(TOWN_RAMPART):Z^RAM^;
  13. !!VR(resultPtr)&(town)=(TOWN_TOWER):Z^TOW^;
  14. !!VR(resultPtr)&(town)=(TOWN_INFERNO):Z^INF^;
  15. !!VR(resultPtr)&(town)=(TOWN_NECROPOLIS):Z^NEC^;
  16. !!VR(resultPtr)&(town)=(TOWN_DUNGEON):Z^DUN^;
  17. !!VR(resultPtr)&(town)=(TOWN_STRONGHOLD):Z^STR^;
  18. !!VR(resultPtr)&(town)=(TOWN_FORTRESS):Z^FOR^;
  19. !!VR(resultPtr)&(town)=(TOWN_CONFLUX):Z^ELE^;


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

Posts: 5459
Post: #84

спасибо, я понял, думал что можно короче...132
но как видишь, в подобных манипуляциях нет смысла изголяться, код и на чистом ЕРМ вполне себе ясен в данном конкретном примере. я считаю в таких случаях стоит оставить код как и был 10 лет назад, тока имя для ф-ции завести
28.10.2020 06:18
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16733
Post: #85

Quote:код и на чистом ЕРМ вполне себе ясен в данном конкретном примере.
Бес, функции ещё бывает нужно усложнять, дополнять опциональными параметрами, сопровождать и т.д. Не говоря уже про работу с глобальными z-строками и необходимостью комментариев.

Сравни уже:

  1. !?FU95012;
  2. ; Leaves only unique sorted integer items in the array.
  3. ; Calling on [15, 4, 3, 3, 1, 20, 15] list will rearrange and truncate list to the following:
  4. ; [1, 3, 4, 15, 20]
  5. Array ID
  6. !!SN:Mx1/?y1/?y2/d;
  7. !!FU&y1<=1:E;
  8. !!if&y2<>0:;
  9. !!SN:F^ShowErmError^/^Array_SortedUnique function supports only integer arrays^;
  10. !!FU:E;
  11. !!en;
  12. !!FU95009:Px1;
  13. !!SN:Vx1/0/?y3;
  14. ; Find first non-unique item
  15. !!re i/1/y1/1/-1:;
  16. !!SN:Vx1/i/?y4;
  17. !!br&y4=y3:;
  18. !!VRy3:Sy4;
  19. !!en:;
  20. ; Non-unique item was found
  21. !!if&i<y1:;
  22. ; Loop though rest items, copying only unique to the left part
  23. !!VRj:Si +1;
  24. !!re j/j/y1/1/-1:;
  25. !!SN:Vx1/j/?y4;
  26. !!if&y4<>y3:;
  27. !!SN:Vx1/i/y4;
  28. !!VRi:+1;
  29. !!en;
  30. !!VRy3:Sy4;
  31. !!en:;
  32. ; Truncate non-unique items
  33. !!SN:Mx1/i;
  34. !!en;
  1. !?FU(Array_SortedUnique);
  2. ; Leaves only unique sorted integer items in the array.
  3. ; Calling on [15, 4, 3, 3, 1, 20, 15] list will rearrange and truncate list to the following:
  4. ; [1, 3, 4, 15, 20]
  5. !#VA(list:x); Array ID
  6. !!SN:M(list)/?(listSize:y)/?(itemsType:y)/d;
  7. !!FU&(listSize)<=1:E;
  8. !!if&(itemsType)<>(M_INT):;
  9. !!SN:F^ShowErmError^/^Array_SortedUnique function supports only integer arrays^;
  10. !!FU:E;
  11. !!en;
  12. !!FU(Array_Sort):P(list);
  13. !!SN:V(list)/0/?(prevItem:y);
  14. ; Find first non-unique item
  15. !!re i/1/(listSize)/1/-1:;
  16. !!SN:V(list)/i/?(item:y);
  17. !!br&(item)=(prevItem):;
  18. !!VR(prevItem):S(item);
  19. !!en:;
  20. ; Non-unique item was found
  21. !!if&i<(listSize):;
  22. ; Loop though rest items, copying only unique to the left part
  23. !!VRj:Si +1;
  24. !!re j/j/(listSize)/1/-1:;
  25. !!SN:V(list)/j/?(item:y);
  26. !!if&(item)<>(prevItem):;
  27. !!SN:V(list)/i/(item);
  28. !!VRi:+1;
  29. !!en;
  30. !!VR(prevItem):S(item);
  31. !!en:;
  32. ; Truncate non-unique items
  33. !!SN:M(list)/i;
  34. !!en;


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

Posts: 5459
Post: #86

ты прав. я и не спорил. Yes
Но я говорил о конкретно моём примере. Всё. Там ничего нового не нужно. Всё читается сходу даже спустя 8 лет (в моём случае).
Всего лишь адаптировать под временные переменные для получения полного имени файла.
28.10.2020 15:21
Visit this user's website Find all posts by this user Quote this message in a reply
Bes Offline

Posts: 5459
Post: #87

(28.10.2020 06:29)Berserker Wrote:  Bes, потому что ты пишешь простой линейный код без сложных функций, вложенных циклов, активного использования массивов и косвенной адресации, без динамических массивов и вложенных динамических массивов и т.д.
так я ж не спорю, для такого сложного профессионального кода нужна практика и опыт в построении логики кода, чего у меня естественно нет. Считай начинаю всё заново, лишь имея бэкграунд старой школы скриптинга.
Вот, мои первые пробы пера... жаль нет щас возможности на работе с ПК позаниматься, а на бумаге сложно получается (без справки и материала), вчера пробовал )))
  1. !#DC(TRUE) = 1;
  2. !#DC(OBJ_WAR_MACHINE_FACTORY) = 106;
  3. !#DC(WOG_OPT_WAR_MACHINE_III) = 73;
  4. !#DC(CURRENT_PLAYER) = -1;
  5. !#DC(NO_HERO) = -1;
  6. !#UN:P(WOG_OPT_WAR_MACHINE_III)/?i^OPT_STATUS^
  7. !?OB(OBJ_WAR_MACHINE_FACTORY)&i(OPT_STATUS)=(TRUE); //hero is at war machine factory
  8. !!OW:A(CURRENT_PLAYER)/?(hero_ID:y);
  9. !!FU&(hero_ID)=(NO_HERO):E;
  10. !!HE(hero_ID):P?(x:y)/?(y:y)/?(l:y) O?(hero_OWNER);
  11. !!OW:G(hero_OWNER)/?(mp_status:y); //multiplayer check
  12. !!if&(mp_status)=(TRUE):;
  13. !!OB998:S; //disable standard reaction
  14. !!PO998:O(hero_OWNER); //update owner
  15. !!VR(x):+1;
  16. !!PO(x)/(y)/(l):O(hero_OWNER);
  17. !!VR(x):-1; //restore vf
  18. !!FU7799:P(hero_ID); //dismiss original war machines
  19. !!FU7800:P(hero_ID); //correct w vars if needed
  20. !!FU(WOG_SCRIPT.05_GET_MACHINE_DL):P(x)/(y)/(l)/0/0/0/(hero_ID); //get available machines
  21. !!IF&(ERM_FLAG_IS_HUMAN):Q2/z173009;
  22. !!FU7814&(ERM_FLAG_IS_HUMAN)/2:P(x)/(y)/(l)/(hero_ID); //we buy machines
  23. !!en:;
  24. !!FU7815&-(ERM_FLAG_IS_HUMAN):P(x)/(y)/(l)/(hero_ID); //AI buys machines
  25. !!OB998&-(ERM_FLAG_IS_HUMAN):R; //AI gets an enabled factory (player might have disabled it)

Это пока просто переписал родной WoG скрипт, с РО костылями, которые потом уберу.
И да, не знаю, как быть с вот таким смещением координат
  1. !!PO998:O(hero_OWNER); //update owner
  2. !!VR(x):+1;
  3. !!PO(x)/(y)/(l):O(hero_OWNER);
  4. !!VR(x):-1; //restore vf
ведь SN:O во второй версии ERA с изъяном, и по сути я, убрав эти древние изголяния с подгонкой кода под красныве клетки объекта и последующего диалога вывода инфы по объекту, автоматом заложу возможный баг при известной ситуацией с другим героем на входе фабрики. Да, код будет под ERA3 написан, но и на ERA2 перекомпилированный тож уйдёт в сборку, потому такая вилка и возникает
28.10.2020 15:40
Visit this user's website Find all posts by this user Quote this message in a reply
igrik Offline

Posts: 2819
Post: #88

(28.10.2020 15:40)Bes Wrote:  
  1. !#DC(TRUE) = 1;
  2. !#DC(OBJ_WAR_MACHINE_FACTORY) = 106;
  3. !#DC(WOG_OPT_WAR_MACHINE_III) = 73;
  4. !#DC(CURRENT_PLAYER) = -1;
  5. !#DC(NO_HERO) = -1;
Надеюсь эти объявления у тебя "тестовые", и ты их не будешь в скрипт засовывать. А то будет горе.
Из-за того, что они уже объявлены у Берса, после твоего объявления будут сыпаться ошибки.

(28.10.2020 15:40)Bes Wrote:  
  1. !#UN:P(WOG_OPT_WAR_MACHINE_III)/?i^OPT_STATUS^
А вот это уже плохой код - что если я, или ещё один умник захочет использовать глобалку с таким же именем?
Кстати, такими вот конструкциями изобилует нынешний WoG Scripts. Давайте не будем их применять. Разве сложно уже в триггере проверить опцию и не использовать глобалку?

(28.10.2020 15:40)Bes Wrote:  
  1. !!FU7815&-(ERM_FLAG_IS_HUMAN):P(x)/(y)/(l)/(hero_ID); //AI buys machine
Бес, именованные функции используй!
28.10.2020 19:18
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16733
Post: #89

igrik, я так понял, это черновая наброска адаптации кода из Феникс-Мода по машинам войны.


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

Posts: 5459
Post: #90

igrik, это всего лишь адаптация готового wog-кода под ERM2.0
никто пока ничего не делал готовое, не переживай.
По констатам - я просто их на виду себе поставил из 9999 era - consts, конечно же.
ф-циям ещё не успел придумать названия, это успеется
29.10.2020 03:08
Visit this user's website 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