[SCRIPT] - Créature tuée donne objet au kit précis.
- Faust
- Adepte de Grondemarteau
- Loup noir
- Messages : 291
- Enregistré le : mer. 15 avr. 2009, 12:04
- Localisation : Wherever I may roam
- Statut : Hors ligne
[SCRIPT] - Créature tuée donne objet au kit précis.
.
Bonjour,
Encore une question de script aujourd'hui .
Je souhaiterais qu'à la mort d'une créature (dans le cas présent de chaque Dragon dans BG2) le personnage bénéficiant du Kit obtienne immédiatement un objet.
J'ai plusieurs morceaux de script mais j'ai ne sais pas trop comment les assembler pour donner le résultat désiré.
Dois-je ajouter le script au monstre qui vérifiera les paramètres et les appliquera à sa mort?
IF
Die() // Firkraag meurt
Kit(Player1,ELRIN_DRAGOSH)
Global("Elrin_DragoshIsPlayer1","AR1203",0)
THEN
RESPONSE #100
ActionOverride(Player1,CreateItem("el[h]lm1.itm",1,0,0)) // casque
ActionOverride(Player1,FillSlot(SLOT_HELMET))
SetGlobal("Elrin_DragoshIsPlayer1","AR1203",1)
DestroySelf()
END
ou
Dois-je appliquer le script au fichier AREA où la créature réside, celui-ci pouvant vérifier que la créature est morte et donc donner l'item au personnage?
IF
? // script détectant la mort de Firkraag, est ce que ça a un rapport avec la DeathVariable? (Ici FIRKRA02)
Kit(Player1,ELRIN_DRAGOSH)
Global("Elrin_DragoshIsPlayer1","AR1203",0)
THEN
RESPONSE #100
ActionOverride(Player1,CreateItem("el[h]lm1.itm",1,0,0)) // casque
ActionOverride(Player1,FillSlot(SLOT_HELMET))
SetGlobal("Elrin_DragoshIsPlayer1","AR1203",1)
END
Est-ce nécessaire de créer une variable dans ce cas? Chaque Dragon n'est présent qu'une fois dans le jeu.
Merci à vous!
EDIT:
Le script Dead("FIRKRA02") est censé détécté la mort de Firkrag, mais rien ne se passe lorsque je l'utilise en script sur AREA1203.BCS
IF
Dead("FIRKRA02") // script détectant la mort de Firkraag,
Kit(Player1,ELRIN_DRAGOSH)
Global("Elrin_DragoshIsPlayer1","AR1203",0)
THEN
RESPONSE #100
Wait(1)
ActionOverride(Player1,CreateItem("el[h]lm1.itm",1,0,0)) // casque
ActionOverride(Player1,FillSlot(SLOT_HELMET))
SetGlobal("Elrin_DragoshIsPlayer1","AR1203",1)
END
EDIT 2:
Ca fonctionne comme je veux avec le SCRIPT suivant appliqué directement à la créature:
IF
Die()
Kit(Player1,ELRIN_DRAGOSH)
PartyHasItem("EL1")
THEN
RESPONSE #100
TakePartyItem("el[h]lmA") // No such index
DestroyItem("el[h]lmA") // No such index
ActionOverride(Player1,CreateItem("el[f]sc",1,0,0)) // casque
ActionOverride(Player1,FillSlot(SLOT_HELMET))
END
En revanche le SCRIPT ActionOverride(Player1,FillSlot(SLOT_HELMET)) ne fonctionne pas parfaitement, si un objet est déjà dans l'emplacement pour les casques, l'objet créer avec le SCRIPT ActionOverride(Player1,CreateItem("el[f]sc",1,0,0)) restera dans une case de l'inventaire.
Le second problème que j'ai rencontré a été avec le SCRIPT ActionOverride(Player1,CreateItem("el[f]sc",1,0,0)), lors de mes tentatives, celui-ci n'a pas fonctionné avec mon épée ni avec mon bouclier. Il ce peut aussi que ce soit comme m'avait dit Freddy_Gwendo, à cause du nom de mes objets composés de [].
Je n'ai pas non plus réussi à faire fonctionner Le script lié au fichier AREA détectant la mort d'une créature: Dead("FIRKRA02").
Concernant le Script il a fallut que je l'ajoute tout en haut du Script de comportement des Dragons pour qu'il soit pris en compte lorsque les Dragons attaquent, sinon ceux-ci n'ont même pas le temps d'arriver jusqu'à la partie du script désiré.
Existe t'il un moyen de faire passer en priorité un script sans avoir à le mettre en premier dans le fichier de Script?
Encore une question de script aujourd'hui .
Je souhaiterais qu'à la mort d'une créature (dans le cas présent de chaque Dragon dans BG2) le personnage bénéficiant du Kit obtienne immédiatement un objet.
J'ai plusieurs morceaux de script mais j'ai ne sais pas trop comment les assembler pour donner le résultat désiré.
Dois-je ajouter le script au monstre qui vérifiera les paramètres et les appliquera à sa mort?
IF
Die() // Firkraag meurt
Kit(Player1,ELRIN_DRAGOSH)
Global("Elrin_DragoshIsPlayer1","AR1203",0)
THEN
RESPONSE #100
ActionOverride(Player1,CreateItem("el[h]lm1.itm",1,0,0)) // casque
ActionOverride(Player1,FillSlot(SLOT_HELMET))
SetGlobal("Elrin_DragoshIsPlayer1","AR1203",1)
DestroySelf()
END
ou
Dois-je appliquer le script au fichier AREA où la créature réside, celui-ci pouvant vérifier que la créature est morte et donc donner l'item au personnage?
IF
? // script détectant la mort de Firkraag, est ce que ça a un rapport avec la DeathVariable? (Ici FIRKRA02)
Kit(Player1,ELRIN_DRAGOSH)
Global("Elrin_DragoshIsPlayer1","AR1203",0)
THEN
RESPONSE #100
ActionOverride(Player1,CreateItem("el[h]lm1.itm",1,0,0)) // casque
ActionOverride(Player1,FillSlot(SLOT_HELMET))
SetGlobal("Elrin_DragoshIsPlayer1","AR1203",1)
END
Est-ce nécessaire de créer une variable dans ce cas? Chaque Dragon n'est présent qu'une fois dans le jeu.
Merci à vous!
EDIT:
Le script Dead("FIRKRA02") est censé détécté la mort de Firkrag, mais rien ne se passe lorsque je l'utilise en script sur AREA1203.BCS
IF
Dead("FIRKRA02") // script détectant la mort de Firkraag,
Kit(Player1,ELRIN_DRAGOSH)
Global("Elrin_DragoshIsPlayer1","AR1203",0)
THEN
RESPONSE #100
Wait(1)
ActionOverride(Player1,CreateItem("el[h]lm1.itm",1,0,0)) // casque
ActionOverride(Player1,FillSlot(SLOT_HELMET))
SetGlobal("Elrin_DragoshIsPlayer1","AR1203",1)
END
EDIT 2:
Ca fonctionne comme je veux avec le SCRIPT suivant appliqué directement à la créature:
IF
Die()
Kit(Player1,ELRIN_DRAGOSH)
PartyHasItem("EL1")
THEN
RESPONSE #100
TakePartyItem("el[h]lmA") // No such index
DestroyItem("el[h]lmA") // No such index
ActionOverride(Player1,CreateItem("el[f]sc",1,0,0)) // casque
ActionOverride(Player1,FillSlot(SLOT_HELMET))
END
En revanche le SCRIPT ActionOverride(Player1,FillSlot(SLOT_HELMET)) ne fonctionne pas parfaitement, si un objet est déjà dans l'emplacement pour les casques, l'objet créer avec le SCRIPT ActionOverride(Player1,CreateItem("el[f]sc",1,0,0)) restera dans une case de l'inventaire.
Le second problème que j'ai rencontré a été avec le SCRIPT ActionOverride(Player1,CreateItem("el[f]sc",1,0,0)), lors de mes tentatives, celui-ci n'a pas fonctionné avec mon épée ni avec mon bouclier. Il ce peut aussi que ce soit comme m'avait dit Freddy_Gwendo, à cause du nom de mes objets composés de [].
Je n'ai pas non plus réussi à faire fonctionner Le script lié au fichier AREA détectant la mort d'une créature: Dead("FIRKRA02").
Concernant le Script il a fallut que je l'ajoute tout en haut du Script de comportement des Dragons pour qu'il soit pris en compte lorsque les Dragons attaquent, sinon ceux-ci n'ont même pas le temps d'arriver jusqu'à la partie du script désiré.
Existe t'il un moyen de faire passer en priorité un script sans avoir à le mettre en premier dans le fichier de Script?
[h=6]"Wrath is the burden of those who haven't faith in humanity but there's no mean to avoid it. I guess it's my choice, just try to stand it."[/h]Wherever I May Roam.
- Faust
- Adepte de Grondemarteau
- Loup noir
- Messages : 291
- Enregistré le : mer. 15 avr. 2009, 12:04
- Localisation : Wherever I may roam
- Statut : Hors ligne
.
Bon je laisse tomber ça pour le moment, je n'arrive pas à faire fonctionner le script sur les AREA, le script qui est censé vérifier la mort d'une créature ne fonctionne pas chez moi, et le script que j'ai assigné à la créature lors de sa mort est trop long, du coup ça ne fonctionne pas (la créature doit supprimer un objet de l'inventaire du personnage ayant le kit ciblé, puis remettre un objet à la place, mais donne directement l'objet sans rien remplacer.)
Si quelqu'un à une idée.
Si quelqu'un à une idée.
[h=6]"Wrath is the burden of those who haven't faith in humanity but there's no mean to avoid it. I guess it's my choice, just try to stand it."[/h]Wherever I May Roam.
- Pélagie
- Adepte de Grondemarteau
- Ogre
- Messages : 209
- Enregistré le : dim. 18 juil. 2004, 15:55
- Localisation : In my wonderland
- Contact :
- Statut : Hors ligne
.
Je n'avais pas vu ton message. Je te réponds demain car là il est vraiment tard et je suis braindead.Faust a écrit :Bon je laisse tomber ça pour le moment, je n'arrive pas à faire fonctionner le script sur les AREA, le script qui est censé vérifier la mort d'une créature ne fonctionne pas chez moi, et le script que j'ai assigné à la créature lors de sa mort est trop long, du coup ça ne fonctionne pas (la créature doit supprimer un objet de l'inventaire du personnage ayant le kit ciblé, puis remettre un objet à la place, mais donne directement l'objet sans rien remplacer.)
Si quelqu'un à une idée.
Mais en gros: il existe une action pour remplacer un item par un autre: TakeItemReplace
De mémoire il fonctionne comme ça TakeItemReplace("NomDuNouvelObjet","NomDeLobjetADétruire","MecQuiVaRecupérerl'Objet")
Je l'ai testé et ça fonctionne.
Sinon, je te conseille de décomposer ton script
IF
Dead("Firkraag") // ou Dead(myself) si c'est son script
Global("FirkraagCreve","GLOBAL",0)
THEN
RESPONSE #100
SetGlobal("FirkraagCreve","GLOBAL",1)
Continue()
END
IF
Global("FirkraagCreve","GLOBAL",1)
AreaCheck("AR1203")
Kit(Player1,ELRIN_DRAGOSH)
PartyHasItem("TonItem")
THEN
RESPONSE #100
TakeItemReplace("X","Y",player1)
DisplayStringHead(Player1,~Vous avez reçu un objet~) //évidemment tu mets le string que tu veux ici
END
Par contre, à vérifier mais je pense que l'objet remplacé sera bien détruit.
Sinon, tu peux aussi jouer avec IF HasItemSlot("NomduMec",numéro du slot)
Bon, je reviens demain, voir si j'ai pas raconté trop de conneries XD Je répondrai aux autres questions.
EDIT: Bonjour! Alors, j'ai relu un peu plus attentivement
Si le script que j'ai proposé plus haut ne fonctionne pas avec Dead(myself), essaie avec Die(), mais dans ce cas n'oublie pas le continue(), sans quoi le deuxième bloc sera ignoré.
Le problème de FillSlot, c'est que le script prendra n'importe quel objet dans l'inventaire qui puisse être équipé dans ce slot. Tu as essayé ActionOverride(Player1,EquipItem("TonItem")? Je ne sais pas si ça marche, je n'ai jamais testé.
Le script Dead("FIRKRA02") est censé détécté la mort de Firkrag, mais rien ne se passe lorsque je l'utilise en script sur AREA1203.BCS
Bon, je ne suis pas du tout une pro en script de zone, mais je pense qu'il vaut mieux réserver les modifs de scripts de zone aux créations de creatures. J'utilise un trigger Dead dans un script de zone dans mon mod et ça fonctionne, mais c'est pour faire apparaitre une créature (après la mort de Mulahey). Donc oui, je pense qu'il vaut mieux affecter les scripts d'actions de creatures aux créatures.
Demi-elfe aquatique
Groupie de Bioware
Groupie de Bioware
- Faust
- Adepte de Grondemarteau
- Loup noir
- Messages : 291
- Enregistré le : mer. 15 avr. 2009, 12:04
- Localisation : Wherever I may roam
- Statut : Hors ligne
.
Merci pour ton intervention Pélagie, j'essaye ça de suitePélagie a écrit :Je n'avais pas vu ton message. Je te réponds demain car là il est vraiment tard et je suis braindead.
Mais en gros: il existe une action pour remplacer un item par un autre: TakeItemReplace
De mémoire il fonctionne comme ça TakeItemReplace("NomDuNouvelObjet","NomDeLobjetADétruire","MecQuiVaRecupérerl'Objet")
Je l'ai testé et ça fonctionne.
Sinon, je te conseille de décomposer ton script
IF
Dead("Firkraag") // ou Dead(myself) si c'est son script
Global("FirkraagCreve","GLOBAL",0)
THEN
RESPONSE #100
SetGlobal("FirkraagCreve","GLOBAL",1)
END
IF
Global("FirkraagCreve","GLOBAL",1)
AreaCheck("AR1203")
Kit(Player1,ELRIN_DRAGOSH)
PartyHasItem("TonItem")
THEN
RESPONSE #100
TakeItemReplace("X","Y",player1)
DisplayStringHead(Player1,~Vous avez reçu un objet~) //évidemment tu mets le string que tu veux ici
END
Par contre, à vérifier mais je pense que l'objet remplacé sera bien détruit.
Sinon, tu peux aussi jouer avec IF HasItemSlot("NomduMec",numéro du slot)
Bon, je reviens demain, voir si j'ai pas raconté trop de conneries XD Je répondrai aux autres questions.
EDIT: Bonjour! Alors, j'ai relu un peu plus attentivement
Le problème de FillSlot, c'est que le script prendra n'importe quel objet dans l'inventaire qui puisse être équipé dans ce slot. Tu as essayé ActionOverride(Player1,EquipItem("TonItem")? Je ne sais pas si ça marche, je n'ai jamais testé.
Bon, je ne suis pas du tout une pro en script de zone, mais je pense qu'il vaut mieux réserver les modifs de scripts de zone aux créations de creatures. J'utilise un trigger Dead dans un script de zone dans mon mod et ça fonctionne, mais c'est pour faire apparaitre une créature (après la mort de Mulahey). Donc oui, je pense qu'il vaut mieux affecter les scripts d'actions de creature aux créatures.
[/color]
EDIT:
IF
Dead("SHADRA01")
PartyHasItem("ELF")
Global("DragOmbreCreve","GLOBAL",0)
THEN
RESPONSE #100
SetGlobal("DragOmbreCreve","GLOBAL",1)
END
IF
Global("DragOmbreCreve","GLOBAL",1)
AreaCheck("AR1402")
Kit(Player1,ELRIN_DRAGOSH)
THEN
RESPONSE #100
TakeItemReplace("EL[SH]S2","EL[F]SC",player1)
SetGlobal("DragOmbreCreve","GLOBAL",0)
END
Ca marche parfaitement une fois appliqué à l'AREA, je vais voir si je peux l'appliquer à la créature.
Un grand merci à toi Pélagie
EDIT 2: Je confirme qu'à moins de pouvoir donner la priorité à un script dans un fichier BCS, je suis obligé de mettre le script au début du fichier BCS. Ce n'est pas grave, je vais passer par les fichiers AREA.BCS pour faire ce que je veux.
J'ai juste besoin de trouver la commande WEIDU pour ajouter un script à une AREA n'en ayant pas.
[h=6]"Wrath is the burden of those who haven't faith in humanity but there's no mean to avoid it. I guess it's my choice, just try to stand it."[/h]Wherever I May Roam.
- Pélagie
- Adepte de Grondemarteau
- Ogre
- Messages : 209
- Enregistré le : dim. 18 juil. 2004, 15:55
- Localisation : In my wonderland
- Contact :
- Statut : Hors ligne
.
Contente d'avoir pu t'aider.
Pourquoi ça te pose problème de mettre le script en début de fichier en fait? Ça bloque quelque-chose?
Sinon, tu as une commande pour ça, à mettre dans le Tp2:
EXTEND_top~LeScriptExistantEnJeu.bcs~ ~TonMod\CheminduFichier\TonScriptàRajouter.baf~
Sinon, pour l'AREA, tu es sûr qu'elle n'a pas de script??? Ça me semble étrange, une map sans script. Elle en a forcément une s'il y a des créature dessus, non? Attends, je vais vérifier.
EDIT: tu parles bien de l'area1402? Elle a bien un script. Ou de quelle area parles-tu?
Par contre, simple curiosité, pourquoi refixes-tu la variable "DragOmbreCreve" à 0 à la fin du script? J'ai peur que ça fasse retourner le premier bloc dans le vide (celui justement du switch de variable) quand tu te trouves sur la zone
Pourquoi ça te pose problème de mettre le script en début de fichier en fait? Ça bloque quelque-chose?
Sinon, tu as une commande pour ça, à mettre dans le Tp2:
EXTEND_top~LeScriptExistantEnJeu.bcs~ ~TonMod\CheminduFichier\TonScriptàRajouter.baf~
Sinon, pour l'AREA, tu es sûr qu'elle n'a pas de script??? Ça me semble étrange, une map sans script. Elle en a forcément une s'il y a des créature dessus, non? Attends, je vais vérifier.
EDIT: tu parles bien de l'area1402? Elle a bien un script. Ou de quelle area parles-tu?
Par contre, simple curiosité, pourquoi refixes-tu la variable "DragOmbreCreve" à 0 à la fin du script? J'ai peur que ça fasse retourner le premier bloc dans le vide (celui justement du switch de variable) quand tu te trouves sur la zone
Demi-elfe aquatique
Groupie de Bioware
Groupie de Bioware
- Faust
- Adepte de Grondemarteau
- Loup noir
- Messages : 291
- Enregistré le : mer. 15 avr. 2009, 12:04
- Localisation : Wherever I may roam
- Statut : Hors ligne
.
Ajouter un script en début de fichier ne me dérange pas, je vais essayer de modifier le script que tu m'as donné pour l'appliquer aux créatures, mais si ça ne fonctionne pas correctement car trop long, je veux ajouter le script à l'AREA concernée (AR1203 n'a pas de fichier BCS lié -> General, sur la droite SCRIPT NAME est vide, et je n'ai aucun fichier nommé AR1203.BCS).Pélagie a écrit :Contente d'avoir pu t'aider.
Pourquoi ça te pose problème de mettre le script en début de fichier en fait? Ça bloque quelque-chose?
Sinon, tu as une commande pour ça, à mettre dans le Tp2:
EXTEND_top~LeScriptExistantEnJeu.bcs~ ~TonMod\CheminduFichier\TonScriptàRajouter.baf~
Sinon, pour l'AREA, tu es sûr qu'elle n'a pas de script??? Ça me semble étrange, une map sans script. Elle en a forcément une s'il y a des créature dessus, non? Attends, je vais vérifier.
[h=6]"Wrath is the burden of those who haven't faith in humanity but there's no mean to avoid it. I guess it's my choice, just try to stand it."[/h]Wherever I May Roam.
- Pélagie
- Adepte de Grondemarteau
- Ogre
- Messages : 209
- Enregistré le : dim. 18 juil. 2004, 15:55
- Localisation : In my wonderland
- Contact :
- Statut : Hors ligne
.
AR1203 a bien un script AR1203.bcs chez moi (mais je suis sur BG2EE, il y a peut-être des différences avec ta version???):Faust a écrit :Ajouter un script en début de fichier ne me dérange pas, je vais essayer de modifier le script que tu m'as donné pour l'appliquer aux créatures, mais si ça ne fonctionne pas correctement car trop long, je veux ajouter le script à l'AREA concernée (AR1203 n'a pas de fichier BCS lié -> General, sur la droite SCRIPT NAME est vide, et je n'ai aucun fichier nommé AR1203.BCS).
IF
Dead("firkra02")
TriggerOverride("firkra02", NumTimesTalkedToGT(0))
Global("CloseFirkraagHimself","AR1203",0)
THEN
RESPONSE #100
EraseJournalEntry(15724)
AddJournalEntry(22917,QUEST_DONE)
SetGlobal("CloseFirkraagHimself","AR1203",1)
END
J'ai édité mon post précédent avec une autre question, tu n'as pas dû la voir, je te demandais pourquoi tu refixais ta variable à 0 à la fin de ton script
Demi-elfe aquatique
Groupie de Bioware
Groupie de Bioware
- Pélagie
- Adepte de Grondemarteau
- Ogre
- Messages : 209
- Enregistré le : dim. 18 juil. 2004, 15:55
- Localisation : In my wonderland
- Contact :
- Statut : Hors ligne
.
Sinon, pour affecter un script à une zone, tu fais comme ça dans le tp2:
Compile ~cheminDeTonScript~
puis,
COPY_EXISTING ~AR1203.are~ ~override~
WRITE_ASCII 0x248 ~TonScript~ #8
Mais vérifie vien que la zone en question n'a pas déjà de script, sinon le script de base ne tournera plus et ça risque de créer des complications.
Le problème aussi de cette commande (merci Freddy, si tu passes par là ) c'est que cela rendra ton mod incompatible avec les autres mods qui auront eux aussi affectés un script à cette zone.
Compile ~cheminDeTonScript~
puis,
COPY_EXISTING ~AR1203.are~ ~override~
WRITE_ASCII 0x248 ~TonScript~ #8
Mais vérifie vien que la zone en question n'a pas déjà de script, sinon le script de base ne tournera plus et ça risque de créer des complications.
Le problème aussi de cette commande (merci Freddy, si tu passes par là ) c'est que cela rendra ton mod incompatible avec les autres mods qui auront eux aussi affectés un script à cette zone.
Demi-elfe aquatique
Groupie de Bioware
Groupie de Bioware
- Faust
- Adepte de Grondemarteau
- Loup noir
- Messages : 291
- Enregistré le : mer. 15 avr. 2009, 12:04
- Localisation : Wherever I may roam
- Statut : Hors ligne
.
Pélagie a écrit :Contente d'avoir pu t'aider.
Pourquoi ça te pose problème de mettre le script en début de fichier en fait? Ça bloque quelque-chose?
Sinon, tu as une commande pour ça, à mettre dans le Tp2:
EXTEND_top~LeScriptExistantEnJeu.bcs~ ~TonMod\CheminduFichier\TonScriptàRajouter.baf~
Sinon, pour l'AREA, tu es sûr qu'elle n'a pas de script??? Ça me semble étrange, une map sans script. Elle en a forcément une s'il y a des créature dessus, non? Attends, je vais vérifier.
EDIT: tu parles bien de l'area1402? Elle a bien un script. Ou de quelle area parles-tu?
Par contre, simple curiosité, pourquoi refixes-tu la variable "DragOmbreCreve" à 0 à la fin du script? J'ai peur que ça fasse retourner le premier bloc dans le vide (celui justement du switch de variable) quand tu te trouves sur la zone
Ah, je suis sur BG2 Vanilla, c'est pour ça.Pélagie a écrit :AR1203 a bien un script AR1203.bcs chez moi (mais je suis sur BG2EE, il y a peut-être des différences avec ta version???):
IF
Dead("firkra02")
TriggerOverride("firkra02", NumTimesTalkedToGT(0))
Global("CloseFirkraagHimself","AR1203",0)
THEN
RESPONSE #100
EraseJournalEntry(15724)
AddJournalEntry(22917,QUEST_DONE)
SetGlobal("CloseFirkraagHimself","AR1203",1)
END
J'ai édité mon post précédent avec une autre question, tu n'as pas dû la voir, je te demandais pourquoi tu refixais ta variable à 0 à la fin de ton script
"DragOmbreCreve" à 0 à la fin du script car je continuais à recevoir l'objet sans fin dans l'inventaire.
Ce n'est pas vraiment un script de créature, actuellement je veux que le personnage ayant mon kit reçoive l'arme et les dons que lui procure la mort du Dragon.
Je viens d'essayer ce script sur dans le fichier BCS de Firkraag (DRAGRED.BCS):
IF
Die()
Kit(Player1,ELRIN_DRAGOSH)
PartyHasItem("el[h]lmA")
THEN
RESPONSE #100
TakeItemReplace("el[f]sc","el[h]lmA",Player1)
END
Mais rien ne se produit, en revanche avec:
IF
Die()
Kit(Player1,ELRIN_DRAGOSH)
PartyHasItem("EL1")
THEN
RESPONSE #100
TakePartyItem("el[h]lmA") // No such index
DestroyItem("el[h]lmA") // No such index
ActionOverride(Player1,CreateItem("el[f]sc",1,0,0)) // casque
ActionOverride(Player1,FillSlot(SLOT_HELMET))
END
Ca fonctionne. Le problème c'est que je veux que le monstre applique le script à tout les personnages, et qu'il y a un autre script avec d'autres conditions que je dois appliquer. Après avoir tout mis ça ne fonctionne pas correctement.
[h=6]"Wrath is the burden of those who haven't faith in humanity but there's no mean to avoid it. I guess it's my choice, just try to stand it."[/h]Wherever I May Roam.
- Faust
- Adepte de Grondemarteau
- Loup noir
- Messages : 291
- Enregistré le : mer. 15 avr. 2009, 12:04
- Localisation : Wherever I may roam
- Statut : Hors ligne
.
Oui c'est justement ce que je veux éviter de faire, dans l'ideal je touche pas au Fichier AREA, mais je lance le script EXTEND_BOTTOM si le script existe ou j'associe celui présent dans mon répertoire s'il n'existe pas dans le dossier BG2, mais je ne suis pas certains que ce soit possible.Pélagie a écrit :Sinon, pour affecter un script à une zone, tu fais comme ça dans le tp2:
Compile ~cheminDeTonScript~
puis,
COPY_EXISTING ~AR1203.are~ ~override~
WRITE_ASCII 0x248 ~TonScript~ #8
Mais vérifie vien que la zone en question n'a pas déjà de script, sinon le script de base ne tournera plus et ça risque de créer des complications.
Le problème aussi de cette commande (merci Freddy, si tu passes par là ) c'est que cela rendra ton mod incompatible avec les autres mods qui auront eux aussi affectés un script à cette zone.
[h=6]"Wrath is the burden of those who haven't faith in humanity but there's no mean to avoid it. I guess it's my choice, just try to stand it."[/h]Wherever I May Roam.
- Pélagie
- Adepte de Grondemarteau
- Ogre
- Messages : 209
- Enregistré le : dim. 18 juil. 2004, 15:55
- Localisation : In my wonderland
- Contact :
- Statut : Hors ligne
.
Je te conseille alors de passer la variable à 3, pour éviter que faire tourner le premier bloc dans le vide.Faust a écrit :Ah, je suis sur BG2 Vanilla, c'est pour ça.
"DragOmbreCreve" à 0 à la fin du script car je continuais à recevoir l'objet sans fin dans l'inventaire.
Kit([ANYONE],ELRIN_DRAGOSH), par contre du coup ça ne marchera qu'avec TakeItemReplace en action ensuiteLe problème c'est que je veux que le monstre applique le script à tout les personnages
Et pour rajouter un script à une zone qui n'en aurait pas, regarde mon post précédent, nos réponses se sont croisées
EDIT:
C'est justement ce que fait cette commande, elle associe un script à un fichier ARE, sans modifier l'are en question. Cependant, si un moddeur a la même idée (appliquer un script à la zone), le script du dernier mod des deux a avoir été installé prédominera sur l'autre.ou j'associe celui présent dans mon répertoire s'il n'existe pas dans le dossier BG2, mais je ne suis pas certains que ce soit possible.
'il y a un autre script avec d'autres conditions que je dois appliquer.
quel script supplémentaire veux-tu rajouter?
Demi-elfe aquatique
Groupie de Bioware
Groupie de Bioware
- Faust
- Adepte de Grondemarteau
- Loup noir
- Messages : 291
- Enregistré le : mer. 15 avr. 2009, 12:04
- Localisation : Wherever I may roam
- Statut : Hors ligne
.
Pélagie a écrit :Sinon, pour affecter un script à une zone, tu fais comme ça dans le tp2:
Compile ~cheminDeTonScript~
puis,
COPY_EXISTING ~AR1203.are~ ~override~
WRITE_ASCII 0x248 ~TonScript~ #8
Mais vérifie vien que la zone en question n'a pas déjà de script, sinon le script de base ne tournera plus et ça risque de créer des complications.
Le problème aussi de cette commande (merci Freddy, si tu passes par là ) c'est que cela rendra ton mod incompatible avec les autres mods qui auront eux aussi affectés un script à cette zone.
Pélagie a écrit :Je te conseille alors de passer la variable à 3, pour éviter que faire tourner le premier bloc dans le vide.
Kit([ANYONE],ELRIN_DRAGOSH), par contre du coup ça ne marchera qu'avec TakeItemReplace en action ensuite
Et pour rajouter un script à une zone qui n'en aurait pas, regarde mon post précédent, nos réponses se sont croisées
EDIT:
C'est justement ce que fait cette commande, elle associe un script à un fichier ARE, sans modifier l'are en question. Cependant, si un moddeur a la même idée (appliquer un script à la zone), le script du dernier mod des deux a avoir été installé prédominera sur l'autre.
quel script supplémentaire veux-tu rajouter?
Voici le script complet pour Firkraag:
► Afficher le texte
Dans BG2 il n'y a pas d'ordre pour tuer le Dragon D'ombre ou Firkraag, du coup il a fallu que je prenne ça en compte. En fonction de l'objet que possède le personnage ayant le kit, l'un des deux objets sera donné. Ca appliqué à tout les membres de l'équipe rend le script long.
Ah d'accord. Il doit bien exister une commande WEIDU qui permet d'appliquer une action en fonction de la présence d'un fichier.
Après Comme tu dis, le problème viendra alors du mod installé après le mien qui ne vérifie pas le présence d'un fichier
[h=6]"Wrath is the burden of those who haven't faith in humanity but there's no mean to avoid it. I guess it's my choice, just try to stand it."[/h]Wherever I May Roam.
- Pélagie
- Adepte de Grondemarteau
- Ogre
- Messages : 209
- Enregistré le : dim. 18 juil. 2004, 15:55
- Localisation : In my wonderland
- Contact :
- Statut : Hors ligne
.
Pour ne pas ralentir le script, tu as essayé de jouer avec les variables, en décomposant ton script?
IF
Dead("SHADRA01")
Global("DragOmbreCreve","GLOBAL",0)
PartyHasItem("TonItem1")
THEN
RESPONSE #100
SetGlobal("DragOmbreCreve","GLOBAL",1)
END
IF
Global("DragOmbreCreve","GLOBAL",1)
THEN
RESPONSE #100
Tes Actions pour remplacer l'objet 1
Puis tu refais pour les autres objets
IF
Dead("SHADRA01")
Global("DragOmbreCreve","GLOBAL",0)
PartyHasItem("TonItem2")
THEN
RESPONSE #100
SetGlobal("DragOmbreCreve","GLOBAL",2)
END
IF
Global("DragOmbreCreve","GLOBAL",2)
THEN
RESPONSE #100
Tes Actions pour remplacer l'objet 2
Sinon pour vérifier l'existence d'un fichier en jeu, dans le tp2:
ACTION_IF FILE_EXISTS_IN_GAME ~AR1203.bcs~ THEN BEGIN
tes actions... extend bottom et tout ça
BUT_ONLY_IF_IT_CHANGES
ou bien au contraire
ACTION_IF NOT FILE_EXISTS_IN_GAME ~AR1203.bcs~ THEN BEGIN
COPY_EXISTING ~AR1203.bcs~ ~override~
WRITE_ASCII 0x248 ~TonScript~ #8
Par contre, je ne suis pas DU TOUT une pro en fichier TP2, sur le sujet Freddy pourra t'aider beaucoup mieux que moi
IF
Dead("SHADRA01")
Global("DragOmbreCreve","GLOBAL",0)
PartyHasItem("TonItem1")
THEN
RESPONSE #100
SetGlobal("DragOmbreCreve","GLOBAL",1)
END
IF
Global("DragOmbreCreve","GLOBAL",1)
THEN
RESPONSE #100
Tes Actions pour remplacer l'objet 1
Puis tu refais pour les autres objets
IF
Dead("SHADRA01")
Global("DragOmbreCreve","GLOBAL",0)
PartyHasItem("TonItem2")
THEN
RESPONSE #100
SetGlobal("DragOmbreCreve","GLOBAL",2)
END
IF
Global("DragOmbreCreve","GLOBAL",2)
THEN
RESPONSE #100
Tes Actions pour remplacer l'objet 2
Sinon pour vérifier l'existence d'un fichier en jeu, dans le tp2:
ACTION_IF FILE_EXISTS_IN_GAME ~AR1203.bcs~ THEN BEGIN
tes actions... extend bottom et tout ça
BUT_ONLY_IF_IT_CHANGES
ou bien au contraire
ACTION_IF NOT FILE_EXISTS_IN_GAME ~AR1203.bcs~ THEN BEGIN
COPY_EXISTING ~AR1203.bcs~ ~override~
WRITE_ASCII 0x248 ~TonScript~ #8
Par contre, je ne suis pas DU TOUT une pro en fichier TP2, sur le sujet Freddy pourra t'aider beaucoup mieux que moi
Demi-elfe aquatique
Groupie de Bioware
Groupie de Bioware
- Faust
- Adepte de Grondemarteau
- Loup noir
- Messages : 291
- Enregistré le : mer. 15 avr. 2009, 12:04
- Localisation : Wherever I may roam
- Statut : Hors ligne
.
Merci pour le mal que tu te donnesPélagie a écrit :Pour ne pas ralentir le script, tu as essayé de jouer avec les variables, en décomposant ton script?
IF
Dead("SHADRA01")
Global("DragOmbreCreve","GLOBAL",0)
PartyHasItem("TonItem1")
THEN
RESPONSE #100
SetGlobal("DragOmbreCreve","GLOBAL",1)
END
IF
Global("DragOmbreCreve","GLOBAL",1)
THEN
RESPONSE #100
Tes Actions pour remplacer l'objet 1
Puis tu refais pour les autres objets
IF
Dead("SHADRA01")
Global("DragOmbreCreve","GLOBAL",0)
PartyHasItem("TonItem2")
THEN
RESPONSE #100
SetGlobal("DragOmbreCreve","GLOBAL",2)
END
IF
Global("DragOmbreCreve","GLOBAL",2)
THEN
RESPONSE #100
Tes Actions pour remplacer l'objet 2
Sinon pour vérifier l'existence d'un fichier en jeu, dans le tp2:
ACTION_IF FILE_EXISTS_IN_GAME ~AR1203.bcs~ THEN BEGIN
tes actions... extend bottom et tout ça
BUT_ONLY_IF_IT_CHANGES
ou bien au contraire
ACTION_IF NOT FILE_EXISTS_IN_GAME ~AR1203.bcs~ THEN BEGIN
COPY_EXISTING ~AR1203.bcs~ ~override~
WRITE_ASCII 0x248 ~TonScript~ #8
Par contre, je ne suis pas DU TOUT une pro en fichier TP2, sur le sujet Freddy pourra t'aider beaucoup mieux que moi
Je vais faire comme tu dis pour alléger le script.
Concernant l'application du script sur le fichier AR1203.ARE, même après avoir fait ce que tu m'as dit, DLTCEP indique toujours qu'aucun script n'est lié à la carte.
Est-il possible d'utiliser une Global Variable qui se déclenche à l'AREA précédente qui permet d'appliquer un script dans l'AREA suivante?
J'ai essayé en vain avec le script suivant à l'AR1202 à appliquer à l'AR1203:
IF
Global("Firkraagdead","GLOBAL",0)
Kit(Player1,ELRIN_DRAGOSH)
PartyHasItem("EL1")
THEN
RESPONSE #100
SetGlobal("Firkraagdead","GLOBAL",1)
END
IF
Global("Firkraagdead","GLOBAL",1)
AreaCheck("AR1203")
Dead("DRAGRED")
THEN
RESPONSE #100
TakeItemReplace("EL[F]SC","EL[H]LMA",Player1) // Ecailles rayonnantes du Dragon Rouge
SetGlobal("Firkraagdead","GLOBAL",3)
END
IF
Global("Firkraagdead","GLOBAL",0)
Kit(Player1,ELRIN_DRAGOSH)
PartyHasItem("ELD")
THEN
RESPONSE #100
SetGlobal("Firkraagdead","GLOBAL",1)
END
IF
Global("Firkraagdead","GLOBAL",1)
AreaCheck("AR1203")
Dead("DRAGRED")
THEN
RESPONSE #100
TakeItemReplace("EL[F]SC2","EL[SH]S",Player1) // Ecailles rayonnantes du Dragon Rouge
SetGlobal("Firkraagdead","GLOBAL",3)
END
[h=6]"Wrath is the burden of those who haven't faith in humanity but there's no mean to avoid it. I guess it's my choice, just try to stand it."[/h]Wherever I May Roam.
- Pélagie
- Adepte de Grondemarteau
- Ogre
- Messages : 209
- Enregistré le : dim. 18 juil. 2004, 15:55
- Localisation : In my wonderland
- Contact :
- Statut : Hors ligne
.
Ok, c'est normal que le script que je t'ai filé pour rajouter un script à la zone ne fonctionne pas, je t'ai donné un mauvais code.
0x248 c'est pour filer un override script à une créature
Essaie plutôt ça dans le Tp2:
COMPILE ~CheMinDeTonFichier\AR1203.baf~
COPY_EXISTING ~AR1203.are~ ~override\AR1203.are~
WRITE_ASCII 0x94 ~AR1203~
Et n'oublie pas de mettre ton préfixe avant les noms de ton script
0x248 c'est pour filer un override script à une créature
Essaie plutôt ça dans le Tp2:
COMPILE ~CheMinDeTonFichier\AR1203.baf~
COPY_EXISTING ~AR1203.are~ ~override\AR1203.are~
WRITE_ASCII 0x94 ~AR1203~
Et n'oublie pas de mettre ton préfixe avant les noms de ton script
Demi-elfe aquatique
Groupie de Bioware
Groupie de Bioware
- Faust
- Adepte de Grondemarteau
- Loup noir
- Messages : 291
- Enregistré le : mer. 15 avr. 2009, 12:04
- Localisation : Wherever I may roam
- Statut : Hors ligne
.
Ca à l'air de marcher pour Near Infinity, le script est lié à l'AREA:Pélagie a écrit :Ok, c'est normal que le script que je t'ai filé pour rajouter un script à la zone ne fonctionne pas, je t'ai donné un mauvais offset.
0x248 c'est pour filer un override script à une créature
Essaie plutôt ça dans le Tp2:
COMPILE ~CheMinDeTonFichier\AR1203.baf~
COPY_EXISTING ~AR1203.are~ ~override\AR1203.are~
WRITE_ASCII 0x94 ~AR1203~
Et n'oublie pas de mettre ton préfixe avant les noms de ton script
Merci beaucoup Pélagie!
[h=6]"Wrath is the burden of those who haven't faith in humanity but there's no mean to avoid it. I guess it's my choice, just try to stand it."[/h]Wherever I May Roam.
- Faust
- Adepte de Grondemarteau
- Loup noir
- Messages : 291
- Enregistré le : mer. 15 avr. 2009, 12:04
- Localisation : Wherever I may roam
- Statut : Hors ligne
.
De nouveau le même problème, pour la 2ème partie du script, l'objet est créé dans l'inventaire sans être mis au bon emplacement. L'objet devrait être placé dans le slot Helmet mais est mis dans la case la plus à gauche de l'inventaire.Pélagie a écrit :Super
Bon, essaie d'intégrer le script pour échanger l'item, teste-le, et dis-moi si ça marche
IF
Global("SHDWDRG[die]","GLOBAL",0)
Kit(Player1,ELRIN_DRAGOSH)
PartyHasItem("EL1") // Arme liée magique d'Elrin
THEN
RESPONSE #100
SetGlobal("SHDWDRG[die]","GLOBAL",1)
END
IF
Global("SHDWDRG[die]","GLOBAL",1)
AreaCheck("AR1402")
Dead("SHADRA01") // Thaxll'ssillyia
THEN
RESPONSE #100
TakeItemReplace("EL[SH]S","EL[H]LMA",Player1) // Ecailles rayonnantes du Dragon d'Ombre
SetGlobal("SHDWDRG[die]","GLOBAL",3)
END
IF
Global("SHDWDRG[die]","GLOBAL",0)
Kit(Player1,ELRIN_DRAGOSH)
PartyHasItem("EL[F]SC") // Arme liée magique d'Elrin
THEN
RESPONSE #100
SetGlobal("SHDWDRG[die]","GLOBAL",1)
END
IF
Global("SHDWDRG[die]","GLOBAL",1)
AreaCheck("AR1402")
Dead("SHADRA01") // Thaxll'ssillyia
THEN
RESPONSE #100
TakeItemReplace("EL[SH]S2","EL[F]SC",Player1) // Ecailles rayonnantes du Dragon d'Ombre
SetGlobal("SHDWDRG[die]","GLOBAL",3)
END
Peut importe quelle est la créature qui donne l'objet placé en deuxième partie du script, la même chose se passe:
IF
Global("FIRKRAAG[die]","GLOBAL",0)
Kit(Player1,ELRIN_DRAGOSH)
PartyHasItem("EL1") // Arme liée magique d'Elrin
THEN
RESPONSE #100
SetGlobal("FIRKRAAG[die]","GLOBAL",1)
END
IF
Global("FIRKRAAG[die]","GLOBAL",1)
AreaCheck("AR1203")
Dead("FIRKRA02") // Dragon rouge
THEN
RESPONSE #100
TakeItemReplace("EL[F]SC","EL[H]LMA",Player1) // Ecailles rayonnantes du Dragon Rouge
SetGlobal("FIRKRAAG[die]","GLOBAL",3)
END
IF
Global("FIRKRAAG[die]","GLOBAL",0)
Kit(Player1,ELRIN_DRAGOSH)
PartyHasItem("ELD") // Arme liée magique d'Elrin
THEN
RESPONSE #100
SetGlobal("FIRKRAAG[die]","GLOBAL",1)
END
IF
Global("FIRKRAAG[die]","GLOBAL",1)
AreaCheck("AR1203")
Dead("FIRKRA02") // Dragon rouge
THEN
RESPONSE #100
TakeItemReplace("EL[F]SC2","EL[SH]S",Player1) // Ecailles rayonnantes du Dragon Rouge
SetGlobal("FIRKRAAG[die]","GLOBAL",3)
END
Je vais réduire le nombre de caractère sur le nom des armes, peut-être ce à cause de ça. Il m'arrivait la même chose avec les sorts composés de 8 lettres, le sort restait dans ma barre de magie.
EDIT: Non, pas ça non plus.
[h=6]"Wrath is the burden of those who haven't faith in humanity but there's no mean to avoid it. I guess it's my choice, just try to stand it."[/h]Wherever I May Roam.
- Faust
- Adepte de Grondemarteau
- Loup noir
- Messages : 291
- Enregistré le : mer. 15 avr. 2009, 12:04
- Localisation : Wherever I may roam
- Statut : Hors ligne
.
Pélagie a écrit :Essaie peut-être
TakeItemReplace("EL[SH]S","EL[H]LMA",Player1)
ActionOverride(Player1,EquipItem("EL[SH]S")
Non plus :non:
EDIT: Trouvé!
Il faut changer le nom de la variable à chaque variable différente, malgré des objets différents, je gardais le même nom de variable. Par exemple pour avoir x objet il me fallait x + y et pour y objet il me fallait y + x, mais les deux variables différentes avaient le même nom. En changeant de nom pour ces deux différentes situations on remédie au conflit!
IF
Global("SHDWDRG[die]","GLOBAL",0)
Kit(Player1,ELRIN_DRAGOSH)
PartyHasItem("EL1") // Arme liée magique d'Elrin
THEN
RESPONSE #100
SetGlobal("SHDWDRG[die]","GLOBAL",1)
END
IF
Global("SHDWDRG[die]","GLOBAL",1)
AreaCheck("AR1402")
Dead("SHADRA01") // Thaxll'ssillyia
THEN
RESPONSE #100
TakeItemReplace("EL[SH]S","EL[H]LMA",Player1) // Ecailles rayonnantes du Dragon d'Ombre
SetGlobal("SHDWDRG[die]","GLOBAL",3)
END
IF
Global("SHDWDRG[die]","GLOBAL",0)
Kit(Player1,ELRIN_DRAGOSH)
PartyHasItem("EL[F]SC") // Arme liée magique d'Elrin
THEN
RESPONSE #100
SetGlobal("SHDWDRG[die]","GLOBAL",1)
END
IF
Global("SHDWDRG[die]","GLOBAL",1)
AreaCheck("AR1402")
Dead("SHADRA01") // Thaxll'ssillyia
THEN
RESPONSE #100
TakeItemReplace("EL[SH]S2","EL[F]SC",Player1) // Ecailles rayonnantes du Dragon d'Ombre
SetGlobal("SHDWDRG[die]","GLOBAL",3)
END
Voilà ce que ça donne après changement:
► Afficher le texte
Merci encore Pélagie!
[h=6]"Wrath is the burden of those who haven't faith in humanity but there's no mean to avoid it. I guess it's my choice, just try to stand it."[/h]Wherever I May Roam.
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité