La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
FAQ
Rechercher
Liste des Membres
Groupes d'utilisateurs
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
La date/heure actuelle est 23/11/2024 17:19:42
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
Voir le sujet précédent ¤ Voir le sujet suivant | |
---|---|
Auteur | Message |
N'kälhäash Novice Messages: 12 |
Bonjour
Je cherche a faire un script qui permettrait a une baliste de caster une boule de feu quand on clik dessus et que l'on met un objet spécial dedans ... d'avance merci |
Revenir en haut | |
Taern Ecuyer Messages: 45 Localisation: 92 |
Il en existe pleins dispos sur le net, mais je me suis dit : après tout, pourquoi pas se retrousser les manches ?(pour une fois )
Donc voilà un petit script pondu par moi, mais d'abord les prérequis : - un plaçable catapulte, éventuellement "intrigue" (plot) mais surtout utilisable et avec un inventaire; - un objet d'inventaire avec le tag : boulet - une conversation avec 2 choix possibles ("Feu" et "Partir"), affectée à la catapulte (propriétés de l'objet > avancé > dialogue) - un waypoint de tag catapulte_cible, qui représentera le centre de la zone de tir Ensuite, il y a 3 scripts à placer comme suit : A placer sur le OnDisturbed de la catapulte : Code : /////////////////////////////// //:: Catapulte : ON DISTURBED /////////////////////////////// //:: Cree par Taern /////////////////////////////// // On recherche ce qui est mis dans la catapulte, si c'est un boulet OK, sinon on rejette l'objet void main() { object oObjet = GetInventoryDisturbItem(); // Objet qui a modifie l'inventaire de la catpulte (ajoute ou enleve) object oPJ = GetLastDisturbed(); // Personne qui a agit sur le sus dit objet (le PJ en fait) string sTag = GetTag(oObjet); int nBouletPresent = GetLocalInt(OBJECT_SELF, "boulet_present"); // Si la variable est a TRUE, alors il y a deja un boulet dans la catapulte if(sTag != "boulet" || nBouletPresent) // Si l'objet rajoute n'est pas un boulet OU si il y a deja un boulet ... { CopyObject(oObjet, GetStartingLocation(), oPJ); // on rend l'objet au PJ et on quitte DestroyObject(oObjet); // (la location precisee ici n'est pas prise en compte, mais il faut forcement en preciser une) return; } SetLocalInt(OBJECT_SELF, "boulet_present", TRUE); // On dit qu'il existe un boulet dans l'inventaire //Fin du script ! } A placer sur le OnClosed de la catapulte : Code : /////////////////////////////// //:: Catapulte : ON CLOSED /////////////////////////////// //:: Cree par Taern /////////////////////////////// // Si il y a un boulet dans la catapulte, alors on lance un dialogue pour proposer de tirer // Si y a rien on fait rien ! void main() { object oPJ = GetLastClosedBy(); int nBouletPresent = GetLocalInt(OBJECT_SELF, "boulet_present"); // Si la variable est a TRUE, alors il y a un boulet dans la catapulte if(nBouletPresent) // Si boulet il y a, on lance le dialogue ActionStartConversation(oPJ); // - Rem : le fichier de dialogue est celui de la catapulte par defaut // Fin du script ! } A placer sur l'action conséquente de la réplique "Feu" du dialogue avc la catapulte : Code : /////////////////////////////// //:: Catapulte : Feu ! (action conséquente) /////////////////////////////// //:: Cree par Taern /////////////////////////////// // Lancement d'une boule de feu (apres countdown :p) en direction du waypoint de tag "catapulte_cible" le plus proche // La fonction Decalage() permet de creer un decalage (cercle de rayon 10m par defaut) aleatoire par rapport a la cible location Decalage(location lLoc, float fRayon = 10.0) { vector vPos = GetPositionFromLocation(lLoc); float fR = IntToFloat(Random(100)+1)/100 * fRayon; //Definition des coordonnes polaires du nouveau point float fTheta = IntToFloat(Random(360)); vPos.x += fR*cos(fTheta); //Calcul des modifications faites aux coordonnes initiales vPos.y += fR*sin(fTheta); lLoc = Location(GetAreaFromLocation(lLoc), vPos, 0.0); //Redefinition de la location apres application du decalage return lLoc; } void main() { object oPJ = GetPCSpeaker(); //On récupère ici le PJ qui parle à la catapulte object oCible = GetNearestObjectByTag("catapulte_cible"); //Objet cible location lCible = Decalage(GetLocation(oCible)); //Cible a viser (apres decalage) DelayCommand(1.0, AssignCommand(oPJ, SpeakString("3.."))); //Decompte DelayCommand(3.0, AssignCommand(oPJ, SpeakString("2.."))); DelayCommand(5.0, AssignCommand(oPJ, SpeakString("1.."))); DelayCommand(7.0, AssignCommand(oPJ, SpeakString("FEU !"))); DelayCommand(6.5, AssignCommand(oPJ, PlayAnimation(ANIMATION_LOOPING_GET_LOW, 3.0, 1.0))); DelayCommand(7.5, SpeakString("Tchak !")); DelayCommand(9.0, ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_FIREBALL), lCible)); //Application de l'effet sur la cible DelayCommand(7.5, DestroyObject(GetFirstItemInInventory())); //Suppression du boulet DelayCommand(7.5, SetLocalInt(OBJECT_SELF, "boulet_present", FALSE)); //On laisse la place a un autre boulet // Fin du script ! } Voilà ! maintenant il ne reste plus qu'à placer la catapulte, la cible, mettre quelques boulets à disposition et enjoy Bon et puis comme je suis généreux, j'ai même prévu un petit mod de démo (ptain mais j'ai rien à faire moi ce soir ) : http://membres.lycos.fr/theolivierguyot/Catapulte%20!.mod Voilà, j'ai testé ça de fond en comble, tout devrais bien aller Par contre je dénote 2 limitations majeures à mon script : 1/ On ne voit pas la trajectoire de la boule de feu, juste son impact (mais je suis pas sûr que ce soit faisable, en tout cas pas trop envie de creuser) 2/ Pas moyen de faire bouger la catapulte, mais pareil j'ai pas tout testé et jen meurs pas d'envie Ouf, j'ai fini [EDIT : beurk je scripte comme un goret ] [EDIT 2 : rajout de petites précisions, merci Dark Schneider ] Dernière édition par Taern le 24/04/2003 15:33:16; édité 1 fois
|
Revenir en haut | |
N'kälhäash Novice Messages: 12 |
erf ................
*Hallucine totale* *clik sur "voir plus de smiley" mais rien ne ce passe* Merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii!!!!!!!!!!!!!!!! *smack* *smack* |
Revenir en haut | |
N'kälhäash Novice Messages: 12 |
Pour la trajectoire c juste que c pas ça :
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_FIREBALL), lCible)); qui faut mettre mais ça : ActionCastSpellAtLocation(SPELL_FIREBALL,lTarget,METAMAGIC_NONE,1,PROJECTILE_PATH_TYPE_BALLISTIC,1); ^^ en plus de voir la trajectoire , tu l'as en cloche avec la fonction ballistic (l'effet est génial ,surtout en camera hack) tu as meme 2 possibilité avec un TYPE_HIGH_BALLISTIC ^^ merci encore pour ton aide ......... *trop content* |
Revenir en haut | |
Taern Ecuyer Messages: 45 Localisation: 92 |
Woa super, j'avais même pas imaginé qu'un objet plaçable était capable de lancer une boule de feu !
Merci de l'info, et de rien pour le reste hein |
Revenir en haut | |
N'kälhäash Novice Messages: 12 |
si mais attention je crois qu'il faut qu'un certain bCHEAT soit sur true quelque part .....
|
Revenir en haut | |
Taern Ecuyer Messages: 45 Localisation: 92 |
Si tu utilise ActionCastSpell, alors oui il faut préciser (avec le paramètre bCheat) que le sort doit être lancé même si le lanceur n'en est pas en réalité capable.
Tu peux aussi utiliser ActionCastFakeSpell sans avoir à préciser bCheat, mais tu perd au passage les effets matériels du sorts et l'explosion finale |
Revenir en haut | |
Dark Schneider Ecuyer Messages: 47 Localisation: Belgique |
C'est super votre truc j'aime , mais j'arrive pas a avoir l'effet de trace
|
Revenir en haut | |
N'kälhäash Novice Messages: 12 |
Tu remplaces le dernier script par ça :
Code : ///////////////////////////////
//:: Catapulte : Feu ! /////////////////////////////// //:: Cree par Taern /////////////////////////////// // Lancement d'une boule de feu (apres countdown ) en direction du waypoint de tag "catapulte_cible" le plus proche // La fonction Decalage() permet de creer un decalage (cercle de rayon 10m par defaut) aleatoire par rapport a la cible location Decalage(location lLoc, float fRayon = 10.0) { vector vPos = GetPositionFromLocation(lLoc); float fR = IntToFloat(Random(100)+1)/100 * fRayon; //Definition des coordonnes polaires du nouveau point float fTheta = IntToFloat(Random(360)); vPos.x += fR*cos(fTheta); //Calcul des modifications faites aux coordonnes initiales vPos.y += fR*sin(fTheta); lLoc = Location(GetAreaFromLocation(lLoc), vPos, 0.0); //Redefinition de la location apres application du decalage return lLoc; } void main() { object oPJ = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC); //On considere que l'activateur est le PJ le plus proche (pour ne pas utiliser de variables locale) object oCible = GetNearestObjectByTag("catapulte_cible"); //Objet cible location lCible = Decalage(GetLocation(oCible)); //Cible a viser (apres decalage) DelayCommand(1.0, AssignCommand(oPJ, SpeakString("3.."))); //Decompte DelayCommand(3.0, AssignCommand(oPJ, SpeakString("2.."))); DelayCommand(5.0, AssignCommand(oPJ, SpeakString("1.."))); DelayCommand(7.0, AssignCommand(oPJ, SpeakString("FEU !"))); DelayCommand(6.5, AssignCommand(oPJ, PlayAnimation(ANIMATION_LOOPING_GET_LOW, 3.0, 1.0))); DelayCommand(7.5, SpeakString("Tchak !")); DelayCommand(9.0, ActionCastSpellAtLocation(SPELL_FIREBALL,lTarget,METAMAGIC_NONE,1,PROJECTILE_PATH_TYPE_BALLISTIC,1); //Application de l'effet sur la cible DelayCommand(7.5, DestroyObject(GetFirstItemInInventory())); //Suppression du boulet DelayCommand(7.5, SetLocalInt(OBJECT_SELF, "boulet_present", FALSE)); //On laisse la place a un autre boulet // Fin du script ! } voila |
Revenir en haut | |
Dark Schneider Ecuyer Messages: 47 Localisation: Belgique |
Taern a écrit : A placer sur le OnClosed de la catapulte : /////////////////////////////// //:: Catapulte : ON CLOSED /////////////////////////////// //:: Cree par Taern /////////////////////////////// A placer sur le OnClosed de la catapulte : [code] /////////////////////////////// //:: Catapulte : Feu ! /////////////////////////////// //:: Cree par Taern /////////////////////////////// |
Revenir en haut | |
Taern Ecuyer Messages: 45 Localisation: 92 |
Hola mais c'est tout à fait exact ça j'ai pu les yeux en face des trous, et en plus personne ne s'est plaint
Non en réalité le dernier script se place dans le champ "actions conséquentes" du dialogue (quand on choisit de faire feu, évidemment ) Merci pour la précision, je corrige de suite (plus une autre petite imprécision d'ailleurs, puisque j'ai omis de dire que le dialogue devait être affecté à la catapulte). |
Revenir en haut | |
xelone Acolyte Messages: 39 |
bonjour je remonte ce vieux post pour demander un truc en plus : si je veux mettre 3 WP cible, comment je fais pour que la catapulte choisisse aléatoirement entre les 3 ?
|
Revenir en haut | |
k0rvet Ecuyer Messages: 67 |
*débarque*
Bon, j'ai lu un peu en diagonale tout ca alors je vais peut être sortir une bêtise Pour envoyer aléatoirement la boule de feu sur une des trois cibles: - Crée 3 objets cibles nommés "CATAPULTE_CIBLE_1", "CATAPULTE_CIBLE_2" et "CATAPULTE_CIBLE_3" Voila la nouvelle tête du script: NWScript :
// Sur la base du script "Catapulte: Feu!" de Taern. // Lancement d'une boule de feu (apres countdown ) en direction du waypoint de tag "catapulte_cible" le plus proche // La fonction Decalage() permet de creer un decalage (cercle de rayon 10m par defaut) aleatoire par rapport a la cible location Decalage(location lLoc, float fRayon = 10.0) { vector vPos = GetPositionFromLocation(lLoc); float fR = IntToFloat(Random(100)+1)/100 * fRayon; //Definition des coordonnes polaires du nouveau point float fTheta = IntToFloat(Random(360)); vPos.x += fR*cos(fTheta); //Calcul des modifications faites aux coordonnes initiales vPos.y += fR*sin(fTheta); lLoc = Location(GetAreaFromLocation(lLoc), vPos, 0.0); //Redefinition de la location apres application du decalage return lLoc; } void main() { object oPJ = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC); //On considere que l'activateur est le PJ le plus proche (pour ne pas utiliser de variables locale) int nRand = Random(2)+1; string sCible = "CATAPULTE_CIBLE_"+IntToString(nRand); object oCible = GetNearestObjectByTag(sCible); //Objet cible location lCible = Decalage(GetLocation(oCible)); //Cible a viser (apres decalage) DelayCommand(1.0, AssignCommand(oPJ, SpeakString("3.."))); //Decompte DelayCommand(3.0, AssignCommand(oPJ, SpeakString("2.."))); DelayCommand(5.0, AssignCommand(oPJ, SpeakString("1.."))); DelayCommand(7.0, AssignCommand(oPJ, SpeakString("FEU !"))); DelayCommand(6.5, AssignCommand(oPJ, PlayAnimation(ANIMATION_LOOPING_GET_LOW, 3.0, 1.0))); DelayCommand(7.5, SpeakString("Tchak !")); DelayCommand(9.0, ActionCastSpellAtLocation(SPELL_FIREBALL,lTarget,METAMAGIC_NONE,1,PROJECTILE_PATH_TYPE_BALLISTIC,1); //Application de l'effet sur la cible DelayCommand(7.5, DestroyObject(GetFirstItemInInventory())); //Suppression du boulet DelayCommand(7.5, SetLocalInt(OBJECT_SELF, "boulet_present", FALSE)); //On laisse la place a un autre boulet // Fin du script ! } /* warning: 1 unclosed parenthesis () */ Voila, pas testé, je te laisse le soin de le faire _________________ Moi j'dis ca, mais bon j'dis rien hein? ..:: Les Chroniques de la Terre du Milieu ::.. |
Revenir en haut | |
Keuwl Voyageur Messages: 1 |
*tousse*
Hum tout d'abord , mon nom a moi c keuwl et comme tout newbz qui se respectent je tenais a vous feliciter pour votre forum qui m'a bcp aide . Alors moi je me suis lance dans la fabuleuse aventure du script et celui de la baliste me tient a coeur a vrai dire J'ai tout bien fais comme indique , mais maintenant j'aimerais rajouter la gestion des degats et comme je suis une veritable quiche en script je me demandais si une ame charitable pouvait me rendre ce tout petit petit service en m'indiquant la ligne à rajouter parceque j'ai bien essaye de mon cote , c'est pas tres concluant Mici d'avance ! |
Revenir en haut | |
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
Page 1 sur 1 ¤
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum