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.
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
|
|
}
|