骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

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

[功能与代码] 【战团】开启二周目的方法 纯代码分享 不是MOD

[复制链接]

31

主题

200

回帖

174

积分

见习骑士

Rank: 3

UID
2462463
第纳尔
1532
精华
0
互助
21
荣誉
0
贡献
0
魅力
70
注册时间
2015-3-3
鲜花(51) 鸡蛋(0)
发表于 2023-8-7 11:10:30 | 显示全部楼层 |阅读模式
本帖最后由 战争傀儡阿格兰 于 2023-9-6 12:00 编辑

代码环境1.171
【战团】阿格兰魔球修改器——合集https://bbs.mountblade.com.cn/thread-2097734-1-1.html

骑砍这么多年来,肯定有无数人想做二周目,即点击“开始新游戏”,会开启一个与一周目完全不同的mod。

当然这个工作量是巨大的,肯定要改各种兵种数据,各种阵营,甚至各种装备。而上面列举的东西,全都是要ms写在scrip等地方调用,而不是写在troop、item等里面。光这一点,就能劝退99%的modder了。

所以,可以预见,即使我研究出了开始二周目的方法,十几年都不会有人用(悲观),我本人也不会写二周目,我是另有他用~


原理解释:
经过测试,全局变量例如"$tutorial_2_finished",各种slot只作用于存档。
找了半天,终于找到真正意义能作用于全局的变量——游戏设置。这个东西既可以读取,又可以写入,相当完美。
经过测试,从一个存档退出到开始界面,各种设置会保留,更加完美。
研究过程中有个其他案例,set_shader_param_float,这个可以直接写入fx文件,但是没法读取,相当可惜。



实现的方法:

第一步:
熟读抄写背诵以下op


# Access to game options

options_get_damage_to_player          =  260  # (options_get_damage_to_player, <destination>),
                                              # 0 = 1/4, 1 = 1/2, 2 = 1/1
options_set_damage_to_player          =  261  # (options_set_damage_to_player, <value>),
                                              # 0 = 1/4, 1 = 1/2, 2 = 1/1
options_get_damage_to_friends         =  262  # (options_get_damage_to_friends, <destination>),
                                              # 0 = 1/2, 1 = 3/4, 2 = 1/1
options_set_damage_to_friends         =  263  # (options_set_damage_to_friends, <value>),
                                              # 0 = 1/2, 1 = 3/4, 2 = 1/1
options_get_combat_ai                 =  264  # (options_get_combat_ai, <destination>),
                                              # 0 = good, 1 = average, 2 = poor
options_set_combat_ai                 =  265  # (options_set_combat_ai, <value>),
                                              # 0 = good, 1 = average, 2 = poor
game_get_reduce_campaign_ai           =  424  # (game_get_reduce_campaign_ai, <destination>),
                                              # Deprecated operation. Use options_get_campaign_ai instead
options_get_campaign_ai               =  266  # (options_get_campaign_ai, <destination>),
                                              # 0 = good, 1 = average, 2 = poor
options_set_campaign_ai               =  267  # (options_set_campaign_ai, <value>),
                                              # 0 = good, 1 = average, 2 = poor
options_get_combat_speed              =  268  # (options_get_combat_speed, <destination>),
                                              # 0 = slowest, 1 = slower, 2 = normal, 3 = faster, 4 = fastest
options_set_combat_speed              =  269  # (options_set_combat_speed, <value>),
                                              # 0 = slowest, 1 = slower, 2 = normal, 3 = faster, 4 = fastest

#注意!以下三个句子不可用!设置的值和显示的东西不一致
options_get_battle_size               =  270  # (options_get_battle_size, <destination>),
                                              # Version 1.161+. Retrieves current battle size slider value (in the range of 0..1000). Note that this is the slider value, not the battle size itself.
options_set_battle_size               =  271  # (options_set_battle_size, <value>),
                                              # Version 1.161+. Sets battle size slider to provided value (in the range of 0..1000). Note that this is the slider value, not the battle size itself.
get_average_game_difficulty           =  990  # (get_average_game_difficulty, <destination>),
                                              # Returns calculated game difficulty rating (as displayed on the Options page). Commonly used for score calculation when ending the game.


第二步:
要给你的一周目弄个结局 可以是game_menu,可以是present。做好提示,要玩家点击确定后,直接点开始新游戏
在这个结局里添加第一步里的options_set,例如我下面的案例。要设置的尽可能偏,防止玩家误打误撞正好一样的设置。
而且这个值你可以赋予意义,比方假设10214的组合代表是平民进入二周目,假设10213是大佬进入二周目,开局发装备,加属性
案例:

        #agland
        (options_set_damage_to_player,1),
        (options_set_damage_to_friends,0),
        (options_set_combat_ai,2),
        (options_get_campaign_ai,1),
        (options_get_combat_speed,4),
        #设置完后赶快退到主界面,防止玩家改其他东西
        (change_screen_quit),
        #agland

第三步:
game_menu.py里,找"start_game_options"进行修改,
例如:


        #agland
        (try_begin),
            (options_get_damage_to_player,":total_win"),
            (eq,":total_win",1),
            #全部判定一下,这里就不写了。可以组合成上面说的密码,比方假设10214的组合代表是平民进入二周目,假设10213是大佬进入二周目,开局发装备,加属性
       #以下加入你二周目的设定,兵种啊,属性啊,阵营啊,剧情啊(自己填充),再加上原来的开局代码。此外,我最后面给一个改菜单描述的案例
        


       #最后补上一堆options_set,把刚才设置的奇葩设置,改为正常的游戏设置。一方面是为了防止重复进入二周目,一方面是为了让设置阳间一点
     (else_try),
            #以下是原来的开局代码(自己填充)



     (try_end),   

       #agland


结束


补一个案例


  ("companion_report",0,
   "{s7}{s1}",
   "none",
   [
   (str_clear, s1),
   (str_store_string, s7, "str_no_companions_in_service"),


通过第二行的这种写法,就可以修改"start_game_options"显示的文字


2023年9月更新:

上面说到

#注意!以下三个句子不可用!设置的值和显示的东西不一致
options_get_battle_size               =  270  # (options_get_battle_size, <destination>),
                                              # Version 1.161+. Retrieves current battle size slider value (in the range of 0..1000). Note that this is the slider value, not the battle size itself.
options_set_battle_size               =  271  # (options_set_battle_size, <value>),
                                              # Version 1.161+. Sets battle size slider to provided value (in the range of 0..1000). Note that this is the slider value, not the battle size itself.
get_average_game_difficulty           =  990  # (get_average_game_difficulty, <destination>),
                                              # Returns calculated game difficulty rating (as displayed on the Options page). Commonly used for score calculation when ending the game.



现在考虑一下,只要我读出代码的时候,值是我上次设置的值就行,比方我设置战场大小101,显示可能是172。但是代码读出来还是101。那么有了这个可以设定的值,更容易防止玩家不小心触发二周目了,比方10214的组合再加上战场大小103,才能进入二周目。

以上。





评分

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

查看全部评分

鲜花鸡蛋

杰喵喵  在2023-9-6 16:12  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
三啸  在2023-9-6 11:38  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
ggfgfgf  在2023-8-7 12:14  送朵鲜花  并说:好怪,期待作品~

16

主题

588

回帖

326

积分

见习骑士

Rank: 3

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

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

鲜花(51) 鸡蛋(0)
发表于 2023-8-7 12:28:47 来自手机 | 显示全部楼层
好小子,这都给你拉出来了来自: Android客户端

168

主题

1815

回帖

1165

积分

贵族[MOD作者]

中级术士

Rank: 7Rank: 7Rank: 7

UID
69266
第纳尔
3587
精华
1
互助
46
荣誉
24
贡献
0
魅力
144
注册时间
2008-2-28

骑砍中文站APP会员勋章有生之年勋章元老骑士勋章战团正版勋章骑士美德之英勇勋章[杰出会员活跃勋章]

QQ
鲜花(400) 鸡蛋(0)
发表于 2023-9-6 11:38:52 | 显示全部楼层
正好是我需要的,首先点赞评论三年支持!

13

主题

86

回帖

145

积分

见习骑士

Rank: 3

UID
3304622
第纳尔
595
精华
0
互助
19
荣誉
2
贡献
0
魅力
123
注册时间
2021-12-28
鲜花(26) 鸡蛋(0)
发表于 2023-9-6 16:12:29 | 显示全部楼层
有点邪门

29

主题

693

回帖

552

积分

骑士

Rank: 4Rank: 4

UID
3322408
第纳尔
1738
精华
0
互助
67
荣誉
0
贡献
0
魅力
4
注册时间
2022-2-3
鲜花(55) 鸡蛋(0)
发表于 2024-1-24 18:16:36 来自手机 | 显示全部楼层
脑洞大开。来自: Android客户端
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

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

GMT+8, 2024-5-18 12:15 , Processed in 0.112184 second(s), 28 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

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