Further file organization
Further file organization
This commit is contained in:
86
nwn/nwnprc/trunk/scripts/wol_sla_flmcstr.nss
Normal file
86
nwn/nwnprc/trunk/scripts/wol_sla_flmcstr.nss
Normal file
@@ -0,0 +1,86 @@
|
||||
/**
|
||||
* @file
|
||||
* Spellscript for Flamecaster's Bolt SLAs
|
||||
*
|
||||
*/
|
||||
|
||||
#include "prc_inc_template"
|
||||
#include "prc_inc_sp_tch"
|
||||
|
||||
void main()
|
||||
{
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLevel, nDC, nSpell, nUses;
|
||||
int nSLA = GetSpellId();
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
effect eNone;
|
||||
|
||||
object oWOL = GetItemPossessedBy(oPC, "WOL_FlamecastersBolt");
|
||||
|
||||
// You get nothing if you aren't wielding the weapon
|
||||
if(oWOL != GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) return;
|
||||
|
||||
switch(nSLA){
|
||||
case WOL_FC_MARK_TARGET:
|
||||
{
|
||||
if(PRCDoRangedTouchAttack(oTarget) > 0)
|
||||
{
|
||||
nCasterLevel = 5;
|
||||
nSpell = SPELL_FAERIE_FIRE;
|
||||
nUses = 999;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case WOL_FC_MORALE:
|
||||
{
|
||||
nCasterLevel = 5;
|
||||
nSpell = SPELL_BLESS;
|
||||
nUses = 1;
|
||||
break;
|
||||
}
|
||||
case WOL_FC_FIREBALL:
|
||||
{
|
||||
if (20 > GetHitDice(oPC))
|
||||
{
|
||||
nSpell = SPELL_FIREBALL;
|
||||
nCasterLevel = 7;
|
||||
nUses = 1;
|
||||
}
|
||||
else if (GetHitDice(oPC) >= 20)
|
||||
{
|
||||
nSpell = SPELL_FIREBALL;
|
||||
nCasterLevel = 7;
|
||||
nUses = 1;
|
||||
location lTarget = GetLocation(oPC);
|
||||
int nAlly, nEnemy;
|
||||
|
||||
// Counts allies and enemies
|
||||
oTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, lTarget, TRUE, OBJECT_TYPE_CREATURE);
|
||||
while (GetIsObjectValid(oTarget))
|
||||
{
|
||||
if (GetIsFriend(oTarget, oPC)) nAlly++;
|
||||
else if (GetIsEnemy(oTarget, oPC)) nEnemy++;
|
||||
|
||||
oTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, lTarget, TRUE, OBJECT_TYPE_CREATURE);
|
||||
}
|
||||
// 50% more enemies than allies gives free uses
|
||||
if (nEnemy > FloatToInt(nAlly * 1.5)) nUses = 999;
|
||||
else if (PRCMySavingThrow(SAVING_THROW_WILL, oPC, 17)) nUses = 999; // We want success here, not failure
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Check uses per day
|
||||
if (GetLegacyUses(oPC, nSLA) >= nUses)
|
||||
{
|
||||
FloatingTextStringOnCreature("You have used " + GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nSLA))) + " the maximum amount of times today.", oPC, FALSE);
|
||||
return;
|
||||
}
|
||||
if (nSpell > 0)
|
||||
{
|
||||
DoRacialSLA(nSpell, nCasterLevel, nDC);
|
||||
SetLegacyUses(oPC, nSLA);
|
||||
FloatingTextStringOnCreature("You have "+IntToString(nUses - GetLegacyUses(oPC, nSLA))+ " uses of " + GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", nSLA))) + " remaining today.", oPC, FALSE);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user