Exemple #1
0
    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