Page 1 sur 1
[SCRIPT] Créature qui suit automatiquement un personnage
Posté : lun. 15 mai 2017, 23:47
par Faust
Bonsoir,
Le Script "Control" permet à une créature de suivre automatiquement CHARNAME lorsque le bouton "S" est pressé.
► Afficher le texte
IF
HotKey(S)
Global("pscript_AutoFollow","LOCALS",0)
THEN
RESPONSE #100
DisplayStringHead(Myself,835)
SetGlobal("pscript_AutoFollow","LOCALS",1)
J'ai essayer d'ajouter un effet à une créature afin que celle-ci suive automatiquement le personnage après invocation, sans avoir à presser une quelconque touche:
Script: Set Global Variable [265]
Cependant je n'arrive pas à obtenir quoi que ce soit, est ce qu'il est effectivement possible d'utiliser ce script pour faire en sorte que la créature invoquée suive automatiquement son maitre ? (Si possible le Casteur original, pas CHARNAME).
Faust
Posté : mar. 16 mai 2017, 19:08
par Freddy_Gwendo
C'est normal que ton script ne fonctionne pas : il se contente d'attribuer une valeur à une variable et d'afficher un texte.
De plus, l'effet #265 modifie une variable GLOBALE, et ton script utilise une variable LOCALE.
Que souhaites-tu-faire exactement ? Convoquer une créature pendant un temps limité (combien) qui suive toujours son invocateur ou bien convoquer une créature de manière permanente ?
Posté : mar. 16 mai 2017, 19:52
par Faust
Freddy_Gwendo a écrit :C'est normal que ton script ne fonctionne pas : il se contente d'attribuer une valeur à une variable et d'afficher un texte.
De plus, l'effet #265 modifie une variable GLOBALE, et ton script utilise une variable LOCALE.
Que souhaites-tu-faire exactement ? Convoquer une créature pendant un temps limité (combien) qui suive toujours son invocateur ou bien convoquer une créature de manière permanente ?
Salut Freddy,
Merci pour ton attention.
Je souhaite invoquer une créature qui automatiquement suive toujours son invocateur jusqu'à la fin de sa convocation. En revanche que la créature commence à suivre son invocateur qu'à partir d'une certaine distance pour ne pas entrer en conflit avec son script de combat. La distance paramétrée avec le script "Control" est légèrement trop courte (vraiment légèrement).
J'ai mis comme Defaut script "Mage2" et comme General script "Control" pour la forme initiale, et ai mis comme Defaut script "FIGMAG10" et comme General script "Control" pour la transformation.
La créature ne revient pas vers le personnage désiré mais "CHARNAME" lorsqu'elle s'éloigne trop de celui-ci, mais uniquement si j'ai pressé "S" au préalable pour activer le mode accompagnement.
La créature avant transformation à un temps de convocation de 360 secondes
La transformation dure 60 secondes (en fait le sort de transformation désinvoque la première créature pour en invoquer une autre pendant 60 secondes)
La période de 60 secondes passée la créature est automatiquement désinvoquée et la créature avec sa forme initiale est de nouveau invoquée pendant 60 secondes après quoi elle disparaît complètement.
Posté : mer. 17 mai 2017, 22:52
par Faust
Freddy_Gwendo a écrit :C'est normal que ton script ne fonctionne pas : il se contente d'attribuer une valeur à une variable et d'afficher un texte.
De plus, l'effet #265 modifie une variable GLOBALE, et ton script utilise une variable LOCALE.
Que souhaites-tu-faire exactement ? Convoquer une créature pendant un temps limité (combien) qui suive toujours son invocateur ou bien convoquer une créature de manière permanente ?
J'ai aussi essayé le script FOLLOW et FOLLOW2, l'un ne fonctionne pas, le second fonctionne à moitié (la créature suis CHARNAME, mais après l'avoir atteint une fois, il ne l'accompagne plus du tout).
Existe il des scripts afin de scripter exactement ce que je souhaite ou mieux vaut que je me contente du script CONTROL qui se rapproche un peu de ce que je veux?
Posté : jeu. 18 mai 2017, 23:13
par Freddy_Gwendo
Dans ce cas, je te conseille d'abandonner les scripts du jeu et d'en créer d'autres que tu appliqueras à tes créatures. Rassure-toi, pour faire ce que tu souhaites, ces scripts sont très courts.
Comme toujours, en matière de modding, rien ne sert d'essayer de réinventer la roue : tu trouveras ton bonheur dans des mods qui font déjà la même chose.
Tu as l'embarras du choix, mais jette un œil au hasard à
Animal Companions,
Golem Construction for Spellcasters et
W_PackMule, tous trois traduits. Ils concernent des créatures qui deviennent familiers, mais tu peux te passer de la partie "je deviens familier" et conserver les blocs de scripts qui leur permettent de suivre automatiquement leur maître.
Tu trouveras leur liens de téléchargement
ici.
Posté : ven. 19 mai 2017, 12:43
par Faust
Freddy_Gwendo a écrit :Dans ce cas, je te conseille d'abandonner les scripts du jeu et d'en créer d'autres que tu appliqueras à tes créatures. Rassure-toi, pour faire ce que tu souhaites, ces scripts sont très courts.
Comme toujours, en matière de modding, rien ne sert d'essayer de réinventer la roue : tu trouveras ton bonheur dans des mods qui font déjà la même chose.
Tu as l'embarras du choix, mais jette un œil au hasard à
Animal Companions,
Golem Construction for Spellcasters et
W_PackMule, tous trois traduits. Ils concernent des créatures qui deviennent familiers, mais tu peux te passer de la partie "je deviens familier" et conserver les blocs de scripts qui leur permettent de suivre automatiquement leur maître.
Tu trouveras leur liens de téléchargement
ici.
Super, merci Monsieur!
Est-ce que ces mods fonctionnent avec BGT?
Edit: -> Animal Companions oui/ Golem Contruction For Spellcasters non.
Je test les différents scripts dès que j'ai du temps et te fais un retour.
Edit: La créature suit bien un personnage sans aucune intervention de celui-ci avec Animal Companions, en revanche peut importe qui l'invoque, il suit toujours CHARNAME. Est-ce normal qu'il ne suive pas le rodeur/ druide?
Posté : ven. 19 mai 2017, 15:24
par Freddy_Gwendo
Normal, seul CHARNAME peut appeler un animal.
Si ce n'est déjà fait, je te conseille de télécharger
IESDP, la "Bible" des moddeurs, qui recense tous les fichiers des jeux (BG, BG2, IWD, PsT, EE), leur contenu et leur structure. Tu peux soit le consulter en ligne, soit le désarchiver sur ton DD (conseillé pour l'avoir sous la main en permanence).
Parmi ces derniers, dans l'onglet "Identifiers" (fichiers IDS), tu trouveras la liste des "Objets", c'est-à-dire la liste des objets auxquels les commandes de scripts s'appliquent.
Dans ton cas, il suffit de remplacer
Player1 par
LastSummonerOf(Myself) pour que ça fonctionne comme tu le souhaites.
Posté : ven. 19 mai 2017, 17:30
par Faust
Freddy_Gwendo a écrit :Normal, seul CHARNAME peut appeler un animal.
Si ce n'est déjà fait, je te conseille de télécharger
IESDP, la "Bible" des moddeurs, qui recense tous les fichiers des jeux (BG, BG2, IWD, PsT, EE), leur contenu et leur structure. Tu peux soit le consulter en ligne, soit le désarchiver sur ton DD (conseillé pour l'avoir sous la main en permanence).
Parmi ces derniers, dans l'onglet "Identifiers" (fichiers IDS), tu trouveras la liste des "Objets", c'est-à-dire la liste des objets auxquels les commandes de scripts s'appliquent.
Dans ton cas, il suffit de remplacer
Player1 par
LastSummonerOf(Myself) pour que ça fonctionne comme tu le souhaites.
Je vais regarder ça.
Par rapport à ce que tu m'as dit:"seul CHARNAME peut appeler un animal", ca veut dire que peu importe le script, la créature ne suivra jamais que CHARNAME, personne d'autre?
Posté : ven. 19 mai 2017, 17:34
par Freddy_Gwendo
Ça signifie :
1. Que seul CHARNAME peut appeler un animal (à condition d'être druide ou rôdeur).
2. L'animal n'obéit qu'à CHARNAME, donc ne suit que lui (ou elle).
Posté : sam. 20 mai 2017, 08:54
par Cocrane
Salut Faust,
je n'ai pas lu en détail tous les échanges mais voici le code que j'ai pour qu'un Golem me suive gentillement. Chaque action est liée à un ordre (via un clic bouton capacité spéciale)
Il suit toujours le CHARNAME, à voir si ça peut t'aider. Pour la distance, à tester avec le mot RANGE(PERSONNAGE,DISTANCE).
IF
GLOBAL("suis","GLOBAL",1)
THEN
RESPONSE #100
MoveToObjectFollow(PLAYER1)
continue()
END
Tu peux faire tourner un TIMER pour lancer un test régulier sur la distance et tester si la créature reste sur place ou si elle avance car pas à bonne distance.
Il y a p.e plus simple mais MoveToObjectFollow, pour ma part, avait tendance à tourner en boucle et le Golem collait le CHARNAME.
Cocrane
Posté : sam. 20 mai 2017, 10:38
par Faust
Freddy_Gwendo a écrit :Normal, seul CHARNAME peut appeler un animal.
Si ce n'est déjà fait, je te conseille de télécharger
IESDP, la "Bible" des moddeurs, qui recense tous les fichiers des jeux (BG, BG2, IWD, PsT, EE), leur contenu et leur structure. Tu peux soit le consulter en ligne, soit le désarchiver sur ton DD (conseillé pour l'avoir sous la main en permanence).
Parmi ces derniers, dans l'onglet "Identifiers" (fichiers IDS), tu trouveras la liste des "Objets", c'est-à-dire la liste des objets auxquels les commandes de scripts s'appliquent.
Dans ton cas, il suffit de remplacer
Player1 par
LastSummonerOf(Myself) pour que ça fonctionne comme tu le souhaites.
J'ai essayé de changer Player1 par LastSummonerOf(Myself) mais une fois sauvegardé et que je recharge mon script, celui-ci est changé en ([PC.GENERAL_ITEM.HUMAN])
Cocrane a écrit :Salut Faust,
je n'ai pas lu en détail tous les échanges mais voici le code que j'ai pour qu'un Golem me suive gentillement. Chaque action est liée à un ordre (via un clic bouton capacité spéciale)
Il suit toujours le CHARNAME, à voir si ça peut t'aider. Pour la distance, à tester avec le mot RANGE(PERSONNAGE,DISTANCE).
Tu peux faire tourner un TIMER pour lancer un test régulier sur la distance et tester si la créature reste sur place ou si elle avance car pas à bonne distance.
Il y a p.e plus simple mais MoveToObjectFollow, pour ma part, avait tendance à tourner en boucle et le Golem collait le CHARNAME.
Cocrane
Merci pour ton aide Cocrane.
J'essaye de faire en sorte que mon invocation suive le personnage qui l'a invoquée et non pas CHARNAME (dans le background de mon personnage la créature est liée à lui et non pas à CHARNAME).
Lorsque j'utilise ton script ma créature reste immobile
Posté : sam. 20 mai 2017, 10:44
par Freddy_Gwendo
Petite question en passant : comment modifies-tu et sauvegardes-tu ton script ? Quel utilitaire utilises-tu ?
Posté : sam. 20 mai 2017, 10:50
par Faust
Freddy_Gwendo a écrit :Petite question en passant : comment modifies-tu et sauvegardes-tu ton script ? Quel utilitaire utilises-tu ?
J'ai essayé avec DLCTEP et Near Infinity. Infinity Script Editor me donne une erreur lorsque je le lance.
Posté : sam. 20 mai 2017, 12:09
par Freddy_Gwendo
Il faut que tu décompresses le fichier bcs (script compilé et lu par le jeu) en fichier baf (script "brut" non compilé, qui n'est pas reconnu par le jeu), que tu effectues tes modifs dans le fichier baf, que tu sauvegardes tes modifications dans le fichier baf, et enfin que tu compiles le fichier baf en fichier bcs.
Posté : sam. 20 mai 2017, 14:50
par Faust
Freddy_Gwendo a écrit :Il faut que tu décompresses le fichier bcs (script compilé et lu par le jeu) en fichier baf (script "brut" non compilé, qui n'est pas reconnu par le jeu), que tu effectues tes modifs dans le fichier baf, que tu sauvegardes tes modifications dans le fichier baf, et enfin que tu compiles le fichier baf en fichier bcs.
Malheureusement ça ne change rien, le Script source se sauvegarde bien, il reste le même après l'avoir réouvert, mais après conversion je me retrouve avec le même problème, voici le résultat après conversion:
IF
!TimerExpired(1)
See([PC])
!Range([PC],4)
THEN
RESPONSE #100
MoveToObject([PC])
END
au lieu de:
IF
See(LastSummonerof(Myself))
!Range(LastSummonerof(Myself),4)
THEN
RESPONSE #100
MoveToObject(LastSummonerof(Myself))
END
Posté : sam. 20 mai 2017, 16:17
par Freddy_Gwendo
Et avec LastSummoner
Of ? Le respect de la casse est primordial.
Posté : sam. 20 mai 2017, 17:01
par Faust
Freddy_Gwendo a écrit :Et avec LastSummoner
Of ? Le respect de la casse est primordial.
Malheureusement j'ai le même résultat:
IF
See([PC.GENERAL_ITEM.HUMAN])
!Range([PC.GENERAL_ITEM.HUMAN],4)
THEN
RESPONSE #100
MoveToObject([PC.GENERAL_ITEM.HUMAN])
END
au lieu de:
IF
See(LastSummonerOf(Myself))
!Range(LastSummonerOf(Myself),4)
THEN
RESPONSE #100
MoveToObject(LastSummonerOf(Myself))
END
C'est entièrement ma faute, je faisais à moitié les choses avec Near Infinity et le reste avec DLTCEP, du coup ça ne marchait pas. Vraiment tout faire avec Near Infinity et ça marche parfaitement.
DLTCEP ne retranscrit pas correctement les modifications de scripts. Avec DLTCEP ma créature venait même à m'attaquer au lieu de l'ennemi si je venais à changer son comportement fasse aux ennemis.
Merci Messieurs pour votre précieuse aide.
Posté : sam. 20 mai 2017, 17:21
par Freddy_Gwendo
Avant de résoudre ton problème de création de fichiers
*, essaie ceci : GWEssai a été créé avec WeiDU, GWEssai2 avec NI.
* : je subodore soit un mauvais paramétrage de DLTCEP, soit une mauvaise utilisation de NI, soit une installation olé olé...
Édit : tant pis, je viens de voir que tu as modifié ton message précédent.
Posté : sam. 20 mai 2017, 18:08
par Faust
Freddy_Gwendo a écrit :Avant de résoudre ton problème de création de fichiers
*, essaie ceci : GWEssai a été créé avec WeiDU, GWEssai2 avec NI.
* : je subodore soit un mauvais paramétrage de DLTCEP, soit une mauvaise utilisation de NI, soit une installation olé olé...
Édit : tant pis, je viens de voir que tu as modifié ton message précédent.
Un grand merci Freddy pour ta patience et ta précieuse aide.
Posté : sam. 20 mai 2017, 19:47
par Faust
Freddy_Gwendo a écrit :Avant de résoudre ton problème de création de fichiers
*, essaie ceci : GWEssai a été créé avec WeiDU, GWEssai2 avec NI.
* : je subodore soit un mauvais paramétrage de DLTCEP, soit une mauvaise utilisation de NI, soit une installation olé olé...
Édit : tant pis, je viens de voir que tu as modifié ton message précédent.
Par curiosité, est-il possible d'adapter la commande MoveToObject à un personnage qui a un nom spécifique? Par exemple si je veux qu'une personne invoque une créature qui suive uniquement une autre personne qui n'est pas CHARNAME? Y à t'il un moyen que la créature suive le personnage parce qu'il s'appelle Imoen ou Minsc? Ou parce qu'il y a un objet qu'un personnage possède dans son inventaire? Ou encore parce qu'il a une classe spécifique?
MoveToObject fait entrer la créature en colission avec le personnage qu'elle suit.
MoveToObjectFollow permet de garder une distance entre la créature et le personnage qu'elle suit, ce qui empêche la collision.
IF
Die()
THEN
RESPONSE #100
ReallyForceSpellDead(Myself,ILLUSION_DEATH)
DestroySelf()
END
Permet de faire disparaître la créature comme une invocation lorsqu'elle meurt.