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.
112 lines
4.0 KiB
Plaintext
112 lines
4.0 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Poisoned Item OnEquip Event script
|
|
//:: poison_onequip
|
|
//::///////////////////////////////////////////////
|
|
/** @file
|
|
This script will determine if the equipped item
|
|
was poisoned with a contact poison.
|
|
|
|
If so, the equipper will be affected by the
|
|
poison.
|
|
|
|
Locals set by this:
|
|
pois_itm_uses - Integer.
|
|
Number of times this item
|
|
can poison people before
|
|
the poison wears off.
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Ornedan
|
|
//:: Created On: 10.01.2005
|
|
//:://////////////////////////////////////////////
|
|
|
|
#include "prc_alterations"
|
|
#include "inc_poison"
|
|
#include "prc_inc_spells"
|
|
|
|
|
|
void main()
|
|
{
|
|
object oItem = GetPCItemLastEquipped();;
|
|
object oTarget = GetPCItemLastEquippedBy();
|
|
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;
|
|
|
|
int nPoisonIdx = GetLocalInt(oItem, "pois_itm_idx");
|
|
|
|
|
|
// Some checks to see if the equipper knows the item is poisoned
|
|
// They do if they are the poisoner or have succeeded on a Spot check regarding this item
|
|
int bPCKnowsOfPoison = FALSE;
|
|
int nSafeCount = GetLocalInt(oItem, "pois_itm_safecount");
|
|
|
|
if(GetPRCSwitch(PRC_POISON_ALLOW_CLEAN_IN_EQUIP))
|
|
{
|
|
if(oTarget == GetLocalObject(oItem, "pois_itm_poisoner"))
|
|
bPCKnowsOfPoison = 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){
|
|
bPCKnowsOfPoison = TRUE;
|
|
break;
|
|
}
|
|
}
|
|
}// end if - the list has elements
|
|
}// end else - look through the safe users list to see if current user is in there
|
|
}// end if - one is allowed to clean at all
|
|
|
|
// If the equipper knows of the poison, we assume they are bright enough to try
|
|
// cleaning the item before equipping it.
|
|
if(bPCKnowsOfPoison)
|
|
{
|
|
SendMessageToPC(oTarget, GetStringByStrRef(STRREF_ONEQUIP_CLEAN_ITEM));
|
|
|
|
if(!(oTarget == GetLocalObject(oItem, "pois_itm_poisoner")))
|
|
{
|
|
int nDC = GetLocalInt(oItem, "pois_itm_trap_dc");
|
|
|
|
if(!GetIsSkillSuccessful(oTarget, SKILL_DISABLE_TRAP, nDC))
|
|
{
|
|
// Apply the poison to the cleaner
|
|
effect ePoison = EffectPoison(nPoisonIdx);
|
|
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoison, oTarget, 0.0f, FALSE);
|
|
|
|
// Inform the cleaner of the fact
|
|
SendMessageToPC(oTarget,
|
|
GetStringByStrRef(STRREF_CLEAN_ITEM_FAIL_1) + " " +
|
|
GetName(oItem) + " " +
|
|
GetStringByStrRef(STRREF_CLEAN_ITEM_FAIL_2)
|
|
); // You slip while cleaning xxxx and touch the poison.
|
|
}// end if - Disable Trap check failed
|
|
}// end if - Handle cleaner != poisoner
|
|
|
|
// Remove the poison and inform player
|
|
DoPoisonRemovalFromItem(oItem);
|
|
SendMessageToPC(oTarget,
|
|
GetStringByStrRef(STRREF_CLEAN_ITEM_SUCCESS) + " " +
|
|
GetName(oItem) + "."
|
|
); // You remove all traces of poison off of xxxx.
|
|
}// end if - equipper knows of poison
|
|
else
|
|
{
|
|
// Apply the poison to equipper
|
|
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 - equipper was unaware of the poison
|
|
}
|