diff --git a/assets/screenshot.png b/assets/screenshot.png index 660b07c..7980a02 100644 Binary files a/assets/screenshot.png and b/assets/screenshot.png differ diff --git a/src/classes/alignment.py b/src/classes/alignment.py index 382e04c..adc142d 100644 --- a/src/classes/alignment.py +++ b/src/classes/alignment.py @@ -45,7 +45,7 @@ class Alignment(Enum): t = str(text).strip().lower() if t in {"正", "righteous", "right"}: return Alignment.RIGHTEOUS - if t in {"中", "neutral", "middle", "center"}: + if t in {"中", "中立", "neutral", "middle", "center"}: return Alignment.NEUTRAL if t in {"邪", "evil"}: return Alignment.EVIL @@ -54,7 +54,7 @@ class Alignment(Enum): alignment_strs = { Alignment.RIGHTEOUS: "正", - Alignment.NEUTRAL: "中", + Alignment.NEUTRAL: "中立", Alignment.EVIL: "邪", } diff --git a/src/classes/avatar.py b/src/classes/avatar.py index 1e03944..e53a3b2 100644 --- a/src/classes/avatar.py +++ b/src/classes/avatar.py @@ -535,23 +535,6 @@ class Avatar(AvatarSaveMixin, AvatarLoadMixin): """ self.age.update_age(current_month_stamp, self.birth_month_stamp) - def get_age_info(self) -> dict: - """ - 获取年龄相关信息 - - 返回: - 包含年龄、期望寿命、死亡概率等信息的字典 - """ - current_age, expected_lifespan = self.age.get_lifespan_progress() - death_probability = self.age.get_death_probability() - - return { - "current_age": round(current_age, 2), - "expected_lifespan": expected_lifespan, - "is_elderly": self.age.is_elderly(), - "death_probability": round(death_probability, 4), - "realm": self.cultivation_progress.realm.value - } def is_in_region(self, region: Region|None) -> bool: current_region = self.tile.region @@ -640,25 +623,6 @@ class Avatar(AvatarSaveMixin, AvatarLoadMixin): if to_sidebar: self._pending_events.append(event) - def get_action_space_str(self) -> str: - action_space = self.get_action_space() - action_space_str = json.dumps(action_space, ensure_ascii=False) - return action_space_str - - def get_action_space(self) -> list[dict]: - """ - 获取动作空间 - """ - from src.classes.actions import ALL_ACTUAL_ACTION_NAMES - actual_actions = [self.create_action(action_cls_name) for action_cls_name in ALL_ACTUAL_ACTION_NAMES] - doable_actions: list[Action] = [] - for action in actual_actions: - # 用 can_start 的无参形式,用于“是否在动作空间中显示” - ok, _reason = action.can_start() - if ok: - doable_actions.append(action) - action_space = [action.name for action in doable_actions] - return action_space def get_expanded_info( self, @@ -827,13 +791,6 @@ class Avatar(AvatarSaveMixin, AvatarLoadMixin): from src.classes.relations import clear_relation clear_relation(self, other) - def _get_relations_summary_str(self, max_count: int = 8) -> str: - entries: list[str] = [] - for other in self.relations.keys(): - entries.append(self.get_other_avatar_info(other)) - if not entries: - return "无" - return ",".join(entries[:max_count]) def get_co_region_avatars(self, avatars: List["Avatar"]) -> List["Avatar"]: """ diff --git a/src/classes/battle.py b/src/classes/battle.py index b7c3a4d..4d59e92 100644 --- a/src/classes/battle.py +++ b/src/classes/battle.py @@ -12,11 +12,6 @@ if TYPE_CHECKING: # 战斗力参数(参考文明6思想,但适配本项目数值体系) _STRENGTH_LOG_SCALE: float = 10.0 # 修为强度的对数缩放:10×ln(1+level) -_GRADE_POINTS = { - TechniqueGrade.LOWER: 0.0, - TechniqueGrade.MIDDLE: 3.0, - TechniqueGrade.UPPER: 6.0, -} _SUPPRESSION_POINTS: float = 3.0 # 属性克制即加固定战斗力点数 _CIV6_K: float = 0.04 # 伤害指数系数:e^(K×差值) _WIN_BETA: float = 0.15 # 胜率逻辑函数斜率 @@ -31,17 +26,15 @@ _PAIR_BIAS: float = 1.1 # 成对偏置:让败者再多一 def get_base_strength(self_avatar: "Avatar") -> float: """ 基础战斗力:与对手无关。 - = 10×ln(1+修为等级) + 品阶点数(0/3/6) + = 10×ln(1+修为等级) + 额外效果点数 """ level = max(1, self_avatar.cultivation_progress.level) strength_from_level = _STRENGTH_LOG_SCALE * math.log1p(level) - grade_points = 0.0 - if self_avatar.technique is not None: - grade_points = _GRADE_POINTS.get(self_avatar.technique.grade, 0.0) - # 来自效果的额外战斗力点数(例如法宝带来的被动加成) + + # 来自效果的额外战斗力点数(例如功法、法宝带来的被动加成) extra_raw = self_avatar.effects.get("extra_battle_strength_points", 0) extra_points = float(extra_raw or 0.0) - return strength_from_level + grade_points + extra_points + return strength_from_level + extra_points def _combat_strength_vs(opponent: "Avatar", self_avatar: "Avatar") -> float: diff --git a/src/classes/technique.py b/src/classes/technique.py index 96bd807..c2c5cac 100644 --- a/src/classes/technique.py +++ b/src/classes/technique.py @@ -252,47 +252,10 @@ def get_technique_by_sect(sect) -> Technique: return random.choices(candidates, weights=weights, k=1)[0] -def get_grade_bonus(grade: TechniqueGrade) -> float: - if grade is TechniqueGrade.UPPER: - return 0.10 - if grade is TechniqueGrade.MIDDLE: - return 0.05 - return 0.0 - - def get_suppression_bonus(att_attr: TechniqueAttribute, def_attr: TechniqueAttribute) -> float: return 0.10 if def_attr in SUPPRESSION.get(att_attr, set()) else 0.0 -# 相对品阶优势加成:按“品阶差×步进”的方式计算 -# - 品阶映射:下品=0,中品=1,上品=2 -# - 每级差距步进:5%(最大±10%) -_GRADE_RANK: dict[TechniqueGrade, int] = { - TechniqueGrade.LOWER: 0, - TechniqueGrade.MIDDLE: 1, - TechniqueGrade.UPPER: 2, -} - - -def get_grade_advantage_bonus(attacker_grade: Optional[TechniqueGrade], defender_grade: Optional[TechniqueGrade]) -> float: - """ - 根据双方品阶差计算进攻方的相对加成: - - diff = rank(att) - rank(def) - - bonus = 0.05 × diff,夹紧到 [-0.10, 0.10] - - 任一为空则视为无加成 - 返回:进攻方概率或伤害的相对加成(可为负)。 - """ - if attacker_grade is None or defender_grade is None: - return 0.0 - diff = _GRADE_RANK[attacker_grade] - _GRADE_RANK[defender_grade] - bonus = 0.05 * diff - if bonus > 0.10: - bonus = 0.10 - if bonus < -0.10: - bonus = -0.10 - return bonus - - # 将功法属性映射为默认的灵根(邪功法不返回) def attribute_to_root(attr: TechniqueAttribute) -> Optional[Root]: diff --git a/src/server/main.py b/src/server/main.py index 82cd20e..1964b32 100644 --- a/src/server/main.py +++ b/src/server/main.py @@ -35,6 +35,8 @@ game_instance = { "is_paused": True # 默认启动为暂停状态,等待前端连接唤醒 } +# 触发配置重载的标记 (technique.csv updated) + # 简易的命令行参数检查 (不使用 argparse 以避免冲突和时序问题) IS_DEV_MODE = "--dev" in sys.argv @@ -411,20 +413,6 @@ def get_map(): "regions": regions_data } -@app.post("/api/step") -async def step_world(): - """手动触发一帧(一个月)""" - sim = game_instance["sim"] - if not sim: - return {"error": "Sim not initialized"} - - events = await sim.step() - - return { - "message": "Step executed", - "event_count": len(events), - "events_sample": [str(e) for e in events[:5]] - } @app.post("/api/control/pause") def pause_game(): diff --git a/src/server/main_test.py b/src/server/main_test.py deleted file mode 100644 index ad3d39d..0000000 --- a/src/server/main_test.py +++ /dev/null @@ -1,16 +0,0 @@ -from fastapi import FastAPI -import uvicorn - -app = FastAPI() - -@app.get("/") -def read_root(): - return {"Hello": "World"} - -@app.get("/api/state") -def get_state(): - return {"status": "ok"} - -if __name__ == "__main__": - uvicorn.run(app, host="0.0.0.0", port=8001) - diff --git a/src/utils/effect_desc.py b/src/utils/effect_desc.py index 4fc04e9..9ee7682 100644 --- a/src/utils/effect_desc.py +++ b/src/utils/effect_desc.py @@ -20,12 +20,22 @@ EFFECT_DESC_MAP = { "extra_escape_success_rate": "逃跑成功率", "extra_observation_radius": "感知范围", "extra_move_step": "移动步长", + "legal_actions": "特殊能力", +} + +ACTION_DESC_MAP = { + "DualCultivation": "双修", + "DevourMortals": "吞噬凡人", } def format_value(key: str, value: Any) -> str: """ 格式化效果数值 """ + if key == "legal_actions" and isinstance(value, list): + actions = [ACTION_DESC_MAP.get(str(a), str(a)) for a in value] + return "、".join(actions) + if isinstance(value, (int, float)): # 处理百分比类型的字段 if "rate" in key or "probability" in key or "chance" in key or "multiplier" in key or "gain" in key: @@ -69,10 +79,13 @@ def format_effects_to_text(effects: dict[str, Any] | list[dict[str, Any]]) -> st # 跳过 eval 表达式或者无法解析的 key,或者直接显示 key name = EFFECT_DESC_MAP.get(k, k) - # 如果是 eval 表达式(字符串形式) - if isinstance(v, str) and v.startswith("eval("): - # 尝试提取简单的描述,或者显示"特殊效果" - val_str = "特殊效果" + # 如果是 eval 表达式(字符串形式)或者看起来像代码 + if isinstance(v, str): + if v.startswith("eval(") or "avatar." in v or "//" in v: + # 尝试提取简单的描述,或者显示"特殊效果" + val_str = "特殊效果(动态)" + else: + val_str = format_value(k, v) else: val_str = format_value(k, v) diff --git a/static/game_configs/persona.csv b/static/game_configs/persona.csv index 781ffbd..ae906a7 100644 --- a/static/game_configs/persona.csv +++ b/static/game_configs/persona.csv @@ -1,5 +1,5 @@ id,name,exclusion_names,desc,rarity,condition,effects -,,和本persona互斥的persona的名称,描述/用于LLM输入的文本,稀有度(N/R/SR/SSR),选取条件(可用avatar字段/Alignment中文或英文等),"JSON形式(支持宽松格式,见effects.py说明)" +,,和本persona互斥的persona的名称,描述/用于LLM输入的文本,稀有度(N/R/SR/SSR),选取条件(可用avatar字段/Alignment中文或英文等),JSON形式(支持宽松格式,见effects.py说明) 1,理性,无常;随性,你总是会用逻辑来思考问题,做事会谋定而后动。,N, 2,无常,理性;极端正义;极端邪恶;沉思,目标飘忽不定,不会长期坚持一个目标。,N, 3,怠惰,冒险;极端正义;极端邪恶,你总是会拖延,不想努力,更热衷于享受人生。,N, @@ -11,7 +11,7 @@ id,name,exclusion_names,desc,rarity,condition,effects 9,沉思,无常,你总是会深思熟虑,思考问题比较有哲理。,N, 10,惜命,冒险;极端正义;极端邪恶,你总是会珍惜自己的生命,不会轻易冒险。,R,,{extra_escape_success_rate: 0.15} 11,友爱,孤僻;淡漠;好斗;复仇;极端正义;极端邪恶,你重视同伴与和谐,乐于助人,倾向通过协作与沟通化解矛盾。,N, -12,复仇,友爱;淡漠,"你绝不轻易放下仇怨,为了复仇愿意付出代价与时间。你必须立刻进行复仇行动。",N,, +12,复仇,友爱;淡漠,你绝不轻易放下仇怨,为了复仇愿意付出代价与时间。你必须立刻进行复仇行动。,N,, 13,孤僻,友爱,你喜欢独处,避免与人深交,更信赖自己的判断与行动。,N, 14,淡漠,友爱;复仇;好斗;极端正义;极端邪恶,你情感克制,对外界冷静疏离,不轻易被他人或事件影响。,N, 15,好斗,友爱;淡漠;惜命;胆小,你直面冲突,偏好以力量与对抗解决问题,并格外热衷增加己身战力。,R,,{extra_battle_strength_points: 1} @@ -23,8 +23,8 @@ id,name,exclusion_names,desc,rarity,condition,effects 21,外向,孤僻;淡漠;内向,你乐于与人交流,主动结识伙伴,倾向接受对话和合作。,N, 22,刻薄,友爱;热情,你在对话中倾向以讽刺、嘲弄、挖苦的方式表达自己,更容易引发冲突与对立;你通常不愿迅速进入友好关系,更可能在不顺利的交流后滋生敌意或结仇。,N, 23,热情,孤僻;淡漠;刻薄,你待人友好、积极回应,倾向用鼓励与赞美拉近距离;你更愿意主动展开善意的交流,乐于合作与分享,N, -24,极端正义,内向;极端邪恶,你对邪恶深恶痛绝,对正义的理想抱有近乎偏执的追求。,SR,avatar.alignment == "正",{extra_breakthrough_success_rate: 0.05} -25,极端邪恶,内向;极端正义,你推崇权力与恐惧,为达目的不择手段,对善良嗤之以鼻。,SR,avatar.alignment == "邪","{extra_breakthrough_success_rate: -0.05, extra_cultivate_exp: 20}" +24,极端正义,内向;极端邪恶,你对邪恶深恶痛绝,对正义的理想抱有近乎偏执的追求。,SR,"avatar.alignment == ""正""",{extra_breakthrough_success_rate: 0.05} +25,极端邪恶,内向;极端正义,你推崇权力与恐惧,为达目的不择手段,对善良嗤之以鼻。,SR,"avatar.alignment == ""邪""","{extra_breakthrough_success_rate: -0.05, extra_cultivate_exp: 20}" 26,开放,腼腆,你对待和他人结为道侣或者双修比较随意,R,,{extra_dual_cultivation_exp: 30} 27,腼腆,开放,你对待和他人结为道侣或者双修比较谨慎,N, 28,舔狗,孤僻;淡漠;刻薄;腼腆,你对异性中外貌出众者格外友善,倾向主动接近、帮助与合作。,N, @@ -32,26 +32,25 @@ id,name,exclusion_names,desc,rarity,condition,effects 30,穿越者,,你来自现代社会,怀念现代社会的一切,你的思考(thinking)必须是现代化的思考,SR, 31,气运之子,,天生气运加身,更易遇到奇遇,战斗力也略有提升,SSR,,"{extra_fortune_probability: 0.05, extra_battle_strength_points: 2, extra_breakthrough_success_rate: 0.05}" 32,剑痴,怠惰;胆小,以剑入道,剑即是命。你认为剑道至上,战力强悍,但对剑道之外的事物兴趣寥寥。,SR,,"[{when: 'avatar.weapon.type == WeaponType.SWORD', extra_weapon_proficiency_gain: 1.0, extra_battle_strength_points: 3}]" -33,散修,,无宗门庇护,四处寻找机缘,警惕性高,善于观察周围环境以自保求存。,N, -34,心机深沉,鲁莽;热情;外向,深藏不露,行事谨慎,善于算计。你不轻易暴露实力和想法,观察力敏锐,总在暗中盘算。,R, -35,忠诚,孤僻;淡漠;刻薄,重承诺守信义,对认定的人绝不背叛,愿为之赴死。你视背叛为最大耻辱。,R, -36,狠辣,友爱;热情;胆小,行事果决狠辣,不留后患,斩草必除根。你认为心慈手软只会害了自己。,N, -37,重生者,无常;随性,经历过一世,对未来有模糊预知,行事更有目的性。你比常人更清楚什么重要,什么是陷阱。,SSR, -38,疑心重,热情;外向;友爱,对任何人都保持怀疑,不轻易信任,时刻警惕他人可能的背叛和算计。,N, -39,体修,惜命;胆小,专注肉身淬炼,体魄强健,近战无敌。你相信肉身才是修行的根本,法术只是旁门左道。,R, -40,炼丹师,好斗,精通丹道,对灵药敏感,擅长炼制丹药。你认为丹药是修行的关键,战斗并非你的专长。,R, -41,福缘深厚,,天生福运,逢凶化吉。虽不如气运之子,但也常有小幸运眷顾。,SR,,{extra_fortune_probability: 0.02} -42,剑修,怠惰,对剑道有着深厚的兴趣和独特的天赋,持剑修炼时事半功倍。,R,,"[{when: 'avatar.weapon.type == WeaponType.SWORD', extra_weapon_proficiency_gain: 0.5, extra_battle_strength_points: 1}]" -43,刀修,怠惰,专精刀法,对刀道有着独特的理解,持刀修炼时事半功倍。,R,,"[{when: 'avatar.weapon.type == WeaponType.SABER', extra_weapon_proficiency_gain: 0.5, extra_battle_strength_points: 1}]" -44,枪修,怠惰,精通枪法,百兵之王在手,修炼速度远超常人。,R,,"[{when: 'avatar.weapon.type == WeaponType.SPEAR', extra_weapon_proficiency_gain: 0.5, extra_battle_strength_points: 1}]" -45,棍修,怠惰,棍棒在手,天下我有。对棍法有着天生的悟性。,R,,"[{when: 'avatar.weapon.type == WeaponType.STAFF', extra_weapon_proficiency_gain: 0.5, extra_battle_strength_points: 1}]" -46,音律大师,怠惰,精通音律之道,琴笛在手,可攻可守,修炼速度远超常人。,SR,,"[{when: 'avatar.weapon.type == WeaponType.ZITHER or avatar.weapon.type == WeaponType.FLUTE', extra_weapon_proficiency_gain: 1.0, extra_battle_strength_points: 3}]" -47,暗器高手,怠惰,擅长使用暗器,出手诡秘莫测,修炼暗器技巧时事半功倍。,R,,"[{when: 'avatar.weapon.type == WeaponType.HIDDEN_WEAPON', extra_weapon_proficiency_gain: 0.5, extra_battle_strength_points: 1}]" -48,扇修,怠惰,精通扇法,举手投足间尽显风流,持扇修炼时事半功倍。,R,,"[{when: 'avatar.weapon.type == WeaponType.FAN', extra_weapon_proficiency_gain: 0.5, extra_battle_strength_points: 1}]" -49,鞭修,怠惰,精通鞭法,软兵器在手,刚柔并济,修炼速度远超常人。,R,,"[{when: 'avatar.weapon.type == WeaponType.WHIP', extra_weapon_proficiency_gain: 0.5, extra_battle_strength_points: 1}]" -50,刀痴,怠惰;胆小,以刀入道,刀即是命。你认为刀法至上,战力强悍,但对刀道之外的事物兴趣寥寥。,SR,,"[{when: 'avatar.weapon.type == WeaponType.SABER', extra_weapon_proficiency_gain: 1.0, extra_battle_strength_points: 3}]" -51,枪痴,怠惰;胆小,以枪入道,枪即是命。你认为枪法至上,战力强悍,但对枪道之外的事物兴趣寥寥。,SR,,"[{when: 'avatar.weapon.type == WeaponType.SPEAR', extra_weapon_proficiency_gain: 1.0, extra_battle_strength_points: 3}]" -52,棍圣,怠惰;胆小,以棍入道,棍即是命。棍法通神,一棍在手,天下无敌,但对棍道之外的事物兴趣寥寥。,SR,,"[{when: 'avatar.weapon.type == WeaponType.STAFF', extra_weapon_proficiency_gain: 1.0, extra_battle_strength_points: 3}]" -53,扇痴,怠惰;胆小,以扇入道,扇即是命。你认为扇法至上,战力强悍,但对扇道之外的事物兴趣寥寥。,SR,,"[{when: 'avatar.weapon.type == WeaponType.FAN', extra_weapon_proficiency_gain: 1.0, extra_battle_strength_points: 3}]" -54,鞭痴,怠惰;胆小,以鞭入道,鞭即是命。你认为鞭法至上,战力强悍,但对鞭道之外的事物兴趣寥寥。,SR,,"[{when: 'avatar.weapon.type == WeaponType.WHIP', extra_weapon_proficiency_gain: 1.0, extra_battle_strength_points: 3}]" -55,暗影宗师,怠惰;胆小,暗器之道登峰造极,杀人于无形。出手必见血,战力惊人,但对暗器之外的事物兴趣寥寥。,SR,,"[{when: 'avatar.weapon.type == WeaponType.HIDDEN_WEAPON', extra_weapon_proficiency_gain: 1.0, extra_battle_strength_points: 3}]" +33,心机深沉,鲁莽;热情;外向,深藏不露,行事谨慎,善于算计。你不轻易暴露实力和想法,观察力敏锐,总在暗中盘算。,R, +34,忠诚,孤僻;淡漠;刻薄,重承诺守信义,对认定的人绝不背叛,愿为之赴死。你视背叛为最大耻辱。,R, +35,狠辣,友爱;热情;胆小,行事果决狠辣,不留后患,斩草必除根。你认为心慈手软只会害了自己。,N, +36,重生者,无常;随性,经历过一世,对未来有模糊预知,行事更有目的性。你比常人更清楚什么重要,什么是陷阱。,SSR, +37,疑心重,热情;外向;友爱,对任何人都保持怀疑,不轻易信任,时刻警惕他人可能的背叛和算计。,N, +38,体修,惜命;胆小,专注肉身淬炼,体魄强健,近战无敌。你相信肉身才是修行的根本,法术只是旁门左道。,R, +39,炼丹师,好斗,精通丹道,对灵药敏感,擅长炼制丹药。你认为丹药是修行的关键,战斗并非你的专长。,R, +40,福缘深厚,,天生福运,逢凶化吉。虽不如气运之子,但也常有小幸运眷顾。,SR,,{extra_fortune_probability: 0.02} +41,剑修,怠惰,对剑道有着深厚的兴趣和独特的天赋,持剑修炼时事半功倍。,R,,"[{when: 'avatar.weapon.type == WeaponType.SWORD', extra_weapon_proficiency_gain: 0.5, extra_battle_strength_points: 1}]" +42,刀修,怠惰,专精刀法,对刀道有着独特的理解,持刀修炼时事半功倍。,R,,"[{when: 'avatar.weapon.type == WeaponType.SABER', extra_weapon_proficiency_gain: 0.5, extra_battle_strength_points: 1}]" +43,枪修,怠惰,精通枪法,百兵之王在手,修炼速度远超常人。,R,,"[{when: 'avatar.weapon.type == WeaponType.SPEAR', extra_weapon_proficiency_gain: 0.5, extra_battle_strength_points: 1}]" +44,棍修,怠惰,棍棒在手,天下我有。对棍法有着天生的悟性。,R,,"[{when: 'avatar.weapon.type == WeaponType.STAFF', extra_weapon_proficiency_gain: 0.5, extra_battle_strength_points: 1}]" +45,音律大师,怠惰,精通音律之道,琴笛在手,可攻可守,修炼速度远超常人。,SR,,"[{when: 'avatar.weapon.type == WeaponType.ZITHER or avatar.weapon.type == WeaponType.FLUTE', extra_weapon_proficiency_gain: 1.0, extra_battle_strength_points: 3}]" +46,暗器高手,怠惰,擅长使用暗器,出手诡秘莫测,修炼暗器技巧时事半功倍。,R,,"[{when: 'avatar.weapon.type == WeaponType.HIDDEN_WEAPON', extra_weapon_proficiency_gain: 0.5, extra_battle_strength_points: 1}]" +47,扇修,怠惰,精通扇法,举手投足间尽显风流,持扇修炼时事半功倍。,R,,"[{when: 'avatar.weapon.type == WeaponType.FAN', extra_weapon_proficiency_gain: 0.5, extra_battle_strength_points: 1}]" +48,鞭修,怠惰,精通鞭法,软兵器在手,刚柔并济,修炼速度远超常人。,R,,"[{when: 'avatar.weapon.type == WeaponType.WHIP', extra_weapon_proficiency_gain: 0.5, extra_battle_strength_points: 1}]" +49,刀痴,怠惰;胆小,以刀入道,刀即是命。你认为刀法至上,战力强悍,但对刀道之外的事物兴趣寥寥。,SR,,"[{when: 'avatar.weapon.type == WeaponType.SABER', extra_weapon_proficiency_gain: 1.0, extra_battle_strength_points: 3}]" +50,枪痴,怠惰;胆小,以枪入道,枪即是命。你认为枪法至上,战力强悍,但对枪道之外的事物兴趣寥寥。,SR,,"[{when: 'avatar.weapon.type == WeaponType.SPEAR', extra_weapon_proficiency_gain: 1.0, extra_battle_strength_points: 3}]" +51,棍圣,怠惰;胆小,以棍入道,棍即是命。棍法通神,一棍在手,天下无敌,但对棍道之外的事物兴趣寥寥。,SR,,"[{when: 'avatar.weapon.type == WeaponType.STAFF', extra_weapon_proficiency_gain: 1.0, extra_battle_strength_points: 3}]" +52,扇痴,怠惰;胆小,以扇入道,扇即是命。你认为扇法至上,战力强悍,但对扇道之外的事物兴趣寥寥。,SR,,"[{when: 'avatar.weapon.type == WeaponType.FAN', extra_weapon_proficiency_gain: 1.0, extra_battle_strength_points: 3}]" +53,鞭痴,怠惰;胆小,以鞭入道,鞭即是命。你认为鞭法至上,战力强悍,但对鞭道之外的事物兴趣寥寥。,SR,,"[{when: 'avatar.weapon.type == WeaponType.WHIP', extra_weapon_proficiency_gain: 1.0, extra_battle_strength_points: 3}]" +54,暗影宗师,怠惰;胆小,暗器之道登峰造极,杀人于无形。出手必见血,战力惊人,但对暗器之外的事物兴趣寥寥。,SR,,"[{when: 'avatar.weapon.type == WeaponType.HIDDEN_WEAPON', extra_weapon_proficiency_gain: 1.0, extra_battle_strength_points: 3}]" diff --git a/static/game_configs/sect.csv b/static/game_configs/sect.csv index b68494c..44ddd3e 100644 --- a/static/game_configs/sect.csv +++ b/static/game_configs/sect.csv @@ -1,11 +1,11 @@ id,name,desc,member_act_style,alignment,weight,preferred_weapon,effects -,,宗门名称与描述,宗门成员行事风格,阵营(正/中/邪),权重(默认1),倾向兵器类型,"effects(JSON形式,支持宽松格式,见effects.py说明)" +,,宗门名称与描述,宗门成员行事风格,阵营(正/中立/邪),权重(默认1),倾向兵器类型,"effects(JSON形式,支持宽松格式,见effects.py说明)" 1,明心剑宗,通玄界东方第一宗,以无上剑道称雄于世。云纹禁制为不传心法。,清明克己,行止如一。重剑与心法并重,讲究明心见性。,正,1,剑, 2,百兽宗,以驯养灵兽闻名,豢养各种妖兽灵怪为战力。,你言语直接,重视力量与血性,崇尚狩猎与搏斗。,邪,1,鞭, -3,水镜宗,正道十宗之一,实则严守中立。拥有仙界异宝"彻天水镜"可预知未来。,你处事冷静圆融,喜以柔克刚,擅借力与反制。,中,1,扇, +3,水镜宗,正道十宗之一,实则严守中立。拥有仙界异宝"彻天水镜"可预知未来。,你处事冷静圆融,喜以柔克刚,擅借力与反制。,中立,1,扇, 4,冥王宗,行走幽冥之道,术法阴冷狠厉。,你言辞冷厉少情,敬畏因果而不惧杀伐,偏向效率与结果。,邪,1,扇, 5,朱勾宗,邪宗大派。以炼器、机关、暗杀闻名于世,素来阴毒冷僻。,你直面欲望与代价,不惧黑暗,以攻伐见长。,邪,1,暗器, -6,合欢宗,以情入道,靠双修增进修为,善驭人心,长于权变。,你辞令婉转,善于拿捏人欲与局势,以柔制刚。,中,1,琴,{legal_actions: ['DualCultivation']} +6,合欢宗,以情入道,靠双修增进修为,善驭人心,长于权变。,你辞令婉转,善于拿捏人欲与局势,以柔制刚。,中立,1,琴,{legal_actions: ['DualCultivation']} 7,镇魂宗,铁血风格,擅安魂、封邪、渡厄,兼有刚烈镇压之术。,你肃穆沉稳,重安魂镇邪,少言而果决。,正,1,棍, 8,幽魂噬影宗,镇宗典籍《幽冥录》。幽明气为根基。,你行事隐秘果断,重结果轻虚名,擅潜行与出其不意。,邪,1,刀, -9,千帆城,炼器大宗,巧匠云集。著名法宝有灵灭丝、定魂蓝星、天罗网、万里极光壁、飞翼等。商旅云集,自成体系。,你务实精明,重交易与信誉,崇尚规则与秩序。,中,1,枪, +9,千帆城,炼器大宗,巧匠云集。著名法宝有灵灭丝、定魂蓝星、天罗网、万里极光壁、飞翼等。商旅云集,自成体系。,你务实精明,重交易与信誉,崇尚规则与秩序。,中立,1,枪, diff --git a/static/game_configs/technique.csv b/static/game_configs/technique.csv index 7acf194..8336701 100644 --- a/static/game_configs/technique.csv +++ b/static/game_configs/technique.csv @@ -1,50 +1,49 @@ id,name,technique_root,grade,desc,weight,condition,sect,effects -,名称,属性,品阶(上中下),描述/提示词,抽样权重,条件,所属宗门,"JSON形式(支持宽松格式,见effects.py说明)" +,名称,属性,品阶(上中下),描述/提示词,抽样权重,条件,所属宗门,JSON形式(支持宽松格式,见effects.py说明) 1,太乙金光锻体诀,金,下品,运太乙金光淬骨炼筋,金罡护体,刀兵难侵。,1,,, -2,金阳破甲术,金,中品,融金阳之炽与锋,一往破敌,破甲断魄。,1,,, +2,金阳破甲术,金,中品,融金阳之炽与锋,一往破敌,破甲断魄。,1,,,"{""extra_battle_strength_points"": 3}" 4,青木长春诀,木,下品,借青木长春之机,涓涓养元,稳固根基。,1,,, -5,碧林长生法,木,中品,汲林海生机,法源不竭,柔而不折。,1,,, +5,碧林长生法,木,中品,汲林海生机,法源不竭,柔而不折。,1,,,"{""extra_battle_strength_points"": 3}" 7,玄冥敛息诀,水,下品,以玄冥静息收摄心神,润物无声。,1,,, -8,玄水化海术,水,中品,以玄水化百川,绵延不绝,攻守随势。,1,,, +8,玄水化海术,水,中品,以玄水化百川,绵延不绝,攻守随势。,1,,,"{""extra_battle_strength_points"": 3}" 10,南明离火心诀,火,下品,承南明离火之炽,鼓荡心魄,炼魂淬魄。,1,,, -11,赤炎炼真诀,火,中品,以赤炎炼真元,去伪存真,攻势如潮。,1,,, +11,赤炎炼真诀,火,中品,以赤炎炼真元,去伪存真,攻势如潮。,1,,,"{""extra_battle_strength_points"": 3}" 13,厚土镇魄诀,土,下品,以厚土安神定魄,稳如山嶽,不动如山。,1,,, -14,玄黄定岳法,土,中品,以玄黄凝岳势,千钧一力,镇压四方。,1,,, +14,玄黄定岳法,土,中品,以玄黄凝岳势,千钧一力,镇压四方。,1,,,"{""extra_battle_strength_points"": 3}" 16,玄冰凝真诀,冰,下品,以玄冰凝灵,清寒护体,心湖如镜。,1,,, -17,冰魄玄寒法,冰,中品,御玄寒之魄,封江冻海,以静制动。,1,,, +17,冰魄玄寒法,冰,中品,御玄寒之魄,封江冻海,以静制动。,1,,,"{""extra_battle_strength_points"": 3}" 19,御风术,风,下品,以清风导息,轻身迅行,形如掠影。,1,,, -20,清风御行法,风,中品,驭风行空,攻守兼备,灵动飘逸。,1,,, +20,清风御行法,风,中品,驭风行空,攻守兼备,灵动飘逸。,1,,,"{""extra_battle_strength_points"": 3}" 22,幽冥潜形术,暗,下品,以幽冥藏形,锋芒尽敛,伺机而动。,1,,, -23,玄夜无相法,暗,中品,夜行无相,出入无痕,摄人心魄。,1,,, +23,玄夜无相法,暗,中品,夜行无相,出入无痕,摄人心魄。,1,,,"{""extra_battle_strength_points"": 3}" 25,九天淬体雷诀,雷,下品,引九天霆罡击体,筋骨再生,爆发如雷。,1,,, -26,九霄养雷法,雷,中品,引九霄真雷,养气通窍,威势赫然。,1,,, +26,九霄养雷法,雷,中品,引九霄真雷,养气通窍,威势赫然。,1,,,"{""extra_battle_strength_points"": 3}" 28,血神噬魂大法,邪,下品,以血神邪念淬炼,杀伐狠辣,损阴德。,1,,,"{extra_breakthrough_success_rate: -0.1, extra_cultivate_exp: 50}" -29,冥狱吞灵大法,邪,中品,循冥狱之道吞噬灵魄,逆乱阴阳,速成之途。,1,,,"{extra_breakthrough_success_rate: -0.1, extra_cultivate_exp: 50}" -30,明心归一剑典,金,上品,以剑返本归一,明镜止水,一剑断妄。,10,,明心剑宗, -31,霆光明志剑,雷,上品,以霆光贯剑意,电掣雷行,破虚斩障。,10,,明心剑宗, -32,离火明心诀,火,上品,以离火照见自心,去蔽存真,剑随心行。,10,,明心剑宗, -33,御兽玄纲,木,上品,以木灵沟通群兽,血脉契合,驱策如臂。,10,,百兽宗, -34,蛮荒镇骨体,土,上品,以厚土淬锻筋骨,躯壳如山,血勇不挫。,10,,百兽宗, -35,血啸狩魂诀,邪,上品,以嗜血啸魄摄魂,狩猎杀伐,越战越猛。,10,,百兽宗,"{extra_breakthrough_success_rate: -0.1, extra_cultivate_exp: 50}" -36,彻天水镜观,水,上品,以彻天水镜观机,借势化力,先机在握。,10,,水镜宗, -37,寒漪反斩法,冰,上品,以寒漪回折之势,四两拨千斤,刚柔相济。,10,,水镜宗, -38,镜花游身步,风,上品,以轻风流转为引,身化水月,进退自如。,10,,水镜宗, -39,幽冥镇狱经,暗,上品,引幽冥阴煞镇压万灵,寒魄凝骨,万劫不侵。,10,,冥王宗, -40,冥焰噬神法,邪,上品,以冥焰噬神,逆夺生机,吞灵化魄。,10,,冥王宗,"{extra_breakthrough_success_rate: -0.1, extra_cultivate_exp: 50}" -41,黄泉引魄步,冰,上品,以玄寒引魄入泉,步步生霜,摄魂夺魄。,10,,冥王宗, -42,赤狱炼锋诀,火,上品,以赤狱真火炼锋,法器通灵,杀机更盛。,10,,朱勾宗, -43,魇丝摄魂术,暗,上品,以魇丝无声摄魄,藏形夺命,来去无迹。,10,,朱勾宗, -44,噬心傀儡经,金,上品,以金罡刻阵,傀儡载魄,攻守如一。,10,,朱勾宗, -45,双修合和典,水,上品,以清润相济,合气生生,周天圆满。,10,,合欢宗, -46,魅月摄情术,暗,上品,以魅月摄心,惑而不乱,借情化力。,10,,合欢宗, -47,绮罗化影步,风,上品,以轻纱化影,形随意转,柔中带锋。,10,,合欢宗, -48,镇岳定魂经,土,上品,以玄黄定岳势,安神定魄,万邪难侵。,10,,镇魂宗, -49,霆狱伏邪法,雷,上品,引九霄霆威压邪,刚猛无俦,镇压不返。,10,,镇魂宗, -50,金章封煞术,金,上品,以金章为印,封煞束灵,斩乱镇邪。,10,,镇魂宗, -51,幽冥无相诀,暗,上品,隐形无相,出没幽明,摄心夺魄于无声。,10,,幽魂噬影宗, -52,噬影穿行步,风,上品,以风掠影,穿行缝隙,先至而不留痕。,10,,幽魂噬影宗, -53,冥狱吞魄经,邪,上品,循幽冥吞魄之道,化敌为养,速成险绝。,10,,幽魂噬影宗,"{extra_breakthrough_success_rate: -0.1, extra_cultivate_exp: 50}" -54,天罗机巧篇,金,上品,精研机巧阵枢,百变应敌,器术合一。,10,,千帆城, -55,蓝星定魂阵,土,上品,以厚土定魂为基,阵锁心神,稳如磐石。,10,,千帆城, -56,飞翼乘风术,风,上品,乘风而行,纵横千里,御器齐驱。,10,,千帆城, - +29,冥狱吞灵大法,邪,中品,循冥狱之道吞噬灵魄,逆乱阴阳,速成之途。,1,,,"{""extra_breakthrough_success_rate"": -0.1, ""extra_cultivate_exp"": 50, ""extra_battle_strength_points"": 3}" +30,明心归一剑典,金,上品,以剑返本归一,明镜止水,一剑断妄。,10,,明心剑宗,"{""extra_battle_strength_points"": 6}" +31,霆光明志剑,雷,上品,以霆光贯剑意,电掣雷行,破虚斩障。,10,,明心剑宗,"{""extra_battle_strength_points"": 6}" +32,离火明心诀,火,上品,以离火照见自心,去蔽存真,剑随心行。,10,,明心剑宗,"{""extra_battle_strength_points"": 6}" +33,御兽玄纲,木,上品,以木灵沟通群兽,血脉契合,驱策如臂。,10,,百兽宗,"{""extra_battle_strength_points"": 6}" +34,蛮荒镇骨体,土,上品,以厚土淬锻筋骨,躯壳如山,血勇不挫。,10,,百兽宗,"{""extra_battle_strength_points"": 6}" +35,血啸狩魂诀,邪,上品,以嗜血啸魄摄魂,狩猎杀伐,越战越猛。,10,,百兽宗,"{""extra_breakthrough_success_rate"": -0.1, ""extra_cultivate_exp"": 50, ""extra_battle_strength_points"": 6}" +36,彻天水镜观,水,上品,以彻天水镜观机,借势化力,先机在握。,10,,水镜宗,"{""extra_battle_strength_points"": 6}" +37,寒漪反斩法,冰,上品,以寒漪回折之势,四两拨千斤,刚柔相济。,10,,水镜宗,"{""extra_battle_strength_points"": 6}" +38,镜花游身步,风,上品,以轻风流转为引,身化水月,进退自如。,10,,水镜宗,"{""extra_battle_strength_points"": 6}" +39,幽冥镇狱经,暗,上品,引幽冥阴煞镇压万灵,寒魄凝骨,万劫不侵。,10,,冥王宗,"{""extra_battle_strength_points"": 6}" +40,冥焰噬神法,邪,上品,以冥焰噬神,逆夺生机,吞灵化魄。,10,,冥王宗,"{""extra_breakthrough_success_rate"": -0.1, ""extra_cultivate_exp"": 50, ""extra_battle_strength_points"": 6}" +41,黄泉引魄步,冰,上品,以玄寒引魄入泉,步步生霜,摄魂夺魄。,10,,冥王宗,"{""extra_battle_strength_points"": 6}" +42,赤狱炼锋诀,火,上品,以赤狱真火炼锋,法器通灵,杀机更盛。,10,,朱勾宗,"{""extra_battle_strength_points"": 6}" +43,魇丝摄魂术,暗,上品,以魇丝无声摄魄,藏形夺命,来去无迹。,10,,朱勾宗,"{""extra_battle_strength_points"": 6}" +44,噬心傀儡经,金,上品,以金罡刻阵,傀儡载魄,攻守如一。,10,,朱勾宗,"{""extra_battle_strength_points"": 6}" +45,双修合和典,水,上品,以清润相济,合气生生,周天圆满。,10,,合欢宗,"{""extra_battle_strength_points"": 6}" +46,魅月摄情术,暗,上品,以魅月摄心,惑而不乱,借情化力。,10,,合欢宗,"{""extra_battle_strength_points"": 6}" +47,绮罗化影步,风,上品,以轻纱化影,形随意转,柔中带锋。,10,,合欢宗,"{""extra_battle_strength_points"": 6}" +48,镇岳定魂经,土,上品,以玄黄定岳势,安神定魄,万邪难侵。,10,,镇魂宗,"{""extra_battle_strength_points"": 6}" +49,霆狱伏邪法,雷,上品,引九霄霆威压邪,刚猛无俦,镇压不返。,10,,镇魂宗,"{""extra_battle_strength_points"": 6}" +50,金章封煞术,金,上品,以金章为印,封煞束灵,斩乱镇邪。,10,,镇魂宗,"{""extra_battle_strength_points"": 6}" +51,幽冥无相诀,暗,上品,隐形无相,出没幽明,摄心夺魄于无声。,10,,幽魂噬影宗,"{""extra_battle_strength_points"": 6}" +52,噬影穿行步,风,上品,以风掠影,穿行缝隙,先至而不留痕。,10,,幽魂噬影宗,"{""extra_battle_strength_points"": 6}" +53,冥狱吞魄经,邪,上品,循幽冥吞魄之道,化敌为养,速成险绝。,10,,幽魂噬影宗,"{""extra_breakthrough_success_rate"": -0.1, ""extra_cultivate_exp"": 50, ""extra_battle_strength_points"": 6}" +54,天罗机巧篇,金,上品,精研机巧阵枢,百变应敌,器术合一。,10,,千帆城,"{""extra_battle_strength_points"": 6}" +55,蓝星定魂阵,土,上品,以厚土定魂为基,阵锁心神,稳如磐石。,10,,千帆城,"{""extra_battle_strength_points"": 6}" +56,飞翼乘风术,风,上品,乘风而行,纵横千里,御器齐驱。,10,,千帆城,"{""extra_battle_strength_points"": 6}" diff --git a/web/src/components/game/panels/info/AvatarDetail.vue b/web/src/components/game/panels/info/AvatarDetail.vue index bffad54..b1116e3 100644 --- a/web/src/components/game/panels/info/AvatarDetail.vue +++ b/web/src/components/game/panels/info/AvatarDetail.vue @@ -72,22 +72,28 @@ async function handleClearObjective() {
+ - + + +
@@ -110,12 +116,6 @@ async function handleClearObjective() { :item="data.technique" @click="showDetail(data.technique)" /> - import { computed, ref, onMounted, onUnmounted, watch } from 'vue'; -import { useUiStore } from '@/stores/ui'; -import type { AvatarDetail, RegionDetail } from '@/types/core'; +import { useUiStore } from '../../../../stores/ui'; // Sub-components import AvatarDetailView from './AvatarDetail.vue'; diff --git a/web/src/utils/formatters/number.ts b/web/src/utils/formatters/number.ts index e391b6c..aec4382 100644 --- a/web/src/utils/formatters/number.ts +++ b/web/src/utils/formatters/number.ts @@ -2,12 +2,6 @@ * 格式化工具 */ -export function formatNumber(num: number): string { - if (num >= 10000) { - return (num / 10000).toFixed(1) + '万'; - } - return num.toString(); -} export function formatHp(current: number, max: number): string { return `${Math.floor(current)} / ${max}`;