Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

le dormeur doit se reveiller... HELP

Par tonton le grognon le 29/6/2002 à 22:55:13 (#1731899)

bon..la c'est moi qui abandonne...


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)

qu'est ce que t'appelles dormir ?
qui est en "rest" ou en "sit" ?
plus de details stp ;)

Par KulzZer le 29/6/2002 à 23:47:41 (#1732124)

Essaye de mettre un waypoint, quand le pj passe dessus, ça déclenche une fonction qui réveille l'orc.

Par Jey le 30/6/2002 à 0:01:08 (#1732164)

Question: tu veux une fonction qui marche tjrs ou "aléatoire"? Je m'explique, tu dis "SI il entend un pj", mais justement, cela signifie-t-il qu'il se peut qu'un joueur lui passe à côté sans se faire remarquer (s'il est en mode furtif par exemple, ben il se peut qd même que l'orc entende des bruits de pas s'il a le sommeil léger et que le pj a pas bcp de pts ds le déplacement silencieux... mais même en mode normal pquoi pas... après tt, l'orc a les yeux fermé et ses rêves agités peuvent l'empêcher d'entendre un bruit de feuille. Tt est possible et la "chance" du joueur à un moment précis devrait être aussi primordiale que la détection classique... C'est pquoi "l'aléatoire" combiné aux comp stealth et detect mode a un certain charme pr le côté "réaliste"!), ou forcément l'orc se réveille à la moindre approche d'un pj? Non parce que bon, c qd même différent à programmer et pas d'une même complexité, alors déjà faudrait savoir... Dis dc, ton cahier des charges est pas très précis Tonton! :p Tu vieillis! :D

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)

J'ai peut etre une solution au probleme. J'ai testé ca une fois et ca avait l'air de fonctionner


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)

oui c'est la methode que j'utilise pour endormir mes orcs... jusque la on est daccord..; et ca marche tres bien..

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)

ouep bon..evidemment j'avais pas fait gaffe que ONPERCEPTION permet aussi à des npc de se percevoir mutuellement


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