在上面的帖子,包括一些有同类奖励效果的mod中,所有的附加奖励都只对玩家有效。而在游戏中,当各种极品装备越攒越多时,玩家往往会把一些不用的极品发给npc们。遗憾的是这些极品装备到npc身上也只是数据相对普通的较好一点,没有附加奖励的效果,极品的成色打了折扣。为了让npc装备极品时能同样获得附加奖励,我改编了一下原来的代码,成功的达到了目的,在这里和大家分享一下。这对于各位高手来说应该是小菜一碟,在下斗胆在此班门弄斧,恳请各位老大多多批评指教!
我就用nativeplus中的“唐刀”举例说明,在moudle_triggers.py中加入三个触发器:
(0.2, 0, 0.0, [
(assign,"$troop_equ_trtd",0), #将$troop_equ_trtd赋值为0,用作表示此时无人装备itm_trtd。
(party_get_num_companion_stacks, ":num_stacks","p_main_party"), #获得玩家部队的troop堆栈
(try_for_range, ":i_stack", 0, ":num_stacks"), #将所有堆栈循环一遍
(party_stack_get_troop_id, ":this_hero","p_main_party",":i_stack"),
(this_or_next|eq, ":this_hero", "trp_player"),
(is_between, ":this_hero", companions_begin, companions_end), #如果troop是玩家或者hero。“companions_begin, companions_end“包括了native中的四个npc的id.
(try_begin),
(troop_has_item_equipped,":this_hero","itm_trtd"), #如果其装备了itm_trtd,
(assign,"$troop_equ_trtd",1), #就将$troop_equ_trtd赋值为1
(try_end),
(try_end),
(eq,"$troop_equ_trtd",0), #这个条件使得有人装备itm_trtd时该触发器就不会触发。
],
[(assign,"$trtd_equ",0)]), #如果没有人装备itm_trtd,就将$trtd_equ赋值为0
(0.2, 0, 0.0, [(map_free,0),(eq,"$trtd_equ",0), #如果没有人装备itm_trtd
(party_get_num_companion_stacks, ":num_stacks","p_main_party"),
(try_for_range, ":i_stack", 0, ":num_stacks"),
(party_stack_get_troop_id, ":this_hero","p_main_party",":i_stack"),
(this_or_next|eq, ":this_hero", "trp_player"),
(is_between, ":this_hero", companions_begin, companions_end),
(try_begin),
(troop_has_item_equipped,":this_hero","itm_trtd"),#如果有人装备了itm_trtd,
(assign,"$trtd_troop", ":this_hero"), #将装备itm_trtd的troop id赋予$trtd_troop
(assign,"$troop_equ_trtd",1), #将$troop_equ_trtd赋值为1
(try_end),
(try_end),
(eq,"$troop_equ_trtd",1), #如果此时有人装备上了itm_trtd,就会触发下面执行块里的内容。
],
[
(assign,"$trtd_equ",1), #等于1时表示有人装备了itm_trtd
(assign,"$trtd_add",1), #等于1时表示itm_trtd的附加奖励已经执行
(troop_raise_attribute,"$trtd_troop",ca_strength,1), #对装备了itm_trtd的$trtd_troop进行奖励
(troop_raise_attribute,"$trtd_troop",ca_agility,3),
(troop_raise_proficiency_linear,"$trtd_troop",wpt_one_handed_weapon,30),
(str_store_troop_name,s59,"$trtd_troop"), #将装备itm_trtd的troop的名字储存在s59里,以便在之后的str_equ_trtd中显示
(display_message,"str_equ_trtd",0x5555bb),
(display_message,"str_effect_add_trtd",0x5555bb),
]),
(0.2, 0, 0.0, [
(party_get_num_companion_stacks, ":num_stacks","p_main_party"),
(try_for_range, ":i_stack", 0, ":num_stacks"),
(party_stack_get_troop_id, ":this_hero","p_main_party",":i_stack"),
(this_or_next|eq, ":this_hero", "trp_player"),
(is_between, ":this_hero", companions_begin, companions_end),
(try_begin),
(troop_has_item_equipped,":this_hero","itm_trtd"), #如果有人装备了itm_trtd,
(neq,"$trtd_troop", ":this_hero"), #而此时装备itm_trtd的troop发生了变化。这个很重要,因为:this_hero包括玩家和npc,当玩家和npc们交换装备时时间是停止的,所以即使卸下itm_trtd交给了npc,玩家受到的奖励也不会被扣除。npc之间也是如此。
(assign,"$trtd_equ",0), #则将$trtd_equ赋值为0(和没有人装备itm_trtd时一样)
(try_end),
(try_end),
(eq,"$trtd_add",1),(eq,"$trtd_equ",0), #同时如果奖励发生过,并且被奖励的troop此时没有装备itm_trtd
],
[
(troop_raise_attribute,"$trtd_troop",ca_strength,-1), #则扣除$trtd_troop获得的奖励
(troop_raise_attribute,"$trtd_troop",ca_agility,-3),
(troop_raise_proficiency_linear,"$trtd_troop",wpt_one_handed_weapon,-30),
(assign,"$trtd_add",0), #将trtd_add赋值为0,表示itm_trtd的奖励效果已不存在
(str_store_troop_name,s59,"$trtd_troop"), #将被扣除奖励的troop的名字储存在s59里,以便在之后的"str_not_equ_trtd"中显示
(display_message,"str_not_equ_trtd",0x5555bb),
(display_message,"str_effect_sub_trtd",0x5555bb)
]),
如此一来,就能使队伍中的npc在装备了稀有装备之后,也能获得附加奖励了。经过测试完全没有问题 。
笨嘴拙舌的比划了半天,希望我把意思讲清楚了^^。在此发出来,希望能够给予喜欢diy的骑友和各位mod作者一点帮助。不知道我如此写法是否过于繁琐,或者还有更为简洁的方法,请各位前辈高人不吝赐教,感激不尽!
[ 本帖最后由 oolonglgx 于 2008-2-4 01:15 编辑 ]
查看全部评论(1) 最新评论