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

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Temps de déplacement

Par scrucher le 4/1/2003 à 16:33:45 (#2943638)

Voilà une petite question ...
Y a t-il un moyen de calculer le temps que va mettre un PNJ pour aller d'un point à un autre en marchant ?

Par Baltord Vlad Mortem le 4/1/2003 à 16:48:30 (#2943724)

Tu lances le module, tu met le PJ au point de départ, tout en cliquant sur la destination tu déclenches un chronomètre, une fois le PJ arrivé tu stop le chronomètre :bouffon:

Par Azrael07 le 4/1/2003 à 16:51:07 (#2943740)

ben pas si con, tu calcule le temp que met un personnage pour aller d'un point a un autre, tu en déduit sa vitesse moyenne et de la tu trouve tout ce que tu veux
je peux rien te dire de plus j'ai meme plus les fonctions nwn sous la main :sanglote: :sanglote: :sanglote:

Par coolstar le 6/1/2003 à 0:51:02 (#2953475)

Alors voilà... comme j'ai trouvé ça amusant, j'ai cherché et j'ai 2 propositions à te soumettre... sachant bien évidemment que le résultat, ne pouvant être parfait, est avant tout indicatif... :D


Soit tu donnes le Départ en "Clickant" sur un 'Plaçable' (genre une "Enseigne"!)... à condition d'être au plus près et de ne pas bouger d'un poil durant toute l'opération :


/* Script permettant de Déclencher le Test de Vitesse à partir d'un 'Plaçable'...
- By coolstar - A mettre dans le OnUsed du 'Plaçable' : */

void main()
{
// DECLARATION DES VARIABLES :
object oRunner = GetObjectByTag("Runner"); // Le NPC Coureur
object oDest = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC); // Le PC le plus proche
int iTimeSec = GetTimeSecond(); // Les Secondes au Départ
int iTimeMil = GetTimeMillisecond(); // Les Millisecondes au Départ
float fDist = GetDistanceBetween(oRunner, oDest); // Distance 'entre' le NPC et le PC au Départ
string sVarTimeSec = "Seconde"; // Variable "Seconde"
string sVarTimeMil = "Milliseconde"; // Variable "Milliseconde"
string sVarDist = "Distance"; // Variable "Distance"
string sDial = "test"; // Ref du Dial de "Bilan de Test"

// On Repere le moment du Depart :
SetLocalInt(oDest, sVarTimeSec, iTimeSec); // Récupération des Secondes
SetLocalInt(oDest, sVarTimeMil, iTimeMil); // Récupération des Millisecondes
// On Repere la Distance de Course :
SetLocalFloat(oDest, sVarDist, fDist);
// On Déclenche le Départ de la Course :
AssignCommand(oRunner, ActionMoveToObject(oDest)); // Mode MARCHE par défaut
AssignCommand(oRunner, ActionStartConversation(oDest, sDial)); // Le NPC s'adressera alors au PC
}


/* Script rendant compte de chacun des Relevés et des Calculs effectués lors du Test...
- By coolstar - A mettre dans les 'Actions conséquentes' de la 1ERE Phrase du NPC du Dial "test"
(phrase devant être impérativement suivie d'un Phrase pour le PC!) : */

void main()
{
// DECLARATION DES VARIABLES :
object oRunner = OBJECT_SELF; // NPC 'Propriétaire'
object oDest = GetPCSpeaker(); // Cible
// On Recupere La Distance :
float fDist01 = GetLocalFloat(oDest, "Distance"); // Distance "Initiale"
float fDist02 = GetDistanceBetween(oRunner, oDest); // Distance "Finale"
float fDist = fDist01-fDist02; // Distance "Effective"
// On Recupere le Temps :
int iSecA = GetLocalInt(oDest, "Seconde"); // Temps en Sec "Initial"
int iMilA = GetLocalInt(oDest, "Milliseconde"); // Temps en Millisec "Initial"
int iTimeA = iSecA*1000+iMilA; // Temps Total en Millisec "Initial"
int iSecB = GetTimeSecond(); // Temps en Sec "Finale"
int iMilB = GetTimeMillisecond(); // Temps en Millisec "Finale"
int iTimeB = iSecB*1000+iMilB; // Temps Total en Millisec "Finale"
int iTime = iTimeB-iTimeA; // Temps Total en Millisec "Effectif"
// Valeures Décimales :
float fSpeed = fDist/iTime*3600; // Calcul de la Vitesse en KM/H
float fDelay = 3.5; // Délais entre chaque Réplique du "Bilan de Test"

// Repliques du "Bilan de Test" (rendant compte de chacun des Releves et des Calculs effectués) :
ActionSpeakString(FloatToString(fDist01)+" mètres au Départ !");
ActionWait(fDelay);
ActionSpeakString(FloatToString(fDist02)+" mètres a l'Arrivée !");
ActionWait(fDelay);
ActionSpeakString("Soit une Distance : "+FloatToString(fDist)+" mètres !");
ActionWait(fDelay);
ActionSpeakString("Départ : "+IntToString(iSecA)+" secondes et "+IntToString(iMilA)+" millisecondes !");
ActionWait(fDelay);
ActionSpeakString("Soit : "+IntToString(iTimeA)+" millisecondes au Départ !");
ActionWait(fDelay);
ActionSpeakString("Arrivée : "+IntToString(iSecB)+" secondes et "+IntToString(iMilB)+" millisecondes !");
ActionWait(fDelay);
ActionSpeakString("Soit : "+IntToString(iTimeB)+" millisecondes a l'Arrivée !");
ActionWait(fDelay);
ActionSpeakString("Soit un Time de : "+IntToString(iTime)+" millisecondes !");
ActionWait(fDelay);
ActionSpeakString("SOIT : "+FloatToString(fSpeed)+" Km/Heure !");
}

Par coolstar le 6/1/2003 à 1:19:12 (#2953608)

Soit tu donnes le Départ en 'Criant' "go" (Mot sur le Clavier!)... sachant tout de même qu'il faut être à portée d'écoute pour que cela marche :


/* Script permettant au NPC de reconnaître un 'CRI'...
- By coolstar - A mettre dans le 'OnSpawn' : */

void main()
{
object oObject = OBJECT_SELF; // NPC

SetListening(oObject, TRUE); // Met le NPC à l''Ecoute' de tout PATTERN
SetListenPattern(oObject, "go", 1); // Pattern '1' déclenché par "go"
}


/* Script permettant de Déclencher le Test de Vitesse à partir du PATTERN...
- By coolstar - A mettre dans le OnConversation : */

void main()
{
// DECLARATION DES VARIABLES :
object oRunner = GetObjectByTag("Runner"); // Le NPC Coureur
object oDest = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC); // Le PC le plus proche
int iNoConv = !IsInConversation(oRunner); // On s'assure que le NPC n'est pas en Conversation
int iPattern01 = GetListenPatternNumber() == 1; // On Vérifie que le PATTERN '1' (go) a bien ete 'CRIEE'
int iTimeSec = GetTimeSecond(); // Les Secondes au Départ
int iTimeMil = GetTimeMillisecond(); // Les Millisecondes au Départ
float fDist = GetDistanceBetween(oRunner, oDest); // Distance 'entre' le NPC et le PC au Départ
string sVarTimeSec = "Seconde"; // Variable "Seconde"
string sVarTimeMil = "Milliseconde"; // Variable "Milliseconde"
string sVarDist = "Distance"; // Variable "Distance"
string sDial = "test"; // Ref du "Dial de Bilan"

if(iNoConv && iPattern01) // Si les 2 'Conditions' sont respectées :
{
// On Repere le moment du Depart :
SetLocalInt(oDest, sVarTimeSec, iTimeSec); // Récupération des Secondes
SetLocalInt(oDest, sVarTimeMil, iTimeMil); // Récupération des Millisecondes
// On Repere la Distance de Course :
SetLocalFloat(oDest, sVarDist, fDist);

// On Déclenche le Départ de la Course :
AssignCommand(oRunner, ActionMoveToObject(oDest)); // Mode MARCHE par defaut
AssignCommand(oRunner, ActionStartConversation(oDest, sDial)); // Le NPC s'adressera alors au PC
}
// Si le NPC se retrouve a devoir Converser et qu'il n'est pas occupe par un PATTERN :
else BeginConversation(); // Démarrer la Conversation dont le NPC est le 'Propriétaire'
}


// Idem que pour le Script du Post ci-dessus, concernant l'insertion dans le Dial "test"...

JOL Archives 1.0.1
@ JOL / JeuxOnLine