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

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Demande d'aide pour script "Laisser-Passer"

Par Zariel le 6/11/2002 à 20:27:52 (#2499235)

Salut,

Voilà j'ai implanté un garde avec une action conséquente "prendre objet" avec le Tag du laisser-passer" que le PJ doit avoir sur lui. Jusque là, tout va bien :D

J'aimerai que le garde à l'obtention du laisser-passer ouvre la porte. J'ai trouver ce script qui pourrait être surement adaptable à mon action:


void main()
{
object oDoor ;
oDoor=GetNearestObjectByTag("Portehall") ;
if (GetIsOpen(oDoor)==0)
{
ActionOpenDoor(oDoor);
}
}


Ou pourrais-je placer ce script pour que mon PNJ ouvre la porte au moment ou le laisser passer lui est donner ?

Edit: Je crois que j'ai trouver, pour info : http://forums.jeuxonline.info/showthread.php?s=&threadid=127082

Par LeProctophantasmiste le 6/11/2002 à 20:49:18 (#2499480)

Dans l'action conséquente aussi. Si porte est vérouillée pense à donner une clé qui puisse l'ouvrir à ton garde, ou ajoute cela dans le script:



SetLocked(oDoor,FALSE);

Par KosovaR le 6/11/2002 à 21:51:57 (#2500053)

Regarde les scripts d'Amaranthe (encore merci Amaranthe ,tu m'as beaucoup aidé :D )


//script d'amaranthe
//a mettre dans le "onperceive" du garde
//le garde vérifie si tu as le laisser passer

object oSeen=GetLastPerceived();
object oRing(par exemple)=GetItemPossessedBy(oSeen,(Tag de l'objet));
void main();
{
//pas de personnage pas de reaction
if(GetIsPC(oSeen))
{
if (oRing==OBJECT_INVALID);
{
//si le perso n'a pas le laisser passer , le garde ne fait rien
//je peux pas te dire quoi mettre , rien peut etre ou alors:
ActionSpeakString("Vous n'avez pas de laisser-passer, vous ne rentrez pas");
}
else
{
//Si le personnage a le laisser-passer , le garde ouvre la porte mais ça je sais pas encore le faire voila voila



Si qqun de plus avisé que moi pouvait le dire ou alors dire ou sont les erreurs dans ce script , merci (manque sans doute des ;

Par Zariel le 6/11/2002 à 22:14:03 (#2500207)

Merci Beaucoup, ca me laisse deja une plus grande marge de manoeuvre :merci:

Par Zariel le 7/11/2002 à 0:50:57 (#2501265)

Arf, le script ne se compile pas mais je sens qu'on est pas loin du resultat.

Dans la conversation, il faurdrai que le garde puisse identifier le laisser passer:

par exemple:

Avez vous le laisser-passer ?

Oui: le script conversation regarde si le laisser passer est la et la porte se delock automatiquement, en regardant également si la clef de la porte est sur le garde, ce ne serai pas plus simple ? En fait, mettre le script entier dans l'action conséquente.

Par SidSilver le 7/11/2002 à 0:52:46 (#2501272)

Pour ouvrir ta porte... (A mettre dans action conséquente)


void main()
{
object oDoor = GetNearestObjectByTag("tag de ta porte");
SetLocked(oDoor, FALSE);
ActionOpenDoor(oDoor);

// et si tu veux que la porte se referme après un certain laps de temps

ActionWait(5.0); // Mettre à la place du 5.0 le temps voulu (en secondes)
ActionCloseDoor(oDoor);
SetLocked(oDoor, True);
}

Voila, voila... amuse toi bien ;)

Par Zariel le 7/11/2002 à 1:01:09 (#2501313)

Ca ne se compile pas : ERREUR DEFININED WITHOUT TYPE, decidement :p

Par Tynril le 7/11/2002 à 1:01:29 (#2501315)

Ajouter un ClearAllActions serait pas mal aussi :)

Pour le script d'amarante, à vue de nez, c'est le ; sur la ligne du void main

Par Zariel le 7/11/2002 à 1:05:48 (#2501336)

Merci Tynril mais je l'ajoute ou le ClearAllAction dans le script ? Hé oui, c'est de la grosse quiche ;)

Par SidSilver le 7/11/2002 à 1:12:20 (#2501368)

Provient du message de Zariel
Ca ne se compile pas : ERREUR DEFININED WITHOUT TYPE, decidement :p

Ok alors essaye ça :

/* La porte doit être vérouillée par défaut et utilisable ! */
void main()
{
ClearAllActions();
object oDoor = GetNearestObjectByTag("tag de ta porte", OBJECT_SELF, 1);
SetLocked(oDoor, 0);
ActionOpenDoor(oDoor);

/* et si tu veux que la porte se referme après un certain laps de temps */

ActionWait(5.0f); // Mettre à la place du 5.0 le temps voulu (en secondes)
ActionCloseDoor(oDoor);
SetLocked(oDoor, 1);
}

Cette fois si ça ne marche pas, c'est que ton problème ne viens pas du script ! ;)

Re: Demande d'aide pour script "Laisser-Passer"

Par Morethil le 7/11/2002 à 2:34:53 (#2501602)

Provient du message de Zariel
Salut,
Ou pourrais-je placer ce script pour que mon PNJ ouvre la porte au moment ou le laisser passer lui est donner ?


Je peux pas trop te faire le scripte comme ça, mais pour répondre à ta question, tu peux mettre autant d'action que tu veux dans un même scripte.

En action conscéquente il peux se passer plain de truc avec 1 seul scripte.

Là en l'occurence, tu va prendre le laisser passer des PJ, et ouvrir la porte, et retourner a son poste.

La porte qui se referme, je te suggere de le deplacer, et de mettre ça sur le scripte du OnOpen de la porte.

Ca va donner un truc du genre :
Ta conversation :
Les PJ arrivent, le garde les arrête.
+ Hola voyageurs, vous avez le laisse passé ?
(scripte dans le condition d'execution pour que la phrase s'enclanche que si ils ont la clef)
+1 Bien sur ! Tenez, le voilà. (action conscéquente : Le pass disparait)
+++ ok, je vous ouvre (action conscéquente, le garde ouvre) [fin de conversation] (10s apres la porte se ferme seule)
+2 Bhaaa, on nous a pas dit qu'il fallait un laissé passé... (pas de condition).

Avec cette option tu a 3 scriptes
1 - pour la condition d'execution


int StartingConditional()
{
// Vérifier que le PJ qui parle possède ces objets dans son inventaire
if(!CheckPartyForItem(GetPCSpeaker(), "tag_du_pass"))
return FALSE;
return TRUE;
}


Le 2e pour le pass qui disparait de l'inventaire du PCSpeaker

void main()
{
// Enlever des objets de linventaire du joueur
object oItemToTake;
oItemToTake = GetItemPossessedBy(GetPCSpeaker(), "tag_du_pass");
if(GetIsObjectValid(oItemToTake) != 0)
ActionTakeItem(oItemToTake, GetPCSpeaker());
}


3e pour le garde qui va ouvrir. Dans l'action Conscequente de la phrase desiré.

//on definit les variables (le poste du garde et la porte)
//comme c'est dans une conversation, on a pas besoin de defninir
//le garde, car c'est OBJECT_SELF par defaut
object oPoste = GetWaypointByTag("WP_ct_garde_01");
object oDoor;
oDoor=GetNearestObjectByTag("dt_doorgarde");

//on verifie que la porte est bien fermé (ce serait con qu'il bouge
//pour rien le pôv... Surtout il passerai pour un con...
if (GetIsOpen(oDoor)==0)
{
//si c'est fermé, il va ouvrir.
ActionOpenDoor(oDoor);
//ensuite il retourne a son poste. (les delais sont en segondes)
DelayCommand(4.0f,ActionMoveToObject(oPoste));
//ensuite il se remet dans la direction habituelle.
DelayCommand(7.0f, SetFacing(160.0f)); //par exemple


4eme scripte, dans le OnOpen de la porte pour qu'elle se referme seule.

//Close door
//la porte se ferme au bout de 10s
//a placer dans le OnOpen d'une porte
//Pompé chez Mobidique (trashcity)

void main()
{
DelayCommand(10.0, ActionCloseDoor(OBJECT_SELF));
}


Mais ne te détrompe pas, dans cet exemple (où finalement je t'ai mis les scriptes...) les actions sont séparée. Mais comme tu le vois dans le scripte 3 (garde va ouvrir) rien ne t'empeche de mettre plusieurs actions dans un même scripte.

Par exemple :

//... Non, celui là je te le fait pas, parce que c'est comme les
//autres, presque que du copier/coller. Donc le mieux c'est que tu
//aille voir là :


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

En particulier la leçon 3 :)

Comme ça tu comprendra ce que tu ecrit :D

Par Zariel le 7/11/2002 à 9:59:36 (#2502478)

Merci Mo :) Ouai, ouai, je sais, faut que je fasse le tutorial pour les scripts mais sans raconter ma vie j'ai un boulot qui me prend enormenement de mon temps et rien que l'élaboration de mon module occupe une bonne partie de mes loisirs alors l'apprentissage des scripts...

C'est pour tout le monde pareil je pense, mais je vais m'y mettre bientôt, c'est vrai qu'il n'est pas marrant d'être toujours dépendant des autres :D

En tous cas, merci beaucoup pour ce superbe script ;)

JOL Archives 1.0.1
@ JOL / JeuxOnLine