def active_skill_header(cls, m: "MonsterModel", previous_transforms: List["MonsterModel"]): active_skill = m.active_skill if active_skill is None: return BoldText('Active Skill') if len(previous_transforms) == 0: active_cd = "({} -> {})".format(active_skill.cooldown_turns_max, active_skill.cooldown_turns_min) 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.cooldown_turns_max)) if skill.cooldown_turns_min != skill.cooldown_turns_max: cooldown_text = '{} -> {}'.format(skill.cooldown_turns_max, skill.cooldown_turns_min) 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.cooldown_turns_max)) active_cd = ' '.join(skill_texts) return Box(BoldText('Active Skill'), cls.get_compound_active_text(active_skill), BoldText(active_cd), delimiter=' ')
def _get_help_text(self, ctx): args = { "db": get_emoji("db"), "p": ctx.prefix, "tsubaki": get_emoji("tsubaki") } return HELP_TEXT.format(**args)
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 get_other_info_feedback_text(self) -> str: line = [get_rarity_emoji(self.guess_monster.rarity)] if self.rarity_diff == 0: line.append(get_emoji('green_check_custom') + " | ") elif self.rarity_diff == -1: line.append( "\N{DOWNWARDS BLACK ARROW}\N{VARIATION SELECTOR-16} | ") else: line.append("\N{UPWARDS BLACK ARROW}\N{VARIATION SELECTOR-16} | ") for type in self.guess_monster.types: line.append(get_type_emoji(type)) if type in self.monster.types: line.append(get_emoji('green_check_custom') + " ") else: line.append(get_emoji('red_cross_custom') + " ") line.append(" | Sell MP: ") line.append('{:,}'.format(self.guess_monster.sell_mp)) if self.mp_diff == 0: line.append(get_emoji('green_check_custom')) elif self.mp_diff == -1: line.append("\N{DOWNWARDS BLACK ARROW}\N{VARIATION SELECTOR-16}") else: line.append("\N{UPWARDS BLACK ARROW}\N{VARIATION SELECTOR-16}") return "".join(line)
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 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 get_awakenings_feedback_text(self) -> str: awakes = [] feedback = [] guess_awo_count = len(self.guess_monster.awakenings ) - self.guess_monster.superawakening_count for index, guess_awake in enumerate( self.guess_monster.awakenings[:guess_awo_count]): awakes.append( get_awakening_emoji(guess_awake.awoken_skill_id, guess_awake.name)) val = self.awakenings_diff[index] if val == 0: feedback.append(get_emoji('red_cross_custom')) elif val == 0.5: feedback.append(get_emoji('yellow_square_custom')) else: feedback.append(get_emoji('green_check_custom')) return "\n".join(["".join(awakes), "".join(feedback)])
def get_name_line_feedback_text(self) -> str: line = [] attr1 = self.guess_monster.attr1.name.lower() attr2 = self.guess_monster.attr2.name.lower() attr_feedback = [] for num in self.attr_diff: if num == 0: attr_feedback.append(get_emoji('red_cross_custom')) elif num == 0.5: attr_feedback.append(get_emoji('yellow_square_custom')) else: attr_feedback.append(get_emoji('green_check_custom')) line.append(get_attribute_emoji_by_enum(self.guess_monster.attr1)) line.append(attr_feedback[0] + " / ") line.append(get_attribute_emoji_by_enum(self.guess_monster.attr2)) line.append(attr_feedback[1] + " ") line.append("[" + str(self.guess_monster.monster_id) + "] ") line.append(self.guess_monster.name_en) return "".join(line)
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 _format_ls_text(hp, atk, rcv, resist=0, combo=0, fua=0, mfua=0, te=0): resist_val = ' {}{}%'.format(get_emoji('shield_amount'), _format_number(100 * resist)) if resist else '' ehp = ' [{}x eHP]'.format(_format_number(hp / (1 - resist))) if resist else '' combos = '+{}c'.format(combo) if combo else '' true_damage = '{}'.format(_humanize_number(fua, 2)) if fua else '' any_fua = 'fua' if fua or mfua else '' joined = ' '.join((a for a in [combos, true_damage, any_fua] if a)) extras = f"[{joined}]" if joined else '' return f"[{_format_number(hp)}/{_format_number(atk)}/{_format_number(rcv)}{resist_val}]{ehp} {extras}"
async def validrules(self, ctx): """Show rules for the valid-answer monster list""" args = {"db": get_emoji("db"), "rd": get_emoji("rd")} await ctx.send(RULES_TEXT.format(**args))
def _killer_latent_emoji(latent_name: str): return get_emoji('latent_killer_{}'.format(latent_name.lower()))