Source code for gchar.games.nikke.character

import re
from typing import List, Tuple, Optional

from .name import ChineseName, JapaneseName, KoreanName, EnglishName
from .property import Rarity, Clazz, Burst
from ..base import Character as _BaseCharacter, Gender
from ..base.name import _BaseName


[docs]class Character(_BaseCharacter): __game_name__ = 'nikke' __official_name__ = 'Nikke: Goddess of Victory' __cnname_class__ = ChineseName __jpname_class__ = JapaneseName __enname_class__ = EnglishName def __init__(self, raw_data): self.__raw_data = raw_data def _index(self): return re.sub(r'[\W_]+', '_', self.__raw_data['enname'][0].lower()).strip('_') def _cnname(self): return self.__raw_data['cnname'] def _jpname(self): return self.__raw_data['jpname'][0] if self.__raw_data['jpname'] else None def _jpnames(self): return self.__raw_data['jpname'] def _enname(self): return self.__raw_data['enname'][0] if self.__raw_data['enname'] else None def _ennames(self): return self.__raw_data['enname'] def _krname(self): return self.__raw_data['krname'][0] if self.__raw_data['krname'] else None @property def krname(self) -> Optional[KoreanName]: name = self._krname() return KoreanName(name) if name is not None else None def _krnames(self): return self.__raw_data['krname'] @property def krnames(self) -> List[KoreanName]: return [KoreanName(name) for name in self._krnames()] def _names(self) -> List[_BaseName]: return [*_BaseCharacter._names(self), *self.krnames] def _gender(self): return Gender.FEMALE @property def rarity(self) -> Rarity: return Rarity.loads(self.__raw_data['rarity']) @property def clazz(self) -> str: return Clazz.loads(self.__raw_data['class']) @property def weapon_type(self) -> str: return self.__raw_data['weapontype'] @property def manufacturer(self) -> str: return self.__raw_data['manufacturer'] @property def burst(self) -> str: return Burst.loads(self.__raw_data['burst']) @property def code(self) -> str: return self.__raw_data['code'] def _skins(self) -> List[Tuple[str, str]]: return [ (skin['name'], skin['url']) for skin in self.__raw_data['skins'] ] def _release_time(self): return self.__raw_data['release']['time'] def _order(self): return self._release_time() or 0.0, 1 if self._is_extra() else 0 def _is_extra(self) -> bool: return self._enname() and ':' in self._enname() def __repr__(self): return f'<{type(self).__name__} {"/".join(map(str, self._names()))}, ' \ f'{self.rarity.name}({int(self.rarity)}{"*" * self.rarity}), ' \ f'class: {self.clazz}, burst: {self.burst}, weapon_type: {self.weapon_type}>'