rendered paste body#include "spn_functions"
//script adds speed modifications based on equipped items with item_prop_speed_mod
const int ITEM_PROPERTY_SPEED_MOD = 134;
const string PLAYER_SPEED_MOD = "player_speed_mod";
//equip script
void main()
{
//declarations
object oPC = GetPCItemLastEquippedBy();
object oItem = GetPCItemLastEquipped();
itemproperty ipTest = GetFirstItemProperty(oItem);
int nCache = GetLocalInt(oPC, PLAYER_SPEED_MOD);
int nSpeedMod = nCache, bDo = FALSE;
DSpeak("nCache = " +IntToString(nCache));
// start adding new properties
while(GetIsItemPropertyValid(ipTest))
{
if(GetItemPropertyType(ipTest) == ITEM_PROPERTY_SPEED_MOD)
{
int iItemAdjust = 0;
if (GetItemPropertyCostTableValue(ipTest) == 0) iItemAdjust = 10;
else if(GetItemPropertyCostTableValue(ipTest) == 1) iItemAdjust = 20;
else if(GetItemPropertyCostTableValue(ipTest) == 2) iItemAdjust = 30;
else if(GetItemPropertyCostTableValue(ipTest) == 3) iItemAdjust = 40;
else if(GetItemPropertyCostTableValue(ipTest) == 4) iItemAdjust = 50;
else if(GetItemPropertyCostTableValue(ipTest) == 5) iItemAdjust = 60;
else if(GetItemPropertyCostTableValue(ipTest) == 6) iItemAdjust = 70;
else if(GetItemPropertyCostTableValue(ipTest) == 7) iItemAdjust = 80;
else if(GetItemPropertyCostTableValue(ipTest) == 8) iItemAdjust = 90;
else if(GetItemPropertyCostTableValue(ipTest) == 9) iItemAdjust = 99;
else if(GetItemPropertyCostTableValue(ipTest) == 10) iItemAdjust = -10;
else if(GetItemPropertyCostTableValue(ipTest) == 11) iItemAdjust = -20;
else if(GetItemPropertyCostTableValue(ipTest) == 12) iItemAdjust = -30;
else if(GetItemPropertyCostTableValue(ipTest) == 13) iItemAdjust = -40;
else if(GetItemPropertyCostTableValue(ipTest) == 14) iItemAdjust = -50;
else if(GetItemPropertyCostTableValue(ipTest) == 15) iItemAdjust = -60;
else if(GetItemPropertyCostTableValue(ipTest) == 16) iItemAdjust = -70;
else if(GetItemPropertyCostTableValue(ipTest) == 17) iItemAdjust = -80;
else if(GetItemPropertyCostTableValue(ipTest) == 18) iItemAdjust = -90;
else if(GetItemPropertyCostTableValue(ipTest) == 19) iItemAdjust = -99;
nSpeedMod += iItemAdjust;
if (nSpeedMod > 99) nSpeedMod = 99;
if (nSpeedMod < -99) nSpeedMod = -99;
bDo = TRUE;
}
ipTest = GetNextItemProperty(oItem);
}
// If the item had a speed mod itemproperty, handle the effect
if(bDo)
{
//clean existing modification
effect eTest = GetFirstEffect(oPC);
while(GetIsEffectValid(eTest))
{
if(GetEffectCreator(eTest) == oItem &&
GetEffectDurationType(eTest) == DURATION_TYPE_TEMPORARY
)
RemoveEffect(oPC, eTest);
eTest = GetNextEffect(oPC);
}
//add new modification
if(nSpeedMod < 0)
{
AssignCommand(oItem, ApplyEffectToObject(DURATION_TYPE_TEMPORARY,
EffectMovementSpeedDecrease(0-nSpeedMod), oPC, 99999.9));
SetLocalInt(oPC, PLAYER_SPEED_MOD, nSpeedMod);
DSpeak("Decreasing Speed = " +IntToString(nSpeedMod));
}
else if (nSpeedMod > 0)
{
AssignCommand(oItem, ApplyEffectToObject(DURATION_TYPE_TEMPORARY,
EffectMovementSpeedIncrease(nSpeedMod), oPC, 99999.9));
SetLocalInt(oPC, PLAYER_SPEED_MOD, nSpeedMod);
DSpeak("Increasing Speed = " +IntToString(nSpeedMod));
}
else if (nSpeedMod = 0) // Avoids setting 0 bonus
{
SetLocalInt(oPC, PLAYER_SPEED_MOD, nSpeedMod);
DSpeak("Clearing Speed = " +IntToString(nSpeedMod));
}
}
}