All pastes #14703 Raw Edit

Untitled

public text v1 · immutable
#14703 ·published 2005-06-15 21:00 UTC
rendered paste body
#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));
    }
}