[GTAF进口]行人决策指定器(Decision Makers)
本帖最后由 kwanz 于 2012-5-10 20:12 编辑原帖地址 http://www.gtaforums.com/index.php?showtopic=450827行人决策指定器(Decision Makers)
原帖作者/ Deji @GTAF 翻译/ kwanz @虚拟世界
未经许可 谢绝转载
会用Decision Makers(DM)的人并不多。我在这里简单解说一下并且解释一下各种参数。
创建DM
首先,我们可以这样创建一个DM:
060A: create_decision_maker_type 2 store_to 0@
DM实际上是一个集合类型,集合元素可以带有不同的默认决策事件。
当然这些都是可以修改的,但是在你修改之前默认值已经设定好了。
0-空白
所有指定了这个DM的行人都很淡定,除非你调用0709,不会相应任何事件。这个DM就像一张白纸。
1-勇敢
行人会反击攻击他的任何人。他们还会追逐他们的列表中讨厌的行人。请参照ped.dat。他们的态度行为是与默认的pedtype相同的,你创建的时候指定的参数并不管用。
2-暴力
行人会攻击瞄准他的人。
3-怯懦
行人在你瞄准他时会受惊,然后逃跑。他们在遇到枪声之类的时候也会逃跑。
4-群组
类似1,如果你攻击带此DM的行人,他会反击,如果还有其他行人带有这个DM,他们也会攻击你。他们是一伙的,有时候搞得跟特工一样,不知道为啥...
以上我不是很确定,不过大概是这么回事。
0709
原先,opcode语句是这样用的
0709: set_decision_maker $1230 on_event 36 taskID 1022 unknown 0.0 100.0 chance 0.0 unknown 0.0 1 0 // 参考*.ped
那个chance参数彻底把我搞糊涂了,我用的时候各种搞错...在其他没有标明的参数里,反倒有更像是设定几率的。最后两个参数又是什么...
我觉得正确的调用应该是
0709: set_decision_maker 0@ on_event 31 task 413 respect 0.0 hate 0.0 like 0.0 dislike 0.0 in_car 0 on_foot 1
我来解释一下参数的含义。
set_decision_maker
引用你用060A创建的DM
on_event
参考这个页面查看完整列表
指定我们需要修改响应的事件.
比如说,31(EVENT_GUN_AIMED_AT)表示修改行人被瞄准时的动作。
task
参考这个页面查看完整列表
指定on_event返回true时的动作,以上面为例,就是更改被瞄准时的动作。
413是TASK_SIMPLE_HANDS_UP,表示行人在被瞄准时会举起双手。
如果设为200(TASK_NONE),行人不会作出任何反应。
respect, hate, like, dislike
现在讲讲几个令人疑惑的参数吧。原来的语句里写成了未知,但是现在的写法比较好理解。
这些参数在多数事件中都是没用的。他们只有在某ID的事件涉及其他人物时才有效,比如说20(EVENT_SEXY_PED)。
这些参数取决于ped.dat或者main.scm执行过程中做的动态修改。如果指定的行人要设定为憎恨骚人(sexy ped),那么应该这样写
0709: set_decision_maker 0@ on_event 31 task 415 respect 0.0 hate 100.0 like 0.0 dislike 0.0 in_car 0 on_foot 1
意思就是某个人设定为憎恨sexy ped,那么他看到sexy ped的时候,他会立即闪开...有点诡异,大概是那么回事。
这些参数都是浮点数,表示憎恨有一个程度。如果憎恨爆表了,人物就会执行动作。
不信么?最好的例子在main.scm里
0709: set_decision_maker 231@ on_event 15 taskID 1000 respect 0.0 hate 100.0 like 0.0 dislike 100.0 in_car 1 on_foot 1
0709: set_decision_maker 231@ on_event 36 taskID 1000 respect 0.0 hate 100.0 like 0.0 dislike 0.0 in_car 1 on_foot 1
0709: set_decision_maker 231@ on_event 9 taskID 1000 respect 0.0 hate 75.0 like 0.0 dislike 75.0 in_car 1 on_foot 1
0709: set_decision_maker 231@ on_event 9 taskID 415 respect 0.0 hate 25.0 like 0.0 dislike 25.0 in_car 1 on_foot 1
这里有4句,事件1000是TASK_COMPLEX_KILL_PED_ON_FOOT,意思就是攻击行人。
第一行:行人A会攻击开枪的人,并且开枪的人进了行人A的憎恨列表。
第二行:设置事件EVENT_ACQUAINTANCE_PED_HATE,特殊事件,表示行人B看见行人A憎恨的人。然后行人B也会做相同的反应,攻击行人A憎恨的人
第三行:指定了比较小的憎恨值,让行人A不那么憎恨其他人。事件设为EVENT_DAMAGE,意思是行人A若受到憎恨值高于75%的人的徒手攻击,他就会反击。
不要搞糊涂了。上面两行直接把憎恨值设为满,因为别人打了一枪什么的,必须立即反应攻击。第3行的憎恨值比较低,行人也比较能忍。也就是说要连挨几下伤害才开始反击。
第四行的憎恨值。意思就是行人比较博爱。即便别人打他,他也只会躲。他的憎恨值总上不去,所以只会逃跑。
第3,4行把dislike和hate设置成一样。第1行则设为100%,我也不知道怎么回事...
上面整段代码作用于LS最后的几个任务(进入乡村地区之前)的Ballas和Grove。在之前的若干次时机也有把他们设置为不做任何动作,这是为了保证任务中他们专心打架...
他们设定为一见到憎恨的人物立即攻击,也就是两帮打架。
in_car, on_foot
简单的说就是指定人物在车上还是步行的时候执行动作。
如果on_foot=0, in_car=1,人物只有在车上的时候才会相应动作。这在车辆相关的任务中很有用。on_foot=1表示步行时执行动作。都设为1表示随时可以做动作。 簡明易懂,讚:lol KWANZ翻譯神效率0.0
如果所有AI憎恨值全滿那AI不是很彪悍- - 啊,翻译果然神速啊,又上了一课 - -試過去翻譯GTAF的,搞到一半就放棄了{:soso__5560666812987804680_4:}
膜拜英語帝:lol 不错。 看来木有了前排 支持!!{:soso_e183:} 那就亲自动手试试看了
页:
[1]