La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 22/09/2024 12:39:58


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
N'kälhäash
Novice
Inscrit le: 12 Avr 2003
Messages: 12
Répondre en citant
Posté le : 12/04/2003 21:57:09 Sujet du message : Une baliste qui cast une bdf

Bonjour Very Happy
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 ...

Surprised
d'avance merci Very Happy
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Taern
Ecuyer
Inscrit le: 11 Avr 2003
Messages: 45
Localisation: 92
Répondre en citant
Posté le : 13/04/2003 01:11:57 Sujet du message :

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 Very Happy )

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 Smile

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 Laughing Laughing ) :
http://membres.lycos.fr/theolivierguyot/Catapulte%20!.mod

Voilà, j'ai testé ça de fond en comble, tout devrais bien aller Smile

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 Razz

Ouf, j'ai fini Cool Cool

[EDIT : beurk je scripte comme un goret Confused ]

[EDIT 2 : rajout de petites précisions, merci Dark Schneider Wink ]
Dernière édition par Taern le 24/04/2003 15:33:16; édité 1 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Numéro ICQ Ignorer l'utilisateur
 
N'kälhäash
Novice
Inscrit le: 12 Avr 2003
Messages: 12
Répondre en citant
Posté le : 13/04/2003 01:47:46 Sujet du message :

erf ................ Surprised

*Hallucine totale*

*clik sur "voir plus de smiley" mais rien ne ce passe*

Merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii!!!!!!!!!!!!!!!! *smack* *smack*

Very Happy Very Happy Very Happy Very Happy Very Happy Very Happy
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
N'kälhäash
Novice
Inscrit le: 12 Avr 2003
Messages: 12
Répondre en citant
Posté le : 13/04/2003 02:26:29 Sujet du message :

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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Taern
Ecuyer
Inscrit le: 11 Avr 2003
Messages: 45
Localisation: 92
Répondre en citant
Posté le : 13/04/2003 10:57:17 Sujet du message :

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 Cool
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Numéro ICQ Ignorer l'utilisateur
 
N'kälhäash
Novice
Inscrit le: 12 Avr 2003
Messages: 12
Répondre en citant
Posté le : 13/04/2003 14:32:12 Sujet du message :

si mais attention je crois qu'il faut qu'un certain bCHEAT soit sur true quelque part .....
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Taern
Ecuyer
Inscrit le: 11 Avr 2003
Messages: 45
Localisation: 92
Répondre en citant
Posté le : 13/04/2003 17:20:28 Sujet du message :

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 Confused
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Numéro ICQ Ignorer l'utilisateur
 
Dark Schneider
Ecuyer
Inscrit le: 22 Avr 2003
Messages: 47
Localisation: Belgique
Répondre en citant
Posté le : 22/04/2003 18:06:23 Sujet du message :

C'est super votre truc j'aime , mais j'arrive pas a avoir l'effet de trace Surprised
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur MSN Messenger Ignorer l'utilisateur
 
N'kälhäash
Novice
Inscrit le: 12 Avr 2003
Messages: 12
Répondre en citant
Posté le : 22/04/2003 22:35:15 Sujet du message :

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 !
}



Very Happy voila
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Dark Schneider
Ecuyer
Inscrit le: 22 Avr 2003
Messages: 47
Localisation: Belgique
Répondre en citant
Posté le : 24/04/2003 02:03:20 Sujet du message :


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
///////////////////////////////
tu fais deux script différent mais tu les places tout les deux dans OnClosed c'est normal ? Razz
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur MSN Messenger Ignorer l'utilisateur
 
Taern
Ecuyer
Inscrit le: 11 Avr 2003
Messages: 45
Localisation: 92
Répondre en citant
Posté le : 24/04/2003 15:27:09 Sujet du message :

Hola mais c'est tout à fait exact ça Shocked Shocked j'ai pu les yeux en face des trous, et en plus personne ne s'est plaint Very Happy

Non en réalité le dernier script se place dans le champ "actions conséquentes" du dialogue (quand on choisit de faire feu, évidemment Razz)

Merci pour la précision, je corrige de suite Smile (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 Voir le profil de l'utilisateur Envoyer un message privé Numéro ICQ Ignorer l'utilisateur
 
xelone
Acolyte
Inscrit le: 21 Aoû 2003
Messages: 39
Répondre en citant
Posté le : 26/01/2004 20:24:50 Sujet du message :

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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
k0rvet
Ecuyer
Inscrit le: 24 Nov 2003
Messages: 67
Répondre en citant
Posté le : 27/01/2004 10:59:38 Sujet du message :

*débarque*

Bon, j'ai lu un peu en diagonale tout ca alors je vais peut être sortir une bêtise Embarassed

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 () */
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Voila, pas testé, je te laisse le soin de le faire Very Happy
_________________
Moi j'dis ca, mais bon j'dis rien hein?
..:: Les Chroniques de la Terre du Milieu ::..
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
Keuwl
Voyageur
Inscrit le: 12 Fév 2004
Messages: 1
Répondre en citant
Posté le : 12/02/2004 00:30:52 Sujet du message :

*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 Laughing
J'ai tout bien fais comme indique , mais maintenant j'aimerais rajouter la gestion des degats Embarassed 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 Embarassed
Mici d'avance !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Montrer les messages depuis :
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


Sauter vers:
FAQ | Rechercher | Liste des Membres | Groupes d'utilisateurs | S'enregistrer | Profil | Se connecter pour vérifier ses messages privés | Connexion
Powered by phpBB 2.* [m] © 2001, 2002 phpBB Group
Theme rewritten in beautiful XHTML code by Baldurien.
Thème "La Bibliothèque de Neverwinter" crée par Kruger
Traduction par : phpBB-fr.com
Page generated in 49.362ms