ACR_Movement.Riding.Dismount C# (CSharp) Method

Dismount() public static method

public static Dismount ( CLRScriptBase script, uint Character, uint Cloak, NWScript.NWScriptEngineStructure2 Location ) : void
script CLRScriptFramework.CLRScriptBase
Character uint
Cloak uint
Location NWScript.NWScriptEngineStructure2
return void
        public static void Dismount(CLRScriptBase script, uint Character, uint Cloak, NWLocation Location)
        {
            string resRef = "";
            if (script.GetLocalInt(Cloak, ACR_IS_WARHORSE) == 1)
            {
                resRef = "abr_cr_an_horse_pal_";
                int nPalLevel = script.GetLevelByClass(CLRScriptBase.CLASS_TYPE_PALADIN, Character);
                if (nPalLevel >= 15) resRef += "15";
                else if (nPalLevel >= 11) resRef += "11";
                else if (nPalLevel >= 8) resRef += "8";
                else if (nPalLevel >= 5) resRef += "5";
                else resRef = "abr_cr_an_horse03";
            }
            else
            {
                switch (script.GetTag(Cloak))
                {
                    case "acr_ooc_horse01":
                        resRef = "abr_cr_an_horse01";
                        break;
                    case "acr_ooc_horse02":
                        resRef = "abr_cr_an_horse02";
                        break;
                    case "acr_ooc_horse03":
                        resRef = "abr_cr_an_horse03";
                        break;
                    default:
                        // Looks like we're not actually dismounting a horse.
                        return;
                }
            }
            
            uint Horse = script.CreateObject(CLRScriptBase.OBJECT_TYPE_CREATURE, resRef, Location, CLRScriptBase.FALSE, "");
            script.SetLocalInt(Horse, ACR_HORSE_OWNER, script.GetLocalInt(Character, ACR_CID));
            script.SetLocalInt(Horse, ACR_HORSE_ID, script.GetLocalInt(Cloak, ACR_HORSE_ID));
            int damage = script.GetCurrentHitPoints(Horse) - script.GetLocalInt(Cloak, ACR_HORSE_HP);
            if(damage > 0)
            {
                script.ApplyEffectToObject(CLRScriptBase.DURATION_TYPE_INSTANT, script.EffectDamage(damage, CLRScriptBase.DAMAGE_TYPE_MAGICAL, CLRScriptBase.DAMAGE_POWER_PLUS_TWENTY, CLRScriptBase.TRUE), Horse, 0.0f);
            }
            if (script.GetLocalInt(Cloak, ACR_IS_WARHORSE) == 1)
            {
                script.AddHenchman(Character, Horse);
                script.SetLocalInt(Horse, ACR_IS_WARHORSE, 1);
                script.SetLocalObject(Character, ACR_PAL_WARHORSE, Horse);
            }

            uint Item = GetOwnershipItemById(script, Character, script.GetLocalInt(Cloak, ACR_HORSE_ID));
            script.SetLocalObject(Item , ACR_HORSE_OBJECT, Horse);
            script.SetLocalObject(Horse, ACR_HORSE_OBJECT, Character);

            script.SetLocalString(Item, ACR_HORSE_PERS_LOC_AREA, script.GetTag(script.GetArea(Horse)));
            script.SetLocalFloat(Item, ACR_HORSE_PERS_LOC_X, script.GetPosition(Horse).x);
            script.SetLocalFloat(Item, ACR_HORSE_PERS_LOC_Y, script.GetPosition(Horse).y);
            script.SetLocalFloat(Item, ACR_HORSE_PERS_LOC_Z, script.GetPosition(Horse).z);

            script.SetPlotFlag(Cloak, CLRScriptBase.FALSE);
            script.DestroyObject(Cloak, 0.0f, CLRScriptBase.FALSE);
            isWarhorse.Remove(Character);
        }

Usage Example

Example #1
0
        public Int32 ScriptMain([In] object[] ScriptParameters, [In] Int32 DefaultReturnCode)
        {
            int  Command = (int)ScriptParameters[0]; // ScriptParameterTypes[0] is typeof(int)
            uint Target  = (uint)ScriptParameters[1];

            if (!AppearanceTypes.characterMovement.ContainsKey(Target))
            {
                AppearanceTypes.characterMovement.Add(Target, AppearanceTypes.MovementType.Walking);
            }
            if (!AppearanceTypes.overlandMap.ContainsKey(Target))
            {
                AppearanceTypes.overlandMap.Add(Target, false);
            }
            if (!AppearanceTypes.currentSwimTrigger.ContainsKey(Target))
            {
                AppearanceTypes.currentSwimTrigger.Add(Target, OBJECT_INVALID);
            }

            switch ((MovementCommand)Command)
            {
            case MovementCommand.EnterWater:
                AppearanceTypes.characterMovement[Target] = AppearanceTypes.MovementType.Swimming;
                AppearanceTypes.RecalculateMovement(this, Target);
                if (GetIsObjectValid(AppearanceTypes.currentSwimTrigger[Target]) == CLRScriptBase.TRUE)
                {
                    AppearanceTypes.currentSwimTrigger[Target] = OBJECT_SELF;
                }
                else
                {
                    AppearanceTypes.currentSwimTrigger[Target] = OBJECT_SELF;
                    Swimming.SwimTriggerEnter(this, Target);
                }
                break;

            case MovementCommand.ExitWater:
                break;

            case MovementCommand.MountHorse:
                AppearanceTypes.characterMovement[Target] = AppearanceTypes.MovementType.Riding;
                Riding.MountHorse(this, Target, OBJECT_SELF);
                AppearanceTypes.RecalculateMovement(this, Target);
                break;

            case MovementCommand.CloakRemoved:
                if (Riding.isWarhorse.ContainsKey(Target))
                {
                    AppearanceTypes.characterMovement[Target] = AppearanceTypes.MovementType.Walking;
                    Riding.Dismount(this, Target, GetPCItemLastUnequipped(), GetLocation(Target));
                    AppearanceTypes.RecalculateMovement(this, Target);
                }
                break;

            case MovementCommand.ToOverlandMap:
                AppearanceTypes.overlandMap[Target] = true;
                AppearanceTypes.RecalculateMovement(this, Target);
                break;

            case MovementCommand.FromOverlandMap:
                AppearanceTypes.overlandMap[Target] = false;
                AppearanceTypes.RecalculateMovement(this, Target);
                break;

            case MovementCommand.Dismount:
                if (Riding.isWarhorse.ContainsKey(Target))
                {
                    AppearanceTypes.characterMovement[Target] = AppearanceTypes.MovementType.Walking;
                    AppearanceTypes.RecalculateMovement(this, Target);
                    Riding.Dismount(this, Target, GetItemInSlot(INVENTORY_SLOT_CLOAK, Target), GetLocation(OBJECT_SELF));
                }
                break;

            case MovementCommand.ForceRecalculate:
                AppearanceTypes.RecalculateMovement(this, Target);
                break;

            case MovementCommand.RestoreHorse:
                AppearanceTypes.characterMovement[Target] = AppearanceTypes.MovementType.Riding;
                AppearanceTypes.RecalculateMovement(this, Target);
                if (!Riding.isWarhorse.ContainsKey(Target))
                {
                    Riding.isWarhorse.Add(Target, true);
                }
                break;
            }

            return(0);
        }