Exemplo n.º 1
0
        private void AddCriticalFeat(NWPlayer oPC, int type)
        {
            int feat;

            switch (type)
            {
            case (BASE_ITEM_BASTARDSWORD): feat = FEAT_IMPROVED_CRITICAL_BASTARD_SWORD; break;

            case (BASE_ITEM_BATTLEAXE): feat = FEAT_IMPROVED_CRITICAL_BATTLE_AXE; break;

            case (BASE_ITEM_CLUB): feat = FEAT_IMPROVED_CRITICAL_CLUB; break;

            case (BASE_ITEM_DAGGER): feat = FEAT_IMPROVED_CRITICAL_DAGGER; break;

            case (BASE_ITEM_DART): feat = FEAT_IMPROVED_CRITICAL_DART; break;

            case (BASE_ITEM_DIREMACE): feat = FEAT_IMPROVED_CRITICAL_DIRE_MACE; break;

            case (BASE_ITEM_DOUBLEAXE): feat = FEAT_IMPROVED_CRITICAL_DOUBLE_AXE; break;

            case (BASE_ITEM_DWARVENWARAXE): feat = FEAT_IMPROVED_CRITICAL_DWAXE; break;

            case (BASE_ITEM_GREATAXE): feat = FEAT_IMPROVED_CRITICAL_GREAT_AXE; break;

            case (BASE_ITEM_GREATSWORD): feat = FEAT_IMPROVED_CRITICAL_GREAT_SWORD; break;

            case (BASE_ITEM_HALBERD): feat = FEAT_IMPROVED_CRITICAL_HALBERD; break;

            case (BASE_ITEM_HANDAXE): feat = FEAT_IMPROVED_CRITICAL_HAND_AXE; break;

            case (BASE_ITEM_HEAVYCROSSBOW): feat = FEAT_IMPROVED_CRITICAL_HEAVY_CROSSBOW; break;

            case (BASE_ITEM_HEAVYFLAIL): feat = FEAT_IMPROVED_CRITICAL_HEAVY_FLAIL; break;

            case (BASE_ITEM_KAMA): feat = FEAT_IMPROVED_CRITICAL_KAMA; break;

            case (BASE_ITEM_KATANA): feat = FEAT_IMPROVED_CRITICAL_KATANA; break;

            case (BASE_ITEM_KUKRI): feat = FEAT_IMPROVED_CRITICAL_KUKRI; break;

            case (BASE_ITEM_LIGHTCROSSBOW): feat = FEAT_IMPROVED_CRITICAL_LIGHT_CROSSBOW; break;

            case (BASE_ITEM_LIGHTFLAIL): feat = FEAT_IMPROVED_CRITICAL_LIGHT_FLAIL; break;

            case (BASE_ITEM_LIGHTHAMMER): feat = FEAT_IMPROVED_CRITICAL_LIGHT_HAMMER; break;

            case (BASE_ITEM_LIGHTMACE): feat = FEAT_IMPROVED_CRITICAL_LIGHT_MACE; break;

            case (BASE_ITEM_LONGBOW): feat = FEAT_IMPROVED_CRITICAL_LONGBOW; break;

            case (BASE_ITEM_LONGSWORD): feat = FEAT_IMPROVED_CRITICAL_LONG_SWORD; break;

            case (BASE_ITEM_MORNINGSTAR): feat = FEAT_IMPROVED_CRITICAL_MORNING_STAR; break;

            case (BASE_ITEM_RAPIER): feat = FEAT_IMPROVED_CRITICAL_RAPIER; break;

            case (BASE_ITEM_SCIMITAR): feat = FEAT_IMPROVED_CRITICAL_SCIMITAR; break;

            case (BASE_ITEM_SCYTHE): feat = FEAT_IMPROVED_CRITICAL_SCYTHE; break;

            case (BASE_ITEM_SHORTBOW): feat = FEAT_IMPROVED_CRITICAL_SHORTBOW; break;

            case (BASE_ITEM_SHORTSWORD): feat = FEAT_IMPROVED_CRITICAL_SHORT_SWORD; break;

            case (BASE_ITEM_SHURIKEN): feat = FEAT_IMPROVED_CRITICAL_SHURIKEN; break;

            case (BASE_ITEM_SICKLE): feat = FEAT_IMPROVED_CRITICAL_SICKLE; break;

            case (BASE_ITEM_SLING): feat = FEAT_IMPROVED_CRITICAL_SLING; break;

            case (BASE_ITEM_SHORTSPEAR): feat = FEAT_IMPROVED_CRITICAL_SPEAR; break;

            case (BASE_ITEM_QUARTERSTAFF): feat = FEAT_IMPROVED_CRITICAL_STAFF; break;

            case (BASE_ITEM_THROWINGAXE): feat = FEAT_IMPROVED_CRITICAL_THROWING_AXE; break;

            case (BASE_ITEM_TRIDENT): feat = FEAT_IMPROVED_CRITICAL_TRIDENT; break;

            case (BASE_ITEM_TWOBLADEDSWORD): feat = FEAT_IMPROVED_CRITICAL_TWO_BLADED_SWORD; break;

            case (BASE_ITEM_INVALID): feat = FEAT_IMPROVED_CRITICAL_UNARMED_STRIKE; break;

            case (BASE_ITEM_WARHAMMER): feat = FEAT_IMPROVED_CRITICAL_WAR_HAMMER; break;

            case (BASE_ITEM_WHIP): feat = FEAT_IMPROVED_CRITICAL_WHIP; break;

            case (CustomBaseItemType.Lightsaber): feat = FEAT_IMPROVED_CRITICAL_LONG_SWORD; break;

            case (CustomBaseItemType.Saberstaff): feat = FEAT_IMPROVED_CRITICAL_TWO_BLADED_SWORD; break;

            default: return;
            }

            NWNXCreature.AddFeat(oPC, feat);
        }
Exemplo n.º 2
0
        private void ApplyFeatChanges(NWPlayer oPC, NWItem oItem)
        {
            NWItem equipped = oItem ?? oPC.RightHand;

            RemoveAllFeats(oPC);

            // Unarmed check
            NWItem mainHand = oPC.RightHand;
            NWItem offHand  = oPC.LeftHand;

            if (oItem != null && Equals(oItem, mainHand))
            {
                mainHand = (new Object());
            }
            else if (oItem != null && Equals(oItem, offHand))
            {
                offHand = (new Object());
            }

            if (!mainHand.IsValid && !offHand.IsValid)
            {
                if (PerkService.GetPCPerkLevel(oPC, PerkType.ImprovedCriticalMartialArts) > 0)
                {
                    NWNXCreature.AddFeat(oPC, FEAT_IMPROVED_CRITICAL_UNARMED_STRIKE);
                }
                return;
            }

            if (oItem != null && Equals(oItem, equipped))
            {
                return;
            }

            // All other weapon types
            PerkType perkType;

            switch (equipped.CustomItemType)
            {
            case CustomItemType.Vibroblade: perkType = PerkType.ImprovedCriticalVibroblades; break;

            case CustomItemType.FinesseVibroblade: perkType = PerkType.ImprovedCriticalFinesseVibroblades; break;

            case CustomItemType.Baton: perkType = PerkType.ImprovedCriticalBatons; break;

            case CustomItemType.HeavyVibroblade: perkType = PerkType.ImprovedCriticalHeavyVibroblades; break;

            case CustomItemType.Polearm: perkType = PerkType.ImprovedCriticalPolearms; break;

            case CustomItemType.TwinBlade: perkType = PerkType.ImprovedCriticalTwinVibroblades; break;

            case CustomItemType.MartialArtWeapon: perkType = PerkType.ImprovedCriticalMartialArts; break;

            case CustomItemType.BlasterPistol: perkType = PerkType.ImprovedCriticalBlasterPistols; break;

            case CustomItemType.BlasterRifle: perkType = PerkType.ImprovedCriticalBlasterRifles; break;

            case CustomItemType.Throwing: perkType = PerkType.ImprovedCriticalThrowing; break;

            case CustomItemType.Lightsaber: perkType = PerkType.ImprovedCriticalLightsabers; break;

            case CustomItemType.Saberstaff: perkType = PerkType.ImprovedCriticalSaberstaffs; break;

            default: return;
            }

            if (equipped.GetLocalInt("LIGHTSABER") == TRUE)
            {
                perkType = PerkType.ImprovedCriticalLightsabers;
            }

            int perkLevel = PerkService.GetPCPerkLevel(oPC, perkType);
            int type      = equipped.BaseItemType;

            if (perkLevel > 0)
            {
                AddCriticalFeat(oPC, type);
            }
        }
Exemplo n.º 3
0
        private void ApplyFeatChanges(NWCreature creature, NWItem oItem)
        {
            NWItem equipped = oItem ?? creature.RightHand;

            RemoveAllFeats(creature);

            // Unarmed check
            NWItem mainHand = creature.RightHand;
            NWItem offHand  = creature.LeftHand;

            if (oItem != null && Equals(oItem, mainHand))
            {
                mainHand = (new Object());
            }
            else if (oItem != null && Equals(oItem, offHand))
            {
                offHand = (new Object());
            }

            if (!mainHand.IsValid && !offHand.IsValid)
            {
                int martialArtsLevel = PerkService.GetCreaturePerkLevel(creature, PerkType.WeaponFocusMartialArts);
                if (martialArtsLevel >= 1)
                {
                    NWNXCreature.AddFeat(creature, FEAT_WEAPON_FOCUS_UNARMED_STRIKE);
                }
                if (martialArtsLevel >= 2)
                {
                    NWNXCreature.AddFeat(creature, FEAT_WEAPON_SPECIALIZATION_UNARMED_STRIKE);
                }

                return;
            }

            if (oItem != null && Equals(oItem, equipped))
            {
                return;
            }

            // All other weapon types
            PerkType perkType;

            switch (equipped.CustomItemType)
            {
            case CustomItemType.Vibroblade: perkType = PerkType.WeaponFocusVibroblades; break;

            case CustomItemType.FinesseVibroblade: perkType = PerkType.WeaponFocusFinesseVibroblades; break;

            case CustomItemType.Baton: perkType = PerkType.WeaponFocusBatons; break;

            case CustomItemType.HeavyVibroblade: perkType = PerkType.WeaponFocusHeavyVibroblades; break;

            case CustomItemType.Polearm: perkType = PerkType.WeaponFocusPolearms; break;

            case CustomItemType.TwinBlade: perkType = PerkType.WeaponFocusTwinVibroblades; break;

            case CustomItemType.MartialArtWeapon: perkType = PerkType.WeaponFocusMartialArts; break;

            case CustomItemType.BlasterPistol: perkType = PerkType.WeaponFocusBlasterPistols; break;

            case CustomItemType.BlasterRifle: perkType = PerkType.WeaponFocusBlasterRifles; break;

            case CustomItemType.Throwing: perkType = PerkType.WeaponFocusThrowing; break;

            case CustomItemType.Lightsaber: perkType = PerkType.WeaponFocusLightsaber; break;

            case CustomItemType.Saberstaff: perkType = PerkType.WeaponFocusSaberstaff; break;

            default: return;
            }

            if (equipped.GetLocalInt("LIGHTSABER") == TRUE)
            {
                perkType = PerkType.WeaponFocusLightsaber;
            }

            int perkLevel = PerkService.GetCreaturePerkLevel(creature, perkType);
            int type      = equipped.BaseItemType;

            if (perkLevel >= 1)
            {
                AddFocusFeat(creature, type);
            }
            if (perkLevel >= 2)
            {
                AddSpecializationFeat(creature, type);
            }
        }