114 lines
4.6 KiB
Plaintext
114 lines
4.6 KiB
Plaintext
//////////////////////////////////////////////////////////////////////////////
|
|
// OnEnter PoL Guardian trigger
|
|
// By Deva Bryson Winblood. 01/02/2003
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
void fnVisualEffect(string sTag,object oPC,object oGuardian,string sTarget)
|
|
{ // while sTag on PC integer is TRUE
|
|
object oTarget=GetNearestObjectByTag(sTarget,oPC,1);
|
|
effect eBeamGL2PC=EffectBeam(VFX_BEAM_LIGHTNING,oGuardian,BODY_NODE_CHEST);
|
|
effect eBeamPC2L=EffectBeam(VFX_BEAM_LIGHTNING,oTarget,BODY_NODE_CHEST);
|
|
int nV=GetLocalInt(oPC,sTag);
|
|
float fDist=GetDistanceBetween(oPC,oGuardian);
|
|
if (GetArea(oPC)!=GetArea(oGuardian)||fDist>8.0) { nV=FALSE; DeleteLocalInt(oPC,sTag); }
|
|
if (nV==TRUE)
|
|
{ // do visual effect
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eBeamGL2PC,oPC,6.0);
|
|
if (oTarget!=OBJECT_INVALID) ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eBeamPC2L,oPC,6.0);
|
|
DelayCommand(6.0,fnVisualEffect(sTag,oPC,oGuardian,sTarget));
|
|
} // do visual effect
|
|
} // fnVisualEffect()
|
|
|
|
void fnTestForExist()
|
|
{ // central shaft make sure exists
|
|
object oPC=OBJECT_SELF;
|
|
object oS1=GetNearestObjectByTag("PoL_SHAFT1",oPC,1);
|
|
object oS2=GetNearestObjectByTag("PoL_SHAFT2",oPC,1);
|
|
object oS3=GetNearestObjectByTag("PoL_SHAFT3",oPC,1);
|
|
object oS4=GetNearestObjectByTag("PoL_SHAFT4",oPC,1);
|
|
effect eVis=EffectBeam(VFX_BEAM_LIGHTNING,oS1,BODY_NODE_CHEST);
|
|
if (oS1!=OBJECT_INVALID&&oS2!=OBJECT_INVALID&&oS3!=OBJECT_INVALID&&oS4!=OBJECT_INVALID)
|
|
{ // make sure portal should remain
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eVis,oPC,4.0);
|
|
eVis=EffectBeam(VFX_BEAM_LIGHTNING,oS2,BODY_NODE_CHEST);
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eVis,oPC,4.0);
|
|
eVis=EffectBeam(VFX_BEAM_LIGHTNING,oS3,BODY_NODE_CHEST);
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eVis,oPC,4.0);
|
|
eVis=EffectBeam(VFX_BEAM_LIGHTNING,oS4,BODY_NODE_CHEST);
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eVis,oPC,4.0);
|
|
eVis=EffectVisualEffect(VFX_FNF_IMPLOSION);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis,oPC,4.0);
|
|
DelayCommand(4.0,fnTestForExist());
|
|
} // make sure portal should remain
|
|
else
|
|
{
|
|
DestroyObject(oPC);
|
|
}
|
|
} // fnTestForExist()
|
|
|
|
void fnTest2()
|
|
{
|
|
object oMe=OBJECT_SELF;
|
|
object oShaft=GetObjectByTag("PoL_SHAFT5");
|
|
if (oShaft==OBJECT_INVALID) { DestroyObject(oMe); }
|
|
else { DelayCommand(4.2,fnTest2()); }
|
|
}
|
|
|
|
void main()
|
|
{
|
|
string sTag=GetTag(OBJECT_SELF);
|
|
string sNum=GetStringRight(sTag,1);
|
|
object oGuardian=GetNearestObjectByTag("GL_S_"+sNum);
|
|
object oPC=GetEnteringObject();
|
|
object oMod=GetModule();
|
|
int nNum=GetLocalInt(oMod,sTag);
|
|
int nMath;
|
|
string sGroup;
|
|
object oTarget;
|
|
object oShaft;
|
|
object oS1;
|
|
object oS2;
|
|
object oS3;
|
|
object oS4;
|
|
object oS5;
|
|
string sShaftRes="pol_shaft";
|
|
int nV=StringToInt(sNum);
|
|
string sPos="1";
|
|
sGroup="1";
|
|
if (sNum=="3"||sNum=="4") sGroup="2";
|
|
else if (sNum=="5"||sNum=="6") sGroup="3";
|
|
else if (sNum=="7"||sNum=="8") sGroup="4";
|
|
oTarget=GetNearestObjectByTag("PORTAL_LIGHT"+sGroup,oPC,1);
|
|
nNum++;
|
|
SetLocalInt(oMod,sTag,nNum);
|
|
SetLocalInt(oPC,sTag,TRUE);
|
|
nMath=nV/2;
|
|
if (nMath*2==nV) sPos="2";
|
|
nMath=GetLocalInt(oTarget,"nInPlace"+sPos);
|
|
nMath++;
|
|
SetLocalInt(oTarget,"nInPlace"+sPos,nMath);
|
|
// do PC visual effect
|
|
fnVisualEffect(sTag,oPC,oGuardian,"PoL_SHAFT"+sGroup);
|
|
// do create placeable
|
|
nV=GetLocalInt(oTarget,"nInPlace1");
|
|
nMath=GetLocalInt(oTarget,"nInPlace2");
|
|
if (nV>0&&nMath>0&&GetNearestObjectByTag("PoL_SHAFT"+sGroup,oPC,1)==OBJECT_INVALID)
|
|
{ // create shaft
|
|
oShaft=CreateObject(OBJECT_TYPE_PLACEABLE,sShaftRes,GetLocation(oTarget),FALSE,"PoL_SHAFT"+sGroup);
|
|
SetLocalObject(oShaft,"oHost",oTarget);
|
|
oS1=GetNearestObjectByTag("PoL_SHAFT1",oPC,1);
|
|
oS2=GetNearestObjectByTag("PoL_SHAFT2",oPC,1);
|
|
oS3=GetNearestObjectByTag("PoL_SHAFT3",oPC,1);
|
|
oS4=GetNearestObjectByTag("PoL_SHAFT4",oPC,1);
|
|
if (oS1!=OBJECT_INVALID&&oS2!=OBJECT_INVALID&&oS3!=OBJECT_INVALID&&oS4!=OBJECT_INVALID)
|
|
{ // create central shaft and activate portal
|
|
oTarget=GetNearestObjectByTag("PORTAL_LIGHT5",oPC,1);
|
|
oS5=CreateObject(OBJECT_TYPE_PLACEABLE,sShaftRes,GetLocation(oTarget),FALSE,"PoL_SHAFT5");
|
|
AssignCommand(oS5,fnTestForExist());
|
|
oTarget=GetWaypointByTag("PORTAL_OF_LIGHT_TELEP");
|
|
oS5=CreateObject(OBJECT_TYPE_PLACEABLE,"pol_other",GetLocation(oTarget));
|
|
AssignCommand(oS5,fnTest2());
|
|
} // create central shaft and activate portal
|
|
} // create shaft
|
|
|
|
}
|