public static void AddMastery(GameSession session, FishMetadata fish, bool newFish) { if (newFish) { int exp = fish.Rarity * 2; session.Player.Levels.GainMasteryExp(MasteryType.Fishing, exp); session.Send(FishingPacket.IncreaseMastery(MasteryType.Fishing, fish.Id, exp)); return; } int expChance; Random rnd = Random.Shared; MasteryExp masteryExp = session.Player.Levels.MasteryExp.FirstOrDefault(x => x.Type == MasteryType.Fishing); FishingSpotMetadata fishingSpot = FishingSpotMetadataStorage.GetMetadata(session.Player.MapId); if (masteryExp.CurrentExp > fishingSpot.MaxMastery) { expChance = rnd.Next(0, 200); // decrease chance of gaining mastery by half } else { expChance = rnd.Next(0, 100); } if (expChance <= 10) { int exp = rnd.Next(1, 3); session.Player.Levels.GainMasteryExp(MasteryType.Fishing, exp); session.Send(FishingPacket.IncreaseMastery(MasteryType.Fishing, fish.Id, exp)); } }
public static void AddNewFish(GameSession session, FishMetadata fish, int size) { session.Player.FishAlbum[fish.Id] = new() { FishId = fish.Id, TotalCaught = 1, LargestFish = size }; AddMastery(session, fish, true); if (size >= fish.BigSize[0]) { session.Player.FishAlbum[fish.Id].LargestFish = size; } }
public static void AddExistingFish(GameSession session, FishMetadata fish, int size) { session.Player.FishAlbum[fish.Id].TotalCaught += 1; if (size > session.Player.FishAlbum[fish.Id].LargestFish) { session.Player.FishAlbum[fish.Id].LargestFish = size; } AddMastery(session, fish, false); if (size >= fish.BigSize[0]) { session.Player.FishAlbum[fish.Id].LargestFish = size; } }
private static void HandleCatch(GameSession session, PacketReader packet) { bool success = packet.ReadBool(); CoordF guideBlock = Block.ClosestBlock(session.Player.Guide.Coord); guideBlock.Z -= Block.BLOCK_SIZE; // get liquid block coord MapBlock block = MapMetadataStorage.GetMapBlock(session.Player.MapId, guideBlock.ToShort()); List <FishMetadata> fishes = FishMetadataStorage.GetValidFishes(session.Player.MapId, block.Attribute); //determine fish rarity List <FishMetadata> selectedFishRarities = FilterFishesByRarity(fishes); Random rnd = RandomProvider.Get(); int randomFishIndex = rnd.Next(selectedFishRarities.Count); FishMetadata fish = selectedFishRarities[randomFishIndex]; //determine fish size int fishSize = rnd.NextDouble() switch {
public static Packet CatchFish(Player player, FishMetadata fish, int fishSize, bool success) { PacketWriter pWriter = PacketWriter.Of(SendOp.FISHING); pWriter.WriteEnum(FishingPacketMode.CatchFish); pWriter.WriteInt(fish.Id); pWriter.WriteInt(fishSize); pWriter.WriteBool(success); pWriter.WriteByte(); if (success) { pWriter.WriteInt(fish.Id); pWriter.WriteInt(player.FishAlbum[fish.Id].TotalCaught); pWriter.WriteInt(player.FishAlbum[fish.Id].TotalPrizeFish); pWriter.WriteInt(player.FishAlbum[fish.Id].LargestFish); } return(pWriter); }