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

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

chargement de zone avec variable (Cassin et Mobidique, je sais que vous savez !)

Par Le Hamster le 14/10/2002 à 9:55:32 (#2331936)

Petite question :

J'ai dans mon jeu une zone où l'on surprend une fille toute nue alors qu'elle va prendre son bain. Bien sûr elle voit le PJ et court s'habiller avant de lancer un dialogue. (L'un d'entre vous m'avait bcp bcp aidé à faire cette animation, merci merci merci).

Je pense soudainement à une truc, que dois-je faire pour que chaque fois que la zone est vidée des PJ, si l'un d'entre y revient, il redécouvre à nouveau la minette prête à prendre son bain. Donc rebelote sur l'animation mais les dialogues changent parce que ça commence à chauffer la minette de voir débarquer sans cesse des gens. L'idéal étant qu'à la troisième fois, elle ferme sa porte à clef définitivement à la fin du dialogue. Oups, ça fait trois zones ça ? Je me trompe ?

Vous voyez ce que je veux dire ?

Je dois utiliser les SetLocalInt ? Autre chose ? Mais où et comment et pourquoi et vous avez de l'aspirine ?


Bises

Par Le Hamster le 16/10/2002 à 10:58:48 (#2344320)

C'est juste pour faire remonter.

Mon problème se situe au niveau d'une partie en multijoueurs.

Par exemple :

PJ 1 entre dans la zone sans PJ2 et ressort. Puis PJ2 entre à son tour, il ne doit pas voir la même chose que PJ1.


OIIIIIIIN, je sais pas si je suis clair ????

:sanglote:


Bises

Par eMRaistlin le 16/10/2002 à 11:28:49 (#2344472)

Rien de plus simple :


A priori, tu pose le SinLocalInt sur le PC qui rentre... Je me trompe ? resultat, si le joueur ressort, et qu'un autre entre, alors la fille reprends La scene 1, c'est bien ca ?


Pour changer ca, tu affecte la "Localint" a la fille, ou a l'area ou a autre chose qui ne variera pas.


Par contre, si tu as crée les 3 area dont tu parle (Tu t'es embete pour pas grand chose, mais bon, ce qui est fait est fait...), dans ce cas, il faut que la porte reagisse a ce marqueur, donc je te conseille d'affecter la valeur local a la porte.

Si c'est en utilisant differents dialogue que tu as géré ca (ce qui est mieux), alors affecte la variable sur la fille, ce sera plus simple au niveau de la gestion de tes variables....


En esperant avoir repondu....

merci

Par Le Hamster le 16/10/2002 à 12:10:34 (#2344692)

J'ai tellement la trouille de faire des conneries et de jamais les trouver que je préfère m'embêter avec 3 zones.

En effet, comme ça, c'est plus simple pour moi, la minette redémarre depuis sa salle de bain et je peux déclencher des animations différentes sans soucis.

Alors, si je fais la chose suivante :

je trouve un truc pour que la porte se referme toute seule au bout d'un temps. (j'ai vu ça quelque part)

Je mets une variable sur le OnOpen, un truc qui dirait, ouvert une fois hop chargement zone 1, ouvert deux fois, chargement zone 2, etc..

ça parait idiot ?

Remarquez, si ça l'est pas, je sais pas plus comment le scripter MDR !!!


Bises

Par eMRaistlin le 16/10/2002 à 12:19:51 (#2344753)

Oui, ca marchera, mais le plus simple, vu que tu change d'area a chaque fois, c'est encore la chose suivant :

Sur le OnUsed (ou OnOpen) de la porte, tu alloue un script de warp, dans ce script, tu fais 3 choses :

- Tu incremente une variable locale a la porte qui comptabilise le nombre d'ouverture.

- Tu fais en sorte que suivant le nombre d'ouverture, tu warp vers une area differente.

- Tu referme la porte.

Comme ca, pour le pj, c'est invisible, la fermeture de porte, vu qu'il est Jumpé. Mais un autre joueur verra la porte fermée. ^^

Tu vois, c'est tout simple.
PS : Je te fais pas le code. Je trouve ca mieux de corriger un code faux que de creer un code de toute piece. C'est plus "educatif", si je puis dire.

Si vraiment tu y arrive pas, je ferai le script, mais il y aurait moins a apprendre.

j'ai honte

Par Le Hamster le 16/10/2002 à 12:47:46 (#2344921)

C'est pas que je suis faineant (ça fait 4 mois que je m'échine sur mon truc), mais je suis une référence en nullissimité !!

Bon, si je t'écoute je ne serais capable que de faire un genre de truc suivant :

Sur le onopen :

object oPorte = GetObjectByTag("MaisonPoupee");

SetLocalIn ("PorteMaisonPoupée"), +1));

If LocalIn("PorteMaisonPoupée") == 1);
WarpPlayersToArea(GetAreaByTag("MaisonPoupée));

but If LocalIn("PorteMaisonPoupée") == 2);
Alors WarpPlayersToArea(GetAreaByTag("MaisonPoupée1));

And Then If LocalIn("PorteMaisonPoupée") == 3);
Alors WarpPlayersToArea(GetAreaByTag("MaisonPoupée2));

InAllCases DelayCommand(200.0 , ACTION_CLOSE_DOOR(oPorte));


Bon, je déconne, mais je suis désolé. Je suis réellement incapable de créer de toutes pièces un script sans partir de ceux que j'ai déjà. Si tu n'as pas le temps ou l'envie de me l'écrire ce n'est abosulement pas grave. Je fais comme l'as dit Mobidique dans ces derniers conseils : AUTREMENT. (et je rajoute, "et si je ne peux pas faire autrement, je ne le fais pas et je trouve une autre histoire.)

Si toutefois, tu te lances, voici les différents Tags :


Tag de la Porte "MaisonPoupee"
Tag destination à la première utilisation : "SortieMaisonPoupee"
Tag destination à la 2ème utilisation : "SortieMaisonPoupee1"
Tag destination à la 3ème utilisation : "SortieMaisonPoupee2"

On pourrait fermer la porte après 3 minutes, comme ça ça laisse le temps aux autres PJ d'entrer. Tant si certains ouvrent et ne rentrent pas !

Je pense pas qu'il faille autre chose.

Merci et encore, si tu peux pas, pas de problème, j'assume mon incompétence.


Bises

Par eMRaistlin le 16/10/2002 à 13:14:53 (#2345158)

C'est pas mal, pour 1 premier jet ^^

Bon, juste pour info, un script executé par un evenement est toujours du type Main, donc, tu le commence comme ca :


void main()
{

//Apres, on declare les variables

object oPorte = GetObjectByTag("MaisonPoupee");
//ca marcherait aussi avec un truc plu generique,
//genre OBJECT_SELF, vu que tu l'affecte a la porte.

int nNB_Open=GetLocalInt(oPorte,"NB_Ouverture");

//On va avoir besoin du joueur qui a ouvert la porte.
object oPC = GetLastOpenedBy();

//Puis, ci dessous, tu met en variable les 3 tag de 3 waypoint
//judicieusement placé dans chaque aréa de retour.

location lFirstTime = GetLocation(GetObjectByTag("TAG_DU_WAYPOINT" ));
location lSecondTime = GetLocation(GetObjectByTag("TAG_DU_WAYPOINT2" ));
location lThirdTimeNmore = GetLocation(GetObjectByTag("TAG_DU_WAYPOINT3" ));


//Puis, on passe aux choses serieuse :

//incrementation du nombre d'ouverture :
nNB_Open=nNB_Open+1; //(tu peux aussi ecrire nNB_Open++)
//Je le note, ca peut toujours servir apres ^^
SetLocalInt(oPorte,"NB_Ouverture",NB_Open);

if (nNB_Open==1)
{
AssignCommand(oPC,JumpToLocation(lFirstTime));
//Le assigncommand, c'est pour eviter de demander au script
// de faire un truc debile genre Jump la porte (^^)
//en effet, je te rappele que ce qui appele ce script,
//c'est la porte, via l'event OnOpen...
}

//La, je copie/ colle / modifie les chiffres ^^
if (nNB_Open==2)
{
AssignCommand(oPC,JumpToLocation(lSecondTime));
}
if (nNB_Open>=3)
{
AssignCommand(oPC,JumpToLocation(lThirdTimeNmore ));
}

//Bien, on a presque fini... plus qu'a fermer la porte.

DelayCommand (180.0, ActionCloseDoor(oPorte));
//J'ai mis 180secondes, tu peut le changer, of course
//(par experience, 3minutes, c'est trop...)
}

Et voila !! (c'est non testé, mais ca devrait etre pas mal ^^)

[Edit : mise en forme]

merci

Par Le Hamster le 16/10/2002 à 13:35:56 (#2345338)

merci merci smackcs smacks

Avant de mettre tout ça en oeuvre, si je comprends bien, dès l'ouverture de la porte le PJ est balancé dans l'autre zone, il n'a pas le choix d'entrer ou pas ?

Que ce passera-t-il donc par exemple si (en multi) un autre PJ entre par la porte encore ouverte ?

Bon, mais je vais faire le test, problème, je ne peux le faire qu'en solo !!


Bises encore

Par eMRaistlin le 16/10/2002 à 14:02:49 (#2345595)

Avant de mettre tout ça en oeuvre, si je comprends bien, dès l'ouverture de la porte le PJ est balancé dans l'autre zone, il n'a pas le choix d'entrer ou pas ?


C'est exact. Si tu prefere, tu peux mettre une area transition derriere la porte, et affecté le script modifie suivant sur le OnClick.


#include "nw_i0_plot"
void main()
{

object oPorte = GetObjectByTag("MaisonPoupee");

int nNB_Open=GetLocalInt(oPorte,"NB_Ouverture");

object oPC = GetNearestPC();

location lFirstTime = GetLocation(GetObjectByTag("TAG_DU_WAYPOINT" ));
location lSecondTime = GetLocation(GetObjectByTag("TAG_DU_WAYPOINT2" ));
location lThirdTimeNmore = GetLocation(GetObjectByTag("TAG_DU_WAYPOINT3" ));

nNB_Open=nNB_Open+1; //(tu peux aussi ecrire nNB_Open++)
SetLocalInt(oPorte,"NB_Ouverture",NB_Open);

if (nNB_Open==1)
{
AssignCommand(oPC,JumpToLocation(lFirstTime));
}
if (nNB_Open==2)
{
AssignCommand(oPC,JumpToLocation(lSecondTime));
}
if (nNB_Open>=3)
{
AssignCommand(oPC,JumpToLocation(lThirdTimeNmore ));
}
DelayCommand (180.0, ActionCloseDoor(oPorte));
}


J'ai changé le code vite fait, histoire d'inclure le PC le plus proche de l'area transition. (ATTENTION, J'ai utilisé le GetNearestPC, ca veut dire qu'en DM, ca march emal, et que si un autre PC est plus proche que le PC de la transition, c'est lui qui jump... Navré, mais je me rappelle plus du Get adequat pour le OnClick...)

Par Symphonik le 17/10/2002 à 11:24:12 (#2350766)

ca sera pas GetClickingObject() ?

Par eMRaistlin le 17/10/2002 à 11:46:12 (#2350894)

ca semble pas mal :mdr: :mdr: :mdr: :mdr: :mdr: :mdr: :mdr:

Par Daynos le 17/10/2002 à 12:12:11 (#2350973)

J'avais quelques remarques d'ordre général sur la syntaxe, j'ai mis ça là : http://forums.jeuxonline.info/showthread.php?s=&postid=2350950

Par Daynos le 17/10/2002 à 12:14:57 (#2350975)

J'avais quelques remarques d'ordre général sur la syntaxe, j'ai mis ça là : http://forums.jeuxonline.info/showthread.php?s=&postid=2350950

JOL Archives 1.0.1
@ JOL / JeuxOnLine