Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > Allumer et Eteindre les lampadaires
Allumer et Eteindre les lampadaires
Par SidSilver le 3/11/2002 à 22:15:54 (#2473201)
Je cherche un moyen de faire :
1) Soit les lampadaires s'allument tout seul le soir et
s'eteingnent tout seul le matin.
2) Soit un mec, va allumer les lampadaires le matin et les
eteindre le soir
Merci de votre aide ! :aide:
Par Glouby le 4/11/2002 à 17:39:29 (#2478922)
en fait, il me manque juste la fonction pour allumer éteindre un lampadaire.
Euh j'ai pratiquement pas encore scripté pour nwn, donc je risque de dire pas mal de conneries, mais le principe devrait y être.
Bon alors ta première alternative est évidemment la plus simple : tu place dans le onheartbeat de ton lampadaire un code qui vérifie l'heure :
void main()
{
object lamp = OBJECT_SELF;
if (GetTimeHour() == 7) //en considérant que le jour dure de 8 à 20h
{/*Allumer la lampe*/;}
else if (GetTimeHour() == 19)
{/*Eteindre la lampe...*/;}
}
Pour la deuxième solution, c'est déjà plus compliqué : tu pourrais mettre un code du genre de celui du haut dans le onheartbeat du npc qui allume les lampadaires le même code que celui ci-dessus, remplacer les fonctions pour allumer/éteindre la lampe par l'activation d'un trajet de waypoints passant par chaque lampadaire.
Tu placerais alors un trigger autour de chaque lampadaire
Le code du trigger serait tout bête :
si la créature qui a activé le trigger est le npc en question, alors : si la lampe est allumée on l'éteint et inversément.
Par SidSilver le 4/11/2002 à 19:44:57 (#2480175)
/* allumer le lampadaire*/
et /* éteindre le lampadaire */
J'espère que quelqu'un poura m'aiclairer sur ce sujet...
Par The BlooD Wolf FRA le 4/11/2002 à 20:47:18 (#2480934)
Les lampadaires sont allumables au moins ? J'ai jamais fait attention en fait :rolleyes:
Par Tynril le 4/11/2002 à 21:28:05 (#2481401)
Script sur OnEnter de ta zone où est ton lampadaire :void main()
J'ai pas testé mais ça doit être quelque chose comme ça.
{
int nHour = GetTimeHour();
object oLampadaire = GetObjectByTag("TagDeTonLampadaire");
if(nHour >= 8 && nHour <= 21)
{
if(!GetLocalInt(GetModule(),"LampadairesActifs"))
{
AssignCommand(oLampadaire,ActionInteractObject(oLampadaire);
SetLocalInt(GetModule(),"LampadairesActifs",TRUE);
}
}else{
if(GetLocalInt(GetModule(),"LampadairesActifs"))
{
AssignCommand(oLampadaire,ActionInteractObject(oLampadaire);
SetLocalInt(GetModule(),"LampadairesActifs",FALSE);
}
}
}
Par Ormus le 4/11/2002 à 21:57:21 (#2481709)
Ils devraient rajouter un évenement OnTime (vous voyez ce que je veux dire : le script se déclenche à l'heure spécifiée) ça éviterait de devoir utiliser le OnHeartBeat (mais peut-être que ça reviendrait au même : l'heure serait vérifiée toute les x secondes :confus: )...
Par Tynril le 4/11/2002 à 22:00:09 (#2481734)
Par sounéva le 4/11/2002 à 22:44:38 (#2482132)
Par SidSilver le 4/11/2002 à 22:47:47 (#2482158)
J'ai testé ton script et malheureusement il ne fonctionne pas...
J'ai aussi essayé de le modifier mais rien a faire, ca ne marche toujours pas.
Sounéva,
pourais tu me donner le script pour le perso qui allume les lampadaire stp ??? C'est en effet la meilleure option que j'avais envisagée mais elle me semblait difficile a réaliser...
Par sounéva le 4/11/2002 à 23:10:35 (#2482335)
seulement voila pour le script faudra que tu attende un peut puisque il est sur un mod en 1.26 et que j'ai antipatcher en 1.24 et que je ne peut plus ouvrir le mod pour l'instant.
je vai repatcher et te le donner dison dans un bon quart d'heure. ok?
a mettre dans le "onuse" d'un placeable qui sert d'intérupteur(si ton intérupteur n'est pas un objet qui s'alume tu peut enlever le premier IF) void main()
{
if (GetLocalInt (OBJECT_SELF,"interup") !=1)// cette première partie sert a allumer/eteindre l' intèrupteur lui-même
{
PlayAnimation (ANIMATION_PLACEABLE_DEACTIVATE);
SetLocalInt (OBJECT_SELF,"interup",1);
}
else
{
PlayAnimation (ANIMATION_PLACEABLE_ACTIVATE);
SetLocalInt (OBJECT_SELF,"interup",0);
}
// la voici la boucle qui recupere tout les braziers de la zone et les alume/eteint
int nCt = 1;
while (nCt <= 45) // 45 etant le nombre de brazier de ma zone(si tu a 10 lampe met 10)(et je ne compte pas l'intérupteur)
{
object olampe = GetNearestObjectByTag("Brazier",OBJECT_SELF,nCt);// "brazier" etant le tag de tout les brazier au alentour
if (GetLocalInt (olampe, "lampe"+IntToString(nCt)) !=1)
{
AssignCommand(olampe,PlayAnimation (ANIMATION_PLACEABLE_DEACTIVATE));
SetLocalInt(olampe,"lampe"+IntToString(nCt),1);
}
else
{
AssignCommand(olampe,PlayAnimation (ANIMATION_PLACEABLE_ACTIVATE));
SetLocalInt (olampe, "lampe"+IntToString(nCt),0);
}
nCt ++;
}
}
bon a noter que normalement il y a une fonction "recomputstaticlight()"qui permet de recalculer l'éclairage de la zone. mais aprés bon nombre de teste j'ai décider de ne pas l'utiliser...
en gros je me sert juste de l'animation des flame et pas de l'éclairage en lui même[ toutes les lampes de la zone devron etre sur activer dans aurora] et ceux pour deux raison:
-jouer sur l'éclairage ne fait rien sans la fonction recomputestaticlight()
-et cette derniere pose quelque probleme d'on un ralentissement lors du calcule des lumières et ne marche pas a touts les coups( en m'en servant il m'est arriver d'avoir quelque lampadaire allumer et d'autre éteint bref cette fonction foire).
donc aprés de long teste et de mure réflextion je me sui dit de toute facon la lumière du jour couvre amplement l'éclairage de n'importe quelle torche
voila en gros l'ilumination de toutes mes lampes est toujours activer et cela parait bizzar uniquement la nuit si les animations sont déactiver mais comme elles, les animations, ne foire pas; quand vient la nuit tu click sur l'intérupteur et hop de jolie flamme sorte de tes objet...et quand le jour arrive hop tu eteint toutes ces jolies flamme.
c'est vrai qui si tu ne click pas(toi ou ton pnj) sur l'intérupteur quand vient la nuit et que tu te ballade tu risque de rencontrer des lampes sans flames qui éclaire quand même.....
Par SidSilver le 4/11/2002 à 23:13:26 (#2482352)
J'attend avec impatience ton script et merci de m'aider a rendre mon module plus attrayant !
Si je peux, je te revaudrais ça un de ces 4 :ange:
it's done
Par sounéva le 4/11/2002 à 23:43:56 (#2482558)
voila je me suis inspirer du script nw_02_onoff qui se trouve dans l'editeur tu peut aussi faire pareil.
il y a "SetPlaceableIllumination" aussi qui permet donc d'allume et d'eteindre l'illumination de ta lampe mais qui ne marche pas sans
"RecomputeStaticLighting" et cette dérniere si il y a plus d'une lampe pose des problémes. marche trés bien par contre pour changer la couleur de tes tiles durant le jeu.
Par SidSilver le 5/11/2002 à 0:05:06 (#2482657)
reste plus qu'à le modifier pour obtenir exactement ce que je veux.
Mais merci quand même, ton script fonctionne pas mal non plus !
script officiel :
//::///////////////////////////////////////////////
//:: NW_O2_ONOFF.nss
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
Turns the placeable object's animation on/off
*/
//:://////////////////////////////////////////////
//:: Created By: Brent
//:: Created On: January 2002
//:://////////////////////////////////////////////
void main()
{
if (GetLocalInt(OBJECT_SELF,"NW_L_AMION") == 0)
{
PlayAnimation(ANIMATION_PLACEABLE_ACTIVATE);
DelayCommand(0.4,SetPlaceableIllumination(OBJECT_SELF, TRUE));
SetLocalInt(OBJECT_SELF,"NW_L_AMION",1);
DelayCommand(0.5,RecomputeStaticLighting(GetArea(OBJECT_SELF)));
}
else
{
PlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE);
DelayCommand(0.4,SetPlaceableIllumination(OBJECT_SELF, FALSE));
SetLocalInt(OBJECT_SELF,"NW_L_AMION",0);
DelayCommand(0.9,RecomputeStaticLighting(GetArea(OBJECT_SELF)));
}
}
Par Skanzo Sylan le 5/11/2002 à 22:17:37 (#2490751)
Par SidSilver le 5/11/2002 à 23:20:43 (#2491276)
Provient du message de Skanzo Sylan
Hum question qui n'a pô trop rien à voir avec le sujet, ça bug toujours quand on veux mettre black avec les fonctions type SetTileMainLight()?
Désolé, je n'en ai aucune idée.
Par SidSilver le 5/11/2002 à 23:33:45 (#2491372)
Si vous voulez y jeter un ptit coup d'oeil :eek: , il est ici
lampadaire
Par okjester le 7/11/2002 à 15:44:40 (#2505136)
Par SidSilver le 7/11/2002 à 18:42:19 (#2506786)
JOL Archives 1.0.1
@ JOL / JeuxOnLine