- 好友
- 0
- 在线时间
- 0 小时
- 最后登录
- 2026-7-20
扈从
 
- UID
- 3319238
- 第纳尔
- 678
- 精华
- 0
- 互助
- 2
- 荣誉
- 1
- 贡献
- 10
- 魅力
- 230
- 注册时间
- 2022-1-28
 鲜花( 18)  鸡蛋( 0)
|
本帖最后由 殇垣 于 2026-7-19 14:12 编辑
自己琢磨的代码,(谢众群友指点)不知对否,望高人不吝赐教。
我还设想过,如果碰到火,即使出火后身上还会有烧着的掉血机制及身上火焰的粒子效果,
以及是否要泡水才能灭火的机制,但那太复杂也使得游戏太难了。
目前这个代码是离开火点,即身上火灭,且不持续不蔓延传染。不然兵会死太多了。
放在战场触发器 mt 里
module_mission_templates.py
##火焰伤害 #烧伤 指导人:king of killyouready 阳光肥宅 百度网盘AI
flame_damage =(1, 1, 0, #shaoshang 从1秒开始计时,等待1秒,0秒后重触
[(assign, ":num_fire", 0),
(scene_prop_get_num_instances, ":num_fire", "spr_village_fire_big"), # 获取道具数量 大火焰
(val_add, ":num_fire", 1), # 加法 +1
(gt, ":num_fire",0),], # 获取数量 大火焰 若有
[#解释: scene_prop_get_instance 用于获取特定编号单个实例,而 try_for_prop_instances 会遍历所有该类实例,两者功能重复,不能同时混用。
(try_for_prop_instances,":var_fire_instance","spr_village_fire_big"), ##方案2 外层循环:遍历所有spr_village_fire_big实例
(prop_instance_get_position, pos25, ":var_fire_instance"), #检索场景中 获取火焰位置
(position_get_z, ":fire_z_position", pos25),#高度
(get_player_agent_no, ":player_agent"),
(try_for_agents, ":victim_agents"),#内层二次循环:遍历所有存活agent(包括玩家) 读取大火附近的agent
(agent_is_alive, ":victim_agents"),#跳过非存活agent
(agent_is_active,":victim_agents"),
(agent_get_bone_position, pos26, ":victim_agents", 7, 1), #获取agent的骨骼胸部位置
(position_get_z, ":agent_z_position", pos26),#高度
(get_distance_between_positions, ":distance", pos25, pos26), ##判断人和火距离 计算距离(2D平面距离,忽略高度差) 米
(lt, ":distance", 300), # 附近距离 3米 半径?
(store_sub, ":height_diff", ":agent_z_position", ":fire_z_position"),#高度判断:火焰下方0米~上方6米范围内,跳过伤害
(is_between, ":height_diff", -20,601), # 高度差 >= -20(在火焰上下此范围内会伤害) <= 600厘米 = 6米
(try_begin),
(store_agent_hit_points, ":cur_hp", ":victim_agents", 1),#血量
#(store_sub, ":damage", ":cur_hp", 2),#让<伤害力>: = <血量数值> -减 <伤害数值>
(val_sub, ":cur_hp", 2), # 扣除稍许血量或固定点数 ##遂 施加伤害 减少1点血量(不播放受击动画,避免卡顿)
(play_sound_at_position,"snd_fire_loop",pos25),# CCCCCCC 播放声音 在POS地点 火
(try_begin),
(gt, ":cur_hp", 2), # 确保不会扣到负数以下 # 扣血逻辑 2,正常扣血
(agent_set_hit_points, ":victim_agents",":cur_hp", 2), #给演员 施加伤害 造成伤害 1点血
(agent_is_human, ":victim_agents"),
(agent_get_troop_id, ":troop_id", ":victim_agents"),# 播放受伤音效(可选)
(troop_get_type, ":gender_is_female", ":troop_id"), # 性别gender
(try_begin),
(eq, ":gender_is_female", tf_female), # 女性
(agent_play_sound, ":victim_agents", "snd_woman_hit"), # 女性叫
(else_try),
(eq, ":gender_is_female", tf_girl), # 女孩
(agent_play_sound, ":victim_agents", "snd_girl_hit"), # 女孩叫
(else_try),
(eq, ":gender_is_female", tf_boy), ##男孩
(agent_play_sound, ":victim_agents", "snd_boy_hit"), # 男孩叫
(else_try), # others
(neq, ":gender_is_female", tf_titan),
(neq, ":gender_is_female", tf_undead),
(agent_play_sound, ":victim_agents", "snd_man_hit"), # 男性叫
(try_end),
(copy_position, pos27, pos26),
(position_move_y, pos27, 20),#高度
(particle_system_burst, "psys_cooking_fire_1", pos27, 100), # 粒子效果 炊火 # 100 as power.力度
(particle_system_burst, "psys_torch_smoke", pos27, 30), # 烟雾效果
(try_begin),# 玩家提示
(eq, ":victim_agents", ":player_agent"),
(agent_is_alive, ":player_agent"), # 活着
(display_message, "@you be burned by flame!", 0xFFFF401F), # 你 被 火 焰 灼 伤 ! 红色
(try_end),#玩家提示结束
(else_try),#血量过低 血量为1,扣血后死亡
(le, ":cur_hp", 2),
(set_show_messages, 0), # MOTO prevent "agent killed self" messages 防止“代理自杀”消息
(try_begin), #击杀
(eq, ":victim_agents", ":player_agent"),
(agent_deliver_damage_to_agent, ":player_agent", ":player_agent", 1), #直接击杀 强制死亡 # 自己伤害自己
(else_try),
(agent_deliver_damage_to_agent, ":victim_agents", ":victim_agents"), #直接击杀 强制死亡 # 自己伤害自己
(try_end), #击杀
(set_show_messages, 1),
(try_end),#施加伤害结束
(try_end),#伤害范围判断结束
(try_end),#结束内层agent循环
(try_end),# 结束外层火焰道具循环
])
拒绝任何潘德相关mod及其改版使用
署名为:瓮海
可以在添加战斗场景中应用,
flame_damage,# 烧伤
一般添加在攻城场景,或其它场景后面。如
castle_attack_walls_belfry
castle_attack_walls_ladder
quick_battle_battle
quick_battle_siege
等等,用得着且有village_fire_big的地方。
|
|