PRC8_fork/trunk/scripts/prc_dnc_scabtch.nss
Jaysyn904 1662218bb4 Initial upload.
Adding base PRC 4.19a files to repository.
2022-10-07 13:51:24 -04:00

68 lines
2.3 KiB
Plaintext

/*
prc_dnc_scabtch
Scabrous Touch
Does contagion spell on touch
*/
#include "prc_sp_func"
#include "prc_inc_sp_tch"
void main()
{
object oCaster = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
int nClass = GetLevelByClass(CLASS_TYPE_DREAD_NECROMANCER, oCaster);
int iAttackRoll = PRCDoMeleeTouchAttack(oTarget);
if (iAttackRoll > 0)
{
int nDC = 10 + nClass/2 + GetAbilityModifier(ABILITY_CHARISMA, oCaster);
int nRand = Random(7)+1;
int nDisease;
//Use a random seed to determine the disease that will be delivered.
switch (nRand)
{
case 1:
nDisease = DISEASE_CONTAGION_BLINDING_SICKNESS;
break;
case 2:
nDisease = DISEASE_CONTAGION_CACKLE_FEVER;
break;
case 3:
nDisease = DISEASE_CONTAGION_FILTH_FEVER;
break;
case 4:
nDisease = DISEASE_CONTAGION_MINDFIRE;
break;
case 5:
nDisease = DISEASE_CONTAGION_RED_ACHE;
break;
case 6:
nDisease = DISEASE_CONTAGION_SHAKES;
break;
case 7:
nDisease = DISEASE_CONTAGION_SLIMY_DOOM;
break;
}
if(!GetIsReactionTypeFriendly(oTarget))
{
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_CONTAGION));
effect eDisease = EffectDisease(nDisease);
// Make the real first save against the spell's DC
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_SPELL))
{
//The effect is permament because the disease subsystem has its own internal resolution
//system in place.
// The first disease save is against an impossible fake DC, since at this point the
// target has already failed their real first save.
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eDisease, oTarget);
}
}
}
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, PRCGetSpellId()));
}