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