Finished PRC8 integration. Moved creature abilities to top hak. Setup tooling. Created release archive
276 lines
7.5 KiB
Plaintext
276 lines
7.5 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Dom Queron's Effect Toolbox
|
|
//:: gzinc_effecttool
|
|
//:: Copyright (c) 2001 Bioware Corp.
|
|
//:://////////////////////////////////////////////
|
|
/*
|
|
|
|
*/
|
|
//::///////////////////////////////////////////////
|
|
//:: Created By: Dom Queron
|
|
//:: Created On: 06-13-2002
|
|
//:://////////////////////////////////////////////
|
|
|
|
#include "prc_inc_spells"
|
|
#include "nw_i0_generic"
|
|
|
|
/*
|
|
-------------------------
|
|
INTERFACE
|
|
-------------------------
|
|
*/
|
|
|
|
// Detect Effect Function
|
|
int GZHasNegativeEffects(object oPC);
|
|
int GZGetIsBlindOrDeaf(object oPC);
|
|
int GZGetIsDamaged(object oPC);
|
|
int GZGetHasAbilityDamage(object oPC);
|
|
int GZGetIsPoisoned(object oPC);
|
|
int GZGetIsDiseased(object oPC);
|
|
int GZGetIsCursed(object oPC);
|
|
int GZGetIsPolymorphed(object oPC);
|
|
int GZHasNegativeLevels(object oPC);
|
|
|
|
|
|
// Remove effect functions
|
|
void GZRemovePhysicalDamage(object oPC);
|
|
void GZRemoveDisease(object oPC);
|
|
void GZRemoveBlindOrDeafness(object oPC);
|
|
void GZRemovePoison(object oPC);
|
|
void GZRemoveCurse(object oPC);
|
|
void GZRemoveAbilityDamage(object oPC);
|
|
void GZRemoveNegativeLevels(object oPC);
|
|
void GZRemoveAllNegativeEffects(object oPC);
|
|
|
|
void GZSetUpHealer(object oModule);
|
|
|
|
/*
|
|
-------------------------
|
|
IMPLEMENTATION
|
|
-------------------------
|
|
*/
|
|
|
|
|
|
/* --== Effect Detection Functions ==-- */
|
|
|
|
int GZHasNegativeEffects(object oPC)
|
|
{
|
|
int bNeg = (GZGetHasAbilityDamage(oPC) ||GZGetIsBlindOrDeaf(oPC) || GZGetIsCursed (oPC) || GZGetIsDamaged(oPC) || GZGetIsDiseased(oPC)|| GZGetIsPoisoned(oPC) || GZGetIsPolymorphed(oPC) || GZHasNegativeLevels(oPC));
|
|
return bNeg;
|
|
}
|
|
|
|
int GZGetIsBlindOrDeaf(object oPC)
|
|
{
|
|
int bBlind = ((PRCGetHasEffect(EFFECT_TYPE_BLINDNESS,oPC) == TRUE) || (PRCGetHasEffect(EFFECT_TYPE_DEAF,oPC)==TRUE));
|
|
return bBlind;
|
|
}
|
|
|
|
int GZGetIsDamaged(object oPC)
|
|
{
|
|
int bDamaged = (GetPercentageHPLoss(oPC) <100);
|
|
return bDamaged;
|
|
}
|
|
|
|
int GZGetHasAbilityDamage(object oPC)
|
|
{
|
|
int bAbilityDmg = (PRCGetHasEffect(EFFECT_TYPE_ABILITY_DECREASE,oPC) == TRUE);
|
|
return bAbilityDmg;
|
|
}
|
|
|
|
int GZGetIsPoisoned(object oPC)
|
|
{
|
|
int bPoisoned = (PRCGetHasEffect(EFFECT_TYPE_POISON,oPC) == TRUE);
|
|
return bPoisoned;
|
|
}
|
|
|
|
int GZGetIsDiseased(object oPC)
|
|
{
|
|
int bDiseased = (PRCGetHasEffect(EFFECT_TYPE_DISEASE,oPC) == TRUE);
|
|
return bDiseased;
|
|
}
|
|
|
|
int GZGetIsCursed(object oPC)
|
|
{
|
|
int bCursed = (PRCGetHasEffect(EFFECT_TYPE_CURSE,oPC) == TRUE);
|
|
return bCursed;
|
|
}
|
|
|
|
int GZGetIsPolymorphed(object oPC)
|
|
{
|
|
int bPoly = (PRCGetHasEffect(EFFECT_TYPE_POLYMORPH,oPC) == TRUE);
|
|
return bPoly;
|
|
}
|
|
|
|
int GZHasNegativeLevels(object oPC)
|
|
{
|
|
int bLvl = (PRCGetHasEffect(EFFECT_TYPE_NEGATIVELEVEL,oPC) == TRUE);
|
|
return bLvl;
|
|
}
|
|
|
|
|
|
|
|
/* --== Effect Removal Functions ==-- */
|
|
|
|
void GZRemovePhysicalDamage(object oPC)
|
|
{
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oPC)), oPC);
|
|
}
|
|
|
|
void GZRemoveDisease(object oPC)
|
|
{
|
|
if (GZGetIsDiseased(oPC)) // safety check
|
|
{
|
|
effect eBad = GetFirstEffect(oPC);
|
|
while(GetIsEffectValid(eBad))
|
|
{
|
|
if (GetEffectType(eBad) == EFFECT_TYPE_DISEASE)
|
|
{
|
|
//Remove effect if it is negative.
|
|
RemoveEffect(oPC, eBad);
|
|
}
|
|
eBad = GetNextEffect(oPC);
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
void GZRemoveBlindOrDeafness(object oPC)
|
|
{
|
|
if (GZGetIsBlindOrDeaf(oPC)) // safety check
|
|
{
|
|
effect eBad = GetFirstEffect(oPC);
|
|
while(GetIsEffectValid(eBad))
|
|
{
|
|
if (GetEffectType(eBad) == EFFECT_TYPE_DEAF ||
|
|
GetEffectType(eBad) == EFFECT_TYPE_BLINDNESS )
|
|
{
|
|
//Remove effect if it is negative.
|
|
RemoveEffect(oPC, eBad);
|
|
}
|
|
eBad = GetNextEffect(oPC);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void GZRemovePoison(object oPC)
|
|
{
|
|
if (GZGetIsPoisoned(oPC)) // safety check
|
|
{
|
|
effect eBad = GetFirstEffect(oPC);
|
|
while(GetIsEffectValid(eBad))
|
|
{
|
|
if (GetEffectType(eBad) == EFFECT_TYPE_POISON)
|
|
{
|
|
//Remove effect if it is negative.
|
|
RemoveEffect(oPC, eBad);
|
|
}
|
|
eBad = GetNextEffect(oPC);
|
|
}
|
|
}
|
|
}
|
|
|
|
void GZRemoveCurse(object oPC)
|
|
{
|
|
if (GZGetIsCursed(oPC)) // safety check
|
|
{
|
|
effect eBad = GetFirstEffect(oPC);
|
|
while(GetIsEffectValid(eBad))
|
|
{
|
|
if (GetEffectType(eBad) == EFFECT_TYPE_CURSE)
|
|
{
|
|
//Remove effect if it is negative.
|
|
RemoveEffect(oPC, eBad);
|
|
}
|
|
eBad = GetNextEffect(oPC);
|
|
}
|
|
}
|
|
}
|
|
|
|
void GZRemoveAbilityDamage(object oPC)
|
|
{
|
|
if (GZGetHasAbilityDamage(oPC)) // safety check
|
|
{
|
|
effect eBad = GetFirstEffect(oPC);
|
|
while(GetIsEffectValid(eBad))
|
|
{
|
|
if (GetEffectType(eBad) == EFFECT_TYPE_ABILITY_DECREASE)
|
|
{
|
|
//Remove effect if it is negative.
|
|
RemoveEffect(oPC, eBad);
|
|
}
|
|
eBad = GetNextEffect(oPC);
|
|
}
|
|
}
|
|
}
|
|
|
|
void GZRemoveNegativeLevels(object oPC)
|
|
{
|
|
if (GZHasNegativeLevels(oPC)) // safety check
|
|
{
|
|
effect eBad = GetFirstEffect(oPC);
|
|
while(GetIsEffectValid(eBad))
|
|
{
|
|
if (GetEffectType(eBad) == EFFECT_TYPE_NEGATIVELEVEL)
|
|
{
|
|
//Remove effect if it is negative.
|
|
RemoveEffect(oPC, eBad);
|
|
}
|
|
eBad = GetNextEffect(oPC);
|
|
}
|
|
}
|
|
|
|
}
|
|
/*
|
|
Negative Effect Overkill
|
|
Uses Code from nw_o0_death
|
|
*/
|
|
void GZRemoveAllNegativeEffects(object oPC)
|
|
{
|
|
effect eBad = GetFirstEffect(oPC);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oPC)), oPC);
|
|
|
|
//Search for negative effects
|
|
while(GetIsEffectValid(eBad))
|
|
{
|
|
if (GetEffectType(eBad) == EFFECT_TYPE_ABILITY_DECREASE ||
|
|
GetEffectType(eBad) == EFFECT_TYPE_AC_DECREASE ||
|
|
GetEffectType(eBad) == EFFECT_TYPE_ATTACK_DECREASE ||
|
|
GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_DECREASE ||
|
|
GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE ||
|
|
GetEffectType(eBad) == EFFECT_TYPE_SAVING_THROW_DECREASE ||
|
|
GetEffectType(eBad) == EFFECT_TYPE_SPELL_RESISTANCE_DECREASE ||
|
|
GetEffectType(eBad) == EFFECT_TYPE_SKILL_DECREASE ||
|
|
GetEffectType(eBad) == EFFECT_TYPE_BLINDNESS ||
|
|
GetEffectType(eBad) == EFFECT_TYPE_DEAF ||
|
|
GetEffectType(eBad) == EFFECT_TYPE_PARALYZE ||
|
|
GetEffectType(eBad) == EFFECT_TYPE_NEGATIVELEVEL)
|
|
{
|
|
//Remove effect if it is negative.
|
|
RemoveEffect(oPC, eBad);
|
|
}
|
|
eBad = GetNextEffect(oPC);
|
|
}
|
|
|
|
}
|
|
|
|
// This function sets the cost of my custom healer services
|
|
void GZSetUpHealer(object oModule)
|
|
{
|
|
if (GetLocalInt(oModule,"T1_MODULE_HEALERSETUP") == 0)
|
|
{
|
|
SetLocalInt(oModule,"T1_MODULE_HEALER_FULLCHECK",300);
|
|
SetLocalInt(oModule,"T1_MODULE_HEALER_HEAL",10);
|
|
SetLocalInt(oModule,"T1_MODULE_HEALER_RESLVL",200);
|
|
SetLocalInt(oModule,"T1_MODULE_HEALER_RESAB",100);
|
|
SetLocalInt(oModule,"T1_MODULE_HEALER_DISEASE",10);
|
|
SetLocalInt(oModule,"T1_MODULE_HEALER_BLIND",10);
|
|
SetLocalInt(oModule,"T1_MODULE_HEALER_POISON",10);
|
|
SetLocalInt(oModule,"T1_MODULE_HEALER_CURSE",100);
|
|
SetLocalInt(oModule,"T1_MODULE_HEALERSETUP",TRUE);
|
|
}
|
|
}
|
|
|
|
|