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.
169 lines
6.7 KiB
Plaintext
169 lines
6.7 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Warforged Armor Restrictions
|
|
//:: race_warforged.nss
|
|
//::///////////////////////////////////////////////
|
|
/*
|
|
Handles restrictions on warforged armor-equipping
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Fox
|
|
//:: Created On: Feb 12, 2008
|
|
//:://////////////////////////////////////////////
|
|
|
|
#include "prc_alterations"
|
|
|
|
void CreateWarforgedArmor(object oPC)
|
|
{
|
|
object oArmor;
|
|
object oHelm;
|
|
//object oFeatHide = CreateItemOnObject("prc_wf_feats", oPC);
|
|
|
|
if(GetHasFeat(FEAT_IRONWOOD_PLATING, oPC))
|
|
{
|
|
oArmor = CreateItemOnObject("prc_wf_woodbody", oPC);
|
|
oHelm = CreateItemOnObject("prc_wf_helmwood", oPC);
|
|
}
|
|
else if(GetHasFeat(FEAT_MITHRIL_PLATING, oPC))
|
|
{
|
|
oArmor = CreateItemOnObject("prc_wf_mithbody", oPC);
|
|
oHelm = CreateItemOnObject("prc_wf_helmmith", oPC);
|
|
}
|
|
else if(GetHasFeat(FEAT_ADAMANTINE_PLATING, oPC))
|
|
{
|
|
oArmor = CreateItemOnObject("prc_wf_admtbody", oPC);
|
|
oHelm = CreateItemOnObject("prc_wf_helmadmt", oPC);
|
|
}
|
|
else if(GetHasFeat(FEAT_UNARMORED_BODY, oPC))
|
|
{
|
|
oArmor = CreateItemOnObject("prc_wf_unacbody", oPC);
|
|
oHelm = CreateItemOnObject("prc_wf_helmhead", oPC);
|
|
}
|
|
else if(GetHasFeat(FEAT_COMPOSITE_PLATING, oPC))
|
|
{
|
|
oArmor = CreateItemOnObject("prc_wf_compbody", oPC);
|
|
oHelm = CreateItemOnObject("prc_wf_helmhead", oPC);
|
|
}
|
|
|
|
SetDroppableFlag(oArmor, FALSE);
|
|
SetItemCursedFlag(oArmor, TRUE);
|
|
SetDroppableFlag(oHelm, FALSE);
|
|
SetItemCursedFlag(oHelm, TRUE);
|
|
|
|
// Force equip
|
|
DelayCommand(1.0, AssignCommand(oPC, ActionEquipItem(oArmor, INVENTORY_SLOT_CHEST)));
|
|
DelayCommand(1.0, AssignCommand(oPC, ActionEquipItem(oHelm, INVENTORY_SLOT_HEAD)));
|
|
}
|
|
|
|
void DoWarforgedCheck(object oPC)
|
|
{
|
|
if(!GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_HEAD, oPC)))
|
|
AssignCommand(oPC, ActionEquipItem(GetItemPossessedBy(oPC, "prc_wf_helmhead"), INVENTORY_SLOT_HEAD));
|
|
|
|
if(!GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_CHEST, oPC)))
|
|
AssignCommand(oPC, ActionEquipItem(GetItemPossessedBy(oPC, "prc_wf_unacbody"), INVENTORY_SLOT_CHEST));
|
|
}
|
|
|
|
void main()
|
|
{
|
|
int nEvent = GetRunningEvent();
|
|
if(DEBUG) DoDebug("race_warforged running, event: " + IntToString(nEvent));
|
|
|
|
// Init the PC.
|
|
object oPC = OBJECT_SELF;
|
|
object oItem;
|
|
object oArmor;
|
|
object oSkin;
|
|
|
|
// We aren't being called from any event, instead from EvalPRCFeats
|
|
if(nEvent == FALSE)
|
|
{
|
|
oPC = OBJECT_SELF;
|
|
int nArmorExists = GetIsObjectValid(GetItemPossessedBy(oPC, "prc_wf_unacbody"))
|
|
|| GetIsObjectValid(GetItemPossessedBy(oPC, "prc_wf_woodbody"))
|
|
|| GetIsObjectValid(GetItemPossessedBy(oPC, "prc_wf_mithbody"))
|
|
|| GetIsObjectValid(GetItemPossessedBy(oPC, "prc_wf_admtbody"))
|
|
|| GetIsObjectValid(GetItemPossessedBy(oPC, "prc_wf_compbody"));
|
|
// Hook in the events
|
|
if(DEBUG) DoDebug("race_warforged: Adding eventhooks");
|
|
AddEventScript(oPC, EVENT_ONHEARTBEAT, "race_warforged", TRUE, FALSE);
|
|
//may not be needed, put in just in case(ala HotU start)
|
|
AddEventScript(oPC, EVENT_ONUNAQUIREITEM, "race_warforged", TRUE, FALSE);
|
|
|
|
if(!nArmorExists)
|
|
{
|
|
CreateWarforgedArmor(oPC);
|
|
}
|
|
}
|
|
else if(nEvent == EVENT_ONHEARTBEAT)
|
|
{
|
|
oSkin = GetPCSkin(oPC);
|
|
|
|
if(DEBUG) DoDebug("race_warforged - OnHeartbeat");
|
|
|
|
if(GetHasFeat(FEAT_IRONWOOD_PLATING, oPC))
|
|
{
|
|
if (!GetHasFeat(FEAT_ARMOR_PROFICIENCY_LIGHT, oPC))
|
|
{
|
|
//Add proficiency
|
|
itemproperty ipIP = ItemPropertyBonusFeat(IP_CONST_FEAT_ARMOR_PROF_LIGHT);
|
|
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, FALSE);
|
|
if(DEBUG) DoDebug("race_warforged - ironwood - adding item property "+ItemPropertyToString(ipIP));
|
|
}
|
|
// Force equip
|
|
oItem = GetItemPossessedBy(oPC, "prc_wf_woodbody");
|
|
if (oItem != GetItemInSlot(INVENTORY_SLOT_CHEST, oPC))
|
|
AssignCommand(oPC, ActionEquipItem(oItem, INVENTORY_SLOT_CHEST));
|
|
}
|
|
else if(GetHasFeat(FEAT_MITHRIL_PLATING, oPC))
|
|
{
|
|
if (!GetHasFeat(FEAT_ARMOR_PROFICIENCY_LIGHT, oPC))
|
|
{
|
|
//Add proficiency
|
|
itemproperty ipIP = ItemPropertyBonusFeat(IP_CONST_FEAT_ARMOR_PROF_LIGHT);
|
|
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, FALSE);
|
|
if(DEBUG) DoDebug("race_warforged - mithril - adding item property "+ItemPropertyToString(ipIP));
|
|
}
|
|
// Force equip
|
|
oItem = GetItemPossessedBy(oPC, "prc_wf_mithbody");
|
|
if (oItem != GetItemInSlot(INVENTORY_SLOT_CHEST, oPC))
|
|
AssignCommand(oPC, ActionEquipItem(oItem, INVENTORY_SLOT_CHEST));
|
|
}
|
|
else if(GetHasFeat(FEAT_ADAMANTINE_PLATING, oPC))
|
|
{
|
|
if (!GetHasFeat(FEAT_ARMOR_PROFICIENCY_HEAVY, oPC))
|
|
{
|
|
//Add proficiency
|
|
itemproperty ipIP = ItemPropertyBonusFeat(IP_CONST_FEAT_ARMOR_PROF_HEAVY);
|
|
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, FALSE);
|
|
if(DEBUG) DoDebug("race_warforged - adamantine - adding item property "+ItemPropertyToString(ipIP));
|
|
}
|
|
// Force equip
|
|
oItem = GetItemPossessedBy(oPC, "prc_wf_admtbody");
|
|
if (oItem != GetItemInSlot(INVENTORY_SLOT_CHEST, oPC))
|
|
AssignCommand(oPC, ActionEquipItem(oItem, INVENTORY_SLOT_CHEST));
|
|
}
|
|
else if(GetHasFeat(FEAT_COMPOSITE_PLATING, oPC))
|
|
{
|
|
// Force equip
|
|
oItem = GetItemPossessedBy(oPC, "prc_wf_compbody");
|
|
if (oItem != GetItemInSlot(INVENTORY_SLOT_CHEST, oPC))
|
|
AssignCommand(oPC, ActionEquipItem(oItem, INVENTORY_SLOT_CHEST));
|
|
}
|
|
|
|
// Delay a bit to make sure they are appropriately dressed
|
|
DelayCommand(0.5f, DoWarforgedCheck(oPC));
|
|
}
|
|
else if(nEvent == EVENT_ONUNAQUIREITEM)
|
|
{
|
|
if(DEBUG) DoDebug("race_warforged: OnUnAcquire");
|
|
object oItem = GetModuleItemLost();
|
|
if(GetStringLeft(GetTag(oItem), 7) == "prc_wf_")
|
|
{
|
|
if(DEBUG) DoDebug("Destroying lost warforged stuff");
|
|
MyDestroyObject(oItem);
|
|
}
|
|
|
|
//recreates armor after 1 second to avoid triggering any infinite loops from HotU-type scripts
|
|
DelayCommand(1.0, CreateWarforgedArmor(oPC));
|
|
}
|
|
} |