191 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			191 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
//::///////////////////////////////////////////////
 | 
						|
//:: commoner_main.nss
 | 
						|
//:://////////////////////////////////////////////
 | 
						|
/*
 | 
						|
     Main script for the commoner spawner. Enter
 | 
						|
     the different parameters in the "Options"
 | 
						|
     block below. See readme.txt for additional
 | 
						|
     help.
 | 
						|
     Use the "Custom" block to add script lines
 | 
						|
     if you need to run some script in the area
 | 
						|
     heartbeat yourself.
 | 
						|
*/
 | 
						|
//:://////////////////////////////////////////////
 | 
						|
//:: Created By: EntropyDecay
 | 
						|
//:: Created On: May 2003
 | 
						|
//:://////////////////////////////////////////////
 | 
						|
 | 
						|
void main()
 | 
						|
{
 | 
						|
  object oArea = GetArea(OBJECT_SELF);
 | 
						|
  if (GetLocalInt(oArea, "initialized")==0)
 | 
						|
  {
 | 
						|
    SetLocalInt(oArea, "initialized", 1);
 | 
						|
 | 
						|
    //Options:
 | 
						|
    //Required parameters
 | 
						|
    int nWalkWayPoints =  10;                   //Number of waypoints in area
 | 
						|
    string sCommonerName = "Baleas Commoner";   //Name of commoners (used to select which
 | 
						|
                                                //spawned creatures can be randomized)
 | 
						|
    string sResRefBody = "npc_baleas";          //ResRef-beginning of commoners in area
 | 
						|
    int nTypesOfCommoner = 11;                  //Number of different commoners
 | 
						|
    string sResRefClothing = "baleas_cloth";    //ResRef-beginning of clothing
 | 
						|
    int nTypesOfClothing = 10;                  //Number of different clothings
 | 
						|
    int nDialogLines = 10;                      //Number of different one liner dialogs
 | 
						|
 | 
						|
    //Commoner options
 | 
						|
    int nCommonerMax = 16;                  //Maximum number of commoners spawned
 | 
						|
                                            //(clear weather & day!)
 | 
						|
    int nCommonerRain = 50;                 //Percentage when it's raining
 | 
						|
    int nCommonerSnow = 20;                 //Percentage when it's snowing
 | 
						|
    int nCommonerNight = 100;               //Percentage by night
 | 
						|
    int nCommonerTorchOnlyByNight = TRUE;   //When to spawn with torch:
 | 
						|
                                            //TRUE: only by night, FALSE: all day
 | 
						|
    int nCommonerTorch = 50;                //Percentage carrying a torch
 | 
						|
    int nClothingRandom = 100;              //Percentage with random selected clothing
 | 
						|
    int nCommonerCarry = 50;                //Percentage carrying something in hands
 | 
						|
                                            //(this does not modify the torch chance!)
 | 
						|
 | 
						|
    //Weather and movement options
 | 
						|
    int nCommonerDayRun = FALSE;            //Movement mode by day
 | 
						|
    int nCommonerNightRun = FALSE;          //Movement mode by night
 | 
						|
    int nCommonerRainRun = TRUE;            //Movement mode if weather = rain
 | 
						|
    int nCommonerSnowRun = FALSE;           //Movement mode if weather = snow
 | 
						|
 | 
						|
 | 
						|
    //Initialization
 | 
						|
    //Don't change anything in this block or the script package
 | 
						|
    //won't function properly!
 | 
						|
    SetLocalInt(oArea, "nWalkWayPoints", nWalkWayPoints);
 | 
						|
    SetLocalString(oArea, "sCommonerName", sCommonerName);
 | 
						|
    SetLocalString(oArea, "sResRefBody", sResRefBody);
 | 
						|
    SetLocalInt(oArea, "nTypesOfCommoner", nTypesOfCommoner);
 | 
						|
    SetLocalString(oArea, "sResRefClothing", sResRefClothing);
 | 
						|
    SetLocalInt(oArea, "nTypesOfClothing", nTypesOfClothing);
 | 
						|
    SetLocalInt(oArea, "nDialogLines", nDialogLines);
 | 
						|
 | 
						|
    SetLocalInt(oArea, "nCommonerMax", nCommonerMax);
 | 
						|
    SetLocalInt(oArea, "nCommonerRain", nCommonerRain);
 | 
						|
    SetLocalInt(oArea, "nCommonerSnow", nCommonerSnow);
 | 
						|
    SetLocalInt(oArea, "nCommonerNight", nCommonerNight);
 | 
						|
    SetLocalInt(oArea, "nCommonerTorchOnlyByNight", nCommonerTorchOnlyByNight);
 | 
						|
    SetLocalInt(oArea, "nCommonerTorch", nCommonerTorch);
 | 
						|
    SetLocalInt(oArea, "nClothingRandom", nClothingRandom);
 | 
						|
    SetLocalInt(oArea, "nCommonerCarry", nCommonerCarry);
 | 
						|
 | 
						|
    SetLocalInt(oArea, "nCommonerDayRun", nCommonerDayRun);
 | 
						|
    SetLocalInt(oArea, "nCommonerNightRun", nCommonerNightRun);
 | 
						|
    SetLocalInt(oArea, "nCommonerRainRun", nCommonerRainRun);
 | 
						|
    SetLocalInt(oArea, "nCommonerSnowRun", nCommonerSnowRun);
 | 
						|
 | 
						|
    int nWeatherType = GetWeather(oArea);
 | 
						|
    int nNewMovement;
 | 
						|
    if (GetIsNight()) {nNewMovement = GetLocalInt(oArea, "nCommonerNightRun");}
 | 
						|
    else {nNewMovement = GetLocalInt(oArea, "nCommonerDayRun");}
 | 
						|
 | 
						|
    if ((nWeatherType == WEATHER_RAIN) && (GetLocalInt(oArea, "nCommonerRainRun") == TRUE))
 | 
						|
      {nNewMovement = TRUE;}
 | 
						|
    else if ((nWeatherType == WEATHER_SNOW) && (GetLocalInt(oArea, "nCommonerSnowRun") == TRUE))
 | 
						|
      {nNewMovement = TRUE;}
 | 
						|
 | 
						|
    SetLocalInt(oArea, "nWalkType", nNewMovement);
 | 
						|
  }
 | 
						|
 | 
						|
 | 
						|
  //Custom (insert own code here)
 | 
						|
 | 
						|
  //Custom end
 | 
						|
 | 
						|
 | 
						|
  //Check if any player is in area
 | 
						|
  int i;
 | 
						|
  object oPlayerInArea = OBJECT_INVALID;
 | 
						|
  object oPC = GetFirstPC();
 | 
						|
    while (GetIsObjectValid(oPC))
 | 
						|
    {
 | 
						|
      if (GetArea(OBJECT_SELF)==GetArea(oPC))
 | 
						|
      {
 | 
						|
        oPlayerInArea = oPC;
 | 
						|
        SetLocalObject(oArea, "oFirstPlayerInArea", oPC);
 | 
						|
        break;
 | 
						|
      }
 | 
						|
      else oPC = GetNextPC();
 | 
						|
    }
 | 
						|
 | 
						|
  //If any player is in area then execute the following script lines
 | 
						|
  if (GetIsObjectValid(oPlayerInArea))
 | 
						|
  {
 | 
						|
    //Weatherblock
 | 
						|
    int nWeatherType = GetWeather(oArea);
 | 
						|
 | 
						|
    if (nWeatherType != GetLocalInt(oArea, "nWeather"))
 | 
						|
    {
 | 
						|
      int nNewMovement;
 | 
						|
      if (GetIsNight()) {nNewMovement = GetLocalInt(oArea, "nCommonerNightRun");}
 | 
						|
      else {nNewMovement = GetLocalInt(oArea, "nCommonerDayRun");}
 | 
						|
 | 
						|
      if ((nWeatherType == WEATHER_RAIN) && (GetLocalInt(oArea, "nCommonerRainRun") == TRUE))
 | 
						|
        {nNewMovement = TRUE;}
 | 
						|
      else if ((nWeatherType == WEATHER_SNOW) && (GetLocalInt(oArea, "nCommonerSnowRun") == TRUE))
 | 
						|
        {nNewMovement = TRUE;}
 | 
						|
 | 
						|
      SetLocalInt(oArea, "nWeather", nWeatherType);
 | 
						|
      SetLocalInt(oArea, "nWalkType", nNewMovement);
 | 
						|
 | 
						|
      i=1;
 | 
						|
      object oCommoner = GetNearestObjectByTag("NW_COMMONER", oPC,i);
 | 
						|
      while (GetIsObjectValid(oCommoner))
 | 
						|
      {
 | 
						|
        AssignCommand(oCommoner, ExecuteScript("commoner_resume", oCommoner));
 | 
						|
        i++;
 | 
						|
        oCommoner = GetNearestObjectByTag("NW_COMMONER", oPC,i);
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
    //Commonerblock
 | 
						|
    int nCommonersToSpawn;
 | 
						|
    int nMaximumToSpawn = GetLocalInt(oArea, "nCommonerMax");
 | 
						|
    int nRainMultiplier = GetLocalInt(oArea, "nCommonerRain");
 | 
						|
    int nSnowMultiplier = GetLocalInt(oArea, "nCommonerSnow");
 | 
						|
    int nNightMultiplier = GetLocalInt(oArea, "nCommonerNight");
 | 
						|
 | 
						|
    if (!GetIsNight()) nNightMultiplier = 100;
 | 
						|
 | 
						|
    if (GetWeather(oArea)==WEATHER_RAIN)
 | 
						|
    {
 | 
						|
      nMaximumToSpawn = (nMaximumToSpawn * nRainMultiplier * nNightMultiplier + 5000)/10000;
 | 
						|
    }
 | 
						|
    else if (GetWeather(oArea)==WEATHER_SNOW)
 | 
						|
    {
 | 
						|
      nMaximumToSpawn = (nMaximumToSpawn * nSnowMultiplier * nNightMultiplier + 5000)/10000;
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
      nMaximumToSpawn = (nMaximumToSpawn * nNightMultiplier + 50)/100;
 | 
						|
    }
 | 
						|
 | 
						|
    int nCommonersSpawned=0;
 | 
						|
    object oCount = GetNearestObjectByTag("NW_COMMONER", oPlayerInArea);
 | 
						|
    while (GetIsObjectValid(oCount))
 | 
						|
    {
 | 
						|
      nCommonersSpawned++;
 | 
						|
      oCount = GetNearestObjectByTag("NW_COMMONER", oPlayerInArea, nCommonersSpawned+1);
 | 
						|
    }
 | 
						|
 | 
						|
    nCommonersToSpawn = nMaximumToSpawn - nCommonersSpawned;
 | 
						|
    if (nCommonersToSpawn > 0)
 | 
						|
    {
 | 
						|
      int nSpawn = Random(nCommonersToSpawn+1);
 | 
						|
 | 
						|
      int nSpawnInterval;
 | 
						|
      if (nSpawn!=0) nSpawnInterval = 60 / nSpawn;
 | 
						|
 | 
						|
      for (i=1; i <= nSpawn; i++)
 | 
						|
      {
 | 
						|
        float fSpawnDelay = IntToFloat(Random(nSpawnInterval))/10 + ((IntToFloat(nSpawnInterval)/10) * (i-1));
 | 
						|
        DelayCommand(fSpawnDelay, ExecuteScript("commoner_creator", OBJECT_SELF));
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 |