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

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
}