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

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Allumer et Eteindre les lampadaires

Par SidSilver le 3/11/2002 à 22:15:54 (#2473201)

Bonjour,
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)

tiens, je pensais justement ajouter ça à ma ville
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)

le problème justement n'est pas de tester l'heure mais précisemment

/* 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)

User le GetIsNight et le GetIsDay serait pas plus simple ? :doute:

Les lampadaires sont allumables au moins ? J'ai jamais fait attention en fait :rolleyes:

Par Tynril le 4/11/2002 à 21:28:05 (#2481401)

OnHeartBeat IS SH*T !

Script sur OnEnter de ta zone où est ton lampadaire :

void main()
{
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);
}
}
}
J'ai pas testé mais ça doit être quelque chose comme ça.

Par Ormus le 4/11/2002 à 21:57:21 (#2481709)

Oui mais admettons le joueur entre dans la zone quand il fait jour puis la nuit tombe...les lampadaires resteront éteints non ? :p

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)

Oui, si c'est une zone où les joueurs sont censés rester longtemps ça pose problème. Dans ce cas, tu peux pousser le vice en mettant ce code dans un UserDefinedEvent, qui serait appellé periodiquement (sur OnEnter, OnExit, OnSpawn, OnUse des divers objets de la zone, etc), mais de façon non répétitive ni cadencée (et ça, on s'en fout, pas besoin que les lampadaires soient une horloge atomique).

Par sounéva le 4/11/2002 à 22:44:38 (#2482132)

j'ai un peut cogité déja sur ce problème et j'en suis arriver a créer un pnj qui alume et eteint les lampadaires le soir et le matin ca evite de passer par le onenter et en plus ca anime la zone.

Par SidSilver le 4/11/2002 à 22:47:47 (#2482158)

Tynril,
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)

mon script je l'ai mis en faite sur le Onuse d'un brazier(cela marche pour tout les objets qui s'allume) et quand tu click dessus y a un boucle qui récupere tout les objets allumable de la zone, et qui les alume puis les eteints si tu reclick....j'ai pas encore fait le pnj qui clikera sur le brasier. en gros mon brazier fait office d'intérupteur. ca marche impeque.
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)

Aucun probleme !
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)

:D je suis en train de penser que je n'est pas tester avec des lampadaire(je croit pas qu'il y est d'animation de flamme sur un lampadaire ????)
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)

Euh... :( désolé vraiment, mais j'ai trouvé le script pour allumer ou éteindre une lampe ou torche... c le script nw_02_onoff.
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)

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()?

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)

J'ai réussi à créer le script que je voulais... il marche très bien et consomme très peu de ressources...
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)

Je crois que j'ai deja vu ce que vous voulez faire sur le site vault. Je ne suis pas sur que cest la que jai pris cela. Mais cherche et vous trouverez. sa fonctionne tres bien. Le NPC fais le tour de tout les lampadaires et les allumes ou les fermes.

Par SidSilver le 7/11/2002 à 18:42:19 (#2506786)

En effet, cela doit être interessant, et en plus ça met de l'animation dans des zones souvent trop peu "vivantes"

JOL Archives 1.0.1
@ JOL / JeuxOnLine