public override Type MutateType(Type type, Mobile from, Item tool, HarvestDefinition def, Map map, Point3D loc, HarvestResource resource) { if (FishInfo.IsRareFish(type)) { return(type); } bool deepWater = IsDeepWater(loc, map); bool junkproof = HasTypeHook(tool, HookType.JunkProof); double skillBase = from.Skills[SkillName.Fishing].Base; double skillValue = from.Skills[SkillName.Fishing].Value; MutateEntry[] table = Siege.SiegeShard ? m_SiegeMutateTable : m_MutateTable; for (int i = 0; i < table.Length; ++i) { MutateEntry entry = m_MutateTable[i]; // RedHerring / MudPuppy if (i == 6 && (from.Region == null || !from.Region.IsPartOf("Underworld"))) { continue; } if (junkproof && i == 5 && 0.80 >= Utility.RandomDouble()) { continue; } if (!deepWater && entry.m_DeepWater) { continue; } if (skillBase >= entry.m_ReqSkill) { double chance = (skillValue - entry.m_MinSkill) / (entry.m_MaxSkill - entry.m_MinSkill); if (chance > Utility.RandomDouble()) { return(entry.m_Types[Utility.Random(entry.m_Types.Length)]); } } } return(type); }
public override void SendSuccessTo(Mobile from, Item item, HarvestResource resource) { if (item is BigFish) { from.SendLocalizedMessage(1042635); // Your fishing pole bends as you pull a big fish from the depths! ((BigFish)item).Fisher = from; ((BigFish)item).DateCaught = DateTime.Now; } #region Stygian Abyss else if (item is RedHerring) { from.SendLocalizedMessage(1095047, null, 0x23); // You take the Red Herring and put it into your pack. The only thing more surprising than the fact that there is a fish called the Red Herring is the fact that you fished for it! } else if (item is MudPuppy) { from.SendLocalizedMessage(1095064, null, 0x23); // You take the Mud Puppy and put it into your pack. Not surprisingly, it is very muddy. } #endregion else if (item is WoodenChest || item is MetalGoldenChest) { from.SendLocalizedMessage(503175); // You pull up a heavy chest from the depths of the ocean! } else { int number; string name; if (item is BaseMagicFish) { number = 1008124; name = "a mess of small fish"; } else if (item is Fish) { number = 1008124; name = item.ItemData.Name; } else if (item is BaseShoes) { number = 1008124; name = item.ItemData.Name; } else if (item is TreasureMap) { number = 1008125; name = "a sodden piece of parchment"; } else if (item is MessageInABottle) { number = 1008125; name = "a bottle, with a message in it"; } else if (item is SpecialFishingNet) { number = 1008125; name = "a special fishing net"; // TODO: this is just a guess--what should it really be named? } else if (item is BaseHighseasFish) { if (FishInfo.IsRareFish(item.GetType())) { from.SendLocalizedMessage(1043297, "a rare fish"); } else if (item.LabelNumber < 1) { from.SendLocalizedMessage(1043297, "a fish"); } else { from.SendLocalizedMessage(1043297, String.Format("#{0}", item.LabelNumber)); } return; } else if (item.LabelNumber > 0) { from.SendLocalizedMessage(1043297, String.Format("#{0}", item.LabelNumber)); return; } else { number = 1043297; if ((item.ItemData.Flags & TileFlag.ArticleA) != 0) { name = "a " + item.ItemData.Name; } else if ((item.ItemData.Flags & TileFlag.ArticleAn) != 0) { name = "an " + item.ItemData.Name; } else { name = item.ItemData.Name; } } from.SendLocalizedMessage(number, name); } }
public override bool Give(Mobile m, Item item, bool placeAtFeet) { if (item is TreasureMap || item is MessageInABottle || item is SpecialFishingNet) { BaseCreature serp; if (0.25 > Utility.RandomDouble()) { serp = new DeepSeaSerpent(); } else { serp = new SeaSerpent(); } int x = m.X, y = m.Y; Map map = m.Map; for (int i = 0; map != null && i < 20; ++i) { int tx = m.X - 10 + Utility.Random(21); int ty = m.Y - 10 + Utility.Random(21); LandTile t = map.Tiles.GetLandTile(tx, ty); if (t.Z == -5 && ((t.ID >= 0xA8 && t.ID <= 0xAB) || (t.ID >= 0x136 && t.ID <= 0x137)) && !Spells.SpellHelper.CheckMulti(new Point3D(tx, ty, -5), map)) { x = tx; y = ty; break; } } serp.MoveToWorld(new Point3D(x, y, -5), map); serp.Home = serp.Location; serp.RangeHome = 10; serp.PackItem(item); m.SendLocalizedMessage(503170); // Uh oh! That doesn't look like a fish! return(true); // we don't want to give the item to the player, it's on the serpent } if (item is BigFish || item is LockableContainer) { placeAtFeet = true; } #region High Seas if (item is RareFish) { RareFish fish = (RareFish)item; if (FishInfo.IsRareFish(fish.GetType())) { fish.Fisher = m; fish.DateCaught = DateTime.Now; fish.Stackable = false; fish.Weight = Math.Max(1, 200 - (int)Math.Sqrt(Utility.RandomMinMax(0, 40000))); } } #endregion return(base.Give(m, item, placeAtFeet)); }