本帖最后由 wei1786 于 2023-4-9 16:18 编辑
基本逻辑是切换武器时,把不能用的弹药类型存储起来,然后弹药量设为0,等使用这件武器时再把弹药信息拿出来。
记得好像有在中文站见过,找了半天没找着,就自己试着写了下。
其实现在还没写完,现在打开背包时弹药还不会恢复,虽然不影响补弹药但总归是不好看,发这个贴子也是想问问怎么以打开背包为触发条件。
代码部分:
slot:
slot_agent_weapon_1 = 30
slot_agent_weapon_2 = 31
slot_agent_weapon_3 = 32
slot_agent_weapon_4 = 33
slot_agent_weapon_num_1 = 34
slot_agent_weapon_num_2 = 35
slot_agent_weapon_num_3 = 36
slot_agent_weapon_num_4 = 37
slot_agent_last_weild_weapon = 38
slot_agent_ammo_changed_1 = 39
slot_agent_ammo_changed_2 = 40
slot_agent_ammo_changed_3 = 41
slot_agent_ammo_changed_4 = 42
两个战场触发器,我目前火器只有两种类型,所以直接判断,类型比较多的话可以用slot存储一下弹药类型。
第一个是在开始时记录一下弹药量和拿着的武器。
火枪什么的在开始时会在弹夹里有额外弹药,要是把系统搞得比较复杂的话这个应该也要初始化一下。
common_init_item_slot = (
ti_on_agent_spawn,0,ti_once,
[],
[
(store_trigger_param_1, ":agent_no"),
(agent_set_slot,":agent_no",slot_agent_defeat_enemy_num,0),#just add there
(agent_set_slot,":agent_no",slot_agent_last_weild_weapon,-1),
(try_for_range,":inv_no",0,4),
(agent_get_item_slot,":cur_item",":agent_no",":inv_no"),
(gt,":cur_item",0),
(item_get_type,":cur_item_type",":cur_item"),
(eq,":cur_item_type",itp_type_bullets),
(agent_get_item_cur_ammo,":ammo",":agent_no",":inv_no"),
(store_add,":slot_weapon",slot_agent_weapon_1,":inv_no"),
(store_add,":slot_weapon_ammo",slot_agent_weapon_num_1,":inv_no"),
(store_add,":slot_weapon_changed",slot_agent_ammo_changed_1,":inv_no"),
(agent_set_slot,":agent_no",":slot_weapon",":cur_item"),
(agent_set_slot,":agent_no",":slot_weapon_ammo",":ammo"),
(agent_set_slot,":agent_no",":slot_weapon_changed",0),#not change
(try_end),
]
)
更换武器时,更新弹药
我这里itm_heavy_muscket1,itm_heavy_muscket2和itm_cartridges1匹配
其他火器和itm_cartridges对应
common_init_item_in_battle = (#libwe
0,0,0,
[],
[
(try_for_agents,":agent_no"),
(agent_get_troop_id,":troop_no",":agent_no"),
(troop_is_hero,":troop_no"),
# (agent_get_item_cur_ammo,":ammo",":agent_no",1),
# (assign,reg1,":ammo"),
# (display_message,"@{reg1}"),
(agent_get_wielded_item,":item_no",":agent_no",0),
(agent_get_slot,":last_weild",":agent_no",slot_agent_last_weild_weapon),
(neq,":last_weild",":item_no"),#if change weapon, continue
(agent_set_slot,":agent_no",slot_agent_last_weild_weapon,":item_no"),
(gt, ":item_no", 0),
(item_get_type,":item_type",":item_no"),
(this_or_next|eq,":item_type",itp_type_pistol),
(eq,":item_type",itp_type_musket),
(try_begin),
(display_message,"@weapon"),
(this_or_next|eq,":item_no","itm_heavy_muscket1"),#heavey pistol
(eq,":item_no","itm_heavy_muscket2"),
(try_for_range,":inv_no",0,4),
(agent_get_item_slot,":cur_item",":agent_no",":inv_no"),
(store_add,":slot_weapon",slot_agent_weapon_1,":inv_no"),
(store_add,":slot_weapon_ammo",slot_agent_weapon_num_1,":inv_no"),
(store_add,":slot_weapon_changed",slot_agent_ammo_changed_1,":inv_no"),
(try_begin),
(gt,":cur_item",0),
(else_try),
(agent_get_slot,":cur_item",":agent_no",":slot_weapon"),
(try_end),
(gt,":cur_item",0),
(item_get_type,":cur_item_type",":cur_item"),
(eq,":cur_item_type",itp_type_bullets),
(try_begin),
(eq,":cur_item","itm_cartridges1"),
(agent_get_slot,":is_changed",":agent_no",":slot_weapon_changed"),
(eq,":is_changed",1),
# (agent_get_slot,":item_no",":agent_no",":slot_weapon"),
# (eq,":cur_item",":item_no"),
(agent_get_slot,":ammo",":agent_no",":slot_weapon_ammo"),
# (agent_set_ammo,":agent_no",":item_no",":ammo"),
(store_add,":weapon_slot",":inv_no",1),
(agent_equip_item,":agent_no",":cur_item",":weapon_slot"),
(agent_set_ammo,":agent_no",":cur_item",":ammo"),
(agent_set_slot,":agent_no",":slot_weapon_changed",0),
(agent_set_slot,":agent_no",":slot_weapon",-1),
(else_try),
(eq,":cur_item","itm_cartridges"),
(agent_get_item_cur_ammo,":ammo",":agent_no",":inv_no"),
(agent_set_slot,":agent_no",":slot_weapon",":cur_item"),
(agent_set_slot,":agent_no",":slot_weapon_ammo",":ammo"),
# (agent_set_ammo,":agent_no",":cur_item",0),
(store_add,":weapon_slot",":inv_no",1),
(agent_unequip_item,":agent_no",":cur_item",":weapon_slot"),
(agent_set_slot,":agent_no",":slot_weapon_changed",1),
(try_end),
(try_end),
(else_try),#other pistol
(try_for_range,":inv_no",0,4),
(agent_get_item_slot,":cur_item",":agent_no",":inv_no"),
(store_add,":slot_weapon",slot_agent_weapon_1,":inv_no"),
(store_add,":slot_weapon_ammo",slot_agent_weapon_num_1,":inv_no"),
(store_add,":slot_weapon_changed",slot_agent_ammo_changed_1,":inv_no"),
(try_begin),
(gt,":cur_item",0),
(else_try),
(agent_get_slot,":cur_item",":agent_no",":slot_weapon"),
(try_end),
(gt,":cur_item",0),
(item_get_type,":cur_item_type",":cur_item"),
(eq,":cur_item_type",itp_type_bullets),
(try_begin),
(eq,":cur_item","itm_cartridges1"),
(agent_get_item_cur_ammo,":ammo",":agent_no",":inv_no"),
(agent_set_slot,":agent_no",":slot_weapon",":cur_item"),
(agent_set_slot,":agent_no",":slot_weapon_ammo",":ammo"),
# (agent_set_ammo,":agent_no",":cur_item",0),
(store_add,":weapon_slot",":inv_no",1),
(agent_unequip_item,":agent_no",":cur_item",":weapon_slot"),
(agent_set_slot,":agent_no",":slot_weapon_changed",1),
(else_try),
(eq,":cur_item","itm_cartridges"),
(agent_get_slot,":is_changed",":agent_no",":slot_weapon_changed"),
(eq,":is_changed",1),
# (agent_get_slot,":item_no",":agent_no",":slot_weapon"),
# (eq,":item_no",":cur_item"),
(agent_get_slot,":ammo",":agent_no",":slot_weapon_ammo"),
(store_add,":weapon_slot",":inv_no",1),
(agent_equip_item,":agent_no",":cur_item",":weapon_slot"),
(agent_set_ammo,":agent_no",":cur_item",":ammo"),
# (agent_set_ammo,":agent_no",":item_no",":ammo"),
(agent_set_slot,":agent_no",":slot_weapon_changed",0),
(agent_set_slot,":agent_no",":slot_weapon",-1),
(try_end),
(try_end),
(try_end),
(try_end),
顺便问一下,把武器和弹药伤害设置成0的话好像还是会有一点点伤害,还是会加熟练度,有什么办法让伤害彻底为0吗?
武器的伤害和速度等如果设置为0的话是不会显示信息的,我在想能不能把一些武器的各种属性完全在战场触发器里面定义,然后通过给物品加额外信息和触发器仿造出一些新的伤害类型。
解决不了问题就解决出问题的东西,直接把箱子给删了然后允许按i呼出物品栏
common_open_inv_refill_ammmo = (
ti_inventory_key_pressed, 0, 0,
[(set_trigger_result,1)],#must open inv
[
(get_player_agent_no, ":agent_no"),
(try_for_range,":inv_no",0,4),
(agent_get_item_slot,":cur_item",":agent_no",":inv_no"),
(store_add,":slot_weapon",slot_agent_weapon_1,":inv_no"),
(store_add,":slot_weapon_ammo",slot_agent_weapon_num_1,":inv_no"),
(store_add,":slot_weapon_changed",slot_agent_ammo_changed_1,":inv_no"),
(le,":cur_item",0),
(agent_get_slot,":cur_item",":agent_no",":slot_weapon"),
(gt,":cur_item",0),
(item_get_type,":cur_item_type",":cur_item"),
(eq,":cur_item_type",itp_type_bullets),
(agent_get_ammo_for_slot,":cur_ammo",":agent_no",":inv_no"),
(eq,":cur_ammo",0),
(agent_get_slot,":is_changed",":agent_no",":slot_weapon_changed"),
(eq,":is_changed",1),
# (agent_get_slot,":item_no",":agent_no",":slot_weapon"),
# (eq,":item_no",":cur_item"),
(agent_get_slot,":ammo",":agent_no",":slot_weapon_ammo"),
# (agent_set_ammo,":agent_no",":item_no",":ammo"),
(store_add,":weapon_slot",":inv_no",1),
(agent_equip_item,":agent_no",":cur_item",":weapon_slot"),
(agent_set_ammo,":agent_no",":cur_item",":ammo"),
(agent_set_slot,":agent_no",":slot_weapon",-1),
(agent_set_slot,":agent_no",":slot_weapon_changed",0),
(agent_set_slot,":agent_no",slot_agent_last_weild_weapon,-1),
(try_end),
])
删箱子直接把随机场景的scene_prop文件删了,然后加上(来自rubik的战前选择场景大小)
(0, 0, ti_once, [], [(assign,"$g_battle_won",0),
## CC
(try_begin),
(try_begin),
# banner
(troop_get_slot, ":troop_banner_object", "trp_player", slot_troop_banner_scene_prop),
(try_begin),
(gt, ":troop_banner_object", 0),
# banner pole
(position_move_y, pos1, -200),
(position_set_z_to_ground_level, pos1),
(set_spawn_position, pos1),
(spawn_scene_prop, "spr_banner_pole", 0),
# banner
(position_move_z, pos1, 320),
(set_spawn_position, pos1),
(spawn_scene_prop, ":troop_banner_object", 0),
(try_end),
(try_end),
## CC
(assign,"$defender_reinforcement_stage",0),
(assign,"$attacker_reinforcement_stage",0),
(call_script, "script_place_player_banner_near_inventory"),
(call_script, "script_combat_music_set_situation_with_culture"),
(assign, "$g_defender_reinforcement_limit", 2),
]),
有个bug,如果武器类型中有可以单手使用,且只有这一件武器,关闭背包后会自动使用这个武器。
而不知道出于什么原因我的代码对这个时候掏出的武器无效。。。
2023.4.9更新了一下,之前是把弹药设为0,现在是直接移除,不会让普通手枪弹夹里的弹药变成什么乱七八糟的东西了,不过还是有瑕疵就是。
我是懒得记录弹药的前缀了,现在应该是会自动清理前缀,想改的话参考记录武器加slot吧。
|