Пример #1
0
        public void UpgradeHeirloom(uint itemId, uint castItem)
        {
            Player player = _owner.GetPlayer();

            if (!player)
            {
                return;
            }

            HeirloomRecord heirloom = Global.DB2Mgr.GetHeirloomByItemId(itemId);

            if (heirloom == null)
            {
                return;
            }

            var data = _heirlooms.LookupByKey(itemId);

            if (data == null)
            {
                return;
            }

            HeirloomPlayerFlags flags = data.flags;
            uint bonusId = 0;

            if (heirloom.UpgradeItemID[0] == castItem)
            {
                flags  |= HeirloomPlayerFlags.BonusLevel90;
                bonusId = heirloom.UpgradeItemBonusListID[0];
            }
            if (heirloom.UpgradeItemID[1] == castItem)
            {
                flags  |= HeirloomPlayerFlags.BonusLevel100;
                bonusId = heirloom.UpgradeItemBonusListID[1];
            }
            if (heirloom.UpgradeItemID[2] == castItem)
            {
                flags  |= HeirloomPlayerFlags.BonusLevel110;
                bonusId = heirloom.UpgradeItemBonusListID[2];
            }
            if (heirloom.UpgradeItemID[3] == castItem)
            {
                flags  |= HeirloomPlayerFlags.BonusLevel120;
                bonusId = heirloom.UpgradeItemBonusListID[3];
            }

            foreach (Item item in player.GetItemListByEntry(itemId, true))
            {
                item.AddBonuses(bonusId);
            }

            // Get heirloom offset to update only one part of dynamic field
            List <uint> heirlooms = player.m_activePlayerData.Heirlooms;
            int         offset    = heirlooms.IndexOf(itemId);

            player.SetHeirloomFlags(offset, (uint)flags);
            data.flags   = flags;
            data.bonusId = bonusId;
        }
Пример #2
0
        public void UpgradeHeirloom(uint itemId, uint castItem)
        {
            Player player = _owner.GetPlayer();

            if (!player)
            {
                return;
            }

            HeirloomRecord heirloom = Global.DB2Mgr.GetHeirloomByItemId(itemId);

            if (heirloom == null)
            {
                return;
            }

            var data = _heirlooms.LookupByKey(itemId);

            if (data == null)
            {
                return;
            }

            HeirloomPlayerFlags flags = data.flags;
            uint bonusId = 0;

            if (heirloom.UpgradeItemID[0] == castItem)
            {
                flags  |= HeirloomPlayerFlags.BonusLevel90;
                bonusId = heirloom.ItemBonusListID[0];
            }
            if (heirloom.UpgradeItemID[1] == castItem)
            {
                flags  |= HeirloomPlayerFlags.BonusLevel100;
                bonusId = heirloom.ItemBonusListID[1];
            }
            if (heirloom.UpgradeItemID[2] == castItem)
            {
                flags  |= HeirloomPlayerFlags.BonusLevel110;
                bonusId = heirloom.ItemBonusListID[2];
            }

            foreach (Item item in player.GetItemListByEntry(itemId, true))
            {
                item.AddBonuses(bonusId);
            }

            // Get heirloom offset to update only one part of dynamic field
            var    fields = player.GetDynamicValues(PlayerDynamicFields.Heirlooms);
            ushort offset = (ushort)Array.IndexOf(fields, itemId);

            player.SetDynamicValue(PlayerDynamicFields.HeirloomsFlags, offset, (uint)flags);
            data.flags   = flags;
            data.bonusId = bonusId;
        }
Пример #3
0
        public void LoadAccountHeirlooms(SQLResult result)
        {
            if (result.IsEmpty())
            {
                return;
            }

            do
            {
                uint itemId = result.Read <uint>(0);
                HeirloomPlayerFlags flags = (HeirloomPlayerFlags)result.Read <uint>(1);

                HeirloomRecord heirloom = Global.DB2Mgr.GetHeirloomByItemId(itemId);
                if (heirloom == null)
                {
                    continue;
                }

                uint bonusId = 0;

                if (flags.HasAnyFlag(HeirloomPlayerFlags.BonusLevel120))
                {
                    bonusId = heirloom.UpgradeItemBonusListID[3];
                }
                else if (flags.HasAnyFlag(HeirloomPlayerFlags.BonusLevel110))
                {
                    bonusId = heirloom.UpgradeItemBonusListID[2];
                }
                else if (flags.HasAnyFlag(HeirloomPlayerFlags.BonusLevel100))
                {
                    bonusId = heirloom.UpgradeItemBonusListID[1];
                }
                else if (flags.HasAnyFlag(HeirloomPlayerFlags.BonusLevel90))
                {
                    bonusId = heirloom.UpgradeItemBonusListID[0];
                }

                _heirlooms[itemId] = new HeirloomData(flags, bonusId);
            } while (result.NextRow());
        }
Пример #4
0
        public void CheckHeirloomUpgrades(Item item)
        {
            Player player = _owner.GetPlayer();

            if (!player)
            {
                return;
            }

            // Check already owned heirloom for upgrade kits
            HeirloomRecord heirloom = Global.DB2Mgr.GetHeirloomByItemId(item.GetEntry());

            if (heirloom != null)
            {
                var data = _heirlooms.LookupByKey(item.GetEntry());
                if (data == null)
                {
                    return;
                }

                // Check for heirloom pairs (normal - heroic, heroic - mythic)
                uint           heirloomItemId = heirloom.StaticUpgradedItemID;
                uint           newItemId      = 0;
                HeirloomRecord heirloomDiff;
                while ((heirloomDiff = Global.DB2Mgr.GetHeirloomByItemId(heirloomItemId)) != null)
                {
                    if (player.GetItemByEntry(heirloomDiff.ItemID))
                    {
                        newItemId = heirloomDiff.ItemID;
                    }

                    HeirloomRecord heirloomSub = Global.DB2Mgr.GetHeirloomByItemId(heirloomDiff.StaticUpgradedItemID);
                    if (heirloomSub != null)
                    {
                        heirloomItemId = heirloomSub.ItemID;
                        continue;
                    }

                    break;
                }

                if (newItemId != 0)
                {
                    var    heirloomFields = player.GetDynamicValues(ActivePlayerDynamicFields.Heirlooms);
                    ushort offset         = (ushort)Array.IndexOf(heirloomFields, item.GetEntry());

                    player.SetDynamicValue(ActivePlayerDynamicFields.Heirlooms, offset, newItemId);
                    player.SetDynamicValue(ActivePlayerDynamicFields.HeirloomFlags, offset, 0);

                    _heirlooms.Remove(item.GetEntry());
                    _heirlooms[newItemId] = null;

                    return;
                }

                var fields = item.GetDynamicValues(ItemDynamicFields.BonusListIds);
                foreach (uint bonusId in fields)
                {
                    if (bonusId != data.bonusId)
                    {
                        item.ClearDynamicValue(ItemDynamicFields.BonusListIds);
                    }
                }

                if (!fields.Contains(data.bonusId))
                {
                    item.AddBonuses(data.bonusId);
                }
            }
        }
Пример #5
0
        public void CheckHeirloomUpgrades(Item item)
        {
            Player player = _owner.GetPlayer();

            if (!player)
            {
                return;
            }

            // Check already owned heirloom for upgrade kits
            HeirloomRecord heirloom = Global.DB2Mgr.GetHeirloomByItemId(item.GetEntry());

            if (heirloom != null)
            {
                var data = _heirlooms.LookupByKey(item.GetEntry());
                if (data == null)
                {
                    return;
                }

                // Check for heirloom pairs (normal - heroic, heroic - mythic)
                uint           heirloomItemId = heirloom.StaticUpgradedItemID;
                uint           newItemId      = 0;
                HeirloomRecord heirloomDiff;
                while ((heirloomDiff = Global.DB2Mgr.GetHeirloomByItemId(heirloomItemId)) != null)
                {
                    if (player.GetItemByEntry(heirloomDiff.ItemID))
                    {
                        newItemId = heirloomDiff.ItemID;
                    }

                    HeirloomRecord heirloomSub = Global.DB2Mgr.GetHeirloomByItemId(heirloomDiff.StaticUpgradedItemID);
                    if (heirloomSub != null)
                    {
                        heirloomItemId = heirloomSub.ItemID;
                        continue;
                    }

                    break;
                }

                if (newItemId != 0)
                {
                    List <uint> heirlooms = player.m_activePlayerData.Heirlooms;
                    int         offset    = heirlooms.IndexOf(item.GetEntry());

                    player.SetHeirloom(offset, newItemId);
                    player.SetHeirloomFlags(offset, 0);

                    _heirlooms.Remove(item.GetEntry());
                    _heirlooms[newItemId] = null;

                    return;
                }

                List <uint> bonusListIDs = item.m_itemData.BonusListIDs;
                foreach (uint bonusId in bonusListIDs)
                {
                    if (bonusId != data.bonusId)
                    {
                        item.ClearBonuses();
                        break;
                    }
                }

                if (!bonusListIDs.Contains(data.bonusId))
                {
                    item.AddBonuses(data.bonusId);
                }
            }
        }