Page 1 sur 1

[SCRIPT] Décalage dans le temps à l'arrivée dans une carte

Posté : lun. 19 oct. 2015, 20:06
par Cocrane
Le Charname arrive dans une carte.

Certaines créatures sont censés ne plus être là ou au contraire apparaitre.

Le script est soit lié à la map ou la créature.

J'observe en général un décalage d'une à deux secondes. Du coup, on a le temps de voir la créature avant qu'elle disparaisse.

Le moteur du jeu a trop de choses à faire? ^^

Posté : lun. 19 oct. 2015, 21:22
par Freddy_Gwendo
Ça dépend de l'emplacement de ton code de "suppression" des créatures.

Tu peux les poster pour avoir une réponse plus détaillée ? :)

Posté : lun. 19 oct. 2015, 21:55
par Cocrane
Script d'une créature

DEBUT

// Gestion du compteur pour savoir si la compagnie est éliminée
IF
die()
GLOBAL("QG_GA_attaque","GLOBAL",1)
THEN
RESPONSE #100
IncrementGlobal("compteur_GA_mort","GLOBAL",1)
END

// Confrérie éliminée: il n'y a plus de mages dans la cité
IF
GLOBAL("GA_eliminee","GLOBAL",1)
!ActuallyInCombat()
THEN
RESPONSE #100
destroyself()
END

ETC...
FIN

J'ai p.e une piste, 95% de mes variables sont en mode "GLOBALE". Le moteur du jeu teste p.e beaucoup trop de variables et du coup ça le ralenti?

Posté : lun. 19 oct. 2015, 22:41
par Freddy_Gwendo
Non, ça n'a rien à voir.

Imaginons que tu veuilles supprimer le perso X présent dans la carte Y.

Quand tu entres dans la carte Y, le moteur charge toutes les données de la carte, puis applique les scripts des persos. Donc il y a forcément un moment où tu verras ce perso s'il est à portée de vue. C'est ce qui arrive à Yoshimo à la Couronne de Cuivre.

Dans ton cas, utilise une variable globale "TousMorts", puis ajoute au début du script de la carte Y :

Code : Tout sélectionner

IF
  Global("TousMorts","GLOBAL",1)
  Global("TousMorts","Y",0)
THEN
  RESPONSE #100
    ActionOverride("X",DestroySelf())
    SetGlobal ("TousMorts",Y",1)
END
Normalement, le script est lancé au moment où la carte est chargée et tu ne devrais pas voir la créature disparaitre.

Posté : dim. 03 avr. 2016, 08:56
par Cocrane
Si j'utilise le code avec la variable tous morts, le destroyself() va provoquer la mort d'une seule créature parmi celles qui portent ce nom.

Si on enlève SetGlobal ("TousMorts",Y",1), le block va tourner en boucle et là je pense que toutes les créatures vont disparaitre. Mais on aura un bou de script qui tourne en continu.

Autre possibilité:
on arrive sur la carte
écran noir pendant deux secondes, le temps de permettre au jeu de traiter tous les scripts créatures.

Posté : dim. 03 avr. 2016, 11:53
par Freddy_Gwendo
Tu as essayé avec deux créatures portant la même variable de mort (Death variable) ?
Avec le bloc de script au tout début du script de la carte.

Posté : dim. 03 avr. 2016, 11:58
par Cocrane
Oui.

En général, j'ai deux cas:
- il y a une créature de BG1 que je ne veux plus voir lorsque l'on joue à mon mod (cas d'un joueur qui joue à mon mod avec sans rejouer tout BG1)
- membres de la compagnie de mercenaires où la compagnie est éliminée au global. Les survivants ont quitté les différentes cartes où ils étaient.

Dans les deux cas, en général j'ai le temps de les voir. ^^

L'écran noir en cas d'init (suppression des créatures de BG1) me parait une bonne solution.