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 18:35:37


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Télépathe
Novice
Inscrit le: 24 Juil 2004
Messages: 19
Répondre en citant
Posté le : 24/08/2004 16:07:14 Sujet du message : Lancer un objet

Bonjour à tous

Existe-t-il une fonction qui permet à un NPC de lancer un objet, style bombe incendiaire , sur une porte, par exemple .

Merci d'avance
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
SiDi_Revolucion
Ecuyer
Inscrit le: 18 Aoû 2004
Messages: 48
Localisation: Mince, un trou de mémoire! C'est bien en Espagne la Bretagne?
Répondre en citant
Posté le : 24/08/2004 18:54:21 Sujet du message :

Je pense que c'est possible de faire cà.

Je vais dire quoi faire à nos aimbles scripteurs pro. Smile

Dans le On-click de la porte, il s'agit de vérifier que le PJ possède la bombe incendiaire.
puis, et c'est là que j'ai besoin d'une GROSSE aide, lancer un dialogue si la bombe est présente:

Premier choix: lancer la bombe
Second choix : ouvrir la porte inteligemment sans tout détruire
Dernier choix: partir comme un ... Minsc Very Happy ( pour rester poli)

Alors il faudrait ensuite que le choix lancer la bombe imite le lancer de l'objet Bombe incendiaire et détruise la porte.

Sinon en plus simple tu peux simplement lancer la bombe incendiaire à côté de la porte qui sera alors détruite.

Et oui, la bombe incendiaire est considérée comme un sort à effet de zone.

A moins bien sur, que la porte soit en intrigue.

Allez bonne chance aux scripteurs! Very Happy Very Happy Very Happy

Ciao
_________________
SiDi_Revolucion
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
SiDi_Revolucion
Ecuyer
Inscrit le: 18 Aoû 2004
Messages: 48
Localisation: Mince, un trou de mémoire! C'est bien en Espagne la Bretagne?
Répondre en citant
Posté le : 24/08/2004 18:56:22 Sujet du message :

A ... mince j'avais pas vu qu'il s'agissait d'un NPC.

Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed Embarassed

Bon je retire tout ce que j'ai dit, mais ca pourra servir alors je laisse.

Donc, LAXAN AU SECOURS ! Very Happy

Ciao
_________________
SiDi_Revolucion
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
Konrad
Grand Maître Chanteur du Conseil
Inscrit le: 30 Sep 2002
Messages: 1258
Localisation: Empire d'Halöven
Répondre en citant
Posté le : 24/08/2004 22:29:41 Sujet du message : Re: Lancer un objet

Pour un NPC tout dépend de la condition qui vas faire que le perso lance la bombe.

Par exemple si c'est à l'approche d'un joueurs, tu mets un trigger sur le sol qui va déclancher un script qui va lancer une annimation sur le NPC simulant le lancer d'un objet puis 1 sec plutart, tu cré une explosion sur le porte et tu détruit la porte.

Dis comme ça sa peux sembler compliquer m'est c'est pas très dur.

Ce qu'il manque pour bien faire c'est le déclancheur. C'est quoi la condition ? Un dialogue ou autre ?
_________________
Le site du Module Dragon Noir
Le groupe du Module L5A - L'ombre et la Lumière
Crimson Skies
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Télépathe
Novice
Inscrit le: 24 Juil 2004
Messages: 19
Répondre en citant
Posté le : 25/08/2004 15:35:32 Sujet du message :

Bonjour à tous

Mes conditions sont :

Si un PC passe sur le Trigger, il déclenche l'apparition du NPC qui se déplace vers un Waypoint, lance la bombe incendiaire sur la porte et repart vers un autre waypoint avant de disparaître.

Je vais essayer d'inclure un effet d'explosion et que la porte soit détruite dans le script.
Dès que mon lecteur CD sera réparé, je testerais et donnerais des nouvelles.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Longbow
Grand Sage du Conseil
Inscrit le: 10 Déc 2003
Messages: 638
Localisation: Orléans
Répondre en citant
Posté le : 25/08/2004 17:38:13 Sujet du message :

Hum, hum...

Pardonnez-moi, mais je n'arrive pas à cerner la fonction pour lancer un objet de type bombe... Action??? de même pour l'Animation???

En épluchant l'éditeur, je n'ai rien trouvé, c'est à l'instar des sorts (ActionCastFakeSpellAtObject) ??
Merci d'avance pour vos lumières.
_________________
Rex illeteratus
Quasi Asinus Coronatus
Jean de Salisbury
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
lendraste
Grand Maître Chanteur du Conseil
Inscrit le: 20 Fév 2003
Messages: 1403
Localisation: Quelque part ailleurs
Répondre en citant
Posté le : 25/08/2004 18:46:15 Sujet du message :


Longbow a écrit :
Hum, hum...

Pardonnez-moi, mais je n'arrive pas à cerner la fonction pour lancer un objet de type bombe... Action??? de même pour l'Animation???

En épluchant l'éditeur, je n'ai rien trouvé, c'est à l'instar des sorts (ActionCastFakeSpellAtObject) ??
Merci d'avance pour vos lumières.
En utilisant ActionCastSpellAtLocation ou ActionCastSpellAtObject (je pense qu'il faut mettre le bCheat à TRUE) avec les constantes de sort parues dans HotU
744 pour une bombe de feu (je ne connais pas la constante chaine de caractère qui lui correspond, il suffit de chercher dans nwscript.nss)
745 pour une bombe d'acide.
L'effet visuel correspondant doit pouvoir être retrouvé à partir du script qui gère les effets de ces "sorts", dans x2_s3_bomb (je te laisse chercher Smile )
_________________
Lendraste de Loreval
Qui cherche la Vérité cherche celui qui la détient, car elle n'existe pas à l'état naturel.
La cité des mensonges - 1
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Numéro ICQ Ignorer l'utilisateur
 
Longbow
Grand Sage du Conseil
Inscrit le: 10 Déc 2003
Messages: 638
Localisation: Orléans
Répondre en citant
Posté le : 25/08/2004 21:06:22 Sujet du message :

Hum, hum...

Merci pour cette semi-clarté...
ActionCastSpellAtObject(int nSpell ??...) A trouver ds le nwscript.nss ??

Une idée pour l'animation ?
_________________
Rex illeteratus
Quasi Asinus Coronatus
Jean de Salisbury
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
lendraste
Grand Maître Chanteur du Conseil
Inscrit le: 20 Fév 2003
Messages: 1403
Localisation: Quelque part ailleurs
Répondre en citant
Posté le : 25/08/2004 23:16:57 Sujet du message :


Longbow a écrit :
Hum, hum...

Merci pour cette semi-clarté...
ActionCastSpellAtObject(int nSpell ??...) A trouver ds le nwscript.nss ??

Une idée pour l'animation ?
Voici le script x2_s3_bomb qui est lancé par l'appel aux sort 744 et 745 :

NWScript :

//:Confused///////////////////////// /////////////////////
//:: Improved Grenade weapons script
//:: x2_s3_bomb
//:: Copyright (c) 2003 Bioware Corp.
//:Confused///////////////////////// ////////////////////
/*
    More powerful versions of the standard grenade
    weapons.
    They do 10d6 points of damage and create an
    persistant AOE effect for a 5 rounds


*/

//:Confused///////////////////////// ////////////////////
//:: Created By: Georg Zoeller
//:: Created On: 2003-08-18
//:Confused///////////////////////// ////////////////////

#include "x0_i0_spells"
void main()
{
    int nSpell = GetSpellId();


    if (nSpell == 745) // acid bomb
    {
        DoGrenade(d6(10),1, VFX_IMP_ACID_L, VFX_FNF_LOS_NORMAL_30,DAMAGE_TYPE_ACID,RADIUS_SIZE_HUGE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
        ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, EffectAreaOfEffect(AOE_PER_FOGACID), GetSpellTargetLocation(), RoundsToSeconds(5));
    } else if (nSpell == 744)
    {
        DoGrenade(d6(10),1, VFX_IMP_FLAME_M, VFX_FNF_FIREBALL,DAMAGE_TYPE_FIRE,RADIUS_SIZE_HUGE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
        ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, EffectAreaOfEffect(AOE_PER_FOGFIRE), GetSpellTargetLocation(), RoundsToSeconds(5));
    }
}
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.


Les effets visuels qui sont ici passé en paramètres sont utilisés dans la fonction DoGrenade pour matérialiser le résultat d'un jet d'une bombe de feu ou d'acide mais non le lancer lui-même. En effet, le lancer est entièrement géré par le moteur de jeu et le système des "projectiles" intégré au lancer des sorts. Quand on regarde les lignes du fichier spells.2da correspondant à ces deux sorts, les colonnes préfixées par "proj" définissent les caractéristique du projectile en question. En l'occurence, le "modèle" 3D du projectile est un item fort connu "it_potion_000.mdl".

Donc, concrètement, si l'on veut créer une animation d'un lancer de fiole, le mieux est d'utiliser le ActionCastFakeSpellAtLocation ou le ActionCastFakeSpellAtObject avec les ID de sort adéquat (on peut utiliser les valeurs numériques par ailleurs, connaître les constantes sous formes de chaine de caractère, c'est du luxe) qui exploitera le moteur de lancer de sort (donc le système de projectile).

Le script suivant fonctionne très bien :
NWScript :

void main()
{
  object oTarget=GetObjectByTag("OBJET_VISE");
  object oCaster=GetFirstPC();
  AssignCommand(oCaster, ClearAllActions());
  AssignCommand(oCaster, ActionCastFakeSpellAtObject(744, oTarget));
}
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.


Par curiosité, j'ai cherché les noms des constantes associées aux valeurs 744 et 745 et en fait il n'y en a pas. Ce qui est compréhensible car même si cette action exploite le système de lancement de sort, il ne s'agit pas pour autant d'un sort identifié. Donc pas le choix, il faut utiliser les valeurs numériques.

Tout cela signifie aussi que si l'on veux créer d'autres type de projectile de ce genre, il suffit de créer un nouveau "sort" dans le spells.2da dans lequel on peut exploiter n'importe quel fichier "mdl" modélisant un item ou un plaçable. Cela a été fait dans HotU où des Géants projètent véritablement des rochers.
_________________
Lendraste de Loreval
Qui cherche la Vérité cherche celui qui la détient, car elle n'existe pas à l'état naturel.
La cité des mensonges - 1
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Numéro ICQ Ignorer l'utilisateur
 
Longbow
Grand Sage du Conseil
Inscrit le: 10 Déc 2003
Messages: 638
Localisation: Orléans
Répondre en citant
Posté le : 26/08/2004 00:36:24 Sujet du message :

Et bien merci pour ces éclaircissements lumineux. Je m'incline respecteusement et m'en retourne au sombre royaume duegar.


_________________
Rex illeteratus
Quasi Asinus Coronatus
Jean de Salisbury
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Télépathe
Novice
Inscrit le: 24 Juil 2004
Messages: 19
Répondre en citant
Posté le : 31/08/2004 10:31:28 Sujet du message :

Bonjour à tous et merci pour vos recherches

Ayant un nouveau lecteur CD et ayant passé le weekend avec mon frère, j'ai finalement opté non pas le lancer, mais la pose d'une bombe.
J'étudierais vos scripts car cela me semble intéressant pour la suite de mon module.
Voici ce que j'ai fait. Je pense que cela pourrait servir à d'autres débutants.

Dans le OnEnter du trigger :

Code :
void main()
{
object oCreature = GetEnteringObject();
object oTarget1 = GetObjectByTag ("WP_p1"); // Tag du 1eme waypoint
location lWay1 = GetLocation(oTarget1);

if (GetIsPC(oCreature))
{
CreateObject(OBJECT_TYPE_CREATURE,"eclaireurpicte",lWay1);
}
DestroyObject(OBJECT_SELF); //Pour que cela ne fonctionne qu'une fois
}



Dans le OnSpawn du NPC (éclaireur Picte) :

Code :

void main()
{
object oBombe = GetObjectByTag("bombe"); // Tag de la bombe
object oTotem = GetObjectByTag("totem"); // Tag du totem
object oPicte = GetObjectByTag("eclaireurpicte"); // Tag du NPC
object oTarget2 = GetNearestObjectByTag ("WP_p2"); // Tag du 2eme waypoint
object oTarget3 = GetNearestObjectByTag ("WP_p3"); // Tag du 3eme waypoint
object oTarget4 = GetNearestObjectByTag ("WP_p4"); // Tag du 4eme waypoint

location lWay2 = GetLocation(oTarget2);
location lWay3 = GetLocation(oTarget3);
location lWay4 = GetLocation(oTarget4);

if (GetIsObjectValid(oPicte))
{
ActionMoveToLocation(lWay2, TRUE); //deplacement
DelayCommand(2.0,ActionPutDownItem(oTotem)); // pose du totem de la tribu Picte
DelayCommand(5.0,ActionMoveToLocation(lWay3, TRUE)); // deplacement
DelayCommand(7.0,ActionPutDownItem(oBombe)) ; // pose la bombe pres de la cible
DelayCommand(9.0,ActionMoveToLocation(lWay4, TRUE));// deplacement loin de la bombe
DelayCommand(11.0,DestroyObject(oPicte)); // destruction du NPC pour simuler sa disparition dans l'epaisse foret
}
}



et enfin ce morceau de script à ajouter ans le OnUnAcquireItem du module :

Code :

object oPicte = GetObjectByTag ("eclaireurpicte");
object oTarget2 = GetObjectByTag ("WP_p2");
object oTarget3 = GetObjectByTag ("WP_p3");
object oCible = GetObjectByTag ("Portail1"); // Tag de la porte a endommager ou à detruire

object oItem = GetModuleItemLost();
location lWay2 = GetLocation(oTarget2);
location lWay3 = GetLocation(oTarget3);
location lCible = GetLocation(oCible);

string tag = GetTag(oItem);

if(tag == "Totem1")
{
DestroyObject(oItem);
AssignCommand(oPicte,SpeakString("Retournez en enfer..!"));
ActionWait(1.0);
CreateObject(OBJECT_TYPE_PLACEABLE,"Totem2",lWay2);

}
if(tag == "Bombe")
{
DelayCommand(2.0,ApplyEffectAtLocation (DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_MYSTICAL_EXPLOSION), lCible));
DelayCommand(2.1,ApplyEffectToObject (DURATION_TYPE_INSTANT,EffectDamage(DAMAGE_BONUS_2d12), oCible));
DelayCommand(2.3,ApplyEffectToObject (DURATION_TYPE_INSTANT,EffectDamage(DAMAGE_BONUS_2d12), oCible));
DelayCommand(2.0,DestroyObject(oItem));

}


Voilà, j'espère que cela permettra d'aider d'autres personnes.
Merci encore
Longue vie à ce forum
 
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 59.984ms