Board logo

标题: STAR175新引擎商店自动售出物品的修改 [打印本页]

作者: godtype    时间: 2008-10-15 13:38     标题: STAR175新引擎商店自动售出物品的修改

最近因为重新修正本人的MOD,所以研究了一下STAR175新引擎中商店自动售出物品的相关内容,得出以下结论,希望大家都有用。

相关的函数:

00472C30   $ 55             PUSH EBP
00472C31   . 8BEC           MOV EBP,ESP
00472C33   . 51             PUSH ECX
00472C34   . 894D FC        MOV DWORD PTR SS:[EBP-4],ECX
00472C37   . E8 2E95F9FF    CALL 0040C16A  --->计算我军人物的平均等级(即加入的默认等级)
00472C3C   . 8B55 08        MOV EDX,DWORD PTR SS:[EBP+8]
00472C3F   . 81E2 FF000000  AND EDX,0FF
00472C45   .^E9 8549FAFF    JMP 004175CF
00472C4A   > 8BE5           MOV ESP,EBP
00472C4C   . 5D             POP EBP
00472C4D   . C2 0400        RETN 4

004175CF   > 33C9           XOR ECX,ECX
004175D1   . 3C 14          CMP AL,14  --->检查我军所有人的平均等级是否20级,确定是否卖出中级物品
004175D3   . 76 06          JBE SHORT 004175DB
004175D5   . 41             INC ECX  --->下面的482427开始的数值各加1,即00变01,03变04……
004175D6   . 3C 28          CMP AL,28  --->检查我军所有人的平均等级是否40级,确定是否卖出高级物品
004175D8   . 76 01          JBE SHORT 004175DB
004175DA   . 41             INC ECX  --->下面的482427开始的数值在上面已经增加1的基础上各自再加1,即变成02、05,08……
004175DB     B0 09          MOV AL,9  --->卖出多少种武器(防具)
004175DD   . 2AD0           SUB DL,AL
004175DF   . 73 0C          JNB SHORT 004175ED
004175E1   . 02D0           ADD DL,AL
004175E3   . 8A82 27244800  MOV AL,BYTE PTR DS:[EDX+482427]
004175E9   . 03C1           ADD EAX,ECX
004175EB   . EB 09          JMP SHORT 004175F6
004175ED   > 8B4D FC        MOV ECX,DWORD PTR SS:[EBP-4]
004175F0   . 8D4C11 08      LEA ECX,DWORD PTR DS:[ECX+EDX+8]
004175F4   . 8B01           MOV EAX,DWORD PTR DS:[ECX]
004175F6   > 25 FF000000    AND EAX,0FF
004175FB   . E9 4AB60500    JMP 00472C4A

00482427     00             DB 00  --->以下是九种初级武器(防具)
00482428     03             DB 03
00482429     06             DB 06
0048242A     09             DB 09
0048242B     0C             DB 0C
0048242C     0F             DB 0F
0048242D     12             DB 12
0048242E     26             DB 26
0048242F     29             DB 29

UE地址:
169d2的14
169d7的28
169dc的09
81827开始9个字节
作者: 37610716    时间: 2008-10-15 13:49

这个应该是4改的地址吧?  不知道加强的改变了没有。

如果不卖的话是否直接FF在DATA里指定?
___________________________________
看了下面就明白了。

[ 本帖最后由 37610716 于 2008-10-15 13:57 编辑 ]
作者: godtype    时间: 2008-10-15 13:53

以上适用于目前的所有STAR175版新引擎。
如果旧引擎想用这个自动售出,也可以对着来修改,因为我对照了一下原版,472C30函数是原版已经有的,STAR应该只是修改了,没有重写或新写。
作者: godtype    时间: 2008-10-15 14:00     标题: 回复 #2 37610716 的帖子

可能是我写得不够好(我以前也说过我不擅于表达)。

最开始的时候是:00 03 06 09 0C 0F 12 26 29 即初级物品
加1之后就变成:01 04 07 0A 0D 10 13 27 2A 即中级物品
再加1之后就变成:02 05 08 0B 11 14 28 2B 即高级物品

就是这个样子。

——————
如果不卖其中某一类物品,就好像我下次更新时会将普通炮车取消卖出一样,改法是:
004175DB     MOV AL,9  改成 8

00482427开始改成 00 03 06 09 0F 12 26 29,
中间的0C没有了,让后面的放上来,最后一个(原来的29)就可以不改。

[ 本帖最后由 godtype 于 2008-10-15 16:31 编辑 ]
作者: 37610716    时间: 2008-10-15 14:09

  恩,看到后面的那9个地址就明白了。
作者: 37610716    时间: 2008-10-15 14:20

004175D1   . 3C 14          CMP AL,14  --->检查我军所有人的平均等级是否20级,确定是否卖出中级物品

004175D6   . 3C 28          CMP AL,28  --->检查我军所有人的平均等级是否40级,确定是否卖出高级物品

这2段函数表示会根据等级转换进阶卖2次装备:

初始的是最开始的时候是:00 03 06 09 0C 0F 12 26 29 即初级物品的话,进阶就是 01 04 07 0A 0D 10 13 27 2A 即中级物品和02 05 08 0B 11 14 28 2B 即高级物品

如果初始的是01 04 07 0A 0D 10 13 27 2A 即中级物品,那么进阶的话就是02 05 08 0B 11 14 28 2B 即高级物品和02 05 08 0B 11 14 28 2B 即高级物品

当然如果那9个地址是02 05 08 0B 11 14 28 2B 即高级物品,就会从开始就一直卖铁X这些高阶装备??


如果我所有的都不想卖的话 004175DB     B0 09          MOV AL,9  --->卖出多少种武器(防具) 这里9改成0,  那么那9个位置是不是就不需要改了,因为他卖0个装备!

[ 本帖最后由 37610716 于 2008-10-15 14:35 编辑 ]
作者: star175    时间: 2008-10-15 14:27

取消自动售货的方法就就是把这个函数恢复原状,找一个原版ccz的exe对照着改回去就行了
作者: 希布    时间: 2008-10-15 15:48

俺也补充一下,不是根据等级自动售出武器防具,而是还原为原CCZ的每关必须由DATA指定,可以这样改(感谢阿斌指导)

00472C30      55            push    ebp
00472C31      8BEC          mov     ebp, esp
00472C33      51            push    ecx
00472C34      894D FC       mov     dword ptr [ebp-4], ecx
00472C37      8B45 08       mov     eax, dword ptr [ebp+8]
00472C3A      25 FF000000   and     eax, 0FF
00472C3F      8B4D FC       mov     ecx, dword ptr [ebp-4]
00472C42      8A4401 08     mov     al, byte ptr [ecx+eax+8]
00472C46      8BE5          mov     esp, ebp
00472C48      5D            pop     ebp
00472C49      C2 0400       retn    4
00472C4C      90            nop
00472C4D      90            nop
00472C4E      90            nop
00472C4F      90            nop
作者: godtype    时间: 2008-10-15 16:28     标题: 回复 #8 希布 的帖子

这个本身就是原版的。
作者: yanguodong    时间: 2008-10-15 21:55     标题: 回复 #6 37610716 的帖子

你说的这些都是原版曹操传没有的。曹操传的道具出售是在DATA中设定,你想从哪一关起买到高级装备,只能从DATA中选取,而这些新的功能(最早用于岳飞传)是能根据我军等级自动出现在商店中,当然DATA设定任然保留,这项功能最大好处是可根据玩家不同情况,自动做出相应调整。
MOV AL,9  的意思是可自动出售设定前9种普通道具,改成0等于去除了自动出售武器这项功能,回归到原曹操传在DATA中设定要出售的道具
作者: 37610716    时间: 2008-10-15 22:10     标题: 回复 #10 yanguodong 的帖子

  感谢了。
作者: 周瑜    时间: 2008-10-15 22:35

没错,动态商店的功能旧引擎就有了,以岳飞传为例,只是地址稍稍不同而已。

:00472C30 55                      push ebp
:00472C31 8BEC                    mov ebp, esp
:00472C33 51                      push ecx
:00472C34 894DFC                  mov dword ptr [ebp-04], ecx
:00472C37 E81395F9FF              call 0040C14F--->计算我军最高15人的平均等级(即加入的默认等级)
:00472C3C 8B5508                  mov edx, dword ptr [ebp+08]
:00472C3F 81E2FF000000            and edx, 000000FF
:00472C45 E9760CF9FF              jmp 004038C0

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00403919(U)
|
:00472C4A 8BE5                    mov esp, ebp
:00472C4C 5D                      pop ebp
:00472C4D C20400                  ret 0004

:004038C0 33C9                    xor ecx, ecx
:004038C2 3C14                    cmp al, 14--->检查我军所有人的平均等级是否20级,确定是否卖出全部低级物品和三种中级物品
:004038C4 7224                    jb 004038EA
:004038C6 41                      inc ecx
:004038C7 3C16                    cmp al, 16--->检查我军所有人的平均等级是否22级,确定是否卖出六种低级物品和六种中级物品
:004038C9 721F                    jb 004038EA
:004038CB 41                      inc ecx
:004038CC 3C18                    cmp al, 18--->检查我军所有人的平均等级是否24级,确定是否卖出三种低级物品和全部中级物品
:004038CE 721A                    jb 004038EA
:004038D0 41                      inc ecx
:004038D1 3C1A                    cmp al, 1A--->检查我军所有人的平均等级是否26级,确定是否卖出全部中级物品
:004038D3 7215                    jb 004038EA
:004038D5 41                      inc ecx
:004038D6 3C28                    cmp al, 28--->检查我军所有人的平均等级是否40级,确定是否卖出全部中级物品和三种高级物品
:004038D8 7210                    jb 004038EA
:004038DA 41                      inc ecx
:004038DB 3C2A                    cmp al, 2A--->检查我军所有人的平均等级是否42级,确定是否卖出六种中级物品和六种高级物品
:004038DD 720B                    jb 004038EA
:004038DF 41                      inc ecx
:004038E0 3C2C                    cmp al, 2C--->检查我军所有人的平均等级是否44级,确定是否卖出三种中级物品和全部高级物品
:004038E2 7206                    jb 004038EA
:004038E4 41                      inc ecx
:004038E5 3C2E                    cmp al, 2E--->检查我军所有人的平均等级是否46级,确定是否卖出全部高级物品
:004038E7 7201                    jb 004038EA
:004038E9 41                      inc ecx

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004038C4(C), :004038C9(C), :004038CE(C), :004038D3(C), :004038D8(C)
|:004038DD(C), :004038E2(C), :004038E7(C)
|
:004038EA 8A811E394000            mov al, byte ptr [ecx+0040391E]--->根据ecx由0到8求出有多少种武器防具可卖。
:004038F0 2AD0                    sub dl, al
:004038F2 7317                    jnb 0040390B--->所求道具在exe列表之外,取data中的道具
:004038F4 02D0                    add dl, al
:004038F6 8BC1                    mov eax, ecx
:004038F8 2403                    and al, 03--->初中高级同样处理
:004038FA 6BC00C                  imul eax, 0000000C--->道具列表偏移地址
:004038FD 8A841027394000          mov al, byte ptr [eax+edx+00403927]--->eax+00403927为道具列表首地址, edx为第几种道具
:00403904 C1E902                  shr ecx, 02
:00403907 02C1                    add al, cl--->道具升级
:00403909 EB09                    jmp 00403914

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004038F2(C)
|
:0040390B 8B4DFC                  mov ecx, dword ptr [ebp-04]--->data中出售的道具
:0040390E 8D4C1108                lea ecx, dword ptr [ecx+edx+08]
:00403912 8B01                    mov eax, dword ptr [ecx]

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00403909(U)
|
:00403914 25FF000000              and eax, 000000FF
:00403919 E92CF30600              jmp 00472C4A

:0040391E 090C0C0C090C0C0C09--->道具数量
:00403927 000306090C0F122629000000--->只有同级道具的情况,最后三字节浪费
:00403933 00030607090A0C0F1226292A--->三种道具升级
:0040393F 000103070A0C0F101226272A--->六种道具升级
:0040394B 010304070A0C0D101213272A--->全部道具升级,保留最后升级的三种的对应低级道具出售

[ 本帖最后由 周瑜 于 2008-10-15 10:44 编辑 ]
作者: godtype    时间: 2008-10-16 09:12

哇哇哇,还是周大这个更强悍啊。




欢迎光临 轩辕春秋文化论坛 (http://xycq.org.cn/forum/) Powered by Discuz! 5.0.0