update treasure to weapon and auxiliary
This commit is contained in:
@@ -32,6 +32,7 @@ from .help_mortals import HelpMortals
|
||||
from .devour_mortals import DevourMortals
|
||||
from .self_heal import SelfHeal
|
||||
from .catch import Catch
|
||||
from .nurture_weapon import NurtureWeapon
|
||||
|
||||
# 注册到 ActionRegistry(标注是否为实际可执行动作)
|
||||
register_action(actual=False)(Action)
|
||||
@@ -60,6 +61,7 @@ register_action(actual=True)(HelpMortals)
|
||||
register_action(actual=True)(DevourMortals)
|
||||
register_action(actual=True)(SelfHeal)
|
||||
register_action(actual=True)(Catch)
|
||||
register_action(actual=True)(NurtureWeapon)
|
||||
# Talk 已移动到 mutual_action 模块,在那里注册
|
||||
|
||||
__all__ = [
|
||||
|
||||
@@ -35,6 +35,14 @@ class Battle(InstantAction):
|
||||
# 应用双方伤害
|
||||
loser.hp.reduce(loser_damage)
|
||||
winner.hp.reduce(winner_damage)
|
||||
|
||||
# 增加双方兵器熟练度(战斗经验)
|
||||
import random
|
||||
proficiency_gain = random.uniform(1.0, 3.0)
|
||||
self.avatar.increase_weapon_proficiency(proficiency_gain)
|
||||
if target is not None:
|
||||
target.increase_weapon_proficiency(proficiency_gain)
|
||||
|
||||
self._last_result = (winner.name, loser.name, loser_damage, winner_damage)
|
||||
|
||||
def can_start(self, avatar_name: str | None = None) -> tuple[bool, str]:
|
||||
|
||||
46
src/classes/action/nurture_weapon.py
Normal file
46
src/classes/action/nurture_weapon.py
Normal file
@@ -0,0 +1,46 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from src.classes.action import TimedAction
|
||||
from src.classes.event import Event
|
||||
import random
|
||||
|
||||
|
||||
class NurtureWeapon(TimedAction):
|
||||
"""
|
||||
温养兵器:花时间温养兵器,可以较多增加熟练度
|
||||
"""
|
||||
|
||||
COMMENT = "温养兵器,增加兵器熟练度"
|
||||
DOABLES_REQUIREMENTS = "任何时候都可以执行"
|
||||
PARAMS = {}
|
||||
|
||||
duration_months = 3
|
||||
|
||||
def _execute(self) -> None:
|
||||
# 温养兵器增加较多熟练度(5-10)
|
||||
proficiency_gain = random.uniform(5.0, 10.0)
|
||||
self.avatar.increase_weapon_proficiency(proficiency_gain)
|
||||
|
||||
def can_start(self) -> tuple[bool, str]:
|
||||
# 任何时候都可以温养兵器
|
||||
return (True, "")
|
||||
|
||||
def start(self) -> Event:
|
||||
weapon_name = self.avatar.weapon.name if self.avatar.weapon else "兵器"
|
||||
return Event(
|
||||
self.world.month_stamp,
|
||||
f"{self.avatar.name} 开始温养{weapon_name}",
|
||||
related_avatars=[self.avatar.id]
|
||||
)
|
||||
|
||||
def finish(self) -> list[Event]:
|
||||
weapon_name = self.avatar.weapon.name if self.avatar.weapon else "兵器"
|
||||
proficiency = self.avatar.weapon_proficiency
|
||||
return [
|
||||
Event(
|
||||
self.world.month_stamp,
|
||||
f"{self.avatar.name} 完成温养{weapon_name},熟练度提升至{proficiency:.1f}%",
|
||||
related_avatars=[self.avatar.id]
|
||||
)
|
||||
]
|
||||
|
||||
@@ -102,6 +102,8 @@ class Avatar(AvatarSaveMixin, AvatarLoadMixin):
|
||||
appearance: Appearance = field(default_factory=get_random_appearance)
|
||||
# 兵器(必有,无则分配普通兵器)
|
||||
weapon: Optional[Weapon] = None
|
||||
# 兵器熟练度(0-100),更换兵器归零
|
||||
weapon_proficiency: float = 0.0
|
||||
# 辅助装备(可选)
|
||||
auxiliary: Optional[Auxiliary] = None
|
||||
# 灵兽:最多一个;若再次捕捉则覆盖
|
||||
@@ -144,10 +146,21 @@ class Avatar(AvatarSaveMixin, AvatarLoadMixin):
|
||||
from src.classes.alignment import Alignment as _Alignment
|
||||
self.alignment = random.choice(list(_Alignment))
|
||||
|
||||
# 兵器初始化:如果无兵器,分配一个随机的普通兵器
|
||||
# 兵器初始化:如果无兵器,分配一个普通兵器
|
||||
# 有宗门且宗门有倾向兵器时,80%概率使用宗门兵器,否则随机
|
||||
if self.weapon is None:
|
||||
weapon_type = random.choice(list(WeaponType))
|
||||
self.weapon = get_common_weapon(weapon_type)
|
||||
if self.sect is not None and self.sect.preferred_weapon:
|
||||
# 有宗门倾向兵器,80%概率使用
|
||||
if random.random() < 0.8:
|
||||
# 尝试根据宗门倾向兵器类型获取
|
||||
for wt in WeaponType:
|
||||
if wt.value == self.sect.preferred_weapon:
|
||||
self.weapon = get_common_weapon(wt)
|
||||
break
|
||||
# 如果还没有兵器(无宗门、无倾向、或20%随机),随机分配
|
||||
if self.weapon is None:
|
||||
weapon_type = random.choice(list(WeaponType))
|
||||
self.weapon = get_common_weapon(weapon_type)
|
||||
|
||||
# effects 改为实时属性,不在此初始化
|
||||
|
||||
@@ -202,7 +215,7 @@ class Avatar(AvatarSaveMixin, AvatarLoadMixin):
|
||||
from src.classes.sect import get_sect_info_with_rank
|
||||
|
||||
if detailed:
|
||||
weapon_info = self.weapon.get_detailed_info() if self.weapon is not None else "无"
|
||||
weapon_info = f"{self.weapon.get_detailed_info()},熟练度:{self.weapon_proficiency:.1f}%"
|
||||
auxiliary_info = self.auxiliary.get_detailed_info() if self.auxiliary is not None else "无"
|
||||
sect_info = get_sect_info_with_rank(self, detailed=True)
|
||||
alignment_info = self.alignment.get_detailed_info() if self.alignment is not None else "未知"
|
||||
@@ -721,4 +734,23 @@ class Avatar(AvatarSaveMixin, AvatarLoadMixin):
|
||||
"""
|
||||
return self.cultivation_progress.get_move_step()
|
||||
|
||||
def change_weapon(self, new_weapon: Weapon) -> None:
|
||||
"""
|
||||
更换兵器,熟练度归零
|
||||
|
||||
Args:
|
||||
new_weapon: 新的兵器
|
||||
"""
|
||||
self.weapon = new_weapon
|
||||
self.weapon_proficiency = 0.0
|
||||
|
||||
def increase_weapon_proficiency(self, amount: float) -> None:
|
||||
"""
|
||||
增加兵器熟练度,上限100
|
||||
|
||||
Args:
|
||||
amount: 增加的熟练度值
|
||||
"""
|
||||
self.weapon_proficiency = min(100.0, self.weapon_proficiency + amount)
|
||||
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ Effect 来源:
|
||||
- 功法 (technique)
|
||||
- 灵根 (root)
|
||||
- 特质 (persona)
|
||||
- 法宝 (treasure)
|
||||
- 兵器和辅助装备 (weapon, auxiliary)
|
||||
"""
|
||||
|
||||
# =============================================================================
|
||||
@@ -143,7 +143,7 @@ Effects 通过 src/classes/effect.py 中的 _merge_effects() 函数合并。
|
||||
2. 功法 (technique)
|
||||
3. 灵根 (root)
|
||||
4. 特质 (persona) - 遍历所有 personas
|
||||
5. 法宝 (treasure)
|
||||
5. 兵器和辅助装备 (weapon, auxiliary)
|
||||
|
||||
最终结果通过 Avatar.effects 属性获取(实时计算)。
|
||||
"""
|
||||
|
||||
@@ -20,7 +20,7 @@ class EquipmentGrade(Enum):
|
||||
|
||||
# 装备等级颜色映射
|
||||
_grade_colors = {
|
||||
EquipmentGrade.COMMON: (150, 150, 150), # 灰色
|
||||
EquipmentGrade.COMMON: (255, 255, 255), # 白色
|
||||
EquipmentGrade.TREASURE: (138, 43, 226), # 紫色
|
||||
EquipmentGrade.ARTIFACT: (255, 215, 0), # 金色
|
||||
}
|
||||
|
||||
@@ -34,14 +34,13 @@ class Sect:
|
||||
desc: str
|
||||
member_act_style: str
|
||||
alignment: Alignment
|
||||
sect_surnames: list[str]
|
||||
male_sect_given_names: list[str]
|
||||
female_sect_given_names: list[str]
|
||||
headquarter: SectHeadQuarter
|
||||
# 本宗关联的功法名称(来自 technique.csv 的 sect 列)
|
||||
technique_names: list[str]
|
||||
# 随机选择宗门时使用的权重(默认1)
|
||||
weight: float = 1.0
|
||||
# 宗门倾向的兵器类型(字符串,如"剑"、"刀"等)
|
||||
preferred_weapon: str = ""
|
||||
# 影响角色或系统的效果
|
||||
effects: dict[str, object] = field(default_factory=dict)
|
||||
# 宗门自定义职位名称(可选):SectRank -> 名称
|
||||
@@ -100,8 +99,6 @@ def _load_sects() -> tuple[dict[int, Sect], dict[str, Sect]]:
|
||||
assets_base = Path("assets/sects")
|
||||
for _, row in df.iterrows():
|
||||
image_path = assets_base / f"{row['name']}.png"
|
||||
male_given_names = _split_names(row["male_sect_given_names"])
|
||||
female_given_names = _split_names(row["female_sect_given_names"])
|
||||
|
||||
# 收集该宗门下配置的功法名称
|
||||
technique_names: list[str] = []
|
||||
@@ -119,6 +116,10 @@ def _load_sects() -> tuple[dict[int, Sect], dict[str, Sect]]:
|
||||
# 读取 effects(兼容 JSON/单引号字面量/空)
|
||||
effects = load_effect_from_str(row.get("effects", ""))
|
||||
|
||||
# 读取倾向兵器类型
|
||||
preferred_weapon_val = row.get("preferred_weapon", "")
|
||||
preferred_weapon = str(preferred_weapon_val).strip() if str(preferred_weapon_val) != "nan" else ""
|
||||
|
||||
# 从 sect_region.csv 中优先取驻地名称/描述;否则兼容旧列或退回宗门名
|
||||
csv_hq = hq_by_sect_id.get(int(row["id"]))
|
||||
hq_name_from_csv = (csv_hq[0] if csv_hq else "").strip() if csv_hq else ""
|
||||
@@ -130,9 +131,6 @@ def _load_sects() -> tuple[dict[int, Sect], dict[str, Sect]]:
|
||||
desc=str(row["desc"]),
|
||||
member_act_style=str(row["member_act_style"]),
|
||||
alignment=Alignment.from_str(row["alignment"]),
|
||||
sect_surnames=_split_names(row["sect_surnames"]),
|
||||
male_sect_given_names=male_given_names,
|
||||
female_sect_given_names=female_given_names,
|
||||
# 驻地:优先 sect_region.csv;否则兼容旧列;最终回退宗门名
|
||||
headquarter=SectHeadQuarter(
|
||||
name=(hq_name_from_csv or str(row.get("headquarter_name", "")).strip() or str(row["name"])) ,
|
||||
@@ -141,6 +139,7 @@ def _load_sects() -> tuple[dict[int, Sect], dict[str, Sect]]:
|
||||
),
|
||||
technique_names=technique_names,
|
||||
weight=weight,
|
||||
preferred_weapon=preferred_weapon,
|
||||
effects=effects,
|
||||
)
|
||||
sects_by_id[sect.id] = sect
|
||||
|
||||
@@ -1,80 +0,0 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass, field
|
||||
from typing import Optional, Dict
|
||||
|
||||
from src.utils.df import game_configs
|
||||
from src.classes.effect import load_effect_from_str
|
||||
from src.classes.sect import Sect, sects_by_id
|
||||
|
||||
|
||||
@dataclass
|
||||
class Treasure:
|
||||
"""
|
||||
法宝:配置驱动,暂不挂接到 Avatar。
|
||||
字段与 static/game_configs/treasure.csv 对应:
|
||||
- sect_id:对应宗门ID(见 sect.csv);允许为空表示无特定宗门归属
|
||||
- effects:解析为 dict,用于未来与 Avatar.effects 合并
|
||||
"""
|
||||
id: int
|
||||
name: str
|
||||
sect_id: Optional[int]
|
||||
desc: str
|
||||
effects: dict[str, object] = field(default_factory=dict)
|
||||
sect: Optional[Sect] = None
|
||||
# 万魂幡专用:吞噬魂魄计数(0~10000)
|
||||
devoured_souls: int = 0
|
||||
|
||||
def get_info(self) -> str:
|
||||
suffix = f"(吞噬魂魄:{self.devoured_souls})" if self.name == "万魂幡" and self.devoured_souls > 0 else ""
|
||||
return f"{self.name}{suffix}"
|
||||
|
||||
def get_detailed_info(self) -> str:
|
||||
souls = f" 吞噬魂魄:{self.devoured_souls}" if self.name == "万魂幡" and self.devoured_souls > 0 else ""
|
||||
return f"{self.name}({self.desc}){souls}"
|
||||
|
||||
|
||||
def _load_treasures() -> tuple[Dict[int, Treasure], Dict[str, Treasure], Dict[int, Treasure]]:
|
||||
"""从配表加载 treasure 数据。
|
||||
返回:(按ID、按名称、按宗门ID 的映射)。
|
||||
若同一宗门配置多个法宝,按首次出现保留(每门至多一个)。
|
||||
"""
|
||||
treasures_by_id: Dict[int, Treasure] = {}
|
||||
treasures_by_name: Dict[str, Treasure] = {}
|
||||
treasures_by_sect_id: Dict[int, Treasure] = {}
|
||||
|
||||
df = game_configs.get("treasure")
|
||||
if df is None:
|
||||
return treasures_by_id, treasures_by_name, treasures_by_sect_id
|
||||
|
||||
for _, row in df.iterrows():
|
||||
raw_sect = row.get("sect_id")
|
||||
sect_id: Optional[int] = None
|
||||
if raw_sect is not None and str(raw_sect).strip() and str(raw_sect).strip() != "nan":
|
||||
sect_id = int(float(raw_sect))
|
||||
|
||||
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
|
||||
|
||||
t = Treasure(
|
||||
id=int(row["id"]),
|
||||
name=str(row["name"]),
|
||||
sect_id=sect_id,
|
||||
desc=str(row.get("desc", "")),
|
||||
effects=effects,
|
||||
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:
|
||||
treasures_by_sect_id[t.sect_id] = t
|
||||
|
||||
return treasures_by_id, treasures_by_name, treasures_by_sect_id
|
||||
|
||||
|
||||
treasures_by_id, treasures_by_name, treasures_by_sect_id = _load_treasures()
|
||||
@@ -72,12 +72,15 @@ def _load_weapons() -> tuple[Dict[int, Weapon], Dict[str, Weapon], Dict[int, Wea
|
||||
sect_obj: Optional[Sect] = sects_by_id.get(int(sect_id)) if sect_id is not None else None
|
||||
|
||||
# 解析weapon_type
|
||||
weapon_type_str = str(row.get("weapon_type", "其他"))
|
||||
weapon_type = WeaponType.OTHER
|
||||
weapon_type_str = str(row.get("weapon_type", ""))
|
||||
weapon_type = None
|
||||
for wt in WeaponType:
|
||||
if wt.value == weapon_type_str:
|
||||
weapon_type = wt
|
||||
break
|
||||
|
||||
if weapon_type is None:
|
||||
raise ValueError(f"武器 {row['name']} 的weapon_type '{weapon_type_str}' 无效,必须是有效的兵器类型")
|
||||
|
||||
# 解析grade
|
||||
grade_str = str(row.get("grade", "普通"))
|
||||
|
||||
@@ -13,6 +13,7 @@ class WeaponType(Enum):
|
||||
WHIP = "鞭"
|
||||
ZITHER = "琴" # 音律武器
|
||||
FLUTE = "笛" # 包括箫
|
||||
HIDDEN_WEAPON = "暗器" # 暗器,如飞针、袖箭等
|
||||
|
||||
def __str__(self) -> str:
|
||||
return self.value
|
||||
|
||||
@@ -106,6 +106,9 @@ class AvatarLoadMixin:
|
||||
avatar.weapon = copy.deepcopy(weapons_by_id[weapon_id])
|
||||
avatar.weapon.special_data = data.get("weapon_special_data", {})
|
||||
|
||||
# 恢复兵器熟练度
|
||||
avatar.weapon_proficiency = float(data.get("weapon_proficiency", 0.0))
|
||||
|
||||
# 重建auxiliary(深拷贝因为special_data是实例特有的)
|
||||
auxiliary_id = data.get("auxiliary_id")
|
||||
if auxiliary_id is not None and auxiliary_id in auxiliaries_by_id:
|
||||
|
||||
@@ -399,8 +399,6 @@ def build_avatars_from_plan(
|
||||
avatars_by_index: list[Avatar] = [None] * n # type: ignore
|
||||
avatars_by_id: dict[str, Avatar] = {}
|
||||
|
||||
sect_treasure_assigned: Dict[int, bool] = {}
|
||||
|
||||
for i in range(n):
|
||||
gender = planned_gender[i] or random_gender()
|
||||
sect = planned_sect[i]
|
||||
|
||||
@@ -78,6 +78,7 @@ class AvatarSaveMixin:
|
||||
"items": items_dict,
|
||||
"weapon_id": self.weapon.id if self.weapon else None,
|
||||
"weapon_special_data": self.weapon.special_data if self.weapon else {},
|
||||
"weapon_proficiency": self.weapon_proficiency,
|
||||
"auxiliary_id": self.auxiliary.id if self.auxiliary else None,
|
||||
"auxiliary_special_data": self.auxiliary.special_data if self.auxiliary else {},
|
||||
"spirit_animal": spirit_animal_dict,
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
id,name,desc,member_act_style,alignment,sect_surnames,male_sect_given_names,female_sect_given_names,weight,effects
|
||||
,,宗门名称与描述,宗门成员行事风格,阵营(正/中/邪),宗门常用姓氏(分号分隔),男性常用名(分号分隔),女性常用名(分号分隔),权重(默认1),effects(JSON)
|
||||
1,明心剑宗,通玄界东方第一宗,以无上剑道称雄于世。云纹禁制为不传心法。,清明克己,行止如一。重剑与心法并重,讲究明心见性。,正,明;心;剑;霄;玄;霁;衡;孤;徽;肃,澄川;宏石;磐岳;霆岱;寂岚;久安;宸秋;烁离;沧岳;砺锋;炎洲;远歌,采微;霏岚;韶华;绮澜;珠影;远岫;若水;凝香;雪瑶;南絮;轻萝;宛竹,1,
|
||||
2,百兽宗,以驯养灵兽闻名,豢养各种妖兽灵怪为战力。,你言语直接,重视力量与血性,崇尚狩猎与搏斗。,邪,,驼王;飞熊;虎魄;狼行;熊罡;白猿;石坚;山岚;青鬃;玄爪;金瞳;裂爪;破角;狂鬃;赤鬣;苍隼;啸风;裂岩,狐绮;白貂;青翎;雪牙;赤羽;玄狸;灵爪;月狐;银鳞;霜蹄;云貉;绒尾;锦狐;轻蹄,1,
|
||||
3,水镜宗,正道十宗之一,实则严守中立。拥有仙界异宝"彻天水镜"可预知未来。,你处事冷静圆融,喜以柔克刚,擅借力与反制。,中,水;镜;寒;霜;冰;清;沐;澜;渊;泉,涟光;沧浪;泽远;浩川;泊舟;涓石;溪原;涵舟;泠曜;漪岑;淞岳;涔雨,漫霖;洛漪;潋月;涵烟;沁波;翠波;漫葭;汀兰;潭歌;涓玥;澧宁;潇然,1,
|
||||
4,冥王宗,行走幽冥之道,术法阴冷狠厉。,你言辞冷厉少情,敬畏因果而不惧杀伐,偏向效率与结果。,邪,冥;王;玄;幽;夜;白;冷;狱;魇;阴,血燎;焚魄;灰灭;殁川;绝尘;厌离;朔寒;邪风;归墟;朽骨;朔月;止戈,寒绫;霜瑶;凄歌;素鸢;祭宁;黛魂;夙梦;绫雪;凛珑;霁月;旷音;凝岚,1,
|
||||
5,朱勾宗,邪宗大派。以炼器、机关、暗杀闻名于世,素来阴毒冷僻。,你直面欲望与代价,不惧黑暗,以攻伐见长。,邪,朱;绯;刃;戮;蚀;渊;钧;鸦;墨;殷,暗阑;机括;鬼匣;夜禁;幻锁;残锋;暗弦;影栅;幽钩;断线;潜匿;迷踪,玄簪;霜绡;纤罗;碎玉;影裳;轻弦;凝黛;凝烟;冷珥;素纱;凛钗;寒袖,1,
|
||||
6,合欢宗,以情入道,靠双修增进修为,善驭人心,长于权变。,你辞令婉转,善于拿捏人欲与局势,以柔制刚。,中,合;欢;苏;陆;柳;花;月;楚;顾;白,流烟;迟夜;长陌;归舟;暮成;远辞;行止;轻寒;沉香;野鹤;乘风,婉心;轻柔;疏影;如梦;绮念;惜香;慕雪;倾城;绯烟;晚晴;素袖;霁眉;绸缪;静妍,1,"{""legal_actions"": [""DualCultivation""]}"
|
||||
7,镇魂宗,铁血风格,擅安魂、封邪、渡厄,兼有刚烈镇压之术。,你肃穆沉稳,重安魂镇邪,少言而果决。,正,厉;卢;镇;魂;钟;青;凌;白;楚;顾,安魄;靖川;霁阳;季衡;砺甲;烁锋;昊戈;祁光;漠石;启封;殷策;定魄,清宁;素铃;靖霜;澄心;霁雪;安祈;净月;宁枝;祷绫;明槐;采霁;定寒,1,
|
||||
8,幽魂噬影宗,镇宗典籍《幽冥录》。幽明气为根基。,你行事隐秘果断,重结果轻虚名,擅潜行与出其不意。,邪,冥;阎;鬼;幽;归;应;阴;碧;夜;魅,噬影;无藏;绝响;断痕;影渊;暗行;潜踪;魄隐;迷雾;空蝉;断念;裂隙,影绫;暗萝;霜绡;素鹭;玄绮;凝灯;绫岚;凛铃;朔华;漠音;宵岑;泠歌,1,
|
||||
9,千帆城,炼器大宗,巧匠云集。著名法宝有灵灭丝、定魂蓝星、天罗网、万里极光壁、飞翼等。商旅云集,自成体系。,你务实精明,重交易与信誉,崇尚规则与秩序。,中,商;楚;顾;白;苏;林;叶;秦;赵;魏,持衡;清评;问价;立契;通衡;问道;理市;衡准;守约;筑匠;铸衡;估算,素蓝;明衡;巧心;青帆;绫舟;观星;衡绫;星槎;织霓;采绫;芸巧;霁行;砚秋;镶玑;绘蓝;银梭;珩心,1,
|
||||
id,name,desc,member_act_style,alignment,weight,preferred_weapon,effects
|
||||
,,宗门名称与描述,宗门成员行事风格,阵营(正/中/邪),权重(默认1),倾向兵器类型,effects(JSON)
|
||||
1,明心剑宗,通玄界东方第一宗,以无上剑道称雄于世。云纹禁制为不传心法。,清明克己,行止如一。重剑与心法并重,讲究明心见性。,正,1,剑,
|
||||
2,百兽宗,以驯养灵兽闻名,豢养各种妖兽灵怪为战力。,你言语直接,重视力量与血性,崇尚狩猎与搏斗。,邪,1,鞭,
|
||||
3,水镜宗,正道十宗之一,实则严守中立。拥有仙界异宝"彻天水镜"可预知未来。,你处事冷静圆融,喜以柔克刚,擅借力与反制。,中,1,扇,
|
||||
4,冥王宗,行走幽冥之道,术法阴冷狠厉。,你言辞冷厉少情,敬畏因果而不惧杀伐,偏向效率与结果。,邪,1,扇,
|
||||
5,朱勾宗,邪宗大派。以炼器、机关、暗杀闻名于世,素来阴毒冷僻。,你直面欲望与代价,不惧黑暗,以攻伐见长。,邪,1,暗器,
|
||||
6,合欢宗,以情入道,靠双修增进修为,善驭人心,长于权变。,你辞令婉转,善于拿捏人欲与局势,以柔制刚。,中,1,琴,"{""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.
|
@@ -1,14 +0,0 @@
|
||||
id,name,sect_id,desc,effects
|
||||
,名称,所属宗门ID(见sect.csv),描述/提示词,"JSON形式"
|
||||
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"": 2, ""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}"
|
||||
|
||||
9,百兽驭兽符,2,以兽纹灵符加持,唤引兽心,御兽更易.,"{""extra_catch_success_rate"": 0.1}"
|
||||
|
||||
|
||||
|
@@ -3,12 +3,13 @@ id,name,weapon_type,grade,sect_id,desc,effects
|
||||
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"": ""eval(avatar.weapon.special_data.get('devoured_souls', 0) // 100 * 0.1)""}"
|
||||
1001,普通剑,剑,普通,,平凡无奇的剑,修仙者人手一把。,"{}"
|
||||
1002,普通刀,刀,普通,,平凡无奇的刀。,"{}"
|
||||
1003,普通枪,枪,普通,,平凡无奇的枪。,"{}"
|
||||
1004,普通棍,棍,普通,,平凡无奇的棍。,"{}"
|
||||
1005,普通扇,扇,普通,,平凡无奇的扇。,"{}"
|
||||
1006,普通鞭,鞭,普通,,平凡无奇的鞭。,"{}"
|
||||
1007,普通琴,琴,普通,,平凡无奇的琴。,"{}"
|
||||
1008,普通笛,笛,普通,,平凡无奇的笛。,"{}"
|
||||
1001,普通剑,剑,普通,,平凡无奇的剑。,"{""extra_battle_strength_points"": 1}"
|
||||
1002,普通刀,刀,普通,,平凡无奇的刀。,"{""extra_battle_strength_points"": 1}"
|
||||
1003,普通枪,枪,普通,,平凡无奇的枪。,"{""extra_battle_strength_points"": 1}"
|
||||
1004,普通棍,棍,普通,,平凡无奇的棍。,"{""extra_battle_strength_points"": 1}"
|
||||
1005,普通扇,扇,普通,,平凡无奇的扇。,"{""extra_battle_strength_points"": 1}"
|
||||
1006,普通鞭,鞭,普通,,平凡无奇的鞭。,"{""extra_battle_strength_points"": 1}"
|
||||
1007,普通琴,琴,普通,,平凡无奇的琴。,"{""extra_battle_strength_points"": 1}"
|
||||
1008,普通笛,笛,普通,,平凡无奇的笛。,"{""extra_battle_strength_points"": 1}"
|
||||
1009,普通暗器,暗器,普通,,平凡无奇的暗器。,"{""extra_battle_strength_points"": 1}"
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user