public void FinalizeDataHolder() { List <FishingSpot> fishingSpotList = new List <FishingSpot>(); Asda2FishingMgr.FishingSpotsByMaps.Add(this.Id, fishingSpotList); for (int index1 = 0; index1 < 10; ++index1) { if (this.RequiredFishingLvls[index1] != -1) { FishingSpot fishingSpot = new FishingSpot(); fishingSpot.RequiredFishingLevel = this.RequiredFishingLvls[index1]; fishingSpot.Map = (MapId)this.Id; fishingSpot.Position = new Vector3((float)this.Points[index1], (float)this.Points[index1 + 10], 0.0f); fishingSpot.Radius = (byte)this.Radius[index1]; fishingSpot.Fishes = new Dictionary <int, Fish>(); FishingBaseInfoRecord fishingBaseInfo = Asda2FishingMgr.FishingBaseInfos[this.DataKey[index1]]; int key1 = 0; for (int index2 = 0; index2 < 20; ++index2) { if (fishingBaseInfo.Chances[index2] != 0) { key1 += fishingBaseInfo.Chances[index2]; Fish fish = new Fish(); fish.ItemTemplate = Asda2ItemMgr.GetTemplate(fishingBaseInfo.ItemIds[index2]) ?? Asda2ItemMgr.GetTemplate(31725); fish.BaitIds = new List <int>(); FishingFishInfoRecord fishRecord = Asda2FishingMgr.FishRecords[fishingBaseInfo.ItemIds[index2]]; fish.FishingTime = fishRecord.FishingTime; for (int index3 = 0; index3 < 6; ++index3) { if (fishRecord.BaitIds[index3] != -1) { fish.BaitIds.Add(fishRecord.BaitIds[index3]); } } fish.MinLength = (byte)fishingBaseInfo.MinFishLengths[index2]; fish.MaxLength = (byte)fishingBaseInfo.MaxFishLenghts[index2]; fishingSpot.Fishes.Add(key1, fish); } } fishingSpot.PremiumFishes = new Dictionary <int, Fish>(); FishingBaseInfoRecord premiumFishingBaseInfo = Asda2FishingMgr.PremiumFishingBaseInfos[this.DataKey[index1]]; int key2 = 0; for (int index2 = 0; index2 < 20; ++index2) { if (premiumFishingBaseInfo.Chances[index2] != 0) { key2 += premiumFishingBaseInfo.Chances[index2]; Fish fish = new Fish(); fish.ItemTemplate = Asda2ItemMgr.GetTemplate(premiumFishingBaseInfo.ItemIds[index2]) ?? Asda2ItemMgr.GetTemplate(31725); fish.BaitIds = new List <int>(); FishingFishInfoRecord fishRecord = Asda2FishingMgr.FishRecords[premiumFishingBaseInfo.ItemIds[index2]]; fish.FishingTime = fishRecord.FishingTime; for (int index3 = 0; index3 < 6; ++index3) { if (fishRecord.BaitIds[index3] != -1) { fish.BaitIds.Add(fishRecord.BaitIds[index3]); } } fish.MinLength = (byte)premiumFishingBaseInfo.MinFishLengths[index2]; fish.MaxLength = (byte)premiumFishingBaseInfo.MaxFishLenghts[index2]; fishingSpot.PremiumFishes.Add(key2, fish); } } fishingSpotList.Add(fishingSpot); } } }
[PacketHandler(RealmServerOpCode.EndFishing)]//6171 public static void EndFishingRequest(IRealmClient client, RealmPacketIn packet) { if (client.ActiveCharacter.CurrentFish == null) { SendFishingEndedResponse(client, Asda2EndFishingStatus.YouAlreadyFishing, 0); return; } var ft = client.ActiveCharacter.CurrentFish; client.ActiveCharacter.CurrentFish = null; if (client.ActiveCharacter.FishReadyTime > (uint)Environment.TickCount) { SendFishingEndedResponse(client, Asda2EndFishingStatus.YouAlreadyFishing, 0); return; } if (client.ActiveCharacter.Asda2Inventory.Equipment[9] == null || !client.ActiveCharacter.Asda2Inventory.Equipment[9].IsRod) { client.ActiveCharacter.YouAreFuckingCheater("Trying to fishing without rod.", 30); SendFishingStartedResponse(client, Asda2StartFishStatus.YouHaveNoFishRod); return; } if (client.ActiveCharacter.Asda2Inventory.Equipment[10] == null || !client.ActiveCharacter.Asda2Inventory.Equipment[10].Template.IsBait) { client.ActiveCharacter.YouAreFuckingCheater("Trying to fishing without bait.", 30); SendFishingStartedResponse(client, Asda2StartFishStatus.YouHaveNoBait); return; } var rod = client.ActiveCharacter.Asda2Inventory.Equipment[9]; if (rod.Category != Asda2ItemCategory.PremiumFishRod && CharacterFormulas.DecraseRodDurability()) { rod.DecreaseDurability(1); } var bait = client.ActiveCharacter.Asda2Inventory.Equipment[10]; bait.ModAmount(-1); if (bait.Category != Asda2ItemCategory.BaitElite && !ft.BaitIds.Contains(bait.ItemId)) { SendFishingEndedResponse(client, Asda2EndFishingStatus.Ok, 0, bait); return; } FishingSpot spot = null; foreach (var fishingSpot in Asda2FishingMgr.FishingSpotsByMaps[(int)client.ActiveCharacter.MapId]) { if (client.ActiveCharacter.Asda2Position.GetDistance(fishingSpot.Position) > fishingSpot.Radius / 2) { continue; } spot = fishingSpot; break; } if (spot == null) { client.ActiveCharacter.YouAreFuckingCheater("Trying to fishing in wrong place.", 30); SendFishingStartedResponse(client, Asda2StartFishStatus.YouCantFishHere); return; } if (client.ActiveCharacter.FishingLevel < spot.RequiredFishingLevel) { SendFishingStartedResponse(client, Asda2StartFishStatus.YourFishingLevelIsToLowToFishHereItMustBe, 0, (uint)spot.RequiredFishingLevel); return; } if (client.ActiveCharacter.Asda2Inventory.FreeRegularSlotsCount < 1) { SendFishingStartedResponse(client, Asda2StartFishStatus.NotEnoughtSpace); return; } var success = CharacterFormulas.CalcFishingSuccess(client.ActiveCharacter.FishingLevel, spot.RequiredFishingLevel, client.ActiveCharacter.Asda2Luck); if (!success) { SendFishingEndedResponse(client, Asda2EndFishingStatus.Ok, 0, bait, null); return; } var fishSize = (short) Util.Utility.Random(ft.MinLength, ft.MaxLength); fishSize = (short)(fishSize + fishSize * client.ActiveCharacter.GetIntMod(StatModifierInt.Asda2FishingGauge) / 100 * (client.ActiveCharacter.GodMode ? 10 : 1)); if (CharacterFormulas.CalcFishingLevelRised(client.ActiveCharacter.FishingLevel) && client.ActiveCharacter.Record.FishingLevel < spot.RequiredFishingLevel + 80) { client.ActiveCharacter.Record.FishingLevel++; } client.ActiveCharacter.GuildPoints += CharacterFormulas.FishingGuildPoints; Asda2Item item = null; var err = client.ActiveCharacter.Asda2Inventory.TryAdd((int)ft.ItemTemplate.ItemId, 1, true, ref item); var resLog = Log.Create(Log.Types.ItemOperations, LogSourceType.Character, client.ActiveCharacter.EntryId) .AddAttribute("source", 0, "fishing") .AddItemAttributes(item) .Write(); client.ActiveCharacter.Map.AddMessage(() => { if (err != Asda2InventoryError.Ok) { SendFishingEndedResponse(client, Asda2EndFishingStatus.NoSpace, 0, bait, null); return; } foreach (var registeredFishingBook in client.ActiveCharacter.RegisteredFishingBooks.Values) { registeredFishingBook.OnCatchFish(item.ItemId, fishSize); } client.ActiveCharacter.GainXp( CharacterFormulas.CalcExpForFishing(client.ActiveCharacter.Level, client.ActiveCharacter.FishingLevel, item.Template.Quality, spot.RequiredFishingLevel, fishSize), "fishing"); SendFishingEndedResponse(client, Asda2EndFishingStatus.Ok, fishSize, bait, item); SendSomeOneStartedFishingResponse(client.ActiveCharacter, (int)ft.ItemTemplate.Id, fishSize); Asda2TitleChecker.OnSuccessFishing(client.ActiveCharacter, (int)ft.ItemTemplate.Id, fishSize); }); }
[PacketHandler(RealmServerOpCode.StartFishing)]//6167 public static void StartFishingRequest(IRealmClient client, RealmPacketIn packet) { var interator = packet.ReadInt16();//default : 5Len : 2 if (client.ActiveCharacter.Asda2Inventory.Equipment[9] == null || !client.ActiveCharacter.Asda2Inventory.Equipment[9].IsRod) { client.ActiveCharacter.YouAreFuckingCheater("Trying to fishing without rod.", 30); SendFishingStartedResponse(client, Asda2StartFishStatus.YouHaveNoFishRod); return; } if (client.ActiveCharacter.Asda2Inventory.Equipment[10] == null || !client.ActiveCharacter.Asda2Inventory.Equipment[10].Template.IsBait) { client.ActiveCharacter.YouAreFuckingCheater("Trying to fishing without bait.", 30); SendFishingStartedResponse(client, Asda2StartFishStatus.YouHaveNoBait); return; } if (!Asda2FishingMgr.FishingSpotsByMaps.ContainsKey((int)client.ActiveCharacter.MapId)) { client.ActiveCharacter.YouAreFuckingCheater("Trying to fishing in wrong place.", 30); SendFishingStartedResponse(client, Asda2StartFishStatus.YouCantFishHere); return; } FishingSpot spot = null; foreach (var fishingSpot in Asda2FishingMgr.FishingSpotsByMaps[(int)client.ActiveCharacter.MapId]) { if (client.ActiveCharacter.Asda2Position.GetDistance(fishingSpot.Position) > fishingSpot.Radius) { continue; } spot = fishingSpot; break; } if (spot == null) { SendFishingStartedResponse(client, Asda2StartFishStatus.YouCantFishHere); return; } if (client.ActiveCharacter.FishingLevel < spot.RequiredFishingLevel) { SendFishingStartedResponse(client, Asda2StartFishStatus.YourFishingLevelIsToLowToFishHereItMustBe, 0, (uint)spot.RequiredFishingLevel); return; } if (client.ActiveCharacter.Asda2Inventory.FreeRegularSlotsCount < 1) { SendFishingStartedResponse(client, Asda2StartFishStatus.NotEnoughtSpace); return; } if (client.ActiveCharacter.CurrentFish != null) { if (client.ActiveCharacter.FishReadyTime > (uint)Environment.TickCount) { SendFishingStartedResponse(client, Asda2StartFishStatus.YouAreAlreadyFishing); return; } else { client.ActiveCharacter.CurrentFish = null; } } var fish = spot.GetRandomFish(client.ActiveCharacter.Asda2Inventory.Equipment[10].Category == Asda2ItemCategory.BaitElite); client.ActiveCharacter.CancelAllActions(); client.ActiveCharacter.CurrentFish = fish; client.ActiveCharacter.FishReadyTime = (uint)(Environment.TickCount + fish.FishingTime); SendSomeOneStartedFishingResponse(client.ActiveCharacter, (int)fish.ItemTemplate.Id, 0); SendFishingStartedResponse(client, Asda2StartFishStatus.Ok, interator, fish.ItemTemplate.Id); }
public void FinalizeDataHolder() { var list = new List <FishingSpot>(); Asda2FishingMgr.FishingSpotsByMaps.Add(Id, list); for (int i = 0; i < 10; i++) { if (RequiredFishingLvls[i] == -1) { continue; } var nfs = new FishingSpot(); nfs.RequiredFishingLevel = RequiredFishingLvls[i]; nfs.Map = (MapId)Id; nfs.Position = new Vector3(Points[i], Points[i + 10], 0); nfs.Radius = (byte)Radius[i]; nfs.Fishes = new Dictionary <int, Fish>(); var bi = Asda2FishingMgr.FishingBaseInfos[DataKey[i]]; var chance = 0; for (int j = 0; j < 20; j++) { if (bi.Chances[j] == 0) { continue; } chance += bi.Chances[j]; var nf = new Fish(); nf.ItemTemplate = Asda2ItemMgr.GetTemplate(bi.ItemIds[j]) ?? Asda2ItemMgr.GetTemplate(31725); nf.BaitIds = new List <int>(); var ft = Asda2FishingMgr.FishRecords[bi.ItemIds[j]]; nf.FishingTime = ft.FishingTime; for (int k = 0; k < 6; k++) { if (ft.BaitIds[k] == -1) { continue; } nf.BaitIds.Add(ft.BaitIds[k]); } nf.MinLength = (byte)bi.MinFishLengths[j]; nf.MaxLength = (byte)bi.MaxFishLenghts[j]; nfs.Fishes.Add(chance, nf); } nfs.PremiumFishes = new Dictionary <int, Fish>(); bi = Asda2FishingMgr.PremiumFishingBaseInfos[DataKey[i]]; chance = 0; for (int j = 0; j < 20; j++) { if (bi.Chances[j] == 0) { continue; } chance += bi.Chances[j]; var nf = new Fish(); nf.ItemTemplate = Asda2ItemMgr.GetTemplate(bi.ItemIds[j]) ?? Asda2ItemMgr.GetTemplate(31725); nf.BaitIds = new List <int>(); var ft = Asda2FishingMgr.FishRecords[bi.ItemIds[j]]; nf.FishingTime = ft.FishingTime; for (int k = 0; k < 6; k++) { if (ft.BaitIds[k] == -1) { continue; } nf.BaitIds.Add(ft.BaitIds[k]); } nf.MinLength = (byte)bi.MinFishLengths[j]; nf.MaxLength = (byte)bi.MaxFishLenghts[j]; nfs.PremiumFishes.Add(chance, nf); } list.Add(nfs); } }