From ccdcc590f40aa854f874da7dd3b9a09e0f103333 Mon Sep 17 00:00:00 2001 From: bridge Date: Thu, 11 Sep 2025 23:21:06 +0800 Subject: [PATCH] finish animal and plants --- README.md | 1 + src/classes/action.py | 122 ++++++++++++++++++++++++-- src/classes/animal.py | 40 ++++++++- src/classes/cultivation.py | 75 +++++++++++++++- src/classes/item.py | 5 +- src/classes/plant.py | 40 ++++++++- src/classes/region.py | 71 ++++++++++++++- src/front/front.py | 18 +++- src/run/log.py | 4 + static/config.yml | 2 + static/game_configs/animal.csv | 15 +++- static/game_configs/item.csv | 23 +++-- static/game_configs/normal_region.csv | 30 +++---- static/game_configs/persona.csv | 2 + static/game_configs/plant.csv | 14 ++- 15 files changed, 412 insertions(+), 50 deletions(-) diff --git a/README.md b/README.md index dd52dec..fce1a88 100644 --- a/README.md +++ b/README.md @@ -98,6 +98,7 @@ ### 🌿 生态系统 - ✅ 动植物 +- ✅ 狩猎、采集、材料系统 - [ ] 魔兽系统 - [ ] 兽潮 diff --git a/src/classes/action.py b/src/classes/action.py index 62b1b7b..67213aa 100644 --- a/src/classes/action.py +++ b/src/classes/action.py @@ -7,8 +7,9 @@ import inspect from src.classes.essence import Essence, EssenceType from src.classes.root import Root, corres_essence_type -from src.classes.region import Region, CultivateRegion +from src.classes.region import Region, CultivateRegion, NormalRegion from src.classes.event import Event, NULL_EVENT +from src.classes.item import Item if TYPE_CHECKING: from src.classes.avatar import Avatar @@ -319,7 +320,118 @@ class Play(DefineAction, ActualActionMixin): def is_doable(self) -> bool: return True -ALL_ACTION_CLASSES = [Move, Cultivate, Breakthrough, MoveToRegion, Play] -ALL_ACTUAL_ACTION_CLASSES = [Cultivate, Breakthrough, MoveToRegion, Play] -ALL_ACTION_NAMES = ["Move", "Cultivate", "Breakthrough", "MoveToRegion", "Play"] -ALL_ACTUAL_ACTION_NAMES = ["Cultivate", "Breakthrough", "MoveToRegion", "Play"] \ No newline at end of file + +@long_action(step_month=6) +class Hunt(DefineAction, ActualActionMixin): + """ + 狩猎动作,在有动物的区域进行狩猎,持续6个月 + 可以获得动物对应的物品 + """ + COMMENT = "在当前区域狩猎动物,获取动物材料" + PARAMS = {} + + def _execute(self) -> None: + """ + 执行狩猎动作 + """ + region = self.avatar.tile.region + success_rate = self.get_success_rate() + + if random.random() < success_rate: + # 成功狩猎,从avatar境界足够的动物中随机选择一种 + avatar_realm = self.avatar.cultivation_progress.realm + available_animals = [animal for animal in region.animals if avatar_realm >= animal.realm] + target_animal = random.choice(available_animals) + # 随机选择该动物的一种物品 + item = random.choice(target_animal.items) + self.avatar.add_item(item, 1) + + def get_success_rate(self) -> float: + """ + 获取狩猎成功率,预留接口,目前固定为100% + """ + return 1.0 # 100%成功率 + + def get_event(self) -> Event: + """ + 获取狩猎动作开始时的事件 + """ + region = self.avatar.tile.region + return Event(self.world.month_stamp, f"{self.avatar.name} 在 {region.name} 开始狩猎") + + @property + def is_doable(self) -> bool: + """ + 判断是否可以狩猎:必须在有动物的普通区域,且avatar的境界必须大于等于动物的境界 + """ + region = self.avatar.tile.region + if not isinstance(region, NormalRegion) or len(region.animals) == 0: + return False + + # 检查avatar的境界是否足够狩猎区域内的动物 + avatar_realm = self.avatar.cultivation_progress.realm + for animal in region.animals: + if avatar_realm >= animal.realm: + return True + return False + + +@long_action(step_month=6) +class Harvest(DefineAction, ActualActionMixin): + """ + 采集动作,在有植物的区域进行采集,持续6个月 + 可以获得植物对应的物品 + """ + COMMENT = "在当前区域采集植物,获取植物材料" + PARAMS = {} + + def _execute(self) -> None: + """ + 执行采集动作 + """ + region = self.avatar.tile.region + success_rate = self.get_success_rate() + + if random.random() < success_rate: + # 成功采集,从avatar境界足够的植物中随机选择一种 + avatar_realm = self.avatar.cultivation_progress.realm + available_plants = [plant for plant in region.plants if avatar_realm >= plant.realm] + target_plant = random.choice(available_plants) + # 随机选择该植物的一种物品 + item = random.choice(target_plant.items) + self.avatar.add_item(item, 1) + + def get_success_rate(self) -> float: + """ + 获取采集成功率,预留接口,目前固定为100% + """ + return 1.0 # 100%成功率 + + def get_event(self) -> Event: + """ + 获取采集动作开始时的事件 + """ + region = self.avatar.tile.region + return Event(self.world.month_stamp, f"{self.avatar.name} 在 {region.name} 开始采集") + + @property + def is_doable(self) -> bool: + """ + 判断是否可以采集:必须在有植物的普通区域,且avatar的境界必须大于等于植物的境界 + """ + region = self.avatar.tile.region + if not isinstance(region, NormalRegion) or len(region.plants) == 0: + return False + + # 检查avatar的境界是否足够采集区域内的植物 + avatar_realm = self.avatar.cultivation_progress.realm + for plant in region.plants: + if avatar_realm >= plant.realm: + return True + return False + + +ALL_ACTION_CLASSES = [Move, Cultivate, Breakthrough, MoveToRegion, Play, Hunt, Harvest] +ALL_ACTUAL_ACTION_CLASSES = [Cultivate, Breakthrough, MoveToRegion, Play, Hunt, Harvest] +ALL_ACTION_NAMES = ["Move", "Cultivate", "Breakthrough", "MoveToRegion", "Play", "Hunt", "Harvest"] +ALL_ACTUAL_ACTION_NAMES = ["Cultivate", "Breakthrough", "MoveToRegion", "Play", "Hunt", "Harvest"] \ No newline at end of file diff --git a/src/classes/animal.py b/src/classes/animal.py index e1bef58..bf5c713 100644 --- a/src/classes/animal.py +++ b/src/classes/animal.py @@ -1,6 +1,10 @@ -from dataclasses import dataclass +from dataclasses import dataclass, field +from typing import Optional from src.utils.df import game_configs +from src.utils.config import CONFIG +from src.classes.item import Item, items_by_id +from src.classes.cultivation import Realm @dataclass class Animal: @@ -10,13 +14,35 @@ class Animal: id: int name: str desc: str - grade: int + realm: Realm + item_ids: list[int] = field(default_factory=list) # 该动物对应的物品IDs + + # 这些字段将在__post_init__中设置 + items: list[Item] = field(init=False, default_factory=list) # 该动物对应的物品实例 + + def __post_init__(self): + """初始化物品实例""" + for item_id in self.item_ids: + if item_id in items_by_id: + self.items.append(items_by_id[item_id]) def __hash__(self) -> int: return hash(self.id) def __str__(self) -> str: return self.name + + def get_info(self) -> str: + """ + 获取动物的详细信息,包括名字、描述、境界和材料 + """ + info_parts = [f"【{self.name}】({self.realm.value})", self.desc] + + if self.items: + item_names = [item.name for item in self.items] + info_parts.append(f"可获得材料:{', '.join(item_names)}") + + return " - ".join(info_parts) def _load_animals() -> tuple[dict[int, Animal], dict[str, Animal]]: """从配表加载animal数据""" @@ -25,11 +51,19 @@ def _load_animals() -> tuple[dict[int, Animal], dict[str, Animal]]: animal_df = game_configs["animal"] for _, row in animal_df.iterrows(): + # 处理item_ids + item_ids_list = [] + item_ids = row.get("item_ids") + if item_ids is not None and str(item_ids).strip() and str(item_ids) != 'nan': + for item_id_str in str(item_ids).split(CONFIG.df.ids_separator): + item_ids_list.append(int(float(item_id_str.strip()))) + animal = Animal( id=int(row["id"]), name=str(row["name"]), desc=str(row["desc"]), - grade=int(row["grade"]) + realm=Realm.from_id(int(row["stage_id"])), + item_ids=item_ids_list ) animals_by_id[animal.id] = animal animals_by_name[animal.name] = animal diff --git a/src/classes/cultivation.py b/src/classes/cultivation.py index 16fd4f0..f09438d 100644 --- a/src/classes/cultivation.py +++ b/src/classes/cultivation.py @@ -26,6 +26,14 @@ level_to_stage = { 20: Stage.Late_Stage, } +# realm_id到Realm的映射(用于物品等级系统) +realm_id_to_realm = { + 1: Realm.Qi_Refinement, + 2: Realm.Foundation_Establishment, + 3: Realm.Core_Formation, + 4: Realm.Nascent_Soul, +} + level_to_break_through = { 30: Realm.Foundation_Establishment, 60: Realm.Core_Formation, @@ -57,9 +65,9 @@ class CultivationProgress: return realm return Realm.Qi_Refinement - def get_stage(self, level: int) -> str: + def get_stage(self, level: int) -> Stage: """获取阶段""" - _level = self.level % levels_per_realm + _level = level % levels_per_realm for level_threshold, stage in reversed(list(level_to_stage.items())): if _level >= level_threshold: return stage @@ -155,4 +163,65 @@ class CultivationProgress: return self.exp >= exp_required def __str__(self) -> str: - return f"{self.realm.value}{self.stage.value}({self.level}级)。可以突破:{self.can_break_through()}" \ No newline at end of file + return f"{self.realm.value}{self.stage.value}({self.level}级)。可以突破:{self.can_break_through()}" + + +# 为Realm类添加from_id类方法 +def _realm_from_id(cls, realm_id: int) -> Realm: + """ + 根据realm_id获取对应的Realm + + Args: + realm_id: 境界ID (1-4) + + Returns: + 对应的Realm枚举值 + + Raises: + ValueError: 如果realm_id不存在 + """ + if realm_id not in realm_id_to_realm: + raise ValueError(f"Unknown realm_id: {realm_id}") + return realm_id_to_realm[realm_id] + +# 将from_id方法绑定到Realm类 +Realm.from_id = classmethod(_realm_from_id) + +# 境界顺序映射 +_realm_order = { + Realm.Qi_Refinement: 1, + Realm.Foundation_Establishment: 2, + Realm.Core_Formation: 3, + Realm.Nascent_Soul: 4, +} + +# 为Realm类添加比较操作符 +def _realm_ge(self, other): + """大于等于比较""" + if not isinstance(other, Realm): + return NotImplemented + return _realm_order[self] >= _realm_order[other] + +def _realm_le(self, other): + """小于等于比较""" + if not isinstance(other, Realm): + return NotImplemented + return _realm_order[self] <= _realm_order[other] + +def _realm_gt(self, other): + """大于比较""" + if not isinstance(other, Realm): + return NotImplemented + return _realm_order[self] > _realm_order[other] + +def _realm_lt(self, other): + """小于比较""" + if not isinstance(other, Realm): + return NotImplemented + return _realm_order[self] < _realm_order[other] + +# 将比较方法绑定到Realm类 +Realm.__ge__ = _realm_ge +Realm.__le__ = _realm_le +Realm.__gt__ = _realm_gt +Realm.__lt__ = _realm_lt \ No newline at end of file diff --git a/src/classes/item.py b/src/classes/item.py index 2871014..aa63d7b 100644 --- a/src/classes/item.py +++ b/src/classes/item.py @@ -1,6 +1,7 @@ from dataclasses import dataclass from src.utils.df import game_configs +from src.classes.cultivation import Realm @dataclass class Item: @@ -10,7 +11,7 @@ class Item: id: int name: str desc: str - grade: int + realm: Realm def __hash__(self) -> int: return hash(self.id) @@ -29,7 +30,7 @@ def _load_items() -> tuple[dict[int, Item], dict[str, Item]]: id=int(row["id"]), name=str(row["name"]), desc=str(row["desc"]), - grade=int(row["grade"]) + realm=Realm.from_id(int(row["stage_id"])) ) items_by_id[item.id] = item items_by_name[item.name] = item diff --git a/src/classes/plant.py b/src/classes/plant.py index 38b25a8..e403a9d 100644 --- a/src/classes/plant.py +++ b/src/classes/plant.py @@ -1,6 +1,10 @@ -from dataclasses import dataclass +from dataclasses import dataclass, field +from typing import Optional from src.utils.df import game_configs +from src.utils.config import CONFIG +from src.classes.item import Item, items_by_id +from src.classes.cultivation import Realm @dataclass class Plant: @@ -10,13 +14,35 @@ class Plant: id: int name: str desc: str - grade: int + realm: Realm + item_ids: list[int] = field(default_factory=list) # 该植物对应的物品IDs + + # 这些字段将在__post_init__中设置 + items: list[Item] = field(init=False, default_factory=list) # 该植物对应的物品实例 + + def __post_init__(self): + """初始化物品实例""" + for item_id in self.item_ids: + if item_id in items_by_id: + self.items.append(items_by_id[item_id]) def __hash__(self) -> int: return hash(self.id) def __str__(self) -> str: return self.name + + def get_info(self) -> str: + """ + 获取植物的详细信息,包括名字、描述、境界和材料 + """ + info_parts = [f"【{self.name}】({self.realm.value})", self.desc] + + if self.items: + item_names = [item.name for item in self.items] + info_parts.append(f"可获得材料:{', '.join(item_names)}") + + return " - ".join(info_parts) def _load_plants() -> tuple[dict[int, Plant], dict[str, Plant]]: """从配表加载plant数据""" @@ -25,11 +51,19 @@ def _load_plants() -> tuple[dict[int, Plant], dict[str, Plant]]: plant_df = game_configs["plant"] for _, row in plant_df.iterrows(): + # 处理item_ids + item_ids_list = [] + item_ids = row.get("item_ids") + if item_ids is not None and str(item_ids).strip() and str(item_ids) != 'nan': + for item_id_str in str(item_ids).split(CONFIG.df.ids_separator): + item_ids_list.append(int(float(item_id_str.strip()))) + plant = Plant( id=int(row["id"]), name=str(row["name"]), desc=str(row["desc"]), - grade=int(row["grade"]) + realm=Realm.from_id(int(row["stage_id"])), + item_ids=item_ids_list ) plants_by_id[plant.id] = plant plants_by_name[plant.name] = plant diff --git a/src/classes/region.py b/src/classes/region.py index 535fc3b..72a9d4f 100644 --- a/src/classes/region.py +++ b/src/classes/region.py @@ -1,10 +1,13 @@ from dataclasses import dataclass, field -from typing import Union, TypeVar, Type +from typing import Union, TypeVar, Type, Optional from enum import Enum from abc import ABC, abstractmethod from src.utils.df import game_configs +from src.utils.config import CONFIG from src.classes.essence import EssenceType, Essence +from src.classes.animal import Animal, animals_by_id +from src.classes.plant import Plant, plants_by_id def get_tiles_from_shape(shape: 'Shape', north_west_cor: str, south_east_cor: str) -> list[tuple[int, int]]: @@ -182,13 +185,59 @@ class Shape(Enum): class NormalRegion(Region): """ 普通区域 - 平原、大河之类的,没有灵气或灵气很低 + 包含该区域分布的动植物物种信息 """ + animal_ids: list[int] = field(default_factory=list) # 该区域分布的动物物种IDs + plant_ids: list[int] = field(default_factory=list) # 该区域分布的植物物种IDs + + # 这些字段将在__post_init__中设置 + animals: list[Animal] = field(init=False, default_factory=list) # 该区域的动物实例 + plants: list[Plant] = field(init=False, default_factory=list) # 该区域的植物实例 + + def __post_init__(self): + """初始化动植物实例""" + # 先调用父类的__post_init__ + super().__post_init__() + + # 加载动物实例 + for animal_id in self.animal_ids: + if animal_id in animals_by_id: + self.animals.append(animals_by_id[animal_id]) + + # 加载植物实例 + for plant_id in self.plant_ids: + if plant_id in plants_by_id: + self.plants.append(plants_by_id[plant_id]) def get_region_type(self) -> str: return "normal" + + def get_species_info(self) -> str: + """获取该区域动植物物种的描述信息""" + info_parts = [] + if self.animals: + animal_infos = [animal.get_info() for animal in self.animals] + info_parts.extend(animal_infos) + + if self.plants: + plant_infos = [plant.get_info() for plant in self.plants] + info_parts.extend(plant_infos) + + return "; ".join(info_parts) if info_parts else "暂无特色物种" def __str__(self) -> str: - return f"普通区域:{self.name} - {self.desc}" + species_info = self.get_species_info() + return f"普通区域:{self.name} - {self.desc} | 物种分布:{species_info}" + + @property + def is_huntable(self) -> bool: + # 如果该区域有动物,则可以狩猎 + return len(self.animals) > 0 + + @property + def is_harvestable(self) -> bool: + # 如果该区域有植物,则可以采集 + return len(self.plants) > 0 @dataclass @@ -262,6 +311,24 @@ def _load_regions(region_type: Type[T], config_name: str) -> tuple[dict[int, T], base_params["essence_type"] = EssenceType.from_str(str(row["root_type"])) base_params["essence_density"] = int(row["root_density"]) + # 如果是普通区域,添加动植物ID参数 + elif region_type == NormalRegion: + # 处理动物IDs + animal_ids_list = [] + animal_ids = row.get("animal_ids") + if animal_ids is not None and str(animal_ids).strip() and str(animal_ids) != 'nan': + for animal_id_str in str(animal_ids).split(CONFIG.df.ids_separator): + animal_ids_list.append(int(float(animal_id_str.strip()))) + base_params["animal_ids"] = animal_ids_list + + # 处理植物IDs + plant_ids_list = [] + plant_ids = row.get("plant_ids") + if plant_ids is not None and str(plant_ids).strip() and str(plant_ids) != 'nan': + for plant_id_str in str(plant_ids).split(CONFIG.df.ids_separator): + plant_ids_list.append(int(float(plant_id_str.strip()))) + base_params["plant_ids"] = plant_ids_list + region = region_type(**base_params) regions_by_id[region.id] = region regions_by_name[region.name] = region diff --git a/src/front/front.py b/src/front/front.py index 4217da9..d1cdc92 100644 --- a/src/front/front.py +++ b/src/front/front.py @@ -467,15 +467,25 @@ class Front: f"描述: {region.desc}", ] - # 根据region类型添加灵气信息 - from src.classes.region import CultivateRegion + # 根据region类型添加特殊信息 + from src.classes.region import CultivateRegion, NormalRegion if isinstance(region, CultivateRegion): - # 修炼区域:只显示最高灵气类型和密度 + # 修炼区域:显示灵气信息 stars = "★" * region.essence_density + "☆" * (10 - region.essence_density) lines.append(f"主要灵气: {region.essence_type} {stars}") + elif isinstance(region, NormalRegion): + # 普通区域:显示物种信息 + species_info = region.get_species_info() + if species_info and species_info != "暂无特色物种": + lines.append("物种分布:") + # 将详细的物种信息按分号分割,每个物种信息作为单独一行 + for species in species_info.split("; "): + lines.append(f" {species}") + else: + lines.append("物种分布: 暂无特色物种") - # 普通区域和城市区域不显示灵气信息 + # 城市区域不显示额外信息 self._draw_tooltip(lines, mouse_x, mouse_y, self.tooltip_font) diff --git a/src/run/log.py b/src/run/log.py index f3be32f..385aa3f 100644 --- a/src/run/log.py +++ b/src/run/log.py @@ -112,6 +112,8 @@ class Logger: # 记录日志 log_message = f"LLM_INTERACTION: {json.dumps(log_data, ensure_ascii=False)}" + # 将JSON中的\n替换为真正的换行符,使日志更易读 + log_message = log_message.replace('\\n', '\n') self.logger.info(log_message) def log_error(self, error_message: str, prompt: str = None): @@ -129,6 +131,8 @@ class Logger: } log_message = f"LLM_ERROR: {json.dumps(log_data, ensure_ascii=False)}" + # 将JSON中的\n替换为真正的换行符,使日志更易读 + log_message = log_message.replace('\\n', '\n') self.logger.error(log_message) def get_today_stats(self) -> dict: diff --git a/static/config.yml b/static/config.yml index bcd3f57..4be7596 100644 --- a/static/config.yml +++ b/static/config.yml @@ -15,3 +15,5 @@ game: init_npc_num: 3 npc_birth_rate_per_month: 0.001 +df: + ids_separator: "," \ No newline at end of file diff --git a/static/game_configs/animal.csv b/static/game_configs/animal.csv index 79263c8..d3b2a0a 100644 --- a/static/game_configs/animal.csv +++ b/static/game_configs/animal.csv @@ -1,4 +1,11 @@ -id,name,desc,grade -,,, -1,灵兔,天性机敏的灵性兔子,毛色雪白,蕴含微弱灵力,性情温和易驯服,1 -2,魔狼,凶猛的魔性狼族,体型巨大,拥有强大的魔力和锋利的爪牙,2 +id,name,desc,stage_id,item_ids +,,,"该动物对应的物品ID" +1,灵兔,天性机敏的灵性兔子,毛色雪白,蕴含微弱灵力,性情温和易驯服,1,1 +2,魔狼,凶猛的魔性狼族,体型巨大,拥有强大的魔力和锋利的爪牙,2,2 +3,青云鹿,栖息于平原地带的温和灵兽,通体青色,角如玉石,善于感知灵气变化,1,3 +4,暗影豹,南疆蛮荒中的敏捷猎手,身形如影,爪牙锋利,擅长潜行狩猎,2,4 +5,碧海龙龟,无边碧海的古老灵兽,龟甲如碧玉,能操控海水,寿命极长,3,5 +6,石甲山熊,青峰山脉的强壮守护者,皮毛坚如磐石,力大无穷,性情憨厚,2,6 +7,风速马,驰骋于碧野千里的神骏灵兽,四蹄生风,速度如电,鬃毛飘逸,2,7 +8,熔岩蜥蜴,炎狱火山中的火系灵兽,鳞片赤红如火,能在岩浆中游泳,喷吐烈焰,3,8 +9,毒瘴蛙,迷雾沼泽的剧毒生物,体色斑斓,能释放致命毒气,善于隐匿,2,9 \ No newline at end of file diff --git a/static/game_configs/item.csv b/static/game_configs/item.csv index f5741a1..28a6bf9 100644 --- a/static/game_configs/item.csv +++ b/static/game_configs/item.csv @@ -1,6 +1,19 @@ -id,name,desc,grade +id,name,desc,stage_id ,,, -1,灵兔皮毛,灵性充沛的兔子皮毛,质地柔软,常用于制作防护装备,1 -2,魔狼皮毛,蕴含魔力的狼族皮毛,坚韧耐用,适合制作高级护甲,2 -3,奇草,生长在灵气充沛之地的奇异草药,具有神奇的治愈效果,1 -4,灵木,吸收天地灵气生长的珍贵木材,是制作法器的上等材料,2 +1,灵兔毛,灵性充沛的兔子细毛,质地柔软温暖,适合编织防寒衣物,1 +2,魔狼牙,凶猛魔狼的锋利狼牙,蕴含魔力,是锻造利器的珍贵材料,2 +3,青云鹿角,青云鹿的羼玉之角,蕴含清灵之气,是炼丹的上品药材,1 +4,暗影豹爪,暗影豹的锋利爪子,轻盈而德,能增强武器的敏捷度,2 +5,龙龟甲片,碧海龙龟的古老甲片,坚不可摧,蕴含海洋灵力,是顶级防具材料,3 +6,山熊胆,石甲山熊的珍贵熊胆,能增强体质和力量,是体修者的珍贵药材,2 +7,风速马鬃,风速马的飘逸鬃毛,轻如风羽,能用于炼制速度类法器,2 +8,熔岩鳞片,熔岩蜥蜴的赤红鳞片,耐高温且蕴含火系灵力,是火属性法器的核心材料,3 +9,毒瘴囊,毒瘴蛙的毒素囊袋,内含剧毒,是炼制毒类丹药的稀有材料,2 +10,奇草精华,奇草提炼的精华,具有神奇的治愈效果,1 +11,灵木心,灵木的珍贵木心,蕴含浓郁灵力,是制作法器的核心材料,2 +12,仙人掌刺,沙漠仙人掌的灵药刻刺,能解百毒,制成针剂后效果显著,1 +13,雪莲花瓣,寒霜雪莲的洁白花瓣,蕴含极寒之气,是寒性药材的最佳选择,2 +14,灵芝孢子,水灵芝的蓝色孢子,能增强水行修炼者的灵力流通,2 +15,雪绒花蕊,雪绒花的纯白花蕊,具有安神镇静功效,是冥想辅助的理想药材,1 +16,古松松脂,千年古松的珍贵松脂,晶莹如琥珀,蕴含浓郁灵力,是高级炼器的稀有材料,3 +17,灵稻精华,五谷灵稻提炼的精华,能快速强化体质,是体修丹药的主要成分,1 \ No newline at end of file diff --git a/static/game_configs/normal_region.csv b/static/game_configs/normal_region.csv index 1409fa8..b971cd0 100644 --- a/static/game_configs/normal_region.csv +++ b/static/game_configs/normal_region.csv @@ -1,15 +1,15 @@ -id,name,desc,shape,north-west-cor,south-east-cor -"ID必须以1开头",,,, -101,平原地带,地势平坦,灵气平和。是初学修炼者打基础和建立宗门的理想之地。,rectangle,"19,9","64,34" -102,西域流沙,茫茫大漠,黄沙漫天。此地气候干燥,日夜温差极大,是沙漠商队的必经之路。,rectangle,"0,0","18,49" -103,南疆蛮荒,古木参天,藤蔓缠绕。此地森林茂密,野兽众多,是采集药材和狩猎的危险之地。,rectangle,"19,35","64,45" -104,极北冰原,千里冰封,万年不化。此地严寒刺骨,风雪交加,只有最坚韧的冒险者才能在此生存。,rectangle,"19,0","64,8" -105,无边碧海,浩瀚无垠,波涛汹涌。此地风浪险恶,暗礁密布,是海商和渔民的挑战之海。,rectangle,"65,0","69,49" -106,天河奔流,一江春水向东流,奔腾不息入东海。此河贯穿东西,水流湍急,是重要的交通要道。,meandering,"18,25","67,47" -107,青峰山脉,连绵起伏,直插云霄。此地山势险峻,多有奇石异洞,是探险者寻宝的热门之地。,rectangle,"28,5","32,20" -108,万丈雪峰,雪峰皑皑,寒风刺骨。此地终年积雪,山路崎岖,是登山者的终极挑战。,rectangle,"25,2","34,7" -109,碧野千里,芳草萋萋,一望无际。此地水草丰美,牛羊成群,是游牧民族的天然牧场。,rectangle,"20,12","39,24" -110,青云林海,古树参天,绿意盎然。此地森林广袤,物产丰富,是伐木工和猎人的主要活动区域。,rectangle,"40,10","59,29" -111,炎狱火山,烈焰冲天,岩浆奔流。此地火山活跃,地热丰富,是铁匠锻造的理想之地,但也极其危险。,square,"52,32","54,34" -112,沃土良田,土地肥沃,五谷丰登。此地土壤深厚,雨水充沛,是农民耕种的黄金宝地。,rectangle,"33,25","37,29" -113,迷雾沼泽,雾气缭绕,泥泞不堪。此地地形复杂,瘴气丛生,是盗贼和亡命之徒的藏身之所。,rectangle,"42,30","45,33" +id,name,desc,shape,north-west-cor,south-east-cor,animal_ids,plant_ids +"ID必须以1开头",,,,,"该区域分布的动物物种IDs","该区域分布的植物物种IDs" +101,平原地带,地势平坦,灵气平和。是初学修炼者打基础和建立宗门的理想之地。,rectangle,"19,9","64,34",3, +102,西域流沙,茫茫大漠,黄沙漫天。此地气候干燥,日夜温差极大,是沙漠商队的必经之路。,rectangle,"0,0","18,49",,3 +103,南疆蛮荒,古木参天,藤蔓缠绕。此地森林茂密,野兽众多,是采集药材和狩猎的危险之地。,rectangle,"19,35","64,45",4, +104,极北冰原,千里冰封,万年不化。此地严寒刺骨,风雪交加,只有最坚韧的冒险者才能在此生存。,rectangle,"19,0","64,8",,4 +105,无边碧海,浩瀚无垠,波涛汹涌。此地风浪险恶,暗礁密布,是海商和渔民的挑战之海。,rectangle,"65,0","69,49",5, +106,天河奔流,一江春水向东流,奔腾不息入东海。此河贯穿东西,水流湍急,是重要的交通要道。,meandering,"18,25","67,47",,5 +107,青峰山脉,连绵起伏,直插云霄。此地山势险峻,多有奇石异洞,是探险者寻宝的热门之地。,rectangle,"28,5","32,20",6, +108,万丈雪峰,雪峰皑皑,寒风刺骨。此地终年积雪,山路崎岖,是登山者的终极挑战。,rectangle,"25,2","34,7",,6 +109,碧野千里,芳草萋萋,一望无际。此地水草丰美,牛羊成群,是游牧民族的天然牧场。,rectangle,"20,12","39,24",7, +110,青云林海,古树参天,绿意盎然。此地森林广袤,物产丰富,是伐木工和猎人的主要活动区域。,rectangle,"40,10","59,29",,7 +111,炎狱火山,烈焰冲天,岩浆奔流。此地火山活跃,地热丰富,是铁匠锻造的理想之地,但也极其危险。,square,"52,32","54,34",8, +112,沃土良田,土地肥沃,五谷丰登。此地土壤深厚,雨水充沛,是农民耕种的黄金宝地。,rectangle,"33,25","37,29",,8 +113,迷雾沼泽,雾气缭绕,泥泞不堪。此地地形复杂,瘴气丛生,是盗贼和亡命之徒的藏身之所。,rectangle,"42,30","45,33",9, diff --git a/static/game_configs/persona.csv b/static/game_configs/persona.csv index d64d35b..71948df 100644 --- a/static/game_configs/persona.csv +++ b/static/game_configs/persona.csv @@ -6,3 +6,5 @@ id,name,prompt 4,冒险,你是一个冒险的人,你总是会冒险,喜欢刺激,总想放手一搏。 5,随性,你是一个随性的人,你总是会随机应变,性子到哪里了就是哪里,没有一定之规。 6,贪财,你是一个贪财的人,你对灵石和财富有着强烈的渴望。 +7,采药,你是一个热爱采集的人,喜欢在山林中寻找各种奇花异草和灵药,对植物有着敏锐的直觉和深厚的兴趣。你认为大自然的恩赐需要用心去发现和珍惜。 +8,猎者,你是一个热爱狩猎的人,享受在野外追踪猎物的刺激感,对各种动物的习性了如指掌。你相信通过狩猎能够磨练自己的意志和技能,获得更强大的力量。 diff --git a/static/game_configs/plant.csv b/static/game_configs/plant.csv index 0874f1d..92b96d0 100644 --- a/static/game_configs/plant.csv +++ b/static/game_configs/plant.csv @@ -1,4 +1,10 @@ -id,name,desc,grade -,,, -1,奇草,生长在灵气充沛之地的奇异草药,叶片呈淡蓝色,具有神奇的治愈效果,1 -2,灵木,千年古树吸收天地灵气而成,木质坚硬且蕴含浓郁灵力,2 +id,name,desc,stage_id,item_ids +,,,"该植物对应的物品ID" +1,奇草,生长在灵气充沛之地的奇异草药,叶片呈淡蓝色,具有神奇的治愈效果,1,10 +2,灵木,千年古树吸收天地灵气而成,木质坚硬且蕴含浓郁灵力,2,11 +3,沙漠仙人掌,生长于西域流沙的神奇植物,能储存大量灵气和水分,刺中含灵药,1,12 +4,寒霜雪莲,极北冰原的珍贵灵药,花瓣洁白如雪,蕴含极寒之气,能清热解毒,2,13 +5,水灵芝,生长于天河河底的水系灵药,呈半透明蓝色,能增强修炼者水行灵力,2,14 +6,雪绒花,万丈雪峰的高山植物,花瓣细小洁白,能抗严寒,具有安神镇静功效,1,15 +7,千年古松,青云林海中的古老巨树,树龄超过千年,树脂含有丰富灵力,3,16 +8,五谷灵稻,沃土良田中培育的灵性稻谷,粒粒饱满灵气,能增强修炼者体质,1,17 \ No newline at end of file