示例#1
0
        public void PersonalShopCheck(ChannelClient client, Packet packet)
        {
            var bagEntityId     = packet.GetLong();
            var licenseEntityId = packet.GetLong();

            var creature = client.GetCreatureSafe(packet.Id);
            var bag      = creature.Inventory.GetItemSafe(bagEntityId);
            var license  = creature.Inventory.GetItemSafe(licenseEntityId);

            // Check feature
            if (!AuraData.FeaturesDb.IsEnabled("PersonalShop"))
            {
                Send.MsgBox(creature, Localization.Get("This feature has not been enabled yet."));
                Send.PersonalShopCheckR(creature, false, 0, 0);
                return;
            }

            // Check bag
            if (!bag.HasTag("/personal_shop_available/"))
            {
                Log.Warning("PersonalShopCheck: User '{0}' tried to use invalid item bag.", client.Account.Id);

                Send.MsgBox(creature, Localization.Get("Invalid item bag."));
                Send.PersonalShopCheckR(creature, false, 0, 0);
                return;
            }

            // Check license
            if (!license.HasTag("/personalshoplicense/"))
            {
                Log.Warning("PersonalShopCheck: User '{0}' tried to use invalid license.", client.Account.Id);

                Send.MsgBox(creature, Localization.Get("Invalid license."));
                Send.PersonalShopCheckR(creature, false, 0, 0);
                return;
            }

            if (license.MetaData1.Has("EVALUE") && !ChannelServer.Instance.Conf.World.ReusingPersonalShopLicenses)
            {
                // Unofficial
                Send.MsgBox(creature, Localization.Get("You can't re-use a license that has revenue on it."));
                Send.PersonalShopCheckR(creature, false, 0, 0);
                return;
            }

            // Check location
            if (!PersonalShop.CanPlace(creature, license.Data.PersonalShopLicense))
            {
                Send.MsgBox(creature, Localization.Get("Personal Shops are allowed only in designated areas."));
                Send.PersonalShopCheckR(creature, false, 0, 0);
                return;
            }

            // Create shop
            var shop = new PersonalShop(creature, bag, license);

            // Response
            Send.PersonalShopCheckR(creature, true, bagEntityId, licenseEntityId);
        }