骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

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

[讨论] 关于战后战利品计算时的恶心人机制

[复制链接]

5

主题

116

回帖

51

积分

扈从

Rank: 2Rank: 2

UID
2969086
第纳尔
1183
精华
0
互助
3
荣誉
0
贡献
0
魅力
8
注册时间
2017-12-31

汉匈决战正版勋章霸主正版勋章

鲜花(45) 鸡蛋(0)
发表于 2022-2-24 13:15:51 | 显示全部楼层 |阅读模式
本帖最后由 mod学徒 于 2022-2-24 19:34 编辑

最近玩骑砍时发现了战团里一个挺恶心的机制。

  1.       #Now loot the defeated party
  2.       (store_mul, ":loot_probability", player_loot_share, 3),#30
  3.       (val_mul, ":loot_probability", "$g_strength_contribution_of_player"),#x玩家贡献值
  4.       (party_get_skill_level, ":player_party_looting", "p_main_party", "skl_looting"),#获取队伍掠夺等级
  5.       (val_add, ":player_party_looting", 10),#掠夺等级+10
  6.       (val_mul, ":loot_probability", ":player_party_looting"),#掠夺概率x掠夺等级
  7.       (val_div, ":loot_probability", 10),#除以10
  8.       (val_div, ":loot_probability", ":num_player_party_shares"),#除以队伍股份数

  9.       (party_get_num_companion_stacks, ":num_stacks",":enemy_party"),#获取敌人堆数
  10.       (try_for_range, ":i_stack", 0, ":num_stacks"),#循环
  11.         (party_stack_get_troop_id, ":stack_troop",":enemy_party",":i_stack"),#获取trpid
  12.         (neg|troop_is_hero, ":stack_troop"),#不是英雄
  13.         (party_stack_get_size, ":stack_size",":enemy_party",":i_stack"),#获取规模
  14.         (try_for_range, ":unused", 0, ":stack_size"),#遍历每一个人
  15.           (troop_loot_troop, "trp_temp_troop", ":stack_troop", ":loot_probability"),#疯狂掠夺
  16.         (try_end),
  17.       (try_end),
复制代码
众所周知,战利品结算计算掠夺率的时候,要除以队伍的股份数,战团里定义的玩家占十份,英雄占有三份,小兵占有一份。但是战利品结算是在俘虏结算之后的,因此解救的俘虏也会算入这个股份中,比如玩家三十人很艰难的击败了二百人带二百俘虏的一支队伍,但是因为玩家解救了这二百名俘虏,玩家队伍的股份数量上升了二百,导致战利品只有寥寥几件。非常不合理(都没出力,还想分一杯羹?脸都不要了)

因此我开始了探索:

探索1:把战利品结算界面提前到解救俘虏之前。

但是我在prsns里似乎没有找到相应的东西(本人对prsn了解不深,如果有误,希望各位指正),所以这个方案放弃了

探索2:对脚本script_party_calculate_loot:#战利品计算

                script_calculate_main_party_shares:#计算股份进行探索

计算股份脚本是在战利品计算中调用的,而算出的股份是存在reg0这个寄存器中,由于reg0是全局性的,我就想到把股份计算提前,只能放到战斗胜利结算菜单处

game_menus"battle_debrief"菜单里,找到最后的"continue"按钮,在(jump_to_menu, "$g_next_menu"),后加入如下代码

  1. (call_script, "script_calculate_main_party_shares"),(display_message,"@{reg0}"),
复制代码
暂时不删除script_party_calculate_loot:#战利品计算中的股份计算脚本,先在其中加入如下语段

  1.   #script_party_calculate_loot:#战利品计算
  2.   # INPUT:
  3.   # param1: Party-id
  4.   # Returns num looted items in reg0
  5.   ("party_calculate_loot",
  6.     [
  7.       (store_script_param_1, ":enemy_party"), #Enemy Party_id        #敌人的party_id
  8.             
  9. (call_script, "script_calculate_main_party_shares"),#计算股份
  10.       (assign, ":num_player_party_shares", reg0),(display_message,"@{reg0}"),
复制代码
进入游戏测试后,发现如果在战后解救了俘虏,输出的数字果然不同,验证了我最开始的猜想。然后我删除了script_party_calculate_loot:#战利品计算中的股份计算,只保留(assign, ":num_player_party_shares", reg0),赋值语句。再次进游戏测试,发现了一个问题,两次输出的文字依然不同,第一次输出的数字和原玩家部队股份相同,第二次输出的数字却很奇怪,和股份已经毫无关系,我想到可能是在战斗胜利菜单到俘虏结算这个过程中,reg0被其他东西占用,于是我做出了如下改动。

  1.   #script_calculate_main_party_shares:#计算股份
  2.   # INPUT:
  3.   # Returns number of player party shares in reg65 #计算股份
  4.   ("calculate_main_party_shares",
  5.     [
  6.       (assign, ":num_player_party_shares", player_loot_share),
  7.       # Add shares for player's party
  8.       (party_get_num_companion_stacks, ":num_stacks", "p_main_party"),#获取玩家部队堆数量
  9.       (try_for_range, ":i_stack", 1, ":num_stacks"),#循环除了玩家的其他堆
  10.         (party_stack_get_troop_id, ":stack_troop", "p_main_party", ":i_stack"),#获取trpid
  11.         (try_begin),
  12.           (neg|troop_is_hero, ":stack_troop"),#如果不是英雄
  13.           (party_stack_get_size, ":stack_size","p_main_party",":i_stack"),#获取数量
  14.           (val_add, ":num_player_party_shares", ":stack_size"),#加上1个股份,
  15.         (else_try),
  16.           (val_add, ":num_player_party_shares", hero_loot_share),#是英雄就加上英雄股份
  17.         (try_end),
  18.       (try_end),
  19. (assign, reg65, ":num_player_party_shares"),
复制代码
  1.       ("continue",[],"Continue...",[(jump_to_menu, "$g_next_menu"),      (call_script, "script_calculate_main_party_shares"),#计算股份
  2. (display_message,"@{reg65}"),]),
  3.     ]
  4.   ),
复制代码
  1.   #script_party_calculate_loot:#战利品计算
  2.   # INPUT:
  3.   # param1: Party-id
  4.   # Returns num looted items in reg0
  5.   ("party_calculate_loot",
  6.     [
  7.       (store_script_param_1, ":enemy_party"), #Enemy Party_id        #敌人的party_id
  8.       # (call_script, "script_calculate_main_party_shares"),#计算股份
  9. (assign, ":num_player_party_shares", reg65),
  10.       (display_message,"@{reg65}"),
复制代码
将这个寄存器替换为了reg65这个不常用的寄存器,再进行测试,发现无论是否解救俘虏,两次输出的数字都是原玩家部队股份的值了,战利品也不会变少了。


头一次发这类帖子,主要想和各位大佬讨论一下这个机制,如果我以上研究有误,也希望各位大佬指正!


评分

参与人数 2第纳尔 +20 互助 +2 魅力 +2 收起 理由
幼稚园殺手 + 10 + 2 文章不错,继续努力!
aliang227 + 10 + 2 文章不错,继续努力!

查看全部评分

鲜花鸡蛋

幼稚园殺手  在2022-2-24 16:59  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
三啸  在2022-2-24 14:21  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下

0

主题

43

回帖

18

积分

随仆

Rank: 1

UID
3218253
第纳尔
498
精华
0
互助
1
荣誉
0
贡献
0
魅力
2
注册时间
2021-1-29
鲜花(3) 鸡蛋(0)
发表于 2022-2-24 13:59:12 来自手机 | 显示全部楼层
不错,就是排班有问题来自: Android客户端

24

主题

349

回帖

152

积分

子爵[版主]

Rank: 7Rank: 7Rank: 7

UID
75439
第纳尔
6907
精华
0
互助
6
荣誉
1
贡献
190
魅力
32
注册时间
2008-5-3
鲜花(8) 鸡蛋(0)
发表于 2022-2-24 13:59:41 | 显示全部楼层
可以考虑只修改计算股份那个脚本,你不是说计算股分时把俘虏也算进去了么,那么用party_get_num_prisoners获得俘虏人数,在计算股份时减掉俘虏那分,再出返回值,这样修改的工作量应该最少

5

主题

116

回帖

51

积分

扈从

Rank: 2Rank: 2

UID
2969086
第纳尔
1183
精华
0
互助
3
荣誉
0
贡献
0
魅力
8
注册时间
2017-12-31

汉匈决战正版勋章霸主正版勋章

鲜花(45) 鸡蛋(0)
 楼主| 发表于 2022-2-24 15:22:26 来自手机 | 显示全部楼层
producta 发表于 2022-2-24 13:59
不错,就是排班有问题

我在电脑上弄的,那些代码文字原本是有区分的,我拿手机打开之后就弄一起了,晚上回去编辑一下来自: Android客户端

5

主题

116

回帖

51

积分

扈从

Rank: 2Rank: 2

UID
2969086
第纳尔
1183
精华
0
互助
3
荣誉
0
贡献
0
魅力
8
注册时间
2017-12-31

汉匈决战正版勋章霸主正版勋章

鲜花(45) 鸡蛋(0)
 楼主| 发表于 2022-2-24 17:11:26 | 显示全部楼层
easewater 发表于 2022-2-24 13:59
可以考虑只修改计算股份那个脚本,你不是说计算股分时把俘虏也算进去了么,那么用party_get_num_prisoners ...

多算入的是玩家解救的俘虏人数,但是不能确定玩家具体解救了多少,如果要确定的话,还需要再储存玩家原有人数,这样以来工作量又增加了,所以我目前想到最好的办法就是在胜利菜单界面就调用计算股份脚本,然后在计算战利品时直接使用

17

主题

627

回帖

343

积分

见习骑士

Rank: 3

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

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

鲜花(54) 鸡蛋(0)
发表于 2022-2-24 18:17:08 来自手机 | 显示全部楼层
:lol:lol:lol针不戳来自: Android客户端

13

主题

89

回帖

31

积分

扈从

Rank: 2Rank: 2

UID
2113325
第纳尔
594
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2014-8-8
鲜花(0) 鸡蛋(0)
发表于 2022-3-19 20:59:11 | 显示全部楼层
请问怎么通过修改txt实现不让NPC占有战利品呢

5

主题

116

回帖

51

积分

扈从

Rank: 2Rank: 2

UID
2969086
第纳尔
1183
精华
0
互助
3
荣誉
0
贡献
0
魅力
8
注册时间
2017-12-31

汉匈决战正版勋章霸主正版勋章

鲜花(45) 鸡蛋(0)
 楼主| 发表于 2022-3-21 16:22:51 来自手机 | 显示全部楼层
一坨屎 发表于 2022-3-19 20:59
请问怎么通过修改txt实现不让NPC占有战利品呢

如果你会ms的话改起来很容易,TXT实在是过于繁琐来自: Android客户端

29

主题

151

回帖

94

积分

扈从

Rank: 2Rank: 2

UID
2827349
第纳尔
1851
精华
0
互助
8
荣誉
0
贡献
0
魅力
20
注册时间
2017-4-20
鲜花(6) 鸡蛋(0)
发表于 2022-4-12 04:50:25 | 显示全部楼层
感谢分享,我想试着改一下
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

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

GMT+8, 2024-11-19 12:31 , Processed in 0.125631 second(s), 30 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

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