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