La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 23/11/2024 11:35:14


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Djezebel
Héros
Inscrit le: 29 Sep 2005
Messages: 252
Répondre en citant
Posté le : 16/12/2005 13:55:55 Sujet du message : [Résolu] Effet de recul

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));
    }
}
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.


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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Elandil2
Chevalier
Inscrit le: 14 Fév 2005
Messages: 97
Localisation: sur mon ordi loir-et-cher
Répondre en citant
Posté le : 16/12/2005 16:48:48 Sujet du message :

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));
}
}
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.

_________________
Rejoignez nous sur notre forum
Aelor, module en construction
Vive Gimli

 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
Djezebel
Héros
Inscrit le: 29 Sep 2005
Messages: 252
Répondre en citant
Posté le : 17/12/2005 18:53:34 Sujet du message :

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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Elandil2
Chevalier
Inscrit le: 14 Fév 2005
Messages: 97
Localisation: sur mon ordi loir-et-cher
Répondre en citant
Posté le : 17/12/2005 22:16:26 Sujet du message :

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 Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
Djezebel
Héros
Inscrit le: 29 Sep 2005
Messages: 252
Répondre en citant
Posté le : 22/12/2005 09:37:45 Sujet du message :

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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Enki
Légende vivante
Inscrit le: 06 Déc 2005
Messages: 432
Répondre en citant
Posté le : 22/12/2005 11:20:47 Sujet du message : Sauter en arrière ?

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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Enki
Légende vivante
Inscrit le: 06 Déc 2005
Messages: 432
Répondre en citant
Posté le : 23/12/2005 03:52:04 Sujet du message : Un début de réponse, c'est déja ça, non ?

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)));

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


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....//////

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


Voilà, bon courage pour la suite !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 23/12/2005 05:23:31 Sujet du message :

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);
}
}
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.


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)));

//}
}
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.


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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Djezebel
Héros
Inscrit le: 29 Sep 2005
Messages: 252
Répondre en citant
Posté le : 23/12/2005 07:17:22 Sujet du message :

Merci beaucoup !
Je regarderai tout ça dès que j'aurai un peu de temps Smile

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 Smile

Merci encore et joyeuses fêtes !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lylver
Héros
Inscrit le: 08 Avr 2005
Messages: 274
Répondre en citant
Posté le : 27/12/2005 18:01:04 Sujet du message :

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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Djezebel
Héros
Inscrit le: 29 Sep 2005
Messages: 252
Répondre en citant
Posté le : 28/12/2005 11:18:55 Sujet du message :

Ca marche impec !

Merci beaucoup Enki et Sith Vicious Smile

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);
}
}
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.


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)));
//}
}
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.


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 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 53.932ms