注册 | 登录

游侠NETSHOW论坛





游侠NETSHOW论坛 游侠NETSHOW论坛 全面战争全系列MOD讨论区 【原创】★★★★★★★一年4回合补丁原理介绍★★★★ ...
查看: 30131|回复: 24
打印 上一主题 下一主题

【原创】★★★★★★★一年4回合补丁原理介绍★★★★ [复制链接]

帖子
120
精华
2
积分
470
金钱
422
荣誉
1
人气
0
评议
0
跳转到指定楼层
楼主
发表于 2005-11-1 18:03:26 |只看该作者 |倒序浏览
本来是回复别人的贴,但原贴比较不起眼,所以再发一下,吼吼,别打我。

关于脚本,是个大话题。04年罗马全战E3上的Demo中有三个文档,docudemon_events、docudemon_conditions、docudemon_commands。分别记录了可用的事件,条件,命令保留字,当然后来1.2里又增加了新的这里没有包括。但这已些保留字已经够多了,想写一个完成某种目的的脚本真不容易,要一个一个找需要的可能存在的保留字。除了这三个文档外还有一个available_ui_elements.txt也要参照,因为这里有button id和scroll id,有些保留字的参数里要用到。所以我不准备介绍一个脚本怎么写,具体原理怎样。我只简单说一下,另外再说一下一年4回合的脚本,以前宇文寒说过了。

一般常用的脚本就像4回合脚本一样是放到scripts\show_me里的,这种脚本被动运行,需要人为触发。比如4回合利用的是原有的一个帮助触发事件,即“按下F1键获得战略地图快捷键菜单”。本身这个不需要“教我如何做”,也就是说原本没有脚本与它关联,这样我们可以把自己的脚本嵌进去运行。当然你也可以自己写一个trigger或者用别的trigger。还有一种脚本是自动运行的,每次进入战略地图都会自动运行,这个脚本是针对地图的。比如你想给某个地图写一个自动运行的脚本,那么你要在这个地图所在的文件夹,即\world\maps\campaign里相应的文件夹中放置这个脚本,然后在descr_strat.txt的最后增加脚本内容,假设这个脚本的名字叫descr_script.txt,那么增加的内容格式为:

Script
descr_script.txt[/SIZE][/FONT][/FONT]

记得教学吗,教学里的不能存档,部队自动移动到某个地方,自动开战,这些都是脚本实现的,看懂Prologue_Campaign_Script.txt就掌握了脚本。但这种脚本,不太好用,有些细碎的问题还没有搞定。

现在说一下4回合的script。我只写很少一段说明。

script
        suspend_during_battle on
        console_command date -270
        console_command season summer
        while I_TurnNumber = 0
        end_while

        console_command date -270
        console_command season summer
        while I_TurnNumber = 1
        end_while

        console_command date -270
        console_command season summer
        while I_TurnNumber = 2
        end_while

        console_command date -270
        console_command season winter
        while I_TurnNumber = 3
        end_while

        console_command date -269
        console_command season summer
        while I_TurnNumber = 4
        end_while
end_script[/SIZE][/FONT][/FONT]

先解释保留字:
命令类保留字:
script和end_script,用于开始一个脚本和结束一个脚本。
console_command,运行控制台命令。命令分为两类,一类是脚本命令,一类是控制台命令。
date,(控制台命令),设定当前的年份。
season,(控制台命令),设定当前的季节,可以接的参数只有两个,summer和winter。
while和end_while,开始和结束while循环,学过语言的都知道吧,while循环一直运行直到条件不满足。
suspend_during_battle,战斗时将脚本挂起。像汇编时的压入堆栈保护一样,为防止进入战斗后新的事件触发其它脚本运行而废弃原来正在运行的脚本。这样战斗结束后继续运行原有脚本。
条件类保留字:
I_TurnNumber,当前已运行的回合数,被记录在存档中。参数是逻辑运算符和数字。

下面解释含义。其实很简单,当前回合数是0-2都令时间为-270年夏季,3则令时间为-270年冬季,以后类推,一直写到你要求的结束年份为止。具体几个夏季几个冬季自己定。

基本就是这样吧。

有朋友可能要问这里面的while循环干什么用的,为什么不用if和end_if,为什么不这样写:

script
        suspend_during_battle on
        if I_TurnNumber = 0
        console_command date -270
        console_command season summer
        end_if

        if I_TurnNumber = 1
        console_command date -270
        console_command season summer
                     end_if
。。。。。。
end_script[/SIZE][/FONT][/FONT]

这么想说明你对脚本的运行方式还不了解。和普通程序一样,脚本一旦运行就会顺次向下执行。假设现在刚开始,已运行的回合数是0,那么第一段的条件满足。在执行了date -270和season summer后,程序继续向下,因为当前的I_TurnNumber不等于1,则这一段将不执行,再继续向下,都不会执行,然后脚本就结束退出了。这显然不能达到我们要的效果。而原脚本里的while空循环的作用,就是当执行完该回合的时间设定后,由于回合键一直没有按下,所以I_TurnNumber一直没变,这样就在while这里一直循环不继续执行。当按下回合键后I_TurnNumber加1,原来循环的条件打破,跳出后向下执行新的时间设定,然后再次进入循环。。。

使用道具 举报

帖子
813
精华
0
积分
407
金钱
3573
荣誉
0
人气
0
评议
0
沙发
发表于 2005-11-1 18:15:13 |只看该作者
这么有技术性的贴,我顶你!!!!!【支持】

使用道具 举报

航海区特邀会员

帖子
791
精华
2
积分
1096
金钱
2369
荣誉
30
人气
0
评议
0
板凳
发表于 2005-11-1 18:18:04 |只看该作者
【经典】 【支持】
强啊 ,以前这类补丁只会用用别人的,一直不知道怎么弄出来

这下懂了

赞一个…………

使用道具 举报

帖子
41
精华
0
积分
21
金钱
58
荣誉
0
人气
0
评议
0
地板
发表于 2005-11-1 18:24:14 |只看该作者
能发个1.0的4回合补丁给我吗?谢谢

使用道具 举报

帖子
499
精华
0
积分
250
金钱
560
荣誉
0
人气
0
评议
0
5#
发表于 2005-11-1 18:32:23 |只看该作者
有语法参考手册吗?
有语法参考手册吗?
有语法参考手册吗?

使用道具 举报

帖子
499
精华
0
积分
250
金钱
560
荣誉
0
人气
0
评议
0
6#
发表于 2005-11-1 18:32:58 |只看该作者
有语法参考手册吗?

有语法参考手册吗?

使用道具 举报

帖子
120
精华
2
积分
470
金钱
422
荣誉
1
人气
0
评议
0
7#
发表于 2005-11-1 19:30:31 |只看该作者
没有语法手册,没有系统说明。只有保留字资料和一些国外论坛的测试资料。我付上一个压缩包,里面有5个文档。

docudemon_events.txt
docudemon_conditions.txt
docudemon_commands.txt
是E3上罗马Demo里的说明

available_ui_elements.txt
是The Guild上的人注释过的,原来的Demo里也有的

commands_parameters.txt
是The Guild上的人测试的命令参数,docudemon_commands.txt里没有控制台命令,这个文档里有

多看实例吧

使用道具 举报

帖子
748
精华
1
积分
1225
金钱
6343
荣誉
65
人气
0
评议
0
8#
发表于 2005-11-1 20:23:19 |只看该作者

回复: 【原创】★★★★★★★一年4回合补丁原理介绍★

最初由 血浴中重生 发表
[B]本来是回复别人的贴,但原贴比较不起眼,所以再发一下,吼吼,别打我。

关于脚本,是个大话题。04年罗马全战E3上的Demo中有三个文档,docudemon_events、docudemon_conditions、docudemon_commands。分别记录了可... [/B]


兄弟啊,我在 bi\data\world\maps\campaign\barbarian_invasion\descr_strat.txt文件里面试了试,在最后加上了Script ABC.txt。

然后 ABC.txt 里面编辑了两个4回合的代码,重新开局,可是根本不起作用,你确定这个自动载入 script 真的有用?还是试过再说吧。
Veni, vidi, vici

使用道具 举报

罗马-柱子MOD工作组
罗马将军

帖子
649
精华
3
积分
1425
金钱
1904
荣誉
50
人气
0
评议
0
9#
发表于 2005-11-1 20:32:21 |只看该作者
关于一年多回合的脚本最大的问题是触发方式不好。每次载入进度时都需要重新去手动激活一次。甚为麻烦。

听说BI新增加了LOAD游戏时的触发条件,具体能不能用没有测试。如果行就太好了。

使用道具 举报

帖子
748
精华
1
积分
1225
金钱
6343
荣誉
65
人气
0
评议
0
10#
发表于 2005-11-1 20:44:17 |只看该作者
最初由 寒奔 发表
[B]关于一年多回合的脚本最大的问题是触发方式不好。每次载入进度时都需要重新去手动激活一次。甚为麻烦。

听说BI新增加了LOAD游戏时的触发条件,具体能不能用没有测试。如果行就太好了。 [/B]


我也在找,找呀找。有空去看看老外那边怎么做的。
Veni, vidi, vici

使用道具 举报

帖子
413
精华
0
积分
207
金钱
900
荣誉
0
人气
0
评议
0
11#
发表于 2005-11-1 20:45:17 |只看该作者
完全看不懂啊。。。。。。。。。。。。。。。。。。。。。。。。

使用道具 举报

帖子
120
精华
2
积分
470
金钱
422
荣誉
1
人气
0
评议
0
12#
发表于 2005-11-1 22:19:19 |只看该作者
hoho5999,在descr_strat.txt里改来实现载入游戏后自动运行脚本的方法目前还有不少问题没有解决。简单的脚本没有问题,复杂一些的说不准哪里会出问题,还有待研究。而且一年4回合目前从来没有采用自动运行的方式,一直是把脚本放在scripts\show_me里手动激活的。

使用道具 举报

帖子
10032
精华
5
积分
6818
金钱
14437
荣誉
80
人气
18
评议
0
13#
发表于 2005-11-1 22:24:43 |只看该作者
唉,自己开发不了引擎,就是比较麻烦啊……【汗水】

使用道具 举报

帖子
104
精华
0
积分
54
金钱
434
荣誉
0
人气
0
评议
0
14#
发表于 2006-1-31 12:35:16 |只看该作者
老大,按你的改法改了战国了,一年的确是四回合了,可是又出了个大问题,不能保存和读取进度了

使用道具 举报

帖子
379
精华
0
积分
190
金钱
398
荣誉
0
人气
0
评议
0
15#
发表于 2006-2-3 18:46:29 |只看该作者
这是个老帖,请楼上的到短信里发发【汗水】
竟然问题这么多,我就不要4季了

[Glow]这是个老帖,请楼上的到短信里发发【汗水】 [/Glow]
滚滚长江东逝水,浪花淘尽英雄。
是非成败转头空。
青山依旧在,几度夕阳红。
白发渔樵江渚上,惯看秋月春风。
一壶浊酒喜相逢。
古今多少事,都付笑谈中。  
——调寄《临江仙》

使用道具 举报

帖子
360
精华
0
积分
180
金钱
2200
荣誉
0
人气
0
评议
0
16#
发表于 2006-2-7 20:34:45 |只看该作者
有没有大秦mod的一年4回合补丁哦?那个什么“1.2中文版本一年四回合补丁”适合不适合大秦哦?可以直接覆盖mod的文档吗?
【汗水】 【汗水】 【汗水】
人间50年不能没有钱,人活50岁谁能不受罪。

使用道具 举报

帖子
38
精华
0
积分
19
金钱
77
荣誉
0
人气
0
评议
0
17#
发表于 2006-3-16 02:50:32 |只看该作者
最初由 血浴中重生 发表
[B]hoho5999,在descr_strat.txt里改来实现载入游戏后自动运行脚本的方法目前还有不少问题没有解决。简单的脚本没有问题,复杂一些的说不准哪里会出问题,还有待研究。而且一年4回合目前从来没有采用自动运行的方式,一... [/B]


怎么手动激活?

使用道具 举报

帖子
566
精华
0
积分
303
金钱
866
荣誉
2
人气
0
评议
0
18#
发表于 2009-11-5 15:04:30 |只看该作者
while循环里能嵌入另一个while循环么?如果嵌入进去又是怎么样运行的?盼高人回答
嘎嘎嘎嘎嘎嘎嘎嘎噶

使用道具 举报

欢乐颂军乐手

帖子
7045
精华
4
积分
5184
金钱
13472
荣誉
86
人气
16
评议
0
19#
发表于 2009-11-5 15:47:35 |只看该作者
原帖由 zhaozhi45 于 2009-11-5 15:04 发表
while循环里能嵌入另一个while循环么?如果嵌入进去又是怎么样运行的?盼高人回答

可以嵌,就像排楼梯一样,每一段有一层楼房。上面的,顶格的管最多,相当于楼梯口到楼顶;下面的,位置靠后的为分支只管部分相当于每层楼的楼梯间;它们各自对应相同格式的起始和结束,所有的脚本格式都是这样,就像一栋楼房。

[ 本帖最后由 jyh4nt 于 2009-11-5 15:48 编辑 ]

使用道具 举报

帖子
566
精华
0
积分
303
金钱
866
荣誉
2
人气
0
评议
0
20#
发表于 2009-11-5 17:00:46 |只看该作者
原帖由 jyh4nt 于 2009-11-5 15:47 发表

可以嵌,就像排楼梯一样,每一段有一层楼房。上面的,顶格的管最多,相当于楼梯口到楼顶;下面的,位置靠后的为分支只管部分相当于每层楼的楼梯间;它们各自对应相同格式的起始和结束,所有的脚本格式都是这样,就像一栋楼房。 ...

谢谢茄子大人回答!!!!!!!!!!
嘎嘎嘎嘎嘎嘎嘎嘎噶

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

手机版|Archiver|游侠NETSHOW论坛 ( 苏ICP备2023007791号 )

GMT+8, 2025-8-2 01:52 , Processed in 0.442577 second(s), 12 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

分享到