Météore de Melf (SPWI325)

Météore de Melf (SPWI325)#

Le sort de Minuscules météores de Melf est intéressant car il crée une arme magique entre les doigts du lanceur de sort, les vérifications sont inhabituelles.

Être équipé de météores n’a ni caractéristique ni spellstate particulier, il « suffit » de vérifier que des météores sont bien équipées.

À savoir que HasItemEquiped et HasItemEquipedReal ne vérifient pas le slot d’arme magique.

Bien que peu performants, HasItem et NumItems peuvent nous aider.

Mais il reste un problème : l’objet peut être dans le sac et non équipé.

CheckItemSlot nous permet de dépasser ces limites, en vérifiant spécifiquement la présence de l’objet à l’emplacement désiré.

IF
    ActuallyInCombat()
    ActionListEmpty()
    !ButtonDisabled(BUTTON_CASTSPELL)
    Global("BDAI_NO_ARCANE", "LOCALS", 0)            //# CowledWizard dont check this area
    Global("BDAI_DISABLE_OFFENSIVE", "LOCALS", 0)    //# Using OFFENSIVE magic is authorized
    HaveSpell(WIZARD_MELF_METEOR)
    !StateCheck(Myself, STATE_SLEEPING | STATE_HELPLESS | STATE_REALLY_DEAD)  //# ACTION actions are usable
    CheckStat(Myself, 0, CASTERHOLD)
    CheckStatLT(Myself, 50, SPELLFAILUREMAGE)         //# failure rate less than 50%
    OR(2)
        !GlobalTimerNotExpired("BD_Cast", "LOCALS")   //# BD_Cast is expired
        !CheckStat(Myself, 0, AURACLEANSING)          //# or Auracleansing is active
    OR(2)                                             //# not poisoned or immune to poison
        !StateCheck(Myself, STATE_POISONED)
        CheckStatGT(Myself, 99, RESISTPOISON)
    OR(2)                                             //# no surge or have a protection against it
        CheckStat(Myself, 0, FORCESURGE)
        CheckStatGT(Myself, 0, CHAOS_SHIELD)

    //# Vérification
    !CheckItemSlot(Myself, "melfmet", SLOT_MISC19)

    //# …
THEN
    RESPONSE #1
        SetGlobalTimer("BD_Cast", "LOCALS", ONE_ROUND)
        Spell(Myself, WIZARD_MELF_METEOR)
END

Super, mais peut-être que l’on a envie de bloquer l’incantation du sort si une Lame noire du désastre est équipée ?
Il faut donc lister toutes les armes possibles.

IF
    ActuallyInCombat()
    ActionListEmpty()
    !ButtonDisabled(BUTTON_CASTSPELL)
    Global("BDAI_NO_ARCANE", "LOCALS", 0)            //# CowledWizard dont check this area
    Global("BDAI_DISABLE_OFFENSIVE", "LOCALS", 0)    //# Using OFFENSIVE magic is authorized
    HaveSpell(WIZARD_MELF_METEOR)
    !StateCheck(Myself, STATE_SLEEPING | STATE_HELPLESS | STATE_REALLY_DEAD)  //# ACTION actions are usable
    CheckStat(Myself, 0, CASTERHOLD)
    CheckStatLT(Myself, 50, SPELLFAILUREMAGE)         //# failure rate less than 50%
    OR(2)
        !GlobalTimerNotExpired("BD_Cast", "LOCALS")   //# BD_Cast is expired
        !CheckStat(Myself, 0, AURACLEANSING)          //# or Auracleansing is active
    OR(2)                                             //# not poisoned or immune to poison
        !StateCheck(Myself, STATE_POISONED)
        CheckStatGT(Myself, 99, RESISTPOISON)
    OR(2)                                             //# no surge or have a protection against it
        CheckStat(Myself, 0, FORCESURGE)
        CheckStatGT(Myself, 0, CHAOS_SHIELD)

    //# Vérification
    !HasItemSlot(Myself, SLOT_MISC19)

    //# …
THEN
    RESPONSE #1
        SetGlobalTimer("BD_Cast", "LOCALS", ONE_ROUND)
        Spell(Myself, WIZARD_MELF_METEOR)
END

Cette version générique retourne le problème en utilisant HasItemSlot : plutôt que de lister toutes les armes magiques de tous les mods, on vérifie si l’emplacement de l’arme magique est vide.
Ainsi, on ne pourra pas invoquer une arme magique si l’on en possède déjà une.