Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > Demande d'aide pour script "Laisser-Passer"
Demande d'aide pour script "Laisser-Passer"
Par Zariel le 6/11/2002 à 20:27:52 (#2499235)
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)
SetLocked(oDoor,FALSE);
Par KosovaR le 6/11/2002 à 21:51:57 (#2500053)
//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)
Par Zariel le 7/11/2002 à 0:50:57 (#2501265)
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)
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)
Par Tynril le 7/11/2002 à 1:01:29 (#2501315)
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)
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)
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)
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