(11.10.2021 07:32)Archer30 Wrote: Hi! What do you think about adding FU(GetMaxArtifactId) to EEF?
- !?FU(GetMaxArtifactId);
- !#VA(result:x);
- !!VR(result):S(ART_LAST_WOG);
So basically it will only work for ERA without extra artifact plugins only (same as GetMaxMonsterId). But it is still useful for better organsied script writing I think.
In TUM, I wrote a small fucntion for getting the last ID with emerlad 3 loaded, which suppose to be overriding this proposed function.
- !?FU(GetMaxArtifactId);
- !#VA(result:x);
- !!if&i^tum_emerald_on^;
- !!re i/(ART_LAST_WOG)/999;
- ;
- !!SN:H^art^/i/0/?z1;
- !!UN:C9597928/1/?(firstChar:y);
- ;
- !!br&(firstChar)=35;
- !!en;
- !!VR(result):Si -1;
- !!el;
- !!VR(result):S(ART_LAST_WOG);
- !!en;
Проверять на решётку в первом символе имени артефакта - плохие костыли, а с копированием имени артефакта в z1 - оочень плохие костыли (имя можно проверить из самой структуры артефакта без подобной тормозной воговщины). Так делать не нужно.

Любой не знающий об этих костылях моддер может убрать решётку из имени артефакта и ваш костыльный ERM-код выдаст неправильный результат.
1. Для поиска последнего артефакта стоит всё же пользоваться лимитом на артефакты - для разных версий Эмералдов он разный (т.к. Феанор поленился сразу выделить память под 1000 артов).
2. Последний используемый артефакт стоит искать с конца структуры артефактов, чтобы не напороться на "дырки".
3. Артефакт можно проверять на ценность "s" - такой арт считается игрой пустым, а значит он не участвует в генерации, по факту, всегда являясь бланковым. Для особых случаев можно проверять и цену артефакта: если 0, значит бланковый.