65 lines
2.5 KiB
Plaintext
65 lines
2.5 KiB
Plaintext
void fnControlledBy(object oMaster)
|
|
{ // PURPOSE: Possessive controlling function
|
|
object oMe=OBJECT_SELF;
|
|
if (GetIsDead(oMaster)||!GetIsObjectValid(oMaster))
|
|
{ // control is over
|
|
ChangeToStandardFaction(oMe,STANDARD_FACTION_HOSTILE);
|
|
DeleteLocalString(oMe,"sTeamID");
|
|
SetAILevel(oMe,AI_LEVEL_DEFAULT);
|
|
} // control is over
|
|
else
|
|
{ // control continues
|
|
if (GetDistanceBetween(oMe,oMaster)>60.0||GetArea(oMe)!=GetArea(oMaster)&&!GetIsDMPossessed(oMe))
|
|
{ // forced follow
|
|
AssignCommand(oMe,ClearAllActions(TRUE));
|
|
AssignCommand(oMe,JumpToObject(oMaster));
|
|
} // forced follow
|
|
else if (GetDistanceBetween(oMe,oMaster)>9.0&&!GetIsInCombat(oMe)&&!GetIsDMPossessed(oMe))
|
|
{ // get closer
|
|
AssignCommand(oMe,ClearAllActions());
|
|
AssignCommand(oMe,ActionMoveToObject(oMaster,TRUE,7.0));
|
|
} // get closer
|
|
DelayCommand(8.0,fnControlledBy(oMaster));
|
|
} // control continues
|
|
} // fnControlledBy()
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////[ MAIN ]///////////
|
|
void main()
|
|
{
|
|
object oPC=GetItemActivator();
|
|
object oItem=GetItemActivated();
|
|
location lLoc=GetItemActivatedTargetLocation();
|
|
string sTag=GetTag(oItem);
|
|
if (sTag=="it_grpotion_s")
|
|
{ // create green slime
|
|
object oSlime=CreateObject(OBJECT_TYPE_CREATURE,"slime_green",lLoc);
|
|
} // create green slime
|
|
else
|
|
{ // control ooze
|
|
int nN=1;
|
|
string sTeamID=GetLocalString(oPC,"sTeamID");
|
|
object oProxy=GetObjectByTag(sTeamID+"_PROXY");
|
|
object oCr=GetNearestCreature(CREATURE_TYPE_IS_ALIVE,TRUE,oPC,nN);
|
|
effect eVFX=EffectVisualEffect(VFX_DUR_AURA_PULSE_GREEN_BLACK);
|
|
while(GetIsObjectValid(oCr)&&GetDistanceBetween(oCr,oPC)<=15.0)
|
|
{ // control
|
|
if (GetRacialType(oCr)==RACIAL_TYPE_OOZE)
|
|
{ // control
|
|
AssignCommand(oCr,ClearAllActions(TRUE));
|
|
SetLocalString(oCr,"sTeamID",sTeamID);
|
|
ChangeFaction(oCr,oProxy);
|
|
SetIsTemporaryFriend(oPC,oCr);
|
|
SetIsTemporaryFriend(oCr,oPC);
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eVFX,oCr,4.0);
|
|
SetAILevel(oCr,AI_LEVEL_NORMAL);
|
|
AssignCommand(oCr,fnControlledBy(oPC));
|
|
} // control
|
|
nN++;
|
|
oCr=GetNearestCreature(CREATURE_TYPE_IS_ALIVE,TRUE,oPC,nN);
|
|
} // control
|
|
} // control ooze
|
|
}
|
|
/////////////////////////////////////////////////////////////[ MAIN ]///////////
|