67 lines
2.5 KiB
Plaintext
67 lines
2.5 KiB
Plaintext
// rts_it_op17pl - Simulacrum Vat Placeable Heartbeat
|
|
#include "rtsh_multiplay"
|
|
|
|
|
|
void fnCloneAI(object oClone)
|
|
{ // PURPOSE: Handle clone movement and behavior
|
|
object oEnemy;
|
|
if (!GetIsInCombat(oClone))
|
|
{ // move
|
|
oEnemy=GetNearestCreature(CREATURE_TYPE_IS_ALIVE,TRUE,oClone,1,CREATURE_TYPE_PERCEPTION,PERCEPTION_SEEN,CREATURE_TYPE_REPUTATION,REPUTATION_TYPE_ENEMY);
|
|
if (!GetIsObjectValid(oEnemy))
|
|
{ // move still
|
|
if (GetCurrentAction(oClone)!=ACTION_MOVETOPOINT)
|
|
{ // move
|
|
oEnemy=GetNearestObject(OBJECT_TYPE_WAYPOINT,oClone,d20(2));
|
|
if (GetIsObjectValid(oEnemy))
|
|
{ // waypoint found
|
|
AssignCommand(oClone,ClearAllActions());
|
|
AssignCommand(oClone,ActionForceMoveToObject(oEnemy,FALSE,4.0,60.0));
|
|
} // waypoint found
|
|
} // move
|
|
} // move still
|
|
} // move
|
|
DelayCommand(4.0,fnCloneAI(oClone));
|
|
} // fnCloneAI()
|
|
|
|
|
|
void main()
|
|
{
|
|
object oMe=OBJECT_SELF;
|
|
string sID=GetLocalString(oMe,"sTeamID");
|
|
object oClone=GetLocalObject(oMe,"oClone");
|
|
object oLeader=GetLocalObject(GetModule(),"oTeamLead"+sID);
|
|
int nMana;
|
|
int nLevel;
|
|
if (GetIsObjectValid(oLeader))
|
|
{ // leader exists
|
|
nMana=fnGetTeamMana(oLeader);
|
|
nLevel=GetLevelByPosition(1,oLeader)+GetLevelByPosition(2,oLeader)+GetLevelByPosition(3,oLeader);
|
|
if (!GetIsObjectValid(oClone))
|
|
{ // no clone exists
|
|
nLevel=100+(nLevel*10);
|
|
if (nMana>=nLevel)
|
|
{ // have enough mana
|
|
nMana=nMana-nLevel;
|
|
fnSetTeamMana(oLeader,nMana);
|
|
oClone=CopyObject(oLeader,GetLocation(oMe),OBJECT_INVALID,sID+"_CLONE");
|
|
SetName(oClone,GetName(oLeader));
|
|
SetLocalObject(oClone,"oOriginal",oLeader);
|
|
SetLocalObject(oLeader,"oClone",oClone);
|
|
SetLocalObject(oMe,"oClone",oClone);
|
|
oLeader=GetObjectByTag(sID+"_PROXY");
|
|
if (GetIsObjectValid(oLeader)) ChangeFaction(oClone,oLeader);
|
|
AssignCommand(oClone,ClearAllActions(TRUE));
|
|
AssignCommand(oClone,fnCloneAI(oClone));
|
|
} // have enough mana
|
|
} // no clone exists
|
|
else
|
|
{ // clone exists
|
|
if (GetLocalObject(oClone,"oOriginal")!=oLeader)
|
|
{ // leader has changed - destroy clone
|
|
DestroyObject(oClone);
|
|
} // leader has changed - destroy clone
|
|
} // clone exists
|
|
} // leader exists
|
|
}
|