骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

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

[源码与工具] 兵种物品输出器修复Ver

[复制链接]

41

主题

94

回帖

221

积分

见习骑士

Rank: 3

UID
3199602
第纳尔
1162
精华
0
互助
36
荣誉
0
贡献
1
魅力
227
注册时间
2020-9-4
鲜花(60) 鸡蛋(0)
发表于 2023-6-5 23:48:45 | 显示全部楼层 |阅读模式
本帖最后由 奥杜因阿卡托什 于 2023-6-5 23:54 编辑

    首先,这个帖子的代码来自https://bbs.mountblade.com.cn/fo ... 97767&highlight=rgl,效果是直接从游戏里输出某兵种装备的武器的id,复制之后简单处理一下就能直接粘贴进module_troop,再也不用在魔球或csv里一件一件检索装备了。感谢@虎皮猫大人 提供的代码,给了我很多启发。但是在那个帖子下面,也有骑友表示“逻辑有问题”。我自己试了一下,虽然感觉逻辑上的问题不是特别明显,但放进MS里一编译确实会出现各种各样的报错。不知道是什么原因,可能是我自己这边的问题,但总之我给代码稍稍调整了一下,让这段代码能在我这里,以及正常的MS上运行。效果如配图。
    现在说代码,首先和原帖一样,都是string,不过加了一个输入。加在string的最前面,记得是那个string=[的外面。
  1. from ID_items import *

  2. #import item name as string
  3. def store_item_id():
  4.    ofile = open("./ID_items.py","r")
  5.    store_item_id = ofile.readlines()
  6.    ofile.close()
  7.    store_item_id_c = []
  8.    i_n = 0
  9.    for s_string in store_item_id:
  10.       itm_str = s_string[0:s_string.find(' ')]
  11.       store_item_id_c.append(("itm_no_"+str(i_n), itm_str))
  12.       i_n = i_n + 1
  13. # print(store_item_id_c[0])
  14.    return store_item_id_c
复制代码
刚对MS有初步了解的moder可能会奇怪,这个玩意儿的语法和一般不同。这个简单来说就是我们一般写的代码都是在MS搭好的框架下的,而这样的代码就是用来搭建框架的,决定的是数据如何被处理,并最后输出到txt里去。process和header里有很多这样的玩意,多看看可以加深对MS的理解。另外这个的格式要求是比较严格的,比如def store_item_id():不顶格写就不行。
    在string末尾]之外添加
  1. +store_item_id()
复制代码
在上一段中定义的函数store_item_id(),在这里就用上了。效果是获取ID_item,把里面的内容以字符串的形式输出出来。输出出来之后的内容和string=[…………]的主体部分是同一个级别的,所以用加号连接合并。输出进txt后可以很清晰的看到,string的上半部分是正常的字符串,下面就都是整整齐齐的这些item id。
    然后在script上面写
  1. from ID_strings import *
复制代码
   接着是个脚本
  1.     #script_output_troop_itms_text
  2.       ("output_troop_itms_text",
  3.       #
  4.       [
  5.       (store_script_param, ":troop_no", 1),

  6.       (display_message, "@["),
  7.       (assign, ":str_itm_0", "str_itm_no_0"),
  8.       (assign, ":inventory_capacity", 10),
  9. #      (troop_get_inventory_capacity, ":inventory_capacity", ":troop_no"),
  10.       (try_for_range, ":slot_no", 0, ":inventory_capacity"),
  11.          (troop_get_inventory_slot, ":item_no", ":troop_no", ":slot_no"),
  12.          (gt, ":item_no", 0),
  13.          (store_add, ":string_no", ":str_itm_0", ":item_no"),
  14.          (str_store_string, s1, ":string_no"),
  15.          (display_message, "@{s1},_"),
  16.       (try_end),
  17.       (display_message, "@]"),
  18.       ]),
复制代码
在我那里,MS报错的部分经检测就是脚本,原因不明,所以重写了一个。原来脚本的分类是按物品类别排序的,我觉得没太多必要就省去了。另外,不知道是不是我的问题,在我这里debug_message即使在编辑模式、开启作弊、debug模式同时启动下都无法输出,因此全部改成了一般的display,反正在编辑模式下它们也能打印到rgl里。然后因为要琢磨出装搭配的一般都是什么领主高级兵,我就只把输出范围限制在四个武器槽、四个装备槽和马匹了,如果要输出整个物品栏,把注释的那行放出来就行。
    最后是menus
  1.       ("test",
  2.        [], "Test!",
  3.        [
  4. (call_script, "script_output_troop_itms_text","trp_player"),
  5.         ],
  6.        ),
复制代码
我一般是加在camp_cheat后面的。
    使用这个有几个注意点,第一想让其输出进rgl,必须是编辑模式。第二,本来输出的itm和后面的id之间应该有个下划线连接的,但是骑砍会自动把下划线处理成空格,这个没办法,不过只要把“itm ”一键替换成“itm_”就行了,问题也不大。第三,这个只是个脚手架性质的东西,用完之后记得屏蔽掉。几千条string还是挺占用空间的。
    说个题外话,骑砍其实是有办法在给troop设置装备时,直接设置其词缀的。形如(itm_duangang_shizizhang, imod_balanced)。不过直接这么写MS肯定识别不了,详情请见领军者process_troop。



rgl的输出.png

评分

参与人数 1第纳尔 +10 魅力 +1 收起 理由
agjib + 10 + 1 您的帖子很有价值!

查看全部评分

16

主题

152

回帖

160

积分

见习骑士

Rank: 3

UID
3048044
第纳尔
2061
精华
0
互助
18
荣誉
2
贡献
20
魅力
289
注册时间
2018-12-15
鲜花(34) 鸡蛋(0)
发表于 2023-6-6 11:18:22 | 显示全部楼层
欧内的手,好汉

31

主题

910

回帖

2412

积分

子爵[版主]

Rank: 7Rank: 7Rank: 7

UID
2755938
第纳尔
6208
精华
11
互助
12
荣誉
97
贡献
85
魅力
242
注册时间
2016-7-5

骑砍中文站APP会员勋章

鲜花(236) 鸡蛋(0)
发表于 2023-6-6 17:39:56 来自手机 | 显示全部楼层
可以试试物品名直接用id那个字符串,我前几天正好也搞了一个这玩意儿,mod里配装用。来自: Android客户端
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

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

GMT+8, 2024-11-19 10:42 , Processed in 0.122577 second(s), 25 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

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