ERA2.9.3 released+download
Era v2.9.3
[+] Improved "ErmLegacySupport" option. Negative z-variables are not local for classic FU1..FU29999.
Negative z-variables are not nulled on FU1..FU29999 enter and other quirks.
Old WoG scripts bug count decreased.
[!] Warning. Modern ERM scripts should not rely on any initial y+, y-, e+, e-, z- value. Assign them
before usage. In named functions and non-functional triggers y+, e+, z- variables are local to current trigger.
Use temprorary global z+ variables or SN:W to return string values from functions.
[+] x1..x16 are also printed during ERM vars dumping.
[*] Question in ERM error dialog is changed from "continue without dumping" to "dump ERM memory".
[*] IFs counter is now reset at each trigger start.
[-] Fixed bug: current hero was not set in a few ERM events.
Download
Download All
https://pan.baidu.com/s/1RDFalVOS5RbDQXYcQi4X-w
======================================
Era 2.9.2 is out https://vk.com/emoji/e/f09f92a5.png
I was working on new 2.9.x branch for a long time and it's finally ready. Key features of the update:
https://vk.com/emoji/e/e2ad90.png EPM script engine optimization allowed to speed up the execution of repeatable code by 10x times! (from 130 thousand commands/sec to 1.3 million commands/sec). It means faster and smoother gameplay, more heavy mods, more opportunities to improve AI.
https://vk.com/emoji/e/e2ad90.png Many improvements to the EPM were made, which will have a positive impact on the ease of writing and debugging code.
https://vk.com/emoji/e/e2ad90.png New events support: hero screen rendering, mouse clicks handling in recruit troops screens, city hall and kingdom overview dialog.
https://vk.com/emoji/e/e2ad90.png Script writers are provided with an interface to work with the recruitment dialog. It became possible to implement many ideas based on it: summoning different creatures in battle, transferring stacks between heroes, remote army purchase, new creature dwellings and much more.
https://vk.com/emoji/e/e2ad90.png Evolution of the Era code. Era 1.9 code is fully ported to Delphi. Angel.dll is now just a stub.
https://vk.com/emoji/e/e2ad90.png Gift for antiviruses: the old utility DEFka, replaced by a favorable version 2.0 on another engine.
Read the rest in the changelog: Help/Era/era ii changelog.txt.
====================
https://vk.com/emoji/e/f09f91ac.png Special thanks to the fans of the game, who supported the project financially: Andarium(https://vk.com/emoji/e/f09f9491.pnghttps://vk.com/emoji/e/f09f9491.png) and several other players (https://vk.com/emoji/e/f09f9491.png). Please write you nicknames on/after donations, so that I could mention you in annals.
https://vk.com/emoji/e/f09f92ab.png Special thanks to daemon_n for patronage of the most popular Russian-language Era all-in-one package and support, tirelessly provided to players, as well as the translation of Advanced Classes mod.
https://vk.com/emoji/e/f09f92ab.png Thanks to MoP for its battery plugin.dll, which helped me a lot during recruit dialog API development.
https://vk.com/emoji/e/f09f92ab.png I would like to thank igrik for constant releases and updates of plugins, advices and help.
Download actual Era version
Install over Complete Collection or the Shadow of Death.
https://vk.com/emoji/e/f09f9491.png You can support the release of new versions via donation app or directly to bank card:
4496 5501 6577 3844 (Belarus, BPS-SBERBANK). Service: paysend.com
{{{ CHANGELOG }}}
Version 2.9.2
------------------------
[-] Release building software used to put older angel.dll into installer.
[-] Fixed bug: negative y-variables were reset even in non FU1..FU29999.
Version 2.9.1
------------------------
#small-fixes #antiviruses-heaven
[+] Replaced ToolsDEFka v1.0 with more feature rich DEFka 2.0.
[+] Replaced Virtual Pascal angel.dll stub with Delphi angel.dll stub.
[+] Added "ErmLegacySupport" option in heroes3.ini. If set to 1, compatibility with old ERM scripts will be better
at the cost of ~15% ERM performance decrease. Options forces local variables reset before each !?XX trigger, even
in DO-loops.
[-] Renamed ModsWoGEraPluginserm_hooker.dll to *.era.
Version 2.9.0
------------------------
#performance #erm-speed-up #erm-stability #era-evolution #recruit-dialog
[@] Special thanks to HMM 3 fans, who supported the project with donations: Andarium (++) and a few other players (+).
[@] Special thanks to daemon_n for maintaining main Russian Era all-in-one package, script writers and players support,
Advanced Classes Mod translation and more.
[@] Special thanks to MoP. His Battery.dll plugin was used during Recruit Dialog API development.
[@] Special thanks to igrik for his constant plugins updates, advices and help.
[+] Speeded up ERM triggers in 2-10x times. There is no more performance penalty, depending on total triggers number.
Whether there are 5 total triggers or 5000, trigger search time is almost linear. Triggers location in memory and search mechanism
were optimized.
[!] Backward incompatible change: local variables saving and initialization is performed before the first trigger of particular type (like !?CM2)
and restoration is performed after the last trigger of particular type. It means, that code must not depend on local vars initial zero/empty value.
Some original WoG scripts need corrections.
[+] Rewritten trigger execution procedure. Features:
- Up to 32 nested IFs support.
- Each trigger/function from now has its own local set of y1..y100, e1..e100, z-1..z-10, x1..x16, f996..f1000, v997..v1000 variables.
Flags and v-variables are automatically set before first trigger of the same type execution.
x1..x16 usually hold trigger/function paremeters and should be changed only when you know, what you are doing.
- Optimized !!DO support. Variables saving/restoring is performed only once before !!DO-loop and after.
[+] Rewritten !!DO implementation. Now it's lightning fast (10x), almost same as manual loop with SN:G.
- DO parameters are set only once before the first iteration.
- DO:P? syntax is supported. Get-parameters will have 0 value at first iteration and their final value will be returned after the last iteration.
Example: !!DO(Test)/0/100/1:P?y1; y1 will be set to x1 value after last loop iteration, x1 initial value is 0
- !!DO:P= syntax is not supported anymore.
- Backward iteration is now supported. !!DO(Test)/100/-10/-1; will iterate 111 times from 100 to -10.
[+] v1..v10 and z1 variables are restored after OnKeyPressed event automatically. No keyboard fix scripts is necessary anymore.
Negative y-variables are DEPRECATED and are subject to be removed in the future. Do not use them in new scripts.
They are saved and restored for any event, except !?FU1..!?FU29999. Thus some WoG scripts used them as local variables (positive y-vars are better),
and some scripts used them as return values from FU1..FU29999 functions (like global variables).
[+] SN:E always assigns both v1 and e1. No need to add 4 to calling convention in order to receive float result.
[+] SN:X works directly with x1..x16 now. Parameters for Era triggers are assigned to x1..x16. Thus you can write:
!?FU(OnKeyPressed)&x1=27; handle ESC key (code 27)
!!VRx2:S1; disable default reaction
[+] Era 1.9 was fully ported to Delphi. Angel.dll is left as deprecated stub only. Antiviruses no longer complain on angel.dll.
[+] All SN receiver commands are now handled by Era.
[+] ERM Hooker was updated to 2.1 version and is now part of Era package. Mod makers should not include it in their mods.
[+] Added new event "OnLoadHeroScreen". It occurs just before Hero Screen is drawn for specific hero: after "OnOpenHeroScreen"
event and during each switching in the same dialog between different heroes. Event also occures during RMB on hero in tavern
and in battle (with special plugins). The event can be used to change hero skills/info/troops only for hero screen dialog.
[+] Added "OnRecruitDlgMouseClick", "OnTownHallMouseClick" and "OnKingdomOverviewMouseClick" events. All parameters
can be obtained via !!CM, as usual. Default reaction can be disabled.
[+] Improved SN:S / !?SN pair. Sound name is always copied to a separate buffer before calling PlaySound.
Previously the following code used to produce no sound:
!!VRz1:S^test.wav^;
!!SN:Pz1;
!?SN;
!!VRz1:S^WTF^;
[+] OnBeforeHeroInteraction event has 3-d parameter (x3): "enable interaction". Set it to 0 to disable interaction.
[+] Added SN:F^era.dll or kernel32.dll exported function name^/...function arguments... for executing functions
with STDCALL calling convention. No more need to use SN:L... A... E... in most cases.
Example: !!SN:F^ReadStrFromIni^/^key^/^section name^/^Datatest.ini^/?z2;
!!SN:F^GetButtonID^/^testBtn^;
[+] Added ERM command for dynamical string interpolation (substitution of variables in string).
SN:I(string to interpolate)/?z#.
Command can be used for interpolating strings, obtained from external sources, such as ini-files
and SN:T, though its usage is recommended only for debugging/porting needs.
Example:
Use SN:T, UN:N6 or get input from dialog in z2.
Example z2 contents: '%Y5 %V996 test %Z5'
!!SN:Iz2/?z3; z3 now contains z2 contents with all variables substituted/interpolated
Updated "Quick Savings" mod.
[+] Updated "wog native dialogs" plugin by igrik.
[+] Era.dll now exports 2 additional functions: GetArgXVars and GetRetXVars. Each one returns pointer to int.
The first set of values should be used as parameters for generated events. They are automatically copied to x1..x16
right on trigger execution start. The second array holds copied x1..x16 values after trigger execution and serve
as return values.
Example:
GetArgXVars() = 1; // default reaction is enabled
FireErmEvent(100000); // call trigger 100000
int defReactionEnabled = GetRetXVars(); // get "default reaction enabled" parameter final value
[-] Backward compatibility with plugins, adding new ERM receivers is broken. New API for regestering custom
ERM receiver handler is ready, only docs are missing for now.
[+] Added new receiver !!RD for managing recruit dialog and a few new events.
Whenever recruit dialog is created, an event "OnOpenRecruitDlg" is triggered with the following parameters:
x1 - selected/active monster slot (0..3)
x2 - flags/options. Combination of bits, controlling dialog behavior:
CLOSE_ON_BUY = 1; Dialog should be closed, when buy button is clicked. Used normally in towns
ir when there is only single recruit slot. Unset this flag to force use to manually close dialog.
AUTO_UPDATE_ADVMAP = 2; Adventure map screen should be updated after any recruit is hired (even when dialog is shown).
This flag is used during hiring recruits from adv. map dwellings, allowing player to see
new creature quantities in the right bottom info screen.
x3 - enable dialog = 1. Set to 0 to not show dialog at all.
When recruit dialog is closed, an appropriate "OnCloseRecruitDlg" is trigger without parameters.
When dialog slider is touched or active slot changed, recalculation of number of monsters to hire
and total costs is performed in "OnRecruitDlgRecalc" event. All parameters can be changed.
x1 - creature cost in gold
x2 - resource ID (0..5) or -1
x3 - resource cost
Dialog was modified to allow zero gold/resource cost.
When a few recruits are hired, "OnRecruitDlgAction" is triggered.
x1 - number of hired creatures. Read-only.
!!RD:C#slot/$type[/$num/$sourceId/#0 = use original number]; Configurate dialog
===============================================================================
#slot - dialog slot index (0..3)
$type - creature type to hire in specified slot or -1 for inactive slot.
$num- current number of creatures to hire. If the last parameter is 0, then it's original number
of monsters to hire, remembered right after "OnOpenRecruitDlg" event (get syntax only).
Number of creatures is usually directly binded to some source, like town creature dwelling.
Thus, settings this value in configuration phase, you change real creature quantity.
$sourceId - the source/memory, where available number of creatures is stored.
>> For existing towns on the map the following sourceId formula can be used:
Town ID * 14 + (town creature dwelling 0..6) + (7 for upgraded only), where Town ID is CA:U.
For instance, the source of second town on the map, 3-d upgraded dwelling is: 1 * 14 + 3 + 7 = 24.
>> If dialog is called with special, programmer-defined external sources, they will have the following IDs:
9000, 9001, 9002, 9003. For instance, mod maker implemented custom dwelling in town and has some memory,
where number of creatures for hiring is stored. Script writers will be able to see such sourceId as 9000.
>> Custom source. sourceId >= 10000. User-scripted implementation.
When custom source is used, unique memory block is allocated for it. Do not forget to set initial
value in "OnOpenRecruitDlg" and get final (remaining) value in "OnCloseRecruitDlg".
Same sourceId may be assigned to any number of dialog slots. All those slots will display same
creature quantity and update simultaneously. This is usefull for alternative creatures implementation.
Slots may have different creature types (and costs), but total amount of recuits is shared between all
slots.
SourceId is changed before applying new monsters number. Thus !!RD:C0/13/100/20000 will change
sourceId to 20000 (custom) first and then set monsters quantity to 100 archangels, without changing
original dwelling/object/etc population.
You can set slot 0 and 3 types to some values and slot 1 and 2 types to -1. Free space will collapse and user
will see only two slots.
Dialogs without working slots (creature type <> -1) will not be shown.
Example: !!RD:C2/?y3; y3 is creature type is 3-d dialog logical slot
!!RD:S#offset; Shift slots
===============================================================================
#offset - shift all slots by this value to the right (positive number) or to the left (negative number).
If slot goes outside of 0..3 indexes, it disappears.
Example: given 0..1 slots with normal and upgraded creatures and any sourceIds. Task: prepend two custom slots
with angels/archangels to them.
!!RD:S2 C0/12/2/12345 C1/13/2/54321;
Before:
After:
Shifting is performed will all settings (number, type, sourceId) preserved.
Example 2: remove first slot with upgraded monsters and leave non upgraded only.
!!RD:C0/?t/?t/?y2; y2 is sourceId for slot 0, t - temp global quick var
!!VRy2:%14; y2 - is dwelling index 0..13, 7+ for upgraded
!!RD&y2>=7:S-1; shift one slot to the left if the first slot is upgraded town dwelling
!!RD:F#visualSlot/?$logicalSlot; Convert visual dialog slot index to logical one (used with !!RD:C)
===============================================================================
#visualSlot - visible slot index (0..3)
?$logicalSlot - logical slot index (0..3 or -1)
Command used together with mouse handling in recruit dialog. Visible slot IDs are monotonically
increasing and need to be converted to logical slot IDs.
Example:
is displayed as
, where creature B has visual slot index 1 and logical slot index 3
!!RD:I?$dialogId[/?$townId/?$dwellingId/?$selectedSlot]; Get current dialog Info
===============================================================================
?$dialogId - Unique recruit dialog ID. Used to distinguish between nested dialogs (yep, it's possible). Reusable.
?$townId - ID of town, for which dialog is opened or -1.
?dwellingId - ID of town dwelling, for which dialog is opened or -1. 0..6 non upgraded, 7..13 for upgraded.
Horde buildings (+X population) are treated as dwellings, they influence.
?$selectedSlot - Active logical slot index.
!!RD:M#var/$value; Access current recuird dialog associative memory
===============================================================================
#var - either integer number or unique string. Same as SN:W
$value - get/set/modify variable value
Commands provide fully-featured SN:W equivalent with memory, allocated for each created recruit dialog.
Memory is released after "OnCloseRecruitDlg" for each dialog.
Example:
!!RD:M^acm.mapX^/v998 M^acm.mapY^/v999 M^acm.mapZ^/v1000;
!!RD:M^mithril^/*2;
!!RD:O#townId/#dwellingId/#targetType/#targetId[/#dlgFlags]; Open new recruit dialog (previous dialogs will remain in the background)
===============================================================================
#townId - ID of town to open dialog for or -1. Town will be used as slots source.
#dwellingId - ID of town dwelling (0..13) or -1. Dwelling will be used as slots source.
#targetType - Type of the destination for hired recruits:
RECRUIT_TARGET_TOWN = 0;
RECRUIT_TARGET_HERO = 1;
RECRUIT_TARGET_CUSTOM = 2; Destination will be determined by Lua/ERM script and handled manually
#targetId - ID of target: hero ID, town ID or special value for Lua/ERM script.
#dlgFlags - Combination of CLOSE_ON_BUY and AUTO_UPDATE_ADVMAP flags. See "OnOpenRecruitDlg" event.
Don't set this parameter of using native/default settings.
@Berserker Thank you for all your efforts in the continuous improvement of ERA!
Please feel free to use this post for ERA's update release. And I hope I don't cause you any displeasure by Posting this thread on your behalf without your permission. 英文不好,看不懂{:1_330:} 真的快啊。。。。。。。 这个版本怎么样?有没有实测的? 满满的英文,表示看不懂啊! 速度太快了。等大佬版本稳定了,我再考虑移植整合包哈。支持大佬更新。 好东西,顶一个,不过英文看不懂哦!! 真心感谢大佬分享呀~~~~ 看不懂英文的同学,请使用谷歌浏览器(Chrome),在本页面任意空白位置,右键菜单,选择“翻成中文”,即可。
你们试想一下,Bersy大神根本看不懂中文,是什么感觉? 时代v2.9.3
[+]改进了“ ErmLegacySupport”选项。负z变量不是经典FU1..FU29999的局部变量。
负z变量在FU1..FU29999 enter和其他功能中不为空。
旧的WoG脚本错误计数减少了。
[!] 警告。现代ERM脚本不应依赖任何初始y +,y-,e +,e-,z-值。分配他们
使用前。在命名函数和非函数触发器中,y +,e +,z-变量是当前触发器的局部变量。
使用临时全局z +变量或SN:W从函数返回字符串值。
[+] x1..x16也将在ERM var转储期间打印。
[*] ERM错误对话框中的问题从“不转储继续”更改为“转储ERM内存”。
[*]现在,每次触发时,IF计数器都会重置。
[-]已修复的错误:在一些ERM事件中未设置当前英雄。
复制代码
下载
下载全部
[中文下载镜像]
https://pan.baidu.com/s/1TSAvWxQ-_CbiEJhzQGKI8w
========================== ===========
时代2.9.2出来了,
我长时间在新的2.9.x分支上工作,终于准备好了。更新的主要功能:
EPM脚本引擎优化允许将可重复代码的执行速度提高10倍!(从13万命令/秒到130万命令/秒)。这意味着更快,更流畅的游戏玩法,更多沉重的mod,更多改善AI的机会。
对EPM进行了许多改进,这将对编写和调试代码的简便性产生积极影响。
支持新事件:英雄屏幕渲染,新兵屏幕中的鼠标单击处理,市政厅和王国概述对话框。
脚本编写者具有与招聘对话框一起使用的界面。在此基础上可以实现许多构想:召唤战斗中的不同生物,在英雄之间转移堆叠,远程军队购买,新生物住所等等。
时代代码的演变。1.9版代码已完全移植到Delphi。Angel.dll现在只是一个存根。
防病毒礼物:旧的实用程序DEFka,由另一个引擎上的有利版本2.0代替。
阅读更改日志中的其余内容:Help / Era / era ii changelog.txt。
====================
特别感谢游戏的支持者,他们为该项目提供了经济支持:Andarium()和其他几位玩家()。请在捐赠前后注明您的昵称,以便在年鉴中提及您。
特别感谢daemon_n慷慨地为玩家提供最受欢迎的俄语时代Era多合一软件包和支持,以及Advanced Classes mod的翻译。
感谢MoP提供的电池plugin.dll,它在募集对话框API开发过程中为我提供了很多帮助。
我要感谢igrik不断发布和更新插件,建议和帮助。
下载实际的时代版本
通过Complete Collection或Death of Death进行安装。
您可以通过以下方式支持发布新版本捐赠应用程序或直接到银行卡:
4496 5501 6577 3844(白俄罗斯,BPS-SBERBANK)。服务: paysend.com
{{{CHANGELOG}}}
版本2.9.2
------------------------
[-]发布用于将较旧的angel.dll放入安装程序的构建软件。
[-]已修复的错误:即使在非FU1..FU29999中,y负变量也被重置。
版本2.9.1
------------------------
#small-fixes#antiviruses-heaven
[+]替换了具有更多功能丰富的DEFka 2.0的ToolsDEFka v1.0 。
[+]用Delphi angel.dll存根替换了虚拟Pascal angel.dll存根。
[+]在heroes3.ini中添加了“ ErmLegacySupport”选项。如果设置为1,则与旧的ERM脚本的兼容性会更好
,但会导致ERM性能下降约15%。选项会强制在每次!?XX触发之前重置局部变量,即使
在DO循环中也是如此。
[-]将ModsWoGEraPluginserm_hooker.dll重命名为* .era。
版本2.9.0
------------------------
#performance#erm-up-up#erm-stability#era-evolution#recruit-dialog
[@ ]特别感谢HMM 3粉丝,他们通过捐赠支持了该项目:Andarium(++)和一些其他玩家(+)。
[@]特别感谢daemon_n维护了主要的俄罗斯时代多合一软件包,脚本编写器和播放器支持,
高级类Mod翻译等。
[@]特别感谢MoP。在Recruit Dialog API开发期间使用了他的Battery.dll插件。
[@]特别感谢igrik对插件的不断更新,建议和帮助。
[+]将ERM触发速度提高了2-10倍。不再有性能损失,这取决于触发器总数。
无论共有5个触发器还是5000个触发器,触发器搜索时间几乎都是线性的。
优化了触发器在内存中的位置和搜索机制。
[!]向后不兼容的更改:局部变量的保存和初始化在特定类型的第一个触发器(例如!?CM2)之前
执行,而恢复在特定类型的最后一个触发器之后执行。这意味着该代码不得依赖于本地vars初始零/空值。
一些原始的WoG脚本需要更正。
[+]重写了触发器执行过程。特点:
-多达32个嵌套IF支持。
-从现在开始,每个触发器/功能都有其自己的本地集合y1..y100,e1..e100,z-1..z-10,x1..x16,f996..f1000,v997..v1000变量。
在第一次执行相同类型的触发器之前,会自动设置标志和v变量。
x1..x16通常保存触发器/函数参数,仅当您知道自己在做什么时才应更改。
-优化!! DO支持。变量保存/恢复仅在!! DO循环之前和之后执行一次。
[+]重写!! DO实现。现在快如闪电(10倍),几乎与SN:G的手动循环相同。
-DO参数仅在第一次迭代之前设置一次。
-DO:P?支持语法。Get参数在第一次迭代时将具有0值,并且在最后一次迭代之后将返回它们的最终值。
例如:!! DO(Test)/ 0/100/1:P?y1; y1将在最后一次循环迭代后设置为x1值,x1初始值为0-
!! DO:P =语法不再受支持。
-现在支持向后迭代。!! DO(测试)/ 100 / -10 / -1; 将从100迭代到-10的111次。
[+] v1..v10和z1变量在OnKeyPressed事件自动恢复。不再需要键盘修复脚本。
负y变量已弃用,将来可能会被删除。不要在新脚本中使用它们。
除!?FU1 ..!?FU29999外,它们会保存和恢复用于任何事件。因此,一些WoG脚本将它们用作局部变量(y型变量为正),
一些脚本将它们用作FU1..FU29999函数的返回值(如全局变量)。
[+] SN:E始终同时分配v1和e1。无需在调用约定中添加4即可接收浮点结果。
[+] SN:X现在可以直接与x1..x16一起使用。时代触发器的参数分配给x1..x16。因此,您可以编写:
!?FU(OnKeyPressed)&x1 = 27; 处理ESC键(代码27)
!! VRx2:S1; 禁用默认响应
[+] Era 1.9已完全移植到Delphi。Angel.dll仅保留为不推荐使用的存根。防病毒不再抱怨angel.dll。
[+]现在,所有SN接收器命令都由Era处理。
[+] ERM Hooker已更新至2.1版本,现已成为Era软件包的一部分。Mod制造商不应将其包括在其mod中。
[+]添加了新事件“ OnLoadHeroScreen”。它发生在为特定英雄绘制英雄屏幕之前:“ OnOpenHeroScreen”
事件之后以及在不同英雄之间的同一对话框中的每次切换期间。在小酒馆
和战斗中的英雄(带有特殊插件)上的RMB期间,也会发生此事件。该事件仅可用于英雄屏幕对话框来更改英雄技能/信息/部队。
[+]添加了“ OnRecruitDlgMouseClick”,“ OnTownHallMouseClick”和“ OnKingdomOverviewMouseClick”事件。
通常,可以通过!! CM获得所有参数。
[+]改进的SN:S /!?SN对。声音名称总是在调用PlaySound之前复制到单独的缓冲区中。
以前,以下代码不产生声音:
!! VRz1:S ^ test.wav ^;
!! SN:Pz1;
!?SN;
!! VRz1:S ^ WTF ^;
[+] OnBeforeHeroInteraction事件具有3-d参数(x3):“启用交互”。将其设置为0以禁用交互。
[+]添加了SN:F ^ era.dll或kernel32.dll导出的函数名称^ / ...函数参数...,用于
使用STDCALL调用约定执行函数。在大多数情况下,不再需要使用SN:L ... A ... E...。
例如:!! SN:F ^ ReadStrFromIni ^ / ^ key ^ / ^ section name ^ / ^ Datatest.ini ^ /?z2;
!! SN:F ^ GetButtonID ^ / ^ testBtn ^;
[+]添加了用于动态字符串插值(替换字符串中的变量)的ERM命令。
SN:I(要插入的字符串)/?z#。 尽管
可以将命令
仅用于调试/移植需求,但命令可用于对从外部源(如ini文件和SN:T)获得的字符串进行插值。
示例:
使用SN:T,UN:N6或从z2中的对话框获取输入。
示例z2内容:'%Y5%V996测试%Z5'
!! SN:Iz2 /?z3; 现在,z3包含z2内容,其中所有变量均已替换/内插
更新了“ Quick Savings” mod。
[+]更新了igrik的“ wog本机对话框”插件。
[+] Era.dll现在导出了两个附加函数:GetArgXVars和GetRetXVars。每个指针都返回指向int 的指针。
第一组值应用作生成事件的参数。它们将
在触发执行开始时自动复制到x1..x16 。第二个数组在触发器执行后保存复制的x1..x16值,并用作
返回值。
示例:
GetArgXVars() = 1; //默认反应已启用
FireErmEvent(100000); //调用触发器100000
int defReactionEnabled = GetRetXVars(); //获取“启用默认响应”参数的最终值
[-]与插件的向后兼容性,添加新的ERM接收器已损坏。
准备好用于取消自定义ERM接收器处理程序的新API,目前仅缺少文档。
[+]添加了新的接收器!! RD,用于管理募募对话框和一些新事件。
每当创建募募对话框时,都会使用以下参数触发事件“ OnOpenRecruitDlg”:
x1-选定/活动怪物插槽(0..3)
x2-标志/选项。位的组合,控制对话框的行为:
CLOSE_ON_BUY = 1; 单击购买按钮时,对话框应关闭。通常在
只有一个招募名额的城镇使用。取消设置此标志可强制使用手动关闭对话框。
AUTO_UPDATE_ADVMAP = 2; 雇用任何新兵后,都应更新“冒险地图”屏幕(即使显示对话框也是如此)。
在从adv招聘新兵期间使用此标志。地图上的住宅,允许玩家
在右下方的信息屏幕中查看新生物的数量。
x3-启用对话框=1。设置为0则完全不显示对话框。
关闭征募对话框时,将触发不带参数的相应“ OnCloseRecruitDlg”。
当触摸对话框滑块或更改活动插槽时,将
在“ OnRecruitDlgRecalc”事件中重新计算要租用的怪物数量和总费用。所有参数均可更改。
x1-黄金生物成本
x2-资源ID(0..5)或-1
x3-资源成本
对话框被修改为允许零黄金/资源成本。
当一些新员工被录用时,将触发“ OnRecruitDlgAction”。
x1-受雇生物的数量。只读。
!! RD:C#slot / $ type [/ $ num / $ sourceId /#0 =使用原始号码]; 配置对话框
================================================ =============================
#槽位-对话框槽位索引(0..3)
$ type- 要租用的生物类型在指定的插槽中;对于非活动插槽,则为-1。
$ num-当前要雇用的生物数量。如果最后一个参数为0,则为
“ OnOpenRecruitDlg”事件发生后立即记住的原始怪物数(仅获取语法)。
生物数量通常直接绑定到某些来源,例如城镇生物的住所。
因此,在配置阶段设置此值,即可更改实际生物数量。
$ sourceId-源/内存,用于存储可用数量的生物。
>>对于地图上的现有城镇,可以使用以下sourceId公式:
城镇ID * 14 +(居住的生物0..6)+(仅7用于升级),其中Town ID为CA:U。
例如,地图上第二个城镇的3-d升级住宅的来源是:1 * 14 + 3 + 7 =24。
>>如果使用特殊的,程序员定义的外部来源调用对话框,则它们将具有以下ID :
9000、9001、9002、9003。例如,mod maker在镇上实施了定制住宅并具有一定的记忆力,
存储要雇用的生物数量的位置。脚本编写者将能够看到诸如9000的sourceId。
>>自定义源。sourceId> =10000。用户脚本实现。
使用自定义源时,将为其分配唯一的内存块。不要忘记
在“ OnOpenRecruitDlg”中设置初始值,并在“ OnCloseRecruitDlg”中获得最终(剩余)值。
可以将相同的sourceId分配给任意数量的对话框插槽。所有这些插槽将显示相同的
生物数量并同时更新。这对于替代生物的实现很有用。
插槽可能具有不同的生物类型(和成本),但所有
插槽之间的共享总使用量相同。
在应用新的怪物编号之前,已更改SourceId。因此!! RD:C0 /
13/100/20000将首先将sourceId 更改为20000(自定义),然后将怪物数量设置为100个大天使,而无需更改
原始住所/对象/等人口。
您可以将插槽0和3类型设置为某些值,并将插槽1和2类型设置为-1。可用空间将崩溃,用户
将只能看到两个插槽。
没有工作槽(生物类型<> -1)的对话框将不会显示。
例如:!! RD:C2 /?y3; y3是生物类型为3-d对话逻辑插槽
!! RD:S#offset; 变速槽
================================================= ==============================
#offset-将所有插槽此值右移(正数)或左移(负数)。
如果slot超出0..3索引,它将消失。
示例:给定0..1插槽,其中包含普通生物和升级生物以及任何sourceId。任务:在两个自定义插槽前
添加天使/天使。
!! RD:S2 C0 / 12/2/12345 C1 / 13/2/54321;
之前:
[生物A] [生物B] [空槽] [空槽]
之后:
[生物A] [生物B]进行
转换将保留所有设置(数字,类型,sourceId) 。
示例2:移除第一个带有升级怪物的插槽,而仅保留非升级插槽。
!! RD:C0 /?t /?t /?y2; y2是插槽0的sourceId,t-临时全局快速var
!! VRy2:%14; y2-居住指数0..13,对于已升级
!! RD&y2> = 7:S-1; 为7+ ;如果第一个插槽是升级后的城镇住宅,则向左移动一个插槽
!RD:F#visualSlot /?$ logicalSlot; 将可视对话框插槽索引转换为逻辑索引(与!! RD:C一起使用)
================================= =============================================
visualSlot-可见插槽索引(0..3)
?$ logicalSlot-逻辑插槽索引(0..3或-1)
在募集对话框中与鼠标处理一起使用的命令。可见的插槽ID单调
增加,需要将其转换为逻辑插槽ID。
例:
[生物A] [空插槽] [空插槽] [生物B]
显示为
[生物A] [生物B],其中生物B具有可视插槽索引1和逻辑插槽索引3
!RD:I?$ dialogId [ /?$ townId /?$ dwellingId /?$ selectedSlot]; 获取当前对话框信息
============================================== ===============================
?$ dialogId-唯一征募对话框ID。用于区分嵌套对话框(是的,有可能)。可重用。
?$ townId-为其打开对话框的镇ID或-1。
?dwellingId-为其打开对话框的城镇住宅的ID或-1。0..6未升级,7.1.3已升级。
部落建筑(+ X人口)被视为住宅,具有影响力。
$ selectedSlot-活动逻辑插槽索引。
!! RD:M#var / $ value; 访问当前的对话对话框关联内存
============================================ ==================================
#var-整数或唯一字符串。与SN:W
$ value相同-获取/设置/修改变量值
命令提供与内存等效的功能齐全的SN:W,并为每个创建的募集对话框分配。
每个对话框在“ OnCloseRecruitDlg”之后释放内存。
例如:
!! RD:M ^ acm.mapX ^ / v998 M ^ acm.mapY ^ / v999 M ^ acm.mapZ ^ / v1000;
!! RD:M ^ mithril ^ / * 2;
!! RD:O#townId /#dwellingId /#targetType /#targetId [/#dlgFlags]; 打开新的招聘对话框(以前的对话框将保留在后台)
================================================== ============================
#townId-要为或-1打开对话框的城镇ID。城镇将用作插槽来源。
#dwellingId-城镇住宅的ID(0..13)或-1。住宅将用作插槽来源。
#targetType-招聘对象的目的地类型:
RECRUIT_TARGET_TOWN = 0;
RECRUIT_TARGET_HERO = 1;
RECRUIT_TARGET_CUSTOM = 2; 目的地将由Lua / ERM脚本确定并手动处理
#targetId-目标ID:英雄ID,城镇ID或Lua / ERM脚本的特殊值。
#dlgFlags-CLOSE_ON_BUY和AUTO_UPDATE_ADVMAP标志的组合。请参阅“ OnOpenRecruitDlg”事件。
不要使用本地/默认设置来设置此参数。 yunings 发表于 2019-12-22 10:00
看不懂英文的同学,请使用谷歌浏览器(Chrome),在本页面任意空白位置,右键菜单,选择“翻成中文”,即可 ...
你所使用浏览器的是什么?
这是星愿浏览器了么????? 小翼 发表于 2019-12-26 18:57
时代v2.9.3
[+]改进了“ ErmLegacySupport”选项。负z变量不是经典FU1..FU29999的局部变量。
负z变量 ...
赞啊!虽然还是看不懂,一堆术语…… 2.9.4 is here.
Era v2.9.4
[+] Improved LoadImageAsPcx16 exported function, allowing to load any png/jpg/bmp file as pcx16 resource.
LoadImageAsPcx16 (FilePath, PcxName: pchar; Width, Height, MaxWidth, MaxHeight, ResizeAlg: integer): {OU} Heroes.PPcx16Item; stdcall;
Now it supports size constraints (0 for none) and resizing algorithm.
ALG_NO_RESIZE = 0, ALG_STRETCH = 1, ALG_CONTAIN = 2, ALG_DOWNSCALE = 3, ALG_UPSCALE = 4, ALG_COVER = 5, ALG_FILL = 6.
Use ALG_STRETCH to set fixed dimensions, ALG_FILL to fill the box with tiles and ALG_DOWNSCALE for custom dialogs
to shrink large images proportionally.
Example of using custom jpg image in DL-dialog.
!!SN:F^LoadImageAsPcx16^/^DataPicstest.jpg^/^rW3.cust.pcx^/400/300/0/0/1;
!!VRy1:Sv1; y1 - image resource
...call DL dialog, where rW3.cust.pcx is used.
!!SN:F^DecRef^/y1; free image resource
[+] Included "view mage guild without spellbook.bin" by igrik, allowing to enter magic guild without spellbook.
[*] Allowed old SN:P syntax instead of Pz.
[*] Replaced WoG Native Dialog plugin by igrik with the one without non-dialog features.
[-] Fixed sound handling issues and appropriate sound error message.
[-] Fixed wrong flag 1000 value in triggers. Thanks to Valery (Salamandre).
[-] Fixed crash in !!RD:O and a few other RD-related issues.
[-] Fixed bug: SN:R was treated as missing command.
[-] Fixed bug: heroes could not be dismissed.
[!] battery.dll by MoP (included in Typhon too) is not supported anymore.
[!] erm_hooker.era MUST BE deleted from all mods, unless you know, what you are doing. It's a part of Era package now.
Source: HC
页:
[1]