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.
94 lines
3.5 KiB
Plaintext
94 lines
3.5 KiB
Plaintext
#include "prc_inc_stunfist"
|
|
#include "prc_inc_combat"
|
|
|
|
void AddHooks(object oItem)
|
|
{
|
|
if(GetBaseItemType(oItem) == BASE_ITEM_KAMA || GetIsPRCCreatureWeapon(oItem))
|
|
{
|
|
RemoveEventScript(oItem, EVENT_ITEM_ONHIT, "prc_ef_foe", TRUE, FALSE);
|
|
// Add eventhook to the item
|
|
AddEventScript(oItem, EVENT_ITEM_ONHIT, "prc_ef_foe", TRUE, FALSE);
|
|
|
|
// Add the OnHitCastSpell: Unique needed to trigger the event
|
|
IPSafeAddItemProperty(oItem, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), RoundsToSeconds(1), X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
|
}
|
|
}
|
|
|
|
void main()
|
|
{
|
|
object oPC = OBJECT_SELF;
|
|
int nEvent = GetRunningEvent();
|
|
|
|
// We arent being called from onhit event, instead from spell script, so activate spell and hooks
|
|
if(nEvent == FALSE)
|
|
{
|
|
if(!GetHasMonkWeaponEquipped(oPC))
|
|
return;
|
|
|
|
if(GetHasSpellEffect(SPELL_EF_FIST_OF_ENERGY_FIRE, oPC))
|
|
return;
|
|
if(GetHasSpellEffect(SPELL_EF_FIST_OF_ENERGY_ELECTRICITY, oPC))
|
|
return;
|
|
|
|
if(!ExpendStunfistUses(oPC, 1))
|
|
return;
|
|
|
|
int eDmgType;
|
|
int nSpellID = GetSpellId();
|
|
switch (nSpellID)
|
|
{
|
|
case SPELL_EF_FIST_OF_ENERGY_FIRE : eDmgType = DAMAGE_TYPE_FIRE; break;
|
|
case SPELL_EF_FIST_OF_ENERGY_ELECTRICITY: eDmgType = DAMAGE_TYPE_ELECTRICAL; break;
|
|
default: if(DEBUG) DoDebug("Unrecognized SpellID: " + IntToString(nSpellID), oPC);
|
|
}
|
|
|
|
effect eDmg = EffectDamageIncrease(DAMAGE_BONUS_1d6, eDmgType);
|
|
eDmg = EffectLinkEffects(eDmg, EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE));
|
|
eDmg = SupernaturalEffect(eDmg);
|
|
|
|
effect eVFX = EffectVisualEffect(VFX_IMP_HOLY_AID);
|
|
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDmg, oPC, RoundsToSeconds(1));
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVFX, oPC);
|
|
|
|
if(GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST,oPC) >= 6)
|
|
{
|
|
// setup hooks
|
|
AddHooks(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC));
|
|
AddHooks(GetItemInSlot(INVENTORY_SLOT_LEFTHAND , oPC));
|
|
AddHooks(GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oPC));
|
|
AddHooks(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oPC));
|
|
}
|
|
}
|
|
else if(nEvent == EVENT_ITEM_ONHIT)
|
|
{
|
|
object oItem = GetSpellCastItem();
|
|
int eDmgType;
|
|
|
|
if (GetHasSpellEffect(SPELL_EF_FIST_OF_ENERGY_FIRE, oPC)) {
|
|
eDmgType = DAMAGE_TYPE_FIRE;
|
|
} else if (GetHasSpellEffect(SPELL_EF_FIST_OF_ENERGY_ELECTRICITY, oPC)) {
|
|
eDmgType = DAMAGE_TYPE_ELECTRICAL;
|
|
} else {
|
|
// undo hooks
|
|
RemoveEventScript(oItem, EVENT_ITEM_ONHIT, "prc_ef_foe", TRUE, FALSE);
|
|
RemoveSpecificProperty(oItem, ITEM_PROPERTY_ONHITCASTSPELL, IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 0, 1, "", 1, DURATION_TYPE_TEMPORARY);
|
|
return;
|
|
}
|
|
|
|
object oTarget = PRCGetSpellTargetObject();
|
|
|
|
// GetBaseItemType(oWeapR) == BASE_ITEM_KAMA
|
|
int nThreat = 20; // todo, take into account WM with kama, and other(?) crit modifiers
|
|
int iDiceCritical = 1; // todo, take into account WM with kama, and other(?) crit modifier
|
|
|
|
int dice = d20();
|
|
|
|
if (dice >= nThreat)
|
|
{
|
|
FloatingTextStringOnCreature("Critical Hit", oPC);
|
|
int nDamage = d10(iDiceCritical);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(nDamage, eDmgType), oTarget);
|
|
}
|
|
}
|
|
} |