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

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Appel d'un "Stritis" en détresse

Par Stritis le 30/10/2002 à 17:14:06 (#2442136)

Voila pourriez vous m'expliquer comment faire:

-Bon je vais encore vous poser mon probleme j'aimerai que deux enfants ce coure apres et que en meme temps il parle , il s'arrete il discute un peu et recommence mais j'ai vraiment AUCUNE idee de ce qu'il faut faire deja j'ai du mal pour les trucs simple mais ça , je capte rien! donc si vous pouviez un peu m'aider encore une fois

Par Stritis le 30/10/2002 à 17:23:57 (#2442219)

Escusez pour ce double post mais j'ai eu une petie mesaventure en testant mon module car san faire expres j'ai remplace le script par defaut dans le OnHeartbeat et j'ai mis:

void main()
{
ClearAllActions();
ActionSpeakString("Venez voir mes bon produits!");
ActionWait(1.5);
ActionSpeakString("Vous ne serez pas decu!");
ActionWait(1.5);
ActionSpeakString("Que des produits frais!");
ActionWait(1.5);
}

c'est assez marrant de voir les gobelins criez "Venez voir mes bons produits" mais c'est pas tres RP:mdr: alors il me faudrait le script par default mais j'aimerai que l'on entende crier qu'a 10 metres ou moins je dois rajouter quoi?

Par mobidique le 30/10/2002 à 17:51:38 (#2442444)

bon on reprend ... Tu fais un post par sujet, tu fais un titre clair "un stritis en détresse" ça renseigne absolument pas sur la nature du PB, tu rédiges un post clair (là t'as bon) tu mets ton code entre des balise php c'est à dire comme ça


sdmlkjlmqkjglmkjqg
(fais citer sur mon message pour voir comment c'est fait) si possible tu indentes ton code c'est à dire que tu le rend plus clair en mettant 4 espaces devant les sections structurante de ton code (mais là j'exagère sans doute mais tant qu'à faire ;)) et pour finir tu vas lire ça

http://forums.jeuxonline.info/showthread.php?s=&threadid=104331
http://forums.jeuxonline.info/showthread.php?s=&threadid=128089

PLZ. C'est pas pour faire chier mais d'une part de ton coté tu veux des réponse et du notre on veut pas forcément perdre du temps avec quelqu'un qui prend pas la peine de nous faciliter le travail (J'me la pete un peu ces derniers temps hein :( ...j'vais me mettre au vert ... )

Pour tes momes qui se courent aprés il faut éditer leur script OnSpawn, à la fin modifier l'appel de la fonction walkwaypoint pour qu'ils courrent tu sauvergardes ce nouveau on Spawn sous un autre nom, OnSpawn_Run ensuite tu donnes à tes mômes le même tag JOUEURS par exemple et pour finir tu crées des Waypoints avec le nom WP_JOUEURS_XX où XX est le numéro du WP et enfin si tu veux qu'ils s'arrettent un moment à ces waypoints tu change un parametre dans le walkwaypoints de ton OnSpawn_Run pour qu'ils s'arrettent quelques secondes et au pied de ton Waypoints tu met un triggers enclenchant une conversation. C'est une soluce à peu prés comme toutes mes soluces et en la mettant en oeuvre tu apprendras plein de chose aprés quoi une fois que ça marchera tu auras le plaisir de nous montrer ton script et nous le plaisir de voir notre communauté s'aggrandir d'un membre actif et not' bib de script d'une soluce supp :)

Par LeProctophantasmiste le 30/10/2002 à 17:57:45 (#2442491)

Pour le script par défaut, sauvegarde ce que tu as fait sous un autre nom si tu veux le garder, et efface simplement nw_c2_default1 de la liste de scripts de ton module (click droit dessus). Ne t'inquiète pas le script de Bioware est dans l'override il sera à nouveau dispo quand tu aura supprimé le tiens.

Pour le script, je ne peux pas le faire pour toi étant donné que cela dépend de ce que tu veux faire précisément:

En gros ça pourrait ressembler à ce que tu as fait pour ton épicier, sauf qu'il faut que tu commandes les deux enfants à partir d'un seul script (appartenant au premier) pour pouvoir synchroniser:


object oEnfant2 = GetObjectByTag(...)
ActionMoveToObject(...)
ActionDoCommand(AssignCommand(oEnfant2,ActionMoveToObject(...)));
ActionSpeakString(...);
ActionWait(...);
ActionDoCommand(AssignCommand(oEnfant2,SpeakString(...)));
....

Remarque que c'est n'est pas du tout pareil de mettre un ActionDoCommand avant, ou après un AssignCommand. Il faut se faire un peu au fonctionnement de la queue d'action, surtout quand on manipule plusieurs objets qui ont par conséquent des queues différentes.


Edit: Ou alors tu fait comme Mobidique le propose parce que c'est mieux :) . Fait attention à la synchro tout de même

Par Stritis le 30/10/2002 à 18:01:06 (#2442518)

Provient du message de mobidique
bon on reprend ... Tu fais un post par sujet, tu fais un titre clair "un stritis en détresse" ça renseigne absolument pas sur la nature du PB, tu rédiges un post clair (là t'as bon) tu mets ton code entre des balise php c'est à dire comme ça

sdmlkjlmqkjglmkjqg
(fais citer sur mon message pour voir comment c'est fait) si possible tu indentes ton code c'est à dire que tu le rend plus clair en mettant 4 espaces devant les sections structurante de ton code (mais là j'exagère sans doute mais tant qu'à faire ;)) et pour finir tu vas lire ça

http://forums.jeuxonline.info/showthread.php?s=&threadid=104331
http://forums.jeuxonline.info/showthread.php?s=&threadid=128089

PLZ. C'est pas pour faire chier mais d'une part de ton coté tu veux des réponse et du notre on veut pas forcément perdre du temps avec quelqu'un qui prend pas la peine de nous faciliter le travail (J'me la pete un peu ces derniers temps hein :( ...j'vais me mettre au vert ... )

Pour tes momes qui se courent aprés il faut éditer leur script OnSpawn, à la fin modifier l'appel de la fonction walkwaypoint pour qu'ils courrent tu sauvergardes ce nouveau on Spawn sous un autre nom, OnSpawn_Run ensuite tu donnes à tes mômes le même tag JOUEURS par exemple et pour finir tu crées des Waypoints avec le nom WP_JOUEURS_XX où XX est le numéro du WP et enfin si tu veux qu'ils s'arrettent un moment à ces waypoints tu change un parametre dans le walkwaypoints de ton OnSpawn_Run pour qu'ils s'arrettent quelques secondes et au pied de ton Waypoints tu met un triggers enclenchant une conversation. C'est une soluce à peu prés comme toutes mes soluces et en la mettant en oeuvre tu apprendras plein de chose aprés quoi une fois que ça marchera tu auras le plaisir de nous montrer ton script et nous le plaisir de voir notre communauté s'aggrandir d'un membre actif et not' bib de script d'une soluce supp :)


Bon d'accord le titre c'etait un gros delire :maboule: et bon c'est vrai que c'est pas comprehensible , bon je promet d'essayer de respecter plus les regles du forum et bon sinon ça va tu te la pete pas trop :D C'est raisonnable !:mdr:

void main()
{
ClearAllActions();
ActionSpeakString("Venez voir mes bon produits!");
ActionWait(1.5);
ActionSpeakString("Vous ne serez pas decu!");
ActionWait(1.5);
ActionSpeakString("Que des produits frais!");
ActionWait(1.5);
}


Sinon il ya un site ou j'ai trouve plein de script pas mal je peux donner l'adresse meme si la plupart d'entre vous la connaisse c'est juste pour les nouveaux

Par mobidique le 30/10/2002 à 18:07:05 (#2442565)

Provient du message de LeProctophantasmiste
Edit: Ou alors tu fait comme Mobidique le propose parce que c'est mieux :) . Fait attention à la synchro tout de même


Justemment ... en y repensant ... Les gamins qui courrent j'ai fait ça dans trashcity2 et rapidemment il fint par y avoir un décalage entre les enfants. Enfin perso c'était pas un pb because y se causaient pas les mômes mais il suffit qu'un pc arrette un môme ou qu'un autre soit stoppé par un NPC et il y a un décalage ... Faut sand oute arretter le walkwaypoints sur le onenter du trigger et le relancer à la fin du dialog ... Ca serait pas mal comme ça ...

Par Tyn' le 31/10/2002 à 4:30:28 (#2446044)

Même que c'est super bien plus agréables à lire avec 4 espaces de décalage à chaque accolade :

void main()
{ //Accolade
int nMonInt = MaFonction(); //4 espaces avant
if(nMonInt > MA_CONSTANTE)
{ //Accolade
MaDeuxiemeFonction(); //8 espaces avant
} //Accolade fermante
Next(); //4 espaces avant
} //Accolade fermante
// Plus d'espace avant
:D

Pour ton script :
Dans le OnEnter de ton Area où les enfants se chamaillent:
void main()
{
SignalEvent(GetArea(OBJECT_INVALID),EventUserDefined(2000)); //On signale l'UDE "Courrez les gosses !" a la zone
}
Dans le OnUserDefined de ton Area où les enfants se chamaillent:
//Fonction pour recuperer une phrase de gamin au hasard
string GetRandomChildrenString();

void main()
{
int nEvent = GetUserDefinedEventNumber();

string sGosse1 = "MonPremierGosse"; //Remplacer par les
string sGosse2 = "MonDeuxiemeGosse"; //tags reels, of course
object oGosse1 = GetObjectByTag(sGosse1);
object oGosse2 = GetObjectByTag(sGosse2);
object oAleatoryGosse;
int nRandom;
switch(nEvent)
{
case 2000:
//Event "Courrez les gosses!"
if(Random(3) == 0) //Une chance sur trois pour que les gosses s'arretent
{
SignalEvent(GetArea(OBJECT_INVALID),EventUserDefined(2001)); //Event "Stop !"
}else{
SignalEvent(GetArea(OBJECT_INVALID),EventUserDefined(2002)); //Event "Courrez !"
}
break;
case 2001:
AssignCommand(oGosse1,ClearAllActions()); //On ne
AssignCommand(oGosse2,ClearAllActions()); //bouge plus!
//On tire un delai au hasard avant sa phrase (legerement variable m'enfin)
AssignCommand(oGosse1,ActionWait(IntToFloat(Random(50)) / 10.0f));
AssignCommand(oGosse2,ActionWait(IntToFloat(Random(50)) / 10.0f));
//On tire un gosse au hasard pour que ca ne soit pas toujours le meme qui dise un truc
if(Random(2) == 0)
{
oAleatoryGosse = oGosse1;
}else{
oAleatoryGosse = oGosse2;
}
//On lui fait dire un truc aleatoire
AssignCommand(oAleatoryGosse,ActionSpeakString(GetRandomChildrenString()));
//Une chance sur 5 qu'ils continuent a pas bouger, sinon ils recommencent a courrir
if(Random(5) == 0)
{
SignalEvent(GetArea(OBJECT_INVALID),EventUserDefined(2001));
}else{
SignalEvent(GetArea(OBJECT_INVALID),EventUserDefined(2002));
}
break;
case 2002:
AssignCommand(oGosse1,ClearAllActions()); //A vos marques,
AssignCommand(oGosse2,ClearAllActions()); //prets..
//Petit moment de concentration..
nRandom = Random(25);
AssignCommand(oGosse1,ActionWait(IntToFloat(nRandom) / 10.0f));
AssignCommand(oGosse2,ActionWait(IntToFloat(nRandom) / 10.0f));
//PARTEZ !!
if(Random(2) == 0) //Qui courera le plus vite ?
{
AssignCommand(oGosse1,ActionMoveAwayFromObject(oGosse2,TRUE,5.0f)); //Depart du premier
AssignCommand(oGosse2,ActionWait(0.75f)); //3/4 de seconde d'avance
AssignCommand(oGosse2,ActionMoveToObject(oGosse1,TRUE,6.0f)); //Et on y va !
}else{
AssignCommand(oGosse2,ActionMoveAwayFromObject(oGosse1,TRUE,5.0f)); //Depart du premier
AssignCommand(oGosse1,ActionWait(0.75f)); //3/4 de seconde d'avance
AssignCommand(oGosse1,ActionMoveToObject(oGosse2,TRUE,6.0f)); //Et on y va !
}
//Pendant combien de temps ils vont courrir ?
DelayCommand(IntToFloat(Random(15)),SignalEvent(GetArea(OBJECT_INVALID),EventUserDefined(2001)));
break;
}
}

string GetRandomChildrenString()
{
int nNumberPhrases = 5; //Nombre de phrases

int nRandom = Random(nNumberPhrases) + 1;
string sReturn;
switch(nRandom)
{
case 1: sReturn = "Hihihi!"; break;
case 2: sReturn = "Arrêteuh !"; break;
case 3: sReturn = "*Tire la langue*"; break;
case 4: sReturn = "Nananananère!!"; break;
case 5: sReturn = "Pfff!"; break;
}
return sReturn;
}
La vache, c'est beau. :ange: Les sales gosses :D

Par Morethil le 31/10/2002 à 15:51:14 (#2449759)

Impressionnant Tyn' :eek:

Par LeProctophantasmiste le 31/10/2002 à 16:02:37 (#2449854)

:merci: Si ça c'est pas du dévouement!

Tynril, quitte à faire un nouveau fil je pense que ça vaudrait le coup que tu le mettes dans le sommaire des scripts.

Par mobidique le 31/10/2002 à 16:30:13 (#2450084)

L'utilisation de moveawayfromobject me fait penser à un script de fuite d'un cerf en présence ... d'un PC non range non druide ... Ca marchait pas trés bien ... Mais je crois que c'était en partie lié à l'utilisation de OnPercieved qui doit envoyer des infos que lorsqu'il y a une nouvelle perception...

Cependant je me demande quand même le moveawayfromobject va être un odre permanent jusqu'a ce qu'un clearallaction intervienne ? Le OnHeartBeat remet pas les pendules à 0 ? En particulier si on a un OnSpawn lançant des animations mobiles ou immobiles (mais là évidemment compte tenu de ce script, utiliser de tels animation est inutile ... )

Par Stritis le 1/11/2002 à 19:45:32 (#2457693)

Provient du message de Tynril
Même que c'est super bien plus agréables à lire avec 4 espaces de décalage à chaque accolade :
void main()
{ //Accolade
int nMonInt = MaFonction(); //4 espaces avant
if(nMonInt > MA_CONSTANTE)
{ //Accolade
MaDeuxiemeFonction(); //8 espaces avant
} //Accolade fermante
Next(); //4 espaces avant
} //Accolade fermante
// Plus d'espace avant
:D

Pour ton script :
Dans le OnEnter de ton Area où les enfants se chamaillent:
void main()
{
SignalEvent(GetArea(OBJECT_INVALID),EventUserDefined(2000)); //On signale l'UDE "Courrez les gosses !" a la zone
}
Dans le OnUserDefined de ton Area où les enfants se chamaillent:
//Fonction pour recuperer une phrase de gamin au hasard
string GetRandomChildrenString();

void main()
{
int nEvent = GetUserDefinedEventNumber();

string sGosse1 = "MonPremierGosse"; //Remplacer par les
string sGosse2 = "MonDeuxiemeGosse"; //tags reels, of course
object oGosse1 = GetObjectByTag(sGosse1);
object oGosse2 = GetObjectByTag(sGosse2);
object oAleatoryGosse;
int nRandom;
switch(nEvent)
{
case 2000:
//Event "Courrez les gosses!"
if(Random(3) == 0) //Une chance sur trois pour que les gosses s'arretent
{
SignalEvent(GetArea(OBJECT_INVALID),EventUserDefined(2001)); //Event "Stop !"
}else{
SignalEvent(GetArea(OBJECT_INVALID),EventUserDefined(2002)); //Event "Courrez !"
}
break;
case 2001:
AssignCommand(oGosse1,ClearAllActions()); //On ne
AssignCommand(oGosse2,ClearAllActions()); //bouge plus!
//On tire un delai au hasard avant sa phrase (legerement variable m'enfin)
AssignCommand(oGosse1,ActionWait(IntToFloat(Random(50)) / 10.0f));
AssignCommand(oGosse2,ActionWait(IntToFloat(Random(50)) / 10.0f));
//On tire un gosse au hasard pour que ca ne soit pas toujours le meme qui dise un truc
if(Random(2) == 0)
{
oAleatoryGosse = oGosse1;
}else{
oAleatoryGosse = oGosse2;
}
//On lui fait dire un truc aleatoire
AssignCommand(oAleatoryGosse,ActionSpeakString(GetRandomChildrenString()));
//Une chance sur 5 qu'ils continuent a pas bouger, sinon ils recommencent a courrir
if(Random(5) == 0)
{
SignalEvent(GetArea(OBJECT_INVALID),EventUserDefined(2001));
}else{
SignalEvent(GetArea(OBJECT_INVALID),EventUserDefined(2002));
}
break;
case 2002:
AssignCommand(oGosse1,ClearAllActions()); //A vos marques,
AssignCommand(oGosse2,ClearAllActions()); //prets..
//Petit moment de concentration..
nRandom = Random(25);
AssignCommand(oGosse1,ActionWait(IntToFloat(nRandom) / 10.0f));
AssignCommand(oGosse2,ActionWait(IntToFloat(nRandom) / 10.0f));
//PARTEZ !!
if(Random(2) == 0) //Qui courera le plus vite ?
{
AssignCommand(oGosse1,ActionMoveAwayFromObject(oGosse2,TRUE,5.0f)); //Depart du premier
AssignCommand(oGosse2,ActionWait(0.75f)); //3/4 de seconde d'avance
AssignCommand(oGosse2,ActionMoveToObject(oGosse1,TRUE,6.0f)); //Et on y va !
}else{
AssignCommand(oGosse2,ActionMoveAwayFromObject(oGosse1,TRUE,5.0f)); //Depart du premier
AssignCommand(oGosse1,ActionWait(0.75f)); //3/4 de seconde d'avance
AssignCommand(oGosse1,ActionMoveToObject(oGosse2,TRUE,6.0f)); //Et on y va !
}
//Pendant combien de temps ils vont courrir ?
DelayCommand(IntToFloat(Random(15)),SignalEvent(GetArea(OBJECT_INVALID),EventUserDefined(2001)));
break;
}
}

string GetRandomChildrenString()
{
int nNumberPhrases = 5; //Nombre de phrases

int nRandom = Random(nNumberPhrases) + 1;
string sReturn;
switch(nRandom)
{
case 1: sReturn = "Hihihi!"; break;
case 2: sReturn = "Arrêteuh !"; break;
case 3: sReturn = "*Tire la langue*"; break;
case 4: sReturn = "Nananananère!!"; break;
case 5: sReturn = "Pfff!"; break;
}
return sReturn;
}
La vache, c'est beau. :ange: Les sales gosses :D


J'ai essaye mais ça marche pas , les enfants ne bougent pas:eek:

Par Tynril le 1/11/2002 à 20:36:55 (#2458039)

En fait c'est foireux ces ActionWait. J'avais essayé aussi et changé un peu :

//Fonction pour recuperer une phrase de gamin au hasard
string GetRandomChildrenString();
void d(string sMsg);

void main()
{
int nEvent = GetUserDefinedEventNumber();
SendMessageToPC(GetFirstPC(),"Event EUD recu...");
string sGosse1 = "tGosseDrowF"; //Remplacer par les
string sGosse2 = "tGosseDrowM"; //tags reels, of course
object oGosse1 = GetObjectByTag(sGosse1);
object oGosse2 = GetObjectByTag(sGosse2);
object oAleatoryGosse;
int nRandom;
switch(nEvent)
{
case 2000:
//Event "Courrez les gosses!"
d("Event 2000 : Courrez les gosses!");
d("On tire le random pour savoir ce qu'ils vont faire");
if(Random(3) == 0) //Une chance sur trois pour que les gosses s'arretent
{
d("Le hasard a choisit : stop (EUD 2001)");
SignalEvent(GetArea(oGosse1),EventUserDefined(2001)); //Event "Stop !"
}else{
d("Le hasard a choisit : courret (EUD 2002)");
SignalEvent(GetArea(oGosse1),EventUserDefined(2002)); //Event "Courrez !"
}
break;
case 2001:
d("Event 2001 : On ne bouge plus!");
AssignCommand(oGosse1,ClearAllActions()); //On ne
AssignCommand(oGosse2,ClearAllActions()); //bouge plus!
d("Les gosses sont figes");
//On tire un delai au hasard avant sa phrase (legerement variable m'enfin)
//On tire un gosse au hasard pour que ca ne soit pas toujours le meme qui dise un truc
if(Random(2) == 0)
{
d("Le hasard a choisit que ct la fille qui allait dire un truc");
oAleatoryGosse = oGosse1;
}else{
d("Le hasard a choisit que ct le mec qui allait dire un truc");
oAleatoryGosse = oGosse2;
}
//On lui fait dire un truc aleatoire
d("On lui fait dire un truc");
nRandom = Random(10);
DelayCommand(IntToFloat(nRandom) / 10.0f,AssignCommand(oAleatoryGosse,ActionSpeakString(GetRandomChildrenString())));
//Une chance sur 5 qu'ils continuent a pas bouger, sinon ils recommencent a courrir
if(Random(5) == 0)
{
d("Le hasard a choisit qu'ils diraient encore un truc (EUD2001)");
DelayCommand(IntToFloat(nRandom) / 10.0f + 0.75f,SignalEvent(GetArea(oGosse1),EventUserDefined(2001)));
}else{
d("Le hasard a choisit qu'ils courreraient (EUD2002");
DelayCommand(IntToFloat(nRandom) / 10.0f + 0.75f,SignalEvent(GetArea(oGosse1),EventUserDefined(2002)));
}
break;
case 2002:
d("Event 2002 : Gogogo !");
AssignCommand(oGosse1,ClearAllActions()); //A vos marques,
AssignCommand(oGosse2,ClearAllActions()); //prets..
d("Les gosses sont figes");
//Petit moment de concentration..
nRandom = Random(7);
d("Le hasard a choisit "+IntToString(nRandom/10)+" secondes d'attente");
//PARTEZ !!
if(Random(2) == 0) //Qui courera le plus vite ?
{
d("La fille part le plus vite");
DelayCommand(IntToFloat(nRandom),AssignCommand(oGosse1,ActionMoveAwayFromObject(oGosse2,TRUE,100.0f))); //Depart du premier
DelayCommand(IntToFloat(nRandom) + 0.75f,AssignCommand(oGosse2,ActionMoveToObject(oGosse1,TRUE,0.5f))); //Et on y va !
}else{
d("Le mec part le plus vite");
DelayCommand(IntToFloat(nRandom),AssignCommand(oGosse2,ActionMoveAwayFromObject(oGosse1,TRUE,100.0f))); //Depart du premier
DelayCommand(IntToFloat(nRandom) + 0.75f,AssignCommand(oGosse1,ActionMoveToObject(oGosse2,TRUE,0.5f))); //Et on y va !
}
//Pendant combien de temps ils vont courrir ?
d("On appelle l'EUD 2001");
DelayCommand(IntToFloat(nRandom + Random(15)) + 0.75f,SignalEvent(GetArea(oGosse1),EventUserDefined(2001)));
break;
}
}

string GetRandomChildrenString()
{
int nNumberPhrases = 5; //Nombre de phrases

int nRandom = Random(nNumberPhrases) + 1;
string sReturn;
switch(nRandom)
{
case 1: sReturn = "Hihihi!"; break;
case 2: sReturn = "Arrêteuh !"; break;
case 3: sReturn = "*Tire la langue*"; break;
case 4: sReturn = "Nananananère!!"; break;
case 5: sReturn = "Pfff!"; break;
}
d("Mini phrase choisie : "+sReturn);
return sReturn;
}

void d(string sMsg)
{
SendMessageToPC(GetFirstPC(),sMsg);
}
Tu peux virer les d() ou changer la fonction, c'était simplement pour tester les réactions. :)

JOL Archives 1.0.1
@ JOL / JeuxOnLine