这个修改的主要逻辑是:

1. 添加了一个新的配置参数 rob_rate_decay (默认0.5),用于控制积分差距对成功率的影响程度
2. 当打劫目标的积分比打劫者高时:
   - 计算积分差距比例(差距/目标总积分)
   - 根据差距比例和衰减系数降低成功率
   - 例如:
     - 基础成功率为30%
     - 如果目标比打劫者多100%的积分,且衰减系数为0.5
     - 则最终成功率为:30% * (1 - 1 * 0.5) = 15%
3. 设置了最低成功率(5%),确保即使积分差距很大也有一定机会成功
4. 当打劫者积分比目标高时,使用基础成功率,不进行调整
这样设计可以让低分用户打劫高分用户时更加困难,体现出合理的风险收益比。
This commit is contained in:
liuwei
2025-04-10 09:37:42 +08:00
parent 6efb53460d
commit f45259ea2e
2 changed files with 18 additions and 3 deletions

View File

@@ -10,7 +10,8 @@ command-format = """
"""
# 打劫功能配置
rob-success-rate = 0.3 # 打劫成功率范围0-1
rob-success-rate = 0.3 # 基础打劫成功率
rob-rate-decay = 0.5 # 积分差距成功率衰减系数
rob-min-percent = 0.1 # 打劫成功时最小获取目标积分百分比
rob-max-percent = 0.3 # 打劫成功时最大获取目标积分百分比
rob-penalty-percent = 0.2 # 打劫失败时的惩罚百分比(扣除自身积分的比例)

View File

@@ -82,7 +82,8 @@ class PointTradePlugin(MessagePluginInterface):
self.enable = point_trade_config.get("enable", True)
# 打劫功能配置
self.rob_success_rate = point_trade_config.get("rob-success-rate", 0.3) # 打劫成功率
self.rob_success_rate = point_trade_config.get("rob-success-rate", 0.3) # 基础打劫成功率
self.rob_rate_decay = point_trade_config.get("rob-rate-decay", 0.5) # 积分差距导致的成功率衰减系数
self.rob_min_percent = point_trade_config.get("rob-min-percent", 0.1) # 打劫最小百分比
self.rob_max_percent = point_trade_config.get("rob-max-percent", 0.3) # 打劫最大百分比
self.rob_penalty_percent = point_trade_config.get("rob-penalty-percent", 0.2) # 打劫失败惩罚百分比
@@ -496,7 +497,20 @@ class PointTradePlugin(MessagePluginInterface):
target_name = target_info.get('wx_nick_name', target_wxid) if target_info else target_wxid
# 决定打劫是否成功
is_success = random.random() < self.rob_success_rate
# 计算积分差距对成功率的影响
points_diff = target_total - robber_total
if points_diff > 0:
# 如果目标积分比打劫者高,降低成功率
diff_ratio = min(points_diff / target_total, 1.0) # 差距比例最大为1
final_success_rate = self.rob_success_rate * (1 - diff_ratio * self.rob_rate_decay)
else:
# 如果打劫者积分比目标高,使用基础成功率
final_success_rate = self.rob_success_rate
# 确保成功率在合理范围内
final_success_rate = max(0.05, min(final_success_rate, self.rob_success_rate))
is_success = random.random() < final_success_rate
# 更新冷却时间
self.rob_cooldown_records[sender] = current_time