// 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)); }