def active_skill_header(cls, m: "MonsterModel", previous_transforms: List["MonsterModel"]): active_skill = m.active_skill if len(previous_transforms) == 0: active_cd = "({} -> {})".format(active_skill.turn_max, active_skill.turn_min) \ if active_skill else 'None' else: skill_texts = [] previous_transforms.reverse() for i, mon in enumerate(previous_transforms): skill = mon.active_skill # we can assume skill is not None because the monster transforms cooldown_text = '({}cd)'.format(str(skill.turn_max)) if skill.turn_min != skill.turn_max: cooldown_text = '{} -> {}'.format(skill.turn_min, skill.turn_max) skill_texts.append('{}{}'.format( get_emoji(cls.transform_emoji_names[i % len( cls.transform_emoji_names)]), cooldown_text)) skill_texts.append('{} ({} cd)'.format( get_emoji(cls.up_emoji_name), m.active_skill.turn_max)) active_cd = ' '.join(skill_texts) return Box(BoldText('Active Skill'), BoldText(active_cd), delimiter=' ')
def stats_header(cls, m: "MonsterModel", previous_evolutions, query_settings: QuerySettings): voice_emoji = get_awakening_emoji( 63) if m.awakening_count(63) and not m.is_equip else '' multiboost_emoji = None if m.awakening_count( 30) and query_settings.cardmode == CardModeModifier.coop: multiboost_emoji = get_emoji('misc_multiboost') plus_emoji = get_emoji('plus_297') if cls.get_plus_status(previous_evolutions, query_settings.cardplus) != 297: plus_emoji = get_emoji('plus_0') lb_emoji = get_emoji('lv110') if m.limit_mult > 0 and query_settings.cardlevel == CardLevelModifier.lv120: lb_emoji = get_emoji('lv120') header = Box(Text(voice_emoji), Text(plus_emoji), Text(multiboost_emoji) if multiboost_emoji else None, Text('Stats'), Text('({}, +{}%)'.format(lb_emoji, m.limit_mult)) if m.limit_mult else None, delimiter=' ') return header
def leader_skill_header(m: "MonsterModel", lsmultiplier: LsMultiplier, transform_base: "MonsterModel"): return Box( BoldText('Leader Skill'), BoldText(ls_multiplier_text(m.leader_skill) if lsmultiplier == LsMultiplier.lsdouble else get_emoji('1x') + ' ' + ls_single_multiplier_text(m.leader_skill)), BoldText('(' + get_emoji( '\N{DOWN-POINTING RED TRIANGLE}') + '7x6)') if m != transform_base and transform_base.leader_skill.is_7x6 else None, delimiter=' ' )
def leader_header(cls, m: "MonsterModel", is_base: bool, lsmultiplier: LsMultiplier, base_mon: "MonsterModel"): if is_base: emoji = get_emoji(cls.down_emoji_name) label = 'Base' else: emoji = get_emoji(cls.up_emoji_name) label = 'Transform' return Box(emoji, BoldText(label), cls.leader_skill_header(m, lsmultiplier, base_mon).to_markdown(), delimiter=' ')
def super_awakenings_row(m: "MonsterModel"): normal_awakenings = len(m.awakenings) - m.superawakening_count super_awakenings_emojis = [_get_awakening_text(a) for a in m.awakenings[normal_awakenings:]] return Box( Text(get_emoji('sa_questionmark')), *[Text(e) for e in super_awakenings_emojis], delimiter=' ') if len(super_awakenings_emojis) > 0 else None
def transform_active_header(cls, m: "MonsterModel"): active_skill = m.active_skill active_cd = '({} cd)'.format( active_skill.cooldown_turns_min) if active_skill else 'None' return Box(get_emoji(cls.up_emoji_name), BoldText('Transform Active Skill {}'.format(active_cd)), delimiter=' ')
def embed(cls, state: TransformInfoViewState): base_mon = state.base_mon transformed_mon = state.transformed_mon lsmultiplier = state.query_settings.lsmultiplier fields = [ EmbedField( '/'.join(['{}'.format(t.name) for t in transformed_mon.types]), Box( Box(get_emoji(cls.up_emoji_name), cls.normal_awakenings_row(transformed_mon) if len(transformed_mon.awakenings) != 0 else Box( Text('No Awakenings')), delimiter=' '), TransformInfoView.base_info(base_mon), cls.killers_row(base_mon, base_mon)), ), EmbedField(BoldText(transformat('Card info')), TransformInfoView.card_info(base_mon, transformed_mon, state.acquire_raw), inline=True), EmbedField(BoldText('Stats -> ' + transformat('Transform')), TransformInfoView.stats(base_mon, transformed_mon), inline=True), EmbedField( transformat( TransformInfoView.transform_active_header( transformed_mon).to_markdown()), Box( Text( cls.active_skill_text(transformed_mon.active_skill, state.awoken_skill_map)), TransformInfoView.base_active_header( base_mon).to_markdown(), Text( cls.active_skill_text(base_mon.active_skill, state.awoken_skill_map)))), EmbedField( transformat( TransformInfoView.leader_header(transformed_mon, False, lsmultiplier, base_mon).to_markdown()), Box( Text(transformed_mon.leader_skill.desc if transformed_mon. leader_skill else 'None'), TransformInfoView.leader_header(base_mon, True, lsmultiplier, base_mon).to_markdown(), Text(base_mon.leader_skill.desc if base_mon. leader_skill else 'None'))) ] return EmbedView(EmbedMain(color=state.color, title=MonsterHeader.fmt_id_header( transformed_mon, False, state.is_jp_buffed).to_markdown(), url=puzzledragonx(transformed_mon)), embed_thumbnail=EmbedThumbnail( MonsterImage.icon(transformed_mon)), embed_footer=embed_footer_with_state(state), embed_fields=fields)
def all_awakenings_row(cls, m: "MonsterModel", transform_base): if len(m.awakenings) == 0: return Box(Text('No Awakenings')) return Box( Box(get_emoji(cls.up_emoji_name) if m != transform_base else '', cls.normal_awakenings_row(m), delimiter=' '), Box('\N{DOWN-POINTING RED TRIANGLE}', IdView.all_awakenings_row(transform_base, transform_base), delimiter=' ') if m != transform_base else None, cls.super_awakenings_row(m), )
def _killer_latent_emoji(latent_name: str): return get_emoji('latent_killer_{}'.format(latent_name.lower()))
def base_active_header(cls, m: "MonsterModel"): return Box(get_emoji(cls.down_emoji_name), BoldText('Base'), cls.active_skill_header(m, []), delimiter=' ')
def base_info(cls, m: "MonsterModel"): return Box( Box(get_emoji(cls.down_emoji_name), cls.normal_awakenings_row(m) if len(m.awakenings) != 0 else Box(Text('No Awakenings')), delimiter=' '), cls.super_awakenings_row(m))