83 lines
3.6 KiB
Plaintext
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));
|
|
}
|