我是个好人 发表于 2019-8-6 14:27:57

小白求教 SN:E调用外部函数 具体哪些函数从哪儿可以看到?

帮助文档里的函数目录链接好像挂掉了;bf;

canary 发表于 2019-8-6 16:40:32

怎么说呢 这个SN:E常用在 UN C或者 SN L调用外部链接后面 相当于函数跳转执行的功能

!!SN:L^EraPlugins\erm_hooker.era^/?y1 Ay1/^SetHook^/?y2 Ay1/^SetHook^/?y3 Ay1/^SetHook^/?y4 Ay1/^SetHook^/?y5 Ay1/^SetHook^/?y6;
!!SN:Ey2/1/4455113/33343;       远程单体 复制FU33343函数的值到地址4455113(原远程伤害显示地址)来实现修正伤害信息显示的问题
!!SN:Ey3/1/4462959/33344;       近战单体
!!SN:Ey4/1/4462876/33345;       龙息攻击且伤害到两个单位也触发,否则触发近战单体
!!SN:Ey5/1/4456705/33346;       环击攻击无论伤害到多少单位都触发
!!SN:Ey6/1/4455759/33347;       毒云攻击无论伤害到多少单位都触发

!?FU33340;                     x1表示哪种攻击方式,x2为受伤的堆栈1指针,x3为堆栈1受伤数值地址,x4为受伤的堆栈2指针,x5为堆栈2受伤数值地址
!!FU&v7550<2/v7550>4:E;
!!UN:Cx3/4/?y20;
!!UN&x1=3:Cx5/4/?y21;

!!UN:C6919200/4/?y1;            获取战场结构基地址
!!VRy2:Sy1+21708;               获取第0号堆栈的结构地址

!!UN:Cx2/4/?y30;                  获取受伤的堆栈1结构地址
!!VRy30:-y2;
!!VRy30::1352;                  通过计算得到受伤的堆栈1的堆栈号存储到y30,堆栈结构地址间相差548h字节

!!UN&x1=3:Cx4/4/?y40;             获取受伤的堆栈2结构地址
!!VRy40&x1=3:-y2;
!!VRy40&x1=3::1352;               通过计算得到受伤的堆栈2的堆栈号存储到y40,堆栈结构地址间相差548h字节

中间太多了 掠过

!?FU33343;                        EDI为受远程攻击的个体堆栈结构指针
!!SN:X?y1/1;[按原码执行]EDI,定位EDI(受伤堆栈结构地址)的地址
!!VRy5:Sy1+16;   定位EBX(受伤数值)的地址

!!FU33340:P1/y1/y5;

!?FU33344;                        EDI为受近战攻击的个体堆栈结构指针
!!SN:X?y1/1;[按原码执行]EDI,定位EDI(受伤堆栈结构地址)的地址
!!VRy5:Sy1+20;   定位EDX(受伤数值)的地址

!!FU33340:P2/y1/y5;

!?FU33345;                        ESI为攻击单位堆栈结构指针,EDI为龙息第一格伤害到的单位堆栈结构指针,EBX为龙息第二格伤害到的单位堆栈结构指针
!!SN:X?y1/1;[按原码执行]EDI,定位EDI(第一格受伤堆栈结构地址)的地址
!!VRy5:Sy1+16;    定位EBX(第二格受伤堆栈结构地址)的地址
!!VRy6:Sy1+20;    定位EDX(龙息第一格的受伤数值)的地址
!!VRy7:Sy1+24;    定位ECX(龙息第二格的受伤数值)的地址

!!FU33340:P3/y1/y6/y5/y7;


!?FU33346;                        ESI为受环击伤害的堆栈中当前处理堆栈指针,EBX为当前处理堆栈的受伤数值
!!SN:X?y1/1;[按原码执行]EDI
!!VRy2:Sy1+4;    定位ESI(当前处理堆栈地址)的地址
!!VRy5:Sy1+16;   定位EBX(当前堆栈受伤数值)的地址

!!FU33340:P4/y2/y5;

!?FU33347;                        ECX为受毒云伤害的堆栈中当前处理堆栈指针,EDX为当前处理的堆栈受伤数值
!!SN:X?y1/1;[按原码执行]EDI
!!VRy6:Sy1+20;   定位EDX(当前堆栈受伤数值)的地址
!!VRy7:Sy1+24;   定位ECX(当前处理堆栈地址)的地址

!!FU33340:P6/y7/y6;以上是调用内存HOOKER修正环击,龙息伤害显示的部分。

!!SN:L^Era.dll^/?y1 Ay1/^GetGameState^/?y2
Ey2/0/?v2; 调用外部链接接口y1(加载dll) 获取函数地址y2调用使用帕斯卡转换储存于y2的函数地址
!!FU|v2<>v3/v2<>4205280:E;
[大地图对话框](v2=v3表示没有子对话框)
这里v2是游戏状态(v3是子对话框)
大地图:4205280
英雄界面:5117840
英雄交换界面:5957344
战场:4662240
城镇:6053040
如:
!!SN:L^Era.dll^/?v2
Av2/^GetGameState^/?v3 Ev3/1/?y98;
!!FU&y99<>6053040:E;
[城镇界面且没有子对话框的情况]这里是调用对话框的情况 这里我们都能看出来 SN:E指令的作用就是个传递转换的作用 我个人这块研究有限,大部分都是跟着大佬的后面看函数自己摸索的。涉及内存修改的部分指令还是请教下007跟Xericsin他们两位比较靠谱。我是只知道该怎么用,至于为啥要这么用我就不太明白了。


我是个好人 发表于 2019-8-7 09:16:28

canary 发表于 2019-8-6 16:40
怎么说呢 这个SN:E常用在 UN C或者 SN L调用外部链接后面 相当于函数跳转执行的功能

以上是调用内存HOOK ...

看上去好高深;om;,我还以为这部分是一些可调用的现成的函数
不知道具体有哪些功能= =如果几乎用不到的话倒是不用去头痛了:shangxin:

我是个好人 发表于 2019-8-7 11:44:19

canary 发表于 2019-8-6 16:40
怎么说呢 这个SN:E常用在 UN C或者 SN L调用外部链接后面 相当于函数跳转执行的功能

以上是调用内存HOOK ...

大佬您有空的话可以帮忙看下我设计的东西哪些是用现在的ERA不太好实现的,或者根本没法实现的??
对era的功能目前还了解的太少了,底层也不懂,心里实在没底===;bf;

下面是大概设计的初稿,目前只设计了一小部分,可能比较幼稚;ovo;


比较大的改动倾向总结
削弱回魔手段【幅度较大】
减少所有远程部队弹药【幅度一般】,减少所有高速兵种速度【幅度较小--飞行单位稍微大点】【削弱了加速宝】
削弱回城-异次元-飞行之类的战略魔法【幅度中等】
削弱全体施法【幅度一般】
解决部队中未升级部队的尴尬【主要时初期的低级部队&&野外巢穴的低级部队最终面临淘汰的尴尬】
限制
中后期大量废宝的处理===某些鸡肋宝物变为特定部队专属宝物-可装备给该部队产生少许加成,资源宝可以丢进对应的矿,同部位装备可以用于强化==等等等等
优化鸡肋的魔法卷轴,魔法亭子
********逃跑机制优化******



环境
魔井恢复的魔法量为(1+幸运)*30点
英雄每天基础恢复的魔法值为最大魔法值的5%
野外的魔法行会也能恢复魔力,需要过夜,1级魔法行会使基础恢复速度+100%,5级500%【魔力护符之类+的是基础恢复速度】
魔泉-魔力圈不再将英雄的魔法值补满-而是使基础回魔变翻倍
铁匠铺可以将你身上的某个部位的宝物进行强化,需要消耗同部位的宝物&500*目标宝物等级的金币,每次强化后属性+1,最多强化10次【组合宝组合后的属性为原属性之和的一半==包括强化的部分也只有一半】
女仆小屋可以选择是否学习
战马有个急行军选项,可以使当天移动力+2000==战马疲劳度直接max==一天恢复1格疲劳==也就是说6天用一次【跟其他英雄换马可以将疲劳的马换为0疲劳的马】
每座石矿加4石头人周产量
英雄带领的部队中为首的单位可以作为斥候,每天过夜时根据其速度值的一半增加英雄基础视野【一半是因为考虑到折返】
天鹅湖:幸运永久+1【√】
每攻陷一座宝屋,比如狮鹫宝屋,可以让该颜色英雄所属城镇-对应宝屋守卫阶位的兵种产量+8-宝屋守卫阶位等级,龙之国算7阶【机会只有一次,先到先得】
炮车伤害根据英雄等级决定-为英雄等级*3~英雄等级*5【避免了法师和战士所带炮车伤害差距过大的问题】
部队经验系统:!!仅限于未升级的部队!!当经验够了以后直接升级为该兵种的高级形态,比如枪兵---经验足够后升级为戴兵,兵种升级所需的经验都不相同===跟阶位无关====7级的低级兵升阶还需要访问特定建筑


英雄
英雄可以裸奔,受地形的影响根据英雄种族而定,比如沼泽英雄在沼泽中不会有额外消耗
在自己or友军城镇1.5个屏幕范围内,英雄每天移动力+400【因为补给充足】
英雄交换界面有个战马图标,可以交换战马,访问过马厩后的额外移动力可以藉此传递/互换
英雄裸奔的话触发战斗直接失败被俘虏【除非拥有四系终级魔法,元素召唤,召唤出临时部队】,可以占领空城,无守卫矿
英雄每天基础恢复的魔法值为最大魔法值的5%
!!!每点智力+2.5%完美施法概率!!!【完美施法概率使大部分非杀伤性魔法有概率变为全体施法,有前者1/5几率使杀伤性魔法施法两次】
.....暂时这么多,后面待补充

英雄特长
350英雄,【保留原来的】增加金钱的效果根据每天剩余移动力影响,每100点移动力35个金币==上限350
资源特英雄,【保留原来的】可以在市场1:1用其特长资源换取其它资源【不需要英雄亲自访问市场】
兵种特长英雄-方案1,【保留原来的】增加该兵种的巢穴25%+5%*英雄等级的产量,最多100%,该兵种招募价格减半【方案1比较靠谱】
兵种特长英雄-方案2,【保留原来的】每天有5%+英雄等级*2几率自动加入该特长兵种【数量为野外巢穴周产量】【如果你的部队里有升级兵种,则加入的自动变为升级状态】【方案2实现起来比较简单?】
兵种特长英雄-设计2-额外:攻防指数的增加幅度变大,每2级+1攻防
某个魔法特长,【保留原来的】该魔法无视魔抗,甚至无视御火奇术之类的??以及火元素之类的先天抗性===少数魔法特还有额外效果,比如霹雳寒冰特和寒冰魔环特,可以几率冻结目标【对火元素-苏丹-凤凰无效】===buff类魔法特的buff无法被驱散和覆盖=====驱魔大法特,可以驱散一切buff===疗伤特,附加高级急救术的重生特性!!必须拥有高级急救术&医疗帐篷====重生特+重生次数不受限制====百发百中特>释放百发百中的单位攻击无视距离
所有非杀伤性魔法特的特长魔法大部分必定是全体施法
新增战术特长,【战术大师】使对方战术无效---且拥有一次机会重新布阵【貌似比较难以实现】
炮车特,【保留原来的】炮车最先攻击==【格大炮--炮车伤害受到英雄攻击力*1额外加成-也就是类似原版的炮车伤害计算方式】
医疗特,帐篷生命点数随英雄等级提升,玩家主动治疗结束后还能自动治疗一次【高级急救术带有重生效果】-不过效果减半


辅助技能
鹰眼术:【保留原来的】到达高级时60%几率紧跟对方施放4级以下相同魔法【copy忍者卡卡西-恶搞写轮眼】
智慧术:与学术合并,出现几率以学术为准
后勤:到达高级时部队弹药+3
寻路术:部队不受初/中/高级减速大法影响
箭术:到达高级时射程+5【城墙内依然无效】
四系魔法辅助:可以无视智慧术学习对应系别的3/4/5级魔法,到达高级时该系魔法完美施法概率+50%
魔力:四系魔法完美施法概率+10 25 50,到达高级时第一次施法必定是完美施法
理财术:【保留原来的】访问水车/宝箱-金币堆/宝屋堆获得的金钱为1.3倍
防御术:【保留原来的】到高级后反击次数+1
幸运术:【保留原来的】访问水车-宝箱-风车-资源堆==永远是最大值【同矮人的幸运】
炮术:【保留原来的】【考虑移除对箭塔的控制,交给弹道术】炮车血量+50/150/250===到高级后战后自动修理炮车
魔抗:【保留原来的】到达高级时,使对方兵种的特技基础几率减少10%【本来20%变为10%】【比如衰老,中毒,麻痹,石化之类的】
弹道术:同样可以控制箭塔【箭塔有改动】
急救术:【保留原来设定】到达高级产生重生效果【亡灵部队有效】
进攻术:10%,20%,30%百分比无视对方防御力【如果对方有护体石肌就无效了】
领导术:除了原来的功能,到达高级后部队爆发士气时短暂拥有冲锋特技【护体神盾魔法免疫冲锋】
招魂术:【保留原来设定】到达高级后获得的是升级的骷髅兵
招魂术【恶搞--无视】:5%,10%,15%几率招魂对应等级的墓园兵种【墓园变为真正的boss,墓园所有部队在地面时生命减半,造成伤害减半】
学习能力:【移除原来的】【方案1-访问经验碑、宝箱、潘多拉魔盒获得的经验为原本的2倍】【方案2 访问+1智力或力量的建筑加的属性翻倍,访问图书馆+3全属性】
魅惑术【恶搞--无视】:5%、10%、15%几率直接转化对方某些部队为友军直到战斗结束
神秘术:敌方有10%,15%,20%几率施法失败,到达高级时对方第一次施法必定失败【对方失败依然会触发鹰眼术】
侦察术:移除原来效果[初级-可以获得野怪敌意-类似盗贼的特技,中级-可以看到对方英雄属性,高级-可以查看附近敌方城堡情况]

魔法
时空之门 ↓消耗魔力值根据部队生命&离城堡的距离决定【耗魔极高】
飞行奇术 ↓基础耗魔根据部队生命决定【持续耗魔量根据移动距离有关--停止移动时才计算总耗魔,魔力透支的话--第二天~第三天将无法行动】
异次元之门 ↓【方案1】消耗魔力值根据部队生命决定【耗魔极高】----【方案2】初级,可以跟同位面的友军交换位置==中级时可以无视位面==高级时可以跟1个屏幕内的敌方单位交换位置【位于城镇的敌方英雄无效】
转世重生/聚灵奇术 ↓一场战斗中每个部队只能接受1/2次该魔法【依然是中土才是真*重生--高级才能接受2次】
护体石肌 ↑额外-不会受到比蒙的降防攻击
护体神盾 ↑额外-不会受到冲锋特效
伪装大法 ↑对方侦察术即使到高级也无法查看到你的属性【似乎不太好实现】
欢欣鼓舞 ↑士气到10时必定再行动
幸运之神 ↑幸运到10点时必定幸运一击
悲痛欲绝 ↑士气到-3时必定衰落
厄运附身 ↑幸运到-3时必定霉运
百发百中 ↑除了原来的效果,还无限弹药
驱魔大法 出现魔法书图标,放到对面是驱散对方【需要中级水系】 放到我方是驱散我方【貌似很难实现】【配合永恒之球效果拔群】
.....目前仅设计了小部分,后面待补充

战斗
部队最高速度大于对方最低速时才能逃跑【加速buff也算】【不过部队中低于对方最高速的部队将被舍弃-也就是直接没了】
医疗帐篷和弹药车分别变为5点-3点生命,不过每次只受1点伤害【依然会被死神之眼直接瞪死】
弹药车效果为携带弹10弹药【任意单位攻击时都会优先消耗弹药车的弹药】
.....后面待补充

攻城战
!!!每个城的箭塔威力受到城中生物巢穴中未招募对应远程部队的加成,比如人族的弓箭手,塔楼的大法师,元素的雷元素等等【上限大约为1~2周基础产量==不考虑宝物和野外巢穴的加成】
每个城在攻城战中都有其特殊效果
塔楼:禁飞区,飞行部队禁止飞行【大恶魔不算飞行】【需要先造热气球,代价较高】
沼泽:非沼泽部队速度减半,无法驱散
地狱:每回合战场上【城外】随机3个位置爆发地狱烈焰魔法【需要先造某个+2力量的东西】
墓园:诅咒之地,攻城方生命部队被杀死的单位无法复活,而且将直接补充给我方损失掉的部队【有骷髅兵的话补充为骷髅兵,且可以突破上限】【需要先造骷髅转化场】
据点:钢铁大门,大门无法被破坏【因此箭塔也很难破坏】
元素:部队免疫四系1级/2===3级以下负面魔法【需要先造对应四种兵种建筑及升级建筑+3级的话需要四系魔法的建筑】
壁垒:箭塔威力1.5倍
人族:箭塔威力1.5倍

宝物
普通魔法卷轴可以右键分解获得卷轴等级*25点魔法值==消耗行动力?
杯子-石皮-驭火/水/土/气-,装备在行囊时,开场必定全体生效1回合【相同卷轴可以合成升级,每升一级+1回合】-最高5级
大力神盾-火墙卷轴可以增加魔法存在持续时间-每级+1回合持续时间-最高3级
流沙陷阱/埋设地雷卷轴-增加额外数量为卷轴等级*4【地雷减半】-且开场自动释放一次-最高5级
转世重生卷轴每级可以+1每个部队接受该魔法的次数【默认的话只能释放1次】-最高1级
地动山摇卷轴-每回合自动释放该魔法【破坏2/3/4处城墙】-最高3级
攻击类魔法卷轴可以增加该魔法10%二次施法几率-最高5级【不建议搞成开场释放,作为被攻击方体验不好】
增加生物产量的宝物,可以放置于城中-增加对应生物产量【暂时不可逆?】
组合类宝物,如果组合起来,可以变为单件A,而且保留组合宝和单个宝的特效,但是加的属性则只保留一半
组合类宝屋,高级部件可以转化为低级部件====同级部件可以转化为同级部件【需要消耗宝屋等级*500金币】
魔法持续时间三件套:魔力戒指+1持续时间[包括卷轴],魔力项圈+减少1点耗魔,+大魔法师斗篷:降低20%类似独角兽之类的魔法抵抗===三件套---魔导士之戒===【自带毁灭之球效果且完美施法概率+50%】
4件及以上零部件的组合类宝物只要满3件或者4件就能组合成残缺的组合宝,效果为原来的一半【比如龙王神力只能免疫2级以下魔法,天使联盟仅有混兵士气不减的功能,泰坦之箭威力减半,诅咒铠甲只有前两个魔法】
抗魔三件套==所有生物特技几率-10%【加上魔抗的10%】几乎免疫所有生物特技了
凤凰之羽-消耗品,使用后下次战斗结束后死亡的单位必定全部重生【攻陷凤凰巢穴过得到的宝物】
急速项链,免疫减速魔法===旅行者之戒=地面部队速度+1==急速披风==所有部队速度+1======组合在一起,开场释放加速
水晶披风,【保留原来的】使用水晶折射光线的原理隐藏自己,当你裸奔时,敌方无法在大地图上看到你【不好实现,可能需要改为无法攻击你-类似避难所效果】【裸奔神器】
炽天之翼,部队全部变为飞行单位【攻城无敌了】
永恒之球,保护我方正面buff不被驱散,保护敌方负面效果不被驱散
生命项链,【装备给1级兵】生命+3
骷髅项链:【装备给骷髅兵】骷髅兵速度+2
冷静挂件:【装备给法系部队】法系部队无视距离
水银瓶之类的可以放置在对应矿上,使其产量+2【不需要再带在身上】
人马斧四件套==精灵王冠,每天都有1+英雄等级/5个大地精灵加入【位于草地地形才生效】【半成品是1+英雄等级/10个】
土灵球:土系完美施法几率+50%====其它系同理
幸运三件套效果==幸运之枪[枪兵、人马、骑士--这三个用枪的---攻击必定幸运一击]
士气三件套==勇气之弓==使用弓的单位第一回合必定爆发士气
魔力源泉=从宝物中汲取无穷的魔力,从而无视禁魔球和禁魔披风、绝望之地的禁魔效果
战争枷锁=↑野怪可以逃跑

.....目前仅设计了小部分,后面待补充

怪物
稍许削减飞行单位的速度,远程部队弹药量总体减少25%
小妖精,可以修理两格内的铁人。
法师,傀儡守卫,可以将受到的伤害全额转移给相邻的铁人【野怪不可能有铁人当守卫,所以没影响】
四系元素可以增加对应系别25%完美施法几率
凤凰,接受转世重生的次数无限
僵尸,死亡后100%数量变为骷髅兵
和尚,可释放疗伤魔法【高级和尚拥有重生效果】
玛格,变为法系部队,不会误伤队友
邪眼,英雄视野+2,斜眼王,英雄视野+3
大耳怪王,战斗时如果处于戈壁地形-可以召唤一定数量狼骑参战【大耳怪王数量/5】
狼骑,死亡后变为大耳怪&大耳怪王【战后结算】【因为背上骑得就是大耳怪&大耳怪王】
半兽人,杀死敌人后必定士气一次
矮人,矮人的幸运,身上有矮人时,访问水车-宝箱-风车-资源堆==永远是最大值
墓园所有部队在地面时生命减半,造成伤害减半【娱乐-无视】
.....目前仅设计了小部分,后面待补充








我是个好人 发表于 2019-8-7 14:14:45

canary 发表于 2019-8-6 16:40
怎么说呢 这个SN:E常用在 UN C或者 SN L调用外部链接后面 相当于函数跳转执行的功能

以上是调用内存HOOK ...

有个兵种独特装备【比如骷髅项链装备给骷髅兵使其speed+2】。。我刚想了下,装备在兵种身上很麻烦,比如拥有宝物的多个部队合并时宝物很难处理,所以干脆设计为将封神的宝物查看界面 前7格对应7个部队战术位,如果宝物与兵种匹配,就对该战术位生效,这个不知道能不能实现???

目前这些设计都还很粗糙===={:1_270:}{:1_270:}不过我还是打算自己尽量能弄出来,所以只能借助大佬您的宝贵经验,麻烦大佬帮忙过一遍,不好实现的直接剔除了,应该能省去不少瞎折腾的时间:shangxin:

XEricSin 发表于 2020-1-8 22:17:44

新手不要尝试SN:E。请找定义好的FU函数来调用,比如封神里的Universal a Function脚本里全是定义好的功能函数。

我是个好人 发表于 2020-1-9 08:56:59

XEricSin 发表于 2020-1-8 22:17
新手不要尝试SN:E。请找定义好的FU函数来调用,比如封神里的Universal a Function脚本里全是定义好的功能函 ...

嗯嗯 贼好用:shangxin:

琭琭有彧 发表于 2020-1-11 09:54:43

期待楼主佳作{:1_291:}

我是个好人 发表于 2020-1-11 12:10:55

琭琭有彧 发表于 2020-1-11 09:54
期待楼主佳作

哈哈 快好了{:1_317:}

琭琭有彧 发表于 2020-1-11 13:47:21

给楼主提个醒,写脚本尽量避免使用y-,z-,e-变量。因为新版ERA移除了对负变量的支持,而且每个触发器都有本地的y1---y100变量,若跨触发器调用y值,可能得不到想要的结果,具体细节楼主看ERA更新日志吧。{:1_343:}

我是个好人 发表于 2020-1-11 19:20:48

琭琭有彧 发表于 2020-1-11 13:47
给楼主提个醒,写脚本尽量避免使用y-,z-,e-变量。因为新版ERA移除了对负变量的支持,而且每个触发器都有 ...

我了个擦,不是吧。。。用了茫茫多的y- z-啊;ooru;

琭琭有彧 发表于 2020-1-11 19:58:43

我是个好人 发表于 2020-1-11 19:20
我了个擦,不是吧。。。用了茫茫多的y- z-啊

2.93的介绍楼主看下吧
有一个ini文件,有可以支持老脚本的选项仅支持fu1-fu29999
页: [1]
查看完整版本: 小白求教 SN:E调用外部函数 具体哪些函数从哪儿可以看到?

捐赠