Initial Upload
Initial Upload
This commit is contained in:
135
_module/nss/xs_detonate_loc.nss
Normal file
135
_module/nss/xs_detonate_loc.nss
Normal file
@@ -0,0 +1,135 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Name Things that go boom
|
||||
//:: FileName xs_catapult_use
|
||||
//:: Copyright (c) 2003 NWNZone.com
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
This is the on use event for the catapults
|
||||
[Version .5a]
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Xeno
|
||||
//:: Created On: 11 Aug 2003
|
||||
//:://////////////////////////////////////////////
|
||||
#include "NW_I0_SPELLS"
|
||||
|
||||
effect eShake = EffectVisualEffect(VFX_FNF_SCREEN_BUMP);
|
||||
effect eDark = EffectVisualEffect(VFX_DUR_DARKNESS);
|
||||
effect eBoom = EffectVisualEffect(VFX_FNF_FIREBALL,FALSE);
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_M);
|
||||
effect eFire = EffectVisualEffect(VFX_IMP_PULSE_FIRE);
|
||||
effect knockdown = EffectKnockdown();
|
||||
effect dazed = EffectDazed();
|
||||
effect eSmoke = EffectVisualEffect(320);
|
||||
effect eDebris = EffectVisualEffect(354);
|
||||
effect eDam;
|
||||
float fDelay;
|
||||
int nDamage;
|
||||
effect eDest = EffectDeath();
|
||||
object oDetinator = GetLocalObject(OBJECT_SELF, "GZ_OBJECT_ACTIVATOR");
|
||||
int iRoll6 = d10(3)-7;//Very Far away. Avg b4 Reflex Save: 15-7
|
||||
int iRoll5 = d10(6)-15;//Near enough. Avg b4 Reflex Save: 30-15
|
||||
int iRoll4 = d10(9)-23;//Kinda close arn't ya? Avg b4 Reflex Save: 45-23
|
||||
int iRoll3 = d10(12)-30;//Still gona get hurt! Avg b4 Reflex Save: 60-30
|
||||
int iRoll2 = d10(15);//Too close. Avg b4 Reflex Save: 75
|
||||
int iRoll1 = d6(18);//Standing Right next to it! Avg b4 Reflex Save: 90
|
||||
|
||||
//Produce a radius intensity damage at lLoc
|
||||
//The closer you are to the lLoc, the more damage you take!
|
||||
void BlastArea(location lLoc);
|
||||
|
||||
void Knock_Down(location lLoc)
|
||||
{
|
||||
object oPC = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, lLoc, TRUE, OBJECT_TYPE_CREATURE);
|
||||
while (GetIsObjectValid(oPC))
|
||||
{
|
||||
int iKnock = d10();
|
||||
//int iDazed = d10()+iKnock;
|
||||
float fKnock = IntToFloat(iKnock);
|
||||
//float fDazed = IntToFloat(iDazed);
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, knockdown, oPC, fKnock);
|
||||
//ApplyEffectToObject(DURATION_TYPE_TEMPORARY, dazed, oPC, fDazed);
|
||||
SetLocalInt(oPC, "Blast_Radius",6);
|
||||
SetIsTemporaryEnemy(oDetinator, oPC, FALSE);
|
||||
oPC = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, lLoc, TRUE, OBJECT_TYPE_CREATURE);
|
||||
}
|
||||
}
|
||||
|
||||
void Assign_Damage(location lLoc, float fRadius, int iBlastEffect)
|
||||
{
|
||||
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, fRadius, lLoc, TRUE, OBJECT_TYPE_CREATURE);
|
||||
while (GetIsObjectValid(oTarget))
|
||||
{
|
||||
if (!GetPlotFlag(oTarget))
|
||||
SetLocalInt(oTarget, "Blast_Radius", iBlastEffect);
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPHERE, fRadius, lLoc, TRUE, OBJECT_TYPE_CREATURE);
|
||||
}
|
||||
}
|
||||
|
||||
void Do_Damage(location lLoc)
|
||||
{
|
||||
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, lLoc, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
|
||||
while (GetIsObjectValid(oTarget))
|
||||
{
|
||||
if (!GetPlotFlag(oTarget))
|
||||
{
|
||||
int iDamageApply = GetLocalInt(oTarget, "Blast_Radius");
|
||||
fDelay = GetDistanceBetweenLocations(lLoc, GetLocation(oTarget))/20;
|
||||
if (GetObjectType(oTarget) == OBJECT_TYPE_DOOR)
|
||||
nDamage = GetCurrentHitPoints(oTarget)+1;
|
||||
if (GetTag(oTarget) == "XS_BOULDER")
|
||||
nDamage = GetCurrentHitPoints(oTarget)+1;
|
||||
else if (GetTag(oTarget) =="gz_obj_pkeg")
|
||||
nDamage = d6(2); // lower chance to destroy other powerderkeg
|
||||
else if (iDamageApply==6)
|
||||
nDamage = iRoll6;
|
||||
else if (iDamageApply==5)
|
||||
nDamage = iRoll5;
|
||||
else if (iDamageApply==4)
|
||||
nDamage = iRoll4;
|
||||
else if (iDamageApply==3)
|
||||
nDamage = iRoll3;
|
||||
else if (iDamageApply==2)
|
||||
nDamage = iRoll2;
|
||||
else if (iDamageApply==1)
|
||||
nDamage = iRoll1;
|
||||
else nDamage = 0;
|
||||
|
||||
nDamage = GetReflexAdjustedDamage(nDamage, oTarget, GetSpellSaveDC(), SAVING_THROW_TYPE_FIRE);
|
||||
eDam = EffectDamage(nDamage, DAMAGE_TYPE_FIRE);
|
||||
if(nDamage > 0 )//& GetObjectSeen(oTarget_r6, OBJECT_SELF))
|
||||
{
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
||||
}
|
||||
DeleteLocalInt(oTarget, "Blast_Radius");
|
||||
}
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, lLoc, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
|
||||
}
|
||||
}
|
||||
|
||||
void BlastArea(location lLoc)
|
||||
{
|
||||
//location lLoc = GetLocation(OBJECT_SELF);
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eBoom, lLoc);
|
||||
|
||||
DelayCommand(0.3f,ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eDest,lLoc));
|
||||
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eDark,lLoc,0.5);
|
||||
//*Has problems*//ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY,eSmoke,lLoc,20.0);
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eFire, lLoc);
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eDebris, lLoc);
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eDebris, lLoc);
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eDebris, lLoc);
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eDebris, lLoc);
|
||||
PlaySound("sim_explsun");
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eShake, lLoc);
|
||||
//Xeno's radius intensity damage (Please give credit if you use this in other scripts.)
|
||||
//The closer you are to the source, the more damage you take!
|
||||
Knock_Down(lLoc);//Knock down everyone in area and assign max radius damage!
|
||||
Assign_Damage(lLoc, RADIUS_SIZE_GARGANTUAN, 5);//Assign damage per radius.
|
||||
Assign_Damage(lLoc, RADIUS_SIZE_HUGE, 4);//Assign damage per radius.
|
||||
Assign_Damage(lLoc, RADIUS_SIZE_LARGE, 3);//Assign damage per radius.
|
||||
Assign_Damage(lLoc, RADIUS_SIZE_MEDIUM, 2);//Assign damage per radius.
|
||||
Assign_Damage(lLoc, RADIUS_SIZE_SMALL, 1);//Assign damage per radius.
|
||||
Do_Damage(lLoc);//Now that everyones radius is assigned, do the damage that was assigned.
|
||||
}
|
Reference in New Issue
Block a user