Page 1 sur 1

[SCRIPT] Créature donne un objet si non possédé

Posté : jeu. 27 juil. 2017, 21:12
par Faust
Bonsoir,

Je cherche un script ordonnant à une créature (ou via un sort) de créer un objet dans l'inventaire d'un personnage, de manière invisible, si le groupe ne le possède pas (principalement pour le passage à BG2), ceci à partir du moment où l'objet n'est pas là (ou alors un script qui vérifie en permanence si un slot bien précis est libre ou non).

Dans l'idéal j'aimerais ne pas avoir un ajouter un script à un fichiers du jeu (le fichier ARxxxx de la zone de départ pour être précis).

Actuellement j'utilise ce script pour donner un objet à mon personnage:

IF
See(LastSummonerOf(Myself))
PartyHasItem("SCALER") // Ecailles de Dragon rouge
PartyHasItem("EL1") // Arme liée magique d'Elrin
THEN
RESPONSE #100
MoveToObject(LastSummonerOf(Myself))
UseItem("EL[F]SC",LastSummonerOf(Myself)) // Ecailles rayonnantes du Dragon Rouge
END

Le problème c'est qu'ici la condition est d'avoir un objet pour obtenir le second, or au début de BG2 le groupe n'a plus rien sur lui.

Ca aurait plus simple d'avoir un script du genre "PartyHasnoItem("")" mais malheureusement ça n'existe pas. :'(

Posté : jeu. 27 juil. 2017, 21:36
par Freddy_Gwendo
Ceci devrait t'aider :

Code : Tout sélectionner

140 [color="#FFFF00"]GiveItemCreate(S:ResRef*,O:Object*,I:Usage1*,I:Usage2*,I:Usage3*)[/color]
This action creates the item specified by the resref parameter on the creature specified by the object parameter, with quantity/charges controlled by the usage parameters.
Je suppose que c'est EL[F]SC que tu veux donner. Alors utilise la condition !PartyHasItem("EL[F]SC").

Note : je suis sceptique quant à l'utilisation de [] dans des noms. Il peut y avoir des effets étranges lors de la compilation.

Posté : jeu. 27 juil. 2017, 22:43
par Faust
Freddy_Gwendo a écrit :Ceci devrait t'aider :

Code : Tout sélectionner

140 [color=#ffff00]GiveItemCreate(S:ResRef*,O:Object*,I:Usage1*,I:Usage2*,I:Usage3*)[/color]
This action creates the item specified by the resref parameter on the creature specified by the object parameter, with quantity/charges controlled by the usage parameters.
Je suppose que c'est EL[F]SC que tu veux donner. Alors utilise la condition !PartyHasItem("EL[F]SC").

Note : je suis sceptique quant à l'utilisation de [] dans des noms. Il peut y avoir des effets étranges lors de la compilation.
Salut Freddy, merci pour ton intervention.

Je souhaite donner automatiquement ("EL1") // Arme liée magique d'Elrin à mon personnage, car après le début de BG2 SOA, plus aucun personnage n'a d'objet dans l'inventaire.

J'aimerais savoir s'il existe un script qui détecte l'absence d'un objet précis, ou l'absence d'objet dans un slot, afin que mes objets définis pour mon personnage réapparaissent automatiquement dès lors que ceux-ci sont manquants.

Pour l'application du script je le ferais via une créature ou via un sort.

Concernant les parenthèses, pas eu de problème pour l'instant, j'ai compilé sous weidu et testé le kit ^^ .

Posté : jeu. 27 juil. 2017, 22:57
par Freddy_Gwendo
Tu peux rajouter ce bloc dans AR0602.BCS

Code : Tout sélectionner

IF
	AreaCheck("AR0602")
	!PartyHasItem("EL[F]S1")
	Delay(12)
	Global("TaVariable","AR0602",0)
THEN
	RESPONSE #100
		SetGlobal("TaVariable","AR0602",1)
		GiveItemCreate("EL[F]S1",Player1,1,1,1) // ou la DEATHVAR d'un PNJ
END
L'objet sera créé dans l'inventaire.

Tu peux aussi checker l'existence d'un objet dans un slot, mais pas un objet particulier :
0x40B2 HasItemSlot(O:Object*,I:Slot*SLOTS)
NT Returns true only if the specified object has an item in the specified slot. This trigger does not work for Melf's Minute Meteors.
Par ailleurs, comme c'est une épée et que les persos sont à poil, tu peux aussi ajouter cette action :
258 FillSlot(I:Slot*SLOTS)
This action will attempt to fill a slot in the active creature's inventory with the appropriate item type. Using FillSlot(SLOT_WEAPON) will look for any weapon in the inventory, and move the first such item into the weapon slot. Any item already in the slot is destroyed.

Posté : ven. 28 juil. 2017, 19:27
par Faust
Freddy_Gwendo a écrit :Tu peux rajouter ce bloc dans AR0602.BCS

Code : Tout sélectionner

IF
    AreaCheck("AR0602")
    !PartyHasItem("EL[F]S1")
    Delay(12)
    Global("TaVariable","AR0602",0)
THEN
    RESPONSE #100
        SetGlobal("TaVariable","AR0602",1)
        GiveItemCreate("EL[F]S1",Player1,1,1,1) // ou la DEATHVAR d'un PNJ
END
L'objet sera créé dans l'inventaire.

Tu peux aussi checker l'existence d'un objet dans un slot, mais pas un objet particulier :



Par ailleurs, comme c'est une épée et que les persos sont à poil, tu peux aussi ajouter cette action :
J'ai suivi ton conseil et j'ai ajouté un script a AR0604 grâce à la commande

EXTEND_BOTTOM ~AR0602.BCS~

Voici le script que je trouvé et adapté:

IF
Global("TakeImportItems","AR0602",1)
Kit(Player2,ELRIN_DRAGOSH)
Global("Elrin_DragoshIsPlayer2","AR0602",0)
THEN
RESPONSE #100
ActionOverride(Player2,CreateItem("el[h]elm.itm",1,0,0)) // casque
ActionOverride(Player2,FillSlot(SLOT_HELMET))
SetGlobal("Elrin_DragoshIsPlayer2","AR0602",1)
END

Et je l'ai appliqué à chaque personnage comme ça l'objet est donné uniquement au personnage ayant le Kit.

Comme toujours Freddy, un grand merci!

Je remercie grandement deratiseur pour ses excellents kits et ses fichiers bien détaillés, ce qui facilite grandement le travail. :up: