105 lines
4.9 KiB
Plaintext
105 lines
4.9 KiB
Plaintext
|
//::///////////////////////////////////////////////
|
|||
|
//:: Name Necropolitan template script
|
|||
|
//:: FileName tmp_m_necropol
|
|||
|
//::
|
|||
|
//:://////////////////////////////////////////////
|
|||
|
/* CREATING A NECROPOLITAN
|
|||
|
Necropolitan is an acquired template that can be added to
|
|||
|
any humanoid or monstrous humanoid (referred to here after as the base creature).
|
|||
|
A necropolitan speaks any languages it knew in life, and it
|
|||
|
has all the base creature<72>s statistics and special abilities except
|
|||
|
as noted here.
|
|||
|
|
|||
|
Size and Type: The creature<72>s type changes to undead, and
|
|||
|
it gains the augmented subtype. Do not recalculate base attack
|
|||
|
bonus, saves, or skill points. Size is unchanged.
|
|||
|
|
|||
|
Hit Dice: Increase to d12.
|
|||
|
|
|||
|
Special Qualities: A necropolitan retains all the special
|
|||
|
qualities of the base creature and gains those described below.
|
|||
|
|
|||
|
Resist Control (Ex): Necropolitans have a +2 profane bonus on their
|
|||
|
Will saving throws to resist the effect of a control undead spell.
|
|||
|
|
|||
|
Turn Resistance (Ex): A necropolitan has +2 turn resistance.
|
|||
|
|
|||
|
Unnatural Resilience (Ex): Necropolitans automatically heal
|
|||
|
hit point damage and ability damage at the same rate as a living
|
|||
|
creature. The Heal skill has no effect on necropolitans; however,
|
|||
|
negative energy (such as an infl ict spell) heals them.
|
|||
|
|
|||
|
Abilities: Same as the base creature, except that as undead
|
|||
|
creatures, necropolitans have no Constitution score.
|
|||
|
|
|||
|
Advancement: By character class.
|
|||
|
|
|||
|
Level Adjustment: Same as the base creature. (Becoming a
|
|||
|
necropolitan involves losing a level so the advantages of the undead type
|
|||
|
cancel out what would other wise be a larger adjustment.)
|
|||
|
*/
|
|||
|
//:://////////////////////////////////////////////
|
|||
|
//:: Created By: Tenjac
|
|||
|
//:: Created On: 5/6/08
|
|||
|
//:://////////////////////////////////////////////
|
|||
|
|
|||
|
#include "prc_inc_template"
|
|||
|
#include "inc_nwnx_funcs"
|
|||
|
|
|||
|
void main()
|
|||
|
{
|
|||
|
object oPC = OBJECT_SELF;
|
|||
|
object oSkin = GetPCSkin(oPC);
|
|||
|
itemproperty ipIP;
|
|||
|
int bFuncs = GetPRCSwitch(PRC_NWNX_FUNCS);
|
|||
|
int iTest = GetPersistantLocalInt(oPC, "NWNX_Template_necropolitan");
|
|||
|
|
|||
|
//NOTE: this maintains the Necropolitan template
|
|||
|
int nTurnResist = 2;
|
|||
|
SetCompositeBonus(oSkin, "Template_necropol_turnresist", nTurnResist, ITEM_PROPERTY_TURN_RESISTANCE);
|
|||
|
|
|||
|
if(bFuncs && !iTest)
|
|||
|
{
|
|||
|
SetPersistantLocalInt(oPC, "NWNX_Template_necropolitan", 1);
|
|||
|
PRC_Funcs_AddFeat(oPC, FEAT_UNDEAD_HD);
|
|||
|
PRC_Funcs_AddFeat(oPC, FEAT_IMMUNITY_ABILITY_DECREASE);
|
|||
|
PRC_Funcs_AddFeat(oPC, FEAT_IMMUNITY_CRITICAL);
|
|||
|
PRC_Funcs_AddFeat(oPC, FEAT_IMMUNITY_DEATH);
|
|||
|
PRC_Funcs_AddFeat(oPC, FEAT_IMMUNITY_DISEASE);
|
|||
|
PRC_Funcs_AddFeat(oPC, FEAT_IMMUNITY_MIND_SPELLS);
|
|||
|
PRC_Funcs_AddFeat(oPC, FEAT_IMMUNITY_PARALYSIS);
|
|||
|
PRC_Funcs_AddFeat(oPC, FEAT_IMMUNITY_POISON);
|
|||
|
PRC_Funcs_AddFeat(oPC, FEAT_IMMUNITY_SNEAKATTACK);
|
|||
|
PRC_Funcs_AddFeat(oPC, FEAT_TEMPLATE_NECROPOLITAN_MARKER);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_UNDEAD_HD);
|
|||
|
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
|||
|
ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_IMMUNITY_ABILITY_DECREASE);
|
|||
|
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
|||
|
ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_IMMUNITY_CRITICAL);
|
|||
|
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
|||
|
ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_IMMUNITY_DEATH);
|
|||
|
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
|||
|
ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_IMMUNITY_DISEASE);
|
|||
|
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
|||
|
ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_IMMUNITY_MIND_SPELLS);
|
|||
|
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
|||
|
ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_IMMUNITY_PARALYSIS);
|
|||
|
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
|||
|
ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_IMMUNITY_POISON);
|
|||
|
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
|||
|
ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_IMMUNITY_SNEAKATTACK);
|
|||
|
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
|||
|
//marker feat
|
|||
|
ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_TEMPLATE_NECROPOLITAN_MARKER);
|
|||
|
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
|||
|
|
|||
|
// Bugfix
|
|||
|
ipIP = ItemPropertyDamageImmunity(IP_CONST_DAMAGETYPE_NEGATIVE, IP_CONST_DAMAGEIMMUNITY_100_PERCENT);
|
|||
|
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
|||
|
}
|
|||
|
|
|||
|
if(DEBUG) SendMessageToPC(oPC, "You have feat Undead HD = "+IntToString(GetHasFeat(FEAT_UNDEAD_HD, oPC)));
|
|||
|
}
|