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

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

eMRaistlin pres pour un otre probleme ???

Par ruru666 le 3/2/2003 à 16:03:31 (#3161957)

voila je v etre le plus detaillé possible. te rapels tu d un script ke je t avais demander a propos dun piege bien elaboré :

les aventuriers rentrent dans une salle avec 2 portes ouvertes. au moment ou ils sortent de cette piece les 2 portes ce ferment et un piege ce declenche.

Tu m avais pondu un truc bien costo avec une creature invis ki castait un nuage acide. mon probleme etait ke pour l instant je met ton script sous le coude pour ken ils seront plus haut nivo sinon je v les tuer tres rapidement...

donc g trouver une astuce en cherchant un peu (bcp) explications :

un trigger pour fermer les portes et declencher le piege :


void main()
{
object oPC = GetEnteringObject();
SetLocalInt(GetArea(OBJECT_SELF),"nSecondPiege",1);
{
if (GetIsPC(oPC))
{
object oPorte1 = GetNearestObjectByTag("RPORTE",oPC,1);
object oPorte2 = GetNearestObjectByTag("RPORTE",oPC,2);

ActionCloseDoor(oPorte1);
ActionCloseDoor(oPorte2);

SetLocked(oPorte1,TRUE);
SetLocked(oPorte2,TRUE);


}
}
}



puis le piege ki ce declenche dans un otre trigger :

dans le on enter :


void main()
{
if (GetLocalInt(GetArea(OBJECT_SELF),"nSecondPiege")==1)
{
object oPC = GetEnteringObject();
SetLocalInt(oPC, "bGril", TRUE);
ExecuteScript("be_gril_pc_vite", oPC);
}
}


dans le on exit :


void main()
{
object oPC = GetExitingObject();
DeleteLocalInt(oPC, "bGril");
}



et pour finir le script ki fais les degats :


//script "be_gril_pc_vite" :

void main()
{
object oPC = OBJECT_SELF;
if(GetLocalInt(oPC, "bGril"))
{
DelayCommand(6.0, ExecuteScript("be_gril_pc_vite", oPC));
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(1,DAMAGE_TYPE_FIRE), oPC);
}
}


Mon soucie c ke apparement les personnes ki sont deja entre dans le trigger (celui ki fais les degats) ne sont plus soumis a son effet, et si je le met dans le OHB ca part en cacahuet. et donc comme ils sont dans le pieges au moment ou il est sensé ce declencher comment modifier cela ???

si ta pa compris un truc avant de partir dans des complications demande moi :p (je voulais dire par la si g pas ete assez clair bien sure :) )

Par eMRaistlin le 3/2/2003 à 16:08:49 (#3162005)

chui désole : j'ai même pas lu :

- Le titre (s'il est sympa ^^) n'est pas clair.

- Le code n'est pas sous balises php.


Je ne vois pas pourquoi je devrait prendre sur moi de lire si tu prend pas sur toi de me donner envie de lire...

Met a jour, et je verrait ce que je peut faire.

(et je commence vraiment a me demander si tu ne le fais pas exprès... Ma patiente, dit-on, est sans limite, mais je sais que ce n'est pas vrai...)


[Edit : ceci etant, merci pour l'effort d'explication :p]

Par ruru666 le 3/2/2003 à 16:16:18 (#3162057)

voila desolé g pas fais expres milles excuses...

Par eMRaistlin le 3/2/2003 à 16:22:31 (#3162108)

Merci ^^
(en esperant que ca dure :))

Bien, question :

Ton PC, quand il rentre dans le trigger 2 (celui qui declenche le piege, pas celui qui ferme les portes), si tu le laisse dedans, que se passe t'il ?

Rien ?

Ton PC a t'il des protections ? (car EffectDamage est un effet magique par defaut)

et personnelement, sur le OnEnter et le OnExit, j'aurait aussi fait des test "if (GetIsPC(oPC))"

Par ruru666 le 3/2/2003 à 16:51:40 (#3162341)

en faite le piege marche c la combinaisont avec :

SetLocalInt(GetArea(OBJECT_SELF),"nSecondPiege",1);


ki perturbe le fonctionnement.

Je te detail les trigger :

Le premier ki ferme les portes se trouve a la sortie de la piece devant la porte de sortie.

le 2eme le piege, prend toute la surface de la piece pour toucher absolument tout les joueurs (creer une panik).

Donc etant donné ke les 2 trigger sont l un dans l otre, les joueurs sont deja dans celui ki fait office de piege, j imagine donc ke cela pose un probleme de "on enter" au moment ou ils active le piege en marchant sur le premier trigger.

Ais je bien repondu ou une otre information te faut il ?

Par eMRaistlin le 3/2/2003 à 16:58:05 (#3162386)

C'est exactement ca : tu ne declenche pas le Script de OnEnter apres etre entré...

Pour regler ce pb (et en gardant ta configuration de portes qui se ferment au dernier moment, si j'ai bien compris), il va te falloir un 3eme trigger a l'entree de la piece, qui initialise la variable.

Le mieux, je pense, et le plus simple : met le 1er trigger, qui ferme les portes, juste apres l'entree, et non juste avant la sortie... ca devrait etre mieux. (essaye de faire en sorte que le 1er trigger soit pénétré par les PJ en premiers.)

Par Jaha Effect le 3/2/2003 à 17:00:15 (#3162404)

C'est bien ce qu'il me semblait, surtout que le GetArea va te renvoyer une zone ce qui n'a rien a voir avec ton trigger.

Jaha Effect :D

Par ruru666 le 3/2/2003 à 17:27:05 (#3162660)

oui mais l effet esconté n est plus du tout le meme et je viens donc d avoir une idée tout bete mais je c pa faire si je mettait dans le on enter du trigger "piege" un delais pour faire les degats au lieu d un system imbriké ca me plais plus donc a la place de mettre ca pour les 2 :

PHP:--------------------------------------------------------------------------------
SetLocalInt(GetArea(OBJECT_SELF),"nSecondPiege",1);

--------------------------------------------------------------------------------

je mettrais bien un timer pour declancher les degats plus tard, donc comment fo faire :) ??

Par eMRaistlin le 3/2/2003 à 17:34:34 (#3162724)

DelayCommand(10.0,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(1),oPC));

Par ruru666 le 3/2/2003 à 18:07:33 (#3163010)

OUPS derniere chose comment fais ton pour ke le premier trigger ne ce déclenche kune fois ? C a d ke les portes ne ce ferme kune seule fois ?

CF le script :



void main()
{
object oPC = GetEnteringObject();
{
if (GetIsPC(oPC))
{
object oPorte1 = GetNearestObjectByTag("RPORTE",oPC,1);
object oPorte2 = GetNearestObjectByTag("RPORTE",oPC,2);

ActionCloseDoor(oPorte1);
ActionCloseDoor(oPorte2);

SetLocked(oPorte1,TRUE);
SetLocked(oPorte2,TRUE);


}
}
}

Par ruru666 le 3/2/2003 à 18:17:21 (#3163104)

Provient du message de eMRaistlin
DelayCommand(10.0,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(1),oPC));


Humm autre chose c k en faite j aurrais aimer (je c je suis tres chi..t), ke les degat commencent environ 1 mn apres etre entré dans le trigger mais si je met 60 a la place de 10 ca va faire 1pts toute les 60 sec.

Donc ya t'il possibilité de faire demarrer les degats 1 mn apres etre rentre et faire 1pts chake round suivant ???

Par ruru666 le 3/2/2003 à 18:21:28 (#3163140)

Par exemple dans le on enter du piege une pause avant kil execute le script des degats ???

CF script du on enter :


void main()
{
object oPC = GetEnteringObject();
SetLocalInt(oPC, "bGril", TRUE);
ExecuteScript("script_degats", oPC);
}

Par ruru666 le 3/2/2003 à 18:47:42 (#3163330)

OK c bon g trouve par miracle, mais g toujours besoin de savoir ca :


comment fais ton pour ke le premier trigger ne ce déclenche kune fois ? C a d ke les portes ne ce ferme kune seule fois ?

CF le script :




void main()
{
object oPC = GetEnteringObject();
{
if (GetIsPC(oPC))
{
object oPorte1 = GetNearestObjectByTag("RPORTE",oPC,1);
object oPorte2 = GetNearestObjectByTag("RPORTE",oPC,2);

ActionCloseDoor(oPorte1);
ActionCloseDoor(oPorte2);

SetLocked(oPorte1,TRUE);
SetLocked(oPorte2,TRUE);


}
}
}

Par Reyan le 3/2/2003 à 19:43:06 (#3163730)

perso, j'ai pas tout lu, dsl, mais tu pourrais essayer avec une bête variable
tu fais un test au début du on enter, tu met une variable à la fin, et la prochaine fois qu'on rentre dedans, ça test pour vérifier si ça a déjà fonctionné
ou alors tu détruit le(s) trigger(s)

void main()
{
object oPC = GetEnteringObject();
int nPiege = GetLocalInt(GetModule(), "PIEGE");
{
if ((GetIsPC(oPC)) && (nPiege != 1))
{
object oPorte1 = GetNearestObjectByTag("RPORTE",oPC,1);
object oPorte2 = GetNearestObjectByTag("RPORTE",oPC,2);

ActionCloseDoor(oPorte1);
ActionCloseDoor(oPorte2);

SetLocked(oPorte1,TRUE);
SetLocked(oPorte2,TRUE);
SetLocalInt(GetModule(), "PIEGE", 1);

}
}
}


ça ca met la variable sur le module, donc ca marcheras plus jamais, ou alors pas avant que le module soit relancé, je suis pas sure ...

tu peux mettre et tester ta variable sur le PJ, comme ca ca marche plus qu'une fois par PJ qui déclenche, mais bon, je pense que c'est pas top ...
tu peux aussi faire en sorte que ca marche plus qu'au bout de n fois
void main()
{
object oPC = GetEnteringObject();
int nPiege = GetLocalInt(GetModule(), "PIEGE");
{
if ((GetIsPC(oPC)) && (nPiege != 5))
{
object oPorte1 = GetNearestObjectByTag("RPORTE",oPC,1);
object oPorte2 = GetNearestObjectByTag("RPORTE",oPC,2);

ActionCloseDoor(oPorte1);
ActionCloseDoor(oPorte2);

SetLocked(oPorte1,TRUE);
SetLocked(oPorte2,TRUE);
int nPiege2 = nPiege +1;
SetLocalInt(GetModule(), "PIEGE", nPiege2);

}
}
}

la c au bout de 5 fois
attention, ca compile, mais je suis pas sure que ca marche, et c pas optimisé pour cause, je sais pas optimiser ... donc je suppose que si c vraiment nul, on le diras ;)

[edit] corrigé script 2 (si si, regardez y a un pitit 2 en plus qq part :D )

Par ruru666 le 3/2/2003 à 20:14:11 (#3163963)

ok merci j attends ken meme un otre avis (comme pour les docteurs) :p

Par Jedaï le 3/2/2003 à 20:18:13 (#3163994)

Alors un autre avis...
Utilise ces scripts, ils sont très bien !:p

(Tu prend toujours l'avis de deux docteurs ? :D )

[ Edit ] Y a des accolades en trop { mais } ça gène { pas } plus que ça...:cool:

Par Reyan le 3/2/2003 à 20:27:44 (#3164074)

g vérifié, ca marche, mais je corrige le deuxieme, qui marche pas :)

Par ruru666 le 4/2/2003 à 8:46:22 (#3166520)

et si on mettait une variable normal plutot ke module, ca me permettrais d utiliser le piege plusieur fois (je c ils euvent trouvé ca barbant mais moi toujours aussi rigolo).

Donc on fais comment ? :)

Par ruru666 le 4/2/2003 à 9:34:16 (#3166689)

tiens une idée me viens et si je mettais ce script dans un piege indetectable ou indésarmable ?

Je v tester ca...

Par ruru666 le 4/2/2003 à 10:20:41 (#3166929)

probleme reste entier ca ne marche k a moitier... :(

N y aurait t'il pas moyen de detruire le trigger apres kil ait ete eclencher pour simplifier les choses ???

cf le script pour vous simplifier la tache :


void main()
{
object oPC = GetEnteringObject();
{
if (GetIsPC(oPC))
{
object oPorte1 = GetNearestObjectByTag("RPORTE",oPC,1);
object oPorte2 = GetNearestObjectByTag("RPORTE",oPC,2);

ActionCloseDoor(oPorte1);
ActionCloseDoor(oPorte2);

SetLocked(oPorte1,TRUE);
SetLocked(oPorte2,TRUE);


}
}
}

Par Jaha Effect le 4/2/2003 à 10:25:33 (#3166963)

Ben avec le classique

DestroyObject (OBJECT_SELF);


Ca marche très bien en général

Jaha Effect :D

Par ruru666 le 4/2/2003 à 12:04:22 (#3167548)

Ben sans moqueries aucunes (car vu mon nivo de scripting), ca marche telment bien k'il ne ce passe plus rien :mdr:

en effet ca doit le detruire trop vite ;)

Par Jaha Effect le 4/2/2003 à 12:07:27 (#3167570)

Met le dans le OnExit de ton trigger, ça devrait aller :)

Jaha Effect :D

Par ruru666 le 4/2/2003 à 12:12:59 (#3167598)

en effet tu aurais meme pu te foutre de moi...

allez je ris de ma betise : :mdr: :mdr: :mdr:

Tu es nul ?

Par Blam le 5/2/2003 à 13:41:50 (#3175257)

Mais tu n'es pas tout seul :)

c'est pénible hein ? Ces scripts qu'on ne comprends pas!
qui ne marchent pas, ou pas bien.

Fondons un club.

Par ruru666 le 6/2/2003 à 16:13:03 (#3184413)

;)

Bon j'ai ken meme le merite de me rattraper comme MD, certe je connais des type ki m en foute plein la vu, mais je me debrouille.

Au faite mon module a depasser les 40 zones, et en aura 55 probablement la semaine prochaine. Attention des zone travaillé, pas des creation a la mord moi le bidule !!! tout comme les pnjs !!!

tiens a ce sujet g une question pour les pnjs, je v faire un nouvo post :p

JOL Archives 1.0.1
@ JOL / JeuxOnLine