HoS_PRC8/_mod/_module/nss/rts_it_uw4.nss
Jaysyn904 04165202c0 Initial upload
Initial upload
2024-11-25 19:36:07 -05:00

83 lines
3.6 KiB
Plaintext

// rts_it_uw4 - The Rage
void fnRage(object oPC)
{ // rage possession
object oTarget=GetNearestCreature(CREATURE_TYPE_IS_ALIVE,TRUE,oPC,1,CREATURE_TYPE_PERCEPTION,PERCEPTION_SEEN);
if (GetResRef(oTarget)=="listener001") oTarget=GetNearestCreature(CREATURE_TYPE_IS_ALIVE,TRUE,oPC,2,CREATURE_TYPE_PERCEPTION,PERCEPTION_SEEN);
if (!GetIsDead(oPC)&&GetLocalInt(oPC,"bRagePossessed"))
{ // in the rage
if (!GetIsInCombat(oPC))
{ // seek combat
if (GetIsObjectValid(oTarget))
{ // move
AssignCommand(oPC,ClearAllActions());
if (GetDistanceBetween(oPC,oTarget)>4.0) AssignCommand(oPC,ActionMoveToObject(oTarget,TRUE,2.5));
AssignCommand(oPC,ActionAttack(oTarget));
SetIsTemporaryEnemy(oTarget,oPC,TRUE,30.0);
} // move
else
{ // random waypoint
if (GetCurrentAction(oPC)!=ACTION_MOVETOPOINT)
{ // move
oTarget=GetNearestObject(OBJECT_TYPE_WAYPOINT,oPC,d20(2));
if (GetIsObjectValid(oTarget))
{ // move
AssignCommand(oPC,ClearAllActions());
AssignCommand(oPC,ActionMoveToObject(oTarget,TRUE));
} // move
} // move
} // random waypoint
} // seek combat
else
{ // in combat
if (GetCurrentAction(oPC)!=ACTION_ATTACKOBJECT)
{ // attack
if (GetIsObjectValid(oTarget))
{ // attack
AssignCommand(oPC,ClearAllActions());
if (GetDistanceBetween(oPC,oTarget)>4.0) AssignCommand(oPC,ActionMoveToObject(oTarget,TRUE,2.5));
AssignCommand(oPC,ActionAttack(oTarget));
SetIsTemporaryEnemy(oTarget,oPC,TRUE,30.0);
} // attack
} // attack
} // in combat
DelayCommand(2.0,fnRage(oPC));
} // in the rage
else
{ // rage over
DeleteLocalInt(oPC,"bRagePossessed");
SetCutsceneMode(oPC,FALSE,FALSE);
} // rage over
} // fnRage()
void main()
{
object oPC=GetItemActivator();
object oItem=GetItemActivated();
object oSlot=GetItemInSlot(INVENTORY_SLOT_BELT,oPC);
effect ePoly=EffectPolymorph(POLYMORPH_TYPE_UMBER_HULK,TRUE);
if (oSlot!=oItem)
{ // not equipped
SendMessageToPC(oPC,"The item must be equipped to use its ability.");
return;
} // not equipped
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,ePoly,oPC,HoursToSeconds(1));
ePoly=EffectTemporaryHitpoints(50);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,ePoly,oPC,HoursToSeconds(1));
ePoly=EffectMovementSpeedIncrease(99);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,ePoly,oPC,HoursToSeconds(1));
ePoly=EffectDamageResistance(DAMAGE_TYPE_BLUDGEONING,10,50);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,ePoly,oPC,HoursToSeconds(1));
ePoly=EffectDamageResistance(DAMAGE_TYPE_SLASHING,10,50);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,ePoly,oPC,HoursToSeconds(1));
ePoly=EffectDamageResistance(DAMAGE_TYPE_PIERCING,10,50);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,ePoly,oPC,HoursToSeconds(1));
ePoly=EffectDamageIncrease(DAMAGE_BONUS_1d6,DAMAGE_TYPE_SLASHING);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,ePoly,oPC,HoursToSeconds(1));
SetLocalInt(oPC,"bRagePossessed",TRUE);
DelayCommand(HoursToSeconds(1),DeleteLocalInt(oPC,"bRagePossessed"));
AssignCommand(oPC,ClearAllActions(TRUE));
SetCutsceneMode(oPC,TRUE,FALSE);
AssignCommand(oPC,fnRage(oPC));
}