标题: 新引擎 71特效请求 指令的修改
性别:男-离线 godtype001
(毅)

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 忠义校尉
功绩 2
帖子 229
编号 350019
注册 2009-12-10
来自 我家


发表于 2010-5-12 10:17 资料 短消息 看全部作者
更新一些实用性较高的用法

顶楼的用法已经过时了,目前在自用的EXE和发布的引擎4.0系列里面,71的用法都是每一个设值配合特定的整形变量来代表一种效果,例如战场特效、自动计算能力等。
今天就更新一个实用性较高的用法,用途是自由R中,金钱的自动变化。

金钱的自动变化,最有名的就是无双战略版了,但是要运行相当多的剧本指令来实现这种效果,影响系统的速度,所以我就进行了改良。代码如下(注意不是无双的,是我自用的):
首先是71指令的再次改造
0040614C  /. 55             PUSH EBP
0040614D  |. 8BEC           MOV EBP,ESP
0040614F  |. 51             PUSH ECX
00406150  |. 6A 04          PUSH 4
00406152  |. 8B4D 08        MOV ECX,DWORD PTR SS:[EBP+8]
00406155  |. E8 9D220100    CALL 004183F7
0040615A  |. 25 FFFF0000    AND EAX,0FFFF
0040615F  |. 8945 FC        MOV DWORD PTR SS:[EBP-4],EAX
00406162  |. 83F8 14        CMP EAX,14
00406165  |. 7C 07          JL SHORT 0040616E
00406167  |. B8 05000000    MOV EAX,5
0040616C  |. EB 0F          JMP SHORT 0040617D
0040616E  |> 8B4D FC        MOV ECX,DWORD PTR SS:[EBP-4]
00406171  |. FF148D 8161400>CALL DWORD PTR DS:[ECX*4+406181]
00406178  |. B8 01000000    MOV EAX,1
0040617D  |> 8BE5           MOV ESP,EBP
0040617F  |. 5D             POP EBP
00406180  \. C3             RETN
00406181   . FD1A4D00       DD 004D1AFD
00406185     80454300       DD 00434580
00406189     8C1F4D00       DD 004D1F8C
0040618D     391E4D00       DD 004D1E39
00406191     781F4D00       DD 004D1F78
00406195     40264D00       DD 004D2640


在这里,我选用了71指令设效果值为5的时候实现金钱自动变化
004D2640   55               PUSH EBP
004D2641   8BEC             MOV EBP,ESP
004D2643   83EC 18          SUB ESP,18
004D2646   A1 7C074B00      MOV EAX,DWORD PTR DS:[4B077C]  ——  读出金钱数值
004D264B   3D 3F420F00      CMP EAX,0F423F  ——  看金钱是否超过999999,预防有人用修改器改出过大数值
004D2650   76 0A            JBE SHORT 004D265C
004D2652   B8 3F420F00      MOV EAX,0F423F
004D2657   A3 7C074B00      MOV DWORD PTR DS:[4B077C],EAX  ——  超过999999就强制恢复为999999,并重新保存回金钱的内存地址中
004D265C   8945 FC          MOV DWORD PTR SS:[EBP-4],EAX  ——  金钱数值保存到[EBP-4]中
004D265F   8B45 FC          MOV EAX,DWORD PTR SS:[EBP-4]
004D2662   33D2             XOR EDX,EDX
004D2664   B9 A0860100      MOV ECX,186A0  ——  金钱数值除以100000,用来判断十万位应该显示多少
004D2669   F7F1             DIV ECX
004D266B   8955 F8          MOV DWORD PTR SS:[EBP-8],EDX  ——  整除后将余数保存到[EBP-8]里面,用作后面万位的判断
004D266E   83C0 08          ADD EAX,8  ——  整除后的结果+8,作为R形象的动作
004D2671   6A 02            PUSH 2  ——  这个是R形象的方向值,02为向南
004D2673   50               PUSH EAX  ——  R形象的动作
004D2674   68 DE130000      PUSH 13DE  ——  十万位R形象的人物编号
004D2679   E8 0965F5FF      CALL 00428B87  ——  剧本指令中武将转向和武将动作的核心函数
004D267E   83C4 0C          ADD ESP,0C
004D2681   8B45 F8          MOV EAX,DWORD PTR SS:[EBP-8]  ——  轮到万位了,将之前的除以100000之后的余数读出来
004D2684   33D2             XOR EDX,EDX
004D2686   B9 10270000      MOV ECX,2710  ——  除以10000
004D268B   F7F1             DIV ECX
004D268D   8955 F4          MOV DWORD PTR SS:[EBP-C],EDX  ——  余数继续保存起来
004D2690   83C0 08          ADD EAX,8
004D2693   6A 02            PUSH 2
004D2695   50               PUSH EAX
004D2696   68 DF130000      PUSH 13DF  ——  万位R形象的人物编号
004D269B   E8 E764F5FF      CALL 00428B87
004D26A0   83C4 0C          ADD ESP,0C
004D26A3   8B45 F4          MOV EAX,DWORD PTR SS:[EBP-C]
004D26A6   33D2             XOR EDX,EDX
004D26A8   B9 E8030000      MOV ECX,3E8  ——  除以1000
004D26AD   F7F1             DIV ECX
004D26AF   8955 F0          MOV DWORD PTR SS:[EBP-10],EDX
004D26B2   83C0 08          ADD EAX,8
004D26B5   6A 02            PUSH 2
004D26B7   50               PUSH EAX
004D26B8   68 E0130000      PUSH 13E0  ——  千位R形象的人物编号
004D26BD   E8 C564F5FF      CALL 00428B87
004D26C2   83C4 0C          ADD ESP,0C
004D26C5   8B45 F0          MOV EAX,DWORD PTR SS:[EBP-10]
004D26C8   33D2             XOR EDX,EDX
004D26CA   B9 64000000      MOV ECX,64  ——  除以100
004D26CF   F7F1             DIV ECX
004D26D1   8955 EC          MOV DWORD PTR SS:[EBP-14],EDX
004D26D4   83C0 08          ADD EAX,8
004D26D7   6A 02            PUSH 2
004D26D9   50               PUSH EAX
004D26DA   68 E1130000      PUSH 13E1  ——  百位R形象的人物编号
004D26DF   E8 A364F5FF      CALL 00428B87
004D26E4   83C4 0C          ADD ESP,0C
004D26E7   8B45 EC          MOV EAX,DWORD PTR SS:[EBP-14]
004D26EA   33D2             XOR EDX,EDX
004D26EC   B9 0A000000      MOV ECX,0A  ——  除以10
004D26F1   F7F1             DIV ECX
004D26F3   8955 E8          MOV DWORD PTR SS:[EBP-18],EDX
004D26F6   83C0 08          ADD EAX,8
004D26F9   6A 02            PUSH 2
004D26FB   50               PUSH EAX
004D26FC   68 E2130000      PUSH 13E2  ——  十位R形象的人物编号
004D2701   E8 8164F5FF      CALL 00428B87
004D2706   83C4 0C          ADD ESP,0C
004D2709   8B45 E8          MOV EAX,DWORD PTR SS:[EBP-18]
004D270C   83C0 08          ADD EAX,8
004D270F   6A 02            PUSH 2
004D2711   50               PUSH EAX
004D2712   68 E3130000      PUSH 13E3  ——  个位R形象的人物编号
004D2717   E8 6B64F5FF      CALL 00428B87
004D271C   83C4 0C          ADD ESP,0C
004D271F   8BE5             MOV ESP,EBP
004D2721   5D               POP EBP
004D2722   C3               RETN


上面的代码当中,R形象的方向的对应值是00北、01东、02南、03西;而动作的对应值是从00普通开始到0F单手举起的,我这里用的是从08盘手举手开始,按0--9来对应显示,所以每一次整除后得出的数值都要加8,例如12345除以100000,得出结果是0,余数为12345,所以十万位显示为0,0对应的动作编号是08,所以0+8=8;而人物编号要在实际的编号的最前面补1,例如0号武将就是1000,我这里用的是990-995这6个武将,所以就是13DE(3DE就是990)--13E3了。

简单的剧本用法
Section
        2:内部信息 TEST
        2d:武将点击测试 0:曹操
        0:事件结束
                71:特效请求 5
                0:事件结束
例如这个例子,点击武将后,就会自动执行71指令,然后就会自动执行前面的代码,令自由R场景中的6位数金钱按照实际数值来显示变化了。具体应用的时候就可以将这条指令放在需要实时显示的地方就可以了。


顶部
性别:男-离线 godtype001
(毅)

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 忠义校尉
功绩 2
帖子 229
编号 350019
注册 2009-12-10
来自 我家


发表于 2010-5-12 10:26 资料 短消息 看全部作者
回复 #15 513633522 的帖子

当然是改引擎了,不改引擎,剧本指令如何能够生效。


顶部

正在浏览此帖的会员 - 共 0 人在线




当前时区 GMT+8, 现在时间是 2025-7-26 20:08
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.010571 second(s), 9 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP