elona吧 关注:76,080贴子:1,131,123

回复:E+代码分析讨论

只看楼主收藏回复

【Meの重大突破】中间变量基址与P2的对应关系
ME的最主要优点就是可以方便追踪gdata,cdata,sdata这样的全局数组中任何变量,这个优点要归功于ME已经做好了各个指针间的对应关系。
但是对于非以上各大数组中的变量,在ME已有的构架下似乎无法方便的给出其地址。
最近跟小伙伴们讨论过程中,终于解决了这个难题。现将相关内容整理如下。
[E+ ME已有基本指针关系]
有过因版本更新而自食其力手动调整ME指针的童鞋应该了解,E+的各层指针关系对应如下:
指针地址=>指针对应值
0+修正1=>P1
P1+修正2=>P2
P2+修正3.1=>数组基址CS
P2+修正3.2=>数组基址CA
...
数组基址CS+修正4=>数组CS变量值
修正1-4为各级偏移量(以下用10进制表示),其中,
修正1要通过查找进程名来锁定其大致范围。修正2在主流版本中固定为44,一般不做变动。
而修正3会随着二次加工(反编译+再编译)版本的不同而有所差别,
这就是每次需要玩家逐个表一一手动校对的罪魁祸首。(也就是找到新版本的修正3.1;修正3.2...以此类推)
但是这条也说明数组基址指针的地址,与P2是有固定对应关系的。
修正4其实就是数组中各个变量与该数组基址的偏移量(offset)。对于一个单纯由整型(int)(←ME里大部分都是这样的)变量构成的数组。
每相邻两个变量间地址相差4。因此数组中第k个变量的地址就是(从0开始,k=0代表第一个变量):
数组(k)=数组基址+4*k
一个很重要的发现就是:每个数组本身的地址,除了对应基址指针之外,数组基址偏移-12的地方也会储存着数组的基址。
这个规律不仅适用于数组,同时也适用于中间变量的。(未验证所有数组和中间变量是否全部符合)
同时,中间变量类似数组,也拥有自身的基址指针。
因此,我们想要每次开游戏就找到中间变量的值,只要找到:
P2+修正3=>中间变量基址
中间变量基址=>中间变量值
里面的修正3,就可以说是大功告成。
那么下面以*号锁定目标为例,说明如何找到这一修正值。

在代码中,记录*号目标的,是i@m187这一变量。显然这个变量并不是几个基本数组中的变量。
想要找到其对应的指针,我们需要用CE改变*号目标来锁定。
因为*号目标和cdata角色编号有关。比如0是PC,1-15是队友,16以后是其他冒险者。
大致60以后是该地图其他NPC。
那么只要清楚其编号,自然可以自如改变该变量从而锁定其地址。
一般来说,我们最终会找到两个地址:

这两个值其中一个就是i@m187,另一个是变量tc
因此在*号锁定时,这两个值永远一致。所以我们暂时不去区分,找到其中一个基址指针位置即可。
根据指针储存基址地址的特性。我们用16进制搜索022c4488

可以看到两个结果。其中一个是指针,另一个就是我们提到过的,基址偏移-12所储存的基址地址。
那么显然,16进制的488与16进制的47c相差12,所以第一个是基址偏移-12地址。
而第二个,就是指针的地址。
由此,我们得到了指针的地址,再通过其与P2值的差异,就可以获得 修正3。
为了验证这一概念,我们可以在ME里增加两个基于P2的指针

可以看到现在和上述两个地址是符合的。
如果我们成功,那么重启游戏再次锁定该变量后,ME应该可以自动得到两变量的新地址。
重启游戏,重新锁定,这是新的变量地址:

而ME里给出的地址是:

完全一致,搞定收工~


IP属地:湖南57楼2017-04-25 20:21
收起回复
    小白已经越来越看不懂了,看来真的是不学编程连游戏都玩不了的节奏了顺带提一句,1.67的英文说明里关于稀有物品掉落里有一句“ After all, people who tinker with the save data outside the game would probably find it faster to just edit the game memory.”,喂喂喂,说的就是lz你吧


    IP属地:新疆58楼2017-04-26 21:53
    收起回复
      2025-05-24 11:20:14
      广告
      【未完成の魔改】提高大跌地出现概率&减少空间垂钓技能动画时间。

      看图说话。左边为修改后,右边为修改前。
      adata(32,gdata(20)) 代表地城类型,大于等于100为觉醒地城。gdata(20)代表当前地图编号。
      增加这个判定条件,是因为一般觉醒地城比较难打,专注战斗时很难顾及小妹妹事件。
      故排除大跌地出现在觉醒地城的情况。如果想刷小妹妹,可以专心在普通地城刷。
      由于 bdderu = limit(15 + gdata(810) * 2, 15, 35)
      改判定为 rnd(bdderu) <30 则可大幅提高大跌地生成概率。
      使用空间垂钓时,要以此进行4次判定。而每次判定都会类似钓鱼有个循环语句来随机消耗时间。
      那么把 /*await cfg_wait1 * 2*/ 这句注释掉。
      就可以大幅缩减动画时间。于是玩家就可以欢脱的在觉醒地城和怪物们单挑了(我们一群单挑你一个!)。
      因为未理清相关代码所有关系,顾简单整理如上。


      IP属地:湖南61楼2017-04-27 15:42
      收起回复
        【俺样の魔改】数据查看器v0.9
        功能:请参考本帖54L。
        下载地址:00代码相关/DIYUIV0.9.rar
        使用方式:
        0. 下载压缩包并解压hsptmp.exe到游戏根目录。
        1. 打开执行文件hsptmp.exe,读取任一存档。
        2. 按下F11后,将记事本中生成的数据COPY到DIYUI0.9.xlsx表格文件Custom表左上角中。
        3. 在Display表中即可查看结果。
        ⑨ 本MOD与E+1.66版完全兼容,玩家可在两者间自由切换存档。
        !!!重要提示!!!
        本MOD兼容1.66及之前全部E+存档,但旧版本存档会自动升级。
        为免不测,使用本MOD前请提前备份存档。
        欢迎小伙伴们使用围观,如果有好的建议或意见,还请不吝指教。
        功能更新:
        1 (3列)队友栏可通过下拉菜单方式自由选择想要查看的队友数据。

        2 数据采样时仅收录PC和当前队伍中存活的队友。
        3 左侧属性信心栏更新:①经验需求代表属性锻炼难度
        4 如果想要实现新旧数据对比,请将旧数据备份到Customold表中。
        5 cdata sdata数据载入方式已更新校对完毕。(魔法表未更新)
        [更新内容]
        V0.9
        1. 大幅简化数据收集方式。游戏中F11一键获取所需数据,复制到Excel即可完成导入。
        2. 实现全队友读取,实现下拉菜单自由选择队友数据。
        3. 属性信息列表增加生命力/法力等基本项。


        IP属地:湖南62楼2017-04-28 23:35
        收起回复
          1.67新增削弱INIT机制
          类似链接之网,属性和技能大于50.000时,每次除2处理。
          然后重算属性和速度INIT。(生命力法力相关不变)
          PC和宠物都是同理
          定位可以找:sdata(cnt + 600, r1) = limit(sdata(cnt + 600, r1) / 2, 1000 * 50000, 1000 * 1000000)


          IP属地:湖南63楼2017-04-29 12:06
          收起回复
            神族队友削弱机制
            当NPC类型为:神,机械神,猫神,狗神和死灵神,
            cdatan(2, rc) == "god" | cdatan(2, rc) == "machinegod" | cdatan(2, rc) == "catgod" | cdatan(2, rc) == "doggod" | cdatan(2, rc) == "undeadgod"
            或者八维INIT+3*速度INIT>4000时,成为队友会被强制削弱(奇怪的是如果是牧场子代就不会被削弱,当然从道场带出来的神队友也不会)。
            削弱时,等级/2处理。八维+幸运速度如果大于50,除5处理。(结果下限50,上限400)
            技能除2处理,上限200。
            然后输出提示:
            1. 如果原始八维INIT+3*速度INIT>4000,则是:的神力被瞬间吸取了…。
            2. 如果上述条件不满足,则是:之力的一部分被吸入世界的缝隙间了……。
            OK,接下来就是屏蔽削弱机制,开始准备制作怪物表了。


            IP属地:湖南64楼2017-04-29 13:00
            收起回复
              承接64L
              想要获得全部怪物的数据。可以用精灵球召唤,配合怪物牧场储存。
              每个牧场可以存150只。从1号商人开始,到目前902号。(1.66版),共需要6+个牧场。

              快速生成的办法是。每次使用精灵球时默认精灵球怪物编号+1
              位置大概在:
              if ( _switch_val == 33 | _switch 以及 "This ball is empty."), "", "", "", "", "", 附近。
              在角色生成语句 characreate 56, inv(23, ci), -3, 0 之前插入
              inv(23, ci)++
              即可实现。非常方便。从上图可见生成150个怪物只需要2-4分钟。
              下一步便是提取这900号怪物的数据了。


              IP属地:湖南65楼2017-04-29 16:15
              回复
                大神你好,1.63 能用么?


                IP属地:广东来自iPhone客户端66楼2017-04-29 19:06
                收起回复
                  2025-05-24 11:14:14
                  广告
                  合成机制属性变化
                  当素材等级>宠物等级且素材不为CNPC时, if ( cdata(38, tc) > cdata(38, rc) ) {
                  宠物等级增加为int((素材等级-宠物等级)/2)+1
                  属性变化规则相对复杂一些:
                  首先将裸装八维换算成等级,依次储存在列表中,然后从小到大排序。
                  接下来从列表最末尾开始往前循环三次。
                  每次循环时如果素材该项属性大于宠物该项属性,那么宠物该项属性增加值为
                  属性增加量=属性差*5/等级增加量
                  属性差代表素材和宠物在该项属性上的裸装等级差,为正整数。
                  等级增加量,就是合成前后宠物等级变化量,亦为正整数,但是由下限2,上限10的修正。
                  属性增加量截取到后三位小数部分,且下限为1.000,上限为10.000
                  简而言之:
                  (1)如果素材出现复数同等级的第三位属性,那么后面的属性优先参与强化。
                  (2)属性增加量并非整数。多次合成后,偶可能积累的小数部分也足够让属性继续提升几个点。
                  (3)属性增加量并非严格等于属性差,但低等级素材合成效果明显更好。
                  好了,有了这部分代码整理后,1.66怪物表的准备工作也算是全部完成了w
                  最后附带一点记录。
                  类似CNPC中的格斗强度,每个角色可以选择一种属性作为格斗附加属性伤害。这个值是储存在cdata(230中的。

                  具体规则如上图,前面代表属性代码,后面代表属性强度。


                  IP属地:湖南67楼2017-04-30 11:25
                  回复
                    【怪物表V0.9For1.66】
                    内容:ID1-900号怪物的全部属性/技能/耐性/AI/BIT数据。
                    生成方式:精灵球生成,然后提取数据分析整理。
                    使用方式。打开表格,可以根据需要分级显示或隐藏具体单项数据。(点击红框内+号即可)

                    使用建议:
                    1 活用排序,可以快速了解单项数值的全NPC排序。
                    2 活用Ctrl+F,可以快速定位想要获悉的内容。
                    3 可根据AI相关和BIT获悉宠物的特性信息。并结合1 查找具有某项特定BIT或主动技能的宠物。
                    4 另外特别制作了神宠削弱版,更加符合合成情况。
                    目前不足:
                    1 个别BIT无法排除默认装备的影响。
                    2 CBIT,AI相关未做分类整理。
                    呃,欢迎大家使(shi)用(du)。有任何疑问,需求或意见欢迎留言。
                    如果没啥反馈的话,这个版本就先这么放着了。
                    LZ自己合成宠物的话,这个版本基本够用了。


                    IP属地:湖南68楼2017-04-30 22:50
                    收起回复
                      【反编译】屏蔽合成素材增加肢体

                      如上图红框部分,按下F11,类似许愿输入"2"时。
                      进入循环。所有在队伍中的生存,且未有指定为重要队友(不能抛弃那种)。
                      那么在AP-BIT中,会让19位flag开启。
                      这个FLag决定在合成时素材是否会增加肢体。如果为1,则屏蔽合成时素材对宠物可能的肢体数影响。
                      在游戏中对应为素材是否在第二章博士处增加过肢体。
                      那么,以后只要执行一遍这个循环,就不需要特意跑到第二章博士那里“加工”素材啦~


                      IP属地:湖南69楼2017-05-01 12:00
                      回复
                        【反编译】自动筛选分类废弃牧场生物
                        中期开始,最快的合成素材来源是魔物召唤+支配。
                        然而,一个很尴尬的问题是:良莠不齐的大量素材会造成选择困难,大为增加时间成本。
                        所以,一个比较理想的解决方式是:
                        让素材能够自动分成若干类。比如A类为优秀素材(前20%),B类为普通素材(20%-50%),C类为渣渣素材。(后50%)
                        每次招满牧场后可以将C类渣渣素材全部清空,仅留下B类及以上素材。
                        然后再次大量召唤+支配。循环往复,从而达到优化素材质量的效果。
                        ←楼主目前的分类区域。

                        如上图所示,按h键输入3后执行自动分类。
                        可以看到渣渣素材们全部整齐的排列在了中间区域。配合楼上屏蔽肢体,可以边修炼基因工程边优化素材~

                        ↑A类素材区域

                        ↑B类素材区域


                        IP属地:湖南70楼2017-05-03 05:09
                        回复
                          养成MOD定位
                          1 以正常玩法为前提,优化UI,自动化操作,大幅减少玩家重复操作,实现轻松养成。
                          2 自动化养成(俗称挂机练技能)中不包含“愚公移山”式的低效练级。
                          3 MOD仅为优化操作,一切正常游戏不可变相实现的结果,本MOD亦不会涉及。
                          统计下目前MOD已经可以做到的改动。
                          ①【角色资料输出】
                          1 生成范围包括PC和全部在队队友
                          2 生成信息包括属性/技能/魔法以及重要的基本信息
                          3 可自定义潜力提醒功能,根据技能的当前潜力和重要级别而判定是否提醒。
                          4 可计算BUFF魔法效果,魔法消耗魔力/库存,抗性减伤效果。
                          ②【怪物合成系列相关】
                          1 牧场素材资料输出 (可结合合成计算器基于任意素材设计合成表)
                          2 非珍贵(不可抛弃)型队友作为合成素材时可按键屏蔽肢体增加。(效果同二章博士改造)
                          3 牧场全部素材根据属性质量分为三类,可按键自动分类排队。(便于多次筛选优化整体素材质量)
                          ③【其他细节改动】
                          1 重要物品名称前增加提醒。(便于商店采购,地图拾取)
                          2 空间垂钓技能动画时间缩减。(便于各种使用空间垂钓的场合)
                          3 变动不同任务生成概率。(提高白金币收获效率)
                          4 大爹地生成概率大幅提升。(非S/L党可无视此条)
                          另外MOD的是基于E+custom之下反编译的。所以Custom1.66原有的功能也会完全继承。包括:
                          1 自定义宠物AI
                          2 宠物自动进食,喂食宠物,宠物可医疗其他宠物。
                          3 各类UI(*号技能追踪功能大幅完善)
                          后续改动预想:
                          0 完善角色资料输出,考虑将该部分内容通过反编译改为游戏内显示。
                          思路:仿照并改进Custom及原版方式,但并不排除继续通过Excel完善显示和计算。
                          优先度:低
                          1 MOD增加选项界面,可自由选择是否开启任意改动。
                          思路:仿照Custom Tweaks功能选项。
                          优先度:中
                          2 各类自动化AI。包括但不限于:地城自动索敌/拾取战利品。自动化练级
                          思路1: 战斗索敌仿照敌对NPCor队友 AI。拾取战利品根据当前地图物品信息进行判定。
                          思路2: 增加PC自动进食功能,潜力不足时自动兑换白金币增加潜力功能
                          思路3:考虑到长期挂机各种风险,可睡眠状态下自动停止挂机
                          优先度:高
                          3 自动化采购,农牧业。
                          思路1:增加自定义选项(类似写书),符合玩家设置的物品自动全部买下。
                          思路2:对农场相关区域进行判定,如果可收获状态时PC自动前往收获。
                          思路3:增加按键整理牧场相关物品功能,增加根据子代牧场相关能力自动分类功能,优化种畜。
                          思路4:增加按键更替化肥物品功能。
                          优先度:最高
                          4 其他细节改动,优化养成操作。
                          思路1:考虑将文本框输入特定字符实现不同功能更改为选项方式选择。
                          思路2:增加归还卷轴的城市选择范围。
                          思路3:增加任务相关NPC的导航信息。(如该NPC位于玩家南5格,东12格)
                          思路4:增加生物钟功能,玩家规律睡眠后,同时刻睡醒的概率大幅增加。
                          思路5:生成黑星时立刻给予提示。
                          思路6:物品列表中给予物品价值基本信息(以便玩家背包有限时优先丢弃渣渣物品)
                          优先度:待定
                          版本相关说明
                          1 本MOD目前为自用型,仅基于1.66版本制作,不考虑存档版本向下兼容问题。
                          2 待原版1.67及后续版本稳定后,会制作相关版本MOD。
                          3 同版本号下,MOD可与原版存档通用。
                          欢迎任何小伙伴帮忙一起制作,楼主一个人慢慢做的话怕是要做到明年w


                          IP属地:湖南71楼2017-05-03 11:18
                          收起回复