//////////////////////////////////////////////////////////////////////////////// // npcact_interp - NPC ACTIVITIES 6.0 Full version Interpretter //------------------------------------------------------------------------------ // By Deva Bryson Winblood 04/30/2004 //------------------------------------------------------------------------------ // Last Modified By: Deva Bryson Winblood // Last Modified Date: 06/03/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 #include "npcact_ho_core" // Core commands for FULL interpreter ///////////////////////// // 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 nR; int nGNBDisabled=GetLocalInt(oMe,"nGNBDisabled"); effect eE; fnDebug(GetTag(oMe)+" FULL INTERPRETER ("+sCommand+")",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 else if (sCommand=="BORD"||sCommand=="BD") { // BORD Animation fDelay=fnNPCACTAnimate("ANIM6/30"); } // BORD Animation else if (sCommand=="BOW"||sCommand=="BW") { // BOW Animation fDelay=fnNPCACTAnimate("ANIM1/20"); } // BOW Animation else if (sCommand=="DRIN"||sCommand=="DR") { // DRINK Animation fDelay=fnNPCACTAnimate("ANIM2/20"); } // DRINK Animation else if (sCommand=="DRUN"||sCommand=="DK") { // DRUNK Animation fDelay=fnNPCACTAnimate("ANIM22/60"); } // DRUNK Animation else if (sCommand=="GRET"||sCommand=="GR") { // GRET Animation fDelay=fnNPCACTAnimate("ANIM3/20"); } // GRET Animation else if (sCommand=="GRET"||sCommand=="GR") { // GRET Animation fDelay=fnNPCACTAnimate("ANIM3/20"); } // GRET Animation else if (sCommand=="LIST"||sCommand=="LI") { // LIST Animation fDelay=fnNPCACTAnimate("ANIM18/20"); } // LIST Animation else if (sCommand=="LOOK"||sCommand=="LK") { // LOOK Animation fDelay=fnNPCACTAnimate("ANIM19/30"); } // LOOK Animation else if (sCommand=="LOW"||sCommand=="LW") { // LOW Animation fDelay=fnNPCACTAnimate("ANIM16/60"); } // LOW Animation else if (sCommand=="MEDI"||sCommand=="ME") { // MEDI Animation fDelay=fnNPCACTAnimate("ANIM20/60"); } // MEDI Animation else if (sCommand=="MID"||sCommand=="MD") { // MID Animation fDelay=fnNPCACTAnimate("ANIM17/60"); } // MID Animation else if (sCommand=="PAU1"||sCommand=="P1") { // PAU1 Animation fDelay=fnNPCACTAnimate("ANIM21/30"); } // PAU1 Animation else if (sCommand=="PAU2"||sCommand=="P2") { // PAU2 Animation fDelay=fnNPCACTAnimate("ANIM24/30"); } // PAU2 Animation else if (sCommand=="READ"||sCommand=="RD") { // READ Animation fDelay=fnNPCACTAnimate("ANIM8/30"); } // READ Animation else if (sCommand=="SALT"||sCommand=="SA") { // SALT Animation fDelay=fnNPCACTAnimate("ANIM9/20"); } // SALT Animation else if (sCommand=="SCRT"||sCommand=="SH") { // SCRT Animation fDelay=fnNPCACTAnimate("ANIM7/30"); } // SCRT Animation else if (sCommand=="SITC"||sCommand=="SC") { // SITC Animation fDelay=fnNPCACTAnimate("ANIM26/300"); } // SITC Animation else if (sCommand=="TIRD"||sCommand=="TI") { // TIRD Animation fDelay=fnNPCACTAnimate("ANIM23/60"); } // TIRD Animation else if (sCommand=="VIC1"||sCommand=="V1") { // VIC1 Animation fDelay=fnNPCACTAnimate("ANIM12/20"); } // VIC1 Animation else if (sCommand=="VIC2"||sCommand=="V2") { // VIC2 Animation fDelay=fnNPCACTAnimate("ANIM13/20"); } // VIC2 Animation else if (sCommand=="VIC3"||sCommand=="V3") { // VIC3 Animation fDelay=fnNPCACTAnimate("ANIM14/20"); } // VIC3 Animation else if (sCommand=="WORS"||sCommand=="WS") { // WORS Animation fDelay=fnNPCACTAnimate("ANIM31/60"); } // WORS Animation else if (sCommand=="ATTK"||sCommand=="AT") { // Attack nearby placeable fDelay=fnNPCACTF_ATTK(); } // Attack nearby placeable else if (sL4=="CAST"||sL2=="C/") { // CAST SPELL by abbreviation fDelay=fnNPCACTF_CAST(sCommand); } // CAST SPELL by abbreviation else if (sCommand=="CLAC"||sCommand=="Ca") { // Clear all Actions fDelay=0.0; AssignCommand(oMe,ClearAllActions()); } // Clear all Actions else if (sCommand=="CLEN"||sCommand=="CL") { // Clean nearby non plot items fDelay=fnNPCACTF_CLEN(); } // Clean nearby non plot items else if (sCommand=="CLLD"||sCommand=="CC") { // Close nearby containers fDelay=fnNPCACTF_CLLD(); } // Close nearby containers else if (sL3=="CLO"||(sL1=="W"&&StringToInt(GetStringRight(sCommand,1))>0)) { // Change clothing fDelay=fnNPCACTF_CLO(sCommand); } // Change clothing else if (sCommand=="DIE"||sCommand=="DI") { // Apply death effect eE=EffectDeath(); ApplyEffectToObject(DURATION_TYPE_INSTANT,eE,oMe,1.0); } // Apply death effect else if (sCommand=="DISA"||sCommand=="DS") { // Apply disappear effect eE=EffectDisappear(); ApplyEffectToObject(DURATION_TYPE_INSTANT,eE,oMe,1.0); } // Apply disappear effect else if (sCommand=="DRD"||sCommand=="DD") { // Choose a nearby random door fDelay=fnNPCACTF_DRD(); } // Choose a nearby random door else if (sCommand=="EAT"||sCommand=="EA") { // EAT fDelay=fnNPCACTF_EAT(); } // EAT else if (sCommand=="FOAN"||sCommand=="FA") { // Follow any fDelay=fnNPCACTF_Follow(2); } // Follow any else if (sCommand=="FOFM"||sCommand=="FF") { // Follow Female fDelay=fnNPCACTF_Follow(0); } // Follow Female else if (sCommand=="FOFP"||sCommand=="Ff") { // Follow Female PC fDelay=fnNPCACTF_Follow(4); } // Follow Female PC else if (sCommand=="FOMA"||sCommand=="FM") { // Follow Male fDelay=fnNPCACTF_Follow(1); } // Follow Male else if (sCommand=="FOMP"||sCommand=="Fm") { // Follow Male PC fDelay=fnNPCACTF_Follow(5); } // Follow Male PC else if (sCommand=="FOPC"||sCommand=="FP") { // Follow any PC fDelay=fnNPCACTF_Follow(3); } // Follow any PC else if (sCommand=="KNOC"||sCommand=="KN") { // cast knock spell fDelay=12.0; AssignCommand(oMe,ActionCastSpellAtLocation(SPELL_KNOCK,GetLocation(oMe),METAMAGIC_ANY,TRUE)); } // cast knock spell else if (sCommand=="ALE"||sCommand=="C3") { // Create ALE fDelay=fnNPCACTMakeItem("COnw_it_mpotion021"); } // Create ALE else if (sCommand=="FISH"||sCommand=="C2") { // Create FISH fDelay=fnNPCACTMakeItem("COnw_it_msmlmisc20"); } // Create FISH else if (sCommand=="SPRT"||sCommand=="C5") { // Create Spirits fDelay=fnNPCACTMakeItem("COnw_it_mpotion022"); } // Create Spirits else if (sCommand=="MEAT"||sCommand=="C1") { // Create Meat fDelay=fnNPCACTMakeItem("COnw_it_mmidmisc05"); } // Create Meat else if (sCommand=="WINE"||sCommand=="C4") { // Create Wine fDelay=fnNPCACTMakeItem("COnw_it_mpotion023"); } // Create Wine else if (sCommand=="CAMP"||sCommand=="CF") { // Create Campfire fDelay=1.0; CreateObject(OBJECT_TYPE_PLACEABLE,"plc_campfr",GetLocation(oMe)); } // Create Campfire else if (sCommand=="TAFO"||sCommand=="TF") { // Talk Forceful fDelay=fnNPCACTTalkTo("TTANY/F"); } // Talk Forceful else if (sCommand=="TALA"||sCommand=="TL") { // Talk Laughing fDelay=fnNPCACTTalkTo("TTANY/L"); } // Talk Laughing else if (sCommand=="TANM"||sCommand=="TN") { // Talk Normal fDelay=fnNPCACTTalkTo("TTANY/N"); } // Talk Normal else if (sCommand=="TAPL"||sCommand=="TP") { // Talk Pleading fDelay=fnNPCACTTalkTo("TTANY/P"); } // Talk Pleading else if (sCommand=="TALK"||sCommand=="TA") { // Talk Random Talk Method nR=d4(); if (nR==1) sS="N"; else if (nR==2) sS="L"; else if (nR==3) sS="F"; else { sS="P"; } fDelay=fnNPCACTTalkTo("TTANY/"+sS); } // Talk Random Talk Method else if (sCommand=="MAG1"||sCommand=="M1") { // Magic effect 1 fDelay=fnNPCACTEffects("EFF74/0"); } // Magic effect 1 else if (sCommand=="MAG2"||sCommand=="M2") { // Magic effect 2 fDelay=fnNPCACTEffects("EFF195/0"); } // Magic effect 2 else if (sCommand=="MAG3"||sCommand=="M3") { // Magic effect 3 fDelay=fnNPCACTEffects("EFF71/0"); } // Magic effect 3 else if (sCommand=="REAP"||sCommand=="Ra") { // reappear eE=EffectAppear(); ApplyEffectToObject(DURATION_TYPE_INSTANT,eE,oMe); fDelay=4.0; } // reappear else if (sCommand=="POIS"||sCommand=="PO") { // Poison effect eE=EffectPoison(POISON_TINY_SPIDER_VENOM); ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eE,oMe,30.0); fDelay=1.0; } // Poison effect else if (sCommand=="RNS0"||sCommand=="R0") { // random speak fDelay=fnNPCACTRandomSpeak("Thisss sho' isss a nice place/One moresss drinksss sho to help me walk! Hic!/Thatsss a mighty fine barrel you havess! Hicup!/Who took my drink? Hic!/Itsss a bad day I need a drink!/[SINGING] Grannies in the cellar, lordy can't ya smell her/My bottle looksss shorter than before!/Spirits is the breakfast of champions!! Let me have some! Hicup!/Uggghhhh--- I don't feel too goodss! Hic!",1); } // random speak else if (sCommand=="RNS1"||sCommand=="R1") { // random speak fDelay=fnNPCACTRandomSpeak("Don't it beat all! That merchant took forever to get here/I just done my sword cleanin' fo' the day/I seen an ogre once that'd shrivel yo' privates if he took to lookin' at ya/Some of the walkin' all day wears me down/A nice ale usually settles me stomach/Once I had to fight off a dozen bandits comin' fo' the merchant I was workin' wif/I need to find me a bed warmer! Harhar/I think spirits is a stronger drink! That'd be what I needs/I have a big scar on me arse too! Damn badger bit it",1); } // random speak else if (sCommand=="RNS2"||sCommand=="R2") { // random speak fDelay=fnNPCACTRandomSpeak("Come look at my goods/I'm looking to trade/Fresh in! Goods from around the world/Come one, Come all! Incredible bargains here/Do you need to lighten your load? I'm buying goods of all kinds/Quick! Get them before they are gone! I am selling them like they are jewels! Maybe they are!/I have money just waiting to be spent on your goods you wish to sell/Buy something for a special occasion!/Did you forget something? You better talk to me to make sure you didn't",1); } // random speak else if (sCommand=="RNS3"||sCommand=="R3") { // random speak fDelay=fnNPCACTRandomSpeak("Ode to the beggar!A tale of woe/O'to travel the world/Too many words tangle the tongue! A well placed word, that can win wars/If booglytoosome would fondangle the biddyswitch twould ever so simply perdobel/It twas a dark and stormy- Too cliche/So many stories, so many songs, and far too little time/The orphan dwarf and his adoptive troll parents- Nah, too stupid/Time pursues us all! It follows and cuddles! It waits for to fall! Our bodies form as puddles-That is just awful/A song or two to lighten the day!",1); } // random speak else if (sCommand=="RNS4"||sCommand=="R4") { // random speak fDelay=fnNPCACTRandomSpeak("Me findem food! Is good?/Me needs me mate! Is good?/Me bash things! Is good?/Smell man flesh!/No like rain!/Needs more blood!/Time for bash!/Me say NOW!/Shiny things good! Man flesh trap!",1); } // random speak else if (sCommand=="RNS5"||sCommand=="R5") { // random speak fDelay=fnNPCACTRandomSpeak("I really don't like this outfit/Today is depressing/I think I need to work on my hair/I wonder who that is?/Did you hear who slept over at you know who's last night?/My man will support me well/I need some new clothes/It's just not my day!/Damn the fates!",1); } // random speak else if (sCommand=="RNS6"||sCommand=="R6") { // random speak fDelay=fnNPCACTRandomSpeak("Did you see her mellons? Whoa!/She has a nice arse! I'm talking about her donkey either!/I got a new tool last week/Some weather we're having/I hate work!/I bet I can belch longer!/No pain, no gain!/A fool and his money are soon parted!/If it don't hurt nothin' do what you want!",1); } // random speak else if (sCommand=="RNS7"||sCommand=="R7") { // random speak fDelay=fnNPCACTRandomSpeak("A well placed grease spell often works wonders/What spell would you use in that situation?/I almost am done with that new spell/What do I NEED an invisible stalker for?/The usual spell does fine for me/---and then I put the bat guano in with the other powder and---/---the explosion was quite magnificent! It only singed my hair a bit!/It worked last time I cast it/I'm not sure the situation calls for an answer to that!",1); } // random speak else if (sCommand=="RNS8"||sCommand=="R8") { // random speak fDelay=fnNPCACTRandomSpeak("and so what is the universe really?/---does not preclude the existence of other gods!/Yes, but that in itself was a contradiction!/For the love of the gods! Read the book! It's all in there!/I'm telling you it is a hidden truth!/How can you ask such silly questions?/That is blasphemy if I ever heard it before!/---might be the reason why---/---could of been a miracle---",1); } // random speak else if (sCommand=="RNS9"||sCommand=="R9") { // random speak fDelay=fnNPCACTRandomSpeak("What do you think of the weather?/I don't give it much thought really/How has your day been?/The same as usual/That's what she wanted to know!/I don't know/You win some! Others you lose!/What did they give you?/I think something special",1); } // random speak else if (sCommand=="SNG1"||sCommand=="r1") { // sing song fDelay=fnNPCACTLyrical("10/[SINGING]One bright and kindly summers morning/I perchance passed the field of my toils/There I saw my hearts definate warning/I happened to see my woman's donkey/My lass has a very fine ass/Don't you know it works all day/My lass has a very fine ass/It works and doesn't get pay/So next time your at the market/Make sure its a donkey you buy/For prideful they may be/But, to work their pay is just right/My lass has a very fine ass!",1); } // sing song else if (sCommand=="SNG2"||sCommand=="r2") { // sing song fDelay=fnNPCACTLyrical("9/[SINGING] Raise your cup high and proud: Sing with me/Stomp your feet, shake the ground/Greet your chums round 'bout/Show them what drinkings all 'bout/DRINK THEM UNDER THE TABLE/SLAM THAT ALE DOWN AND DOWN/DRINK THEM UNDER THE TABLE/WATCH THEIR PRIDE FALLIN' DOWN/DRINK THEM UNDER THE TABLE/SLAM THAT ALE DOWN AND DOWN/DRINK THEM UNDER THE TABLE/WATCH THEIR PRIDE FALLIN' DOWN",1); } // sing song else if (sCommand=="SNG3"||sCommand=="r3") { // sing song fDelay=fnNPCACTLyrical("9/[SINGING] The sea is my larder---/It is where the fish grow/The sea provides my staples---/As you all surely know/The sea provides shelter---/to the wise man they will show/The sea is as stable---/as the time honored know/The sea is my roadway---/Whereever the winds blow",1); } // sing song else if (sCommand=="SNG4"||sCommand=="r4") { // sing song fDelay=fnNPCACTLyrical("8/[SINGING] Why are your eyes so blue all the time---/Why are your eyes always looking into mine---/Where did you come from, and where will you go---/Find my hand and take me where you go---/If I love you, will you love me too/Will you be there, whenever I need you",1); } // sing song else if (sCommand=="SNG5"||sCommand=="r5") { // sing song fDelay=fnNPCACTLyrical("10/[SINGING] See them run, see them crawl/That's what makes it worth it all/Hear them scream, hear them weep/That's what helps me sleep a wink/Rape and Pillage/Burn the village/Rape and Pillage/Rape and Pillage/We don't need the pay/We just need some prey/We don't need friends/We prefer bone snapping trends/Rape and Pillage/Burn the village/Rape and pillage/RAPE AND PILLAGE!!",1); } // sing song else if (sCommand=="SNG6"||sCommand=="r6") { // sing song fDelay=fnNPCACTLyrical("12/[SINGING] T'wards the mountains went the bodies---/of those the monster had taken/T'wards the caverns went the fighters/Never seen or heard again/The fear was gripping hearts/The pride had fallen low/Then came the hero/The one that was unknown/T'wards the mountains he wandered/N'er turning to look back/T'wards the caverns he stumbled/N'er considering what was there/And there he did battle/And there he did fall",1); } // sing song else if (sCommand=="SNG7"||sCommand=="r7") { // sing song fDelay=fnNPCACTLyrical("11/[SINGING] Find the barrel/Bolt and Arrow/Grow the crops/Tend your shops/Sail the ships/Sway your hips/Kiss the Lass/Swat her arse/Grab a Potion/Forbidden Lotion/Swim the River/Love your giver/Taste the ale/Drain it well/Close the bin/Let's sing again",1); } // sing song else if (sCommand=="SIT"||sCommand=="SI") { // sit on chair fDelay=fnNPCACTSitForSpecified("SITS10"); } // sit on chair else if (sL4=="POLY"||sL2=="PY") { // Polymorph fDelay=fnNPCACTF_Polymorph(sCommand); } // Polymorph else if (sCommand=="HELT"||sCommand=="HS") { // heal self eE=EffectHeal(GetMaxHitPoints(oMe)-GetCurrentHitPoints(oMe)); ApplyEffectToObject(DURATION_TYPE_INSTANT,eE,oMe,1.0); fDelay=1.0; } // heal self else if (sCommand=="KILL"||sCommand=="KI") { // KILL fDelay=fnNPCACTF_KILL(); } // KILL else if (sCommand=="PKLK"||sCommand=="PL") { // pick lock fDelay=fnNPCACTF_PickLock(); } // pick lock else if (sCommand=="TAUN"||sCommand=="TU") { // Taunt fDelay=fnNPCACTF_Taunt(); } // Taunt else if (sCommand=="USE"||sCommand=="US") { // USE fDelay=fnNPCACTF_Use(); } // USE else if (sCommand=="WOPC"||sCommand=="WO") { // worship PC SetLocalInt(oMe,"nNPCParm",0); ExecuteScript("npcact_ext_wors",oMe); } // worship PC else if (sCommand=="WOCR"||sCommand=="WC") { // worship NPC SetLocalInt(oMe,"nNPCParm",1); ExecuteScript("npcact_ext_wors",oMe); fDelay=GetLocalFloat(oMe,"fDelay"); } // worship NPC else if (sCommand=="BULL"||sCommand=="BU") { // BULLY ExecuteScript("npcact_ext_bull",oMe); fDelay=GetLocalFloat(oMe,"fDelay"); } // BULLY else if (sCommand=="FLEE"||sCommand=="FL") { // FLEE ExecuteScript("npcact_ext_flee",oMe); fDelay=GetLocalFloat(oMe,"fDelay"); } // FLEE else if (sCommand=="HEAL"||sCommand=="HE") { // HEAL ExecuteScript("npcact_ext_heal",oMe); fDelay=GetLocalFloat(oMe,"fDelay"); } // HEAL else if (sCommand=="PICK"||sCommand=="PP") { // PICK POCKETS ExecuteScript("npcact_ext_pick",oMe); fDelay=GetLocalFloat(oMe,"fDelay"); } // PICK POCKETS else if (sCommand=="TURN"||sCommand=="TR") { // TURN UNDEAD ExecuteScript("npcact_ext_turn",oMe); fDelay=GetLocalFloat(oMe,"fDelay"); } // TURN UNDEAD else if (sCommand=="REACT"||sCommand=="RT") { // REACT ExecuteScript("npcact_ext_react",oMe); fDelay=GetLocalFloat(oMe,"fDelay"); } // REACT else if (sCommand=="RMTR") { // Remove Trap ExecuteScript("npcact_ext_rmtr",oMe); fDelay=GetLocalFloat(oMe,"fDelay"); } // Remove Trap else if (sCommand=="STTR"||sCommand=="ST") { // Set Trap ExecuteScript("npcact_ext_sttr",oMe); fDelay=GetLocalFloat(oMe,"fDelay"); } // Set Trap else if (sCommand=="GOSSIP"||sCommand=="GO") { // Gossip ExecuteScript("npcact_ext_goss",oMe); fDelay=GetLocalFloat(oMe,"fDelay"); } // Gossip else if (sCommand=="SLIS"||sCommand=="sl") { // Set Listen ExecuteScript("npcact_ext_slis",oMe); fDelay=GetLocalFloat(oMe,"fDelay"); } // Set Listen else if (sCommand=="SGOS"||sCommand=="sg") { // Set Gossip SetLocalString(oMe,"sParm",sCommand); ExecuteScript("npcact_ext_sgos",oMe); fDelay=GetLocalFloat(oMe,"fDelay"); } // Set Gossip else if (sCommand=="LTON"||sCommand=="LO"||sCommand=="LTOF"||sCommand=="Lo") { // lights on/off SetLocalString(oMe,"sParm",sCommand); ExecuteScript("npcact_ext_light",oMe); fDelay=GetLocalFloat(oMe,"fDelay"); } // lights on/off else if (sCommand=="INN"||sCommand=="IN") { // Inn backwards compatibility fDelay=fnNPCACTF_Inn(); } // Inn backwards compatibility else if (sCommand=="PROP"||sCommand=="PR") { // Proposition fDelay=fnNPCACTF_Proposition(); } // Proposition else if (sL3=="SUM"||sL1=="m") { // summon fDelay=fnNPCACTF_SummonCreature(sCommand); } // Summon else if (sL3=="SAY"||(sL1=="S"&&GetStringLength(sCommand)>1)) { // SAY# fDelay=fnNPCACTF_SayPhrase(sCommand); } // SAY# else if (sCommand=="WAKE"||sCommand=="WK") { // WAKE fDelay=fnNPCACTF_Wake(); } // WAKE else if (sL1=="A"&&GetStringLength(sCommand)==4) { // old style add fDelay=fnNPCACTAddSubtract("+InNPCActionVar"+GetSubString(sCommand,1,1)+"/"+GetStringRight(sCommand,2)); } // old style add else if (sL1=="S"&&GetStringLength(sCommand)==4) { // old style subtract fDelay=fnNPCACTAddSubtract("-InNPCActionVar"+GetSubString(sCommand,1,1)+"/"+GetStringRight(sCommand,2)); } // old style subtract else if (sL1=="V"&&GetStringLength(sCommand)==4) { // old style variable set fDelay=fnNPCACTSetVariable("!InNPCActionVar"+GetSubString(sCommand,1,1)+"/"+GetStringRight(sCommand,2)); } // old style variable set else if (sL1=="I"&&GetStringLength(sCommand)==4) { // IF old style fDelay=fnNPCACTLogicCore("&IEnNPCActionVar"+GetSubString(sCommand,1,1)+"/"+GetStringRight(sCommand,2)); } // IF old style else if ((sL3=="COP"&&GetStringLength(sCommand)==4)||(sL1=="c"&&GetStringLength(sCommand)==2)) { // old COPY fDelay=fnNPCACTF_CopyVar(sCommand); } // old COPY /// 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_interp",oMe)); } else if (!nGNBDisabled) { DelayCommand(fDelay,fnDoPauseThenEnd()); } else { DelayCommand(2.0,ExecuteScript("npcact_interp",oMe)); } } // okay to deal with commands else if (!nGNBDisabled) { fnDoPauseThenEnd(); } else { DelayCommand(2.0,ExecuteScript("npcact_interp",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()