Tout d'abord bine nommer les TAG de ses zones (Area). J'utilise une norme simple :
etc...
Tout d'abord une librairie (bibliothèque suivant les goût) sera utiliser pour le peuplement de la ville zinclude_aera
// =================================================
// initialisation des fonctions de chatgement de PNJ
// =================================================
void ChargeUnPNJ (string sNOMZONE, string sTypePNJ, int iNombrePNJ, int iNombreWP, string 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 (i <= 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_CREATURE, sNomRef, la);
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" , 5, 10, "0");
ChargeUnPNJ (sNOMZONE, "CAPTAINE" , 1, 10, "0");
ChargeUnPNJ (sNOMZONE, "ANCIPIEL" , 4, 10, "0");
ChargeUnPNJ (sNOMZONE, "DOMEST_HOMME", 3, 10, "0");
ChargeUnPNJ (sNOMZONE, "DOMEST_FEMME", 5, 10, "0");
ChargeUnPNJ (sNOMZONE, "NOBLE_HOMME" , 3, 10, "0");
ChargeUnPNJ (sNOMZONE, "NOBLE_FEMME" , 5, 10, "0");
ChargeUnPNJ (sNOMZONE, "PRETRE" , 2, 10, "0");
ChargeUnPNJ (sNOMZONE, "LETTRE" , 1, 10, "0");
ChargeUnPNJ (sNOMZONE, "MOYEN_F" , 4, 10, "0");
ChargeUnPNJ (sNOMZONE, "MOYEN_H" , 4, 10, "0");
ChargeUnPNJ (sNOMZONE, "MOYEN_E" , 8, 10, "0");
ChargeUnPNJ (sNOMZONE, "FRAPPE" , 3, 10, "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", 5, 11, "0");
ChargeUnPNJ (sNOMZONE, "DOMEST_FEMME", 5, 11, "0");
ChargeUnPNJ (sNOMZONE, "ENFANT_NOBLE", 4, 11, "0");
ChargeUnPNJ (sNOMZONE, "NOBLE_HOMME" , 5, 11, "0");
ChargeUnPNJ (sNOMZONE, "NOBLE_FEMME" , 3, 11, "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" , 5, 10, "0");
ChargeUnPNJ (sNOMZONE, "CAPTAINE" , 1, 10, "0");
ChargeUnPNJ (sNOMZONE, "ANCIPIEL" , 4, 10, "0");
ChargeUnPNJ (sNOMZONE, "FRAPPE" , 3, 10, "0");
ChargeUnPNJ (sNOMZONE, "GARDE_ARMEE", 5, 2, "1");
}
else if (sNOMZONE == "A25" )
{
// AREA 25 RDC DU CHATEAU
// ======================
ChargeUnPNJ (sNOMZONE, "DOMEST_HOMME", 5, 11, "0");
ChargeUnPNJ (sNOMZONE, "DOMEST_FEMME", 5, 11, "0");
ChargeUnPNJ (sNOMZONE, "ENFANT_NOBLE", 4, 11, "0");
ChargeUnPNJ (sNOMZONE, "NOBLE_HOMME" , 5, 11, "0");
ChargeUnPNJ (sNOMZONE, "NOBLE_FEMME" , 3, 11, "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_CHAR, PLAYER_CHAR_IS_PC);
string sTag ;
while (GetIsObjectValid(oObjetaDetruire)) {
if ( (GetObjectType(oObjetaDetruire) == OBJECT_TYPE_CREATURE) ||
(GetObjectType(oObjetaDetruire) == OBJECT_TYPE_ITEM) ) {
AssignCommand(oObjetaDetruire, ClearAllActions()); // 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);
}