async def save(self, ctx, skill, *args): if skill == 'death': ds_cmd = self.bot.get_command('game deathsave') if ds_cmd is None: return await ctx.send("Error: GameTrack cog not loaded.") return await ctx.invoke(ds_cmd, *args) char: Character = await Character.from_ctx(ctx) args = await self.new_arg_stuff(args, ctx, char) hide = args.last('h', type_=bool) embed = embeds.EmbedWithCharacter(char, name=False, image=not hide) checkutils.update_csetting_args(char, args) caster = await targetutils.maybe_combat_caster(ctx, char) result = checkutils.run_save(skill, caster, args, embed) # send await ctx.send(embed=embed) await try_delete(ctx.message) if gamelog := self.bot.get_cog('GameLog'): await gamelog.send_save(ctx, char, result.skill_name, result.rolls)
async def game_deathsave(self, ctx, *args): """Commands to manage character death saves. __Valid Arguments__ See `!help save`.""" character: Character = await Character.from_ctx(ctx) embed = EmbedWithCharacter(character, name=False) args = await helpers.parse_snippets(args, ctx) args = await helpers.parse_with_character(ctx, character, args) args = argparse(args) checkutils.update_csetting_args(character, args) caster, _, _ = await targetutils.maybe_combat(ctx, character, args) result = checkutils.run_save('death', caster, args, embed) dc = result.skill_roll_result.dc or 10 death_phrase = '' for save_roll in result.skill_roll_result.rolls: if save_roll.crit == d20.CritType.CRIT: character.hp = 1 elif save_roll.crit == d20.CritType.FAIL: character.death_saves.fail(2) elif save_roll.total >= dc: character.death_saves.succeed() else: character.death_saves.fail() if save_roll.crit == d20.CritType.CRIT: death_phrase = f"{character.name} is UP with 1 HP!" break elif character.death_saves.is_dead(): death_phrase = f"{character.name} is DEAD!" break elif character.death_saves.is_stable(): death_phrase = f"{character.name} is STABLE!" break if death_phrase: embed.set_footer(text=death_phrase) embed.add_field(name="Death Saves", value=str(character.death_saves), inline=False) await character.commit(ctx) await ctx.send(embed=embed) await try_delete(ctx.message) if gamelog := self.bot.get_cog('GameLog'): await gamelog.send_save(ctx, character, result.skill_name, result.rolls)
async def check(self, ctx, check, *args): char: Character = await Character.from_ctx(ctx) skill_key = await search_and_select(ctx, SKILL_NAMES, check, lambda s: s) embed = EmbedWithCharacter(char, False) skill = char.skills[skill_key] args = await self.new_arg_stuff(args, ctx, char) checkutils.update_csetting_args(char, args, skill) result = checkutils.run_check(skill_key, char, args, embed) await ctx.send(embed=embed) await try_delete(ctx.message) if gamelog := self.bot.get_cog('GameLog'): await gamelog.send_check(ctx, char, result.skill_name, result.rolls)
async def check(self, ctx, check, *args): char: Character = await Character.from_ctx(ctx) skill_key = await search_and_select(ctx, SKILL_NAMES, check, lambda s: s) args = await self.new_arg_stuff(args, ctx, char) hide = args.last('h', type_=bool) embed = embeds.EmbedWithCharacter(char, name=False, image=not hide) skill = char.skills[skill_key] checkutils.update_csetting_args(char, args, skill) caster = await targetutils.maybe_combat_caster(ctx, char) result = checkutils.run_check(skill_key, caster, args, embed) await ctx.send(embed=embed) await try_delete(ctx.message) if gamelog := self.bot.get_cog('GameLog'): await gamelog.send_check(ctx, char, result.skill_name, result.rolls)