Further file organization
Further file organization
This commit is contained in:
111
nwn/nwnprc/trunk/scripts/poison_onequip.nss
Normal file
111
nwn/nwnprc/trunk/scripts/poison_onequip.nss
Normal file
@@ -0,0 +1,111 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: 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
|
||||
}
|
Reference in New Issue
Block a user