Amon_PRC8/_module/nss/fastbuff.nss
Jaysyn904 c5cffc37af Initial Commit
Initial Commit [v1.01]
2025-04-03 19:00:46 -04:00

113 lines
4.4 KiB
Plaintext

/*----------------------------------------------------------------
// Title: Fast buffing item
//----------------------------------------------------------------
// Scriptname: fastbuff.nss
//----------------------------------------------------------------
// Description
//----------------------------------------------------------------
// This item will buff the player or player's party member auto-
// matically as long as the player has the spells prepared, memo-
// rized or learned. It'll automatically skip weapon buffing
// spells if the player doesn't have any weapons equipped.
// It also detects if the player is equipping a melee, slashing,
// quarterstaff or ranged weapon.
// If the item itself is targeted, a script conversation will
// pop up for the player to configure the fast buff item.
//----------------------------------------------------------------
// Created By: Stefano, 30/October/2020
// Modified By: Stefano, 20/November/2020
//--------------------------------------------------------------*/
#include "zdlg_include_i"
#include "fastbuff_inc"
// Main part of the script
void main()
{
// Will create array for spells if it's not created yet
if(GetLocalInt(GetModule(), "Spell_Array_Created") != 1)
{
CreateArray();
}
int iEvent = GetUserDefinedItemEventNumber();
// Declaring variables
object oPC; // The Player
object oItem; // The Item Activated
object oItem2; // The fast buff item (just for sanity check)
object oTarget; // Target of fast buff
int iSpellID; // Spell ID
int i; // Int for "for" loop
int startI; // Starting int for "for" loop
int arraySize; // Gets the size of array for "for" loop
int iWeapon; // Weapon type
if (iEvent == X2_ITEM_EVENT_ACTIVATE)
{
// Setting variables
oPC = GetItemActivator();
oItem = GetItemActivated();
oItem2 = GetItemPossessedBy(oPC, "fastbuff");
oTarget = GetItemActivatedTarget();
// Not usable in combat
if(GetIsInCombat(oPC))
{
FloatingTextStringOnCreature("Can't do this in combat", oPC, FALSE);
return;
}
// Check if it's itself
if(oItem == oTarget)
{
// Start script dialog named "script_conv"
StartDlg(oPC, oItem, "script_conv", TRUE, FALSE, FALSE);
return;
}
// Check if object is valid
if(!GetIsObjectValid(oTarget) ||
!GetIsPartyMember(oPC, oTarget))
{
SendMessageToPC(oPC, "Invalid target");
return;
}
// Get weapon type
iWeapon = GetWeaponType(oPC);
// Sets parameters for "for" loop according to the weapon type
switch (iWeapon)
{
/* ORIGINAL
case 0: startI = 10; arraySize = GetIntArraySize("SpellBuff", GetModule()) - 1; break;
case 1: startI = 4; arraySize = GetIntArraySize("SpellBuff", GetModule()); break;
case 2: startI = 0; arraySize = GetIntArraySize("SpellBuff", GetModule()) - 1; break;
case 3: startI = 2; arraySize = GetIntArraySize("SpellBuff", GetModule()) - 1; break;
case 4: startI = 10; arraySize = GetIntArraySize("SpellBuff", GetModule()) - 1; break; */
case 0: startI = 10; arraySize = GetIntArraySize("SpellBuff", GetModule()) - 1; break;
case 1: startI = 0; arraySize = GetIntArraySize("SpellBuff", GetModule()) - 1; break;
case 2: startI = 0; arraySize = GetIntArraySize("SpellBuff", GetModule()) - 1; break;
case 3: startI = 0; arraySize = GetIntArraySize("SpellBuff", GetModule()) - 1; break;
case 4: startI = 10; arraySize = GetIntArraySize("SpellBuff", GetModule()) - 1; break;
}
// For loop
for(i = startI; i < arraySize; i++)
{
// Sets iSpellID the value found at index i from array
iSpellID = GetIntArrayElement("SpellBuff", i, GetModule());
// If the player has the spell prepared/memorized/learned
// And want the spell to be cast (set by the conversation)
if(iSpellID != 0 && GetHasSpell(iSpellID, oPC) >= 1 &&
GetLocalInt(oItem2, IntToString(iSpellID)) != 1)
{
AssignCommand(oPC, ActionCastSpellAtObject(iSpellID, oTarget, METAMAGIC_ANY, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE));
}
}
}
}