骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

搜索
购买霸主CDKEY 购买战帆CDKEY
查看: 84|回复: 4

[功能与代码] OSP战团 火焰伤害烧伤灼伤开源代码 瓮海

[复制链接]

4

主题

35

回帖

32

积分

扈从

Rank: 2Rank: 2

UID
3319238
第纳尔
678
精华
0
互助
2
荣誉
1
贡献
10
魅力
230
注册时间
2022-1-28
鲜花(18) 鸡蛋(0)
发表于 4 天前 | 显示全部楼层 |阅读模式
本帖最后由 殇垣 于 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的地方。




419

主题

2274

回帖

843

积分

骑士

Rank: 4Rank: 4

UID
215455
第纳尔
5615
精华
0
互助
7
荣誉
0
贡献
0
魅力
7
注册时间
2010-3-19

战团正版勋章维京征服正版勋章汉匈决战正版勋章

鲜花(202) 鸡蛋(44)
发表于 3 天前 | 显示全部楼层
可以用火焰坐标为圆心,球形范围内都会灼烧。
  
3d坐标之间的计算公式是sqrtf((x1-x2)平方+(y1-y2)平方+(z1-z2)平方),sqrtf是求平方根。
lz不会这个不知道吧。
一字电剑科普传人

1

主题

1

回帖

1

积分

平民

Rank: 1

UID
3835499
第纳尔
0
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2025-12-27
鲜花(0) 鸡蛋(0)
发表于 3 天前 来自手机 | 显示全部楼层
骑砍官方社区注册被ban了咋办,我想去发东西来自: iPhone客户端

4

主题

35

回帖

32

积分

扈从

Rank: 2Rank: 2

UID
3319238
第纳尔
678
精华
0
互助
2
荣誉
1
贡献
10
魅力
230
注册时间
2022-1-28
鲜花(18) 鸡蛋(0)
 楼主| 发表于 前天 18:46 | 显示全部楼层
本帖最后由 殇垣 于 2026-7-20 18:47 编辑
xiaojuzixxx 发表于 2026-7-19 18:39
可以用火焰坐标为圆心,球形范围内都会灼烧。
  
3d坐标之间的计算公式是sqrtf((x1-x2)平方+(y1-y2)平 ...

这里用sqrtf应该怎么写? Lav_operations里没搜到sqrtf啊,话说一半的

419

主题

2274

回帖

843

积分

骑士

Rank: 4Rank: 4

UID
215455
第纳尔
5615
精华
0
互助
7
荣誉
0
贡献
0
魅力
7
注册时间
2010-3-19

战团正版勋章维京征服正版勋章汉匈决战正版勋章

鲜花(202) 鸡蛋(44)
发表于 前天 22:28 | 显示全部楼层
殇垣 发表于 2026-7-20 18:46
这里用sqrtf应该怎么写? Lav_operations里没搜到sqrtf啊,话说一半的

https://mbcommands.fandom.com/wiki/Operations
搜索store_sqrt
   然后呢,sqrt不用也可以,还可以少算一步。
一字电剑科普传人
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

Archiver|手机版|小黑屋|骑马与砍杀中文站

GMT+8, 2026-7-22 00:45 , Processed in 0.073965 second(s), 23 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表