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 16:57: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 |
Djezebel Héros Messages: 252 |
Bonjour (ou rebonjour),
J'aimerais faire un effet qui, lorsque le joueur est frappé par une créature, il se retrouve projeté à 5 mètres de la créature aléatoirement quand la créature le frappe. Voilà le script qui est mis sur le onDamage de la Créature. (je suppose qu'il vaudrait mieux le mettre dans celui du module quand le joueur est blessé) NWScript :
void main() { object oDamager = GetLastDamager(); if (Random(2) == 1) { AssignCommand(oDamager, ActionMoveAwayFromObject(OBJECT_SELF, TRUE, 10.0)); } } Bien évidement ça ne fait rien... J'ai testé pour que la créature s'en aille et là, ça posait un autre problème : le ActionMoveAwayFromObject n'est pas du tout pareil qu'un JumpToLocation Est-ce qu'il serait plutot possible de mettre un JumpTo une location qui soit à 10.0 mètres de la créature ? Merci d'avance ! Edit : *La solution se trouve plus bas dans une de mes réponses* Dernière édition par Djezebel le 28/12/2005 11:21:59; édité 1 fois
|
Revenir en haut | |
Elandil2 Chevalier Messages: 97 Localisation: sur mon ordi loir-et-cher |
Je ne sais absolument pas si ca marche mais essaie ceci :
NWScript : void main() { object oDamager = GetLastDamager(); location lLoc = GetLocation(OBJECT_SELF); if (Random(2) == 1) { AssignCommand(oDamager, ActionMoveAwayFromLocation(lLoc, TRUE, 10.0)); } } _________________ Rejoignez nous sur notre forum Aelor, module en construction Vive Gimli |
Revenir en haut | |
Djezebel Héros Messages: 252 |
Ca ne fonctionne pas
Et en plus ça ferait en sorte que la personne s'éloigne (comme un sort de peur) Et il me faudrait plutôt comme si la personne était projetée en arrière... Mais merci quand même |
Revenir en haut | |
Elandil2 Chevalier Messages: 97 Localisation: sur mon ordi loir-et-cher |
Ben sinon apres tu peux toujours essayer de créer une location qui est décalé de 10 metre par rapport a celle du joueur et ensuite on force l'autre a y aller mais bon, ...
_________________ Rejoignez nous sur notre forum Aelor, module en construction Vive Gimli |
Revenir en haut | |
Djezebel Héros Messages: 252 |
Ce serait justement ça qu'il faudrait, mais comment faire pour créer une localisation à 10m (comme un cercle autour de la créature, et par rapport à la position du joueur le joueur se trouve sur le cercle).
Et c'est là que le bas blesse. Est-ce possible ? |
Revenir en haut | |
Enki Légende vivante Messages: 432 |
Bonjour Djezebel,
je crois que le problème, c'est qu'un perso ne peut pas sauter en arrière, en tombant. Tu peux peut-être essayer de scripter une animation avec un JumpToLocation à une location située 2 mettres plus loins en arrière et un PlayAnimation du genre looping_dead_back. En jouant sur la vitesse d'execution de l'animation, tu donneras peut-être l'illusion que le perso tombe à la renverse. Sinon, tu peux peut-être essayer avec le hak de Vaei (sur le vault), qui possède des animations supplèmentaires dont une qui permet de sauter je crois. Bon courage, à bientôt. |
Revenir en haut | |
Enki Légende vivante Messages: 432 |
Bonsoir, je me suis penché sur ton problème, que je trouve très intéressant mais malheureusement, je n'ai pas trouvé la solution. j'ai néanmoins réussi à faire un script qui fait que quand un joueur, utilise une arme dont le tag est "fall", le PNJ frappé par cette arme est projeté 5 mettres plus loin dans la dirrection opposée au coup qu'il a reçut (logique). Je te montre ce script, il ne te reste plus qu'à trouver comment faire en sorte que ce soit le joueur qui soit projeté et le PNJ qui porte le coup.
j'ai d'abord fait une toute petite fonction dans un include appelé : "enki_include" : NWScript :
//une librairie de fonctions pour projeter un perso au loin// #include "x0_i0_position" void Degage(object oInjured = OBJECT_SELF); void Degage(object oInjured = OBJECT_SELF){ object oDamager = GetLastDamager(oInjured); object oWeapon = GetLastWeaponUsed(oDamager); string sTag = GetTag(oWeapon); object oArea=GetArea(OBJECT_SELF); float fOrientation= GetFacing(oDamager); vector vPosition = GetPosition(OBJECT_SELF); float fDirection=GetNormalizedDirection(fOrientation); vector vNewPos=GetChangedPosition(vPosition,5.0f,fDirection ); location lDestination=Location(oArea,vNewPos,fOrientation) ; if (sTag=="fall") { DelayCommand(0.1,AssignCommand(oInjured,JumpToLocation(lDestination))); DelayCommand(0.2,AssignCommand(oInjured,PlayAnimation(ANIMATION_LOOPING_DEAD_BACK,8.0,1.5))); } } Puis, j'ai modifié le script OnDamaged du NPC projeté (dans une copie bien sûr). Je ne te montre que le début, le reste est identique au script de base : NWScript :
////////////////////////////// ////////////////////// #include "enki_include" #include "nw_i0_generic" void main() { Degage(); /////// et tout le reste....////// } Voilà, bon courage pour la suite ! |
Revenir en haut | |
Sith Vicious Grand Sage du Conseil Messages: 693 |
Pour le reste je pense qu'il faut donner le pouvoir unique "Si coup réussi" et modifier le script "x2_s3_onhitcast".
Avec un truc du genre : (en réutilisant les fonctions d'Enki of course) : NWScript :
#include "enki_include" void main() { object oSpellOrigin = OBJECT_SELF; object oItem = GetSpellCastItem(); object oSpellTarget = GetSpellTargetObject(); string sTag = GetTag(oItem); if (sTag == "TagDeL'armeDuMechant") { Degage(oSpellTarget,oSpellOrigin); } } Il faut juste un peu modifier la fonction d'Enki, il n'y a plus besoin de check dans son script. NWScript :
//une librairie de fonctions pour projeter un perso au loin// #include "x0_i0_position" void Degage(object oInjured = OBJECT_SELF, object oDamager); void Degage(object oInjured = OBJECT_SELF, object oDamager) { //object oDamager = GetLastDamager(oInjured); //object oWeapon = GetLastWeaponUsed(oDamager); //string sTag = GetTag(oWeapon); object oArea=GetArea(OBJECT_SELF); float fOrientation= GetFacing(oDamager); vector vPosition = GetPosition(oInjured); float fDirection=GetNormalizedDirection(fOrientation); vector vNewPos=GetChangedPosition(vPosition,5.0f,fDirection ); location lDestination=Location(oArea,vNewPos,fOrientation) ; /*if (sTag=="fall") {*/ DelayCommand(0.1,AssignCommand(oInjured,JumpToLocation(lDestination))); DelayCommand(0.2,AssignCommand(oInjured,PlayAnimation(ANIMATION_LOOPING_DEAD_BACK,8.0,1.5))); //} } Je suis curieux de savoir si ça marche, je me suis jamais servi de ces trucs là. Je sais pas si c'est le bon script à toucher surtout, mais ça a l'air. |
Revenir en haut | |
Djezebel Héros Messages: 252 |
Merci beaucoup !
Je regarderai tout ça dès que j'aurai un peu de temps Le fait de pousser dans une autre direction c'était surtout ça qui m'intéressait. Ensuite, que le PJ ait une animation c'est "moins" important Merci encore et joyeuses fêtes ! |
Revenir en haut | |
lylver Héros Messages: 274 |
Il n'y a pas d'évênements gérés pour les dégats reçus par les personnages joueurs hormis OnPlayerDying, OnPlayerDeath lors du passage à 0pvs et -10pvs
Il faut mettre dans les mains de la créature une arme à "OnHit, unique power" (si coup réussi, pouvoir unique) et faire le script ad hoc. |
Revenir en haut | |
Djezebel Héros Messages: 252 |
Ca marche impec !
Merci beaucoup Enki et Sith Vicious J'ai créé une arme pour resref "pushweap" Cette arme a un "pouvoir unique" dans "sort au toucher" J'ai donc fais un script appelé "pushweap" : NWScript :
#include "enki_include" void main() { object oSpellOrigin = OBJECT_SELF; object oItem = GetSpellCastItem(); object oSpellTarget = GetSpellTargetObject(); string sTag = GetTag(oItem); if (sTag == "pushweap") { Degage(oSpellTarget,oSpellOrigin); } } Et enfin l'include : enki_include NWScript :
#include "x0_i0_position" void Degage(object oInjured , object oDamager); void Degage(object oInjured , object oDamager) { //object oDamager = GetLastDamager(oInjured); //object oWeapon = GetLastWeaponUsed(oDamager); //string sTag = GetTag(oWeapon); object oArea = GetArea(OBJECT_SELF); float fOrientation= GetFacing(oDamager); vector vPosition = GetPosition(oInjured); float fDirection=GetNormalizedDirection(fOrientation); vector vNewPos=GetChangedPosition(vPosition,5.0f,fDirection ); location lDestination=Location(oArea,vNewPos,fOrientation) ; /*if (sTag=="pushweap") {*/ DelayCommand(0.1,AssignCommand(oInjured,JumpToLocation(lDestination))); DelayCommand(0.2,AssignCommand(oInjured,PlayAnimation(ANIMATION_LOOPING_DEAD_BACK,8.0,1.5))); //} } Ca ne marche pas à chaque fois que la créature touche le joueur (je ne sais d'ailleurs pas à quel moment ça se lance vraiment) mais c'est déjà une animation bien sympa ! Merci de vous êtes penchés sur ce problème ! |
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