Page 1 sur 2

Besoin d’un petit coup de main…

Posté : mar. 28 avr. 2020, 18:34
par Prof Errata
Bon, je sollicite ici les Couronniens qui s’y connaissent en matière de codage. Voilà, j’ai récemment traduit un petit mod de PPG, Ding0's Iron Modder 10, qui installe dans BG2 une rencontre entre un vampire et un Voleur de l’Ombre. Le problème est que ladite rencontre se déroule dans le cimetière d’Athkatla de nuit, or en aucun cas je ne souhaite y rencontrer la terrible Bodhi…J’ai effectué la tra-yfication et la traduction en français et me suis décidé à apporter des modifications : tout d’abord j’ai transféré la rencontre dans les Bas-Quartiers (AR0400) et j’ai modifié l’alignement du Voleur de l’Ombre (CM -> N). Or j’aurais besoin que quelqu’un m’aide pour placer la ligne d’écriture qui place la rencontre de nuit seulement, de 22h à 5h au Chapitre 2 seulement (cf le fichier ci-joint et_area.baf) . Ça ne doit pas être compliqué, mais j’ignore tout du codage à effectuer. J’ai demandé de l’aide sur le forum de G3 mais personne ne se présente pour m’aider.…Voilà en espérant être entendu, merci d’avance.

Posté : jeu. 30 avr. 2020, 15:39
par Klare
Alors, je suppose que tu maitrise un peu comment implanter des elements vu que tu traduis...

Pour ton projet au vu de mes modestes competences... je dirais

Il faut creer un script pour ajouter le NPC avec une variables que je connais pas encore, peut etre dans cette base de donnees :
https://gibberlings3.github.io/iesdp/sc ... ctions.htm

Le script serait dans AR0400.baf

// Generation du NPC ///////////////////////////////////
IF //
Global("NPCSPWN","GLOBAL",0) //Variable pour eviter le pop en boucle
//Ici une contrainte d'horaire = nuit... j'en ai pas trouvé
Global("Chapter","GLOBAL",%bg2_chapter_2%)//Ici la contrainte de chapitre, enfin je crois que c'est celle ci.
THEN //
RESPONSE #100 //
SetGlobal("NPCSPWN","GLOBAL",1) //
Wait(2) //
CreateCreature("NOMDUNPCEN.CRE",[481.182],13) //Coordonnee a voir selon tes envies
END

Posté : jeu. 30 avr. 2020, 16:57
par Prof Errata
Cher Klare, merci pour ton intervention. Bon, de mon côté je patine, tout ce codage est pour moi de l’hébreu…ou presque…je ne m’y retrouve pas. Aussi je pense qu’il y a un mod qui pourrais nous aider : Zalnoya and the Shadow Thieves. qui de plus a été traduit dans notre langue; si ça peut rendre service. Ce dont j’ai besoin de savoir est l’activation du mod de nuit, c’est tout. Et encore merci pour ton coup de main. J’espère voir le bout du tunnel, enfin…

Posté : jeu. 30 avr. 2020, 17:35
par Klare
Je pense avoir un code utilisable, a tester, je commente un peu pour t'aider a y voir clair

Code : Tout sélectionner

// Generation du NPC ///////////////////////////////////
IF                                                                  //Lance les conditions
Global("NPCSPWN","GLOBAL",0)                            //Variable pour que le NPC ne pop qu'une fois
TimeOfDay(Night)                                             // La condition d'horaire.
Global("Chapter","GLOBAL",%bg2_chapter_2%)      //Ici la contrainte de chapitre, enfin je crois que c'est celle ci.
THEN                                                            // lance la creation
RESPONSE #100                                              // Ce bout... bah il sert a ne pas crasher mon Weidu.
SetGlobal("NPCSPWN","GLOBAL",1)                      // La variable change pour que le NPC ne pop qu'une fois
Wait(2)                                                          // Ce bout... bah il sert a ne pas crasher mon Weidu.
CreateCreature("NOMDUNPCEN.CRE",[481.182],13) //Cette commande creer le NPC.
END                                                              // FIN
////////////////////////////////////////////////////////// 
Il faut juste que tu mette le bon nom pour le .cre du NPC qui doit apparaitre.

Ce code doit etre placé dans Area0500.baf dans les fichier de ton mod.
Si ca n'existe pas, il faut le creer et ajouter une ligne dans Weidu

Posté : jeu. 30 avr. 2020, 17:49
par Prof Errata
je crois qu’on commence à voir le bout du tinnel…penses-tu que la seule spécification de "nuit" suffirait ?

Posté : jeu. 30 avr. 2020, 18:20
par Klare
En theorie on peut remplacer (NIGHT) par (HEURE,HEURE) d'apres la Bdd. mais je n'ai jamais utiliser cette condition.

Posté : jeu. 30 avr. 2020, 19:13
par Prof Errata
mmh…après un essai, pas d’apparition. Faudrait-il transformer la ligne suivante ?
GlobalGT("Deactivate0801","AR0400",0)

Posté : jeu. 30 avr. 2020, 19:41
par Klare
Deja Weidu a pas planter, je te dirais que chez moi c'est un bon signe.

Avant de regarder ailleurs, tu peux me montrer ce que donne le bloc que j'ai proposé une fois dans ton mod ?

Posté : jeu. 30 avr. 2020, 20:15
par Prof Errata
Voyons voir…pourrais-tu clarifier et étendre tes lignes de codes s’il te plait ? car il y a 2 personnages qui apparaissent dans AR0400 de nuit seulement.

Posté : jeu. 30 avr. 2020, 22:36
par Prof Errata
Ça y est ! bon, j’ai fini par trouver, ça venait du tp2 qui activait le mod depuis la zone ar0800.bcs et non la zone ar0400.bcs. J’ai un peu de réécriture à effectuer, je vous en reparlerais dans quelque temps.

EXTEND_TOP ~ar0400.bcs~ ~d0im10/et_area.baf~

Posté : ven. 01 mai 2020, 01:22
par Prof Errata
un problème résolu, les 2 protagonistes - le vampire et le voleur de l’ombre - font leur apparition. Mais un vampire de jour, là ça ne colle plus ! Aussi j’interpelle toutes les bonnes âmes de la Couronne pour que le script reçoive - enfin ! - la ligne définitive qui active la rencontre, disons vers minuit dans AR0400. En vous remerciant par avance.

IF
Global("D0IM10","GLOBAL",0)
GlobalLT("chapter","GLOBAL",2)

THEN

Posté : ven. 01 mai 2020, 09:24
par rivvers
Bonjour Prof Errata,

voici ce que je te propose :

IF
Global("D0IM10","GLOBAL",0)
Global("chapter","GLOBAL",2) // s'active seulement au chapitre 2
TimeGT(DUSK_END) // s'active après le coucher de soleil,environ 22h
TimeLT(DAWN_START) // s'active avant le lever de soleil, environ 5h
THEN

pour la restriction de la map, si cela est possible, le mieux est de mettre ce script dans celui la map concernée ou rajouter la condition : AreaCheck("AR0400")

Posté : ven. 01 mai 2020, 16:32
par Prof Errata
cher Rivvers, merci pour ton intervention. Bon, j’ai placé tes 2 lignes de code supplémentaires, réinstallé le tout et là rien n’y fait, la rencontre ne se fait pas ! Rageant ! Apparemment la solution doit être toute simple, encore faut-il connaître le codage exact…donc je vais voir par la suite…

Posté : ven. 01 mai 2020, 17:03
par rivvers
En réalité, si tu regardes d'un peu plus près, j'ai non seulement rajouté deux lignes mais j'en ai également modifié une troisième qui me semblait erronée, peut-être l'origine de ton problème vient-il de celle-ci ?
Courage à toi

Posté : ven. 01 mai 2020, 17:20
par Prof Errata
bon, j’ai regardé attentivement les lignes et de code vu qu’en effet l’une d’elles a été modifiée, j’ai donc réinstallé le tout…toujours rien ! bref je pense que ça doit être simple, je pense qu’il faudrait simplement placer la rencontre vers minuit/AR0400, sans tenir compte de l’intervalle dusk/dawn. À voir donc. Et encore merci pour ton aide.

Posté : ven. 01 mai 2020, 17:45
par rivvers
Etrange, le script est sensé s'activer s'il est entre 22h et 5h du matin au chapitre 2.

Pour forcer le changement d'horaire, tu pourras utiliser la fonction DayNight(MIDNIGHT) (à mettre après le THEN)

Posté : ven. 01 mai 2020, 18:04
par Prof Errata
Comme ça ?

IF
Global("D0IM10","GLOBAL",0)
Global("chapter","GLOBAL",2)
TimeGT(DUSK_END) // s'active après le coucher de soleil,environ 22h
TimeLT(DAWN_START) // s'active avant le lever de soleil, environ 5h
THEN
RESPONSE #100
DayNight(MIDNIGHT)
SetGlobal("D0IM10","GLOBAL",1)
CreateCreature("d0im10th",[710.2745],3)
CreateCreature("d0im10va",[655.2920],9)
Continue()
END


IF
GlobalLT("D0IM10","GLOBAL",10)
!GlobalLT("chapter","GLOBAL",3)
THEN
RESPONSE #100
SetGlobal("D0IM10","GLOBAL",10)
ActionOverride("d0im10va",DestroySelf())
ActionOverride("d0im10th",DestroySelf())
Continue()
END

Posté : ven. 01 mai 2020, 20:20
par rivvers
Les conditions d'horaires ne sont plus nécessaires vu que le temps avancera automatiquement à minuit (ce qui me paraît peu RP).

IF
Global("D0IM10","GLOBAL",0)
Global("chapter","GLOBAL",2)
THEN
RESPONSE #100
DayNight(MIDNIGHT)
SetGlobal("D0IM10","GLOBAL",1)
CreateCreature("d0im10th",[710.2745],3)
CreateCreature("d0im10va",[655.2920],9)
Continue()
END


IF
GlobalLT("D0IM10","GLOBAL",10)
!GlobalLT("chapter","GLOBAL",3)
THEN
RESPONSE #100
SetGlobal("D0IM10","GLOBAL",10)
ActionOverride("d0im10va",DestroySelf())
ActionOverride("d0im10th",DestroySelf())
Continue()
END

Posté : ven. 01 mai 2020, 20:47
par Prof Errata
bon, j’ai effectué un essai, l’horaire se cale sur minuit et donc la rencontre se fait, en revanche si on place la rencontre de jour - CTRL T - le vampire est toujours là…il se pourrait donc que ton codage soit la moins mauvaise solution donc dans l’immédiat, sachant que ledit codage force la rencontre de nuit donc; au début du chapitre 2 après la rencontre avec Gaelan Bayle on est au jour 1 vers 14h dans les Bas-Quartiers, peut être trouvera-t-on une solution en calant d’emblée la sortie de la Promenade de Waukyne - Chapitre 1 - vers un rajout de +8h donc ce qui fait qu’on est à 22/23 h au jour 1. À tester donc. On verra ça demain, et merci mille fois pour ton aide.

Posté : ven. 01 mai 2020, 21:27
par Isaya
Modifier l'heure dans le jeu est probablement une bêtise. Outre l'effet difficile à appréhender pour le joueur (typiquement il se balade en ville, donc temps de trajet 0, l'heure ne devrait pas changer), cela peut aussi casser des quêtes à base de timer car cela fait avancer le temps, potentiellement de 23h si tu arrives à 1h du matin.
Pour les quêtes du jeu, on voit que les auteurs ne se sont pas préoccupés de la vraisemblance d'un PNJ qui passerait tout sa nuit à attendre que tu viennes ou, dans BG, du fait que la lettre annonçant la cérémonie au palais ducal pour le soir-même ne t'empêche absolument pas de dormir si tu as besoin de récupérer après les combats au Trône de fer. Bref, tu peux tout à fait modifier "ça se passe à minuit" par "ça se passe la nuit", à mon avis.

Si tu veux que le vampire disparaisse dans la journée, ajoute une condition dans un script que tu lui attribues ou dans le script de zone si la condition pour le faire apparaître est déjà remplie, qui le fasse disparaître en dehors des horaires de présence et réapparaître lorsque l'heure est bonne. Tu peux utiliser les actions Deactivate et Activate : cf. IESDP
125 Deactivate(O:Object*)
This action deactivates the target creature. The creature remains in the area, but is removed from play - i.e. it is invisible and cannot be interacted with.

126 Activate(O:Object*)
This action activates the target creature. The creature is returned to play - i.e. it is visible and can be interacted with.

Posté : ven. 01 mai 2020, 22:28
par Prof Errata
cher Isaya, notre Grand Manitou de la CdC, je crois enfin qu’on tient le bon bout enfin. Si je comprends bien, il faut donc rajouter en tout 4 lignes de code, 2 qui placent les désactivations des 2 protagonistes - le Voleur de l’Ombre et le vampire - dans la zone AR0400 de 6h à 21h et 2 autres qui les remettent en route une fois la nuit tombée de 22h à 5h. Bon, on verra ça demain. Et merci encore !

Posté : sam. 02 mai 2020, 06:20
par rivvers
Bon matin Prof Errata,

tu as bien compris, de plus l'idée d'Isaya d'utiliser les fonctions Activate/Desactivate est propre,
j'ai compris mon erreur sur les 3 lignes que je t'ai proposé, un ordinateur ne comprend pas que 23h d'un jour puisse être "inférieur" à 2h :

Code : Tout sélectionner

IF
Global("D0IM10","GLOBAL",0)
Global("chapter","GLOBAL",2) // s'active seulement au chapitre 2
OR(2)
TimeGT(DUSK_END) // s'active après le coucher de soleil,environ 22h
TimeLT(DAWN_START) // s'active avant le lever de soleil, environ 5h
THEN
SetGlobal("D0IM10","GLOBAL",1)
// + CreateCreature

Posté : sam. 02 mai 2020, 17:17
par Prof Errata
ÇA MARCHE ! Enfin ce satané problème est résolu une fois pour toutes, les 2 protagonistes apparaissent la nuit tombée dans les Bas-Quartiers. Bon, une chose de fait, je vais poursuivre à présent sur d’autres travaux. Merci à toi rivvers, maintenant je suis tranquille pour un bon moment. Et je n’oublie pas bien sûr Klare et Isaya qui sont intervenus de façon opportune pour m’assister.
Tiens, tant que j’y suis, justement rivvers quelles sont exactement tes connaissances dans l’Infinity Engine ?

Posté : sam. 02 mai 2020, 22:00
par Prof Errata
Bon, les choses rentrent en ordre. Mais pour finir j’aurais besoin d’un ultime script, cosmétique celui-là : lors du choix des 2 langues disponibles - français/anglais - les noms des 2 protagonistes apparaîssent en français dans les dialogues, même dans la VO, ce qui est incongru. Aussi j’aimerais bien connaître le script exact qui modifie les noms en fonction des langues présentes (dans le registre tp2 ?) , ainsi :
VO Fledgling Vampire -> VF Vampire novice
VO Shadow Thief -> VF Voleur de l’Ombre
Voilà ce sera tout… Et merci encore.

Posté : sam. 02 mai 2020, 22:36
par Klare
Je pense que ca vient du nom attribué aux .cre
Donc, dans le weidu, lors de l'integration des NPC au jeu, tu choisis leur "nom".
Ce qui doit etre modifiable via le fichier de traduction du SETUP

Posté : sam. 02 mai 2020, 22:50
par Prof Errata
Justement, j’aimerais bien savoir comment on procède. je joins ici le setup.tra du répertoire /french qui apparemment sert pour l’installation. Modifier la ligne @-1043= "Anglais" ?

Posté : sam. 02 mai 2020, 22:57
par Klare
C'est pas dans le fichier tra, mais dans le tp2 qu'on trouvera la reponse je pense.

Posté : sam. 02 mai 2020, 23:29
par Prof Errata
mmh…comment procéder alors ? dans ce passage-là ?

LANGUAGE ~English~
~english~
~d0im10/lang/english/setup.tra~

Posté : dim. 03 mai 2020, 05:26
par Freddy_Gwendo
De deux choses l'une :

1. Soit tu assignes le nom de la créature par tp2, et tu utilises un fichier tra pour cela. Il faut donc fournir un tra en anglais et demander à l'utilisateur de choisir la langue en début d'installation.
2. Soit le nom de la créature est hardcodé (le string est déjà présent dans le fichier .cre que tu installes). Dans ce cas, ce nom sera décliné selon la langue du jeu.

Pour des raisons de compatibilité, je te conseille fortement de créer un fichier tra reprenant le nom des créatures. Et s'il existe déjà dans le fichier dialog.tlk, alors WeiDU utilisera automatiquement la référence existante.

Posté : dim. 03 mai 2020, 16:36
par Prof Errata
Cher Freddy, merci pour ta réponse. Bon je suis partant pour la solution 1. Mais comment code-t-on le tp2 exactement ? Et dois-je mettre les noms en VO/anglais dans le répertoire english/setup.tra que je joins ici ? Là je sèche…