Baldur's Gate et Dragon Age | La Couronne de Cuivre
 

Précédent   Baldur's Gate et Dragon Age | La Couronne de Cuivre > La Forge de GrondMarteau > La Forge des Apprentis > Problèmes Techniques

Problèmes Techniques
Un problème technique lors de la création d'un mod? Exposez votre probleme et les membres vous aideront de leur mieux.

Réponse
 
Outils de la discussion Noter la discussion
Vieux 29/10/2004, 16h00   #1
Sous Nain
Invités
 
Messages: n/a
Par défaut

Bon, je sais que le problème a déjà été évoqué, mais j'ai déjà lu les thread correspondants et ça ne résoud pas mon problème pour autant. Donc en un mot comme en cent : help !

Voici le code que je rajoute au script de l'area (et ce n'est pas une question d'extend_bottom foireux, je rajoute aussi des CreateCreature qui fonctionnent très bien) :

Code:
IF
 *G("deja_fait", 0)
 *Exist([ENEMY])
THEN
 *RESPONSE #100
 * *ActionOverride([ENEMY], DestroySelf())
END

IF
 *G("deja_fait", 0)
THEN
 *RESPONSE #100
 * *SG("deja_fait", 1)
END
Donc pour résumer, le but est de supprimer toutes les créatures ennemies présentes dans l'area la premiere fois qu'on y rentre.
Et le script ci-dessus ne fait rien du tout. J'ai essayé sans la condition Exist en demandant la destruction de 4 ou 5 enemy puis le SG("deja_fait", 1), ça ne marche pas mieux. J'ai aussi essayé avec des Kill([ENEMY]), nada.
A croire que je n'arrive pas à accéder aux enemies par [ENEMY]. Je pensais utilise le nom de death variable, mais malheureusement, les créatures que je souhaite supprimer n'en ont pas (semble-t-il, apres vérification avec NI).

Donc je me demande ce qui foire et pourquoi... ?
  Réponse avec citation
Vieux 29/10/2004, 16h26   #2
Walar, Patricien de Melandis
Berserker Ogre
 
Avatar de Walar
 
Date d'inscription: avril 2003
Messages: 986
Par défaut

Tu pourrais juste expliquer plus précisément la situation, avec quels ennemis et où si possible ?

Je ne suis plus trop dans le bain, il faut que je m'y remette sérieusement. Cependant j'avais eu un problème similaire, et j'ai ramé pour trouver une solution, mais ça a marché. Je ne crois pas que ce soit la technique la plus simple, en plus j'avais des problèmes car la zone n'avait pas de script propre.

Cependant si tes ennemis ont un script unique tu peux faire beaucoup plus simple en leur allouant mon tout premier point (ci-dessous).

Je te cite mon message : (copier-coller)

Comment effacer un personnage qui a un script général ou n'en a pas...

Pour complèter un peu le sujet de comment effacer un personnage, je voulais récemment enlever deux roturiers dans une maison du district du pont. Le problème est que l'on ne peut pas simplement faire un nouveau script et le rajoutter à celui qu'ils ont actuellement car tous les roturiers ont le même (en fait ils en ont même 3 de scripts... :..: )...

Donc si je mettais "DestroySelf()", tous les roturiers du jeu y seraient passés... :omg:

Alors, j'ai tout d'abord créé un nouveau script, que je nommerais V#BRAT1 par exemple (c'est un fichier .baf contenant) : (petite précision le PNJ que je voulais éliminer se nommais "BRAT1").

Citation:
IF
* Global("V#BRAT1","GLOBAL",0)
* !Dead("BRAT1")
THEN
* RESPONSE #100
* * SetGlobal("V#BRAT1","GLOBAL",1)
* * DestroySelf()
END
Jusque ici c'est relativement simple. Ensuite pour allouer le script au PNJ il faut utiliser la commande WeiDU : WRITE_ASCII

Voilà ce que donne ce passage dans mon fichier .tp2 :

Citation:
COMPILE ~WALAANPC\V#BRAT1.baf~
COPY_EXISTING ~BRAT1.cre~ ~override\BRAT1.cre~
WRITE_ASCII ~0x250~ ~V#BRAT1~
WRITE_BYTE 0x257 0x00
(Ca peut sembler barbare au premier abord mais je vais tâcher d'expliquer)

Citation:
COMPILE ~WALAANPC\V#BRAT1.baf~
Pas trop de problème sur ce point la, cela sert juste à compiler le script dans le jeu.

Citation:
COPY_EXISTING ~BRAT1.cre~ ~override\BRAT1.cre~
Pour pouvoir effectuer la modification sur le fichier, il faut que l'original soit dans le dossier override. Cette commande relativement facile à comprendre le permet.

Citation:
WRITE_ASCII ~0x250~ ~V#BRAT1~
La ça se complique un petit peu. WRITE_ASCII va permettre de modifier certaines données du fichier .cre dans ce cas. le 0x250 indique l'endroit du fichier où je veux que la modification soit effectuée. Et ensuite vous reconnaissez le nom du nouveau script à ajoutter.

Citation:
WRITE_BYTE 0x257 0x00
On pourrait penser que la procédure s'arrête à la phase précédente mais un méchant problème fait que WeiDU rajoute un "caractère" à la fin de la ligne de script modifiée dans le fichier .cre Donc pour éviter cela il faut soit :
1) Utiliser un éditeur hexadécimal pour rajouter un 0 à la fin de V#BRAT1 (directement)
2) Soit utiliser cette commande qui le rajoute par l'intermédiaire de WeiDU et donc élimine le caractère parasite.
Le 0x257 est l'endroit où cela doit être ajouté (à la fin de V#BRAT1) qui fait 7 lettres.

Et voilà, lorsque vous entrez dans la map concernée, le bonhomme disparait.


Donc, j'espère que ça peut t'aider.
Walar est déconnecté   Réponse avec citation
Vieux 29/10/2004, 18h29   #3
Sous Nain
Invités
 
Messages: n/a
Par défaut

Si j'ai bien suivi sur IESDP, Dead() attends un nom de death variable, non ?
Car justement les créatures que je veux supprimer ont pour death variable : NONE... ce qui n'est pas très classe, si ?
Bon en tout cas, je suppose que je peux supprimer toutes les créature de ce type du jeu car en effet, on en trouve pas beaucoup.

Bon, pour donner plus d'infos :

SPOILER :
Citation:
La zone que j'essaye de "nettoyer" est le pocket plane d'Irenicus. D'ailleurs j'aurais aussi à nettoyer les donjon complet met je verrais ça plus tard, je suppose que c'est du même tonneau.
Ensuite, les seuls créatures présentes sont des méphites. J'ai essayé d'ailleurs mon script avec des [0.0.MEPHIT] mais sans plus de résultats.
Sinon je veux bien essayer ta méthode mais j'avoue ne pas comprendre, en fait je ne sais pas trop ce que tu appele "nom" (le BRAT1), est-ce une death variable ? Le nom du .cre ?
  Réponse avec citation
Vieux 29/10/2004, 18h47   #4
Walar, Patricien de Melandis
Berserker Ogre
 
Avatar de Walar
 
Date d'inscription: avril 2003
Messages: 986
Par défaut

Mais ces créatures possèdent un script qui leur est propre ou non ? Je parle d'un script de combat, qui va dicter leurs actions etc. Le gros problème que j'ai eu est que le script était commun à tous les roturiers du jeu (attention, j'ai l'impression que tu confonds script et death variable). Et donc j'ai dû créé de nouveaux scripts spécialement pour eux et les allouer aux personnages. Si tu n'as pas ce problème tu n'auras pas besoin de te compliquer la vie comme moi.

Si c'est le cas, il te suffit d'ajouter ceci au script :

Citation:
IF
* Global("xxx","GLOBAL",0)
* !Dead("NomDeLaCréature")
THEN
* RESPONSE #100
* * SetGlobal("xxx","GLOBAL",1)
* * DestroySelf()
END
Et il s'autodétruit.

Citation:
Car justement les créatures que je veux supprimer ont pour death variable : NONE
Je t'avoue que ça me surprend un peu mais bon, c'est étrange, j'avais compris que chaque créature devait avoir une death variable unique, enfin dans la méthode que je te propose ça n'a pas d'influence.


Citation:
Sinon je veux bien essayer ta méthode mais j'avoue ne pas comprendre, en fait je ne sais pas trop ce que tu appele "nom" (le BRAT1), est-ce une death variable ? Le nom du .cre ?
Comme je l'ai dit :

Citation:
Originally posted by Walar
(petite précision le PNJ que je voulais éliminer se nommait "BRAT1").
Cependant ce n'est pas assez précis en effet, c'est le nom de fichier de la créature (le nom du .cre si tu préfères). En fait il s'agissait d'un petit garçon.


Sinon, si je me souviens bien, il me semble qu'avec l'éditeur de zone (je me rappelle plus le nom du programme) on peut "vider" les cartes, mais moi je ne connais pas du tout ça.
Walar est déconnecté   Réponse avec citation
Vieux 29/10/2004, 19h11   #5
Sous Nain
Invités
 
Messages: n/a
Par défaut

En fait oui, il y a bien un script qui leur est propre, de ce coté là pas de problème (du coup il doit même pas y avoir besoin de changer de script, si ?)
Je vais essayer en tout cas, et j'espere que ça ne m'en éliminera pas trop...
  Réponse avec citation
Vieux 30/10/2004, 17h11   #6
Isaya, Adepte de Grondmarteau
Loup Vampirique
 
Date d'inscription: juillet 2003
Localisation: Plaisir
Messages: 1 868
Envoyer un message via MSN à Isaya
Par défaut

[ENEMY] ou [0.0.MEPHIT] ne servent à ma connaissance que comme "object" dans des triggers comme See([ENEMY]). Je ne pense pas que tu puisses les utiliser avec ActionOverride(). Je pense qu'il te faut effectivement utiliser une "death variable", désormais plus couramment appelée "script name" par les outils régulièrement mis à jour (DLTCEP, NI).
[ENEMY] ne fonctionne que si les créatures deviennent hostiles (cercle rouge), par conséquent, il ne fonctionnerait de toute façon que lorsque les créatures te verraient, ce qui aurait l'effet assez bizarre de les tuer à vue.

Les "death variable" ne sont pas toujours uniques. Tous les gobelins normaux ont la même, par exemple. L'intérêt de la "death variable" vient de la possibilité de personnifier des choses à partir de script (raison pour laquelle les gens l'appellent désormais plutôt "script name"). Ce n'est donc pas étonnant que beaucoup de créatures ne soient pas uniques de ce point de vue si aucun script n'a besoin de les identifier individuellement.
Au passage, "NONE" est un nom tout à fait valable. Ce n'est pas comme si la variable était vide. Ici il est toujours possible de s'en servir pour le script.

Si tu sais combien de créatures il y a, tu devrais plutôt utiliser une forme:
Code:
IF
 G("deja_fait", 0)
THEN
 RESPONSE #100
 * ActionOverride("NONE", DestroySelf())
... autant de fois que nécessaire
 * ActionOverride("NONE", DestroySelf())
 * SG("deja_fait", 1)
END
Ce serait plus rapide et éviterait de les éliminer un par un (chaque cycle de script prenant du temps, ça pourrait se voir).

Reste à savoir si le jeu sait se débrouiller avec le fait que le nom de script de plusieurs créatures que tu veux commander n'est pas unique...
Dans le cas contraire, utilise la méthode proposée par Walar. Tu peux aussi ajouter une vérification sur la présence dans la zone qui t'intéresse (avec AreaCheck("ARxxxx")) pour être sûr que ton ordre ne s'applique pas ailleurs.
Isaya est déconnecté   Réponse avec citation
Vieux 31/10/2004, 16h16   #7
Sous Nain
Invités
 
Messages: n/a
Par défaut

Ok merci, ça marche : le CheckArea était ce qui me manquait (j'ai du le rater dans IESDP :timide: ). En tout cas cette solution marche.
Cependant, la solution avec utilisation du "None" ne fait rien, ou peut-être que ça en tue qu'un... en tout cas ça ne tue pas toutes les créatures avec ce script name même si je met l'instruction le bon nombre de fois.

Voila !
  Réponse avec citation
Réponse

Liens sociaux

Tags
Aucune


Utilisateurs regardant la discussion actuelle : 1 (0 membre(s) et 1 invité(s))
 
Outils de la discussion
Noter la discussion
Noter la discussion:

Règles de messages
Vous pouvez créer de nouvelles discussions
Vous pouvez envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are non
Navigation rapide

Discussions similaires
Discussion Auteur Forum Réponses Dernier message
[BUG] AREA 0700 : la Promenade de Waukyne Venolas La Taverne d'Amkethran (Baldur's Gate 2) 3 30/11/2005 15h03
[BG]texte et area editing nal'ex Problèmes Techniques 3 03/09/2004 10h49

Merci de soutenir La Couronne de Cuivre et le Wiki consacré à Baldur's Gate et aux RPG
Fuseau horaire GMT +2. Il est actuellement 18h58.

Les forums La Sirène Rougissante, La Couronne de Cuivre, ainsi que les sites associés Le Portail du Web et Le Monde de Baldur's Gate sont protégés par le Code de la propriété littéraire et artistique. Baldur's Gate I (1998), Tales of the Sword Coast (1999), Baldur's Gate II (2000) Shadows of Amn, et Throne of Bhaal (2001) sont ©BioWare, licenses et distribution ©ATARI. Dungeons & Dragons material est ©Wizards of the Coast. NeverWinter Nights est un produit ©Bioware, licenses et distribution ©ATARI. DRAGON AGE © 2002-2007 BioWare Corp. Dragon Age, the Dragon Age logo, BioWare Corp., and the BioWare logo are trademarks of BioWare Corp. in the United States, Canada and other countries. All other trademarks are the property of their respective owners. All rights reserved.
Conformément à l'article 34 de la loi 78-17 du 6 janvier 1978 dite loi "Informatiques et Libertés" vous disposez d'un droit d'accès, de modification, de rectification et de suppression de vos données personnelles (déclaration CNIL en cours mai 2007). Pour faire valoir ce droit contactez nous en cliquant ici et en utilisant le formulaire à votre disposition


Édité par : vBulletin® version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.2.0 Tous droits réservés.
Version française #17 par l'association vBulletin francophone
Alapage Norton AV 2009 Warhammer

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184