Surveillance des Mages Cagoulés#
Les mages cagoulés surveillent Athkatla, comment éviter de les attirer ?
Script de surveillance#
Exemple de script qui permet aux mages d’intervenir (ici AR0020.bcs) :
IF
SpellCast([PC],0)
!GlobalTimerNotExpired("SpellsBad","GLOBAL")
Global("BribedCowled","GLOBAL",0)
GlobalLT("CowledWarning","GLOBAL",7)
THEN
RESPONSE #100
CreateCreatureObjectDoor("COWENF2",LastTrigger,0,0,0) // Cowled Enforcer
SetGlobalTimer("SpellsBad","GLOBAL",ONE_HOUR)
END
Explications#
BribedCowled
permet de savoir si le groupe a payé pour avoir le droit de pratiqué la magie en ville (0 pour non, 1 pour oui)SpellsBad
est le temps d’attente minimum entre chaque intervention des mages cagoulésCowledWarning
est le nombre d’avertissements reçus
SpellCast([PC],0)
vaut vrai si un personnage PC lance un sort de mageGlobal("BribedCowled","GLOBAL",0)
vérifie que le groupe n’a pas le droit de pratiquer la magie en villeGlobalLT("CowledWarning","GLOBAL",7)
indique que si cette variable vaut 7 ou plus, les mages n’interviennent plusSetGlobalTimer("SpellsBad","GLOBAL",ONE_HOUR)
indique que le temps d’attente entre chaque intervention est d’une heure
Exemples#
IF
Global("CanCastAthkatla", "LOCALS", 1)
Global("BribedCowled", "GLOBAL", 0)
GlobalLT("CowledWarning", "GLOBAL", 7)
Allegiance(Myself, PC)
!GlobalTimerNotExpired("SpellsBad", "GLOBAL")
OR(7)
AreaCheck("AR0020") // City Gates
AreaCheck("AR0300") // The Docks
AreaCheck("AR0400") // Slums
AreaCheck("AR0500") // Bridge District
AreaCheck("AR0700") // Waukeen's Promenade
AreaCheck("AR0900") // Temple District
AreaCheck("AR1000") // Government District
THEN
RESPONSE #100
SetGlobal("CanCastAthkatla", "LOCALS", 0)
END
IF
Global("CanCastAthkatla", "LOCALS", 0)
OR(4)
!Allegiance(Myself, PC)
Global("BribedCowled", "GLOBAL", 1)
GlobalGT("CowledWarning", "GLOBAL", 6)
GlobalTimerNotExpired("SpellsBad", "GLOBAL")
THEN
RESPONSE #100
SetGlobal("CanCastAthkatla", "LOCALS", 1)
END
IF
Global("CanCastAthkatla", "LOCALS", 0)
!AreaCheck("AR0020") // City Gates
!AreaCheck("AR0300") // The Docks
!AreaCheck("AR0400") // Slums
!AreaCheck("AR0500") // Bridge District
!AreaCheck("AR0700") // Waukeen's Promenade
!AreaCheck("AR0900") // Temple District
!AreaCheck("AR1000") // Government District
THEN
RESPONSE #100
SetGlobal("CanCastAthkatla", "LOCALS", 1)
END
IF
Global("BDAI_NO_ARCANE","LOCALS",0)
Global("BribedCowled","GLOBAL",0)
ActionListEmpty()
InParty(Myself)
AreaType(OUTDOOR)
OR(7)
AreaCheck("AR0020") // City Gates
AreaCheck("AR0300") // The Docks
AreaCheck("AR0400") // Slums
AreaCheck("AR0500") // Bridge District
AreaCheck("AR0700") // Waukeen's Promenade
AreaCheck("AR0900") // Temple District
AreaCheck("AR1000") // Government District
THEN
RESPONSE #100
SetGlobal("BDAI_NO_ARCANE","LOCALS",1)
END
IF
Global("BDAI_NO_ARCANE","LOCALS",1)
ActionListEmpty()
InParty(Myself)
!AreaType(OUTDOOR)
THEN
RESPONSE #100
SetGlobal("BDAI_NO_ARCANE","LOCALS",0)
END
IF
Global("BDAI_NO_ARCANE","LOCALS",1)
ActionListEmpty()
InParty(Myself)
!AreaCheck("AR0020") // City Gates
!AreaCheck("AR0300") // The Docks
!AreaCheck("AR0400") // Slums
!AreaCheck("AR0500") // Bridge District
!AreaCheck("AR0700") // Waukeen's Promenade
!AreaCheck("AR0900") // Temple District
!AreaCheck("AR1000") // Government District
THEN
RESPONSE #100
SetGlobal("BDAI_NO_ARCANE","LOCALS",0)
END
AreaType(OUTDOOR)
est ici superflu, il est vrai que toutes les zones concernées par la surveillance se situent en extérieur mais rien ne le garanti dans l’absolu (le second bloc ne sert donc pas)InParty(Myself)
est bien mais ne correspond pas totalement avec le script des mages qui estSpellCast([PC],0)
, il faudrait plutôt utiliserAllegiance(Myself, PC)
pas de gestion de
SpellsBad
pas de gestion des cas où les conditions évolueraient au sein même d’une zone (par exemple, lors de la 7ème et dernière intervention, le script n’acceptera pas de lancer des sorts, car
BDAI_NO_ARCANE
vaudra toujours 1)ActionListEmpty()
est discutable car cela empêche le personnage de s’arrêter (c’est bien) mais le chargement des variables est importante et il est possible que des sorts n’aient pas la containteActionListEmpty()
et puissent donc être lancés
Note
Les mages cagoulés surveillent les sorts de mage.
Pas les sorts druidiques, pas les sorts divins, pas les compétences spéciales…
En revanche, cela impacte les objets qui lancent de façon indirecte, un sort de mage (comme les parchemins, mais aussi le casque de Vailhor).
Liste de carte dynamique#
Une des diffcultés que rencontre chaque mod, est de lister les différentes zones surveillées par les mages cagoulés de façon « dynamique », en effet elle est actuellement « en dur » et correspond à celle de la version vanilla. Mais elle peut être modifiée par d’autres mods sans pouvoir être prise en compte par le script.
Il serait utile d’ajouter collectivement une variable dans les zones surveillées par les mages cagoulés :
IF
Global("CowledCheckArea", "AR...", 0)
THEN
RESPONSE #100
SetGlobal("CowledCheckArea", "AR...", 1)
END
En appliquant le bloc ci-dessus dans les maps concernées, dans tous les scripts des personnages il serait possible de checker dynamiquement cette valeur même si des mods ajoutent ou enlèvent des zones.
IF
Global("CanCastAthkatla", "LOCALS", 1)
Global("BribedCowled", "GLOBAL", 0)
GlobalLT("CowledWarning", "GLOBAL", 7)
Allegiance(Myself, PC)
!GlobalTimerNotExpired("SpellsBad", "GLOBAL")
Global("CowledCheckArea", "MYAREA", 1)
THEN
RESPONSE #100
SetGlobal("CanCastAthkatla", "LOCALS", 0)
END
IF
Global("CanCastAthkatla", "LOCALS", 0)
OR(5)
!Allegiance(Myself, PC)
Global("BribedCowled", "GLOBAL", 1)
GlobalGT("CowledWarning", "GLOBAL", 6)
GlobalTimerNotExpired("SpellsBad", "GLOBAL")
Global("CowledCheckArea", "MYAREA", 0)
THEN
RESPONSE #100
SetGlobal("CanCastAthkatla", "LOCALS", 1)
END