JeuxOnLineForumsPlusConnectés : 761 (sites) | 1504 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Peuplement automatique de ville RSS
   
Répondre
Partager Outils Rechercher
Avatar de Elmo
Elmo
Alpha & Oméga
 
Avatar de Elmo
 

Peuplement automatique de ville

Yop à toutes et tous!

voila j'ai créé une choulie grande ville j'ai créé les PNJ principaux => tout va pour le mieux mais le probleme est que j'aimerais savoir si il existe un script pour générer des PNJ "no-name" aléatoirement ?
Lien direct vers le message - Vieux
Avatar de Ange Musicien
JOL Ange Musicien
Alpha & Oméga
 
Avatar de Ange Musicien
 
Je suis en train de t'en faire un
Lien direct vers le message - Vieux
Avatar de Ange Musicien
JOL Ange Musicien
Alpha & Oméga
 
Avatar de Ange Musicien
 
Voilà... Ca ça devrait aller. C'est sûrement truffé de fautes, notamment au niveau des switch car je ne me souvient plus de la procédure exacte ( [case 0: return 0;break;] ou quelque chose comme ça)... Si quelqu'un pouvait relire ce serait sympa. Enfin l'essentiel y est. Tu peux régler le niveau de précision en supprimant des lignes (par exemple si tu ne veut pas que ça bouffe trop de CPU, tu mets moins de possibilités, etc.)...
Si ce n'est pas clair, préviens moi, je mettrais des précisions. J'ai fait ça un peu vite donc bon.
Code PHP:
/////////////////////////////////////////////
///    "Dans ville il y a vie" tome 2,    ///
///    - generation aleatoire de PNJ -    ///
/////////////////////////////////////////////
  /*
     Ce script cree aleatoirement dans une ville dont les zones sont donnees
      un nombre donne de PNJ choisis aleatoirement parmis une liste donnee.
                                                                            */
/////////////////////////////////////////
///        By Ange Musicien           ///
/////////////////////////////////////////                                  


// Generate a random fonction and create a PNJ.
// If oArea is not a valid area, nothing will happen.
void GenerateRandomPNJ(object oArea=OBJECT_INVALIDint Xmax=10int Ymax=10);

void main()
{
object zone1,zone2,zone3/*etc*/;    //Inscrivez autant de zoneX que d'areas de votre ville
int Xmax1,Xmax2,Xmax3/*etc*/;       //Inscrivez autant de Xmax que d'areas de votre ville
int Ymax1,Ymax2,Ymax3/*etc*/;       //Inscrivez autant de Ymax que d'areas de votre ville
int fois;
object PNJ;

zone1 GetObjectByTag("nom de la zone"); // Inscrivez le Tag des zones en face.
zone2 GetObjectByTag("deuxieme  zone");
zone3 GetObjectByTag("troisieme zone");

Xmax1 80;                         // Inscrivez les valeurs de vos terrains
Xmax2 80;                         // en abcisse.
Xmax3 80;                         // Note : 1 carre de terrain = 10.

Ymax1 80;                         // De meme en ordonnee Y. N'oubliez pas
Ymax2 80;                         // Que 1 carre vaut 10 : les trois zones donnees
Ymax3 80;                         // en exemple ici valent donc toutes 8x8 carres.

fois 20;                          // entrez derriere "fois" le nombre de PNJ que vous
                                    // voulez generer

while(fois!=0)
 {
 
int r,X,Y;
 
object z;
 
Random(4);                     // remplacez 4 par le nombre de zones +1
 
switch(r)
  {
  case 
1:
  
zone1Ymax1Xmax1; break;  // ajoutez une case par zone et completez
  
case 2:                                  // comme ci-contre.
  
zone2Ymax2Xmax2; break;
  case 
3:
  
zone3Ymax3Xmax3; break;
  }
 
GenerateRandomPNJ(z,X,Y);
 
fois--;
 }
}

void GenerateRandomPNJ(object oArea,int Xmax,int Ymax)
{

if(
oArea==OBJECT_INVALID)
 {}
else if(
oArea!=OBJECT_INVALID)
 {
 
string sint LX,LY,Rvector LVlocation L;
 
LX Random(Xmax+1);
 
LY Random(Ymax+1);
 
LV Vector(IntToFloat(LX),IntToFloat(LY),0.0);
 
Location(oArea,LV,0.0);
 
Random(5);                          // Ou 5 est le nombre de PNJ differents pouvant
 
switch(R)                               // peupler la ville
  
{
  case 
1"PNJ_TYPE_1"; break;       // Adaptez de faon identique a votre schema
  
case 2"PNJ_TYPE_2"; break;
  case 
3"PNJ_TYPE_3"; break;
  case 
4"PNJ_TYPE_4"; break;
  case 
5"PNJ_TYPE_5"; break;
  }
 
CreateObject(OBJECT_TYPE_CREATURE,s,L,FALSE);
 }

Lien direct vers le message - Vieux
Avatar de Elmo
Elmo
Alpha & Oméga
 
Avatar de Elmo
 
smack! je le testerai dès que sa relecture sera finie alors
Lien direct vers le message - Vieux
Avatar de Prince Nexus
Prince Nexus
Dauphin
 
Avatar de Prince Nexus
 
Euh question conne, c'est à mettre dans le module load du module ?

Merci en tous cas, je le teste illico de mon côté.

Prince Nexus.
Lien direct vers le message - Vieux
Avatar de Ange Musicien
JOL Ange Musicien
Alpha & Oméga
 
Avatar de Ange Musicien
 
Hmm la question n'est pas si bête puisque si tu met se script dans le OnModuleLoad, tu risques de te retrouver avec un bug bien senti : pour une raison inconnue (de moi du moins ), le OnModuleLoad ne gère pas les create object et probablement les copy object à l'entrée... Donc il te reste à trouver un endroit pour le caser si le bug survient : un trigger est trop instable, mais peut-être dans le OnEnter de la zone avec la mention 'une seule fois' ( tu rajoutes une variables au début qui prend +1 à la fin). Bref, tu vois ce qui t'arranges... Si tu n'y arrives pas, je te trouverais bien quelque chose.
Lien direct vers le message - Vieux
Avatar de Prince Nexus
Prince Nexus
Dauphin
 
Avatar de Prince Nexus
 
L'idée d'une variable qui prend plus un est bien tentante mais je ne vois pas franchement à quoi l'assigner :
un SetIntToObject (Tag d'un objet invisible) - euh je dis ça de tete, je ne sais pas si la syntaxe est bonne-

et en plus, il faudrait que j'en mette un différent sur toutes les zones où je compte l'utiliser...

Ma foi, si tu as une autre suggestion, tu feras plus d'un heureux

Prince Nexus.
Lien direct vers le message - Vieux
Avatar de Zunzun
Zunzun
Alpha & Oméga
 
Avatar de Zunzun
 
Tu l'assignes a la zone, genre SetLocalInt(OBJECT_SELF, "spawnpnj", 1)

OBEJCT_SELF correspond a la zone si tu le fous dans le OnEnter de la zone.

Donc en gros, tu peux mettre le meme script pour toutes les zones.
Lien direct vers le message - Vieux
Avatar de Nermir
Nermir
Reine
 
Avatar de Nermir
 
Bah moi j'ai deux autres questions, qui n'ont rien à voire.

Elle sert à quoi la variable int Z ?
Code PHP:
int Z,fois
Tu lui donnes la valeur 0, mais tu ne l'utilises pas.


Et dans ta fonction GenerateRandomPNJ, tu fais un premier test
Code PHP:
if(oArea==OBJECT_INVALID)
 {}
else if(
oArea!=OBJECT_INVALID)
 {...} 
Pourquoi tu ne fais pas simplement
Code PHP:
if(oArea!=OBJECT_INVALID)
{...} 
Lien direct vers le message - Vieux
Avatar de Prince Nexus
Prince Nexus
Dauphin
 
Avatar de Prince Nexus
 
Euh merci Zunder pour tes précisions : ça va mieux maintenant (chavais pas qu'on pouvait mettre des Int même sur les aréas -en fait sur tous les Objets quels qu'ils soient- : on en apprend tous les jours)

Sinon pour répondre à Nermir à la place d'Ange musicien, eh ben c'est passke il a fait ça à l'arrache Mais c'est vrai qu'il faudrait qu'il arrange ça .....

Prince Nexus.

Message modifié pour faire plaisir à Zunder !
Lien direct vers le message - Vieux
Avatar de Zunzun
Zunzun
Alpha & Oméga
 
Avatar de Zunzun
 
Citation:
Provient du message de Prince Nexus
-en fait sur tous les Tags quels qu'ils soient-
Sur les objets hein, pas sur les tags, le tag c'est qu'une caractéristique de l'objet.
Lien direct vers le message - Vieux
Avatar de Taern
Taern
Alpha & Oméga
 
Avatar de Taern
 
De même que :
Code PHP:
 R Random(5);                          // Ou 5 est le nombre de PNJ differents pouvant
switch(R)                               // peupler la ville
{
case 
1"PNJ_TYPE_1"; break;       // Adaptez de faon identique a votre schema
case 2"PNJ_TYPE_2"; break;
case 
3"PNJ_TYPE_3"; break;
case 
4"PNJ_TYPE_4"; break;
case 
5"PNJ_TYPE_5"; break;

qui deviendrais plutôt :
Code PHP:
 R Random(5);
"PNJ_TYPE_"+IntToString(R+1); 
mais bon, lui au moins a scripté quelque chose
Lien direct vers le message - Vieux
Avatar de Nermir
Nermir
Reine
 
Avatar de Nermir
 
Citation:
mais bon, lui au moins a scripté quelque chose
Mais s'il a scripté quelque chose en si peu de temps, c'est qu'il s'y connais mieux que moi, et c'est pour sa que je demande pourquoi il a choisi de faire comme sa et pas autrement. Peut-être y avait-il une autre raison que "il a fait ça vite", peut-être pour des raisons de Débugage par exemple, ou de rapidité d'exécution. Etant novice dans le monde de la programmation, je m'intéresse à ce que font les autres, et je me demande comment ça marche et pourquoi ça marche. Il ne s'agissait absolument pas d'une critique, mais bel et bien d'une interrogation.
Lien direct vers le message - Vieux
Avatar de Ange Musicien
JOL Ange Musicien
Alpha & Oméga
 
Avatar de Ange Musicien
 
Pour Nermir : Pour le Z c'est tout bêtement que j'avais prévu autre chose à l'origine, et puis je l'ai délaissé, donc il ne sert à rien. Tu peux le supprimer. Pour le deuxième, c'est une simple mesure de sécurité, un protocole. Tu peux l'enlever aussi, mais il est aussi bien de le laisser, étant donné que nous sommes dans une fonction (j'ai créé une fonction pour une meilleure lisibilité et pour un script remaniable, et réutilable (il suffit d'écrire #include "nomduscript" pour avoir accès à cette fonction), ce qui évite pas mal de problème et économise du CPU). C'est une mesure de sécurité si tu veux.

Pour Taern : En fait pas du tout ^^. C'est parfaitement voulu, ce sont des "cases" dans lesquelles PNJ_TYPE_5 sont remplacés par les ResRef des PNJ... Quand tu mets deux villes avec ce script, est qu'un est une ville d'orcs et l'autre une ville d'elfe, le script est le même : il va appeler les mêmes personnages (à savoir PNJ_TYPE_1, etc.) dans les deux villes opposée. Des citoyens elfes chez les orcs, ça fait bizarre... C'est afin que le script soit adaptable. Et ça n'oblige pas le Créateur à changer la ResRef de ses PNJ. En bref, il ne faut surtout pas mettre ce que tu as mis... Mais c'est moi qui n'ai pas été clair. Je corrige
Lien direct vers le message - Vieux
Avatar de Taern
Taern
Alpha & Oméga
 
Avatar de Taern
 
Autant pour moi alors

@ Nemir : désolé j'ai pas été clair non plus j'ai simplement dit ça pour ne pas qu'Ange Musicien croie que je critique son script gratuitement. C'est tout à fait normal et correct de poser des questions
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Peuplement automatique de ville
   

Outils Rechercher
Rechercher:

Recherche avancée

Les vidéos de Neverwinter Nights RSS
  • Aucune vidéo pour le moment...
Thème visuel : Fuseau horaire GMT +1. Il est actuellement 21h37.
   

© JeuxOnLine, le site des MMO, MMORPG et MOBA. Tous droits réservés. - Conditions générales d'utilisation - Conditions d'utilisation des forums - Traitement des données personnelles - ! Signaler un contenu illicite