def from_dict_sync(cls, raw, ctx, combat): inst = super(PlayerCombatant, cls).from_dict(raw, ctx, combat) inst.character_id = raw['character_id'] inst.character_owner = raw['character_owner'] from cogs5e.models.character import Character char = ctx.bot.mdb.characters.delegate.find_one({"owner": inst.character_owner, "upstream": inst.character_id}) if char is None: raise CombatException(f"A character in combat was deleted. " f"Please run `{ctx.prefix}init end -force` to end combat.") inst._character = Character.from_dict(char) return inst
def from_dict(cls, raw, ctx): combatants = [] for c in raw['combatants']: if c['type'] == 'common': combatants.append(Combatant.from_dict(c, ctx)) elif c['type'] == 'monster': combatants.append(MonsterCombatant.from_dict(c, ctx)) elif c['type'] == 'player': combatants.append(PlayerCombatant.from_dict(c, ctx)) else: raise CombatException("Unknown combatant type") return cls(raw['name'], raw['init'], combatants, ctx, raw['index'])
def from_dict_sync(cls, raw, ctx, combat): inst = super(PlayerCombatant, cls).from_dict(raw, ctx, combat) inst.character_id = raw['character_id'] inst.character_owner = raw['character_owner'] try: from cogs5e.models.character import Character inst._character = Character.from_bot_and_ids_sync(ctx.bot, inst.character_owner, inst.character_id) except NoCharacter: raise CombatException(f"A character in combat was deleted. " f"Please run `{ctx.prefix}init end -force` to end combat.") return inst
def from_dict_sync(cls, raw, ctx, combat): combatants = [] for c in raw.pop('combatants'): if c['type'] == 'common': combatants.append(Combatant.from_dict(c, ctx, combat)) elif c['type'] == 'monster': combatants.append(MonsterCombatant.from_dict(c, ctx, combat)) elif c['type'] == 'player': combatants.append(PlayerCombatant.from_dict_sync(c, ctx, combat)) else: raise CombatException("Unknown combatant type") del raw['type'] return cls(ctx, combat, combatants, **raw)
def from_dict(cls, raw, ctx): combatants = [] for c in raw['combatants']: if c['type'] == 'common': combatants.append(Combatant.from_dict(c, ctx)) elif c['type'] == 'monster': combatants.append(MonsterCombatant.from_dict(c, ctx)) elif c['type'] == 'player': combatants.append(PlayerCombatant.from_dict(c, ctx)) elif c['type'] == 'group': combatants.append(CombatantGroup.from_dict(c, ctx)) else: raise CombatException("Unknown combatant type") return cls(raw['channel'], raw['summary'], raw['dm'], raw['options'], ctx, combatants, raw['round'], raw['turn'], raw['current'])
async def from_dict(cls, raw, ctx): inst = cls(raw['channel'], raw['summary'], raw['dm'], raw['options'], ctx, [], raw['round'], raw['turn'], raw['current']) for c in raw['combatants']: if c['type'] == 'common': inst._combatants.append(Combatant.from_dict(c, ctx, inst)) elif c['type'] == 'monster': inst._combatants.append(MonsterCombatant.from_dict(c, ctx, inst)) elif c['type'] == 'player': inst._combatants.append(await PlayerCombatant.from_dict(c, ctx, inst)) elif c['type'] == 'group': inst._combatants.append(await CombatantGroup.from_dict(c, ctx, inst)) else: raise CombatException("Unknown combatant type") return inst
def remove_effect(self, effect): try: self._effects.remove(effect) except ValueError: raise CombatException("Effect does not exist on combatant.")