This commit is contained in:
bridge
2025-10-19 02:48:12 +08:00
parent 08c32c38c2
commit e220b45b2a
9 changed files with 28 additions and 49 deletions

View File

@@ -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

View File

@@ -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]:

View File

@@ -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:

View File

@@ -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

View File

@@ -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,
1 id name exclusion_ids desc weight condition
14 12 复仇 11;14 你绝不轻易放下仇怨,为了复仇愿意付出代价与时间。你必须立刻进行复仇行动。 1
15 13 孤僻 11 你喜欢独处,避免与人深交,更信赖自己的判断与行动。 1
16 14 淡漠 11;12;15;24;25 你情感克制,对外界冷静疏离,不轻易被他人或事件影响。 1
17 15 好斗 11;14;10;17 你直面冲突,偏好以力量与对抗解决问题,并格外热衷增加己身战力。 1000 1
18 16 鲁莽 1;9;10 你行事冲动、少考虑后果,常凭直觉立刻行动。 1
19 17 胆小 4;15;12;24;25 你谨小慎微,容易畏惧风险,倾向回避正面冲突。 1
20 18 霸道 11;17 你行事强势,不讲道理,习惯以自己的利益为先,倾向多吃多占、压人一步,对他人的反对不以为意。 1

View File

@@ -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}"
Can't render this file because it contains an unexpected character in line 2 and column 108.

View File

@@ -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,
Can't render this file because it contains an unexpected character in line 5 and column 73.

View File

@@ -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,,千帆城,
Can't render this file because it contains an unexpected character in line 2 and column 112.

View File

@@ -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}"
Can't render this file because it contains an unexpected character in line 2 and column 99.