Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > [Script] Taverne animée
[Script] Taverne animée
Par Daynos le 12/10/2002 Ă 16:49:14 (#2323151)
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)
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)
Voilà ;), où se trouve le problème?
posté par Ballesto
Par Daynos le 14/10/2002 Ă 14:16:53 (#2333216)
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)
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)
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)
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