骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

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

[功能与代码] [狂人的知识]拓展到六把的装备槽和仿老环背包界面(OSP)

[复制链接]

32

主题

72

回帖

181

积分

见习骑士

Rank: 3

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

    自打从老彼得处知道了怎么修改大地图界面底下一排按键的跳转,我就摩拳擦掌地准备做新界面了。断断续续做了几个星期,基本上把物品栏磨了出来。
    看一下效果,鼠标滑过之后会把指向的槽高亮(原理其实是有一张不亮的图一张亮的图,把不亮的放在亮的上层,鼠标放在它上面就把两张图的上下关系反过来),鼠标移开高亮就会消失。点击框之后能把框点亮,表示选中。接下来能点亮的框只能是能与该位置互换物品的框(比如如果点亮了右手武器,那第二个点亮的可以是右手武器其他两个框和右边的备选物品,其他种类的装备框无法点亮),点亮两个以后按“交换所选物品”就能交换位置,将物品装卸和移动。除此之外还有快捷键,在没有任何物品被点亮的情况下按住左ctrl,点击物品框能把已经装备的武器直接卸下,也能直接装备未装备的物品。不管已经点亮的框有多少,点击任何里面有物品的框都会把中间的显示切换成这个物品。
    可以看到我这个物品栏左右手一共有六个装备槽,其中左手能装备盾和弓,右手装备剩余武器,箭矢弹药有两个专门的槽位,不会占用两手位置。底下的饰品是加属性特效的,小道具是按R能使用的,快速补给预计会用来装一些应急食品、绷带、纳米机器人修补液之类的,按H能给人、马或者盾加血。战场上左右手切换六种武器的代码已经实现了,下面会一并放出。

    首先说说物品栏的代码,首先需要定义一系列的constant,在AGENT名下,分别是
   
(点击展开 / 收起)

    然后是从大地图上点物品栏的跳转,原理详见https://bbs.mountblade.com.cn/thread-2094106-1-1.html。我这里就直接放出代码了,加在simple_trigger里
   
(点击展开 / 收起)

    然后是两个新troop,这两个的作用是扩充玩家背包,纯纯工具人。
   
(点击展开 / 收起)

    接下来就是重头戏的两个压缩包,一个是presentation一个是script,不过这两个可以丢到MS里即打即用的。丢进MS里以后,只需要在script和presentation里申明一下即可
   
(点击展开 / 收起)

    然后还有调用到的mesh和string,mesh里面的模型名就自己按自己的模型填吧。
   
(点击展开 / 收起)

   
(点击展开 / 收起)

    如果我没漏掉什么东西的话,以上就是物品栏整个的内容了。接下来说说拔出六把武器的代码,主要是几个触发器。
   
(点击展开 / 收起)

    自己加到各个mission里即可。至于效果,和正常的滚轮切换武器差不多,往上转切换右手武器,往下转切换左手武器。
    由于物品栏内部的逻辑判断和迷宫一样复杂,条件与特例太多了,我也不能保证我这个能完全接管原有的物品栏。目前我这里还原了切换武器保留上弹数、食物消耗、按X键切换模式的投掷武器的展示,如果汽油们还能想到什么需要特殊处理的物品,或者使用时发现了什么问题,请尽量告知我,我这边也好改进。另外目前切换左手武器盾值会刷新,这个我这里是已经解决了,但是解决方法比较鬼畜,以后可能还要单开一贴讲。另外如果在战场上丢弃、拾捡武器,会发现转一转滚轮之前武器又出来了。武器丢弃拾起这块因为还没有做,不过反正就是ti_on_item_dropped和ti_on_item_picked_up两个trigger,有兴趣的可以自己弄弄看。
    最大问题是物品前缀。我因为是打算把物品前缀系统用自己的方法整个重做了,所以原有的前缀就每太去管它。导致更换武器的话会把有前缀的武器刷成白板。代码里所有出现modifier的地方都是我给之后会做的新前缀系统留的接口。

更新:
    最近发现一个bug,不知道还有没有别人发现。那就是在如果玩家有战团那种纹章可换的盾牌衣服,物品栏会出现严重错位。这个其实不是逻辑错误,今天研究了一下后发现,把物品的贴图生成出来也会触发获取纹章的init触发器,而这个触发器中用到了一个tableau,这个tableau的第一行就是个设置:        (set_fixed_point_multiplier, 100),也就是说,它把分辨率改了。
    要解决这个问题也不难,只要在所有可能调用到它的地方后面再把分辨率设置回1000就行了。在所有文件中搜索“with_item_id”(有三处),紧跟着它写上        (set_fixed_point_multiplier, 1000),记得要紧跟着,因为这个后面往往就是设置坐标了,要是等坐标设置完再调整分辨率那为时已晚。
%GM6VGNZ~E4P_1`XBTFZ7}8.png
2I5Y2@OR%(VJM9ZZP(1NP$W.jpg

module_scripts_inventory.zip

7.17 KB, 下载次数: 106

解压了直接丢MS里

module_presentations_inventory.zip

2.96 KB, 下载次数: 80

解压了直接丢MS里

sorcery.zip

1.27 KB, 下载次数: 83

里面有些别的mesh,不用在意,除了需要添加的那些,直接删掉就好。

评分

参与人数 1第纳尔 +15 互助 +1 魅力 +5 收起 理由
幼稚园殺手 + 15 + 1 + 5 您的帖子很有价值!

查看全部评分

鲜花鸡蛋

幼稚园殺手  在2023-5-12 13:26  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
滴酒不沾李太白  在2022-11-25 23:09  送朵鲜花  并说:nb,送朵鲜花鼓励一下
半世尘埃  在2022-11-25 14:52  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
半世尘埃  在2022-11-25 14:51  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
半世尘埃  在2022-11-25 14:51  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
半世尘埃  在2022-11-25 14:50  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
半世尘埃  在2022-11-25 14:50  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
半世尘埃  在2022-11-25 14:49  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下

15

主题

139

回帖

151

积分

见习骑士

Rank: 3

UID
3048044
第纳尔
2026
精华
0
互助
17
荣誉
2
贡献
20
魅力
284
注册时间
2018-12-15
鲜花(30) 鸡蛋(0)
发表于 2022-11-25 12:11:53 | 显示全部楼层
大佬好厉害,膜拜大佬

29

主题

690

回帖

551

积分

骑士

Rank: 4Rank: 4

UID
3322408
第纳尔
1738
精华
0
互助
67
荣誉
0
贡献
0
魅力
4
注册时间
2022-2-3
鲜花(55) 鸡蛋(0)
发表于 2022-11-25 12:22:35 来自手机 | 显示全部楼层
黑暗路西法 发表于 2022-11-25 12:11
大佬好厉害,膜拜大佬

懦弱的东西,你太讨厌了。我会细细品尝你的死,宇宙人。来自: Android客户端

43

主题

1159

回帖

441

积分

骑士

Rank: 4Rank: 4

UID
3065189
第纳尔
685
精华
0
互助
16
荣誉
0
贡献
2
魅力
11
注册时间
2019-3-28

骑士美德之英勇勋章[杰出会员活跃勋章]

QQ
鲜花(108) 鸡蛋(0)
发表于 2022-11-25 14:49:44 | 显示全部楼层
厉害了!之前在研究扩展装备栏一直没进展,没想到武器栏已经扩展出来了,膜拜大佬
忠 誠 勇 毅 ,心 系 社 會

2

主题

38

回帖

12

积分

随仆

Rank: 1

UID
3360120
第纳尔
142
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2022-5-17
鲜花(6) 鸡蛋(0)
发表于 2022-11-25 22:57:48 | 显示全部楼层
NB啊傲娇嘤

19

主题

904

回帖

377

积分

子爵[版主]

Rank: 7Rank: 7Rank: 7

UID
3270512
第纳尔
11522
精华
0
互助
20
荣誉
0
贡献
380
魅力
4
注册时间
2021-9-10

骑士美德之谦恭勋章[杰出会员财富勋章]

鲜花(27) 鸡蛋(0)
发表于 2022-11-26 21:35:07 来自手机 | 显示全部楼层
真是太厉害了

0

主题

53

回帖

21

积分

随仆

Rank: 1

UID
3110714
第纳尔
454
精华
0
互助
1
荣誉
0
贡献
0
魅力
0
注册时间
2019-10-8
鲜花(6) 鸡蛋(0)
发表于 2022-11-26 22:42:28 | 显示全部楼层
不错的点子,不过还是想说prsn和porp的应用堪称战团两大天坑,代码一长串,真是不想动

29

主题

690

回帖

551

积分

骑士

Rank: 4Rank: 4

UID
3322408
第纳尔
1738
精华
0
互助
67
荣誉
0
贡献
0
魅力
4
注册时间
2022-2-3
鲜花(55) 鸡蛋(0)
发表于 2022-11-26 23:34:56 来自手机 | 显示全部楼层
传说的骑士 发表于 2022-11-26 22:42
不错的点子,不过还是想说prsn和porp的应用堪称战团两大天坑,代码一长串,真是不想动

所以我已经帮汽油们动好了。连复制进prsnt的过程都免掉了,即打即用即可。来自: Android客户端

32

主题

175

回帖

62

积分

扈从

Rank: 2Rank: 2

UID
3256923
第纳尔
746
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2021-7-30
鲜花(5) 鸡蛋(0)
发表于 2022-11-27 02:26:45 来自手机 | 显示全部楼层
这个可以直接用于mod吗        还是说还需要其他过程来自: Android客户端

32

主题

72

回帖

181

积分

见习骑士

Rank: 3

UID
3199602
第纳尔
1041
精华
0
互助
30
荣誉
0
贡献
1
魅力
203
注册时间
2020-9-4
鲜花(54) 鸡蛋(0)
 楼主| 发表于 2022-11-27 09:55:25 | 显示全部楼层
有个地方修改一下,script_inventory里有个"exchange_two_item"的触发器,整个改成
#small tool
#Exchange two item mesh and inventory slot when count no is insure.
  ("exchange_two_item",
  [
    (store_script_param, ":exchange_1", 1),
    (store_script_param, ":exchange_troop_1", 2),
    (store_script_param, ":exchange_2", 3),
    (store_script_param, ":exchange_troop_2", 4),

    (troop_get_slot, ":item_overlay_1", "trp_temp_array_b", ":exchange_1"),
    (troop_get_slot, ":item_overlay_2", "trp_temp_array_b", ":exchange_2"),
    (overlay_get_position, pos1, ":item_overlay_1"),
    (overlay_get_position, pos2, ":item_overlay_2"),

    (troop_set_slot, "trp_temp_array_b", ":exchange_1", ":item_overlay_2"),
    (troop_set_slot, "trp_temp_array_b", ":exchange_2", ":item_overlay_1"),

    (try_begin),
       (ge, ":exchange_1", 24),
       (ge, ":exchange_2", 24),
       (call_script, "script_new_inventory_reorder", "$item_reorder_indication"),
    (else_try),
       (lt, ":exchange_1", 24),
       (lt, ":exchange_2", 24),
       (overlay_set_position, ":item_overlay_1", pos2),
       (overlay_set_position, ":item_overlay_2", pos1),
    (else_try),
       (ge, ":exchange_1", 24),
       (overlay_set_container_overlay, ":item_overlay_1", -1),
       (overlay_set_position, ":item_overlay_1", pos2),
       (overlay_set_container_overlay, ":item_overlay_2", "$g_presentation_container_1"),
       (call_script, "script_new_inventory_reorder", ":exchange_2"),
    (else_try),
       (ge, ":exchange_2", 24),
       (overlay_set_container_overlay, ":item_overlay_2", -1),
       (overlay_set_position, ":item_overlay_2", pos1),
       (overlay_set_container_overlay, ":item_overlay_1", "$g_presentation_container_1"),
       (call_script, "script_new_inventory_reorder", ":exchange_1"),
    (try_end),

    (call_script, "script_troop_get_new_inventory_slot_modifier", ":exchange_troop_1", ":exchange_1"),
    (assign, ":modifier_1", reg0),
    (call_script, "script_troop_get_new_inventory_slot_modifier", ":exchange_troop_2", ":exchange_2"),
    (assign, ":modifier_2", reg0),
    (call_script, "script_player_get_new_inventory_slot_amount", ":exchange_1"),
    (assign, ":item_amount_1", reg0),
    (call_script, "script_player_get_new_inventory_slot_amount", ":exchange_2"),
    (assign, ":item_amount_2", reg0),
    (call_script, "script_player_get_new_inventory_slot", ":exchange_1"),
    (assign, ":item_1", reg0),
    (call_script, "script_player_get_new_inventory_slot", ":exchange_2"),
    (assign, ":item_2", reg0),

    (call_script, "script_player_set_new_inventory_slot", ":exchange_1", ":item_2"),
    (call_script, "script_player_set_new_inventory_slot", ":exchange_2", ":item_1"),

    (try_begin),
       (gt, ":item_1", 0),
       (item_get_type, ":item_type_1", ":item_1"),
    (try_end),
    (try_begin),
       (gt, ":item_2", 0),
       (item_get_type, ":item_type_2", ":item_2"),
    (try_end),

    (try_begin),
       (gt, ":item_amount_2", 0),
       (eq, ":item_type_2", itp_type_goods),
       (call_script, "script_player_set_new_inventory_slot_amount", ":exchange_1", ":item_amount_2"),
    (try_end),
    (try_begin),
       (gt, ":item_amount_2", 0),
       (eq, ":item_type_1", itp_type_goods),
       (call_script, "script_player_set_new_inventory_slot_amount", ":exchange_2", ":item_amount_1"),
    (try_end),

    (call_script, "script_troop_set_new_inventory_slot_modifier", ":exchange_troop_1", ":exchange_1", ":modifier_2"),
    (call_script, "script_troop_set_new_inventory_slot_modifier", ":exchange_troop_2", ":exchange_2", ":modifier_1"),

    (troop_get_slot,  ":overlay_background", "trp_temp_array_a", ":exchange_1"),
    (call_script, "script_lowlight_certain_block", ":overlay_background"),
    (troop_get_slot,  ":overlay_background", "trp_temp_array_a", ":exchange_2"),
    (call_script, "script_lowlight_certain_block", ":overlay_background"),
  ]),

87

主题

1447

回帖

2415

积分

子爵[版主]

游小明
枢机主教

Rank: 7Rank: 7Rank: 7

UID
74938
第纳尔
12118
精华
3
互助
129
荣誉
101
贡献
167
魅力
554
注册时间
2008-4-28

维京征服正版勋章

鲜花(1259) 鸡蛋(0)
发表于 2022-11-28 21:38:56 来自手机 | 显示全部楼层
UI和想法都很赞!
不过更换队友装备的界面估计也得重写了吧…来自: iPhone客户端

29

主题

690

回帖

551

积分

骑士

Rank: 4Rank: 4

UID
3322408
第纳尔
1738
精华
0
互助
67
荣誉
0
贡献
0
魅力
4
注册时间
2022-2-3
鲜花(55) 鸡蛋(0)
发表于 2022-11-29 00:11:14 来自手机 | 显示全部楼层
aliang227 发表于 2022-11-28 21:38
UI和想法都很赞!
不过更换队友装备的界面估计也得重写了吧…

显示、信息、选择、交换物品,这些关键的环节都已经拆分成各个script,封装起来了。商店界面、npc换装这些只需要把script调用一下,顶多改点position就能实现。来自: Android客户端

29

主题

690

回帖

551

积分

骑士

Rank: 4Rank: 4

UID
3322408
第纳尔
1738
精华
0
互助
67
荣誉
0
贡献
0
魅力
4
注册时间
2022-2-3
鲜花(55) 鸡蛋(0)
发表于 2022-11-29 00:11:44 来自手机 | 显示全部楼层
脚本的英文打不出来?来自: Android客户端

75

主题

1258

回帖

440

积分

骑士

Rank: 4Rank: 4

UID
2852084
第纳尔
4492
精华
0
互助
6
荣誉
1
贡献
0
魅力
31
注册时间
2017-7-9

骑砍中文站APP会员勋章元老骑士勋章骑士美德之英勇勋章[杰出会员活跃勋章]

QQ
鲜花(191) 鸡蛋(0)
发表于 2022-11-29 03:25:51 | 显示全部楼层
楼主贴图的brf还是放一下吧作图都没头绪

29

主题

690

回帖

551

积分

骑士

Rank: 4Rank: 4

UID
3322408
第纳尔
1738
精华
0
互助
67
荣誉
0
贡献
0
魅力
4
注册时间
2022-2-3
鲜花(55) 鸡蛋(0)
发表于 2022-11-29 19:39:01 来自手机 | 显示全部楼层
上听骑砍 发表于 2022-11-29 03:25
楼主贴图的brf还是放一下吧作图都没头绪

不是不合理,补发一个brf。来自: Android客户端

32

主题

72

回帖

181

积分

见习骑士

Rank: 3

UID
3199602
第纳尔
1041
精华
0
互助
30
荣誉
0
贡献
1
魅力
203
注册时间
2020-9-4
鲜花(54) 鸡蛋(0)
 楼主| 发表于 2022-12-5 10:32:40 | 显示全部楼层
修正一下,mission部分
       (try_for_range, ":inventory_slot_no", 10, 13),
          (troop_get_inventory_slot, ":weapon_no", ":troop_no", ":inventory_slot_no"),
          (gt, ":weapon_no", 0),
          (item_get_max_ammo, ":ammo_num", ":weapon_no"),
          (store_add, ":slot_no", ":inventory_slot_no", 37),
          (agent_set_slot, "$mission_player_agent", ":slot_no", ":ammo_num"),
       (try_end)
这段代码,改成
       (try_for_range, ":inventory_slot_no", 10, 13),
          (troop_get_inventory_slot, ":weapon_no", ":troop_no", ":inventory_slot_no"),
          (gt, ":weapon_no", 0),
          (item_get_max_ammo, ":ammo_num", ":weapon_no"),
          (store_add, ":slot_no", ":inventory_slot_no", 37),
          (agent_set_slot, "$mission_player_agent", ":slot_no", ":ammo_num"),
       (try_end),

       (try_for_range, ":inventory_slot_no", 13, 16),
          (troop_get_inventory_slot, ":weapon_no", ":troop_no", ":inventory_slot_no"),
          (gt, ":weapon_no", 0),
          (item_get_hit_points, ":shield_hp", ":weapon_no"),
          (store_add, ":slot_no", ":inventory_slot_no", 37),
          (agent_set_slot, "$mission_player_agent", ":slot_no", ":shield_hp"),
       (try_end),
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

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

GMT+8, 2024-4-27 11:04 , Processed in 0.148401 second(s), 38 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

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