From efba68026978ea8a9a6744f5523e9bdad69f3753 Mon Sep 17 00:00:00 2001 From: bridge Date: Fri, 14 Nov 2025 12:54:35 +0800 Subject: [PATCH] update more weapons --- src/classes/action/cultivate.py | 9 ++++++ src/classes/action/plunder_mortals.py | 11 ++++++- src/classes/avatar.py | 4 +++ src/classes/battle.py | 29 +++++++++++++++-- src/classes/effects.py | 27 ++++++++++++++++ src/sim/new_avatar.py | 25 ++++++--------- static/game_configs/auxiliary.csv | 45 +++++++++++++++------------ static/game_configs/weapon.csv | 18 +++++++++-- 8 files changed, 126 insertions(+), 42 deletions(-) diff --git a/src/classes/action/cultivate.py b/src/classes/action/cultivate.py index d3c1b56..0679b21 100644 --- a/src/classes/action/cultivate.py +++ b/src/classes/action/cultivate.py @@ -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 逻辑 diff --git a/src/classes/action/plunder_mortals.py b/src/classes/action/plunder_mortals.py index 135f262..38c9a01 100644 --- a/src/classes/action/plunder_mortals.py +++ b/src/classes/action/plunder_mortals.py @@ -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]: diff --git a/src/classes/avatar.py b/src/classes/avatar.py index ec34d56..767493e 100644 --- a/src/classes/avatar.py +++ b/src/classes/avatar.py @@ -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"{self.weapon.get_info()}" + 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"{self.auxiliary.get_info()}" + if self.auxiliary.desc: + auxiliary_text += f"({self.auxiliary.desc})" add_kv(lines, "辅助装备", auxiliary_text) else: add_kv(lines, "辅助装备", "无") diff --git a/src/classes/battle.py b/src/classes/battle.py index 406689b..b7c3a4d 100644 --- a/src/classes/battle.py +++ b/src/classes/battle.py @@ -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: diff --git a/src/classes/effects.py b/src/classes/effects.py index 9348580..f20e47d 100644 --- a/src/classes/effects.py +++ b/src/classes/effects.py @@ -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] - 合法动作列表 diff --git a/src/sim/new_avatar.py b/src/sim/new_avatar.py index d67389b..99e90bf 100644 --- a/src/sim/new_avatar.py +++ b/src/sim/new_avatar.py @@ -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']) diff --git a/static/game_configs/auxiliary.csv b/static/game_configs/auxiliary.csv index 48b12a3..f7f8479 100644 --- a/static/game_configs/auxiliary.csv +++ b/static/game_configs/auxiliary.csv @@ -1,23 +1,28 @@ id,name,grade,sect_id,desc,effects ,名称,等级(普通/宝物/法宝),所属宗门ID(见sect.csv),描述/提示词,"JSON形式(支持宽松格式,见effects.py说明)" -2,灵舟,法宝,9,小舟承灵气,御风渡海,千里一瞬.,{extra_move_step: 1} -3,千里镜,法宝,3,澄澈如镜,观千里之外,洞察先机.,{extra_observation_radius: 2} -5,聚灵阵盘,法宝,5,刻阵成盘,聚纳灵机,修行事半功倍.,{extra_cultivate_exp: 50} -7,万欲同心结,法宝,6,情意同心,双修之道相互映照,修为更精进.,{extra_dual_cultivation_exp: 100} -8,影遁披风,法宝,8,融身影界,来去无踪,伏击出其不意.,"{extra_move_step: 1, extra_observation_radius: 1}" -9,百兽驭兽符,法宝,2,以兽纹灵符加持,唤引兽心,御兽更易.,{extra_catch_success_rate: 0.1} -10,金刚护体罩,法宝,7,镇魂宗护法至宝,以金刚真气凝成护体罩,可御万法、护元神.,"{damage_reduction: 0.2, extra_max_hp: 200}" -11,长生延年丹炉,法宝,4,冥王宗炼丹至宝,蕴幽冥生机,可逆夺天命,延寿驻颜.,"{extra_max_lifespan: 150, extra_hp_recovery_rate: 0.5}" -12,聚宝天盘,法宝,9,千帆城商道至宝,可聚四方财气,凡持此盘者,财源滚滚,奇遇不断.,"{extra_item_sell_price_multiplier: 0.5, extra_fortune_probability: 0.1}" -13,九转炼器炉,法宝,5,朱勾宗炼器至宝,九转炼化,可点化凡铁为神兵,养器如养身.,"{extra_weapon_upgrade_chance: 0.15, extra_weapon_proficiency_gain: 0.5}" -14,明心剑匣,法宝,1,明心剑宗传承至宝,内蕴剑道真意,可明心见性,突破瓶颈.,"{extra_breakthrough_success_rate: 0.2, extra_cultivate_exp: 100}" -15,玄龟甲,宝物,7,以千年玄龟之甲炼成,可护身御邪.,{damage_reduction: 0.08} -16,回春石,宝物,,蕴含生机的灵石,可加速伤势愈合.,{extra_hp_recovery_rate: 0.3} -17,延寿宝珠,宝物,,稀有宝珠,持有可延年益寿.,{extra_max_lifespan: 50} -18,商道玉符,宝物,9,千帆城商会信物,持此符可享商道优待.,{extra_item_sell_price_multiplier: 0.2} -19,淬器石,宝物,5,辅助温养兵器的奇石,可提升兵器品质.,{extra_weapon_upgrade_chance: 0.05} -20,洞察神瞳,宝物,3,水镜宗瞳术秘宝,可洞察先机,寻得奇遇.,"{extra_observation_radius: 1, extra_fortune_probability: 0.05}" -21,轻灵羽衣,宝物,8,轻若无物的灵衣,身法飘逸,进退自如.,"{extra_escape_success_rate: 0.15, extra_move_step: 1}" -22,炼心佛珠,宝物,7,百八佛珠,可镇心神,助突破心魔.,{extra_breakthrough_success_rate: 0.1} -23,护元宝甲,宝物,1,剑宗弟子护身宝甲,轻便而坚固.,"{extra_max_hp: 100, damage_reduction: 0.05}" +2001,玄龟甲,宝物,7,以千年玄龟之甲炼成,可护身御邪.,{damage_reduction: 0.08} +2002,回春石,宝物,,蕴含生机的灵石,可加速伤势愈合.,{extra_hp_recovery_rate: 0.3} +2003,延寿宝珠,宝物,,稀有宝珠,持有可延年益寿.,{extra_max_lifespan: 50} +2004,商道玉符,宝物,9,千帆城商会信物,持此符可享商道优待.,{extra_item_sell_price_multiplier: 0.2} +2005,淬器石,宝物,5,辅助温养兵器的奇石,可提升兵器品质.,{extra_weapon_upgrade_chance: 0.05} +2006,洞察神瞳,宝物,3,水镜宗瞳术秘宝,可洞察先机,寻得奇遇.,"{extra_observation_radius: 1, extra_fortune_probability: 0.05}" +2007,轻灵羽衣,宝物,8,轻若无物的灵衣,身法飘逸,进退自如.,"{extra_escape_success_rate: 0.15, extra_move_step: 1}" +2008,炼心佛珠,宝物,7,百八佛珠,可镇心神,助突破心魔.,{extra_breakthrough_success_rate: 0.1} +2009,护元宝甲,宝物,1,剑宗弟子护身宝甲,轻便而坚固.,"{extra_max_hp: 100, damage_reduction: 0.05}" +2010,悟道蒲团,宝物,,枯坐蒲团,入定修炼,事半功倍.,{cultivate_duration_reduction: 0.2} +2011,掠财鬼面,宝物,,邪道面具,可增幅搜刮凡人时的收益.,{extra_plunder_multiplier: 0.5} +3001,灵舟,法宝,9,小舟承灵气,御风渡海,千里一瞬.,{extra_move_step: 1} +3002,千里镜,法宝,3,澄澈如镜,观千里之外,洞察先机.,{extra_observation_radius: 2} +3003,聚灵阵盘,法宝,5,刻阵成盘,聚纳灵机,修行事半功倍.,{extra_cultivate_exp: 50} +3004,万欲同心结,法宝,6,情意同心,双修之道相互映照,修为更精进.,{extra_dual_cultivation_exp: 100} +3005,影遁披风,法宝,8,融身影界,来去无踪,伏击出其不意.,"{extra_move_step: 1, extra_observation_radius: 1}" +3006,百兽驭兽符,法宝,2,以兽纹灵符加持,唤引兽心,御兽更易.,{extra_catch_success_rate: 0.1} +3007,金刚护体罩,法宝,7,镇魂宗护法至宝,以金刚真气凝成护体罩,可御万法、护元神.,"{damage_reduction: 0.2, extra_max_hp: 200}" +3008,长生延年丹炉,法宝,4,冥王宗炼丹至宝,蕴幽冥生机,可逆夺天命,延寿驻颜.,"{extra_max_lifespan: 150, extra_hp_recovery_rate: 0.5}" +3009,聚宝天盘,法宝,9,千帆城商道至宝,可聚四方财气,凡持此盘者,财源滚滚,奇遇不断.,"{extra_item_sell_price_multiplier: 0.5, extra_fortune_probability: 0.1}" +3010,九转炼器炉,法宝,5,朱勾宗炼器至宝,九转炼化,可点化凡铁为神兵,养器如养身.,"{extra_weapon_upgrade_chance: 0.15, extra_weapon_proficiency_gain: 0.5}" +3011,明心剑匣,法宝,1,明心剑宗传承至宝,内蕴剑道真意,可明心见性,突破瓶颈.,"{extra_breakthrough_success_rate: 0.2, extra_cultivate_exp: 100}" +3012,威压玉佩,法宝,,蕴含上古威压,可对低境界者形成压制.,{realm_suppression_bonus: 0.15} +3013,疾风修炼垫,法宝,5,朱勾宗炼制,可加速修炼进度.,"{cultivate_duration_reduction: 0.3, extra_cultivate_exp: 50}" +3014,血煞掠夺旗,法宝,,邪道至宝,大幅提升搜刮收益和境界压制.,"{extra_plunder_multiplier: 1.0, realm_suppression_bonus: 0.2}" diff --git a/static/game_configs/weapon.csv b/static/game_configs/weapon.csv index 8d2a133..f729b01 100644 --- a/static/game_configs/weapon.csv +++ b/static/game_configs/weapon.csv @@ -1,8 +1,5 @@ id,name,weapon_type,grade,sect_id,desc,effects ,名称,兵器类型,等级(普通/宝物/法宝),所属宗门ID(见sect.csv),描述/提示词,"JSON形式(支持宽松格式,见effects.py说明)" -1,本命剑匣,剑,法宝,1,以心御剑,匣启如霆,剑意随心破万法.,{extra_battle_strength_points: 3} -4,镇魂钟,棍,法宝,7,钟鸣摄魄,定魂镇邪,护心安魂.,"{extra_battle_strength_points: 2, extra_observation_radius: 1}" -6,万魂幡,扇,法宝,4,幡起万魂啾啾,阴风过境.,"{legal_actions: ['DevourMortals'], extra_battle_strength_points: 'avatar.weapon.special_data.get(""devoured_souls"", 0) // 100 * 0.1'}" 1001,凡品剑,剑,普通,,平凡无奇的剑。,{extra_battle_strength_points: 1} 1002,凡品刀,刀,普通,,平凡无奇的刀。,{extra_battle_strength_points: 1} 1003,凡品枪,枪,普通,,平凡无奇的枪。,{extra_battle_strength_points: 1} @@ -21,4 +18,19 @@ id,name,weapon_type,grade,sect_id,desc,effects 2007,瑶光琴,琴,宝物,,琴音悠扬,助人悟道。,"{extra_battle_strength_points: 2, cultivation_speed_rate: 1.1}" 2008,凤鸣笛,笛,宝物,,笛声如凤鸣九天,清心宁神。,"{extra_battle_strength_points: 2, cultivation_speed_rate: 1.1}" 2009,追魂刺,暗器,宝物,,暗器如影随形,取人性命于无声。,{extra_battle_strength_points: 2} +2010,灵兽骨笛,笛,宝物,2,以灵兽之骨炼成,可与兽类心意相通。,"[{extra_battle_strength_points: 1}, {when: 'avatar.spirit_animal is not None', extra_battle_strength_points: 2}]" +2011,赤焰战刀,刀,宝物,,烈火淬炼而成,刀身赤红似火。,{extra_battle_strength_points: 2} +2012,玄铁重剑,剑,宝物,,重剑无锋,大巧不工。,"{extra_battle_strength_points: 2, extra_max_hp: 100}" +2013,碧波软剑,剑,宝物,,轻灵如水,剑法飘逸。,"{extra_battle_strength_points: 2, extra_escape_success_rate: 0.1}" +2014,伏魔降妖棍,棍,宝物,7,镇魂宗弟子常用,正气凛然。,"{extra_battle_strength_points: 2, extra_max_mp: 100}" +3001,本命剑匣,剑,法宝,1,以心御剑,匣启如霆,剑意随心破万法.,{extra_battle_strength_points: 3} +3002,镇魂钟,棍,法宝,7,钟鸣摄魄,定魂镇邪,护心安魂.,"{extra_battle_strength_points: 2, extra_observation_radius: 1}" +3003,万魂幡,扇,法宝,4,幡起万魂啾啾,阴风过境.,"{legal_actions: ['DevourMortals'], extra_battle_strength_points: 'avatar.weapon.special_data.get(""devoured_souls"", 0) // 100 * 0.1'}" +3004,百战破军枪,枪,法宝,9,千帆城名器,百战淬炼,熟能生巧,威力与熟练度共长。,"{extra_battle_strength_points: '2 + avatar.weapon.proficiency * 0.01'}" +3005,霸王战戟,枪,法宝,,上古霸王遗兵,境界越高威力越强,可对低境界者形成压制。,"[{extra_battle_strength_points: 2}, {when: 'avatar.cultivation.level >= 30', extra_battle_strength_points: 2, realm_suppression_bonus: 0.1}]" +3006,千手灭魂箭,暗器,法宝,5,朱勾宗杀器,暗箭如雨,来去无踪。,"{extra_battle_strength_points: 3, extra_observation_radius: 1, extra_escape_success_rate: 0.15}" +3007,剑宗诛邪剑,剑,法宝,1,明心剑宗传承圣剑,克制邪道。,{extra_battle_strength_points: 3} +3008,阴阳双刃,剑,法宝,,正邪同体,阴阳调和,兼具两面之力。,"{extra_battle_strength_points: 2, extra_max_hp: 100, extra_max_mp: 100}" +3009,虚空之扇,扇,法宝,,扇动间可窥破虚空,千里瞬至。,"{extra_battle_strength_points: 2, extra_observation_radius: 2, extra_move_step: 1}" +3010,鬼哭神嚎锤,棍,法宝,,邪道重兵,锤起鬼哭神嚎,刚猛无匹。,"{extra_battle_strength_points: 3, damage_reduction: 0.1}"