L'avantage d'un main script, c'est qu'il permet de détecter des évènements à n'importe quel moment pour en générer d'autres. On peut y mettre plein de blocs tous indépendants les uns des autres, en fait on y met tous les tests qu'on veut faire constamment pour déclencher des évènements.
Je prends des exemples dans ce que je modde.
1/ Mettre des jours d'attente.
Par exemple, le bloc qui permet de laisser un certain nombre de jours entre 2 entrées de journal. Imaginons que j'ai un journal RAJ3_Struggle qui doit passer à 30 tout seul 2 jours après être passé à 20. Je vais mettre ce bloc :
Code : Tout sélectionner
If ( GetJournalIndex RAJ3_Struggle < 20 )
If ( RAJStruggleDay != Day )
Set RAJStruggleDay to Day
Endif
ElseIf ( GetJournalIndex RAJ3_Struggle == 20 )
If ( RAJStruggleDay != Day )
Set RAJStruggleElapsedDay to ( RAJStruggleElapsedDay + 1 )
Set RAJStruggleDay to Day
Endif
If ( RAJStruggleElapsedDay >= 2 )
Journal RAJ3_Struggle 30
Endif
Endif
Code : Tout sélectionner
Short RAJStruggleDay
Short RAJStruggleElapsedDay
J'entends par là, empêcher tout issue au joueur tant qu'il n'a pas rempli des conditions choisies à l'avance. Par exemple, je veux bloquer un joueur sur les zones "Skarogne, temple gris, hall principal", "Skarogne, temple gris, aile Est", "Skarogne, temple gris, aile Ouest", "Skarogne, temple gris, jardin intérieur" et "Skarogne, temple gris, vestibule". Première chose à faire, créer une zone (éventuellement vide) racine de toutes les autres, donc "Skarogne, temple gris". Ainsi, quand on teste GetPCCell "Skarogne, temple gris", on reçoit 1 pour toutes les sous-zones.
Ceci fait l'affaire, et inclut la prévention contre les téléportations avec des objets, comme les amulettes des clans vampires.
Code : Tout sélectionner
If ( GetPCCell "Skarogne, temple gris" == 1 )
Set Teleport to 1
else
if ( Teleport == 1 )
EnableTeleporting
Set Teleport to 0
endif
endif
if ( Teleport == 1 )
DisableTeleporting
if ( GetPCCell "Skarogne, temple gris" == 0 )
Messagebox "Vous ne pouvez pas sortir du temple."
player->sethealth 0
;là c'est la solution radicale "tu sors, t'es mort", mais on peut aussi faire un player->PositionCell avec des coordonnées bien choisies pour remettre le joueur à l'entrée de la zone. Si on pousse le vice, on peut même constamment stocker les coordonnées du joueur dans des variables et le replacer là où il était.
endif
endif