def learn_spell(self, spell_id, cast_on_learn=False) -> bool: if self.unit_mgr.get_type() != ObjectTypes.TYPE_PLAYER: return False spell = DbcDatabaseManager.SpellHolder.spell_get_by_id(spell_id) if not spell: return False if spell_id in self.spells: return False db_spell = CharacterSpell() db_spell.guid = self.unit_mgr.guid db_spell.spell = spell_id RealmDatabaseManager.character_add_spell(db_spell) self.spells[spell_id] = db_spell data = pack('<H', spell_id) self.unit_mgr.enqueue_packet( PacketWriter.get_packet(OpCode.SMSG_LEARNED_SPELL, data)) if cast_on_learn or spell.AttributesEx & SpellAttributesEx.SPELL_ATTR_EX_CAST_WHEN_LEARNED: self.start_spell_cast(spell, self.unit_mgr, self.unit_mgr, SpellTargetMask.SELF) # Apply passive effects when they're learned. This will also apply talents on learn. if spell.Attributes & SpellAttributes.SPELL_ATTR_PASSIVE: self.apply_passive_spell_effects(spell) # TODO Teach skill required as well like in CharCreateHandler return True
def learn_spell(self, spell_id): if self.unit_mgr.get_type() != ObjectTypes.TYPE_PLAYER: return False spell = DbcDatabaseManager.SpellHolder.spell_get_by_id(spell_id) if not spell: return False if spell_id in self.spells: return False db_spell = CharacterSpell() db_spell.guid = self.unit_mgr.guid db_spell.spell = spell_id RealmDatabaseManager.character_add_spell(db_spell) self.spells[spell_id] = db_spell data = pack('<H', spell_id) self.unit_mgr.session.enqueue_packet(PacketWriter.get_packet(OpCode.SMSG_LEARNED_SPELL, data)) # Teach skills required as well like in CharCreateHandler? return True