generated from Jaysyn/ModuleTemplate
98 lines
3.2 KiB
Plaintext
98 lines
3.2 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Rogue Equipment
|
|
//:: ROGUE_INC.nss
|
|
//:://////////////////////////////////////////////
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: 69_Jeremy_69
|
|
//:: Created On: April 25, 2003
|
|
//:://////////////////////////////////////////////
|
|
#include "prc_class_const"
|
|
|
|
// Must use ExecuteScript to call, as items use TouchAttacks which
|
|
// are called and are not actions, there for cannot be
|
|
// assigned.
|
|
void StrangleHold(object oRogue, object oVictim);
|
|
/*
|
|
The caller makes a attack role. If successfull
|
|
choking starts, Target may make escape attempt with a
|
|
reflex save. If the Target fails fails to break free
|
|
they are rendered unconscious for 1d3 rounds.
|
|
*/
|
|
|
|
void main()
|
|
{
|
|
object oTarget = GetLocalObject(OBJECT_SELF,"ROGUE_ITEM");
|
|
|
|
switch(GetLocalInt(OBJECT_SELF,"ROGUE_ITEM"))
|
|
{
|
|
case 1:
|
|
StrangleHold(OBJECT_SELF,oTarget);
|
|
break;
|
|
}
|
|
DeleteLocalInt(OBJECT_SELF,"ROGUE_ITEM");
|
|
DeleteLocalObject(OBJECT_SELF,"ROGUE_ITEM");
|
|
}
|
|
|
|
void StrangleHold(object oRogue, object oVictim)
|
|
{
|
|
// PC Messages
|
|
string VICTIM = "You passed out from a strangle hold.";
|
|
string ERROR1 = "Invalid Target.";
|
|
string ERROR2 = "You are to far away.";
|
|
string MISS = "You missed.";
|
|
|
|
// Make sure we have a creature
|
|
if(GetObjectType(oVictim) != OBJECT_TYPE_CREATURE)
|
|
{
|
|
FloatingTextStringOnCreature(ERROR1, oRogue, FALSE);
|
|
return;
|
|
}
|
|
// Make sure they are close enough to use the garrote
|
|
if(GetDistanceBetween(oRogue, oVictim)>2.0f)
|
|
{
|
|
FloatingTextStringOnCreature(ERROR2, oRogue, FALSE);
|
|
return;
|
|
}
|
|
|
|
effect eHit = EffectStunned();
|
|
eHit = EffectLinkEffects(eHit, EffectKnockdown());
|
|
float fDuration = RoundsToSeconds(d6());
|
|
// Give hidden creatures +4 bonus
|
|
int nHide = 0;
|
|
if (!GetObjectSeen(oRogue, oVictim)) nHide = 4;
|
|
|
|
int iRogue = GetLevelByClass(CLASS_TYPE_ROGUE, oRogue)
|
|
+ GetLevelByClass(CLASS_TYPE_SCOUT, oRogue)
|
|
+ GetLevelByClass(CLASS_TYPE_BEGUILER, oRogue)
|
|
+ GetLevelByClass(CLASS_TYPE_NINJA, oRogue)
|
|
+ GetLevelByClass(CLASS_TYPE_FACTOTUM, oRogue)
|
|
+ GetLevelByClass(CLASS_TYPE_ASSASSIN, oRogue)
|
|
+ GetLevelByClass(CLASS_TYPE_ARCTRICK, oRogue)
|
|
+ GetLevelByClass(CLASS_TYPE_HANDOTWM, oRogue)
|
|
+ GetLevelByClass(CLASS_TYPE_NIGHTSHADE, oRogue)
|
|
+ GetLevelByClass(CLASS_TYPE_NINJA_SPY, oRogue)
|
|
+ GetLevelByClass(CLASS_TYPE_SHADOWLORD, oRogue)
|
|
+ GetLevelByClass(CLASS_TYPE_SHADOW_SUN_NINJA, oRogue)
|
|
+ GetLevelByClass(CLASS_TYPE_SHADOW_THIEF_AMN, oRogue)
|
|
+ GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oRogue)
|
|
+ GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oRogue);
|
|
|
|
int nDC = iRogue + GetAbilityModifier(ABILITY_STRENGTH, oRogue) + nHide + 10;
|
|
/*
|
|
//:: DC Example
|
|
//:: Merry, Classes: Rogue(5) Fighter(1), Strength 9(-1),Hidden
|
|
//:: 5 + (-1) + 2 + 10 = 14 DC
|
|
//:: Gaarsh, Classes: Rogue(3), Strength 16(+2), NOT Hidden
|
|
//:: 3 + (+2) + 0 + 10 = 15 DC
|
|
*/
|
|
|
|
// Rogue attempts grab
|
|
if(!ReflexSave(oVictim, nDC) && TouchAttackMelee(oVictim))
|
|
{
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eHit, oVictim, fDuration);
|
|
FloatingTextStringOnCreature(VICTIM, oVictim, FALSE);
|
|
}else{
|
|
FloatingTextStringOnCreature(MISS, oRogue, FALSE);
|
|
}
|
|
}
|