void main() { string sVariable = GetStringRight(GetTag(OBJECT_SELF), 6) + "IsOn"; string sType = GetStringLowerCase(GetStringRight(GetTag(OBJECT_SELF), 4)); int nDamageType; effect eImpact; if (sType == "elec") { nDamageType = DAMAGE_TYPE_ELECTRICAL; eImpact = EffectVisualEffect(VFX_COM_HIT_ELECTRICAL); } else if (sType == "fire") { nDamageType = DAMAGE_TYPE_FIRE; eImpact = EffectVisualEffect(VFX_COM_HIT_FIRE); } else if (sType == "cold") { eImpact = EffectVisualEffect(VFX_COM_HIT_FROST); nDamageType = DAMAGE_TYPE_COLD; } else if (sType == "evil") { nDamageType = DAMAGE_TYPE_NEGATIVE; eImpact = EffectVisualEffect(VFX_COM_HIT_NEGATIVE); } else if (sType == "mind") { nDamageType = DAMAGE_TYPE_MAGICAL; eImpact = EffectVisualEffect(VFX_IMP_HEAD_MIND); } else if (sType == "holy") { nDamageType = DAMAGE_TYPE_DIVINE; eImpact = EffectVisualEffect(VFX_COM_HIT_DIVINE); } else if (sType == "lash") { nDamageType = DAMAGE_TYPE_FIRE; eImpact = EffectVisualEffect(VFX_COM_HIT_FIRE); } int nBeamOn = GetLocalInt(GetArea(OBJECT_SELF), sVariable); object oPC = GetEnteringObject(); object oSource = GetNearestObjectByTag("BeamSource_" + GetStringRight(GetTag(OBJECT_SELF), 6)); if (GetIsPC(oPC) && !GetIsDM(oPC)) { if (nBeamOn) { int nDiceSides = GetReflexSavingThrow(oSource); int nDiceNum = GetFortitudeSavingThrow(oSource); int nDamage; if (nDiceNum == 0) { nDiceNum = GetHitDice(oPC); if (nDiceNum < 1) { nDiceNum = 1; } } if (nDiceSides == 0) { nDamage = nDiceNum; } else { int nCount; for(nCount = 1; nCount <= nDiceNum; nCount++) { nDamage = nDamage + Random(nDiceSides) + 1; } } effect eDamage = EffectDamage(nDamage, nDamageType, DAMAGE_POWER_NORMAL); effect eLink = EffectLinkEffects(eImpact, eDamage); ApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oPC); } else { // Although the beam is not on now, if the PC is standing in the // trigger when it turns on, they should be damaged. SetLocalInt(oPC, GetStringRight(GetTag(OBJECT_SELF), 6) + "_InBeam", TRUE); } } }