예제 #1
0
        public static void RecalculateMovement(CLRScriptBase script, uint Creature)
        {
            int appType = GetBaseAppearance(script, Creature);

            if (appType < 0)
            {
                return;
            }
            if (overlandMap[Creature])
            {
                if (characterMovement[Creature] == MovementType.Riding)
                {
                    appType += Ride_02;
                    script.SetCreatureAppearanceType(Creature, appType);
                    return;
                }
                else
                {
                    appType += Walk_01;
                    script.SetCreatureAppearanceType(Creature, appType);
                    return;
                }
            }
            else if (characterMovement[Creature] == MovementType.Riding)
            {
                appType += Ride_12;
                script.SetCreatureAppearanceType(Creature, appType);
                return;
            }
            else if (characterMovement[Creature] == MovementType.Swimming)
            {
                appType += Swim;
                script.SetCreatureAppearanceType(Creature, appType);
                return;
            }
            else
            {
                int moveRate = 10;
                if (script.GetLevelByClass(CLRScriptBase.CLASS_TYPE_BARBARIAN, Creature) >= 1)
                {
                    // Barbarians get +0.4m/s when not wearing heavy armor and not carrying a heavy load.
                    if (script.GetEncumbranceState(Creature) != CLRScriptBase.ENCUMBRANCE_STATE_OVERLOADED &&
                        script.GetArmorRank(script.GetItemInSlot(CLRScriptBase.INVENTORY_SLOT_CHEST, Creature)) != CLRScriptBase.ARMOR_RANK_HEAVY)
                    {
                        moveRate += 1;
                    }
                }
                if (script.GetLevelByClass(CLRScriptBase.CLASS_TYPE_MONK, Creature) >= 3)
                {
                    // Unarmored monks get +0.4m/s of movement for every 3 levels, up to level 18.
                    if (script.GetEncumbranceState(Creature) != CLRScriptBase.ENCUMBRANCE_STATE_HEAVY &&
                        script.GetEncumbranceState(Creature) != CLRScriptBase.ENCUMBRANCE_STATE_OVERLOADED &&
                        script.GetArmorRank(script.GetItemInSlot(CLRScriptBase.INVENTORY_SLOT_CHEST, Creature)) == CLRScriptBase.ARMOR_RANK_NONE)
                    {
                        if (script.GetLevelByClass(CLRScriptBase.CLASS_TYPE_MONK, Creature) >= 18)
                        {
                            moveRate++;
                        }
                        if (script.GetLevelByClass(CLRScriptBase.CLASS_TYPE_MONK, Creature) >= 15)
                        {
                            moveRate++;
                        }
                        if (script.GetLevelByClass(CLRScriptBase.CLASS_TYPE_MONK, Creature) >= 12)
                        {
                            moveRate++;
                        }
                        if (script.GetLevelByClass(CLRScriptBase.CLASS_TYPE_MONK, Creature) >= 9)
                        {
                            moveRate++;
                        }
                        if (script.GetLevelByClass(CLRScriptBase.CLASS_TYPE_MONK, Creature) >= 6)
                        {
                            moveRate++;
                        }
                        moveRate++;
                    }
                }
                if (script.GetHasFeat(CLRScriptBase.FEAT_NW9_FRANTIC_REACTIONS, Creature, CLRScriptBase.TRUE) == CLRScriptBase.TRUE)
                {
                    // Level 3+ knight protectors have frantic reactions, and thus +0.4m/s
                    moveRate++;
                }
                switch (moveRate)
                {
                case 10:
                    appType += Walk_10;
                    break;

                case 11:
                    appType += Walk_11;
                    break;

                case 12:
                    appType += Walk_12;
                    break;

                case 13:
                    appType += Walk_13;
                    break;

                case 14:
                    appType += Walk_14;
                    break;

                case 15:
                    appType += Walk_15;
                    break;

                case 16:
                    appType += Walk_16;
                    break;

                case 17:
                    appType += Walk_17;
                    break;

                case 18:
                    appType += Walk_18;
                    break;

                case 19:
                    appType += Walk_19;
                    break;

                case 20:
                    appType += Walk_20;
                    break;

                case 21:
                    appType += Walk_21;
                    break;

                case 22:
                    appType += Walk_22;
                    break;
                }

                if (script.GetHasFeat(CLRScriptBase.FEAT_MONK_ENDURANCE, Creature, CLRScriptBase.TRUE) == CLRScriptBase.TRUE)
                {
                    script.FeatRemove(Creature, CLRScriptBase.FEAT_MONK_ENDURANCE);
                    script.FeatAdd(Creature, 3742, CLRScriptBase.FALSE, CLRScriptBase.FALSE, CLRScriptBase.FALSE);
                }
                if (script.GetHasFeat(CLRScriptBase.FEAT_BARBARIAN_ENDURANCE, Creature, CLRScriptBase.TRUE) == CLRScriptBase.TRUE)
                {
                    script.FeatRemove(Creature, CLRScriptBase.FEAT_BARBARIAN_ENDURANCE);
                    script.FeatAdd(Creature, 3743, CLRScriptBase.FALSE, CLRScriptBase.FALSE, CLRScriptBase.FALSE);
                }

                script.SetCreatureAppearanceType(Creature, appType);
                return;
            }
        }