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

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Une possibilité de tempérer le OnHeartBeat ??

Par coolstar le 18/12/2002 à 4:09:29 (#2819477)

Je sais, le titre ressemble à une blague... mais qu'importe si je me fais des ennemis! :D


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)

Effectivement, et alors ? C'est juste le principe de fonctionnement de la plupart des "bons" OnHeartbeat...:doute:

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ï
Effectivement, et alors ?
:mdr:

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)

Voilà un petit exemple d'utilisation des incrémentassions assez simple afin d'éviter les répétions. On va créer un cailloux sur 4 WayPoint qui s'appellent Spawnpierre1, Spawnpierre2, Spawnpierre3 et Spawnpierre4, 4 effets visuel sur ces même WayPoint et un effet de tremblement de terre.

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)

[ApplyEffect]:merci:[/ApplyEffect]

JOL Archives 1.0.1
@ JOL / JeuxOnLine