Immunité contre les sorts (SPWI510)

Contenu

Immunité contre les sorts (SPWI510)#

L’immunité contre les sorts est intéressante sur un aspect : la sélection multiple de sort.
Très user-friendly pour le joueur, épreuve impossible pour un script.
Il convient donc de contourner la problématique.

Dans ce cas, il est nécessaire de créer un bloc pour chaque sort secondaire.

IF
    ActuallyInCombat()
    ActionListEmpty()
    !ButtonDisabled(BUTTON_CASTSPELL)
    Global("BDAI_NO_ARCANE", "LOCALS", 0)            //# CowledWizard dont check this area
    Global("BDAI_DISABLE_DEFENSIVE", "LOCALS", 0)    //# Using DEFENSIVE magic is authorized
    HaveSpell(WIZARD_SPELL_IMMUNITY)
    !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)
    !CheckStat(Myself, 1, WIZARD_SPELL_IMMUNITY)

    //# …
THEN
    RESPONSE #1
        RemoveSpell(Myself, WIZARD_SPELL_IMMUNITY)
        SetGlobalTimer("BD_Cast", "LOCALS", ONE_ROUND)
        ForceSpell(Myself, WIZARD_SPELL_IMMUNITY_ABJURATION)
END

On enlève d’abord le sort principal puis on force le sort secondaire.

IF
    ActuallyInCombat()
    ActionListEmpty()
    !ButtonDisabled(BUTTON_CASTSPELL)
    Global("BDAI_NO_ARCANE", "LOCALS", 0)            //# CowledWizard dont check this area
    Global("BDAI_DISABLE_DEFENSIVE", "LOCALS", 0)    //# Using DEFENSIVE magic is authorized
    HaveSpell(WIZARD_SPELL_IMMUNITY)
    !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)
    !CheckStat(Myself, 1, WIZARD_SPELL_IMMUNITY)

    //# …
THEN
    RESPONSE #1
        RemoveSpell(Myself, WIZARD_SPELL_IMMUNITY)
        SetGlobalTimer("BD_Cast", "LOCALS", ONE_ROUND)
        SpellNoDec(Myself, WIZARD_SPELL_IMMUNITY_ABJURATION)
END

On enlève d’abord le sort principal puis on lance « normalement » le sort secondaire.

IF
    ActuallyInCombat()
    ActionListEmpty()
    !ButtonDisabled(BUTTON_CASTSPELL)
    Global("BDAI_NO_ARCANE", "LOCALS", 0)            //# CowledWizard dont check this area
    Global("BDAI_DISABLE_DEFENSIVE", "LOCALS", 0)    //# Using DEFENSIVE magic is authorized
    HaveSpell(WIZARD_SPELL_IMMUNITY)
    !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)
    !CheckStat(Myself, 1, WIZARD_SPELL_IMMUNITY)

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

On lance d’abord le sort principal puis on force le sort secondaire.
On doit forcer le sort secondaire sinon il faut attendre un round avant de le lancer.

IF
    ActuallyInCombat()
    ActionListEmpty()
    !ButtonDisabled(BUTTON_CASTSPELL)
    Global("BDAI_NO_ARCANE", "LOCALS", 0)            //# CowledWizard dont check this area
    Global("BDAI_DISABLE_DEFENSIVE", "LOCALS", 0)    //# Using DEFENSIVE magic is authorized
    HaveSpell(WIZARD_SPELL_IMMUNITY)
    !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)
    !CheckStat(Myself, 1, WIZARD_SPELL_IMMUNITY)

    //# …
THEN
    RESPONSE #1
        RemoveSpell(Myself, WIZARD_SPELL_IMMUNITY)
        SetGlobalTimer("BD_Cast", "LOCALS", ONE_ROUND)
        ForceSpell(Myself, WIZARD_SPELL_IMMUNITY)
        SpellNoDec(Myself, WIZARD_SPELL_IMMUNITY_ABJURATION)
END

On enlève d’abord le sort principal et on le force puis on lance « normalement » le sort secondaire.

Comparatif#

Le sort 1 étant le sort principal (ici WIZARD_SPELL_IMMUNITY).
Le sort 2 étant le sort secondaire (ici WIZARD_SPELL_IMMUNITY_ABJURATION).

Effet

Effet original

Option 1

Option 2

Option 3

Option 4

Sort 1 : temps d’incantation

Sort 1 : échec concentration

\(^(\)\(^1\)\(^)\)

Sort 1 : impact SPELLFAILUREMAGE

\(^(\)\(^1\)\(^)\)

Sort 1 : log de combat

Sort 1 : effets visuels et sonores

Sort 1 : SpellCast possible

Sort 2 : temps d’incantation

Sort 2 : échec concentration

Sort 2 : impact SPELLFAILUREMAGE

Sort 2 : log de combat

Sort 2 : effets visuels et sonores

Sort 2 : SpellCast possible

Sort 2 : Contrainte de distance

Effet dupliqué possible si joueur

\(^(\)\(^1\)\(^)\) : le sort peut échouer mais n’empêche pas de lancer le sort secondaire…

Par défaut, l’option 4 semble être la plus adaptée pour les personnages NOTGOOD.
L’option 2 est moins réaliste mais plus générique.