update more weapons
This commit is contained in:
@@ -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 逻辑
|
||||
|
||||
@@ -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]:
|
||||
|
||||
@@ -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, "辅助装备", "无")
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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] - 合法动作列表
|
||||
|
||||
@@ -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'])
|
||||
|
||||
|
||||
Reference in New Issue
Block a user