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

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 ]///////////