All pastes #14028 Raw Edit

Something

public text v1 · immutable
#14028 ·published 2005-06-12 10:19 UTC
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));
    }
  }
}