添加新的数据结构

This commit is contained in:
洛水居室 2022-06-28 12:42:17 +08:00
parent ce69716987
commit 6433ddba87
No known key found for this signature in database
GPG Key ID: C9DE87DA724B88FC
6 changed files with 228 additions and 6 deletions

View File

@ -13,14 +13,24 @@ class ArtifactInfo(BaseObject):
def __init__(self, item_id: int = 0, name: str = "", level: int = 0, main_item: Optional[GameItem] = None,
pos: Union[Enum, str] = "", star: int = 1, sub_item: Optional[List[GameItem]] = None, icon: str = ""):
"""
:param item_id: item_id
:param name: 圣遗物名字
:param level: 圣遗物等级
:param main_item: 主词条
:param pos: 圣遗物类型
:param star: 星级
:param sub_item: 副词条
:param icon: 图片
"""
self.icon = icon
self.item_id = item_id
self.level = level # 等级
self.main_item = main_item # 主属性
self.name = name # 名称
self.pos = pos # 圣遗物类型
self.star = star # 星级
self.sub_item: List[GameItem] = [] # 词条列表
self.level = level
self.main_item = main_item
self.name = name
self.pos = pos
self.star = star
self.sub_item: List[GameItem] = []
if sub_item is not None:
self.sub_item = sub_item

120
model/game/character.py Normal file
View File

@ -0,0 +1,120 @@
from typing import Optional, List
from model.baseobject import BaseObject
from model.game.artifact import ArtifactInfo
from model.game.fetter import FetterInfo
from model.game.skill import Skill
from model.game.talent import Talent
from model.game.weapon import WeaponInfo
from model.types import JSONDict
class CharacterValueInfo(BaseObject):
"""
角色数值信息
"""
def __init__(self, hp: float = 0, base_hp: float = 0, atk: float = 0, base_atk: float = 0,
def_value: float = 0, base_def: float = 0, elemental_mastery: float = 0, crit_rate: float = 0,
crit_dmg: float = 0, energy_recharge: float = 0, heal_bonus: float = 0, healed_bonus: float = 0,
physical_dmg_sub: float = 0, physical_dmg_bonus: float = 0, dmg_bonus: float = 0):
"""
:param hp: 生命值
:param base_hp: 基础生命值
:param atk: 攻击力
:param base_atk: 基础攻击力
:param def_value: 防御力
:param base_def: 基础防御力
:param elemental_mastery: 元素精通
:param crit_rate: 暴击率
:param crit_dmg: 暴击伤害
:param energy_recharge: 充能效率
:param heal_bonus: 治疗
:param healed_bonus: 受治疗
:param physical_dmg_sub: 物理伤害加成
:param physical_dmg_bonus: 物理伤害抗性
:param dmg_bonus: 伤害加成
"""
self.dmg_bonus = dmg_bonus
self.physical_dmg_bonus = physical_dmg_bonus
self.physical_dmg_sub = physical_dmg_sub
self.healed_bonus = healed_bonus
self.heal_bonus = heal_bonus
self.energy_recharge = energy_recharge
self.crit_dmg = crit_dmg
self.crit_rate = crit_rate
self.elemental_mastery = elemental_mastery
self.base_def = base_def
self.def_value = def_value
self.base_atk = base_atk
self.atk = atk
self.base_hp = base_hp
self.hp = hp
@property
def add_hp(self) -> float:
return self.hp - self.base_hp
@property
def add_atk(self) -> float:
return self.atk - self.base_atk
@property
def add_def(self) -> float:
return self.def_value - self.base_def
__slots__ = (
"hp", "base_hp", "atk", "base_atk", "def_value", "base_def", "elemental_mastery", "crit_rate", "crit_dmg",
"energy_recharge", "dmg_bonus", "physical_dmg_bonus", "physical_dmg_sub", "healed_bonus",
"heal_bonus")
class CharacterInfo(BaseObject):
"""
角色信息
"""
def __init__(self, name: str = "", level: int = 0, fetter: Optional[FetterInfo] = None,
base_value: Optional[CharacterValueInfo] = None, weapon: Optional[WeaponInfo] = None,
artifact: Optional[List[ArtifactInfo]] = None, skill: Optional[List[Skill]] = None,
talent: Optional[List[Talent]] = None):
"""
:param name: 角色名字
:param level: 角色等级
:param fetter: 好感度
:param base_value: 基础数值
:param weapon: 武器
:param artifact: 圣遗物
:param skill: 技能
:param talent: 命座
"""
self.talent = talent
self.skill = skill
self.artifact = artifact
self.weapon = weapon
self.base_value = base_value
self.fetter = fetter
self.level = level
self.name = name
def to_dict(self) -> JSONDict:
data = super().to_dict()
if self.artifact:
data["artifact"] = [e.to_dict() for e in self.artifact]
if self.artifact:
data["skill"] = [e.to_dict() for e in self.skill]
if self.artifact:
data["talent"] = [e.to_dict() for e in self.talent]
return data
@classmethod
def de_json(cls, data: Optional[JSONDict]) -> Optional["CharacterInfo"]:
data = cls._parse_data(data)
if not data:
return None
data["artifact"] = ArtifactInfo.de_list(data.get("sub_item"))
data["skill"] = Skill.de_list(data.get("sub_item"))
data["talent"] = Talent.de_list(data.get("sub_item"))
return cls(**data)
__slots__ = ("name", "level", "level", "fetter", "base_value", "weapon", "artifact", "skill", "talent")

15
model/game/fetter.py Normal file
View File

@ -0,0 +1,15 @@
from model.baseobject import BaseObject
class FetterInfo(BaseObject):
"""
好感度信息
"""
def __init__(self, level: int = 0):
"""
:param level: 等级
"""
self.level = level
__slots__ = ("level",)

21
model/game/skill.py Normal file
View File

@ -0,0 +1,21 @@
from model.baseobject import BaseObject
class Skill(BaseObject):
"""
技能信息
"""
def __init__(self, skill_id: int = 0, name: str = "", level: int = 0, icon: str = ""):
"""
:param skill_id: 技能ID
:param name: 技能名称
:param level: 技能等级
:param icon: 技能图标
"""
self.icon = icon
self.level = level
self.name = name
self.skill_id = skill_id
__slots__ = ("skill_id", "name", "level", "icon")

19
model/game/talent.py Normal file
View File

@ -0,0 +1,19 @@
from model.baseobject import BaseObject
class Talent(BaseObject):
"""
命座
"""
def __init__(self, talent_id: int = 0, name: str = "", icon: str = ""):
"""
:param talent_id: 命座ID
:param name: 命座名字
:param icon: 图标
"""
self.icon = icon
self.name = name
self.talent_id = talent_id
__slots__ = ("talent_id", "name", "icon")

37
model/game/weapon.py Normal file
View File

@ -0,0 +1,37 @@
from enum import Enum
from typing import Union, Optional, List
from model.base import GameItem
from model.baseobject import BaseObject
class WeaponInfo(BaseObject):
"""
武器信息
"""
def __init__(self, item_id: int = 0, name: str = "", level: int = 0, main_item: Optional[GameItem] = None,
affix: int = 0, pos: Union[Enum, str] = "", star: int = 1, sub_item: Optional[GameItem] = None,
icon: str = ""):
"""
:param item_id: item_id
:param name: 武器名字
:param level: 武器等级
:param main_item: 主词条
:param affix: 精炼等级
:param pos: 武器类型
:param star: 星级
:param sub_item: 副词条
:param icon: 图片
"""
self.affix = affix
self.icon = icon
self.item_id = item_id
self.level = level
self.main_item = main_item
self.name = name
self.pos = pos
self.star = star
self.sub_item = sub_item
__slots__ = ("name", "type", "value", "pos", "star", "sub_item", "main_item", "level", "item_id", "icon", "affix")