Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > le dormeur doit se reveiller... HELP
le dormeur doit se reveiller... HELP
Par tonton le grognon le 29/6/2002 à 22:55:13 (#1731899)
je veux un orc... qui dort par defaut... et qui se reveille s'il entend un PC...
j'ai essaye plusieurs methodes, mais si j'arrive bien à l'endormir dans son onspawn, cette tete de gobelin veut pas se reveiller (avec des event onperceive) alors que mon PC s'amuse à incanter ,bouger à côté de lui... je dois faire la meme betise en boucle... donc si quelqu'un pouvait me faire un orc "pret à l'emploi" qui repond à ce cachier des charges....
il semble que la methode soit de lui coller 1 pts de degat et de le luis soigner derriere... mais même avec ca, il veut pas se reveiller.... (probleme donc avec le onperceive)
Par ZeDuckMaster le 29/6/2002 à 23:08:06 (#1731953)
qui est en "rest" ou en "sit" ?
plus de details stp ;)
Par KulzZer le 29/6/2002 à 23:47:41 (#1732124)
Par Jey le 30/6/2002 à 0:01:08 (#1732164)
P.S.: Kulzzer, je crois que tu voulais plutôt parler de trigger, non? Ca peut effectivement être une idée sinon de lancer le test pour savoir si l'orc entend le pj en fonction de la zone où passe le joueur, non forcément de la vision de l'orc lui-même (ce qui en reviendrait au même si c bien fait), et dc d'associer le script au trigger... seulement, faut bien s'assurer de programmer le fait que l'orc se replace bien au même endroit s'il compte redormir ensuite et donc si le script et le trigger doivent servir plusieurs fois...
P.P.S: bon j'ai pas encore vraiment testé l'éditeur dc je sais pas vraiment comment fonctionnent les trigger (si ce n'est leur principe), mais je me suis dit que peut-être même ce système permettrait-il de définir plusieurs "zones" différentes de détection qui risquerait de réveiller l'orc! Ainsi, déjà circulairement plusieurs triggers, et plus le joueur s'approche de l'orc et dc rentre ds un trigger circulaire proche, plus il y a de chance qu'il soit détecté... mais aussi comble d'une espèce de réalisme sadique, tu mets un tas de feuilles et de branches de bois à qques mètres (je sais pas s'il y a ça ds les textures de sol), et là tu associes un trigger au sol avec bcp de chances de réveiller l'orc! Alors si jamais un joueur a la bêtise de marcher sur les branches alors qu'il allait passer, et ce même s'il est en mode stealth... ben... :p (si là on n'est pas ds le comble du bon sens! Même si c un jeu, il faut jamais marcher sur des branchages qd on veut être silencieux! lol
Par Machin le 30/6/2002 à 2:26:58 (#1732587)
Evenement OnSpawn
Ajouter la ligne a la fin du fichier :
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectSleep(), OBJECT_SELF);
Evenement OnPerception
void main()
{
effect e = GetFirstEffect(OBJECT_SELF);
int find = FALSE;
while (GetIsEffectValid(e) && (!find))
{
if (GetEffectType(e) == EFFECT_TYPE_SLEEP)
{
RemoveEffect(OBJECT_SELF, e);
find = TRUE;
}
e = GetNextEffect(OBJECT_SELF);
}
}
En résumé, j'applique un effet "sleep" au streum lors de sa creation. L'effet etant permanent, il ne se reveillera jamais.
Ensuite, lorsqu'il devrait entendre/voir quelquechose, je recherche l'effet "sleep" et je le supprime.
Par tonton le grognon le 30/6/2002 à 6:57:25 (#1732904)
je vais tester la suite mais j'ai deja essayer le removeeffect carrement en direct sur l'orc dans son ONPERCEIVE et ca marchait pas... en plus il semble que le teste sur le onsleep soit buggé (dans nwn) car dans ce cas la il ne voit pas le npc "en train de dormir"... mais je vais quand même essaye ta solution...
rapport dans 10 minutes...
EDIT: j'ai un debut de reponse... bon ta methode marche..mais en fait toutes celle que j'ai utilisé marché aussi...
les problemes apparaissent quand il y a DEUX dormeurs dans la même piece... il ne veulent plus dormir car la presence de l'autre NPC le reveille automatiquement ou l'inverse ...va savoir pourquoi...
bon je vais retourner bricoler mes dormeurs...
merci pour le coup de main
Par tonton le grognon le 30/6/2002 à 9:22:36 (#1732988)
donc voici le script qu'il faut coller au debut du script par defaut du ONPERCEPTION juste apres le void () {
//*********
if (GetIsPC(GetLastPerceived()) && GetLastPerceptionSeen())
{
SpeakString("ALERT !! DES INTRUS !!", TALKVOLUME_SHOUT);
effect e = GetFirstEffect(OBJECT_SELF);
int find = FALSE;
while (GetIsEffectValid(e) && (!find))
{
if (GetEffectType(e) == EFFECT_TYPE_SLEEP)
{
RemoveEffect(OBJECT_SELF, e);
find = TRUE;
}
e = GetNextEffect(OBJECT_SELF);
}
}
//***
JOL Archives 1.0.1
@ JOL / JeuxOnLine