HoS_PRC8/_mod/_module/nss/rts_it_op16.nss
Jaysyn904 04165202c0 Initial upload
Initial upload
2024-11-25 19:36:07 -05:00

103 lines
4.0 KiB
Plaintext

////////////////////////////////////////////////////////////////////////////////
// rts_it_op16 - Bag of Tricks Artifact
// By Deva B. Winblood. October 18th, 2008
////////////////////////////////////////////////////////////////////////////////
void fnWatch(object oNPC,float fDuration)
{ // PURPOSE: Follow and support master
object oMaster=GetLocalObject(oNPC,"oMaster");
if (GetIsObjectValid(oMaster)&&!GetIsDead(oMaster)&&fDuration>0.0&&GetCurrentAction(oMaster)!=ACTION_REST)
{ // follow
if (GetArea(oMaster)==GetArea(oNPC))
{ // same area
if (GetDistanceBetween(oMaster,oNPC)>15.0&&!GetIsDMPossessed(oNPC))
{ // move
AssignCommand(oNPC,ClearAllActions(TRUE));
AssignCommand(oNPC,ActionMoveToObject(oMaster,TRUE,5.0));
} // move
else if (GetDistanceBetween(oMaster,oNPC)>4.0)
{ // move but, already close
if (!GetIsInCombat(oNPC)&&!GetIsDMPossessed(oNPC))
{ // move okay
object oEnemy=GetNearestCreature(CREATURE_TYPE_IS_ALIVE,TRUE,oNPC,CREATURE_TYPE_REPUTATION,REPUTATION_TYPE_ENEMY,CREATURE_TYPE_PERCEPTION,PERCEPTION_SEEN);
if (GetIsObjectValid(oEnemy)&&GetDistanceBetween(oEnemy,oMaster)<15.001)
{ // attack
AssignCommand(oNPC,ActionAttack(oEnemy));
} // attack
else
{ // move
AssignCommand(oNPC,ClearAllActions(TRUE));
AssignCommand(oNPC,ActionMoveToObject(oMaster,TRUE,3.0));
} // move
} // move okay
} // move but, already close
} // same area
else if (!GetIsDMPossessed(oNPC))
{ // different area
AssignCommand(oNPC,ClearAllActions(TRUE));
AssignCommand(oNPC,JumpToObject(oMaster));
} // different area
DelayCommand(3.0,fnWatch(oNPC,fDuration-3.0));
} // follow
else
{ // unsummon
effect eVFX=EffectVisualEffect(VFX_IMP_UNSUMMON);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eVFX,GetLocation(oNPC));
DelayCommand(1.0,DestroyObject(oNPC));
} // unsummon
} // fnWatch()
///////////////////////////////////////////////////////////[ MAIN ]/////////////
void main()
{
object oItem=GetItemActivated();
object oPC=GetItemActivator();
int nBeans=GetLocalInt(oPC,"nBeans");
string sRR;
int nR;
effect eVFX;
object oCr;
if (nBeans==0)
{ // set beans
nBeans=6+d20();
SetLocalInt(oPC,"nBeans",nBeans);
} // set beans
nR=d100();
nBeans=nBeans-1;
SendMessageToPC(oPC,"You pull a bean from the bag and drop it onto the ground.");
if (nBeans>0) SetLocalInt(oPC,"nBeans",nBeans);
else
{ // last bean used
DestroyObject(oItem);
SendMessageToPC(oPC,"You use the last bean and the bag vanishes.");
} // last bean used
if (nR<26) sRR="sum1cave2";
else if (nR<41) sRR="spidemergm2";
else if (nR<51) sRR="spidemergm1";
else if (nR<61) sRR="undemergm2";
else if (nR<71) sRR="undemergm1";
else if (nR<76) sRR="sum4le22";
else if (nR<81) sRR="sum1bean";
else if (nR<86) sRR="sum4bean";
else if (nR<91) sRR="sum2bean";
else if (nR<96) sRR="sum3bean";
else if (nR<98) sRR="sum6ce2";
else { sRR="sum6le2"; }
eVFX = EffectVisualEffect(VFX_DUR_TENTACLE);
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eVFX,GetItemActivatedTargetLocation(),3.0);
oCr=CreateObject(OBJECT_TYPE_CREATURE,sRR,GetItemActivatedTargetLocation());
string sID=GetLocalString(oPC,"sTeamID");
object oProxy=GetObjectByTag(sID+"_PROXY");
if (!GetIsObjectValid(oProxy)) SendMessageToPC(oPC,"Proxy "+sID+"_PROXY not found.");
ChangeFaction(oCr,oProxy);
SetIsTemporaryFriend(oCr,oPC);
SetIsTemporaryFriend(oPC,oCr);
SetLocalObject(oCr,"oMaster",oPC);
DelayCommand(1.0,fnWatch(oCr,HoursToSeconds(10)));
}
///////////////////////////////////////////////////////////[ MAIN ]/////////////