Psionic shot should work with Eldritch Blast

Psionic shot should work with Eldritch Blast.  Ranger / TW Rend & OSTWF tweak  Fixed PTWF access in Tempest feat list.  Updated release archive.
This commit is contained in:
Jaysyn904 2024-09-14 23:56:04 -04:00
parent c330f061ca
commit 094b0c6b5a
10 changed files with 291 additions and 216 deletions

BIN
Release/PRC8_20240914.7z Normal file

Binary file not shown.

View File

@ -186,7 +186,7 @@
182 FEAT_EPIC_OVERWHELMING_CRITICAL_TRIDENT 1078 1 -1 0
183 FEAT_EPIC_SUPERIOR_INITIATIVE 753 1 -1 0
184 FEAT_EPIC_BLINDING_SPEED 491 1 -1 1
185 PERFECT_TWO_WEAPON_FIGHTING 4320 1 11 0
185 PERFECT_TWO_WEAPON_FIGHTING 4320 1 -1 0
186 DefArrow 8 0 -1 0
187 TwoWeap 41 0 -1 0
188 Ambidex 1 0 -1 0

View File

@ -3114,7 +3114,7 @@
3110 SwordsageRecoverManeuver 16832269 16832270 ife_X2MightRage **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3690 **** 1 -1 **** 1 **** **** **** **** **** **** **** **** **** FEAT_ALERTNESS 5 **** **** **** **** **** 0 1
3111 FEAT_FULL_DRAGON_BREATH 16832855 16832856 ife_X2DDBreath **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_FULL_DRAGON_BREATH 5 **** 6 **** **** **** 0 1
3112 FEAT_CLIMB 16847418 16847419 ife_climb **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 2749 **** 0 **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_JUMP 4 **** **** **** **** **** 0 1
3113 Two-Weapon_Rend 16828414 16828415 ife_tw_rend 9 **** 15 **** **** **** **** **** 41 20 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_TWO_WEAPON_REND 6 **** **** **** **** **** 1 1
3113 Two-Weapon_Rend 16828414 16828415 ife_tw_rend 9 **** 15 **** **** **** **** **** 20 **** 0 0 1 **** **** **** **** 1 **** **** **** 41 374 **** **** **** **** **** **** **** FEAT_TWO_WEAPON_REND 6 **** **** **** **** **** 1 1
3114 FEAT_INVOKE_DIVINE_WRATH 16825348 16825349 ife_X1DivShl **** **** **** **** **** **** **** 9 13 **** 0 0 1 **** **** 2163 **** 1 **** **** 0 301 472 3139 3248 **** 7 26 **** **** FEAT_INVOKE_DIVINE_WRATH 6 1 **** **** **** **** 1 1
3115 FEAT_EPIC_DIVINE_VIGOR 16825346 16825347 ife_turnvigor **** **** **** **** **** **** 19 **** 3116 774 0 0 1 **** **** 2162 **** 1 **** **** 0 **** **** **** **** **** **** **** **** **** FEAT_EPIC_DIVINE_VIGOR 6 **** **** **** **** **** 1 1
3116 FEAT_DIVINE_VIGOR 16825344 16825345 ife_turnvigor **** **** **** **** **** **** 13 **** 13 294 0 0 1 **** **** 2164 3115 1 **** **** 1 **** **** **** **** **** **** **** **** **** FEAT_DIVINE_VIGOR 6 **** **** **** **** **** 0 1
@ -5372,7 +5372,7 @@
5368 CultistShatteredPeak_SmiteMage 16789658 16789659 ife_X1ADAbj **** **** **** **** **** **** **** **** **** **** 0 0 **** **** **** 2339 **** 0.5 1 **** **** **** **** **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1
5369 Forsaker_FastHealing 16824830 16847615 ife_divineheal **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3913 **** 1 1 **** 1 **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 0
5370 AwesomeBlow 16833142 16833143 ife_wepspec_Bax **** 25 **** **** **** **** **** **** 2806 28 0 0 1 **** **** 2340 **** 0.5 -1 **** **** **** **** **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1
5371 OversizedTWF 16790149 16790150 ife_twoweap **** 13 **** **** **** **** **** **** 41 **** 0 0 1 **** **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1
5371 OversizedTWF 16790149 16790150 ife_twoweap **** 13 **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 0.5 **** **** **** 41 374 **** **** **** **** **** **** **** FEAT_OTWF 6 1 **** **** **** **** 0 1
5372 FrostFolk_IceBlast 16790167 16790168 is_ConeCold **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3802 **** 1 -1 **** **** **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 1
5373 Uldra_RayFrost 894 6238 is_RayFrost **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3804 **** 1 3 **** **** **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 1
5374 Uldra_Fatigue 16790169 16790170 is_X1InfMin **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 3805 **** 1 1 **** **** **** **** **** **** **** **** **** **** **** **** 4 **** **** **** **** **** 0 1

View File

@ -15,8 +15,6 @@
#include "inc_item_props"
#include "prc_x2_itemprop"
//:: void main (){}
/**
* All of the following functions use the following parameters:
*
@ -673,7 +671,28 @@ void DoWeaponEquip(object oPC, object oItem, int nHand)
ForceUnequip(oPC, oItem, nHand);
}
//OTWF
//:: Oversized TWF
//:: Check if the player is a Ranger, wearing medium/heavy armor, and does not have Two-Weapon Fighting feat
int bIsRestricted = FALSE;
// Check if the player has levels in the Ranger class
if (GetLevelByClass(CLASS_TYPE_RANGER, oPC) > 0)
{
// Check if the player is wearing medium or heavy armor
int nArmorType = GetArmorType(GetItemInSlot(INVENTORY_SLOT_CHEST, oPC));
if (nArmorType == ARMOR_TYPE_MEDIUM || nArmorType == ARMOR_TYPE_HEAVY)
{
// Check if the player does not have the Two-Weapon Fighting feat
if (!GetHasFeat(FEAT_TWO_WEAPON_FIGHTING, oPC))
{
// Set the restricted flag to TRUE if all conditions are met
bIsRestricted = TRUE;
}
}
}
//:: Proceed with OSTWF bonuses if the restrictions are not met
if (!bIsRestricted)
{
if (GetHasFeat(FEAT_OTWF, oPC))
{
// When wielding a one-handed weapon in your off hand, you take penalties for fighting with two weapons as if you were wielding a light weapon in your off hand
@ -683,6 +702,7 @@ void DoWeaponEquip(object oPC, object oItem, int nHand)
SetCompositeAttackBonus(oPC, "OTWFR", 2, ATTACK_BONUS_ONHAND);
}
}
}
//check for proficiency
DoProficiencyCheck(oPC, oItem, nHand);
@ -758,3 +778,5 @@ void DoRacialEquip(object oPC, int nBaseType)
SetCompositeAttackBonus(oPC, "PrimitiveWeapon", 0);
}
}
//:: void main (){}

View File

@ -367,6 +367,7 @@ include\prc_inc_template.nss \
include\prc_inc_turning.nss \
include\prc_inc_unarmed.nss \
include\prc_inc_util.nss \
include\prc_inc_wpnrest.ncs \
include\prc_inc_wpnrest.nss \
include\prc_ip_srcost.nss \
include\prc_ipfeat_const.nss \
@ -35229,7 +35230,7 @@ newspellbookobjs\inv_ed_gift.ncs: newspellbook\inv_ed_gift.nss include\prc_inc_s
newspellbookobjs\inv_eldrtch_glv.ncs: newspellbook\inv_eldrtch_glv.nss include\prc_inc_combat.nss include\inv_inc_invfunc.nss include\prc_inc_unarmed.nss include\prc_inc_onhit.nss include\prc_misc_const.nss include\prc_inc_fork.nss include\prc_inc_natweap.nss include\inc_utility.nss include\prc_inc_spells.nss include\prc_inc_nwscript.nss include\prc_class_const.nss include\inc_target_list.nss include\inc_logmessage.nss include\inc_threads.nss include\prc_inc_actions.nss include\inc_time.nss include\inc_draw_prc.nss include\inc_eventhook.nss include\inc_metalocation.nss include\inc_array_sort.nss include\inc_uniqueid.nss include\inc_set.nss include\prc_spell_const.nss include\inv_invoc_const.nss include\psi_power_const.nss include\prc_inc_racial.nss include\prc_inc_array.nss include\moi_meld_const.nss include\bnd_vestig_const.nss include\inc_2dacache.nss include\prc_feat_const.nss include\prc_racial_const.nss include\inc_debug.nss include\prc_inc_switch.nss include\inc_persist_loca.nss include\prc_inc_skin.nss include\inc_persistsql.nss include\inc_draw.nss include\inc_draw_tools.nss include\inc_pers_array.nss include\inc_area.nss include\inc_heap.nss include\inc_newspellbook.nss include\inc_vfx_const.nss include\spinc_necro_cyst.nss include\true_utter_const.nss include\prc_inc_sneak.nss include\prcsp_engine.nss include\inc_item_props.nss include\prc_inc_core.nss include\inc_sp_gain_mem.nss include\lookup_2da_spell.nss include\inc_lookups.nss include\prc_inc_damage.nss include\prc_inc_sb_const.nss include\prc_effect_inc.nss include\prc_inc_castlvl.nss include\prc_inc_newip.nss include\prc_inc_descrptr.nss include\prc_x2_itemprop.nss include\prc_ipfeat_const.nss include\inc_prc_npc.nss include\tob_move_const.nss include\prcsp_archmaginc.nss include\prc_add_spl_pen.nss include\prcsp_reputation.nss include\inc_abil_damage.nss include\inv_inc_invknown.nss include\inv_inc_invoke.nss include\inv_inc_blast.nss include\prc_add_spell_dc.nss include\prc_spellf_inc.nss include\prc_inc_sp_tch.nss include\prc_inc_clsfunc.nss
newspellbookobjs\inv_eldtch_blast.ncs: newspellbook\inv_eldtch_blast.nss include\prc_inc_combat.nss include\prc_inc_sp_tch.nss include\inv_inc_invfunc.nss include\inv_invokehook.nss include\inv_inc_blast.nss include\prc_inc_unarmed.nss include\prc_inc_onhit.nss include\prc_misc_const.nss include\prc_inc_fork.nss include\prc_inc_natweap.nss include\inc_utility.nss include\prc_inc_spells.nss include\prc_inc_nwscript.nss include\prc_class_const.nss include\inc_target_list.nss include\inc_logmessage.nss include\inc_threads.nss include\prc_inc_actions.nss include\inc_time.nss include\inc_draw_prc.nss include\inc_eventhook.nss include\inc_metalocation.nss include\inc_array_sort.nss include\inc_uniqueid.nss include\inc_set.nss include\prc_spell_const.nss include\inv_invoc_const.nss include\psi_power_const.nss include\prc_inc_racial.nss include\prc_inc_array.nss include\moi_meld_const.nss include\bnd_vestig_const.nss include\inc_2dacache.nss include\prc_feat_const.nss include\prc_racial_const.nss include\inc_debug.nss include\prc_inc_switch.nss include\inc_persist_loca.nss include\prc_inc_skin.nss include\inc_persistsql.nss include\inc_draw.nss include\inc_draw_tools.nss include\inc_pers_array.nss include\inc_area.nss include\inc_heap.nss include\inc_newspellbook.nss include\inc_vfx_const.nss include\spinc_necro_cyst.nss include\true_utter_const.nss include\prc_inc_sneak.nss include\prcsp_engine.nss include\inc_item_props.nss include\prc_inc_core.nss include\inc_sp_gain_mem.nss include\lookup_2da_spell.nss include\inc_lookups.nss include\prc_inc_damage.nss include\prc_inc_sb_const.nss include\prc_effect_inc.nss include\prc_inc_castlvl.nss include\prc_inc_newip.nss include\prc_inc_descrptr.nss include\prc_x2_itemprop.nss include\prc_ipfeat_const.nss include\inc_prc_npc.nss include\tob_move_const.nss include\prcsp_archmaginc.nss include\prc_add_spl_pen.nss include\prcsp_reputation.nss include\inc_abil_damage.nss include\inv_inc_invknown.nss include\inv_inc_invoke.nss include\prc_add_spell_dc.nss include\prc_spellf_inc.nss include\prc_inc_clsfunc.nss include\x2_inc_spellhook.nss include\prc_x2_craft.nss include\prc_inc_itmrstr.nss include\prc_inc_burn.nss include\pnp_shft_main.nss include\inc_dynconv.nss include\inc_npc.nss include\prc_getbest_inc.nss include\prc_inc_function.nss include\prc_inc_util.nss include\prc_inc_stunfist.nss include\inc_nwnx_funcs.nss include\prc_template_con.nss include\prc_alterations.nss
newspellbookobjs\inv_eldtch_blast.ncs: newspellbook\inv_eldtch_blast.nss include\prc_inc_combat.nss include\prc_inc_sp_tch.nss include\inv_inc_invfunc.nss include\inv_invokehook.nss include\inv_inc_blast.nss include\psi_inc_core.nss include\prc_inc_unarmed.nss include\prc_inc_onhit.nss include\prc_misc_const.nss include\prc_inc_fork.nss include\prc_inc_natweap.nss include\inc_utility.nss include\prc_inc_spells.nss include\prc_inc_nwscript.nss include\prc_class_const.nss include\inc_target_list.nss include\inc_logmessage.nss include\inc_threads.nss include\prc_inc_actions.nss include\inc_time.nss include\inc_draw_prc.nss include\inc_eventhook.nss include\inc_metalocation.nss include\inc_array_sort.nss include\inc_uniqueid.nss include\inc_set.nss include\prc_spell_const.nss include\inv_invoc_const.nss include\psi_power_const.nss include\prc_inc_racial.nss include\prc_inc_array.nss include\moi_meld_const.nss include\bnd_vestig_const.nss include\inc_2dacache.nss include\prc_feat_const.nss include\prc_racial_const.nss include\inc_debug.nss include\prc_inc_switch.nss include\inc_persist_loca.nss include\prc_inc_skin.nss include\inc_persistsql.nss include\inc_draw.nss include\inc_draw_tools.nss include\inc_pers_array.nss include\inc_area.nss include\inc_heap.nss include\inc_newspellbook.nss include\inc_vfx_const.nss include\spinc_necro_cyst.nss include\true_utter_const.nss include\prc_inc_sneak.nss include\prcsp_engine.nss include\inc_item_props.nss include\prc_inc_core.nss include\inc_sp_gain_mem.nss include\lookup_2da_spell.nss include\inc_lookups.nss include\prc_inc_damage.nss include\prc_inc_sb_const.nss include\prc_effect_inc.nss include\prc_inc_castlvl.nss include\prc_inc_newip.nss include\prc_inc_descrptr.nss include\prc_x2_itemprop.nss include\prc_ipfeat_const.nss include\inc_prc_npc.nss include\tob_move_const.nss include\prcsp_archmaginc.nss include\prc_add_spl_pen.nss include\prcsp_reputation.nss include\inc_abil_damage.nss include\inv_inc_invknown.nss include\inv_inc_invoke.nss include\prc_add_spell_dc.nss include\prc_spellf_inc.nss include\prc_inc_clsfunc.nss include\x2_inc_spellhook.nss include\prc_x2_craft.nss include\prc_inc_itmrstr.nss include\prc_inc_burn.nss include\pnp_shft_main.nss include\inc_dynconv.nss include\inc_npc.nss include\prc_getbest_inc.nss include\prc_inc_function.nss include\prc_inc_util.nss include\prc_inc_stunfist.nss include\inc_nwnx_funcs.nss include\prc_template_con.nss include\prc_alterations.nss include\psi_inc_const.nss
newspellbookobjs\inv_eldtch_chain.ncs: newspellbook\inv_eldtch_chain.nss include\prc_inc_sp_tch.nss include\inv_inc_invfunc.nss include\inv_invokehook.nss include\inv_inc_blast.nss include\prc_inc_combat.nss include\prc_inc_unarmed.nss include\prc_inc_onhit.nss include\prc_misc_const.nss include\prc_inc_fork.nss include\prc_inc_natweap.nss include\inc_utility.nss include\prc_inc_spells.nss include\prc_inc_nwscript.nss include\prc_class_const.nss include\inc_target_list.nss include\inc_logmessage.nss include\inc_threads.nss include\prc_inc_actions.nss include\inc_time.nss include\inc_draw_prc.nss include\inc_eventhook.nss include\inc_metalocation.nss include\inc_array_sort.nss include\inc_uniqueid.nss include\inc_set.nss include\prc_spell_const.nss include\inv_invoc_const.nss include\psi_power_const.nss include\prc_inc_racial.nss include\prc_inc_array.nss include\moi_meld_const.nss include\bnd_vestig_const.nss include\inc_2dacache.nss include\prc_feat_const.nss include\prc_racial_const.nss include\inc_debug.nss include\prc_inc_switch.nss include\inc_persist_loca.nss include\prc_inc_skin.nss include\inc_persistsql.nss include\inc_draw.nss include\inc_draw_tools.nss include\inc_pers_array.nss include\inc_area.nss include\inc_heap.nss include\inc_newspellbook.nss include\inc_vfx_const.nss include\spinc_necro_cyst.nss include\true_utter_const.nss include\prc_inc_sneak.nss include\prcsp_engine.nss include\inc_item_props.nss include\prc_inc_core.nss include\inc_sp_gain_mem.nss include\lookup_2da_spell.nss include\inc_lookups.nss include\prc_inc_damage.nss include\prc_inc_sb_const.nss include\prc_effect_inc.nss include\prc_inc_castlvl.nss include\prc_inc_newip.nss include\prc_inc_descrptr.nss include\prc_x2_itemprop.nss include\prc_ipfeat_const.nss include\inc_prc_npc.nss include\tob_move_const.nss include\prcsp_archmaginc.nss include\prc_add_spl_pen.nss include\prcsp_reputation.nss include\inc_abil_damage.nss include\inv_inc_invknown.nss include\inv_inc_invoke.nss include\prc_add_spell_dc.nss include\prc_spellf_inc.nss include\prc_inc_clsfunc.nss include\x2_inc_spellhook.nss include\prc_x2_craft.nss include\prc_inc_itmrstr.nss include\prc_inc_burn.nss include\pnp_shft_main.nss include\inc_dynconv.nss include\inc_npc.nss include\prc_getbest_inc.nss include\prc_inc_function.nss include\prc_inc_util.nss include\prc_inc_stunfist.nss include\inc_nwnx_funcs.nss include\prc_template_con.nss include\prc_alterations.nss

View File

@ -8,6 +8,7 @@
#include "inv_inc_invfunc"
#include "inv_invokehook"
#include "inv_inc_blast"
#include "psi_inc_core"
//internal function for delayed damage
void DoDelayedBlast(object oTarget, int nDamageType = DAMAGE_TYPE_FIRE, int nVFX = VFX_IMP_FLAME_M)
@ -92,6 +93,33 @@ void main()
if(GetHasSpellEffect(INVOKE_WILD_FRENZY, oPC))
nDam += 2;
//:: RAW, Eldritch Blast is considered a ranged attack & should work with the Psionic Shot chain -Jaysyn.
if(GetIsPsionicallyFocused())
{
if (GetHasFeat(FEAT_PSIONIC_SHOT))
{
nDam += d6(2);
}
if (GetHasFeat(FEAT_GREATER_PSIONIC_SHOT))
{
nDam += d6(2);
}
LosePsionicFocus();
}
/* if(GetIsPsionicallyFocused() && GetHasFeat(FEAT_GREATER_PSIONIC_SHOT))
{
nDam += d6(4);
LosePsionicFocus();
}
if(GetIsPsionicallyFocused() && GetHasFeat(FEAT_PSIONIC_SHOT))
{
nDam += d6(2);
LosePsionicFocus();
} */
int nAtkBns = GetAttackBonus(oTarget, oPC, OBJECT_INVALID, FALSE, TOUCH_ATTACK_RANGED_SPELL);
if(GetHasFeat(FEAT_ELDRITCH_SCULPTOR))
nAtkBns += 2;

View File

@ -1065,12 +1065,36 @@ void PRCFeat_AddEventHooks(object oPC, object oSkin)
AddEventScript(oPC, EVENT_ONPLAYERUNEQUIPITEM, sScript, TRUE, FALSE);
}
// Check if the player is a Ranger, wearing medium/heavy armor, and does not have Two-Weapon Fighting feat
int bIsRestricted = FALSE;
// Check if the player has levels in the Ranger class
if (GetLevelByClass(CLASS_TYPE_RANGER, oPC) > 0)
{
// Check if the player is wearing medium or heavy armor
int nArmorType = GetArmorType(GetItemInSlot(INVENTORY_SLOT_CHEST, oPC));
if (nArmorType == ARMOR_TYPE_MEDIUM || nArmorType == ARMOR_TYPE_HEAVY)
{
// Check if the player does not have the Two-Weapon Fighting feat
if (!GetHasFeat(FEAT_TWO_WEAPON_FIGHTING, oPC))
{
// Set the restricted flag to TRUE if all conditions are met
bIsRestricted = TRUE;
}
}
}
// Proceed with the original logic only if the restrictions are not met
if (!bIsRestricted)
{
if (GetHasFeat(FEAT_TWO_WEAPON_REND, oPC))
{
sScript = "prc_tw_rend";
string sScript = "prc_tw_rend";
AddEventScript(oPC, EVENT_ONPLAYEREQUIPITEM, sScript, TRUE, FALSE);
AddEventScript(oPC, EVENT_ONPLAYERUNEQUIPITEM, sScript, TRUE, FALSE);
}
}
if(GetHasFeat(FEAT_LINGERING_DAMAGE, oPC))
{
sScript = "ft_lingdmg";

View File

@ -5236,11 +5236,11 @@ Weapon Size: Large
Feats Required: Martial</entry>
<entry id="30026" lang="en" sex="m">Sap</entry>
<entry id="30027" lang="en" sex="m">The sap is a simple weapon, typically consisting of a small bag filled with sand or lead shot.</entry>
<entry id="30028" lang="en" sex="m">Base Damage: 1d4
<entry id="30028" lang="en" sex="m">Base Damage: 1d6
Base Critical Threat: x2
Base Damage Type: Bludgeoning
Weapon Size: Small
Feats Required: Simple</entry>
Feats Required: Martial</entry>
<entry id="30032" lang="en" sex="m">Katar</entry>
<entry id="30033" lang="en" sex="m">The katar is also known as a punching dagger, discrete and efficient.</entry>
<entry id="30034" lang="en" sex="m">Base Damage: 1d4