1.完成战斗/冒险系统2.新增help类
This commit is contained in:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user