Updated AMS marker feats. Removed arcane & divine marker feats. Updated Dread Necromancer for epic progression. Updated weapon baseitem models. Updated new weapons for crafting & npc equip. Updated prefix. Updated release archive.
		
			
				
	
	
		
			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));
 | |
|     }
 | |
| } |