Merged redundant hak files. Moved hak scripts into module. Updated gitignore. Full Compile. Added release folder & archive.
109 lines
3.7 KiB
Plaintext
109 lines
3.7 KiB
Plaintext
////////////////////////////////////////////////////////////////////////////////
|
|
// npcact_ext_react - NPC ACTIVITIES 6.0 React external command
|
|
//------------------------------------------------------------------------------
|
|
// By Deva Bryson Winblood 06/13/2004
|
|
//------------------------------------------------------------------------------
|
|
// Last Modified By: Deva Bryson Winblood
|
|
// Last Modified Date: 06/13/2004
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
void main()
|
|
{
|
|
int nLoop=1;
|
|
int nFound=FALSE;
|
|
int nReact=0; // reaction type
|
|
int nWork1;
|
|
int nWork2;
|
|
float fDelay=0.5;
|
|
string sMsg;
|
|
object oCreature=GetNearestCreature(CREATURE_TYPE_IS_ALIVE,TRUE,OBJECT_SELF,nLoop,CREATURE_TYPE_PERCEPTION,PERCEPTION_SEEN);
|
|
while (nLoop<10&&oCreature!=OBJECT_INVALID)
|
|
{ // while
|
|
nWork1=GetHitDice(OBJECT_SELF);
|
|
nWork2=GetHitDice(oCreature);
|
|
if (nWork1<(nWork2-5))
|
|
{ // powerful character
|
|
nReact=1;
|
|
nLoop=20; // exit loop
|
|
} // powerful character
|
|
else
|
|
{ // wounded
|
|
nWork1=GetMaxHitPoints(oCreature);
|
|
nWork2=GetCurrentHitPoints(oCreature);
|
|
if (nWork2<(nWork1/2))
|
|
{ // wounded character
|
|
nReact=2;
|
|
nLoop=20;
|
|
} // wounded character
|
|
else
|
|
{ // Large creature
|
|
nWork1=GetCreatureSize(oCreature);
|
|
if (nWork1==CREATURE_SIZE_HUGE||nWork1==CREATURE_SIZE_LARGE)
|
|
{ // big
|
|
nReact=3;
|
|
nLoop=20;
|
|
} // big
|
|
else
|
|
{ // faction not too liked
|
|
nWork1=GetFactionAverageReputation(OBJECT_SELF,oCreature);
|
|
if (nWork1<50)
|
|
{ // not liked
|
|
nReact=4;
|
|
nLoop=20;
|
|
} // not liked
|
|
} // faction not too liked
|
|
} // Large creature
|
|
} // wounded
|
|
if(!nFound)
|
|
{ //!Found
|
|
nLoop++;
|
|
oCreature=GetNearestCreature(CREATURE_TYPE_IS_ALIVE,TRUE,OBJECT_SELF,nLoop,CREATURE_TYPE_PERCEPTION,PERCEPTION_SEEN);
|
|
} //!Found
|
|
} // while
|
|
if(nFound)
|
|
{ // act on the person
|
|
fDelay=6.0;
|
|
nWork1=Random(3)+1;
|
|
sMsg="";
|
|
switch(nReact)
|
|
{// switch
|
|
case 1: { // powerful character
|
|
if (nWork1==1) sMsg="Wow! That guy looks formidable.";
|
|
else if (nWork1==2) sMsg="Whoa, I wouldn't want to be in a dark alley along with that one.";
|
|
else if (nWork1==3) sMsg="I'm sorry. I didn't do anything but, I'll get it out of the way before I do.";
|
|
SetFacing(GetFacing(oCreature));
|
|
ActionSpeakString(sMsg);
|
|
break;
|
|
} // powerful character
|
|
case 2: { // wounded
|
|
if (nWork1==1) sMsg="Oh gosh, you need healing.";
|
|
else if (nWork1==2) sMsg="Ummm... you're bleeding.";
|
|
else if (nWork1==3) sMsg="You need to seek out a healer. I would if I were you.";
|
|
SetFacing(GetFacing(oCreature));
|
|
ActionSpeakString(sMsg);
|
|
break;
|
|
} // wounded
|
|
case 3: { // big
|
|
if (nWork1==1) sMsg="BIG!!!!!!";
|
|
else if (nWork1==2) sMsg="Wow! I better watch where that steps.";
|
|
else if (nWork1==3) sMsg="An earthquake? No it's that big thing.";
|
|
ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY1,1.0,2.0);
|
|
ActionSpeakString(sMsg);
|
|
ActionMoveAwayFromObject(oCreature,TRUE,8.0);
|
|
fDelay=18.0;
|
|
} // big
|
|
case 4: { // not liked
|
|
if (nWork1==1) sMsg="Ughhh... there is a foul smell on the wind.";
|
|
else if (nWork1==2) sMsg="They'll let anyone come here these days.";
|
|
else if (nWork1==3) sMsg="Look what came in. Better hide your orc piss or they might drink it.";
|
|
ActionSpeakString(sMsg);
|
|
ActionMoveAwayFromObject(oCreature,FALSE,25.0);
|
|
fDelay=24.0;
|
|
break;
|
|
} // not liked
|
|
default: break;
|
|
} // switch
|
|
} // act on the person
|
|
SetLocalFloat(OBJECT_SELF,"fDelay",fDelay);
|
|
} // NPCAct4React()
|