Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > Une possibilité de tempérer le OnHeartBeat ??
Une possibilité de tempérer le OnHeartBeat ??
Par coolstar le 18/12/2002 Ã 4:09:29 (#2819477)
Nan, sérieusement... je viens de découvrir un Script étrange à mon sens (...) concernant le OnHeartBeat... En fait, voulant regarder quel était le 'Modus Operandi' des Prêtres de Tyr priant près d'Aribeth (dans le Temple où Desther révèle sa trahison!), j'ai découvert ceci... :ange:
void main()
{
if(GetLocalInt(OBJECT_SELF,"NW_L_InConversation") == FALSE &&
GetLocalInt(GetModule(),"NW_G_M1Q6A01RitualInProgress") == FALSE)
{
int nCount = GetLocalInt(OBJECT_SELF,"NW_L_HBCount");
if(nCount == 0)
{
SetFacingPoint(GetPosition(GetNearestObjectByTag("M1Q6A01Pool")));
ActionPlayAnimation(ANIMATION_LOOPING_MEDITATE,1.0,60.0);
nCount++;
}
else if(nCount 0)
{
nCount++;
}
else
{
nCount = 0;
}
SetLocalInt(OBJECT_SELF,"NW_L_HBCount",nCount);
}
else
{
SetLocalInt(OBJECT_SELF,"NW_L_HBCount",0);
}
}
Rien de bien étrange me diraient ceux qui connaissent déjà le principe des mises en boucle... mais, perso, n'ayant encore jamais travaillé ce genre de truc (et, entre autre chose, les 'incrémentassions'!)... je me dis que cela ressemble bien à un moyen d'"alléger" la lourdeur du OnHeartBeat... A moins que je ne m'égare bien sûr! :monstre:
Donc... je me demandais (si vous pouviez confirmer d'ailleurs!) si, effectivement, tant que nCount se trouve entre la Valeur
0 & 10, tandis qu'il s'Incrémente de 1, le OnHeartBeat ne génère plus de Commandes & autres et donc laisse le CPU se reposer durant (si l'on considère à juste titre bien sûr que les if et autres else, ainsi que les Set & Get, ne bouffent pas de ressources!)... parce que, là , il semblerait que pendant 10 Tours (soit 10x6=60 sec si j'ai bien suivi!) il laisse tourner la Commande ActionPlayAnimation seule (qui elle-même, par ailleurs, doit opérer durant 60 sec!)... et, cependant, avec ce laps de temps "raisonnable", si le NPC est interrompu il pourra tout de même reprendre l'opération... grâce au principe de fonctionnement du OnHeartBeat... non??? :maboule:
...
Par Jedaï le 18/12/2002 à 10:45:35 (#2820454)
Par ailleurs, les if ne consomme rien mais les fonctions du type GetLocal...() si, bien que beaucoup moins que des fonctions comme GetNearestObjectByTag().:cool:
Par coolstar le 18/12/2002 Ã 10:58:05 (#2820522)
Provient du message de Jedaï
:mdr:
Effectivement, et alors ?
Par Taern le 18/12/2002 Ã 20:17:50 (#2825684)
Provient du message de Jedaï
Effectivement, et alors ? C'est juste le principe de fonctionnement de la plupart des "bons" OnHeartbeat...:doute:
Je confirme, c'était limpide ... :o
Re: Une possibilité de tempérer le OnHeartBeat ??
Par coolstar le 19/12/2002 Ã 1:08:23 (#2827982)
Provient du message de coolstar
Rien de bien étrange me diraient ceux qui connaissent déjà le principe des mises en boucle... mais, perso, n'ayant encore jamais travaillé ce genre de truc (et, entre autre chose, les 'incrémentassions'!)... je me dis que cela ressemble bien à un moyen d'"alléger" la lourdeur du OnHeartBeat... A moins que je ne m'égare bien sûr! :monstre:
Ouai... Désolé d'être aussi mauvais! :doute:
Incrementation
Par Jaha Effect le 19/12/2002 Ã 6:55:19 (#2828791)
void main()
{
int i = 1; // on defini un integer avec 1 de valeur initiale
while( i <= 4 ) //plage de valeur de i de 1 a 4
{
location lSource = GetLocation(GetObjectByTag("Spawnpierre"+IntToString(i)));// On transforme i en chaine de caractere
ApplyEffectAtLocation( DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_FIREBALL), lSource);
ApplyEffectAtLocation( DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_FNF_SCREEN_SHAKE), lSource, 10.0f);
CreateObject(OBJECT_TYPE_PLACEABLE,"plc_boulder",lSource);
i++;// la on incremente la valeur de i de 1 a chaque lecture de boucle
}
PlaySound("as_na_rockfallg1");
DestroyObject(OBJECT_SELF);
}
J'espère que c'est clair comme exemple :)
Jaha Effect :D
Par coolstar le 19/12/2002 Ã 7:03:49 (#2828801)
JOL Archives 1.0.1
@ JOL / JeuxOnLine