[终于明白了祖传优化的意义][肯读汇编代码的萌新来辣][CT脚本(抛砖引玉砸人版)][请版主【不要】设置回复可见][请大家积极参与讨论,不要灌水,谢谢]
本帖最后由 qweytr_1 于 2019-4-3 13:41 编辑4c59fbb8
在开始之前,我希望解释一下我失败的经过,这款游戏真的不愧是祖传优化……
用imul计算整除除法我也是头一回见(原理,a/b=a*,而mod 18446744073709551616是可以预先算出来存起来的,于是神奇的imul成功地将0x669C/0x21转化成了0x669C*0xF83E0F83E0F83E1)
以及,4c59fbb8是我追码时候做的esp记录,后来发现,手工记录显然不如CE记录有效,而x86的辣鸡结构不能直接内存对拷任你本事通天大都要过一遍寄存器——这就给CE的trace功能一个很强大的支持,你可以先trace,保存trace文本,然后用notepad++之类的工具打开,进行搜索
首先谢过fearlessrevolution.com的CT表,以及论坛@pad123 的无私汉化,没这些,我大概只能从头开始啃了
闲话少说,开始正文……
首先放一个“体验极差”:
81 FA 3F 42 0F 00 7E 4A C7 01 3F 42 0F 00
改成
81 FA 3F 42 0F 00 90 90 C7 01 3F 42 0F 00
nop掉一个jle,如果不出意外,四大源素会变成999999
仔细阅读这段代码,不难作出
物品不减:
{ Game : Nelke_and_the_Legendary_Alchemists.exe
Version:
Date : 2019-04-03
Author : Neutron
This script does blah blah blah
}
define(address,"Nelke_and_the_Legendary_Alchemists.exe"+247990)
define(bytes,83 FA 03 77 20 48 63 C2 8B 14 81 41 03 D0)
assert(address,bytes)
alloc(newmem,$1000,"Nelke_and_the_Legendary_Alchemists.exe"+247990)
label(code)
label(return)
newmem:
code:
mov eax,0
cmp r8d,eax
cmovl r8d,eax
cmp edx,03
ja Nelke_and_the_Legendary_Alchemists.exe+2479B5
jmp return
address:
jmp newmem
return:
address:
db bytes
// cmp edx,03
// ja Nelke_and_the_Legendary_Alchemists.exe+2479B5
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: "Nelke_and_the_Legendary_Alchemists.exe"+247990
"Nelke_and_the_Legendary_Alchemists.exe"+247982: 5F -pop rdi
"Nelke_and_the_Legendary_Alchemists.exe"+247983: E9 98 42 00 00 -jmp Nelke_and_the_Legendary_Alchemists.exe+24BC20
"Nelke_and_the_Legendary_Alchemists.exe"+247988: CC -int 3
"Nelke_and_the_Legendary_Alchemists.exe"+247989: CC -int 3
"Nelke_and_the_Legendary_Alchemists.exe"+24798A: CC -int 3
"Nelke_and_the_Legendary_Alchemists.exe"+24798B: CC -int 3
"Nelke_and_the_Legendary_Alchemists.exe"+24798C: CC -int 3
"Nelke_and_the_Legendary_Alchemists.exe"+24798D: CC -int 3
"Nelke_and_the_Legendary_Alchemists.exe"+24798E: CC -int 3
"Nelke_and_the_Legendary_Alchemists.exe"+24798F: CC -int 3
// ---------- INJECTING HERE ----------
"Nelke_and_the_Legendary_Alchemists.exe"+247990: 83 FA 03 -cmp edx,03
"Nelke_and_the_Legendary_Alchemists.exe"+247993: 77 20 -ja Nelke_and_the_Legendary_Alchemists.exe+2479B5
// ---------- DONE INJECTING----------
"Nelke_and_the_Legendary_Alchemists.exe"+247995: 48 63 C2 -movsxdrax,edx
"Nelke_and_the_Legendary_Alchemists.exe"+247998: 8B 14 81 -mov edx,
"Nelke_and_the_Legendary_Alchemists.exe"+24799B: 41 03 D0 -add edx,r8d
"Nelke_and_the_Legendary_Alchemists.exe"+24799E: 48 8D 0C 81 -lea rcx,
"Nelke_and_the_Legendary_Alchemists.exe"+2479A2: 78 54 -js Nelke_and_the_Legendary_Alchemists.exe+2479F8
"Nelke_and_the_Legendary_Alchemists.exe"+2479A4: 89 11 -mov ,edx
"Nelke_and_the_Legendary_Alchemists.exe"+2479A6: 81 FA 3F 42 0F 00 -cmp edx,000F423F
"Nelke_and_the_Legendary_Alchemists.exe"+2479AC: 7E 4A -jle Nelke_and_the_Legendary_Alchemists.exe+2479F8
"Nelke_and_the_Legendary_Alchemists.exe"+2479AE: C7 01 3F 42 0F 00 -mov ,000F423F
"Nelke_and_the_Legendary_Alchemists.exe"+2479B4: C3 -ret
}
这个CT表的目标是,提升临时帮工们的素质,每次只产出十几个也太无力了些,明明头像是辣么萌的妹纸,分明萌是第一生产力啊~
为了生产力,我们首先需要找到生产力的算法
尝试以通草产量搜索,未果,不得以,找出以前写CE炼金的精神,开始啃汇编码
注意到产量与适性应是正相关的,而本作适性又与基础数值挂钩,于是以基础数值为基础,开始读代码
于是,我读到了祖传优化……比如imul做除法,又比如,长长一大段不知所云,再比如,栈内元素从来不用,rsp常常括号内挂着+30标志……也没谁了
追码有一个特别技巧,右键,跟踪,然后让CE生成一串跟踪堆栈之类的东西,而后不要用CE,直接存起来。文本编辑器打开保存文件之后Ctrl+F比CE好用10000倍……
贴一下计算公式
这是一个从地址09BA结尾的程序里面读出来的,某次追码得到的花园产量计算公式:
xmm7=(=0)
xmm6=某个奇怪的数字/100
xmm2=(=1.00)
xmm2=xmm2*xmm7
xmm7=(=0)
xmm1=(double)(edi(=00000007))
xmm2=xmm2*xmm6
xmm0=(double)ebx
xmm2=xmm2+xmm0
xmm3=(double)eax
xmm2=xmm2*xmm1
xmm3=xmm3+xmm2
最后,计算结果被存到了esi中,也就是,如果能改掉esi的值,emmm...
有爱自取整合随意,顺手抄上了GPL v3的license,反正大家也不可能用这个脚本卖钱嘛……
如果准备整合的话,记得在整合之后的脚本注明GPL许可(这是个人感觉GPL最好的一点,现在真心觉得开源程序都是良心程序)
{ Game : Nelke_and_the_Legendary_Alchemists.exe
Version: (-1.#INF)
Date : 2019-03-31
Author : 云中子3529
This script is free script: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program comes with ABSOLUTELY NO WARRANTY;
本来我理应可以写一个非常漂亮的aobscan脚本,然而我的CE坏了,aobscan激活之后没有反应(我不确定是不是我写错了),于是我用了这种注入方式
倘若今后版本升级,请手动aobscan一下define的66 0F...这串字节,并更新下面的那一个define,如果660F...这串字符搜不到,请把“可写入”的对勾取消掉
脚本并没有实现最开始那种单纯的“增加帮工产量”的目的——测试发现帮工产量是人工产量的一半,没找到也懒得继续找帮工产量如何修改了
就这样吧
我在64那里用英语注释了一句,如果你们觉得产量100偏小,你们可以把这个数字改成C8或者#200
开心就好。
}
define(address,"Nelke_and_the_Legendary_Alchemists.exe"+25E5B2)
define(bytes,66 0F 6E C3 0F 5B C0 0F 5B C9 F3 0F 58 D0 66 0F 6E D8 0F 5B DB F3 0F 59 D1 F3 0F 58 DA F3 0F 2C F3)
assert(address,bytes)
alloc(newmem,$1000,"Nelke_and_the_Legendary_Alchemists.exe"+25E5B2)
label(code)
label(return)
newmem:
code:
db bytes
mov rax 64//Here, you could change 0x64(=100) to any number you want.
cmp esi eax
cmovl esi eax
jmp return
address:
jmp newmem
db 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
return:
address:
db bytes
// movd xmm0,ebx
// cvtdq2ps xmm0,xmm0
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: "Nelke_and_the_Legendary_Alchemists.exe"+25E5B2
"Nelke_and_the_Legendary_Alchemists.exe"+25E588: E8 B3 9A FE FF -call Nelke_and_the_Legendary_Alchemists.exe+248040
"Nelke_and_the_Legendary_Alchemists.exe"+25E58D: 8B C8 -mov ecx,eax
"Nelke_and_the_Legendary_Alchemists.exe"+25E58F: E8 BC 0B 00 00 -call Nelke_and_the_Legendary_Alchemists.exe+25F150
"Nelke_and_the_Legendary_Alchemists.exe"+25E594: F3 0F 10 54 24 78 -movss xmm2,
"Nelke_and_the_Legendary_Alchemists.exe"+25E59A: F3 0F 59 D7 -mulss xmm2,xmm7
"Nelke_and_the_Legendary_Alchemists.exe"+25E59E: 0F 28 7C 24 20 -movaps xmm7,
"Nelke_and_the_Legendary_Alchemists.exe"+25E5A3: 66 0F 6E CF -movd xmm1,edi
"Nelke_and_the_Legendary_Alchemists.exe"+25E5A7: 33 FF -xor edi,edi
"Nelke_and_the_Legendary_Alchemists.exe"+25E5A9: F3 0F 59 D6 -mulss xmm2,xmm6
"Nelke_and_the_Legendary_Alchemists.exe"+25E5AD: 0F 28 74 24 30 -movaps xmm6,
// ---------- INJECTING HERE ----------
"Nelke_and_the_Legendary_Alchemists.exe"+25E5B2: 66 0F 6E C3 -movd xmm0,ebx
"Nelke_and_the_Legendary_Alchemists.exe"+25E5B6: 0F 5B C0 -cvtdq2ps xmm0,xmm0
"Nelke_and_the_Legendary_Alchemists.exe"+25E5B9: 0F 5B C9 -cvtdq2ps xmm1,xmm1
"Nelke_and_the_Legendary_Alchemists.exe"+25E5BC: F3 0F 58 D0 -addss xmm2,xmm0
"Nelke_and_the_Legendary_Alchemists.exe"+25E5C0: 66 0F 6E D8 -movd xmm3,eax
"Nelke_and_the_Legendary_Alchemists.exe"+25E5C4: 0F 5B DB -cvtdq2ps xmm3,xmm3
"Nelke_and_the_Legendary_Alchemists.exe"+25E5C7: F3 0F 59 D1 -mulss xmm2,xmm1
"Nelke_and_the_Legendary_Alchemists.exe"+25E5CB: F3 0F 58 DA -addss xmm3,xmm2
"Nelke_and_the_Legendary_Alchemists.exe"+25E5CF: F3 0F 2C F3 -cvttss2si esi,xmm3
// ---------- DONE INJECTING----------
"Nelke_and_the_Legendary_Alchemists.exe"+25E5D3: 40 38 7C 24 60 -cmp ,dil
"Nelke_and_the_Legendary_Alchemists.exe"+25E5D8: 74 33 -je Nelke_and_the_Legendary_Alchemists.exe+25E60D
"Nelke_and_the_Legendary_Alchemists.exe"+25E5DA: 8B DF -mov ebx,edi
}
另外,“翻译”了一下任务选项,找到了不少东西的含义,虽然还没胆子修主线任务以及加人口的国策任务,也没找到哪里能改任务种类,不过只要你把“需要几个才能完成任务”跟“已完成数量”都锁定成相同的数值,基本上任务是可以自动完成的
<CheatEntry>
<ID>182</ID>
<Description>"Highlighted Request"</Description>
<Options moHideChildren="1"/>
<LastState Activated="1"/>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>{ Game : Nelke_and_the_Legendary_Alchemists.exe
Version:
Date : 2019-03-29
Author : Zach
This script does blah blah blah
}
aobscanmodule(Request_List,Nelke_and_the_Legendary_Alchemists.exe,41 0F BF 56 06) // should be unique
alloc(newmem,$1000,Request_List)
globalalloc(RequestList,4)
label(code)
label(return)
newmem:
mov ,r14
code:
movsx edx,word ptr
jmp return
Request_List:
jmp newmem
return:
registersymbol(Request_List)
Request_List:
db 41 0F BF 56 06
unregistersymbol(Request_List)
dealloc(newmem)
dealloc(Request_List)
{
// ORIGINAL CODE - INJECTION POINT: "Nelke_and_the_Legendary_Alchemists.exe"+1DA769
"Nelke_and_the_Legendary_Alchemists.exe"+1DA73D: 0F 84 8D 07 00 00 -je Nelke_and_the_Legendary_Alchemists.exe+1DAED0
"Nelke_and_the_Legendary_Alchemists.exe"+1DA743: 48 8B 0D 16 5B D9 00 -mov rcx,
"Nelke_and_the_Legendary_Alchemists.exe"+1DA74A: 48 85 C9 -test rcx,rcx
"Nelke_and_the_Legendary_Alchemists.exe"+1DA74D: 75 0C -jne Nelke_and_the_Legendary_Alchemists.exe+1DA75B
"Nelke_and_the_Legendary_Alchemists.exe"+1DA74F: E8 FC 50 EA FF -call Nelke_and_the_Legendary_Alchemists.exe+7F850
"Nelke_and_the_Legendary_Alchemists.exe"+1DA754: 48 8B 0D 05 5B D9 00 -mov rcx,
"Nelke_and_the_Legendary_Alchemists.exe"+1DA75B: 8B D7 -mov edx,edi
"Nelke_and_the_Legendary_Alchemists.exe"+1DA75D: E8 BE 51 EA FF -call Nelke_and_the_Legendary_Alchemists.exe+7F920
"Nelke_and_the_Legendary_Alchemists.exe"+1DA762: 4C 8B E8 -mov r13,rax
"Nelke_and_the_Legendary_Alchemists.exe"+1DA765: 0F BE 58 05 -movsx ebx,byte ptr
// ---------- INJECTING HERE ----------
"Nelke_and_the_Legendary_Alchemists.exe"+1DA769: 41 0F BF 56 06 -movsx edx,word ptr
// ---------- DONE INJECTING----------
"Nelke_and_the_Legendary_Alchemists.exe"+1DA76E: 45 33 C0 -xor r8d,r8d
"Nelke_and_the_Legendary_Alchemists.exe"+1DA771: 48 8B 4E 10 -mov rcx,
"Nelke_and_the_Legendary_Alchemists.exe"+1DA775: E8 96 CA 26 00 -call Nelke_and_the_Legendary_Alchemists.exe+447210
"Nelke_and_the_Legendary_Alchemists.exe"+1DA77A: 41 0F BF 56 04 -movsx edx,word ptr
"Nelke_and_the_Legendary_Alchemists.exe"+1DA77F: 45 33 C0 -xor r8d,r8d
"Nelke_and_the_Legendary_Alchemists.exe"+1DA782: 48 8B 4E 20 -mov rcx,
"Nelke_and_the_Legendary_Alchemists.exe"+1DA786: E8 85 CA 26 00 -call Nelke_and_the_Legendary_Alchemists.exe+447210
"Nelke_and_the_Legendary_Alchemists.exe"+1DA78B: 41 0F BF 4E 06 -movsx ecx,word ptr
"Nelke_and_the_Legendary_Alchemists.exe"+1DA790: 66 0F 6E C9 -movd xmm1,ecx
"Nelke_and_the_Legendary_Alchemists.exe"+1DA794: 0F 5B C9 -cvtdq2ps xmm1,xmm1
}
</AssemblerScript>
<CheatEntries>
<CheatEntry>
<ID>183</ID>
<Description>"基址"</Description>
<VariableType>2 Bytes</VariableType>
<Address>RequestList</Address>
<Offsets>
<Offset>0</Offset>
</Offsets>
</CheatEntry>
<CheatEntry>
<ID>192</ID>
<Description>"讨伐/贩卖/生产 对象编号"</Description>
<VariableType>2 Bytes</VariableType>
<Address>RequestList</Address>
<Offsets>
<Offset>2</Offset>
</Offsets>
</CheatEntry>
<CheatEntry>
<ID>191</ID>
<Description>"需要几个才能完成任务"</Description>
<VariableType>Byte</VariableType>
<Address>RequestList</Address>
<Offsets>
<Offset>4</Offset>
</Offsets>
</CheatEntry>
<CheatEntry>
<ID>190</ID>
<Description>"已经完成的数量"</Description>
<VariableType>Byte</VariableType>
<Address>RequestList</Address>
<Offsets>
<Offset>6</Offset>
</Offsets>
</CheatEntry>
<CheatEntry>
<ID>194</ID>
<Description>"发起人编号"</Description>
<VariableType>Byte</VariableType>
<Address>RequestList</Address>
<Offsets>
<Offset>8</Offset>
</Offsets>
</CheatEntry>
<CheatEntry>
<ID>195</ID>
<Description>"奖励金钱"</Description>
<VariableType>2 Bytes</VariableType>
<Address>RequestList</Address>
<Offsets>
<Offset>c</Offset>
</Offsets>
</CheatEntry>
<CheatEntry>
<ID>193</ID>
<Description>"剩余回合数"</Description>
<VariableType>2 Bytes</VariableType>
<Address>RequestList</Address>
<Offsets>
<Offset>10</Offset>
</Offsets>
</CheatEntry>
</CheatEntries>
</CheatEntry>
</CheatEntries>
</CheatEntry>
有没有材料9999不归零的,,个数弄个6666也好啊! s4401088 发表于 2019-3-31 16:38
有没有材料9999不归零的,,个数弄个6666也好啊!
坛子里面的CT表有这个功能的
只要点Have a ton of items Pt *,下拉菜单里面有一个On选项的
qweytr_1 发表于 2019-3-31 16:52
坛子里面的CT表有这个功能的
只要点Have a ton of items Pt *,下拉菜单里面有一个On选项的
123都要点么,点了我游戏会崩溃。
~倪茶~ 发表于 2019-3-31 17:43
123都要点么,点了我游戏会崩溃。
……我没试过
慢慢玩不好吗?
支持下。 完全看不懂。 能不能弄个任务直接完成的,我5W人这个达成不了了
xlks123 发表于 2019-4-3 16:05
能不能弄个任务直接完成的,我5W人这个达成不了了
……主线任务不清楚,要人口直接改人口就好
城市任务可以直接把“需要的数量”跟“已完成的数量”都锁定成1
话说这些代码怎么用。。。。我是真的看得一头雾水:funk: 执行成功了,感谢lz:loveliness: 不明嚼栗{:3_153:}顺便给大佬点赞 大佬,是大佬。我完全看不懂T T 兄弟,问一下你能看穿1.02版本更新造成的地址偏移嘛?我打紫色标记的地址是原先1.01版的地址
a45456666 发表于 2019-7-29 15:00
兄弟,问一下你能看穿1.02版本更新造成的地址偏移嘛?我打紫色标记的地址是原先1.01版的地址
...
游戏已删
你可以学一学aobscan
或者去掉“可写入”之后搜索下面注释的地址
比如
[*]"Nelke_and_the_Legendary_Alchemists.exe"+247995: 48 63 C2 -movsxdrax,edx
[*]"Nelke_and_the_Legendary_Alchemists.exe"+247998: 8B 14 81 -mov edx,
[*]"Nelke_and_the_Legendary_Alchemists.exe"+24799B: 41 03 D0 -add edx,r8d
[*]"Nelke_and_the_Legendary_Alchemists.exe"+24799E: 48 8D 0C 81 -lea rcx,
[*]"Nelke_and_the_Legendary_Alchemists.exe"+2479A2: 78 54 -js Nelke_and_the_Legendary_Alchemists.exe+2479F8
[*]"Nelke_and_the_Legendary_Alchemists.exe"+2479A4: 89 11 -mov ,edx
[*]"Nelke_and_the_Legendary_Alchemists.exe"+2479A6: 81 FA 3F 42 0F 00 -cmp edx,000F423F
对这个,你应该搜索冒号后面的那些字节
比如
: 48 63 C2 -
: 8B 14 81 -
: 41 03 D0 -
你应当搜索(字节数组)48 63 C2 8B 14 81 41 03 D0...
一般情况下你都能找到你想要的结果
qweytr_1 发表于 2019-7-29 15:49
游戏已删
你可以学一学aobscan
或者去掉“可写入”之后搜索下面注释的地址
这恐怕相当的花时间,我不见的就能懂= =你正版d版?
a45456666 发表于 2019-7-29 19:13
这恐怕相当的花时间,我不见的就能懂= =你正版d版?
……没买过正版,而且大概买正版并不会这么果断地删游戏
抱歉
本帖最后由 a45456666 于 2019-7-30 10:20 编辑
qweytr_1 发表于 2019-7-29 21:08
……没买过正版,而且大概买正版并不会这么果断地删游戏
抱歉
我的游戏共享名额还有,你要不要。你能力比我深太多,重新定位旧版ce文件对你来说应该不算啥
本帖最后由 qweytr_1 于 2019-7-30 19:51 编辑
a45456666 发表于 2019-7-30 10:18
我的游戏共享名额还有,你要不要。你能力比我深太多,重新定位旧版ce文件对你来说应该不算啥
...
不需要了
如果你真的想要改过的偏移我可以在论坛上重新下载一份
最晚明天给你
反正也不麻烦
本帖最后由 a45456666 于 2019-7-31 10:32 编辑
qweytr_1 发表于 2019-7-30 15:35
不需要了
如果你真的想要改过的偏移我可以在论坛上重新下载一份
最晚明天给你
原作者說他好像因为1.02更新老是ctd问题不想再更新了……
这是他的私信:So I was able to get my hands on the updated version, and I updated the table. This is the last time I'll update the table, so everyone be clear that if you do update your game further, you more than likely won't be able to use the table further. The game is extremely unstable on my PC and crashed 4 times just in the short time I was updating it. I'll see you guys when Lulua launches.
本帖最后由 qweytr_1 于 2019-7-31 14:53 编辑
a45456666 发表于 2019-7-31 09:19
原作者說他好像因为1.02更新老是ctd问题不想再更新了……
这是他的私信:So I was able to get my hands o ...
我也是crush了好几次
crush的原因可能只是作者菜
如果作者成功地在同一处调试crash 4次,估计作者绝对会意识到自己有多蠢
就比如最简单的
aobscan(newmem,......,bytes)//这里的bytes是一句jmp或者一句call
……
newmem:jmp code
return:
code:call .......exe+123456
jmp return
……
游戏升级的直接结果是.......exe+123456这个基址的位置被改掉了
比如变成了.......exe+123465
虽然这样的改变不会改变bytes(比如代码整体的平移,这并不会改变我们搜索的bytes)
然而偏移改掉了,也就是现在标着.......exe+123465的位置,可能是dragon……当然大概率是int 3……
这时候你直接去call .......exe+123456 当然是依概率或者以概率1 crash
(我就是因为这个问题crash了4次)
现在的脚本基本实现了原作者的功能
你可以测试一下看看效果如何。
理应不会跳出
如果跳了给我说一声我看看究竟是哪里出了问题
本帖最后由 a45456666 于 2019-7-31 16:42 编辑
qweytr_1 发表于 2019-7-31 14:51
我也是crush了好几次
crush的原因可能只是作者菜
如果作者成功地在同一处调试crash 4次,估计作者绝对会意 ...
我知道ctd一般是某些数据意料之外的过大或过小或冲突导致游戏识别异常从而boom……这数据是Have a Ton of Items Pt 1-2-3这三项其中一项byte数值错误,但以我的功力定位不到对应的数值。他做的露露亚最新的表相比前面的也有些潦草了
a45456666 发表于 2019-7-31 16:29
我知道ctd一般是某些数据意料之外的过大或过小或冲突导致游戏识别异常从而boom……这数据是Have a Ton of...
那一项tons of item我已经不准备改了
你可以用其他代码强行把这个数值改回去
我利用了highlighted item函数的副作用(所有数量读取都需要经过这个函数)找到了-6397出现的位置
然后改成了9999
(这样你就可以继续玩了)
本帖最后由 a45456666 于 2019-8-1 11:15 编辑
qweytr_1 发表于 2019-8-1 03:32
那一项tons of item我已经不准备改了
你可以用其他代码强行把这个数值改回去
唔!怪我忘了说……我觉得物品数量改成4位数可能游戏不会正常认,三位数倒是安全的。看了你的表看来天才与庸才仅一线之差,给你足够的时间那个作者糟糕的表绝对会被你完善到位
qweytr_1 发表于 2019-8-1 03:32
那一项tons of item我已经不准备改了
你可以用其他代码强行把这个数值改回去
哈哈哈!他的固态坏了,真衰:Re: Atelier Lulua - The Scion Of Arland
[*]
[*]0
[*]Report this post
[*]Quote
Unread post by zachillios » Thu Aug 01, 2019 1:53 amSo my SSD died on Monday, so I had to rush order another one and install it tonight, so that pushed it back a bit. Table will probably be updated on Friday.
本帖最后由 qweytr_1 于 2019-8-1 15:13 编辑
a45456666 发表于 2019-8-1 09:49
唔!怪我忘了说……我觉得物品数量改成4位数可能游戏不会正常认,三位数倒是安全的。看了你的表看来天才与 ...
我读过代码(很早很早之前)
物品是2 bytes带符号存储的(四个源素是4 bytes)
游戏对物品数量上界有约束,大于9999一律改成9999
负六千多并不大于9999,于是游戏没办法用那条指令进行修改
于是我改成9999理应是安全的
至于我跟那个作者的技术
……应该说……我们都很菜
或者应该换一个角度
能写出多高质量的CT表主要是看有多少时间可以浪费
毕竟每crush一次就需要花十几秒重进一遍游戏
而crush是改游戏的基础
本帖最后由 a45456666 于 2019-8-1 16:20 编辑
qweytr_1 发表于 2019-8-1 15:11
我读过代码(很早很早之前)
物品是2 bytes带符号存储的(四个源素是4 bytes)
游戏对物品数量上界有约束 ...
看来归根结底是心态,心态差那么难关永远也无法解决
看来库存贩卖数量可能跟建筑每个阶段的规模有关,要么就是有个绝对值的贩卖上限
qweytr_1 发表于 2019-8-1 15:11
我读过代码(很早很早之前)
物品是2 bytes带符号存储的(四个源素是4 bytes)
游戏对物品数量上界有约束 ...
奇怪,不晓得改动了什么数值。进道具仓库无限读取虽然不进道具仓库不会有问题
a45456666 发表于 2019-8-1 17:10
奇怪,不晓得改动了什么数值。进道具仓库无限读取虽然不进道具仓库不会有问题
...
是不是DLC不全?
我加载你的存档的时候收到了两个DLC的提示
可能是DLC额外添加了几个物品,导致你的存档崩溃
如果是这个原因,我解不了
你可以试试用我的脚本改你之前的save21,把那个负六千多改好
然后剩下的应该就正常了
(如果真的是我说的这个问题,你可以试试我改完的save21能不能读道具仓库)
本帖最后由 a45456666 于 2019-8-1 21:01 编辑
qweytr_1 发表于 2019-8-1 18:35
是不是DLC不全?
我加载你的存档的时候收到了两个DLC的提示
可能是DLC额外添加了几个物品,导致你的存档 ...
我用排除法试试看把,应该如你所说有新dlc道具地址不包含在ce文件里,我用ait+f4强退居然进程都没杀死还要再关一次
似乎找到了一个奇怪的东西?
页:
[1]
2