HoS_PRC8/_mod/_module/nss/npcact_lite.nss
Jaysyn904 e2f4ba74d5 Merged redundant hak files
Merged redundant hak files.  Moved hak scripts into module.  Updated gitignore.  Full Compile.  Added release folder & archive.
2024-12-12 15:02:17 -05:00

290 lines
10 KiB
Plaintext

////////////////////////////////////////////////////////////////////////////////
// npcact_lite - NPC ACTIVITIES 6.0 Lite version Interpretter
//------------------------------------------------------------------------------
// By Deva Bryson Winblood 04/30/2004
//------------------------------------------------------------------------------
// Last Modified By: Deva Bryson Winblood
// Last Modified Date: 06/01/2004
////////////////////////////////////////////////////////////////////////////////
#include "npcactivitiesh"
#include "npcact_h_cust" // customization
#include "npcact_h_core" // core commands
#include "npcact_h_logic" // logic commands
#include "npcact_h_make" // creation commands
#include "npcact_h_var" // variable initialization and setting commands
#include "npcact_h_vfx" // visual effect commands
#include "npcact_h_speak" // Speaking and singing related commands
/////////////////////////
// PROTOTYPES
/////////////////////////
void fnDoPauseThenEnd();
///////////////////////////////////////////////////////////////////////// MAIN
void main()
{
object oMe=OBJECT_SELF;
string sAct=GetLocalString(oMe,"sAct");
float fDelay=0.2; // default delay
string sCommand=fnParse(sAct);
string sL1=GetStringLeft(sAct,1);
string sL2=GetStringLeft(sAct,2);
string sL3=GetStringLeft(sAct,3);
string sL4=GetStringLeft(sAct,4);
string sS;
int nGNBDisabled=GetLocalInt(oMe,"nGNBDisabled");
fnDebug(GetTag(oMe)+" LITE INTERPRETER",TRUE);
if (nGNBDisabled!=TRUE&&fnGetIsBusy(oMe)==FALSE&&GetStringLength(sAct)>0)
{ // okay to deal with commands
fnDebug(" sAct Before='"+sAct+"' LEN:"+IntToString(GetStringLength(sAct)),TRUE);
sAct=fnRemoveParsed(sAct,sCommand);
fnDebug(" sAct After='"+sAct+"' LEN:"+IntToString(GetStringLength(sAct)),TRUE);
SetLocalString(oMe,"sAct",sAct);
SetLocalInt(oMe,"nGNBInterpActivity",0); // used as fail safe
/// begin the big if/else if
if (sL1=="@")
{ // custom script
fnDebug("["+GetTag(oMe)+"]Custom Script("+sCommand+")",TRUE);
fDelay=fnNPCACTAtScript(sCommand);
} // custom script
else if (sL1=="'")
{ // Quick speak
fDelay=0.1;
AssignCommand(oMe,SpeakString(GetStringRight(sCommand,GetStringLength(sCommand)-1)));
} // Quick Speak
else if (sL1=="#")
{ // library call
fnDebug("["+GetTag(oMe)+"]Library Call("+sCommand+")",TRUE);
fDelay=fnNPCACTLibCall(sCommand);
} // library call
else if (sL1=="*")
{ // professions call
fnDebug("["+GetTag(oMe)+"]Professions Call("+sCommand+")",TRUE);
fDelay=fnNPCACTProfCall(sCommand);
} // professions call
else if (sL1=="&")
{ // IF logic
fDelay=fnNPCACTLogicCore(sCommand);
} // IF logic
else if (sL1=="!")
{ // Set variable
fDelay=fnNPCACTSetVariable(sCommand);
} // Set variable
else if (sL1=="+"||sL1=="-")
{ // variable addition and subtraction
fDelay=fnNPCACTAddSubtract(sCommand);
} // variable addition and subtraction
else if (sL1=="$")
{ // custom event script assign
fDelay=fnNPCACTScriptSet(sCommand);
} // custom event script assign
else if (sL1=="^")
{ // non-visual effect
fDelay=fnNPCACTNonVFX(sCommand);
} // non-visual effect
else if (sL1=="]")
{ // Set Appearance
fDelay=fnNPCACTSetAppearance(sCommand);
} // Set Appearance
else if (sL1=="[")
{ // Set Mode
fDelay=fnNPCACTModeSet(sCommand);
} // Set Mode
else if (sL1==">")
{ // Set timed event
fDelay=fnNPCACTInsertTimedEvent(sCommand);
} // Set timed event
else if (sL4=="ANIM")
{ // animation command
fDelay=fnNPCACTAnimate(sCommand);
} // animation command
else if (sL2=="TT")
{ // Talk to
fDelay=fnNPCACTTalkTo(sCommand);
} // Talk to
else if (sL3=="RWL"||(sL2=="RW"&&GetStringLength(sCommand)>2))
{ // random word list
fDelay=fnNPCACTRandomSpeak(sCommand);
} // random word list
else if (sL4=="LYRI"||sL2=="LY")
{ // sing song
fDelay=fnNPCACTLyrical(sCommand);
} // sing song
else if (sL2=="RC")
{ // random command
fDelay=fnNPCACTRandomCommand(sCommand);
} // random command
else if (sL2=="WP")
{ // set new destination
sCommand=GetStringRight(sCommand,GetStringLength(sCommand)-2);
SetLocalString(OBJECT_SELF,"sGNBDTag",sCommand);
} // set new destination
else if (sL1==":")
{ // create creature
fDelay=fnNPCACTMakeCreature(sCommand);
} // create creature
else if (sL2=="AO")
{ // attack object by tag
fDelay=fnNPCACTAttackObject(sCommand);
} // attack object by tag
else if (sL2=="CB")
{ // enter combat with person with specific tag
fDelay=fnNPCACTEnterCombat(sCommand);
} // enter combat with person with specific tag
else if (sL2=="Cc")
{ // change clothing
fDelay=fnNPCACTChangeClothes(sCommand);
} // change clothing
else if (sL2=="DO")
{ // Destroy Object by tag
fDelay=fnNPCACTDestroyObject(sCommand);
} // Destroy Object by tag
else if (sL2=="EQ")
{ // Equip Weapons
fDelay=fnNPCACTEquipWeapons();
} // Equip Weapons
else if (sL2=="UE")
{ // Unequip Weapons
fDelay=fnNPCACTUnequipWeapons();
} // Unequip Weapons
else if (sCommand=="REST"||sCommand=="RS")
{ // rest
fDelay=fnNPCACTRest();
} // rest
else if (sCommand=="SLEP"||sCommand=="SL")
{ // sleep
fDelay=fnNPCACTSleep();
} // sleep
else if (sL4=="SITS")
{ // sits
fDelay=fnNPCACTSitForSpecified(sCommand);
} // sits
else if (sL2=="CO"&&GetStringLength(sCommand)>2)
{ // create item
fDelay=fnNPCACTMakeItem(sCommand);
} // create item
else if (sL2=="CP")
{ // create placeable
fDelay=fnNPCACTMakePlaceable(sCommand);
} // create placeable
else if (sL4=="FOTG"||sL2=="FT")
{ // follow specific tag
fDelay=fnNPCACTFollowByTag(sCommand);
} // follow specific tag
else if (sCommand=="RAND"||sCommand=="RW")
{ // random walk
fDelay=fnNPCACTRandomWalk();
} // random walk
else if (sL4=="TAKE"||sL2=="TK")
{ // take item by tag
fDelay=fnNPCACTTakeItem(sCommand);
} // take item by tag
else if (sL4=="WAIT"||sL2=="WT")
{ // wait
fDelay=fnNPCACTWait(sCommand);
} // wait
else if (sL4=="SFAC"||sL2=="SF")
{ // Set Facing
fDelay=fnNPCACTSetFacing(sCommand);
} // Set Facing
else if (sCommand=="LOCK"||sCommand=="lk")
{ // lock doors or container
fDelay=fnNPCACTLockThings();
} // lock doors or container
else if (sCommand=="UNLOCK"||sCommand=="ul")
{ // unlock
fDelay=fnNPCACTUnlock();
} // unlock
else if (sCommand=="CLOS"||sCommand=="CD")
{ // close door
fDelay=fnNPCACTCloseDoors();
} // close door
else if (sL3=="LAG"||(sL1=="L"&&GetStringLength(sCommand)==2))
{ // lag commands
sL1=GetStringRight(sCommand,1);
if (sL1=="1") SetLocalInt(OBJECT_SELF,"nGNBLagMeth",1);
else if (sL1=="2") SetLocalInt(OBJECT_SELF,"nGNBLagMeth",2);
else if (sL1=="3") SetLocalInt(OBJECT_SELF,"nGNBLagMeth",3);
else if (sL1=="4") SetLocalInt(OBJECT_SELF,"nGNBLagMeth",4);
} // lag commands
else if (sCommand=="NONP"||sCommand=="NN")
{ // no NPC interaction
SetLocalInt(OBJECT_SELF,"nNN",TRUE);
fDelay=0.1;
} // no NPC interaction
else if (sCommand=="YSNP"||sCommand=="YN")
{ // yes NPC interaction
DeleteLocalInt(OBJECT_SELF,"nNN");
fDelay=0.1;
} // yes NPC interaction
else if (sL2=="BS")
{ // base script set
fDelay=fnNPCACTSetBaseScripts(sCommand);
} // base script set
else if (sL2=="BM")
{ // beam effect
fDelay=fnNPCACTBeamEffect(sCommand);
} // beam effect
else if (sL3=="EFF")
{ // Effect
fDelay=fnNPCACTEffects(sCommand);
} // Effect
else if (sL2=="FX")
{ // FX area
fDelay=fnNPCACTPlaceableVFX(sCommand);
} // FX area
else if (sL2=="PF")
{ // persistent visual effect
fDelay=fnNPCACTPersistentVFX(sCommand);
} // persistent visual effect
else if (sL2=="RV")
{ // remove visual effect
fDelay=fnNPCACT4Visual(0,sCommand);
} // remove visual effect
else if (sL2=="VF")
{ // add visual effect
fDelay=fnNPCACT4Visual(1,sCommand);
} // add visual effect
else if (sL2=="YP"||sL4=="YSPC")
{ // enable PC interaction
DeleteLocalInt(OBJECT_SELF,"bNPCACTNOPC");
} // enable PC interaction
else if (sL2=="NP"||sL4=="NOPC")
{ // disable PC interaction
SetLocalInt(OBJECT_SELF,"bNPCACTNOPC",TRUE);
} // disable PC interaction
/// end the big if/else if
sAct=GetLocalString(oMe,"sAct"); // see if changed
nGNBDisabled=GetLocalInt(oMe,"nGNBDisabled");
if (fDelay<0.2) fDelay=0.1;
if (GetStringLength(sAct)>0&&fDelay>0.0) { DelayCommand(fDelay,ExecuteScript("npcact_lite",oMe)); }
else if (!nGNBDisabled) { DelayCommand(fDelay,fnDoPauseThenEnd()); }
else { DelayCommand(2.0,ExecuteScript("npcact_lite",oMe)); }
} // okay to deal with commands
else if (!nGNBDisabled)
{
fnDoPauseThenEnd();
}
else { DelayCommand(2.0,ExecuteScript("npcact_lite",oMe)); }
}
///////////////////////////////////////////////////////////////////////// MAIN
/////////////////////////
// FUNCTIONS
/////////////////////////
void fnState1Required()
{ // PURPOSE: Make sure not stuck in a bad state
// LAST MODIFIED BY: Deva Bryson Winblood
if (GetLocalInt(OBJECT_SELF,"nGNBState")!=1) { SetLocalInt(OBJECT_SELF,"nGNBState",1); DelayCommand(0.3,fnState1Required()); }
} // fnState1Required()
void fnDoPauseThenEnd()
{ // PURPOSE: To check for a pause and handle that
// and switch to state 1 when done with pause
// LAST MODIFIED BY: Deva Bryson Winblood
float fGNBPause=GetLocalFloat(OBJECT_SELF,"fGNBPause");
SetLocalInt(OBJECT_SELF,"nGNBState",7);
if (fGNBPause>0.0) { DelayCommand(fGNBPause,fnState1Required()); }
else { fnState1Required(); }
} // fnDoPauseThenEnd()