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.
111 lines
4.0 KiB
Plaintext
111 lines
4.0 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Poisoned Item OnAcquire Event script
|
|
//:: poison_onaquire
|
|
//::///////////////////////////////////////////////
|
|
/** @file
|
|
This script will determine if the acquired item
|
|
was poisoned with a contact poison.
|
|
|
|
If so, the acquirer must do a Spot check versus
|
|
a DC stored on the item.
|
|
On success, they notice the poison and pick the
|
|
item up safely. They also get added to a list of
|
|
people on the item who can safely handle it.
|
|
On failure, they get affected by the poison.
|
|
|
|
|
|
Locals set by this:
|
|
pois_itm_safecount - Integer.
|
|
Number of people, other
|
|
than the poisoner, that
|
|
can handle the item
|
|
safely.
|
|
|
|
pois_itm_uses - Integer.
|
|
Number of times this item
|
|
can poison people before
|
|
the poison wears off.
|
|
|
|
pois_itm_safe_X - Object.
|
|
If user succeeded on their
|
|
Spot check, they get added
|
|
to a list on the item.
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Ornedan
|
|
//:: Created On: 10.01.2005
|
|
//:://////////////////////////////////////////////
|
|
|
|
#include "prc_alterations"
|
|
#include "inc_poison"
|
|
#include "prc_inc_spells"
|
|
|
|
|
|
void main()
|
|
{
|
|
object oItem = GetModuleItemAcquired();
|
|
object oTarget = GetModuleItemAcquiredBy();
|
|
int nUses = GetLocalInt(oItem, "pois_itm_uses");
|
|
|
|
// Check to see if the item is poisoned. Any non-zero nUses means it is
|
|
if(!nUses) return;
|
|
|
|
// Some checks to see if the acquirer can safely handle the item
|
|
// They can, if they are the poisoner or have succeeded on a Spot check regarding this item
|
|
int bSafeToHandle = FALSE;
|
|
int nSafeCount = GetLocalInt(oItem, "pois_itm_safecount");
|
|
|
|
if(oTarget == GetLocalObject(oItem, "pois_itm_poisoner"))
|
|
bSafeToHandle = TRUE;
|
|
else
|
|
{
|
|
if(nSafeCount > 0)
|
|
{
|
|
int i;
|
|
object oCheck;
|
|
for(i = 1; i <= nSafeCount; i++){
|
|
oCheck = GetLocalObject(oItem, "pois_itm_safe_" + IntToString(i));
|
|
if(oTarget == oCheck){
|
|
bSafeToHandle = TRUE;
|
|
break;
|
|
}
|
|
}
|
|
}// end if - the list has elements
|
|
}// end else - look through the safe users list to see if current user is in there
|
|
|
|
// Handle the acquirer not being aware of the poison
|
|
if(!bSafeToHandle)
|
|
{
|
|
int nDC = GetLocalInt(oItem, "pois_itm_trap_dc");
|
|
|
|
if(GetIsSkillSuccessful(oTarget, SKILL_SPOT, nDC))
|
|
{
|
|
// Inform them of the poison on the item
|
|
SendMessageToPC(oTarget,
|
|
GetStringByStrRef(STRREF_ACQUIRE_SPOT_SUCCESS1) + " " +
|
|
GetName(oItem) + " " +
|
|
GetStringByStrRef(STRREF_ACQUIRE_SPOT_SUCCESS2)
|
|
); // You notice xxxx is covered with poison and pick it up very carefully.
|
|
}// end if - Spot check succeeded
|
|
else
|
|
{
|
|
// Apply the poison to acquirer
|
|
int nPoisonIdx = GetLocalInt(oItem, "pois_itm_idx");
|
|
effect ePoison = EffectPoison(nPoisonIdx);
|
|
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoison, oTarget, 0.0f, FALSE);
|
|
|
|
//Decrement uses remaining and handle poison wearing off
|
|
nUses--;
|
|
if(nUses <= 0)
|
|
DoPoisonRemovalFromItem(oItem);
|
|
else
|
|
SetLocalInt(oItem, "pois_itm_uses", nUses);
|
|
}// end else - Spot check failed
|
|
|
|
// Either way, mark that the acquirer now knows about the poison and can safely handle the item
|
|
nSafeCount++;
|
|
SetLocalInt(oItem, "pois_itm_safecount", nSafeCount);
|
|
SetLocalObject(oItem, "pois_itm_safe_" + IntToString(nSafeCount), oTarget);
|
|
}// end if - user doesn't know about the poison
|
|
}
|