#include "spn_functions" #include "inc_item_props" //script adds speed modifications based on equipped items with item_prop_speed_mod const int ITEM_PROPERTY_SPEED_INCREASE = 134; const int ITEM_PROPERTY_SPEED_DECREASE = 135; const string PLAYER_SPEED_INCREASE = "player_speed_increase"; const string PLAYER_SPEED_DECREASE = "player_speed_decrease"; void ApplySpeedIncrease(object oPC); void ApplySpeedDecrease(object oPC); //equip script void main() { //declarations object oPC = GetPCItemLastEquippedBy(); object oItem = GetPCItemLastEquipped(); itemproperty ipTest = GetFirstItemProperty(oItem); int nSpeedIncrease = GetLocalInt(oPC, PLAYER_SPEED_INCREASE), bDoIncreaseSpeed = FALSE; int nSpeedDecrease = GetLocalInt(oPC, PLAYER_SPEED_DECREASE), bDoDecreaseSpeed = FALSE; DSpeak("nCacheIncrease = " + IntToString(nSpeedIncrease)); DSpeak("nCacheDecrease = " + IntToString(nSpeedDecrease)); // start adding new properties while(GetIsItemPropertyValid(ipTest)) { if(GetItemPropertyType(ipTest) == ITEM_PROPERTY_SPEED_INCREASE) { 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 = 100; else if(GetItemPropertyCostTableValue(ipTest) == 10) iItemAdjust = 200; else if(GetItemPropertyCostTableValue(ipTest) == 11) iItemAdjust = 300; else if(GetItemPropertyCostTableValue(ipTest) == 12) iItemAdjust = 400; else if(GetItemPropertyCostTableValue(ipTest) == 13) iItemAdjust = 500; else if(GetItemPropertyCostTableValue(ipTest) == 14) iItemAdjust = 600; else if(GetItemPropertyCostTableValue(ipTest) == 15) iItemAdjust = 700; else if(GetItemPropertyCostTableValue(ipTest) == 16) iItemAdjust = 800; else if(GetItemPropertyCostTableValue(ipTest) == 17) iItemAdjust = 900; else if(GetItemPropertyCostTableValue(ipTest) == 18) iItemAdjust = 1000; nSpeedIncrease += iItemAdjust; bDoIncreaseSpeed = TRUE; } if(GetItemPropertyType(ipTest) == ITEM_PROPERTY_SPEED_DECREASE) { 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; nSpeedDecrease += iItemAdjust; bDoDecreaseSpeed = TRUE; } ipTest = GetNextItemProperty(oItem); } // If the item had a speed mod itemproperty, handle the effect object oSkin = GetPCSkin(oPC); if(!GetIsObjectValid(oSkin)) { //something odd going on here DSpeak(GetName(oPC)+" has no skin!"); return; } if(bDoIncreaseSpeed) { SetLocalInt(oSkin, PLAYER_SPEED_INCREASE, nSpeedIncrease); AssignCommand(oSkin, ApplySpeedIncrease(oPC)); } if(bDoDecreaseSpeed) { SetLocalInt(oSkin, PLAYER_SPEED_DECREASE, nSpeedDecrease); AssignCommand(oSkin, ApplySpeedDecrease(oPC)); } } void ApplySpeedIncrease(object oPC) { int nSpeedMod = GetLocalInt(OBJECT_SELF, PLAYER_SPEED_INCREASE); //clean existing modification effect eTest = GetFirstEffect(oPC); //not needed, its OBJECT_SELF //object oSkin = GetPCSkin(oPC); while(GetIsEffectValid(eTest)) { if(GetEffectCreator(eTest) == OBJECT_SELF && (GetEffectType(eTest) == EFFECT_TYPE_MOVEMENT_SPEED_INCREASE) && GetEffectDurationType(eTest) == DURATION_TYPE_PERMANENT ) RemoveEffect(oPC, eTest); eTest = GetNextEffect(oPC); } //add new modification if (nSpeedMod > 0) { effect eSpeedMod = SupernaturalEffect(EffectMovementSpeedIncrease(nSpeedMod)); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eSpeedMod, oPC); //ApplyEffectToObject(DURATION_TYPE_TEMPORARY, // SupernaturalEffect(EffectMovementSpeedIncrease(nSpeedMod)), // oPC, 99999.9); DSpeak("Increasing Speed = " + IntToString(nSpeedMod)); } else if (nSpeedMod = 0) // Avoids setting 0 bonus { DSpeak("Clearing Speed = " + IntToString(nSpeedMod)); } } void ApplySpeedDecrease(object oPC) { int nSpeedMod = GetLocalInt(OBJECT_SELF, PLAYER_SPEED_DECREASE); //clean existing modification effect eTest = GetFirstEffect(oPC); //not needed, its OBJECT_SELF //object oSkin = GetPCSkin(oPC); while(GetIsEffectValid(eTest)) { if(GetEffectCreator(eTest) == OBJECT_SELF && GetEffectType(eTest) == EFFECT_TYPE_MOVEMENT_SPEED_DECREASE && GetEffectDurationType(eTest) == DURATION_TYPE_PERMANENT ) RemoveEffect(oPC, eTest); eTest = GetNextEffect(oPC); } //add new modification if (nSpeedMod > 0) { effect eSpeedMod = SupernaturalEffect(EffectMovementSpeedDecrease(nSpeedMod)); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eSpeedMod, oPC); //ApplyEffectToObject(DURATION_TYPE_TEMPORARY, // SupernaturalEffect(EffectMovementSpeedDecrease(nSpeedMod)), oPC, 99999.9); DSpeak("Decreasing Speed = " + IntToString(nSpeedMod)); } else if (nSpeedMod = 0) // Avoids setting 0 bonus { DSpeak("Clearing Speed = " + IntToString(nSpeedMod)); } }