update more weapons

This commit is contained in:
bridge
2025-11-14 12:54:35 +08:00
parent 510b6f34cd
commit efba680269
8 changed files with 126 additions and 42 deletions

View File

@@ -58,6 +58,15 @@ class Cultivate(TimedAction):
return True, ""
def start(self) -> Event:
# 计算修炼时长缩减
reduction = float(self.avatar.effects.get("cultivate_duration_reduction", 0.0))
reduction = max(0.0, min(0.9, reduction)) # 限制在 [0, 0.9] 范围内
# 动态设置此次修炼的实际duration四舍五入确保为整数月份
base_duration = self.__class__.duration_months
actual_duration = max(1, round(base_duration * (1.0 - reduction)))
self.duration_months = actual_duration
return Event(self.world.month_stamp, f"{self.avatar.name}{self.avatar.tile.region.name} 开始修炼", related_avatars=[self.avatar.id])
# TimedAction 已统一 step 逻辑

View File

@@ -23,7 +23,16 @@ class PlunderMortals(TimedAction):
region = self.avatar.tile.region
if not isinstance(region, CityRegion):
return
gain = self.GAIN
# 基础收益
base_gain = self.GAIN
# 应用搜刮收益倍率
multiplier_raw = self.avatar.effects.get("extra_plunder_multiplier", 0.0)
multiplier = 1.0 + float(multiplier_raw or 0.0)
# 计算最终收益
gain = int(base_gain * multiplier)
self.avatar.magic_stone = self.avatar.magic_stone + gain
def can_start(self) -> tuple[bool, str]:

View File

@@ -621,12 +621,16 @@ class Avatar(AvatarSaveMixin, AvatarLoadMixin):
if self.weapon is not None:
r, g, b = self.weapon.grade.color_rgb
weapon_text = f"<color:{r},{g},{b}>{self.weapon.get_info()}</color>"
if self.weapon.desc:
weapon_text += f"{self.weapon.desc}"
add_kv(lines, "兵器", weapon_text)
# 辅助装备(可选,使用颜色标记等级)
if self.auxiliary is not None:
r, g, b = self.auxiliary.grade.color_rgb
auxiliary_text = f"<color:{r},{g},{b}>{self.auxiliary.get_info()}</color>"
if self.auxiliary.desc:
auxiliary_text += f"{self.auxiliary.desc}"
add_kv(lines, "辅助装备", auxiliary_text)
else:
add_kv(lines, "辅助装备", "")

View File

@@ -46,14 +46,39 @@ def get_base_strength(self_avatar: "Avatar") -> float:
def _combat_strength_vs(opponent: "Avatar", self_avatar: "Avatar") -> float:
"""
相对战斗力:= 基础战斗力 + 克制点数(若克制则+3)
相对战斗力:= 基础战斗力 + 克制点数(若克制则+3) + 境界压制点数
"""
base = get_base_strength(self_avatar)
# 属性克制加成
suppression_points = 0.0
if self_avatar.technique is not None and opponent.technique is not None:
if get_suppression_bonus(self_avatar.technique.attribute, opponent.technique.attribute) > 0.0:
suppression_points = _SUPPRESSION_POINTS
return base + suppression_points
# 境界压制加成
realm_bonus_points = 0.0
realm_suppression_bonus_raw = self_avatar.effects.get("realm_suppression_bonus", 0.0)
if realm_suppression_bonus_raw:
realm_suppression_bonus = float(realm_suppression_bonus_raw or 0.0)
# 计算境界差(大境界)
from src.classes.cultivation import Realm
realm_order = {
Realm.Qi_Refinement: 1,
Realm.Foundation_Establishment: 2,
Realm.Core_Formation: 3,
Realm.Nascent_Soul: 4,
}
self_realm_rank = realm_order.get(self_avatar.cultivation_progress.realm, 1)
opponent_realm_rank = realm_order.get(opponent.cultivation_progress.realm, 1)
realm_diff = self_realm_rank - opponent_realm_rank
# 如果境界更高,则获得加成
if realm_diff > 0:
# 按基础战斗力的百分比计算加成点数
realm_bonus_points = base * realm_suppression_bonus * realm_diff
return base + suppression_points + realm_bonus_points
def _strength_diff(attacker: "Avatar", defender: "Avatar") -> float:

View File

@@ -59,6 +59,14 @@ EXTRA_CULTIVATE_EXP = "extra_cultivate_exp"
说明: 每次修炼时额外获得的经验值
"""
CULTIVATE_DURATION_REDUCTION = "cultivate_duration_reduction"
"""
修炼时长缩减
类型: float (范围: 0.0 ~ 0.9建议不超过0.5)
结算: src/classes/action/cultivate.py
说明: 修炼动作的时长缩减比例(如 0.2 表示缩减20%10个月变为8个月
"""
EXTRA_BREAKTHROUGH_SUCCESS_RATE = "extra_breakthrough_success_rate"
"""
额外突破成功率
@@ -171,6 +179,14 @@ DAMAGE_REDUCTION = "damage_reduction"
说明: 受到伤害的减免比例(如 0.1 表示减少10%伤害)
"""
REALM_SUPPRESSION_BONUS = "realm_suppression_bonus"
"""
境界压制加成
类型: float (倍率,如 0.15 表示每高一个大境界获得15%战斗力加成)
结算: src/classes/battle.py
说明: 当角色境界高于对手时,每高一个大境界额外增加战斗力点数
"""
# --- 经济相关 ---
EXTRA_ITEM_SELL_PRICE_MULTIPLIER = "extra_item_sell_price_multiplier"
"""
@@ -180,6 +196,14 @@ EXTRA_ITEM_SELL_PRICE_MULTIPLIER = "extra_item_sell_price_multiplier"
说明: 出售物品时的价格倍率
"""
EXTRA_PLUNDER_MULTIPLIER = "extra_plunder_multiplier"
"""
额外搜刮收益倍率
类型: float (倍率,如 0.5 表示增加50%1.0 表示翻倍)
结算: src/classes/action/plunder_mortals.py
说明: 搜刮凡人时的灵石收益倍率
"""
# --- 特殊权限 ---
LEGAL_ACTIONS = "legal_actions"
"""
@@ -248,9 +272,11 @@ ALL_EFFECTS = [
"extra_max_mp", # int - 额外最大灵力值
"extra_observation_radius", # int - 额外观察半径
"damage_reduction", # float - 伤害减免
"realm_suppression_bonus", # float - 境界压制加成
# 修炼相关
"extra_cultivate_exp", # int - 额外修炼经验
"cultivate_duration_reduction", # float - 修炼时长缩减
"extra_breakthrough_success_rate", # float - 额外突破成功率
# 双修相关
@@ -282,6 +308,7 @@ ALL_EFFECTS = [
# 经济相关
"extra_item_sell_price_multiplier", # float - 额外物品出售价格倍率
"extra_plunder_multiplier", # float - 额外搜刮收益倍率
# 特殊权限
"legal_actions", # list[str] - 合法动作列表

View File

@@ -63,19 +63,6 @@ def random_gender() -> Gender:
return Gender.MALE if random.random() < 0.5 else Gender.FEMALE
# 装备概率配置(便于维护和扩展)
_EQUIPMENT_PROBABILITIES = {
'weapon': (0.01, 0.05), # 武器1%法宝5%宝物
'auxiliary': { # 辅助装备:分层概率
'Qi_Refinement': (0.0, 0.05),
'Foundation_Establishment': (0.02, 0.08),
'Core_Formation': (0.05, 0.15),
'Nascent_Soul': (0.10, 0.20),
'default': (0.0, 0.05),
}
}
def _get_equipment_probabilities_by_realm(realm, equipment_type: str) -> tuple[float, float]:
"""
根据境界和装备类型获取法宝、宝物的概率
@@ -88,10 +75,16 @@ def _get_equipment_probabilities_by_realm(realm, equipment_type: str) -> tuple[f
(artifact_prob, treasure_prob): 法宝概率和宝物概率
"""
if equipment_type == 'weapon':
return _EQUIPMENT_PROBABILITIES['weapon']
return (0.05, 0.25) # 武器5%法宝25%宝物
# 辅助装备:根据境界查询
auxiliary_probs = _EQUIPMENT_PROBABILITIES['auxiliary']
# 辅助装备:根据境界分层
auxiliary_probs = {
'Qi_Refinement': (0.05, 0.20),
'Foundation_Establishment': (0.10, 0.35),
'Core_Formation': (0.20, 0.50),
'Nascent_Soul': (0.35, 0.60),
'default': (0.05, 0.20),
}
realm_name = realm.name if hasattr(realm, 'name') else 'default'
return auxiliary_probs.get(realm_name, auxiliary_probs['default'])