generated from Jaysyn/ModuleTemplate
Initial commit
Initial commit
This commit is contained in:
75
_module/nss/ud_beamtarget.nss
Normal file
75
_module/nss/ud_beamtarget.nss
Normal file
@@ -0,0 +1,75 @@
|
||||
void main()
|
||||
{
|
||||
string sType = GetStringLowerCase(GetStringRight(GetTag(OBJECT_SELF), 4));
|
||||
object oSource = GetNearestObjectByTag("BeamSource_" + GetStringRight(GetTag(OBJECT_SELF), 6));
|
||||
float fDelay = IntToFloat(GetMaxHitPoints(oSource)) / 100;
|
||||
effect eBeam;
|
||||
int nDamageType;
|
||||
effect eImpact;
|
||||
string sVariable = GetStringRight(GetTag(OBJECT_SELF), 6) + "IsOn";
|
||||
if (sType == "elec") {
|
||||
eBeam = EffectBeam(VFX_BEAM_LIGHTNING, oSource, BODY_NODE_CHEST, FALSE);
|
||||
nDamageType = DAMAGE_TYPE_ELECTRICAL;
|
||||
eImpact = EffectVisualEffect(VFX_COM_HIT_ELECTRICAL);
|
||||
} else if (sType == "fire") {
|
||||
eBeam = EffectBeam(VFX_BEAM_FIRE, oSource, BODY_NODE_CHEST, FALSE);
|
||||
nDamageType = DAMAGE_TYPE_FIRE;
|
||||
eImpact = EffectVisualEffect(VFX_COM_HIT_FIRE);
|
||||
} else if (sType == "cold") {
|
||||
eBeam = EffectBeam(VFX_BEAM_COLD, oSource, BODY_NODE_CHEST, FALSE);
|
||||
eImpact = EffectVisualEffect(VFX_COM_HIT_FROST);
|
||||
nDamageType = DAMAGE_TYPE_COLD;
|
||||
} else if (sType == "evil") {
|
||||
eBeam = EffectBeam(VFX_BEAM_EVIL, oSource, BODY_NODE_CHEST, FALSE);
|
||||
nDamageType = DAMAGE_TYPE_NEGATIVE;
|
||||
eImpact = EffectVisualEffect(VFX_COM_HIT_NEGATIVE);
|
||||
} else if (sType == "mind") {
|
||||
eBeam = EffectBeam(VFX_BEAM_MIND, oSource, BODY_NODE_CHEST, FALSE);
|
||||
nDamageType = DAMAGE_TYPE_MAGICAL;
|
||||
eImpact = EffectVisualEffect(VFX_IMP_HEAD_MIND);
|
||||
} else if (sType == "holy") {
|
||||
eBeam = EffectBeam(VFX_BEAM_HOLY, oSource, BODY_NODE_CHEST, FALSE);
|
||||
nDamageType = DAMAGE_TYPE_DIVINE;
|
||||
eImpact = EffectVisualEffect(VFX_COM_HIT_DIVINE);
|
||||
} else if (sType == "lash") {
|
||||
eBeam = EffectBeam(VFX_BEAM_FIRE_LASH, oSource, BODY_NODE_CHEST, FALSE);
|
||||
nDamageType = DAMAGE_TYPE_FIRE;
|
||||
eImpact = EffectVisualEffect(VFX_COM_HIT_FIRE);
|
||||
}
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eBeam, OBJECT_SELF, fDelay);
|
||||
SetLocalInt(GetArea(OBJECT_SELF), sVariable, TRUE);
|
||||
DelayCommand(fDelay, SetLocalInt(GetArea(OBJECT_SELF), sVariable, FALSE));
|
||||
DelayCommand(fDelay * 2, ExecuteScript("ud_beamtarget", OBJECT_SELF));
|
||||
|
||||
// Let's check to see if any players are in the beam when it's turned on.
|
||||
|
||||
string sInBeam = GetStringRight(GetTag(OBJECT_SELF), 6) + "_InBeam";
|
||||
int nBeam;
|
||||
object oPC = GetFirstObjectInShape(SHAPE_SPHERE, 10.0, GetLocation(OBJECT_SELF), FALSE, OBJECT_TYPE_CREATURE);
|
||||
while (GetIsObjectValid(oPC)) {
|
||||
nBeam = GetLocalInt(oPC, sInBeam);
|
||||
if (nBeam == TRUE && GetIsPC(oPC) && !GetIsDM(oPC)) {
|
||||
int nDiceSides = GetReflexSavingThrow(OBJECT_SELF);
|
||||
int nDiceNum = GetFortitudeSavingThrow(OBJECT_SELF);
|
||||
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);
|
||||
}
|
||||
oPC = GetNextObjectInShape(SHAPE_SPHERE, 10.0, GetLocation(OBJECT_SELF), FALSE, OBJECT_TYPE_CREATURE);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user