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 20:55:27


  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 : 05/01/2006 20:51:03 Sujet du message : [Résolu] Script de fou

Bonsoir !

Aujourd'hui je nous plonge dans le monde merveilleux des psychopathes...

Notre PJ (ou groupe) décide de visiter un asile. Là, il tombe sur un homme restant dans son coin, gromelant certaines phrases incompréhensibles. Il s'approche quelque peu et soudain, l'interné, qui était jusqu'à présent calme, se jette furieusement sur lui.
Le PJ répond également par la violence, mais au premier coup, le "fou" s'en retourne dans son coin, tout chétif en implorant "pas taper! pas taper !".


Oui, je sais, c'est moi qui vais passer pour une dingue avec ce script, mais ce n'est pas grave, j'assume.

Dans cette scène je teste avec :
- un PNJ témoin (faction populace avec aucun script)
- Un PNJ "Fou" ( faction populace aussi !)

Dans le "OnPerception" de notre ami, j'ai mis :

NWScript :
void main()
{
object oPC = GetLastPerceived();

if (GetIsPC(oPC))
    {
    SpeakString("");
    SetIsTemporaryEnemy(oPC, OBJECT_SELF, TRUE, 5.0 );
    ActionAttack(oPC);
    }
}
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 dans le OnDamaged :

NWScript :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.


J'ai enlevé les scripts du OnPhysicalAttack et OnSpellCastAt


Au début, notre fou se jette effectivement sur le pauvre joueur.
Le Fou est "rouge" (hostile) et le PNJ témoin est "bleu" (neutre).
Puis, le fou attaque et le PJ réplique...

Et là... c'est le drame !
Le PNJ témoin devient hostile et le fou le reste.
Comment faire pour que notre joueur ne se fasse pas sauter dessus par toute la population parce qu'il a repoussé un malade mentale qui lui sautait dessus ?

Merci de votre attention !
Dernière édition par Djezebel le 06/01/2006 11:09:04; édité 1 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Khorgan
Ecuyer
Inscrit le: 10 Déc 2005
Messages: 67
Répondre en citant
Posté le : 05/01/2006 21:17:10 Sujet du message :

Salut Smile

Je ne suis vraiment pas doué en script (il suffit de voir mes autres post pour s'en rendre compte Razz) mais ne suffirait-il pas que tu crées une faction spécifique pour ton "fou" ? Ainsi quand ton pj l'attaque, la faction populace ne devrait pas réagir.

Enfin je dis peut-être une bétise mais il me semble que ça devrait fonctionner.
 
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 : 05/01/2006 21:21:22 Sujet du message : Silence !

Salut Djezebel, tu vas croire que je te traque !

En fait la solution est simple, pour que le PNJ témoin n'attaque pas le joueur, il faut que tu commentes la ligne suivante du script onSpawn de ton "fou" :

NWScript :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.


devient :

NWScript :
// SetListeningPatterns();
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.


Ensuite, sur le script OnDammaged de ton fou :

Mets cette ligne :
NWScript :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.


au lieu de :

NWScript :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.


Cela devrait marcher.
Je n'ai pas testé mais je pense que c'est bon.
 
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 : 05/01/2006 21:21:59 Sujet du message :

Je pourrais effectivement faire une faction spéciale : ça ferait que le PNJ et le PJ se voient en hostile tout en étant neutre pour les autres factions.
Le "problème" c'est que je veux que le PNJ soit de base "neutre", puis devienne "hostile" pour redevenir dès qu'on le frappe "neutre".

C'est là toute la difficulté de la chose !
Et, qui plus est, il ne faut pas que ce soit le PJ qui devienne hostile envers toute la faction du fou.
Donc pour résoudre la dernière partie, c'est possible effectivement de faire une nouvelle faction, mais j'ignore si ce ne serait pas possible de faire autrement...

(par exemple de passer le "fou" en hostile pendant un laps de temps assez cout)

Voilà, si vous avez des idées...

-- EDIT ---



Citation :
Salut Djezebel, tu vas croire que je te traque !
Non non, je pense juste qu'on fréquente beaucoup ce forum Smile

Merci pour les scripts, je teste !
 
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 : 05/01/2006 21:37:42 Sujet du message :

Le SurrenderEnemy() fonctionne impec !
(on en apprend tous les jours avec les fonctions)

Par contre, le PNJ teste devient tout de même hostile, même en commentant le SetListeningPattern();
 
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 : 06/01/2006 02:59:15 Sujet du message :

Laisse tomber le SetListeningPattern, cela m'avait provoqué une fois l'effet recherché, mais je pense après coup que cela devait être un bug.

Par contre :
Remplace le
NWScript :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
NWScript :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.


avec cet include au début :
NWScript :

#include "x0_i0_partywide"
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.


Cela n'est pas entièrement satisfaisant, mais c'est mieux que rien.
 
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 : 06/01/2006 07:55:23 Sujet du message :

Salut !


Citation :
Cela n'est pas entièrement satisfaisant, mais c'est mieux que rien
Tu es bien difficile alors ! Parce que ça marche très bien chez moi. Very Happy
Le PNJ teste n'attaque pas le PJ.

Pour cette scène, il faut :
- un PNJ "fou" créé dans la palette
- un Waypoin "W_fou"

Dans les scripts du Fou, il faut supprimer ceux du :
- OnPhysicalAttack (pour qu'il ne réplique pas quand il se fait frapper par des armes)
- OnSpellCastAt ( la même chose par des sorts )

On remplace celui du OnPerception par :

NWScript :
void main()
{
object oPC = GetLastPerceived();

if (GetIsPC(oPC))
    {
    SpeakString("");
    SetIsTemporaryEnemy(oPC, OBJECT_SELF, TRUE, 5.0 );
    ActionAttack(oPC);
    }
}
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 celui du OnDamaged par :

NWScript :
#include "x0_i0_partywide"
void main()
{
object oWP = GetObjectByTag("W_fou");
ClearAllActions(TRUE);
object oPC = GetLastDamager();
SurrenderAllToEnemies();//Tres interessante fonction qui permet que les autres PNJ ne soient pas agressifs envers le joueur quand il se defend.
SpeakString("");//Preuve qu'il est dingue
DelayCommand(1.0, ActionForceMoveToObject(oWP)); // Le DelayCommand semble imperatif si on veut que ca fonctionne, car sans, l'action ne se fait pas.
}
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.



Avec ça, vous aurez un véritable asile plus "vivant"... Et les joueurs penseront que le scripteur est timbré lui aussi !
 
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 : 06/01/2006 13:43:29 Sujet du message :

De mon avis : il vaudrait mieux que tu n'utilises pas la faction commoner (populace) pour tes créatures car la gestion de l'hostilité sur les factions de base est globale : ca risque de mal finir pour les PJs si ils répondent aux aggressions.
Crée ta faction personnalisée (en faction sans mémoire : effet global désactivé) ou fait passer tes PNJs en faction hostile pour la durée de ton animation : ce sera plus prudent et cela ne change pas l'effet de SurrenderToEnnemy()

Tu as la fonction suivante à disposition

NWScript :
void ChangeToStandardFaction(
    object oCreatureToChange,
    int nStandardFaction
);
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.
 
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 : 06/01/2006 16:04:03 Sujet du message :

Justement, j'ai mis ceci :

NWScript :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.


Ce qui devrait le mettre en ennemi et ne pas prendre en compte qu'il frappe quelqu'un de la faction "populace" ...
Enfin, avec le PNJ teste (qui est de la faction populace), il n'a pas bougé, donc visiblement ça marche quand même.

Mais merci de ton attention !
 
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 58.933ms