add sect
This commit is contained in:
@@ -31,6 +31,21 @@ class Alignment(Enum):
|
||||
return other == self.value or other == str(self)
|
||||
return False
|
||||
|
||||
@staticmethod
|
||||
def from_str(text: str) -> "Alignment":
|
||||
"""
|
||||
将字符串解析为 Alignment,支持中文与英文别名。
|
||||
未识别时返回中立。
|
||||
"""
|
||||
t = str(text).strip().lower()
|
||||
if t in {"正", "righteous", "right"}:
|
||||
return Alignment.RIGHTEOUS
|
||||
if t in {"中", "neutral", "middle", "center"}:
|
||||
return Alignment.NEUTRAL
|
||||
if t in {"邪", "evil"}:
|
||||
return Alignment.EVIL
|
||||
return Alignment.NEUTRAL
|
||||
|
||||
|
||||
alignment_strs = {
|
||||
Alignment.RIGHTEOUS: "正",
|
||||
|
||||
68
src/classes/sect.py
Normal file
68
src/classes/sect.py
Normal file
@@ -0,0 +1,68 @@
|
||||
from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
|
||||
from src.classes.alignment import Alignment
|
||||
from src.utils.df import game_configs
|
||||
from src.utils.config import CONFIG
|
||||
|
||||
|
||||
# 宗门驻地
|
||||
@dataclass
|
||||
class SectHeadQuarter:
|
||||
"""
|
||||
宗门总部
|
||||
"""
|
||||
name: str
|
||||
image: Path
|
||||
|
||||
@dataclass
|
||||
class Sect:
|
||||
"""
|
||||
宗门
|
||||
"""
|
||||
id: int
|
||||
name: str
|
||||
desc: str
|
||||
member_act_style: str
|
||||
alignment: Alignment
|
||||
sect_surnames: list[str]
|
||||
sect_given_names: list[str]
|
||||
headquarter: SectHeadQuarter
|
||||
# 功法:在technique.csv中配置
|
||||
# TODO:法宝
|
||||
# TODO:宗内等级和称谓
|
||||
def _split_names(value: object) -> list[str]:
|
||||
raw = "" if value is None or str(value) == "nan" else str(value)
|
||||
sep = CONFIG.df.ids_separator
|
||||
parts = [x.strip() for x in raw.split(sep) if x.strip()] if raw else []
|
||||
return parts
|
||||
|
||||
|
||||
def _load_sects() -> tuple[dict[int, Sect], dict[str, Sect]]:
|
||||
"""从配表加载 sect 数据"""
|
||||
sects_by_id: dict[int, Sect] = {}
|
||||
sects_by_name: dict[str, Sect] = {}
|
||||
|
||||
df = game_configs["sect"]
|
||||
assets_base = Path("assets/sects")
|
||||
for _, row in df.iterrows():
|
||||
image_path = assets_base / f"{row['name']}.png"
|
||||
|
||||
sect = Sect(
|
||||
id=int(row["id"]),
|
||||
name=str(row["name"]),
|
||||
desc=str(row["desc"]),
|
||||
member_act_style=str(row["member_act_style"]),
|
||||
alignment=Alignment.from_str(row.get("alignment", "中")),
|
||||
sect_surnames=_split_names(row.get("sect_surnames", "")),
|
||||
sect_given_names=_split_names(row.get("sect_given_names", "")),
|
||||
headquarter=SectHeadQuarter(name=str(row["name"]), image=image_path),
|
||||
)
|
||||
sects_by_id[sect.id] = sect
|
||||
sects_by_name[sect.name] = sect
|
||||
|
||||
return sects_by_id, sects_by_name
|
||||
|
||||
|
||||
# 导出:从配表加载 sect 数据
|
||||
sects_by_id, sects_by_name = _load_sects()
|
||||
11
static/game_configs/sect.csv
Normal file
11
static/game_configs/sect.csv
Normal file
@@ -0,0 +1,11 @@
|
||||
id,name,desc,member_act_style,alignment,sect_surnames,sect_given_names
|
||||
,,宗门名称与描述,宗门成员行事风格,阵营(正/中/邪),宗门常用姓氏(分号分隔),宗门常用名(分号分隔)
|
||||
1,明心剑宗,以剑证道,清明克己,行止如一。重剑与心法并重,讲究明心见性。,正,明;心;剑;云;白;飞;清;凌;顾;林,清风;明远;问心;凌霄;止水;无尘;素心;明照;心远;雪凝
|
||||
2,百兽宗,崇尚血脉与搏杀,习驭兽与变身之术,体魄强横。,你是百兽宗弟子。你言语直接,重视力量与血性,崇尚狩猎与搏斗。,,百;熊;虎;狼;猿;牛;白;石;嵩;岳,虎魄;狼行;熊罡;白猿;石坚;山岚;青鬃;玄爪;金瞳;赤鬃
|
||||
3,水镜宗,以水化镜,以镜照心,术法多幻与反制,攻守如流。,你是水镜宗弟子。你处事冷静圆融,喜以柔克刚,擅借力与反制。,中,水;镜;寒;霜;冰;清;沐;阮;顾;白,映月;照心;寒影;秋水;轻漪;雪落;如镜;寒江;青荷;凝霜
|
||||
4,冥王宗,行走幽冥之道,以冥焰镇压亡魂,术法阴冷狠厉。,你是冥王宗弟子。你言辞冷厉少情,敬畏因果而不惧杀伐,偏向效率与结果。,邪,冥;王;玄;幽;夜;白;江;冷;燕;楚,冥焰;噬魂;夜阙;幽垣;玄骨;寒魄;冥狱;魇息;影灭;夜行
|
||||
5,朱勾宗,以血炼骨,勾魂摄魄,擅用血煞与禁术,代价与力量并存。,你是朱勾宗弟子。你直面欲望与代价,不惧黑暗,以攻伐见长。,邪,朱;勾;血;狱;秦;韩;燕;赵;魏;楚,血手;勾魂;朱砂;赤狱;凝血;摄魄;夺心;吞灵;渊渟;夜烬
|
||||
6,合欢宗,以情入道,双修与魅术并重,善驭人心,长于权变。,你是合欢宗弟子。你辞令婉转,善于拿捏人欲与局势,以柔制刚。,中,合;欢;苏;陆;柳;花;月;楚;顾;白,婉心;轻柔;疏影;流烟;如梦;绮念;月华;惜香;慕雪;倾城
|
||||
7,镇魂宗,以镇魂钟摄百魂,擅安魂、封邪、渡厄,兼有刚烈镇压之术。,你是镇魂宗弟子。你肃穆沉稳,重安魂镇邪,少言而果决。,正,镇;魂;钟;青;凌;白;楚;顾;林;云,镇灵;定魄;钟离;安魂;肃霜;白岭;清钟;涤秽;正鸣;宁川
|
||||
8,幽魂噬影宗,影遁噬魂,袭取魄光于无形,偏好奇袭与暗杀之道。,你是幽魂噬影宗弟子。你行事隐秘果断,重结果轻虚名,擅潜行与出其不意。,邪,幽;魂;噬;影;夜;冷;白;江;玄;楚,噬影;隐魄;夜藏;无相;玄影;摄魂;遁形;寒星;绝响;空痕
|
||||
9,千帆城,商旅云集的修真大城,亦有自成体系的城主与护城修士。,你是千帆城修士。你务实精明,重交易与信誉,崇尚规则与秩序。,中,商;楚;顾;白;苏;林;叶;秦;赵;魏,商行;持衡;清评;问价;立契;通衡;问道;理市;衡准;守约
|
||||
|
@@ -9,5 +9,5 @@
|
||||
|
||||
注意,只返回json格式的结果,格式为:
|
||||
{{
|
||||
"story": "", // 第三人称的故事描述
|
||||
"story": "", // 第三人称的故事描述,仙侠语言风格
|
||||
}}
|
||||
@@ -14,7 +14,7 @@
|
||||
{avatar_name_2}: {{
|
||||
"thinking": ..., // 简单思考应该怎么决策
|
||||
"feedback": ... // 面对{avatar_name_1}的行为的合法feedback action name
|
||||
"talk_content": ... // 第三人称视角的,对话的主题和情况概括,约100字。注意不是对话的口语内容。
|
||||
"talk_content": ... // 第三人称视角的,对话的主题和情况概括,约100字。注意不是对话的口语内容,仙侠语言风格。
|
||||
"into_relation": ... // 如果你认为可以让两者产生某种身份关系,则返回。注意这是{avatar_name_2}相对于{avatar_name_1}的身份。
|
||||
}}
|
||||
}}
|
||||
Reference in New Issue
Block a user