Initial commit
Initial commit. Updated release archive.
This commit is contained in:
273
_module/nss/en6_special.nss
Normal file
273
_module/nss/en6_special.nss
Normal file
@@ -0,0 +1,273 @@
|
||||
//#include "prc_x2_itemprop"
|
||||
#include "prc_x2_itemprop"
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void GetSpecialPowers(object oPC);
|
||||
void FireShield(object oTarget);
|
||||
void GetSpecialWeapon(object oPC);
|
||||
void GetSpecialWeaponBonus(object oPC, object oItem);
|
||||
int GetWPBDamage(object oPC);
|
||||
int GetWPBDamageType(object oPC);
|
||||
|
||||
void main()
|
||||
{
|
||||
GetSpecialPowers(OBJECT_SELF);
|
||||
}
|
||||
|
||||
void GetSpecialPowers(object oPC)
|
||||
{
|
||||
object oItem;
|
||||
itemproperty ip;
|
||||
string sTag;
|
||||
int iEquip;
|
||||
int iSpecialPowers;
|
||||
|
||||
oItem = GetItemInSlot(INVENTORY_SLOT_CARMOUR,oPC);
|
||||
|
||||
if (!GetIsObjectValid(oItem))
|
||||
{
|
||||
sTag = "en3_pcskin";
|
||||
oItem = CreateItemOnObject(sTag,oPC);
|
||||
DelayCommand(0.1,AssignCommand(oPC,ActionEquipItem(oItem,INVENTORY_SLOT_CARMOUR)));
|
||||
}
|
||||
|
||||
iSpecialPowers = GetLocalInt(oPC,"SpecialPowers");
|
||||
|
||||
if (iSpecialPowers == 1) // Demonic Powers
|
||||
{
|
||||
ip = ItemPropertyAbilityBonus(IP_CONST_ABILITY_STR,4);
|
||||
IPSafeAddItemProperty(oItem,ip);
|
||||
ip = ItemPropertyAbilityBonus(IP_CONST_ABILITY_CON,4);
|
||||
IPSafeAddItemProperty(oItem,ip);
|
||||
ip=ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_DEATH_MAGIC);
|
||||
IPSafeAddItemProperty(oItem,ip);
|
||||
ip=ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_LEVEL_ABIL_DRAIN);
|
||||
IPSafeAddItemProperty(oItem,ip);
|
||||
ip=ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_CRITICAL_HITS);
|
||||
IPSafeAddItemProperty(oItem,ip);
|
||||
ip=ItemPropertyHaste();
|
||||
IPSafeAddItemProperty(oItem,ip);
|
||||
ip=ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_FEAR);
|
||||
IPSafeAddItemProperty(oItem,ip);
|
||||
}
|
||||
if (iSpecialPowers == 2) // Enchanted
|
||||
{
|
||||
ip=ItemPropertyHaste();
|
||||
IPSafeAddItemProperty(oItem,ip);
|
||||
ip=ItemPropertyRegeneration(5);
|
||||
IPSafeAddItemProperty(oItem,ip);
|
||||
ip=ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_12);
|
||||
IPSafeAddItemProperty(oItem,ip);
|
||||
ip=ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_MINDSPELLS);
|
||||
IPSafeAddItemProperty(oItem,ip);
|
||||
}
|
||||
if (iSpecialPowers == 3) //Enhanced Strength
|
||||
{
|
||||
ip = ItemPropertyAbilityBonus(IP_CONST_ABILITY_STR,2);
|
||||
IPSafeAddItemProperty(oItem,ip);
|
||||
}
|
||||
if (iSpecialPowers == 4) // Fire Shield
|
||||
{
|
||||
FireShield(oPC);
|
||||
}
|
||||
if (iSpecialPowers == 6) // Super Powers Regeneration
|
||||
{
|
||||
ip=ItemPropertyRegeneration(10);
|
||||
IPSafeAddItemProperty(oItem,ip);
|
||||
}
|
||||
if (iSpecialPowers == 7) // Super Powers Speed
|
||||
{
|
||||
ip=ItemPropertyHaste();
|
||||
IPSafeAddItemProperty(oItem,ip);
|
||||
ip = ItemPropertyAbilityBonus(IP_CONST_ABILITY_DEX,10);
|
||||
IPSafeAddItemProperty(oItem,ip);
|
||||
}
|
||||
if (iSpecialPowers == 8) // Super Powers Physical Invulnerability
|
||||
{
|
||||
ip = ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_10,IP_CONST_DAMAGESOAK_50_HP);
|
||||
IPSafeAddItemProperty(oItem,ip);
|
||||
}
|
||||
if (iSpecialPowers == 9) // Super Powers Magical Invulnerability
|
||||
{
|
||||
ip = ItemPropertyImmunityToSpellLevel(9);
|
||||
IPSafeAddItemProperty(oItem,ip);
|
||||
}
|
||||
if (iSpecialPowers == 10) // Super Powers Strength
|
||||
{
|
||||
ip = ItemPropertyAbilityBonus(IP_CONST_ABILITY_STR,10);
|
||||
IPSafeAddItemProperty(oItem,ip);
|
||||
}
|
||||
if (iSpecialPowers == 11) // GhostlyImage
|
||||
{
|
||||
ip = ItemPropertyAbilityBonus(IP_CONST_ABILITY_STR,10);
|
||||
IPSafeAddItemProperty(oItem,ip);
|
||||
}
|
||||
if (iSpecialPowers == 12) // God-like powers
|
||||
{
|
||||
ip = ItemPropertyAbilityBonus(IP_CONST_ABILITY_STR,5);
|
||||
IPSafeAddItemProperty(oItem,ip);
|
||||
ip = ItemPropertyAbilityBonus(IP_CONST_ABILITY_CON,5);
|
||||
IPSafeAddItemProperty(oItem,ip);
|
||||
ip=ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_DEATH_MAGIC);
|
||||
IPSafeAddItemProperty(oItem,ip);
|
||||
ip=ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_LEVEL_ABIL_DRAIN);
|
||||
IPSafeAddItemProperty(oItem,ip);
|
||||
ip=ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_CRITICAL_HITS);
|
||||
IPSafeAddItemProperty(oItem,ip);
|
||||
ip=ItemPropertyHaste();
|
||||
IPSafeAddItemProperty(oItem,ip);
|
||||
ip=ItemPropertyRegeneration(5);
|
||||
IPSafeAddItemProperty(oItem,ip);
|
||||
ip=ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_24);
|
||||
IPSafeAddItemProperty(oItem,ip);
|
||||
ip=ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_2,IP_CONST_DAMAGESOAK_20_HP);
|
||||
IPSafeAddItemProperty(oItem,ip);
|
||||
ip=ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_MINDSPELLS);
|
||||
IPSafeAddItemProperty(oItem,ip);
|
||||
}
|
||||
if (iSpecialPowers == 13) // Strength
|
||||
{
|
||||
ip = ItemPropertyAbilityBonus(IP_CONST_ABILITY_STR,5);
|
||||
IPSafeAddItemProperty(oItem,ip);
|
||||
}
|
||||
if (iSpecialPowers == 14) // Haste
|
||||
{
|
||||
ip = ItemPropertyHaste();
|
||||
IPSafeAddItemProperty(oItem,ip);
|
||||
}
|
||||
|
||||
GetSpecialWeapon(oPC);
|
||||
}
|
||||
|
||||
void FireShield(object oTarget)
|
||||
{
|
||||
|
||||
//Declare major variables
|
||||
effect eVis = EffectVisualEffect(VFX_DUR_ELEMENTAL_SHIELD);
|
||||
int nDuration = PRCGetCasterLevel(OBJECT_SELF);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
|
||||
effect eShield = EffectDamageShield(1, DAMAGE_BONUS_1d4, DAMAGE_TYPE_FIRE);
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
||||
effect eFire = EffectDamageImmunityIncrease(DAMAGE_TYPE_FIRE, 100);
|
||||
|
||||
//Link effects
|
||||
effect eLink = EffectLinkEffects(eShield, eFire);
|
||||
eLink = EffectLinkEffects(eLink, eDur);
|
||||
eLink = EffectLinkEffects(eLink, eVis);
|
||||
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(oTarget, SPELL_ELEMENTAL_SHIELD, FALSE));
|
||||
|
||||
|
||||
//Enter Metamagic conditions
|
||||
if (nMetaMagic == METAMAGIC_EXTEND)
|
||||
{
|
||||
nDuration = nDuration *2; //Duration is +100%
|
||||
}
|
||||
//Apply the VFX impact and effects
|
||||
if (!GetHasSpellEffect(SPELL_ELEMENTAL_SHIELD))
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oTarget);
|
||||
}
|
||||
|
||||
void GetSpecialWeapon(object oPC)
|
||||
{
|
||||
object oItem;
|
||||
|
||||
oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC);
|
||||
if (!GetIsObjectValid(oItem) && GetLevelByClass(CLASS_TYPE_MONK,oPC) > 0)
|
||||
oItem = GetItemInSlot(INVENTORY_SLOT_ARMS,oPC);
|
||||
|
||||
if (GetIsObjectValid(oItem))
|
||||
GetSpecialWeaponBonus(oPC,oItem);
|
||||
|
||||
oItem = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oPC);
|
||||
if (GetIsObjectValid(oItem))
|
||||
GetSpecialWeaponBonus(oPC,oItem);
|
||||
}
|
||||
|
||||
void GetSpecialWeaponBonus(object oPC, object oItem)
|
||||
{
|
||||
itemproperty ip;
|
||||
int iDamageType;
|
||||
int iFlag;
|
||||
|
||||
iFlag = FALSE;
|
||||
|
||||
if (IPGetIsMeleeWeapon(oItem) || IPGetIsProjectile(oItem) || (GetBaseItemType(oItem) == BASE_ITEM_GLOVES && GetLevelByClass(CLASS_TYPE_MONK,oPC) > 0))
|
||||
{
|
||||
if (GetLocalInt(oPC,"WeaponBonus") > 0)
|
||||
{
|
||||
iDamageType = GetWPBDamageType(oPC);
|
||||
ip=ItemPropertyDamageBonus(iDamageType,GetWPBDamage(oPC));
|
||||
IPSafeAddItemProperty(oItem,ip,86400.0f);
|
||||
iFlag = TRUE;
|
||||
}
|
||||
|
||||
if (GetLocalInt(oPC,"SpecialWeapon") == 1)
|
||||
{
|
||||
ip=ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_VAMPIRIC_TOUCH,GetHitDice(oPC)/4+1);
|
||||
IPSafeAddItemProperty(oItem,ip,86400.0f);
|
||||
iFlag = TRUE;
|
||||
}
|
||||
|
||||
if (GetLocalInt(oPC,"SpecialWeapon") == 2)
|
||||
{
|
||||
ip=ItemPropertyVampiricRegeneration(GetHitDice(oPC)/5+1);
|
||||
IPSafeAddItemProperty(oItem,ip,86400.0f);
|
||||
iFlag = TRUE;
|
||||
}
|
||||
if (GetLocalInt(oPC,"SpecialWeapon") == 3)
|
||||
{
|
||||
ip=ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_LIGHTNING_BOLT,GetHitDice(oPC)/20+1);
|
||||
IPSafeAddItemProperty(oItem,ip,86400.0f);
|
||||
iFlag = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if (iFlag == TRUE)
|
||||
SetLocalString(oItem,"PCWielder",GetName(oPC));
|
||||
|
||||
}
|
||||
|
||||
int GetWPBDamageType(object oPC)
|
||||
{
|
||||
int iDamageType;
|
||||
|
||||
iDamageType=IP_CONST_DAMAGETYPE_SONIC;
|
||||
|
||||
if (GetLocalInt(oPC,"WeaponBonus") == 1)
|
||||
iDamageType=IP_CONST_DAMAGETYPE_FIRE;
|
||||
if (GetLocalInt(oPC,"WeaponBonus") == 2)
|
||||
iDamageType=IP_CONST_DAMAGETYPE_ELECTRICAL;
|
||||
if (GetLocalInt(oPC,"WeaponBonus") == 3)
|
||||
iDamageType=IP_CONST_DAMAGETYPE_COLD;
|
||||
if (GetLocalInt(oPC,"WeaponBonus") == 4)
|
||||
iDamageType=IP_CONST_DAMAGETYPE_ACID;
|
||||
|
||||
//SendMessageToPC(GetFirstPC(),"Sonic Type = " + IntToString(IP_CONST_DAMAGETYPE_SONIC));
|
||||
//SendMessageToPC(GetFirstPC(),"DType = " + IntToString(iDamageType));
|
||||
return iDamageType;
|
||||
}
|
||||
|
||||
int GetWPBDamage(object oPC)
|
||||
{
|
||||
int iLevel;
|
||||
int iBonus;
|
||||
|
||||
iLevel = GetHitDice(oPC);
|
||||
|
||||
if (iLevel < 3)
|
||||
iBonus = IP_CONST_DAMAGEBONUS_1;
|
||||
else if (iLevel < 6)
|
||||
iBonus = IP_CONST_DAMAGEBONUS_1d4;
|
||||
else if (iLevel < 10)
|
||||
iBonus = IP_CONST_DAMAGEBONUS_1d6;
|
||||
else if (iLevel < 15)
|
||||
iBonus = IP_CONST_DAMAGEBONUS_1d8;
|
||||
else
|
||||
iBonus = IP_CONST_DAMAGEBONUS_1d10;
|
||||
|
||||
return iBonus;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user