- 好友
- 16
- 在线时间
- 95 小时
- 最后登录
- 2024-12-27
见习骑士
- UID
- 2462463
- 第纳尔
- 1587
- 精华
- 0
- 互助
- 23
- 荣誉
- 0
- 贡献
- 0
- 魅力
- 83
- 注册时间
- 2015-3-3
鲜花( 58) 鸡蛋( 0)
|
本帖最后由 战争傀儡阿格兰 于 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,才能进入二周目。
以上。
|
评分
-
查看全部评分
鲜花鸡蛋杰喵喵 在2023-9-6 16:12 送朵鲜花 并说:我非常同意你的观点,送朵鲜花鼓励一下 三啸 在2023-9-6 11:38 送朵鲜花 并说:我非常同意你的观点,送朵鲜花鼓励一下 ggfgfgf 在2023-8-7 12:14 送朵鲜花 并说:好怪,期待作品~
|