From e220b45b2ad800329a78748eb2a2ee47d0443254 Mon Sep 17 00:00:00 2001 From: bridge Date: Sun, 19 Oct 2025 02:48:12 +0800 Subject: [PATCH] fix bugs --- src/classes/action/devour_mortals.py | 5 ----- src/classes/effect.py | 25 +++---------------------- src/classes/treasure.py | 5 ++++- static/config.yml | 2 +- static/game_configs/persona.csv | 2 +- static/game_configs/root.csv | 4 ++-- static/game_configs/sect.csv | 4 ++-- static/game_configs/technique.csv | 12 ++++++------ static/game_configs/treasure.csv | 18 +++++++++--------- 9 files changed, 28 insertions(+), 49 deletions(-) diff --git a/src/classes/action/devour_mortals.py b/src/classes/action/devour_mortals.py index b70bb27..1264d52 100644 --- a/src/classes/action/devour_mortals.py +++ b/src/classes/action/devour_mortals.py @@ -24,11 +24,6 @@ class DevourMortals(TimedAction): tr.devoured_souls = min(10000, int(tr.devoured_souls) + gain) def can_start(self) -> bool: - region = self.avatar.tile.region - # 需持有万魂幡且行为被允许 - tr = getattr(self.avatar, "treasure", None) - if tr is None or tr.name != "万魂幡": - return False legal = self.avatar.effects.get("legal_actions", []) return "DevourMortals" in legal diff --git a/src/classes/effect.py b/src/classes/effect.py index 7d8cab9..0df3ae0 100644 --- a/src/classes/effect.py +++ b/src/classes/effect.py @@ -1,18 +1,14 @@ from __future__ import annotations import json -import ast from typing import Any, Callable, Optional def load_effect_from_str(value: object) -> dict[str, Any]: """ - 解析 effects 字符串为 dict: - - 支持裸键值对格式(如 'k': ['v']) - - 支持 JSON 格式(双引号) - - 支持 Python 字面量(单引号) + 将 effects 字段解析为 dict(仅支持标准 JSON 字符串)。 - value 为 None/空字符串/'nan' 时返回 {} - - 解析非 dict 则返回 {} + - 解析失败或结果非 dict 返回 {} """ if value is None: return {} @@ -21,26 +17,11 @@ def load_effect_from_str(value: object) -> dict[str, Any]: s = str(value).strip() if not s or s == "nan": return {} - # 使用全局配置中的分隔符将占位分隔符替换回逗号,便于解析 - try: - from src.utils.config import CONFIG - sep = str(getattr(getattr(CONFIG, "df", {}), "ids_separator", ",")) - if sep and sep != ",": - s = s.replace(sep, ",") - except Exception: - pass - # 如果不是以 { 开头,则添加花括号包裹 - if not s.startswith("{"): - s = "{" + s + "}" try: obj = json.loads(s) return obj if isinstance(obj, dict) else {} except Exception: - try: - obj = ast.literal_eval(s) - return obj if isinstance(obj, dict) else {} - except Exception: - return {} + return {} def _merge_effects(base: dict[str, object], addition: dict[str, object]) -> dict[str, object]: diff --git a/src/classes/treasure.py b/src/classes/treasure.py index ecfc03b..e720b58 100644 --- a/src/classes/treasure.py +++ b/src/classes/treasure.py @@ -53,7 +53,8 @@ def _load_treasures() -> tuple[Dict[int, Treasure], Dict[str, Treasure], Dict[in if raw_sect is not None and str(raw_sect).strip() and str(raw_sect).strip() != "nan": sect_id = int(float(raw_sect)) - effects = load_effect_from_str(row.get("effects", "")) + raw_effects_val = row.get("effects", "") + effects = load_effect_from_str(raw_effects_val) sect_obj: Optional[Sect] = sects_by_id.get(int(sect_id)) if sect_id is not None else None @@ -66,6 +67,8 @@ def _load_treasures() -> tuple[Dict[int, Treasure], Dict[str, Treasure], Dict[in sect=sect_obj, ) + # no-op + treasures_by_id[t.id] = t treasures_by_name[t.name] = t if t.sect_id is not None and t.sect_id not in treasures_by_sect_id: diff --git a/static/config.yml b/static/config.yml index a66c322..8f373c9 100644 --- a/static/config.yml +++ b/static/config.yml @@ -15,7 +15,7 @@ ai: max_decide_num: 4 game: - init_npc_num: 6 + init_npc_num: 4 sect_num: 2 # init_npc_num大于sect_num时,会随机选择sect_num个宗门 npc_birth_rate_per_month: 0.001 diff --git a/static/game_configs/persona.csv b/static/game_configs/persona.csv index 8784ba3..3df10be 100644 --- a/static/game_configs/persona.csv +++ b/static/game_configs/persona.csv @@ -14,7 +14,7 @@ id,name,exclusion_ids,desc,weight,condition 12,复仇,11;14,你绝不轻易放下仇怨,为了复仇愿意付出代价与时间。你必须立刻进行复仇行动。,1, 13,孤僻,11,你喜欢独处,避免与人深交,更信赖自己的判断与行动。,1, 14,淡漠,11;12;15;24;25,你情感克制,对外界冷静疏离,不轻易被他人或事件影响。,1, -15,好斗,11;14;10;17,你直面冲突,偏好以力量与对抗解决问题,并格外热衷增加己身战力。,1000, +15,好斗,11;14;10;17,你直面冲突,偏好以力量与对抗解决问题,并格外热衷增加己身战力。,1, 16,鲁莽,1;9;10,你行事冲动、少考虑后果,常凭直觉立刻行动。,1, 17,胆小,4;15;12;24;25,你谨小慎微,容易畏惧风险,倾向回避正面冲突。,1, 18,霸道,11;17,你行事强势,不讲道理,习惯以自己的利益为先,倾向多吃多占、压人一步,对他人的反对不以为意。,1, diff --git a/static/game_configs/root.csv b/static/game_configs/root.csv index 85ce862..654264e 100644 --- a/static/game_configs/root.csv +++ b/static/game_configs/root.csv @@ -1,5 +1,5 @@ id,key,name,element_list,desc,effects -,,元素列表以分号分隔(示例:金;木),描述不会在代码中使用,JSON/字面量,例:{"extra_breakthrough_success_rate": 0.1} +,,,元素列表以分号分隔(示例:金;木),描述不会在代码中使用,"JSON,例:{""extra_breakthrough_success_rate"": 0.1}" 1,GOLD,金灵根,金,刚强果断;攻击力强,适合剑修, 2,WOOD,木灵根,木,仁厚坚韧;擅恢复、毒术与木属性法术, 3,WATER,水灵根,水,智慧圆融;身法轻盈,善辅助与隐匿, @@ -9,5 +9,5 @@ id,key,name,element_list,desc,effects 7,ICE,冰灵根,金;水,控制力强;持久性好, 8,WIND,风灵根,木;水,身法卓绝;难以捉摸, 9,DARK,暗灵根,火;土,隐匿系;擅幻术与诡道, -10,HEAVEN,天灵根,金;木;水;火;土,资质通天;五行皆通,修行全面,"extra_breakthrough_success_rate": 0.1 +10,HEAVEN,天灵根,金;木;水;火;土,资质通天;五行皆通,修行全面,"{""extra_breakthrough_success_rate"": 0.1}" diff --git a/static/game_configs/sect.csv b/static/game_configs/sect.csv index ca3c84a..40110d5 100644 --- a/static/game_configs/sect.csv +++ b/static/game_configs/sect.csv @@ -3,9 +3,9 @@ id,name,desc,member_act_style,alignment,sect_surnames,male_sect_given_names,fema 1,明心剑宗,通玄界东方第一宗,以无上剑道称雄于世。云纹禁制为不传心法。,清明克己,行止如一。重剑与心法并重,讲究明心见性。,正,明;心;剑;霄;玄;霁;衡;孤;徽;肃,澄川;宏石;磐岳;霆岱;寂岚;久安;宸秋;烁离;沧岳;砺锋;炎洲;远歌,采微;霏岚;韶华;绮澜;珠影;远岫;若水;凝香;雪瑶;南絮;轻萝;宛竹,1, 2,百兽宗,以驯养灵兽闻名,豢养各种妖兽灵怪为战力。,你言语直接,重视力量与血性,崇尚狩猎与搏斗。,邪,,驼王;飞熊;虎魄;狼行;熊罡;白猿;石坚;山岚;青鬃;玄爪;金瞳;裂爪;破角;狂鬃;赤鬣;苍隼;啸风;裂岩,狐绮;白貂;青翎;雪牙;赤羽;玄狸;灵爪;月狐;银鳞;霜蹄;云貉;绒尾;锦狐;轻蹄,1, 3,水镜宗,正道十宗之一,实则严守中立。拥有仙界异宝"彻天水镜"可预知未来。,你处事冷静圆融,喜以柔克刚,擅借力与反制。,中,水;镜;寒;霜;冰;清;沐;澜;渊;泉,涟光;沧浪;泽远;浩川;泊舟;涓石;溪原;涵舟;泠曜;漪岑;淞岳;涔雨,漫霖;洛漪;潋月;涵烟;沁波;翠波;漫葭;汀兰;潭歌;涓玥;澧宁;潇然,1, -4,冥王宗,行走幽冥之道,术法阴冷狠厉。,你言辞冷厉少情,敬畏因果而不惧杀伐,偏向效率与结果。,邪,冥;王;玄;幽;夜;白;冷;狱;魇;阴,血燎;焚魄;灰燼;殁川;绝尘;厌离;朔寒;邪风;归墟;朽骨;朔月;止戈,寒绫;霜瑶;凄歌;素鸢;祭宁;黛魂;夙梦;绫雪;凛珑;霁月;旷音;凝岚,1000, +4,冥王宗,行走幽冥之道,术法阴冷狠厉。,你言辞冷厉少情,敬畏因果而不惧杀伐,偏向效率与结果。,邪,冥;王;玄;幽;夜;白;冷;狱;魇;阴,血燎;焚魄;灰灭;殁川;绝尘;厌离;朔寒;邪风;归墟;朽骨;朔月;止戈,寒绫;霜瑶;凄歌;素鸢;祭宁;黛魂;夙梦;绫雪;凛珑;霁月;旷音;凝岚,1000, 5,朱勾宗,邪宗大派。以炼器、机关、暗杀闻名于世,素来阴毒冷僻。,你直面欲望与代价,不惧黑暗,以攻伐见长。,邪,朱;绯;刃;戮;蚀;渊;钧;鸦;墨;殷,暗阑;机括;鬼匣;夜禁;幻锁;残锋;暗弦;影栅;幽钩;断线;潜匿;迷踪,玄簪;霜绡;纤罗;碎玉;影裳;轻弦;凝黛;凝烟;冷珥;素纱;凛钗;寒袖,1, -6,合欢宗,以情入道,靠双修增进修为,善驭人心,长于权变。,你辞令婉转,善于拿捏人欲与局势,以柔制刚。,中,合;欢;苏;陆;柳;花;月;楚;顾;白,流烟;迟夜;长陌;归舟;暮成;远辞;行止;轻寒;沉香;野鹤;乘风,婉心;轻柔;疏影;如梦;绮念;惜香;慕雪;倾城;绯烟;晚晴;素袖;霁眉;绸缪;静妍,1000,'legal_actions': ['DualCultivation'] +6,合欢宗,以情入道,靠双修增进修为,善驭人心,长于权变。,你辞令婉转,善于拿捏人欲与局势,以柔制刚。,中,合;欢;苏;陆;柳;花;月;楚;顾;白,流烟;迟夜;长陌;归舟;暮成;远辞;行止;轻寒;沉香;野鹤;乘风,婉心;轻柔;疏影;如梦;绮念;惜香;慕雪;倾城;绯烟;晚晴;素袖;霁眉;绸缪;静妍,1000,"{""legal_actions"": [""DualCultivation""]}" 7,镇魂宗,铁血风格,擅安魂、封邪、渡厄,兼有刚烈镇压之术。,你肃穆沉稳,重安魂镇邪,少言而果决。,正,厉;卢;镇;魂;钟;青;凌;白;楚;顾,安魄;靖川;霁阳;季衡;砺甲;烁锋;昊戈;祁光;漠石;启封;殷策;定魄,清宁;素铃;靖霜;澄心;霁雪;安祈;净月;宁枝;祷绫;明槐;采霁;定寒,1, 8,幽魂噬影宗,镇宗典籍《幽冥录》。幽明气为根基。,你行事隐秘果断,重结果轻虚名,擅潜行与出其不意。,邪,冥;阎;鬼;幽;归;应;阴;碧;夜;魅,噬影;无藏;绝响;断痕;影渊;暗行;潜踪;魄隐;迷雾;空蝉;断念;裂隙,影绫;暗萝;霜绡;素鹭;玄绮;凝灯;绫岚;凛铃;朔华;漠音;宵岑;泠歌,1, 9,千帆城,炼器大宗,巧匠云集。著名法宝有灵灭丝、定魂蓝星、天罗网、万里极光壁、飞翼等。商旅云集,自成体系。,你务实精明,重交易与信誉,崇尚规则与秩序。,中,商;楚;顾;白;苏;林;叶;秦;赵;魏,持衡;清评;问价;立契;通衡;问道;理市;衡准;守约;筑匠;铸衡;估算,素蓝;明衡;巧心;青帆;绫舟;观星;衡绫;星槎;织霓;采绫;芸巧;霁行;砚秋;镶玑;绘蓝;银梭;珩心,1, diff --git a/static/game_configs/technique.csv b/static/game_configs/technique.csv index 075c911..77d8e6c 100644 --- a/static/game_configs/technique.csv +++ b/static/game_configs/technique.csv @@ -1,5 +1,5 @@ id,name,technique_root,grade,desc,weight,condition,sect,effects -,名称,属性,品阶(上中下),描述/提示词,抽样权重,条件,所属宗门,JSON/字面量,例:{"extra_cultivate_exp":50} +,名称,属性,品阶(上中下),描述/提示词,抽样权重,条件,所属宗门,"JSON,例:{""extra_cultivate_exp"": 50}" 1,太乙金光锻体诀,金,下品,运太乙金光淬骨炼筋,金罡护体,刀兵难侵。,1,,, 2,金阳破甲术,金,中品,融金阳之炽与锋,一往破敌,破甲断魄。,1,,, 4,青木长春诀,木,下品,借青木长春之机,涓涓养元,稳固根基。,1,,, @@ -18,19 +18,19 @@ id,name,technique_root,grade,desc,weight,condition,sect,effects 23,玄夜无相法,暗,中品,夜行无相,出入无痕,摄人心魄。,1,,, 25,九天淬体雷诀,雷,下品,引九天霆罡击体,筋骨再生,爆发如雷。,1,,, 26,九霄养雷法,雷,中品,引九霄真雷,养气通窍,威势赫然。,1,,, -28,血神噬魂大法,邪,下品,以血神邪念淬炼,杀伐狠辣,损阴德。,1,,,"extra_breakthrough_success_rate": -0.1; "extra_cultivate_exp": 50 -29,冥狱吞灵大法,邪,中品,循冥狱之道吞噬灵魄,逆乱阴阳,速成之途。,1,,,"extra_breakthrough_success_rate": -0.1; "extra_cultivate_exp": 50 +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 +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 +40,冥焰噬神法,邪,上品,以冥焰噬神,逆夺生机,吞灵化魄。,10,,冥王宗,"{""extra_breakthrough_success_rate"": -0.1, ""extra_cultivate_exp"": 50}" 41,黄泉引魄步,冰,上品,以玄寒引魄入泉,步步生霜,摄魂夺魄。,10,,冥王宗, 42,赤狱炼锋诀,火,上品,以赤狱真火炼锋,法器通灵,杀机更盛。,10,,朱勾宗, 43,魇丝摄魂术,暗,上品,以魇丝无声摄魄,藏形夺命,来去无迹。,10,,朱勾宗, @@ -43,7 +43,7 @@ id,name,technique_root,grade,desc,weight,condition,sect,effects 50,金章封煞术,金,上品,以金章为印,封煞束灵,斩乱镇邪。,10,,镇魂宗, 51,幽冥无相诀,暗,上品,隐形无相,出没幽明,摄心夺魄于无声。,10,,幽魂噬影宗, 52,噬影穿行步,风,上品,以风掠影,穿行缝隙,先至而不留痕。,10,,幽魂噬影宗, -53,冥狱吞魄经,邪,上品,循幽冥吞魄之道,化敌为养,速成险绝。,10,,幽魂噬影宗,"extra_breakthrough_success_rate": -0.1; "extra_cultivate_exp": 50 +53,冥狱吞魄经,邪,上品,循幽冥吞魄之道,化敌为养,速成险绝。,10,,幽魂噬影宗,"{""extra_breakthrough_success_rate"": -0.1, ""extra_cultivate_exp"": 50}" 54,天罗机巧篇,金,上品,精研机巧阵枢,百变应敌,器术合一。,10,,千帆城, 55,蓝星定魂阵,土,上品,以厚土定魂为基,阵锁心神,稳如磐石。,10,,千帆城, 56,飞翼乘风术,风,上品,乘风而行,纵横千里,御器齐驱。,10,,千帆城, diff --git a/static/game_configs/treasure.csv b/static/game_configs/treasure.csv index 81a9478..8b5992e 100644 --- a/static/game_configs/treasure.csv +++ b/static/game_configs/treasure.csv @@ -1,12 +1,12 @@ id,name,sect_id,desc,effects -,名称,所属宗门ID(见sect.csv),描述/提示词,效果键值对(不含花括号),例:"extra_move_step":1 -1,本命剑匣,1,以心御剑,匣启如霆,剑意随心破万法.,"extra_battle_strength_points": 3 -2,灵舟,9,小舟承灵气,御风渡海,千里一瞬.,"extra_move_step": 1 -3,千里镜,3,澄澈如镜,观千里之外,洞察先机.,"extra_observation_radius": 2 -4,镇魂钟,7,钟鸣摄魄,定魂镇邪,护心安魂.,"extra_battle_strength_points": 3; "extra_observation_radius": 1 -5,聚灵阵盘,5,刻阵成盘,聚纳灵机,修行事半功倍.,"extra_cultivate_exp": 50 -6,万魂幡,4,幡起万魂啾啾,阴风过境.,"legal_actions": ["DevourMortals"]; "extra_battle_strength_points": eval(avatar.treasure.devoured_souls // 100 * 0.1) -7,万欲同心结,6,情意同心,双修之道相互映照,修为更精进.,"extra_dual_cultivation_exp": 100 -8,影遁披风,8,融身影界,来去无踪,伏击出其不意.,"extra_move_step": 1; "extra_observation_radius": 1 +,名称,所属宗门ID(见sect.csv),描述/提示词,"JSON,例:{""extra_move_step"": 1}" +1,本命剑匣,1,以心御剑,匣启如霆,剑意随心破万法.,"{""extra_battle_strength_points"": 3}" +2,灵舟,9,小舟承灵气,御风渡海,千里一瞬.,"{""extra_move_step"": 1}" +3,千里镜,3,澄澈如镜,观千里之外,洞察先机.,"{""extra_observation_radius"": 2}" +4,镇魂钟,7,钟鸣摄魄,定魂镇邪,护心安魂.,"{""extra_battle_strength_points"": 3, ""extra_observation_radius"": 1}" +5,聚灵阵盘,5,刻阵成盘,聚纳灵机,修行事半功倍.,"{""extra_cultivate_exp"": 50}" +6,万魂幡,4,幡起万魂啾啾,阴风过境.,"{""legal_actions"": [""DevourMortals""], ""extra_battle_strength_points"": ""eval(avatar.treasure.devoured_souls // 100 * 0.1)""}" +7,万欲同心结,6,情意同心,双修之道相互映照,修为更精进.,"{""extra_dual_cultivation_exp"": 100}" +8,影遁披风,8,融身影界,来去无踪,伏击出其不意.,"{""extra_move_step"": 1, ""extra_observation_radius"": 1}"