JeuxOnLineForumsPlusConnectés : 643 (sites) | 1192 (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 Reyan
Reyan [L.D.D]
Roi / Reine
 
Avatar de Reyan
 
Citation:
Provient du message de Ange Musicien
(il suffit d'écrire #include "nomduscript" pour avoir accès à cette fonction),
euh, sauf que la t'as un void main()
donc tu risque un bo

DOUBEUL IMPLEMENTATION OF FONCTIONS

ou un truc du genre dès que tu voudras rajouter une fonction main (un script quoi) ^_^

fin je dis ca au cas oû quelqu'un voudrais éssayer
il faut mettre les fonction danx un autre script, que tu appel en include ds celui donné au dessus (avec que le void main dedans) et dans un autre script si tu veux

fin, juste pour plus de rigeur
Lien direct vers le message - Vieux
Avatar de Ange Musicien
JOL Ange Musicien
Alpha & Oméga
 
Avatar de Ange Musicien
 
Exact. J'ai oublié de préciser qu'il fallait scinder en deux le script au cas d'une utilisation différente. Mais les personnes susceptibles d'utiliser des #include sont capables de diviser des scripts par deux, donc bon.
Lien direct vers le message - Vieux
Feingus
Dauphin
 
Hum..... je n'y connais scriptement rien au script (pourtant je me suis lance dans la creation d'un module et essayer de decouvrir le script c plutot interessant meme si je reussis pas grd chose :/ ).
Je n'arrive pas a savoir ce qu'il faut enlever ou pas dans ce script.
Est ce qu'il est possible d'en avoir une version a jour svp ?

Merci d'avance
Lien direct vers le message - Vieux
Avatar de Rhyghar
Rhyghar
Dauphine
 
Avatar de Rhyghar
 
pourquoi ? utiliser une rencontre a l'entrée de la ville remplie avec des pnj et des points de spawn multiples c'est pas bien ?
__________________
..::Heavenlynet le net paradisiaque ::..
Lien direct vers le message - Vieux
Avatar de Ange Musicien
JOL Ange Musicien
Alpha & Oméga
 
Avatar de Ange Musicien
 
Je pense qu'il parle des trucs à remplacer... C'est marqué en face. Chaque champs quasiment est modelable... N'oublie pas de modifier les variables au début selon ton nombre de zones. Si ta ville fait 5 zones, par exemple.

Ces scripts vont bientôt subir des corrections et une version fusionnée des deux "dans ville il y a vie", afin d'obtenir un script très efficace, où le dev aura juste à remplir une vingtaine de champs au début, expliqués dans les dérails, et qui permettront de créer et de donner vie en même temps aux PNJ. Les options rajoutées : possibilité de dialogues courts avec marchand entre PNJ par floating text, possibilité de créer des chemins spéciaux suivis par des PNJ spéciaux (ex : tour de garde), possibilité de recréer des PNJs si ceux-ci sont tués au bout de 1 minute (les nouveaux PNJs sont créés dans des endroits déserts où à l'entrée de ville. Le tueur est alors fiché. Très pratique pour les PW. Vous trouverez tout ça sur le site des Mains Noires quand il sera prêt... Et évidemment je mettrais le script ici pour les JOLiens.
Lien direct vers le message - Vieux
Avatar de Etienne C
Etienne C
Roi
 
Avatar de Etienne C
 
Tout d'abord bine nommer les TAG de ses zones (Area). J'utilise une norme simple :
A01
A02
etc...
Tout d'abord une librairie (bibliothèque suivant les goût) sera utiliser pour le peuplement de la ville zinclude_aera



Code PHP:
 // =================================================
// initialisation des fonctions de chatgement de PNJ
// =================================================
void ChargeUnPNJ (string sNOMZONEstring sTypePNJint iNombrePNJint iNombreWPstring iNumTag "0") {
    
location la;
    
object   PNJ;
    
string   sNomTag;                   // nom du tag des waypoint
    
string   sNomRef;                   // nom de la reference
    
int      iR;
    
string   sR;

    
sNomTag =  "WP_" sNOMZONE "_";
    
// =============================================================
    // attention tous ces elments sont en majuscule, mais par contre
    // pour la rfrence, il faut utiliser les minuscules
    // =============================================================
    
sNomRef =  GetStringLowerCase(sTypePNJ);
    
int i 1;
    while (
<= iNombrePNJ)      {
        
iR Random(iNombreWP) + 1;
        if (
iR 10)       sR =  iNumTag "0" IntToString(iR);
        else               
sR =  iNumTag IntToString(iR);
        
la   GetLocation(GetObjectByTag(sNomTag sR ));
        
CreateObject(OBJECT_TYPE_CREATUREsNomRefla);
        
i++;
    }
}

// ========================================================================
// cette procedure permet de charger la zone en fonction de celle-ci et de
// sa structure
// ========================================================================
void ChargementPNJaera(object oZONE)
{
    
string sNOMZONE =   GetTag(oZONE);
        if (
sNOMZONE == "") {}
            
// SI LA ZONE EST BLANCHE ONT FAIT RIEN BIEN-SUR
            // =============================================
        
else if (sNOMZONE == "A07" )
        {
             
ChargeUnPNJ (sNOMZONE"MARIN"       510"0");
             
ChargeUnPNJ (sNOMZONE"CAPTAINE"    110"0");
             
ChargeUnPNJ (sNOMZONE"ANCIPIEL"    410"0");
             
ChargeUnPNJ (sNOMZONE"DOMEST_HOMME"310"0");
             
ChargeUnPNJ (sNOMZONE"DOMEST_FEMME"510"0");
             
ChargeUnPNJ (sNOMZONE"NOBLE_HOMME" 310"0");
             
ChargeUnPNJ (sNOMZONE"NOBLE_FEMME" 510"0");
             
ChargeUnPNJ (sNOMZONE"PRETRE"      210"0");
             
ChargeUnPNJ (sNOMZONE"LETTRE"      110"0");
             
ChargeUnPNJ (sNOMZONE"MOYEN_F"     410"0");
             
ChargeUnPNJ (sNOMZONE"MOYEN_H"     410"0");
             
ChargeUnPNJ (sNOMZONE"MOYEN_E"     810"0");
             
ChargeUnPNJ (sNOMZONE"FRAPPE"      310"0");
             
ChargeUnPNJ (sNOMZONE"MARCHAND"    6,  1"1");
             
ChargeUnPNJ (sNOMZONE"GARDE_ARMEE" 5,  2"1");
        }
        else if (
sNOMZONE == "A25" )
        {
             
// AREA 25 RDC DU CHATEAU
             // ======================
             
ChargeUnPNJ (sNOMZONE"DOMEST_HOMME"511"0");
             
ChargeUnPNJ (sNOMZONE"DOMEST_FEMME"511"0");
             
ChargeUnPNJ (sNOMZONE"ENFANT_NOBLE"411"0");
             
ChargeUnPNJ (sNOMZONE"NOBLE_HOMME" 511"0");
             
ChargeUnPNJ (sNOMZONE"NOBLE_FEMME" 311"0");
             
ChargeUnPNJ (sNOMZONE"GARDE_ARMEE" 4,  3"1");
             
ChargeUnPNJ (sNOMZONE"LETTRE"      2,  2"2");
        }
        else {}
}

// ========================================================================
// cette procedure permet de charger la zone en fonction de celle-ci et de
// sa structure  Ce chargeent est pour la nuit
// ========================================================================
void ChargementPNJaeraNUIT(object oZONE)
{
    
string sNOMZONE =   GetTag(oZONE);
        
// if block - silly!
        
if (sNOMZONE == "") {}
        }
        else if (
sNOMZONE == "A07" )
        {
             
ChargeUnPNJ (sNOMZONE"MARIN"      510"0");
             
ChargeUnPNJ (sNOMZONE"CAPTAINE"   110"0");
             
ChargeUnPNJ (sNOMZONE"ANCIPIEL"   410"0");
             
ChargeUnPNJ (sNOMZONE"FRAPPE"     310"0");
             
ChargeUnPNJ (sNOMZONE"GARDE_ARMEE"5,  2"1");
        }
         else if (
sNOMZONE == "A25" )
        {
             
// AREA 25 RDC DU CHATEAU
             // ======================
             
ChargeUnPNJ (sNOMZONE"DOMEST_HOMME"511"0");
             
ChargeUnPNJ (sNOMZONE"DOMEST_FEMME"511"0");
             
ChargeUnPNJ (sNOMZONE"ENFANT_NOBLE"411"0");
             
ChargeUnPNJ (sNOMZONE"NOBLE_HOMME" 511"0");
             
ChargeUnPNJ (sNOMZONE"NOBLE_FEMME" 311"0");
             
ChargeUnPNJ (sNOMZONE"GARDE_ARMEE" 4,  3"1");
             
ChargeUnPNJ (sNOMZONE"LETTRE"      2,  2"2");
             
ChargeUnPNJ (sNOMZONE"DANSEUR"     2,  1"3");
             
ChargeUnPNJ (sNOMZONE"DANSEUSE"    2,  1"3");
        }
        else {}
}

// ==============================================================
// PROCEDURE PERMETANT DE VIDER UNE ZONE AFIN DE LA REMPLIR AVEC
// DE NOUVEAUX ELEMENTS
// ==============================================================
void ViderZone(object oZONE)
{
    
object oObjetaDetruire GetFirstObjectInArea(oZONE);
    
object oFirstPC        GetNearestCreature(CREATURE_TYPE_PLAYER_CHARPLAYER_CHAR_IS_PC);
    
string sTag             ;

    while (
GetIsObjectValid(oObjetaDetruire)) {
       if ( (
GetObjectType(oObjetaDetruire) == OBJECT_TYPE_CREATURE) ||
            (
GetObjectType(oObjetaDetruire) == OBJECT_TYPE_ITEM)      ) {
             
AssignCommand(oObjetaDetruireClearAllActions()); // pour initialisation des actions PNJ
             
if (!GetPlotFlag(oObjetaDetruire)) {
                    if (
GetName(GetMaster(oObjetaDetruire))==""){
                        
sTag GetTag(oObjetaDetruire);
                        
sTag GetStringLeft(sTag,4);
                        if (! (
sTag == "PRM_"))
                            
DestroyObject (oObjetaDetruire);
                    }
             }  
// fin de IF
       
}  // fin de IF
       
oObjetaDetruire=GetNextObjectInArea();
    }  
// fin de while
    // ===============================================================
    // et maintenant j'initialise les valeurs indiquant si on est jour
    // ou nuit
    // ===============================================================

    
SetLocalInt(oZONE,"NuitActive",0);
    
SetLocalInt(oZONE,"JourActif",0);

Suite aqu prochain thread
Lien direct vers le message - Vieux
Avatar de Etienne C
Etienne C
Roi
 
Avatar de Etienne C
 
Il faudra créer des personnages ayant pour Reference :
MARIN
CAPITAINE
et ayant même TAG.

Dans la zone il faut créer des points de passage ayant le tag suivant
WP_[tag aera]_x0i
x étant une différenciation des personnages (car il sont posé aléatoirement suivant les 0i. les 0i étant le nombre de TAG
exemple WP_A07_001, WP_A07_002, WP_A07_003... WP_A07_010, WP_A07_101, WP_A07_102

Alors on met dans onenter le script suivant :
Code PHP:
//**********************************
// SCRIPT POUR LA MAISON ANIMEE
//**********************************
// ************************************************************
// la commence le script de l'action il permet juste de charger
// le nombre personnage se trouvant dans la zone
// ************************************************************
#include "zinclude_area"
void main()
{
    
// oZONE est la zone dans laquelle se trouve le personnage entrant
    
object oZONE    =   OBJECT_SELF;
    
object oPJ      =   GetEnteringObject();
    
// c'est bien un personnage connect qui entre (PJ ou maitre)
    
if (GetIsPC(oPJ)) {
        
SetLocalInt(oZONE"li_NbrPJ"GetLocalInt(oZONE"li_NbrPJ") + 1);
        if (
GetLocalInt(oZONE"li_NbrPJ") == 1)
        {
            if (
GetIsNight())
            {
                
SetLocalInt(oZONE,"NuitActive",2);
                
SetLocalInt(oZONE,"JourActif",1);
                
ChargementPNJaeraNUIT(oZONE);
            }
            else
            {
                
SetLocalInt(oZONE,"NuitActive",1);
                
SetLocalInt(oZONE,"JourActif",2);
                
ChargementPNJaera(oZONE);
            }
        }
    }

On met dans le onExit le script suivant :
Code PHP:
 //**********************************
// SCRIPT DE SORTIE DE ZONE
//**********************************
#include "zinclude_area"
void main()
    {
    
//DECLARATION DES VARIABLES
    
object oPJ             GetExitingObject();
    
object oModule         GetModule();
    
object oZONE           OBJECT_SELF;

    
int nNBdePC GetLocalInt(oZONE,"li_NbrPJ"); // remplacer la variable par celle utilise dans le OnEnter de la zone

    //Mise a jour du Compteur
    
if (GetIsPC(oPJ))
    {
        
nNBdePC nNBdePC 1;
        
SetLocalInt(oZONE,"li_NbrPJ",nNBdePC);// remplacer la variable par celle utilise dans le OnEnter de la zone
    
}

    
//TEST POUR VERIFIER SI IL RESTE DES PC DANS L'Area
    
if (nNBdePC == 0)  ViderZone(oZONE);

et enfin dans le onHeartBeat de la zone (le test permet que cela ne se fasse que deux fois par jours :

Code PHP:
#include "zinclude_area"
void main()
{
    
object oZONE   OBJECT_SELF;

    if (
GetIsNight() && GetLocalInt(oZONE,"NuitActive") == 1)
    {
        
SetLocalInt(oZONE,"NuitActive",2);
        
SetLocalInt(oZONE,"JourActif",1);
        
ViderZone(oZONE);
        
ChargementPNJaeraNUIT(oZONE);
    }
    if (
GetIsDay() && GetLocalInt(oZONE,"JourActif") == 1)
    {
        
SetLocalInt(oZONE,"NuitActive",1);
        
SetLocalInt(oZONE,"JourActif",2);
        
ViderZone(oZONE);
        
ChargementPNJaera(oZONE);
    }

Lien direct vers le message - Vieux
Avatar de Ange Musicien
JOL Ange Musicien
Alpha & Oméga
 
Avatar de Ange Musicien
 
Moui Après tu adaptes comme tu veux mon chou Mais c'est la même chose. Je cherche à créer un script éducatif est facile pour débutant, je ne suis pas sur que ce soit le même cahier des charges

Ton script est un script de PW pré-professionel (il manque pas mal de trucs, l'économie de CPU est assez relative, entre autres points). Des scripts de ce type, tous les PW en ont créé un pour eux... Disons alors que ton script est à mi-chemin entre les deux. Mais il aurait mieux valu créé un autre sujet, je pense. Enfin bref, je n'ai pas le temps de regarder ce soir, mais dans les prochains jours, si personne n'a corrigé avant moi...

Cela dit, c'est quand même un beau morceau
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 16h03.
   

© 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