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.
76 lines
3.3 KiB
Plaintext
76 lines
3.3 KiB
Plaintext
#include "moi_inc_moifunc"
|
|
#include "inc_dynconv"
|
|
|
|
void main()
|
|
{
|
|
int nEvent = GetRunningEvent();
|
|
if(DEBUG) DoDebug("moi_iblade running, event: " + IntToString(nEvent));
|
|
|
|
// Get the PC. This is event-dependent
|
|
object oMeldshaper;
|
|
switch(nEvent)
|
|
{
|
|
case EVENT_ONPLAYEREQUIPITEM: oMeldshaper = GetItemLastEquippedBy(); break;
|
|
case EVENT_ONPLAYERUNEQUIPITEM: oMeldshaper = GetItemLastUnequippedBy(); break;
|
|
case EVENT_ONPLAYERREST_FINISHED: oMeldshaper = GetLastBeingRested(); break;
|
|
|
|
default:
|
|
oMeldshaper = OBJECT_SELF;
|
|
}
|
|
|
|
object oItem;
|
|
int nClass = GetLevelByClass(CLASS_TYPE_INCARNUM_BLADE, oMeldshaper);
|
|
|
|
// We aren't being called from any event, instead from EvalPRCFeats
|
|
if(nEvent == FALSE)
|
|
{
|
|
// Hook in the events, needed from level 1 for Blademeld
|
|
if(DEBUG) DoDebug("moi_iblade: Adding eventhooks");
|
|
AddEventScript(oMeldshaper, EVENT_ONPLAYEREQUIPITEM, "moi_iblade", TRUE, FALSE);
|
|
AddEventScript(oMeldshaper, EVENT_ONPLAYERUNEQUIPITEM, "moi_iblade", TRUE, FALSE);
|
|
AddEventScript(oMeldshaper, EVENT_ONPLAYERREST_FINISHED, "moi_iblade", TRUE, FALSE);
|
|
}
|
|
// We are called from the OnPlayerEquipItem eventhook. Add DR breaking to oMeldshaper's weapon
|
|
else if(nEvent == EVENT_ONPLAYEREQUIPITEM)
|
|
{
|
|
oMeldshaper = GetItemLastEquippedBy();
|
|
oItem = GetItemLastEquipped();
|
|
if(DEBUG) DoDebug("moi_iblade - OnEquip\n"
|
|
+ "oMeldshaper = " + DebugObject2Str(oMeldshaper) + "\n"
|
|
+ "oItem = " + DebugObject2Str(oItem) + "\n"
|
|
);
|
|
|
|
// Only applies to a single melee weapon
|
|
// IPGetIsMeleeWeapon is bugged and returns true on items it should not
|
|
if(oItem == GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oMeldshaper) && IPGetIsMeleeWeapon(oItem))
|
|
{
|
|
int nBonus = 1;
|
|
if (GetHasSpellEffect(MELD_BLADEMELD_SOUL, oMeldshaper)) nBonus = 3;
|
|
IPSafeAddItemProperty(oItem, ItemPropertyAttackBonus(nBonus), 99999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE);
|
|
IPSafeAddItemProperty(oItem, ItemPropertyAttackPenalty(nBonus), 99999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE);
|
|
}
|
|
}
|
|
// We are called from the OnPlayerUnEquipItem eventhook. Remove DR breaking from oMeldshaper's weapon
|
|
else if(nEvent == EVENT_ONPLAYERUNEQUIPITEM)
|
|
{
|
|
oMeldshaper = GetItemLastUnequippedBy();
|
|
oItem = GetItemLastUnequipped();
|
|
if(DEBUG) DoDebug("moi_iblade - OnUnEquip\n"
|
|
+ "oMeldshaper = " + DebugObject2Str(oMeldshaper) + "\n"
|
|
+ "oItem = " + DebugObject2Str(oItem) + "\n"
|
|
);
|
|
|
|
// Only applies to weapons
|
|
if(IPGetIsMeleeWeapon(oItem))
|
|
{
|
|
RemoveSpecificProperty(oItem, ITEM_PROPERTY_ATTACK_BONUS, -1, -1, 1, "", -1, DURATION_TYPE_TEMPORARY);
|
|
RemoveSpecificProperty(oItem, ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER, -1, -1, 1, "", -1, DURATION_TYPE_TEMPORARY);
|
|
}
|
|
}
|
|
else if(nEvent == EVENT_ONPLAYERREST_FINISHED)
|
|
{
|
|
AssignCommand(oMeldshaper, ClearAllActions(TRUE));
|
|
StartDynamicConversation("moi_iblade_bind", oMeldshaper, DYNCONV_EXIT_NOT_ALLOWED, FALSE, TRUE, oMeldshaper);
|
|
}
|
|
}
|