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

Panneau de contrĂ´le

Recherche | Retour aux forums

JOL Archives

[Script] Taverne animée

Par Daynos le 12/10/2002 Ă  16:49:14 (#2323151)

Sujet initial par Shelzard :

Une taverne animée

Voici un petit script qui permet d'avoir une taverne vivante, ce script n'est pas de moi, mais je l'ai modifié pour le rendre plus complet avec des NPC assis, des textes en FR et des raleries monologue des serveuses.

Il faut avoir : une taverne
5+ de NPC qui servent de clients
mĂŞme nombre de chaises que de clients
une ou plusieurs serveuses

Ensuite, Ă  vos NPC, donnez comme tag : Client
Le meme tag pour tous les clients.
Aux chaises, donnez le tag ChaiseClient (pour Ă©viter de les utiliser avec le script pour s'assoir) et rendez les "usable".
Placez vos clients près des chaises.

Ensuite, aux serveuses, modifiez le script par défaut NW_C2_DEFAULT9 qui se trouve dans le OnSpawn des serveuses, et enlevez les // qui rendent les lignes en commentaire pour ces lignes ci :


SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT);
SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT);


Ensuite, mettez ce script dans OnUserDefined :


void main()
{
object oTarget;
oTarget = GetNearestObjectByTag("Client", OBJECT_SELF, Random(7)); // mettez le chiffre du Random egal au nombre de clients
if (!(oTarget == OBJECT_INVALID))
{
int iRandom = Random(6); // ce random la est utilise pour les phrases ci-dessous, a regler donc si vous retirez ou ajoutez des phrases
ClearAllActions();
if (iRandom == 1)
{
AssignCommand (oTarget, SpeakString ("J'ai faim !"));
ActionSpeakString ("Voila voila, j'arrive...");
}
else if (iRandom == 2)
{
AssignCommand(oTarget, SpeakString("Ma biere se vide trop vite!"));
ActionSpeakString("laissez moi vous resservir!");
}
else if (iRandom == 3)
{
AssignCommand (oTarget, SpeakString ("Pourrai-je etre servi?"));
ActionSpeakString("Certainement, une seconde!");
}
else if (iRandom == 4)
{
AssignCommand(oTarget, SpeakString("Vous avez du pain?"));
ActionSpeakString("oui voila!");
}
else if (iRandom == 5)
{ // disparition du AssignCommand, histoire de faire raler la serveuse
ActionSpeakString("ce que je peux avoir mal aux pieds!");
}
else if (iRandom == 6)
{
ActionSpeakString("vivement qu'on ferme...");
}
ActionMoveToObject(oTarget);
}
}


**************************
Maintenant, au tour des Clients et de les faire assoir gentiment
Mettre ce script dans le OnSpawn :


#include "NW_I0_GENERIC"
void main()
{
object oChaise;
int nChaise = 1;
oChaise = GetNearestObjectByTag("ChaiseClient", OBJECT_SELF, nChaise);
ClearAllActions();
ActionSit (oChaise);
}

Vous pouvez aussi le mettre dans le OnHeartBeat si vous désirez voir votre NPC s'assoir. Si vous désirez qu'ils soient assis quand vous entrez dans la Zone, mettez le alors dans le OnSpawn.

Le résultat est très sympa, vous voyez votre/vos serveuse se ballader dans la taverne pour servir les clients qui sont assis et qui râlent

Shelzard

Posté par kaliyouga

Par Daynos le 14/10/2002 Ă  12:40:56 (#2332738)

Euh... Ton script est vraiment génial, MAIS... :aide: (oui je suis une quiche) il me fé planter mon module :p ... Quand j'ouvre mon module dans NWN, IL se ferme (NWN) au bout de quelques minutes, sans prevenir. Il n'y avait pas ce problème avant.
Je dis ca juste pour savoir si la meme chose était arrivée a d'autres, ou si je suis une gourde de quiche qui s'est encore planté kek part.

woila.

:D

posté par MTorment

Par Daynos le 14/10/2002 Ă  12:41:55 (#2332740)

J'ai autre un problème Shelzard pour l'auberge, c'est que les serveuses ne font rien. Pourtant j'ai fait comme tu as dit, j'ai copié-collé, les scripts sont bon mais les serveuses bougent pas.
Voilà ;), où se trouve le problème?

posté par Ballesto

Par Daynos le 14/10/2002 Ă  14:16:53 (#2333216)

bonjours a tous.

Pour le script de la taverne animée, moi je n'est pas eu de problème, mais il me ralenti considérablement le module.

J'ai copier-coller le script dans le onheart des serveuses ( j'ai est deux ) et j'ai mis le tag "client" ( Ă  six clients ).

A oui légére modif au début du script j'ai collé un clearallaction comme conseillé dans les cours de script du forum.

Comme quoi ça sert les cours de script du forum, merci Amaranthe.

posté par KrayRavendas

Par Daynos le 14/10/2002 Ă  14:17:54 (#2333226)

OnHeartBeat effectue une action chaque 6 secondes, et vraiment, c'est très lourd pour le serveur. Largement déconseillé. Utilise plutot, comme préconisé dans le script de la taverne animée, OnUserDefined et OnSpawn.

Posté par kaliyouga

Par Daynos le 14/10/2002 Ă  14:30:48 (#2333329)

Provient du message de MTorment
J'ai autre un problème Shelzard pour l'auberge, c'est que les serveuses ne font rien. Pourtant j'ai fait comme tu as dit, j'ai copié-collé, les scripts sont bon mais les serveuses bougent pas.
Voilà:) , où se trouve le problème?


c tout simple. au lieu de rajouter ca :

SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT);
SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT);

tu fé ca:

SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT);
SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT);
}

woila.
:o)

moi ca marche, mé ca m'fé planter mon module ^^

Par [GO]Skywalker13 le 27/12/2002 Ă  9:39:43 (#2886900)

Juste une petite remarque concernant le script..

Les "if else" c'est joli mais c'est pas pour optimiser le code...

utilisez Ă  la place un "switch(){}"

Par Cassin le 6/1/2003 Ă  8:59:14 (#2954609)

Une petite précision pour le script de random : lorsqu'on demande au jeu de faire un random 6, il ne tire pas un nombre entre 1 et 6 mais entre 0 et 5.

Donc s'il tire 0, il ne fera rien (pas de if blabla == 0), et le if == 6 ne s'exécutera jamais !

C'est le genre de truc tout con auquel personne ne pense !
('me suis fait avoir sur un script similaire :D )

JOL Archives 1.0.1
@ JOL / JeuxOnLine