1.完成战斗/冒险系统2.新增help类

This commit is contained in:
2025-11-10 16:34:58 +08:00
parent fefb44d8f6
commit 168d561425
6 changed files with 159 additions and 79 deletions

View File

@@ -36,9 +36,9 @@ class CombatService:
self._config: ProjectConfig = Architecture.Get(ProjectConfig)
# 加载关键配置到实例变量
self.heal_cost = CombatConfig.get_int("combat_heal_cost", 100)
self.pvp_reward = CombatConfig.get_int("combat_pvp_reward", 1000)
self.pvp_penalty = CombatConfig.get_int("combat_pvp_penalty", 1000)
self.heal_cost = CombatConfig.get_int("combat_heal_cost")
self.pvp_reward = CombatConfig.get_int("combat_pvp_reward")
self.pvp_penalty = CombatConfig.get_int("combat_pvp_penalty")
# ========================================================================
# 装备管理
@@ -249,12 +249,12 @@ class CombatService:
装备强度值
"""
return (
stats.get("ATK", 0) * CombatConfig.get_float("combat_weight_atk", 1.0) +
stats.get("DEF", 0) * CombatConfig.get_float("combat_weight_def", 0.8) +
stats.get("HP", 0) * CombatConfig.get_float("combat_weight_hp", 0.1) +
stats.get("SPD", 0) * CombatConfig.get_float("combat_weight_spd", 0.5) +
stats.get("CRIT", 0) * CombatConfig.get_float("combat_weight_crit", 2.0) +
stats.get("CRIT_DMG", 0) * CombatConfig.get_float("combat_weight_crit_dmg", 0.01)
stats.get("ATK", 0) * CombatConfig.get_float("combat_weight_atk") +
stats.get("DEF", 0) * CombatConfig.get_float("combat_weight_def") +
stats.get("HP", 0) * CombatConfig.get_float("combat_weight_hp") +
stats.get("SPD", 0) * CombatConfig.get_float("combat_weight_spd") +
stats.get("CRIT", 0) * CombatConfig.get_float("combat_weight_crit") +
stats.get("CRIT_DMG", 0) * CombatConfig.get_float("combat_weight_crit_dmg")
)
def get_available_skills(self, user_id: int) -> List[SkillDefinition]:
@@ -298,12 +298,12 @@ class CombatService:
)
if not cursor.fetchone():
# 创建默认状态记录
base_hp = CombatConfig.get_int("combat_base_hp", 100)
base_atk = CombatConfig.get_int("combat_base_atk", 10)
base_def = CombatConfig.get_int("combat_base_def", 5)
base_spd = CombatConfig.get_int("combat_base_spd", 10)
base_crit = CombatConfig.get_int("combat_base_crit", 5)
base_crit_dmg = CombatConfig.get_int("combat_base_crit_dmg", 150)
base_hp = CombatConfig.get_int("combat_base_hp")
base_atk = CombatConfig.get_int("combat_base_atk")
base_def = CombatConfig.get_int("combat_base_def")
base_spd = CombatConfig.get_int("combat_base_spd")
base_crit = CombatConfig.get_int("combat_base_crit")
base_crit_dmg = CombatConfig.get_int("combat_base_crit_dmg")
cursor.execute(
"""
@@ -441,14 +441,14 @@ class CombatService:
return 0
# 1. 计算基础时间指数增长上限24小时
base_time = CombatConfig.get_int("combat_adventure_base_time", 15)
max_time = CombatConfig.get_int("combat_adventure_max_time", 1440)
base_time = CombatConfig.get_int("combat_adventure_base_time")
max_time = CombatConfig.get_int("combat_adventure_max_time")
# 第n阶段的基础时间 = base_time * 2^(n-1)
stage_base_time = min(base_time * (2 ** (stage - 1)), max_time)
# 2. 计算时间缩减(对数函数)
divisor = CombatConfig.get_float("combat_time_reduction_divisor", 100)
divisor = CombatConfig.get_float("combat_time_reduction_divisor")
time_reduction_factor = 1 + math.log10(1 + equipment_strength / divisor)
# 3. 果酒时间缩减buff
@@ -478,18 +478,18 @@ class CombatService:
成功率0.0-1.0
"""
# 1. 基础成功率
base_rate = CombatConfig.get_float("combat_adventure_base_success_rate", 0.80)
stage_penalty = CombatConfig.get_float("combat_adventure_stage_penalty", 0.05)
min_rate = CombatConfig.get_float("combat_adventure_min_success_rate", 0.10)
base_rate = CombatConfig.get_float("combat_adventure_base_success_rate")
stage_penalty = CombatConfig.get_float("combat_adventure_stage_penalty")
min_rate = CombatConfig.get_float("combat_adventure_min_success_rate")
base_success = max(min_rate, base_rate - (stage - 1) * stage_penalty)
# 2. 装备加成
equip_coeff = CombatConfig.get_float("combat_adventure_equipment_coeff", 0.01)
equip_coeff = CombatConfig.get_float("combat_adventure_equipment_coeff")
equip_bonus = equipment_strength * equip_coeff
# 3. 运势加成
fortune_coeff = CombatConfig.get_float("combat_adventure_fortune_coeff", 0.10)
fortune_coeff = CombatConfig.get_float("combat_adventure_fortune_coeff")
fortune_bonus = fortune_value * fortune_coeff
# 4. 果酒buff加成
@@ -499,7 +499,7 @@ class CombatService:
buff_bonus += WINE_BUFFS[wine_id].get("success_rate", 0.0)
# 5. 最终成功率
max_rate = CombatConfig.get_float("combat_adventure_max_success_rate", 0.95)
max_rate = CombatConfig.get_float("combat_adventure_max_success_rate")
total = base_success + equip_bonus + fortune_bonus + buff_bonus
return min(max_rate, max(min_rate, total))
@@ -518,11 +518,11 @@ class CombatService:
# 如果提供食物果酒可以获得buff效果时间缩减、收益提升等
# 计算推荐的食物数量(仅供参考)
base_time = CombatConfig.get_int("combat_adventure_base_time", 15)
max_time = CombatConfig.get_int("combat_adventure_max_time", 1440)
base_time = CombatConfig.get_int("combat_adventure_base_time")
max_time = CombatConfig.get_int("combat_adventure_max_time")
stage_time = min(base_time * (2 ** (stage - 1)), max_time)
food_support_time = CombatConfig.get_int("combat_food_support_time", 15)
food_support_time = CombatConfig.get_int("combat_food_support_time")
recommended_food = math.ceil(stage_time / food_support_time)
# 如果没有提供食物,给出提示但允许继续
@@ -797,11 +797,11 @@ class CombatService:
rewards = {}
# 1. 基础积分奖励
base_points = CombatConfig.get_int("combat_loot_points_base", 100)
points_per_stage = CombatConfig.get_int("combat_loot_points_per_stage", 50)
base_points = CombatConfig.get_int("combat_loot_points_base")
points_per_stage = CombatConfig.get_int("combat_loot_points_per_stage")
# 运势影响
fortune_mult = CombatConfig.get_float("combat_loot_fortune_multiplier", 0.5)
fortune_mult = CombatConfig.get_float("combat_loot_fortune_multiplier")
fortune_bonus = 1.0 + fortune_value * fortune_mult
# 果酒收益加成
@@ -815,11 +815,11 @@ class CombatService:
# 2. 掉落物品(权重随机)
loot_weights = {
"equipment": CombatConfig.get_int("combat_loot_weight_equipment", 20),
"material": CombatConfig.get_int("combat_loot_weight_material", 25),
"souvenir": CombatConfig.get_int("combat_loot_weight_souvenir", 5),
"potion": CombatConfig.get_int("combat_loot_weight_potion", 8),
"seed": CombatConfig.get_int("combat_loot_weight_seed", 2),
"equipment": CombatConfig.get_int("combat_loot_weight_equipment"),
"material": CombatConfig.get_int("combat_loot_weight_material"),
"souvenir": CombatConfig.get_int("combat_loot_weight_souvenir"),
"potion": CombatConfig.get_int("combat_loot_weight_potion"),
"seed": CombatConfig.get_int("combat_loot_weight_seed"),
}
# 根据阶段决定掉落数量
@@ -1363,7 +1363,7 @@ class CombatService:
def _calculate_defense_reduction(self, defense: float) -> float:
"""计算防御减伤率"""
def_coef = CombatConfig.get_float("combat_pvp_defense_coefficient", 100.0)
def_coef = CombatConfig.get_float("combat_pvp_defense_coefficient")
return defense / (defense + def_coef)
def _end_battle(
@@ -1390,7 +1390,7 @@ class CombatService:
)
# 2. 积分转移
reward = CombatConfig.get_int("combat_pvp_reward_points", 1000)
reward = CombatConfig.get_int("combat_pvp_reward_points")
config_api: WPSConfigAPI = Architecture.Get(WPSConfigAPI)
loser_points = config_api.get_user_points(0, loser_id)
@@ -1472,7 +1472,7 @@ class CombatService:
def check_battle_timeout(self) -> None:
"""检查战斗超时"""
timeout_seconds = CombatConfig.get_int("combat_pvp_turn_timeout", 300)
timeout_seconds = CombatConfig.get_int("combat_pvp_turn_timeout")
cursor = self._db.conn.cursor()
cursor.execute(