103 lines
4.0 KiB
Plaintext
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 ]/////////////
|