202 lines
9.3 KiB
Plaintext
202 lines
9.3 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Default: On Spawn In
|
|
//:: NW_C2_DEFAULT9
|
|
//:: Copyright (c) 2001 Bioware Corp.
|
|
//:://////////////////////////////////////////////
|
|
/*
|
|
Determines the course of action to be taken
|
|
after having just been spawned in
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Preston Watamaniuk
|
|
//:: Created On: Oct 25, 2001
|
|
//:://////////////////////////////////////////////
|
|
#include "NW_O2_CONINCLUDE"
|
|
#include "NW_I0_GENERIC"
|
|
#include "x3_inc_string"
|
|
#include "uc_h"
|
|
|
|
|
|
int fnGetRandomFromString(string sIn)
|
|
{ // PURPOSE: To return a random value from input value of
|
|
// # of values.value 1/value2/value3/../valuen
|
|
string sMaster=sIn;
|
|
string sMax=StringParse(sMaster,".");
|
|
string sParse;
|
|
int nMax=StringToInt(sMax);
|
|
int nR;
|
|
int nN;
|
|
if (nMax>0)
|
|
{ // continue
|
|
sMaster=StringRemoveParsed(sMaster,sMax,".");
|
|
nR=Random(nMax)+1;
|
|
nN=0;
|
|
sParse=StringParse(sMaster,"/");
|
|
while(GetStringLength(sMaster)>0)
|
|
{ // parse
|
|
nN++;
|
|
if (nN==nR) return StringToInt(sParse);
|
|
sMaster=StringRemoveParsed(sMaster,sParse,"/");
|
|
sParse=StringParse(sMaster,"/");
|
|
} // parse
|
|
} // continue
|
|
return -1;
|
|
} // fnGetRandomFromString()
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////[ MAIN ]////////////////////
|
|
void main()
|
|
{
|
|
ExecuteScript("prc_npc_spawn", OBJECT_SELF);
|
|
|
|
object oMe=OBJECT_SELF;
|
|
object oMod=GetModule();
|
|
object oAProxy;
|
|
string sID=GetLocalString(oMe,"sTeamID");
|
|
string sS=GetLocalString(oMod,"sIsAlliedTo"+sID);
|
|
int nTime;
|
|
int nN;
|
|
string sResRef=GetResRef(OBJECT_SELF);
|
|
string sMyTag=GetTag(OBJECT_SELF);
|
|
int nBornTime=GetTimeHour()+GetCalendarDay()*24+GetCalendarMonth()*24*30+GetCalendarYear()*24*30*12;
|
|
int nUnitNum=GetLocalInt(oMe,"nUnitNum");
|
|
if (GetLocalInt(oMe,"bChampion"))
|
|
{ // champion
|
|
PrintString("Champion was born:"+GetName(oMe));
|
|
SetAILevel(oMe,AI_LEVEL_NORMAL);
|
|
AssignCommand(oMe,SetIsDestroyable(FALSE,TRUE,TRUE));
|
|
} // champion
|
|
if (GetStringLength(sS)>0&&GetLocalInt(oMod,"bIsAllianceLeader"+sID)!=TRUE)
|
|
{ // make sure allied
|
|
oAProxy=GetObjectByTag(sS+"_PROXY");
|
|
if(GetIsEnemy(oAProxy,oMe)) ChangeFaction(oMe,oAProxy);
|
|
} // make sure allied
|
|
if (StringToInt(GetStringRight(sMyTag,2))>0) sMyTag=GetStringLeft(sMyTag,GetStringLength(sMyTag)-2);
|
|
else sMyTag=GetStringLeft(sMyTag,GetStringLength(sMyTag)-1);
|
|
if (sMyTag=="DWF"||sMyTag=="SPID"||sMyTag=="UND"||sMyTag=="UNC"||sMyTag=="MER")
|
|
{ // assign team
|
|
SetLocalString(OBJECT_SELF,"sTeamID",sMyTag);
|
|
} // assign team
|
|
if (sMyTag=="UND25") SetLocalInt(OBJECT_SELF,"nMana",4);
|
|
// OPTIONAL BEHAVIORS (Comment In or Out to Activate ) ****************************************************************************
|
|
//SetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION);
|
|
//SetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION);
|
|
// This causes the creature to say a special greeting in their conversation file
|
|
// upon Perceiving the player. Attach the [NW_D2_GenCheck.nss] script to the desired
|
|
// greeting in order to designate it. As the creature is actually saying this to
|
|
// himself, don't attach any player responses to the greeting.
|
|
|
|
//SetSpawnInCondition(NW_FLAG_SHOUT_ATTACK_MY_TARGET);
|
|
// This will set the listening pattern on the NPC to attack when allies call
|
|
//SetSpawnInCondition(NW_FLAG_STEALTH);
|
|
// If the NPC has stealth and they are a rogue go into stealth mode
|
|
//SetSpawnInCondition(NW_FLAG_SEARCH);
|
|
// If the NPC has Search go into Search Mode
|
|
//SetSpawnInCondition(NW_FLAG_SET_WARNINGS);
|
|
// This will set the NPC to give a warning to non-enemies before attacking
|
|
|
|
//SetSpawnInCondition(NW_FLAG_SLEEP);
|
|
//Creatures that spawn in during the night will be asleep.
|
|
//SetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING);
|
|
//SetSpawnInCondition(NW_FLAG_APPEAR_SPAWN_IN_ANIMATION);
|
|
//SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS);
|
|
//SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS);
|
|
//This will play Ambient Animations until the NPC sees an enemy or is cleared.
|
|
//NOTE that these animations will play automatically for Encounter Creatures.
|
|
|
|
// NOTE: ONLY ONE OF THE FOLOOWING ESCAPE COMMANDS SHOULD EVER BE ACTIVATED AT ANY ONE TIME.
|
|
//SetSpawnInCondition(NW_FLAG_ESCAPE_RETURN); // OPTIONAL BEHAVIOR (Flee to a way point and return a short time later.)
|
|
//SetSpawnInCondition(NW_FLAG_ESCAPE_LEAVE); // OPTIONAL BEHAVIOR (Flee to a way point and do not return.)
|
|
//SetSpawnInCondition(NW_FLAG_TELEPORT_LEAVE); // OPTIONAL BEHAVIOR (Teleport to safety and do not return.)
|
|
//SetSpawnInCondition(NW_FLAG_TELEPORT_RETURN); // OPTIONAL BEHAVIOR (Teleport to safety and return a short time later.)
|
|
|
|
// CUSTOM USER DEFINED EVENTS
|
|
/*
|
|
The following settings will allow the user to fire one of the blank user defined events in the NW_D2_DefaultD. Like the
|
|
On Spawn In script this script is meant to be customized by the end user to allow for unique behaviors. The user defined
|
|
events user 1000 - 1010
|
|
*/
|
|
//SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1001
|
|
//SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1002
|
|
//SetSpawnInCondition(NW_FLAG_ATTACK_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1005
|
|
//SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1006
|
|
//SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1008
|
|
//SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1003
|
|
//SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1004
|
|
//SetSpawnInCondition(NW_FLAG_DEATH_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1007
|
|
|
|
// DEFAULT GENERIC BEHAVIOR (DO NOT TOUCH) *****************************************************************************************
|
|
SetListeningPatterns(); // Goes through and sets up which shouts the NPC will listen to.
|
|
//WalkWayPoints(); // Optional Parameter: void WalkWayPoints(int nRun = FALSE, float fPause = 1.0)
|
|
// 1. Looks to see if any Way Points in the module have the tag "WP_" + NPC TAG + "_0X", if so walk them
|
|
// 2. If the tag of the Way Point is "POST_" + NPC TAG the creature will return this way point after
|
|
// combat.
|
|
GenerateNPCTreasure(); //* Use this to create a small amount of treasure on the creature
|
|
|
|
DelayCommand(0.1,ExecuteScript("rts_unit_count",oMe));
|
|
|
|
|
|
if (nUnitNum>0)
|
|
{ // unit num
|
|
if (GetLocalInt(oMe,"nTimeToUpgrade")<1)
|
|
{ // don't know upgrades yet
|
|
nTime=GetUnitTimedUpgradeTime(sID,nUnitNum);
|
|
SetLocalInt(oMe,"nBornTime",nBornTime);
|
|
if (nTime>0) SetLocalInt(oMe,"nTimeToUpgrade",nBornTime+nTime);
|
|
} // don't know upgrades yet
|
|
if (nTime>0)
|
|
{ // timed upgrade
|
|
//SendMessageToPC(GetFirstPC(),"==DelayCommand set==");
|
|
DelayCommand(18.0,ExecuteScript("rts_timed_upg",oMe));
|
|
SetLocalInt(oMe,"nTimedUpgSet",TRUE);
|
|
} // timed upgrade
|
|
} // unit num
|
|
if (sResRef!="dwfupg1"&&sResRef!="dwfupg2") ExecuteScript("rts_unit_ai",oMe);
|
|
object oNear=GetNearestObjectByTag(GetTag(oMe),oMe);
|
|
object oNear2=GetNearestObjectByTag(GetTag(oMe),oMe,2);
|
|
if (GetIsObjectValid(oNear)&&GetIsObjectValid(oNear2)&&GetDistanceBetween(oMe,oNear2)<10.0) return; // abort randomize with large groups.
|
|
sS=GetLocalString(oMe,"sRandomAppearance");
|
|
if (GetStringLength(sS)>0)
|
|
{ // possible random appearance
|
|
nN=fnGetRandomFromString(sS);
|
|
if (nN>-1) SetCreatureAppearanceType(oMe,nN);
|
|
} // possible random appearance
|
|
else if (sResRef=="und2")
|
|
{ // random zombie appearance
|
|
if (d4()>2) SetCreatureAppearanceType(OBJECT_SELF,APPEARANCE_TYPE_ZOMBIE_ROTTING);
|
|
} // random zombie appearance
|
|
sS=GetLocalString(oMe,"sRandomHead");
|
|
if (GetStringLength(sS)>0)
|
|
{ // random head
|
|
nN=fnGetRandomFromString(sS);
|
|
if (nN>-1) SetCreatureBodyPart(CREATURE_PART_HEAD,nN,oMe);
|
|
} // random head
|
|
sS=GetLocalString(oMe,"sRandomPhenotype");
|
|
if (GetStringLength(sS)>0)
|
|
{ // random phenotype
|
|
nN=fnGetRandomFromString(sS);
|
|
if (nN>-1) SetPhenoType(nN,oMe);
|
|
} // random phenotype
|
|
sS=GetLocalString(oMe,"sRandomTail");
|
|
if (GetStringLength(sS)>0)
|
|
{ // random tail
|
|
nN=fnGetRandomFromString(sS);
|
|
if (nN>-1) SetCreatureTailType(nN,oMe);
|
|
} // random tail
|
|
sS=GetLocalString(oMe,"sRandomSkinColor");
|
|
if (GetStringLength(sS)>0)
|
|
{ // random skin color
|
|
nN=fnGetRandomFromString(sS);
|
|
if (nN>-1) SetColor(oMe,COLOR_CHANNEL_SKIN,nN);
|
|
} // random skin color
|
|
sS=GetLocalString(oMe,"sRandomHairColor");
|
|
if (GetStringLength(sS)>0)
|
|
{ // random hair color
|
|
nN=fnGetRandomFromString(sS);
|
|
if (nN>-1) SetColor(oMe,COLOR_CHANNEL_HAIR,nN);
|
|
} // random hair color
|
|
}
|
|
|
|
|