Exemplo n.º 1
0
        private void FinishActionItem(IActionItem actionItem, NWPlayer user, NWItem item, NWObject target, Location targetLocation, Vector userStartPosition, CustomData customData)
        {
            user.IsBusy = false;

            Vector userPosition = user.Position;

            if (userPosition.m_X != userStartPosition.m_X ||
                userPosition.m_Y != userStartPosition.m_Y ||
                userPosition.m_Z != userStartPosition.m_Z)
            {
                user.SendMessage("You move and interrupt your action.");
                return;
            }

            if (actionItem.MaxDistance() > 0.0f)
            {
                if (_.GetDistanceBetween(user.Object, target.Object) > actionItem.MaxDistance() ||
                    user.Area.Resref != target.Area.Resref)
                {
                    user.SendMessage("Your target is too far away.");
                    return;
                }
            }

            if (!target.IsValid && !actionItem.AllowLocationTarget())
            {
                user.SendMessage("Unable to locate target.");
                return;
            }

            string invalidTargetMessage = actionItem.IsValidTarget(user, item, target, targetLocation);

            if (!string.IsNullOrWhiteSpace(invalidTargetMessage))
            {
                user.SendMessage(invalidTargetMessage);
                return;
            }

            actionItem.ApplyEffects(user, item, target, targetLocation, customData);

            if (actionItem.ReducesItemCharge(user, item, target, targetLocation, customData))
            {
                if (item.Charges > 0)
                {
                    item.ReduceCharges();
                }
                else
                {
                    item.Destroy();
                }
            }
        }
Exemplo n.º 2
0
        public void OnModuleHeartbeat()
        {
            NWModule module = NWModule.Get();

            foreach (NWPlayer pc in module.Players)
            {
                NWItem offHand = pc.LeftHand;
                if (offHand.BaseItemType == BASE_ITEM_TORCH)
                {
                    int charges = offHand.ReduceCharges();
                    if (charges <= 0)
                    {
                        offHand.Destroy();
                        pc.SendMessage("Your torch has burned out.");
                    }
                }
            }
        }
Exemplo n.º 3
0
        private void DigAHole()
        {
            PlayerCharacter pcEntity       = _player.GetPlayerEntity(GetPC());
            NWItem          shovel         = NWItem.Wrap(GetPC().GetLocalObject("SHOVEL_ITEM"));
            Location        targetLocation = GetPC().GetLocalLocation("SHOVEL_TARGET_LOCATION");

            // Farmers get a 5% chance to not expend a charge.
            Random random = new Random();

            if (pcEntity.BackgroundID != (int)BackgroundType.Farmer || random.Next(0, 100) > 5)
            {
                shovel.ReduceCharges();
            }

            _.CreateObject(OBJECT_TYPE_PLACEABLE, "farm_small_hole", targetLocation);
            _.FloatingTextStringOnCreature("You dig a hole.", GetPC().Object, FALSE);
            _skill.GiveSkillXP(GetPC(), SkillType.Farming, 50);
            EndConversation();
        }
Exemplo n.º 4
0
        public void HarvestPlant(NWPlayer player, NWItem shovel, NWPlaceable plant)
        {
            int growingPlantID = plant.GetLocalInt("GROWING_PLANT_ID");

            if (growingPlantID <= 0)
            {
                return;
            }

            int charges = shovel.Charges;

            if (charges <= 0)
            {
                player.SendMessage("Your shovel is broken.");
                return;
            }

            GrowingPlant growingPlant = _db.GrowingPlants.Single(x => x.GrowingPlantID == growingPlantID);
            Plant        plantEntity  = growingPlant.Plant;

            if (string.IsNullOrWhiteSpace(plantEntity.SeedResref))
            {
                player.SendMessage("That plant cannot be harvested.");
                return;
            }

            PlayerCharacter pcEntity = _db.PlayerCharacters.Single(x => x.PlayerID == player.GlobalID);

            // Farmers get a 5% chance to not expend a charge.
            if (pcEntity.BackgroundID != (int)BackgroundType.Farmer || _random.Random(100) + 1 > 5)
            {
                shovel.ReduceCharges();
            }

            growingPlant.IsActive = false;
            _db.SaveChanges();

            _.CreateItemOnObject(plantEntity.SeedResref, player.Object);
            plant.Destroy();

            player.FloatingText("You harvest the plant.");
        }
Exemplo n.º 5
0
        public void OnModuleEquipItem()
        {
            using (new Profiler("ItemService::OnModuleEquipItem()"))
            {
                int[] validItemTypes =
                {
                    BASE_ITEM_ARMOR,
                    BASE_ITEM_ARROW,
                    BASE_ITEM_BASTARDSWORD,
                    BASE_ITEM_BATTLEAXE,
                    BASE_ITEM_BELT,
                    BASE_ITEM_BOLT,
                    BASE_ITEM_BOOTS,
                    BASE_ITEM_BRACER,
                    BASE_ITEM_BULLET,
                    BASE_ITEM_CLOAK,
                    BASE_ITEM_CLUB,
                    BASE_ITEM_DAGGER,
                    BASE_ITEM_DART,
                    BASE_ITEM_DIREMACE,
                    BASE_ITEM_DOUBLEAXE,
                    BASE_ITEM_DWARVENWARAXE,
                    BASE_ITEM_GLOVES,
                    BASE_ITEM_GREATAXE,
                    BASE_ITEM_GREATSWORD,
                    BASE_ITEM_GRENADE,
                    BASE_ITEM_HALBERD,
                    BASE_ITEM_HANDAXE,
                    BASE_ITEM_HEAVYCROSSBOW,
                    BASE_ITEM_HEAVYFLAIL,
                    BASE_ITEM_HELMET,
                    BASE_ITEM_KAMA,
                    BASE_ITEM_KATANA,
                    BASE_ITEM_KUKRI,
                    BASE_ITEM_LARGESHIELD,
                    BASE_ITEM_LIGHTCROSSBOW,
                    BASE_ITEM_LIGHTFLAIL,
                    BASE_ITEM_LIGHTHAMMER,
                    BASE_ITEM_LIGHTMACE,
                    BASE_ITEM_LONGBOW,
                    BASE_ITEM_LONGSWORD,
                    BASE_ITEM_MORNINGSTAR,
                    BASE_ITEM_QUARTERSTAFF,
                    BASE_ITEM_RAPIER,
                    BASE_ITEM_SCIMITAR,
                    BASE_ITEM_SCYTHE,
                    BASE_ITEM_SHORTBOW,
                    BASE_ITEM_SHORTSPEAR,
                    BASE_ITEM_SHORTSWORD,
                    BASE_ITEM_SHURIKEN,
                    BASE_ITEM_SICKLE,
                    BASE_ITEM_SLING,
                    BASE_ITEM_SMALLSHIELD,
                    BASE_ITEM_THROWINGAXE,
                    BASE_ITEM_TOWERSHIELD,
                    BASE_ITEM_TRIDENT,
                    BASE_ITEM_TWOBLADEDSWORD,
                    BASE_ITEM_WARHAMMER,
                    BASE_ITEM_WHIP,
                    CustomBaseItemType.Saberstaff,
                    CustomBaseItemType.Lightsaber
                };

                NWPlayer player       = _.GetPCItemLastEquippedBy();
                NWItem   oItem        = (_.GetPCItemLastEquipped());
                int      baseItemType = oItem.BaseItemType;

                // Handle lightsaber sounds
                if (oItem.CustomItemType == CustomItemType.Lightsaber ||
                    oItem.CustomItemType == CustomItemType.Saberstaff)
                {
                    player.AssignCommand(() =>
                    {
                        _.PlaySound("saberon");
                    });
                }

                if (!validItemTypes.Contains(baseItemType))
                {
                    return;
                }

                AddOnHitProperty(oItem);

                // Check ammo every time
                if (player.Arrows.IsValid)
                {
                    AddOnHitProperty(player.Arrows);
                    player.Arrows.RecommendedLevel = oItem.RecommendedLevel;
                }

                if (player.Bolts.IsValid)
                {
                    AddOnHitProperty(player.Bolts);
                    player.Bolts.RecommendedLevel = oItem.RecommendedLevel;
                }

                if (player.Bullets.IsValid)
                {
                    AddOnHitProperty(player.Bullets);
                    player.Bullets.RecommendedLevel = oItem.RecommendedLevel;
                }


                if (baseItemType == BASE_ITEM_TORCH)
                {
                    int charges = oItem.ReduceCharges();
                    if (charges <= 0)
                    {
                        oItem.Destroy();
                    }
                }
            }
        }
Exemplo n.º 6
0
        private static void OnModuleEquipItem()
        {
            int[] validItemTypes =
            {
                BASE_ITEM_ARMOR,
                BASE_ITEM_ARROW,
                BASE_ITEM_BASTARDSWORD,
                BASE_ITEM_BATTLEAXE,
                BASE_ITEM_BELT,
                BASE_ITEM_BOLT,
                BASE_ITEM_BOOTS,
                BASE_ITEM_BRACER,
                BASE_ITEM_BULLET,
                BASE_ITEM_CLOAK,
                BASE_ITEM_CLUB,
                BASE_ITEM_DAGGER,
                BASE_ITEM_DART,
                BASE_ITEM_DIREMACE,
                BASE_ITEM_DOUBLEAXE,
                BASE_ITEM_DWARVENWARAXE,
                BASE_ITEM_GLOVES,
                BASE_ITEM_GREATAXE,
                BASE_ITEM_GREATSWORD,
                BASE_ITEM_GRENADE,
                BASE_ITEM_HALBERD,
                BASE_ITEM_HANDAXE,
                BASE_ITEM_HEAVYCROSSBOW,
                BASE_ITEM_HEAVYFLAIL,
                BASE_ITEM_HELMET,
                BASE_ITEM_KAMA,
                BASE_ITEM_KATANA,
                BASE_ITEM_KUKRI,
                BASE_ITEM_LARGESHIELD,
                BASE_ITEM_LIGHTCROSSBOW,
                BASE_ITEM_LIGHTFLAIL,
                BASE_ITEM_LIGHTHAMMER,
                BASE_ITEM_LIGHTMACE,
                BASE_ITEM_LONGBOW,
                BASE_ITEM_LONGSWORD,
                BASE_ITEM_MORNINGSTAR,
                BASE_ITEM_QUARTERSTAFF,
                BASE_ITEM_RAPIER,
                BASE_ITEM_SCIMITAR,
                BASE_ITEM_SCYTHE,
                BASE_ITEM_SHORTBOW,
                BASE_ITEM_SHORTSPEAR,
                BASE_ITEM_SHORTSWORD,
                BASE_ITEM_SHURIKEN,
                BASE_ITEM_SICKLE,
                BASE_ITEM_SLING,
                BASE_ITEM_SMALLSHIELD,
                BASE_ITEM_THROWINGAXE,
                BASE_ITEM_TOWERSHIELD,
                BASE_ITEM_TRIDENT,
                BASE_ITEM_TWOBLADEDSWORD,
                BASE_ITEM_WARHAMMER,
                BASE_ITEM_WHIP,
                CustomBaseItemType.Saberstaff,
                CustomBaseItemType.Lightsaber
            };

            NWPlayer player = _.GetPCItemLastEquippedBy();

            if (player.GetLocalInt("IS_CUSTOMIZING_ITEM") == _.TRUE)
            {
                return;                                                      // Don't run heavy code when customizing equipment.
            }
            NWItem oItem        = (_.GetPCItemLastEquipped());
            int    baseItemType = oItem.BaseItemType;
            Effect eEffect      = _.EffectVisualEffect(579);

            eEffect = _.TagEffect(eEffect, "LIGHTSABER_HUM");

            // Handle lightsaber sounds
            if (oItem.CustomItemType == CustomItemType.Lightsaber ||
                oItem.CustomItemType == CustomItemType.Saberstaff)
            {
                _.ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, player);
                player.AssignCommand(() =>
                {
                    _.PlaySound("saberon");
                });
            }

            if (!validItemTypes.Contains(baseItemType))
            {
                HandleEquipmentSwappingDelay();
                return;
            }

            AddOnHitProperty(oItem);

            // Check ammo every time
            if (player.Arrows.IsValid)
            {
                AddOnHitProperty(player.Arrows);
                player.Arrows.RecommendedLevel = oItem.RecommendedLevel;
            }

            if (player.Bolts.IsValid)
            {
                AddOnHitProperty(player.Bolts);
                player.Bolts.RecommendedLevel = oItem.RecommendedLevel;
            }

            if (player.Bullets.IsValid)
            {
                AddOnHitProperty(player.Bullets);
                player.Bullets.RecommendedLevel = oItem.RecommendedLevel;
            }


            if (baseItemType == BASE_ITEM_TORCH)
            {
                int charges = oItem.ReduceCharges();
                if (charges <= 0)
                {
                    oItem.Destroy();
                }
            }

            HandleEquipmentSwappingDelay();
        }
Exemplo n.º 7
0
        private static void OnModuleEquipItem()
        {
            BaseItem[] validItemTypes =
            {
                BaseItem.Armor,
                BaseItem.Arrow,
                BaseItem.BastardSword,
                BaseItem.BattleAxe,
                BaseItem.Belt,
                BaseItem.Bolt,
                BaseItem.Boots,
                BaseItem.Bracer,
                BaseItem.Bullet,
                BaseItem.Cloak,
                BaseItem.Club,
                BaseItem.Dagger,
                BaseItem.Dart,
                BaseItem.DireMace,
                BaseItem.DoubleAxe,
                BaseItem.DwarvenWarAxe,
                BaseItem.Gloves,
                BaseItem.GreatAxe,
                BaseItem.GreatSword,
                BaseItem.Grenade,
                BaseItem.Halberd,
                BaseItem.HandAxe,
                BaseItem.HeavyCrossbow,
                BaseItem.HeavyFlail,
                BaseItem.Helmet,
                BaseItem.Kama,
                BaseItem.Katana,
                BaseItem.Kukri,
                BaseItem.LargeShield,
                BaseItem.LightCrossbow,
                BaseItem.LightFlail,
                BaseItem.LightHammer,
                BaseItem.LightMace,
                BaseItem.Longbow,
                BaseItem.Longsword,
                BaseItem.MorningStar,
                BaseItem.QuarterStaff,
                BaseItem.Rapier,
                BaseItem.Scimitar,
                BaseItem.Scythe,
                BaseItem.ShortBow,
                BaseItem.ShortSpear,
                BaseItem.ShortSword,
                BaseItem.Shuriken,
                BaseItem.Sickle,
                BaseItem.Sling,
                BaseItem.SmallShield,
                BaseItem.ThrowingAxe,
                BaseItem.TowerShield,
                BaseItem.Trident,
                BaseItem.TwoBladedSword,
                BaseItem.WarHammer,
                BaseItem.Whip,
                BaseItem.Saberstaff,
                BaseItem.Lightsaber
            };

            NWPlayer player = GetPCItemLastEquippedBy();

            if (GetLocalBool(player, "IS_CUSTOMIZING_ITEM") == true)
            {
                return;                                                      // Don't run heavy code when customizing equipment.
            }
            NWItem oItem        = (GetPCItemLastEquipped());
            var    baseItemType = oItem.BaseItemType;
            Effect eEffect      = EffectVisualEffect(VisualEffect.LightsaberHum);

            eEffect = TagEffect(eEffect, "LIGHTSABER_HUM");

            // Handle lightsaber sounds
            if (oItem.CustomItemType == CustomItemType.Lightsaber ||
                oItem.CustomItemType == CustomItemType.Saberstaff)
            {
                ApplyEffectToObject(DurationType.Permanent, eEffect, player);
                player.AssignCommand(() =>
                {
                    PlaySound("saberon");
                });
            }

            if (!validItemTypes.Contains(baseItemType))
            {
                HandleEquipmentSwappingDelay();
                return;
            }

            AddOnHitProperty(oItem);

            // Check ammo every time
            if (player.Arrows.IsValid)
            {
                AddOnHitProperty(player.Arrows);
                player.Arrows.RecommendedLevel = oItem.RecommendedLevel;
            }

            if (player.Bolts.IsValid)
            {
                AddOnHitProperty(player.Bolts);
                player.Bolts.RecommendedLevel = oItem.RecommendedLevel;
            }

            if (player.Bullets.IsValid)
            {
                AddOnHitProperty(player.Bullets);
                player.Bullets.RecommendedLevel = oItem.RecommendedLevel;
            }


            if (baseItemType == BaseItem.Torch)
            {
                int charges = oItem.ReduceCharges();
                if (charges <= 0)
                {
                    oItem.Destroy();
                }
            }

            HandleEquipmentSwappingDelay();
        }
Exemplo n.º 8
0
        public void OnModuleEquipItem()
        {
            int[] validItemTypes =
            {
                BASE_ITEM_ARMOR,
                BASE_ITEM_ARROW,
                BASE_ITEM_BASTARDSWORD,
                BASE_ITEM_BATTLEAXE,
                BASE_ITEM_BELT,
                BASE_ITEM_BOLT,
                BASE_ITEM_BOOTS,
                BASE_ITEM_BRACER,
                BASE_ITEM_BULLET,
                BASE_ITEM_CLOAK,
                BASE_ITEM_CLUB,
                BASE_ITEM_DAGGER,
                BASE_ITEM_DART,
                BASE_ITEM_DIREMACE,
                BASE_ITEM_DOUBLEAXE,
                BASE_ITEM_DWARVENWARAXE,
                BASE_ITEM_GLOVES,
                BASE_ITEM_GREATAXE,
                BASE_ITEM_GREATSWORD,
                BASE_ITEM_GRENADE,
                BASE_ITEM_HALBERD,
                BASE_ITEM_HANDAXE,
                BASE_ITEM_HEAVYCROSSBOW,
                BASE_ITEM_HEAVYFLAIL,
                BASE_ITEM_HELMET,
                BASE_ITEM_KAMA,
                BASE_ITEM_KATANA,
                BASE_ITEM_KUKRI,
                BASE_ITEM_LARGESHIELD,
                BASE_ITEM_LIGHTCROSSBOW,
                BASE_ITEM_LIGHTFLAIL,
                BASE_ITEM_LIGHTHAMMER,
                BASE_ITEM_LIGHTMACE,
                BASE_ITEM_LONGBOW,
                BASE_ITEM_LONGSWORD,
                BASE_ITEM_MORNINGSTAR,
                BASE_ITEM_QUARTERSTAFF,
                BASE_ITEM_RAPIER,
                BASE_ITEM_SCIMITAR,
                BASE_ITEM_SCYTHE,
                BASE_ITEM_SHORTBOW,
                BASE_ITEM_SHORTSPEAR,
                BASE_ITEM_SHORTSWORD,
                BASE_ITEM_SHURIKEN,
                BASE_ITEM_SICKLE,
                BASE_ITEM_SLING,
                BASE_ITEM_SMALLSHIELD,
                BASE_ITEM_THROWINGAXE,
                BASE_ITEM_TOWERSHIELD,
                BASE_ITEM_TRIDENT,
                BASE_ITEM_TWOBLADEDSWORD,
                BASE_ITEM_WARHAMMER,
                BASE_ITEM_WHIP
            };

            NWItem oItem        = NWItem.Wrap(_.GetPCItemLastEquipped());
            int    baseItemType = oItem.BaseItemType;

            if (!validItemTypes.Contains(baseItemType))
            {
                return;
            }

            foreach (ItemProperty ip in oItem.ItemProperties)
            {
                if (_.GetItemPropertyType(ip) == ITEM_PROPERTY_ONHITCASTSPELL)
                {
                    if (_.GetItemPropertySubType(ip) == IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER)
                    {
                        return;
                    }
                }
            }

            // No item property found. Add it to the item.
            _xp2.IPSafeAddItemProperty(oItem, _.ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 40), 0.0f, AddItemPropertyPolicy.ReplaceExisting, false, false);

            if (baseItemType == BASE_ITEM_TORCH)
            {
                int charges = oItem.ReduceCharges();
                if (charges <= 0)
                {
                    oItem.Destroy();
                }
            }
        }