这个修改的主要逻辑是:
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:
@@ -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 # 打劫失败时的惩罚百分比(扣除自身积分的比例)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user