骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

搜索
购买CDKEY 小黑盒加速器
查看: 3088|回复: 18

[功能与代码] 简易的boss血条

[复制链接]

32

主题

72

回帖

181

积分

见习骑士

Rank: 3

UID
3199602
第纳尔
1041
精华
0
互助
30
荣誉
0
贡献
1
魅力
203
注册时间
2020-9-4
鲜花(54) 鸡蛋(0)
发表于 2022-8-25 21:38:32 | 显示全部楼层 |阅读模式
本帖最后由 奥杜因阿卡托什 于 2024-3-3 21:55 编辑

https://bbs.mountblade.com.cn/thread-2092590-1-1.html新版血条看这个,优化了刷新需要的算力,并就高频刷新导致血条消失的问题作了修补。


由于老滚老环寿司神原这样,能够显示敌方血条的第三人称动作游戏我玩了很多,所以一直想给boss安个血条,今天终于得偿所愿做了个简单的血条。代码分享在下面,用的方法比较简单粗暴,贻笑大方了。
首先是最表层的mission_tamplate,将以下代码和那一串common_battle_XXXX = 并列:
common_boss_battle_lifebar = (
  0, 0, ti_once, [
     (call_script, "script_get_boss"),
     (assign, ":cur_boss_1", reg1),
     (assign, ":distance", reg4),

     (assign, ":show_or_not", 0),

     (try_for_agents, ":agent_no"),
        (gt, ":cur_boss_1", 0),
        (agent_get_troop_id, ":troop_no", ":agent_no"),
        (eq, ":troop_no", ":cur_boss_1"),     
        (agent_is_alive, ":agent_no"),
        (agent_get_position, pos1, ":agent_no"),

        (get_player_agent_no, ":player_no"),
        (agent_get_position, pos2, ":player_no"),
        (get_distance_between_positions_in_meters, ":cur_distance", pos1, pos2),

        (le, ":cur_distance", ":distance"),                              #caculate the distance
        (display_message, "@a"),
        (assign, ":show_or_not", 1),
     (try_end),

     (neq, ":show_or_not", 0),
],
  [
     (start_presentation, "prsnt_boss_lifebar"),
    ])
这个代码的作用时当玩家第一次进入boss周围(距离接下来会设定)时,开始血条的presentation。
这个common也要和其他common_battle一样,加在需要用到它的mt下面。

然后是pesentation,代码如下:
  ("boss_lifebar", prsntf_read_only,0,[
      (ti_on_presentation_load,
       [(set_fixed_point_multiplier, 1000),

        (call_script, "script_get_boss"),
        (assign, ":cur_boss_1", reg1),

        (assign, "$boss_1_display", 0),

        (try_begin),
           (gt, ":cur_boss_1", 0),
           (assign, ":boss_hp", 0),
           (try_for_agents, ":agent_no"),
               (agent_get_troop_id, ":troop_no", ":agent_no"),
               (eq, ":troop_no", ":cur_boss_1"),
               (store_agent_hit_points, ":boss_hp", ":agent_no"),
            (try_end),
           (neq, ":boss_hp", 0),

           (create_mesh_overlay, "$g_presentation_obj_1", "mesh_progressbar_handle"),
           (position_set_x, pos1, 180),
           (position_set_y, pos1, 700),
           (overlay_set_position, "$g_presentation_obj_1", pos1),

           (create_mesh_overlay, reg1, "mesh_progressbar"),
           (position_set_x, pos1, 180),
           (position_set_y, pos1, 700),
           (overlay_set_position, reg1, pos1),

           (str_store_troop_name, s1, ":cur_boss_1"),
           (create_text_overlay, reg1, s1),
           (position_set_x, pos1, 180),
           (position_set_y, pos1, 710),
           (overlay_set_position, reg1, pos1),
           (position_set_x, pos1, 800),
           (position_set_y, pos1, 800),
           (overlay_set_size, reg1, pos1),
           (overlay_set_color, reg1, 0xffffff),

           (assign, "$boss_1_display", 1),
        (try_end),

        (presentation_set_duration, 999999),
        ]),

      (ti_on_presentation_run,
       [
        (call_script, "script_get_boss"),
        (assign, ":cur_boss_1", reg1),

        (try_begin),
           (gt, ":cur_boss_1", 0),
           (try_for_agents, ":agent_no"),
               (agent_get_troop_id, ":troop_no", ":agent_no"),
               (eq, ":troop_no",":cur_boss_1"),
               (try_begin),
                  (agent_is_alive, ":agent_no"),
                  (store_agent_hit_points, ":boss_hp", ":agent_no"),
                  (val_mul, ":boss_hp", 10),
                  (position_set_x, pos1, ":boss_hp"),
                  (position_set_y, pos1, 1000),
                  (overlay_set_size, "$g_presentation_obj_1", pos1),
               (else_try),
                  (neg|agent_is_alive, ":agent_no"),
                  (eq, "$boss_1_display", 1),
                  (overlay_set_display, "$g_presentation_obj_1", 0),
               (try_end),
           (try_end),
        (try_end),
        
        (try_begin),
          (is_presentation_active, "prsnt_boss_lifebar"),
          (game_key_clicked, gk_view_orders),
          (presentation_set_duration, 0),
          (start_presentation, "prsnt_battle"),
        (try_end),
       ]),
      ]),
加在最后一个]之前就行。这是一个只读格式的prsnt,因此不会影响正常攻击等的操作。

用来定义boss的script,代码如下:
  ("get_boss", [      #use for get boss id
         (assign, ":boss_1", 0),
         (assign, ":distance", 0),   #to caculate in how far will the lifebar display, in the other hand can decide if the lifebar should display

         (store_current_scene, ":cur_scene"),
         (try_begin),
            (check_quest_active, "qst_save_town_from_bandits"),
            (party_get_slot, ":town_scene", "$g_starting_town", slot_town_center),   #trp_devilman_berserker_mission
            (eq, ":cur_scene", ":town_scene"),
            (assign, ":boss_1", "trp_devilman_berserker_mission"),
            (assign, ":distance", 20),#20 meter
         (try_end),

         (assign, reg1, ":boss_1"),
         (assign, reg4, ":distance"),
    ]),
只要在中间那个try里面设定好boss是哪个兵种就行了,这个兵种出现、满足条件时血条就会显示。“:distance”便是之前说的距离,一样是在这里设置。

最后还有一个小尾巴,在presentation里,“battle”这个prsnt里,最后一个(try_end),前加上 (start_presentation, "prsnt_boss_lifebar"),作用是关闭战场面板时同时打开血条,战场面板和血条不能兼容,但这样至少能无缝切换。这部分来自Rubik前辈的兵种对比条,特此感谢。
以上便是boss血条的代码,像这样只能允许单boss,但是简单加工(ctrlc、v)之后就能允许多boss,就像附图中那个双人组一样。我自己用的是最高容纳三人的(腐败结晶人并感)
04250522B439617C89E2D48EB702B580.JPG
A751DD897B7CC69ECE359B55752C9673.JPG
292D24D309E6AE52F89A1B92CF5B0B27.JPG

评分

参与人数 2第纳尔 +20 互助 +2 魅力 +10 收起 理由
Aomine Daiki + 2 文章不错,继续努力!
幼稚园殺手 + 20 + 10 原创内容,值得鼓励!

查看全部评分

鲜花鸡蛋

半世尘埃  在2022-8-26 15:46  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
半世尘埃  在2022-8-26 15:46  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
幼稚园殺手  在2022-8-26 12:37  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下

39

主题

663

回帖

211

积分

见习骑士

Rank: 3

UID
1717081
第纳尔
4110
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2013-12-13
鲜花(26) 鸡蛋(0)
发表于 2022-8-25 21:43:43 | 显示全部楼层
剧情RPG福音

29

主题

187

回帖

65

积分

扈从

Rank: 2Rank: 2

UID
3228783
第纳尔
868
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2021-3-28
鲜花(7) 鸡蛋(0)
发表于 2022-8-26 00:23:16 来自手机 | 显示全部楼层
你这什么MOD来自: Android客户端

29

主题

690

回帖

551

积分

骑士

Rank: 4Rank: 4

UID
3322408
第纳尔
1738
精华
0
互助
67
荣誉
0
贡献
0
魅力
4
注册时间
2022-2-3
鲜花(55) 鸡蛋(0)
发表于 2022-8-26 00:25:44 来自手机 | 显示全部楼层

还在慢慢做。来自: Android客户端

29

主题

187

回帖

65

积分

扈从

Rank: 2Rank: 2

UID
3228783
第纳尔
868
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2021-3-28
鲜花(7) 鸡蛋(0)
发表于 2022-8-26 08:22:05 来自手机 | 显示全部楼层

期待,看样子不错来自: Android客户端

29

主题

690

回帖

551

积分

骑士

Rank: 4Rank: 4

UID
3322408
第纳尔
1738
精华
0
互助
67
荣誉
0
贡献
0
魅力
4
注册时间
2022-2-3
鲜花(55) 鸡蛋(0)
发表于 2022-8-26 11:03:03 来自手机 | 显示全部楼层
对了,mission_template中的display_message记得删了,这个是debug时搭的脚手架,忘记拆了来自: Android客户端

12

主题

1495

回帖

602

积分

雅尔[传媒小组]

吟游诗人

Rank: 4Rank: 4

UID
3200940
第纳尔
3971
精华
0
互助
18
荣誉
6
贡献
0
魅力
310
注册时间
2020-9-17

骑砍中文站APP会员勋章原版正版勋章战团正版勋章火与剑正版勋章拿破仑正版勋章维京征服正版勋章霸主正版勋章剧本设计大奖赛骑士美德之英勇勋章[杰出会员活跃勋章]

鲜花(47) 鸡蛋(0)
发表于 2022-8-26 11:46:10 来自手机 | 显示全部楼层
厉害了,,,,来自: Android客户端

55

主题

2711

回帖

1755

积分

子爵[版主]

吟游诗人

Rank: 7Rank: 7Rank: 7

UID
3054380
第纳尔
23989
精华
2
互助
57
荣誉
44
贡献
916
魅力
1418
注册时间
2019-1-18

骑砍中文站APP会员勋章原版正版勋章战团正版勋章火与剑正版勋章拿破仑正版勋章维京征服正版勋章霸主正版勋章剧本设计大奖赛骑友真人秀Ⅷ勋章骑友真人秀Ⅶ勋章骑友真人秀Ⅸ勋章

QQ
鲜花(506) 鸡蛋(2)
发表于 2022-8-26 12:38:17 | 显示全部楼层
很赞,剧情向的MOD很需要这种东西
珍惜 奉献 不负韶华

2

主题

405

回帖

127

积分

见习骑士

Rank: 3

UID
147735
第纳尔
2154
精华
0
互助
1
荣誉
0
贡献
0
魅力
1
注册时间
2009-8-5
鲜花(11) 鸡蛋(0)
发表于 2022-8-31 17:59:23 来自手机 | 显示全部楼层
厉害来自: iPhone客户端

13

主题

82

回帖

29

积分

扈从

Rank: 2Rank: 2

UID
3118799
第纳尔
340
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2019-11-21
鲜花(2) 鸡蛋(0)
发表于 2022-11-13 12:14:33 | 显示全部楼层
大佬厉害,不过有个问题,你的代码里面的标点符号都是中文的,好像都得改成英文的,不然build_module检测会出问题

29

主题

690

回帖

551

积分

骑士

Rank: 4Rank: 4

UID
3322408
第纳尔
1738
精华
0
互助
67
荣誉
0
贡献
0
魅力
4
注册时间
2022-2-3
鲜花(55) 鸡蛋(0)
发表于 2022-11-13 12:21:56 来自手机 | 显示全部楼层
樊。。。 发表于 2022-11-13 12:14
大佬厉害,不过有个问题,你的代码里面的标点符号都是中文的,好像都得改成英文的,不然build_module检测会 ...

那估计是中文站上传复制之后自己把格式变了来自: Android客户端

13

主题

82

回帖

29

积分

扈从

Rank: 2Rank: 2

UID
3118799
第纳尔
340
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2019-11-21
鲜花(2) 鸡蛋(0)
发表于 2022-11-13 12:46:19 | 显示全部楼层
112233lyh 发表于 2022-11-13 12:21
那估计是中文站上传复制之后自己把格式变了

那应该是,这都是小问题,我一个一个改了,
不过大佬写的有点深层了感觉/
比如这段:这个commontoo和其他common_battle一样,加在需要用到它的mt下面。
我完全看不懂
还有这段:然后是pesentation
没找到是哪个py文件
最后这个:(分配, ”:cur_boss_1“, reg1)
中文字分配该怎么搞,删了还是?

16

主题

586

回帖

326

积分

见习骑士

Rank: 3

UID
3102512
第纳尔
2380
精华
0
互助
29
荣誉
0
贡献
0
魅力
63
注册时间
2019-9-6

骑砍中文站APP会员勋章战团正版勋章霸主正版勋章

鲜花(51) 鸡蛋(0)
发表于 2022-11-13 13:42:30 来自手机 | 显示全部楼层
樊。。。 发表于 2022-11-13 12:46
那应该是,这都是小问题,我一个一个改了,
不过大佬写的有点深层了感觉/
比如这段:这个commontoo和其 ...

表层mt你去mt文件开头看就是了,那些其实是提前写好的,引用的时候引用函数名就是了,提高复用性。
prsnt是界面文件。来自: Android客户端

29

主题

690

回帖

551

积分

骑士

Rank: 4Rank: 4

UID
3322408
第纳尔
1738
精华
0
互助
67
荣誉
0
贡献
0
魅力
4
注册时间
2022-2-3
鲜花(55) 鸡蛋(0)
发表于 2022-11-13 14:45:33 来自手机 | 显示全部楼层
樊。。。 发表于 2022-11-13 12:46
那应该是,这都是小问题,我一个一个改了,
不过大佬写的有点深层了感觉/
比如这段:这个commontoo和其 ...

哪里有(分配,“:cur_boss”,……)?之前你说标点符号也是,你是不是用了什么页面翻译软件或者浏览器自动给你翻译了啊?来自: Android客户端

13

主题

82

回帖

29

积分

扈从

Rank: 2Rank: 2

UID
3118799
第纳尔
340
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2019-11-21
鲜花(2) 鸡蛋(0)
发表于 2022-11-13 21:18:54 | 显示全部楼层
112233lyh 发表于 2022-11-13 14:45
哪里有(分配,“:cur_boss”,……)?之前你说标点符号也是,你是不是用了什么页面翻译软件或者浏览器自 ...

大师,我悟了
我说呢

13

主题

82

回帖

29

积分

扈从

Rank: 2Rank: 2

UID
3118799
第纳尔
340
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2019-11-21
鲜花(2) 鸡蛋(0)
发表于 2022-11-13 21:22:01 | 显示全部楼层
112233lyh 发表于 2022-11-13 14:45
哪里有(分配,“:cur_boss”,……)?之前你说标点符号也是,你是不是用了什么页面翻译软件或者浏览器自 ...

大师,第二个代码加在哪,没有pesentation这个py文件吧

29

主题

690

回帖

551

积分

骑士

Rank: 4Rank: 4

UID
3322408
第纳尔
1738
精华
0
互助
67
荣誉
0
贡献
0
魅力
4
注册时间
2022-2-3
鲜花(55) 鸡蛋(0)
发表于 2022-11-13 22:38:52 来自手机 | 显示全部楼层
樊。。。 发表于 2022-11-13 21:22
大师,第二个代码加在哪,没有pesentation这个py文件吧

少打一个r,手打是这样的。来自: Android客户端

13

主题

82

回帖

29

积分

扈从

Rank: 2Rank: 2

UID
3118799
第纳尔
340
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2019-11-21
鲜花(2) 鸡蛋(0)
发表于 2022-11-13 23:18:11 | 显示全部楼层
本帖最后由 樊。。。 于 2022-11-13 23:19 编辑
112233lyh 发表于 2022-11-13 22:38
少打一个r,手打是这样的。

好的,非常感谢大佬
最后我再问个呆问题
我检测完后和我说找不到这个:mesh_progressbar_handle
这一列的(create_mesh_overlay, "$g_presentation_obj_1", "mesh_progressbar_handle"),
是说我们没有贴图吗
这个是第二个代码里的

29

主题

690

回帖

551

积分

骑士

Rank: 4Rank: 4

UID
3322408
第纳尔
1738
精华
0
互助
67
荣誉
0
贡献
0
魅力
4
注册时间
2022-2-3
鲜花(55) 鸡蛋(0)
发表于 2022-11-19 09:35:21 来自手机 | 显示全部楼层
樊。。。 发表于 2022-11-13 23:18
好的,非常感谢大佬
最后我再问个呆问题
我检测完后和我说找不到这个:mesh_progressbar_hand ...

有还是没有自己去mesh一看便知,没有的话自己加一个。来自: Android客户端
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

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

GMT+8, 2024-5-2 00:27 , Processed in 0.156762 second(s), 36 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

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