本帖最后由 loneprison 于 2020-8-10 16:57 编辑
最开始,首先,附上最初链接,这个贴吧帖子作者也是我
https://tieba.baidu.com/p/6167397059?pn=2
前言,给点彩蛋
给你们看看最初版本的代码,这段代码的雏形,修改自一个叫梦游电玩的网站的帖子,经过我修改过之后,因为“反正能用”就一直没管过优化过
因为前几天吾爱开放注册才弄到的账号来着。
今天突然想到,因此便搜了一下FGO相关的帖子,于是便找到了这个
https://www.52pojie.cn/thread-985807-1-1.html
这个帖子的回答引申出的方案,解决了我所遇到的最后的一个难题:锁定np为100%需要每次固定,打完一局后解锁,极其麻烦
画就不多说了,直接上成品图和附件吧
FGO (脚本)20-4-18更新.txt
(1.7 KB, 下载次数: 616)
--下方有网盘链接,非吾爱会员可去网盘下载
--这个txt里的文字是用来复制粘贴到CE的CT表里的(快捷键Ctrl+Art+L)。。。有个同学搞了半天没搞好结果发现他是直接改后戳导入,希望不会再有类似错误了。。
--于19/7/25 凌晨一点前下载了的6位同学注意下,我自己用了之后稍微另外添加两行关键代码,分别是自动找进程,解决报错的和显示完成的,虽说没用也不影响运行就是了
这三行分别是
openProcess ("NoxVMHandle.exe") --添加在开头,默认夜神模拟器,如果你是雷电mumu模拟器的话,进程名更改成对应的,或者选择注释掉这行然后手动选择进程
if a==nil then print("未能搜寻到值,请确认第一二行填写是否正确或稍后再试") return end --添加在原代码的第14行下方,“while”代码上方,如果不添加的话就是报错英文说“a”是空值不可运算
print(“修改完成”) --结尾处添加以显示修改成功了,不过其实这三行都不影响实际运行就是了
--19/7/28 更新,加了一行代码和一些文字注释
之前下载的同学可以在第20行左右,writeInteger代码处加下面这句即可
writeInteger(a-n+0x4,0) --此项可使路人助战也可使用宝具
FGO每次进入战斗以后,运行一下,弹出修改完成的窗口就算完成了,不过打下一局依然需要在运行一次
不过使用之前需要自己确定好需要填的值
要点一:最上方三个数值,需要改几个从者(min的值),以及第一个从者的攻击力和血量(注意只需要输入第一个从者面板即可),请自行输入(理论上如果你不改第一个从者只改第二第三个从者的话也可以选择输入第二个从者的面板)
要点二:第18到第22行请自行修改想要的值
要点三:很多平时其实用不到的值,比如血量啊宝具等级啥的,可以在这一行的前面打一个“--”,这样就可以注释掉这行,不运行这行了,而第24行至第28行(最新版是27至35行),一般用不上,可以再这一小段的开头加“--[[”,结尾加"--]]",或者逐行加"--"来进行注释即可(比如说我已经主动注释掉了修改血量的和锁定血量部分的代码,如果你需要用的话再删除“--”或"--[[""--]]"组合即可)
要点四:(划重点):因未知原因,打输一局以后(如果再输一局可能恢复),下一局的地址就会固定(注意是地址不是数值),并且两个从者之间的地址偏移可能会变动(也可能不会),在此情况下修改多个从者的方案不一定还适用,但是反过来也可以利用这点,特意打输一局(最好是高难,省体力),然后手动搜到地址并锁定。(其实也可以依靠我上方的脚本只修改一个从者的值,然后根据锁定了的HP地址,查看附近内存,然后找到那些关键的地址加入到列表锁定)这样只要你不去商店啊领任务啥的就可以一直爽了,配合模拟器的按键脚本用在无限池超爽的
要点五:你使用了锁定血量的代码,通关一局,进入下一局之前,一定要记得把锁定值的地址给解锁,不然快则下一局,慢则过了几局之后,会出现游戏闪退的现象
要点六:由于0np放宝具原理是修改np上限为0 。。。故np永远不会增加,所以需要用np的技能放不出)))
19/7/26 今日大封禁没有我的名单,目前依然安全
19/8/30 CBA沉了,心态炸了退游,附上最后的礼物
FGO CE脚本(长时间使用版本)20-4-18更新.txt
(1.47 KB, 下载次数: 454)
(已失效)
使用方式是先去特意打输一局,下一局进入后修改,然后不去商店不去领取任务一般就不会失效,为了以防万一最好还是把光炮作为主力放在第一位并长期使用比较好
19/11/25
这边出了很多自身问题导致虽然口头答应马上更新但是一直没动身。。比如模拟器打不开fgo,固态坏盘导致换固态重装电脑等。。还有忘记了这个事(划掉),今天弄了下发现是更新版本导致宝具等级的偏移值更改,而原宝具等级地址被更改后会导致无法运行的情况,此外还有更改多个从者的偏移值也发生了变化。其实如果有的人注释掉或者不用宝具等级的话以及只更改一个从者的话,即使不更新脚本也不受影响就是了))
PS:以后更新版本也有可能会出现偏移值更改的情况这种情况可以自己排查下问题,注释掉对应的更改,毕竟我也有可能像这次一样咕很久(划掉)(一般来说两个从者之间的间隔更改的情况会多,,所以推荐劲量单核)
由于贴吧帖子被新上任的骗子sm吧主删除了,因此本日开始此贴开放对路人权限(此前是仅限吾爱已注册用户看帖)
百度网盘链接:https://pan.baidu.com/s/1s3zpsBxiNwztFjDbV2iYgw
提取码:5zcm
20/4/18
更新了偏移值,此次接到评论区反馈后去重新试了下,单个人的修改照常没问题,但多个人的修改问题就很大了,本来1号位2号位3号位4号位...之间的偏移应该是相同的,这次更新后不知为何2号位和3号位之间会相差一个很大的无规律的偏移,因此还是和之前说的一样,推荐劲量使用只修改一个人的方案来保证此脚本正常使用
20/8/10
经过验证,通过游戏失败来保证地址固定的方法已失效,虽然改一局的方法仍然成立但效率极低,如有需求请另外寻找,本帖今日后不再更新脚本
干货/原理
只是为了游戏爽一爽的用户可以无视下面的信息了,这些是说给想自己研究lua脚本等用户的
最初,我是在一个梦游电玩的网站上找到了用CE的lua脚本进行修改的方法(那个网站未知原因进去很慢很慢所以我早就没去了)
当时我也爽了好一整子没有改过代码
当初的代码原理是,利用脚本自动搜索字节组来定位到地址,再根据地址进行计算,来达到获取其他地址,以达到修改的效果
但是由于其原理寻找地址的方法并非通过偏移去寻找,而是通过计算地址的方法去寻找,因此版本一更新,地址就要重新手动寻找一次,或者是打输过以后,地址也不同了。因此我一直在考虑是否能找到一个通用的方案。
[Lua] 纯文本查看 复制代码 --最初版本方案
local s1_atk = string.format("%X",MyAobScan("D5 2C 00 00 00 00 00 00 00 00 00 00 6B 2D 00 00 6B 2D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E8 03 00 00"))
local v = string.sub(s1_atk,1,5) --找到的地址只取前五位,比如说假设找到一个地址是6EFB3EA0,v的值便只取前五位数,变成了0006EFB3
--然后再根据下一行代码,在尾部插入“ECE”,最终得到的地址便是6EFB3ECE
local s1_Hp=v.."ECE”
后来有一次,我试着提问了下我的C#老师,老师告诉了我一个思路,既然我可以确认一个地址的所在,那么其他的地址皆可以通过偏移得到
所以才有了以下代码
[Lua] 纯文本查看 复制代码 writeInteger(a-n,95423) --修改攻击力
writeInteger(a-n+0x0C,15115) --修改当前血量(一般不用)
writeInteger(a-n+0x10,15115) --修改最大血量(一般不用)
writeInteger(a-n+0x28,0) --0np释放宝具
writeInteger(a-n+0xD0,5) --修改宝具等级
命名为a啊n啊什么的其实并不规范,但是反正已经写完了,能用,也就懒得改了
以攻击力为基准进行偏移,各个重要地址的偏移如下
+0x4 是否好友,这个会影响到助战能不能使用宝具,默认填成“0”的话就可以使用宝具了
+0x0C 当前生命值
+0x10 最大生命值
+0x20 当前np值
+0x28 最大np值
+0xD0 (更新后为+0xD4) 宝具等级
- 0x248 (更新后为+0x330) 下一个从者的攻击力地址(仅限本次开启游戏没翻车的前提)
而地址偏移的计算啊什么的,就是有点基础的数学逻辑就行了
不过地址偏移倒是好求,问题是应该怎么自动搜索,这一点我搜索相关资料花了很长一段时间
最后我在wiki上成功找到了相关的信息与代码
原文我将放到第二页(有点多),有兴趣的可以参考一下
最终我所根据梦玩原贴修改后的代码则如下(为表谢意,该方法的命名依然是与原贴一致)
[Lua] 纯文本查看 复制代码 function MyAobScan(Bytes)
local Scan = createMemScan();
Scan.OnlyOneResult=true;
Scan.firstScan(soExactValue, vtGrouped, rtTruncated, Bytes, "", 0, 0x00000001ffffffff, "", fsmNotAligned, "", true, false, false, false);
Scan.waitTillDone();
return Scan.getOnlyResult();
end
而意思的话则是,创建一个名为MyAobScan的方法,传入一个字符串自动进行搜索,并返回地址(其实严格来说这个字符串就是你平时普通使用CE时,在如下图所示的地方所填入的数字啊群组啊什么的)
搜索值得问题就算是解决了,而剩下的就都好办了
[Asm] 纯文本查看 复制代码 writeInteger(Address,Value)
将整数Value(或者说4字节的Value),填入地址Address处,而地址其实是可以当场运算偏移的,所以就有了例如
writeInteger(a-n+0x0C,15115)
writeInteger(a-n+0x10,15115)
这样的变体
[Lua] 纯文本查看 复制代码 local addressList = getAddressList()
local a1 = addressList.createMemoryRecord()
a1.setDescription(“命名”)
a1.Address = Address
a1.Active = true
这段在代码结构其实没变过,还是梦玩的原贴代码,相关意思是
第四行:将Address加入到列表中(如下图)
第三行:将描述改为“命名”(其实也可以自行修改成其他的名字,但是记得要打字符串)
第五行:是否锁定该值(true为锁定,false为不锁定)
这样就可以自动将想要锁定的值进行锁定了
应该就到这里没了还有啥的话我会后续更新
(完)
PS:
编写脚本所参考的资料与网站
https://www.runoob.com/lua/lua-tutorial.html
https://wiki.cheatengine.org/index.php?title=Lua
(下一页是MemScan类的相关资料搬运)
|