Esempio n. 1
0
        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);
                }
            }
        }
Esempio n. 2
0
        [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);
            });
        }
Esempio n. 3
0
        [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);
        }
Esempio n. 4
0
        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);
            }
        }