finish animal and plants
This commit is contained in:
@@ -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"]
|
||||
|
||||
@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"]
|
||||
@@ -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
|
||||
|
||||
@@ -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()}"
|
||||
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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -15,3 +15,5 @@ game:
|
||||
init_npc_num: 3
|
||||
npc_birth_rate_per_month: 0.001
|
||||
|
||||
df:
|
||||
ids_separator: ","
|
||||
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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,
|
||||
|
||||
|
@@ -6,3 +6,5 @@ id,name,prompt
|
||||
4,冒险,你是一个冒险的人,你总是会冒险,喜欢刺激,总想放手一搏。
|
||||
5,随性,你是一个随性的人,你总是会随机应变,性子到哪里了就是哪里,没有一定之规。
|
||||
6,贪财,你是一个贪财的人,你对灵石和财富有着强烈的渴望。
|
||||
7,采药,你是一个热爱采集的人,喜欢在山林中寻找各种奇花异草和灵药,对植物有着敏锐的直觉和深厚的兴趣。你认为大自然的恩赐需要用心去发现和珍惜。
|
||||
8,猎者,你是一个热爱狩猎的人,享受在野外追踪猎物的刺激感,对各种动物的习性了如指掌。你相信通过狩猎能够磨练自己的意志和技能,获得更强大的力量。
|
||||
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user