Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
165 lines
6.9 KiB
Plaintext
165 lines
6.9 KiB
Plaintext
/*
|
|
prc_pyro
|
|
|
|
Passive feats for pyrokineticist
|
|
|
|
By: Flaming_Sword
|
|
Created: Dec 6, 2007
|
|
Modified: Dec 7, 2007
|
|
*/
|
|
|
|
#include "prc_alterations"
|
|
#include "prc_x2_itemprop"
|
|
|
|
void main()
|
|
{
|
|
object oPC = OBJECT_SELF;
|
|
object oTemp;
|
|
int iClassLevel = (GetLevelByClass(CLASS_TYPE_PYROKINETICIST, oPC));
|
|
if(iClassLevel < 1)
|
|
return;
|
|
|
|
int iEquip = GetLocalInt(oPC,"ONEQUIP"); //2 = equip, 1 = unequip
|
|
int iRest = GetLocalInt(oPC,"ONREST"); //1 = rest finished
|
|
int iEnter = GetLocalInt(oPC,"ONENTER"); //1 = entering
|
|
|
|
/*if(iEquip == 2) //equip
|
|
{
|
|
if(DEBUG) DoDebug("prc_pyro: Equip event, Proficiency check for other whips");
|
|
oTemp = GetPCItemLastEquipped();
|
|
if(GetBaseItemType(oTemp) == BASE_ITEM_WHIP && GetTag(oTemp) != "PRC_PYRO_LASH_WHIP" && !GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oPC))
|
|
{
|
|
SendMessageToPC(oPC, "You are not proficient with exotic weapons.");
|
|
if(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC) == oTemp)
|
|
ForceUnequip(oPC, oTemp, INVENTORY_SLOT_RIGHTHAND);
|
|
else
|
|
ForceUnequip(oPC, oTemp, INVENTORY_SLOT_LEFTHAND);
|
|
}
|
|
}*/
|
|
if(iEquip == 1) //OnUnEquip - fires before item is unequipped
|
|
{
|
|
if(DEBUG) DoDebug("prc_pyro: Unequip event, clearing temporary itemprops, destroying lash");
|
|
oTemp = GetPCItemLastUnequipped();
|
|
IPRemoveAllItemProperties(oTemp, DURATION_TYPE_TEMPORARY);
|
|
if(GetTag(oTemp) == "PRC_PYRO_LASH_WHIP") //Fire Lash is destroyed on unequip or unacquire
|
|
MyDestroyObject(oTemp);
|
|
}
|
|
object oSkin = GetPCSkin(oPC);
|
|
int iDamageType;
|
|
int iIPSaveType;
|
|
int iIPDamgeType;
|
|
int iImpactVFX;
|
|
int iImpactBigVFX;
|
|
int iVis;
|
|
int iBeam;
|
|
int iSave;
|
|
int iBurst;
|
|
string sString;
|
|
if(DEBUG) DoDebug("prc_pyro: Initialisation");
|
|
if(GetHasFeat(FEAT_PYRO_PYROKINETICIST, oPC))
|
|
{
|
|
iDamageType = DAMAGE_TYPE_FIRE;
|
|
iIPSaveType = IP_CONST_SAVEVS_FIRE;
|
|
iIPDamgeType = IP_CONST_DAMAGETYPE_FIRE;
|
|
iImpactVFX = VFX_IMP_FLAME_S;
|
|
iImpactBigVFX = VFX_IMP_FLAME_M;
|
|
iVis = ITEM_VISUAL_FIRE;
|
|
iBeam = VFX_BEAM_FIRE;
|
|
iSave = SAVING_THROW_TYPE_FIRE;
|
|
iBurst = VFX_FNF_FIRESTORM;
|
|
sString = "Fire";
|
|
}
|
|
else if(GetHasFeat(FEAT_PYRO_CRYOKINETICIST, oPC))
|
|
{
|
|
iDamageType = DAMAGE_TYPE_COLD;
|
|
iIPSaveType = IP_CONST_SAVEVS_COLD;
|
|
iIPDamgeType = IP_CONST_DAMAGETYPE_COLD;
|
|
iImpactVFX = VFX_IMP_FROST_S;
|
|
iImpactBigVFX = VFX_IMP_FROST_L;
|
|
iVis = ITEM_VISUAL_COLD;
|
|
iBeam = VFX_BEAM_COLD;
|
|
iSave = SAVING_THROW_TYPE_COLD;
|
|
iBurst = VFX_FNF_ICESTORM;
|
|
sString = "Cold";
|
|
}
|
|
else if(GetHasFeat(FEAT_PYRO_SONOKINETICIST, oPC))
|
|
{
|
|
iDamageType = DAMAGE_TYPE_SONIC;
|
|
iIPSaveType = IP_CONST_SAVEVS_SONIC;
|
|
iIPDamgeType = IP_CONST_DAMAGETYPE_SONIC;
|
|
iImpactVFX = VFX_IMP_SONIC;
|
|
iImpactBigVFX = VFX_IMP_SILENCE;
|
|
iVis = ITEM_VISUAL_SONIC;
|
|
iBeam = VFX_BEAM_MIND;
|
|
iSave = SAVING_THROW_TYPE_SONIC;
|
|
iBurst = VFX_FNF_SOUND_BURST;
|
|
sString = "Sonic";
|
|
}
|
|
else if(GetHasFeat(FEAT_PYRO_ELECTROKINETICIST, oPC))
|
|
{
|
|
iDamageType = DAMAGE_TYPE_ELECTRICAL;
|
|
iIPSaveType = IP_CONST_SAVEVS_ELECTRICAL;
|
|
iIPDamgeType = IP_CONST_DAMAGETYPE_ELECTRICAL;
|
|
iImpactVFX = VFX_IMP_LIGHTNING_S;
|
|
iImpactBigVFX = VFX_IMP_LIGHTNING_M;
|
|
iVis = ITEM_VISUAL_ELECTRICAL;
|
|
iBeam = VFX_BEAM_LIGHTNING;
|
|
iSave = SAVING_THROW_TYPE_ELECTRICITY;
|
|
iBurst = VFX_FNF_DISPEL_GREATER;
|
|
sString = "Lightning";
|
|
}
|
|
else if(GetHasFeat(FEAT_PYRO_ACETOKINETICIST, oPC))
|
|
{
|
|
iDamageType = DAMAGE_TYPE_ACID;
|
|
iIPSaveType = IP_CONST_SAVEVS_ACID;
|
|
iIPDamgeType = IP_CONST_DAMAGETYPE_ACID;
|
|
iImpactVFX = VFX_IMP_ACID_S;
|
|
iImpactBigVFX = VFX_IMP_ACID_L;
|
|
iVis = ITEM_VISUAL_ACID;
|
|
iBeam = VFX_BEAM_EVIL;
|
|
iSave = SAVING_THROW_TYPE_ACID;
|
|
iBurst = VFX_FNF_HORRID_WILTING;
|
|
sString = "Acid";
|
|
}
|
|
else
|
|
{
|
|
if(DEBUG) DoDebug("prc_pyro: ERROR, character does not have element feat");
|
|
return;
|
|
}
|
|
if(DEBUG) DoDebug("prc_pyro: Setting persistent local vars");
|
|
SetPersistantLocalInt(oPC, "PyroDamageType", iDamageType);
|
|
SetPersistantLocalInt(oPC, "PyroImpactVFX", iImpactVFX);
|
|
SetPersistantLocalInt(oPC, "PyroImpactBigVFX", iImpactBigVFX);
|
|
SetPersistantLocalInt(oPC, "PyroVis", iVis);
|
|
SetPersistantLocalInt(oPC, "PyroBeam", iBeam);
|
|
SetPersistantLocalInt(oPC, "PyroSave", iSave);
|
|
SetPersistantLocalInt(oPC, "PyroBurst", iBurst);
|
|
SetPersistantLocalString(oPC, "PyroString", sString);
|
|
|
|
if(iClassLevel >= 2)
|
|
{
|
|
if(DEBUG) DoDebug("prc_pyro: Adding itemprops to hide");
|
|
//Fire Adaptation
|
|
int bFear = (iClassLevel >= 7); //Fear No Fire
|
|
IPSafeAddItemProperty(oSkin, ItemPropertyBonusSavingThrowVsX(iIPSaveType, bFear ? 8 : 4));
|
|
IPSafeAddItemProperty(oSkin, ItemPropertyDamageResistance(iIPDamgeType, bFear ? IP_CONST_DAMAGERESIST_20 : IP_CONST_DAMAGERESIST_10));
|
|
|
|
if(DEBUG) DoDebug("prc_pyro: Adding itemprops to gaunts/weapons/ammo");
|
|
//Hand Afire
|
|
IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_ARMS, oPC), ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 99999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
|
if(iClassLevel >= 4)
|
|
{ //Weapon Afire
|
|
IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC), ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 99999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
|
IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC), ItemPropertyVisualEffect(iVis), 99999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
|
IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_ARROWS, oPC), ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 99999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
|
IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_BULLETS, oPC), ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 99999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
|
IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_BOLTS, oPC), ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 99999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
|
}
|
|
if(iClassLevel >= 5 && GetLocalInt(oPC, "PRC_Pyro_Nimbus"))
|
|
{
|
|
if(DEBUG) DoDebug("prc_pyro: Adding itemprops to armour");
|
|
IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CHEST, oPC), ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 99999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
|
}
|
|
}
|
|
}
|