Exemple #1
0
        public void PlayerBuyItemGameShop(GPlayer player, Packet packet)
        {
            ShopItemRequest ShopItem;
            uint            DeletePang,
                            DeleteCookie,
                            RentalPrice;

            if (!packet.ReadByte(out byte BuyType))
            {
                return;
            }

            if (!packet.ReadUInt16(out ushort BuyTotal))
            {
                return;
            }

            switch ((TGAME_SHOP_ACTION)BuyType)
            {
            case TGAME_SHOP_ACTION.Normal:
            {
                for (int Count = 0; Count <= BuyTotal - 1; Count++)
                {
                    ShopItem = (ShopItemRequest)packet.Read(new ShopItemRequest());

                    Console.WriteLine($"[BUY_ITEM_RESULT]: TypeID =>{ShopItem.IffTypeId}, Name =>{IffEntry.GetItemName(ShopItem.IffTypeId)} IsPang =>{ShopItem.PangPrice > 0}, IsCookie =>{ShopItem.CookiePrice > 0}");

                    if (!IffEntry.IsExist(ShopItem.IffTypeId))
                    {
                        player.SendResponse(ShowBuyItemSucceed(TGAME_SHOP.PASSWORD_WRONG));
                        return;
                    }
                    if (!IffEntry.IsBuyable(ShopItem.IffTypeId))
                    {
                        player.SendResponse(ShowBuyItemSucceed(TGAME_SHOP.CANNOT_BUY_ITEM));
                        return;
                    }
                    if (!player.Inventory.Available(ShopItem.IffTypeId, ShopItem.IffQty))
                    {
                        player.SendResponse(ShowBuyItemSucceed(TGAME_SHOP.BUY_FAIL));
                        return;
                    }
                    if (IffEntry.GetPrice(ShopItem.IffTypeId, ShopItem.IffDay) <= 0)
                    {
                        player.SendResponse(ShowBuyItemSucceed(TGAME_SHOP.BUY_FAIL));
                        return;
                    }
                    switch (IffEntry.GetShopPriceType(ShopItem.IffTypeId))
                    {
                    case 0:
                    case 2:
                    case 6:
                    case 32:
                    case 96:            //Pang
                    {
                        DeletePang = IffEntry.GetPrice(ShopItem.IffTypeId, ShopItem.IffDay) * ShopItem.IffQty;
                        if (!player.RemovePang(DeletePang))
                        {
                            player.SendResponse(ShowBuyItemSucceed(TGAME_SHOP.PANG_NOTENOUGHT));
                            WriteConsole.WriteLine("HandlePlayerBuyItemGameShop: Cannot Delete Player_{0} {1} pang's", new object[] { player.GetLogin, DeletePang });
                            return;
                        }
                    }
                    break;

                    case 1:
                    case 33:
                    case 97:            //Cookie
                    {
                        DeleteCookie = IffEntry.GetPrice(ShopItem.IffTypeId, ShopItem.IffDay);
                        if (!player.RemoveCookie(DeleteCookie))
                        {
                            player.SendResponse(ShowBuyItemSucceed(TGAME_SHOP.COOKIE_NOTENOUGHT));
                            WriteConsole.WriteLine("HandlePlayerBuyItemGameShop: Cannot Delete Player_{0} {1} cookie's", new object[] { player.GetLogin, DeleteCookie });
                            return;
                        }
                    }
                    break;

                    default:
                    {
                        if (ShopItem.CookiePrice > 0)
                        {
                            player.SendResponse(ShowBuyItemSucceed(TGAME_SHOP.BUY_FAIL));
                            Utils.Log("GameShopCore", $"CookiePriceType: {IffEntry.GetShopPriceType(ShopItem.IffTypeId)}", "GameShopCoreSystem");
                            return;
                        }
                        if (ShopItem.PangPrice > 0)
                        {
                            player.SendResponse(ShowBuyItemSucceed(TGAME_SHOP.BUY_FAIL));
                            Utils.Log("GameShopCore", $"PangPriceType: {IffEntry.GetShopPriceType(ShopItem.IffTypeId)}", "GameShopCoreSystem");
                            return;
                        }
                    }
                    break;
                    }
                    AddShopItem(player, ShopItem);
                }
            }
            break;

            case TGAME_SHOP_ACTION.Rental:
            {
                for (int Count = 0; Count <= BuyTotal - 1; Count++)
                {
                    ShopItem = (ShopItemRequest)packet.Read(new ShopItemRequest());

                    if (!(GetItemGroup(ShopItem.IffTypeId) == 2))
                    {
                        player.SendResponse(ShowBuyItemSucceed(TGAME_SHOP.ITEM_CANNOT_PURCHASE));
                        return;
                    }

                    if (!IffEntry.IsExist(ShopItem.IffTypeId))
                    {
                        player.SendResponse(ShowBuyItemSucceed(TGAME_SHOP.PASSWORD_WRONG));
                        return;
                    }
                    if (!IffEntry.IsBuyable(ShopItem.IffTypeId))
                    {
                        player.SendResponse(ShowBuyItemSucceed(TGAME_SHOP.CANNOT_BUY_ITEM));
                        return;
                    }
                    if (player.Inventory.IsExist(ShopItem.IffTypeId))
                    {
                        player.SendResponse(ShowBuyItemSucceed(TGAME_SHOP.ITEM_CANNOT_PURCHASE));
                        return;
                    }
                    RentalPrice = IffEntry.GetRentalPrice(ShopItem.IffTypeId);

                    if (RentalPrice <= 0)
                    {
                        player.SendResponse(ShowBuyItemSucceed(TGAME_SHOP.ITEM_CANNOT_PURCHASE));
                        return;
                    }
                    if (!player.RemovePang(RentalPrice))
                    {
                        player.SendResponse(ShowBuyItemSucceed(TGAME_SHOP.PANG_NOTENOUGHT));
                        WriteConsole.WriteLine("PlayerPlayerBuyItemGameShop: Cannot delete Player_{0} {1} pang(s)", new object[] { player.GetNickname, RentalPrice });
                    }
                    AddShopRentItem(player, ShopItem);
                }
            }
            break;
            }
            player.SendResponse(ShowBuyItemSucceed(TGAME_SHOP.BUY_SUCCESS, player.GetPang, player.GetCookie));
        }
        // 6B = The process is not yet finished
        // 6C = You have too many items, cannot be put more
        // 6D = item can not be put in locker
        // 6E = item can be expired, cannot be put it locker
        // 6F = Cannot be put the amount of item more than you have
        // 70 = The process is finished // automatically close the locker
        public void PlayerPutItemLocker(GPlayer player, Packet packet)
        {
            //dados não utilizados
            var PlayerID = packet.ReadUInt32();

            packet.Skip(5);
            var TypeID = packet.ReadUInt32();
            var Index  = packet.ReadUInt32();

            var GetItem = player.Inventory.ItemWarehouse.GetItem(Index);

            if (null == GetItem)
            {
                player.SendResponse(new byte[] { 0x6E, 0x01, 0x6B, 0x00, 0x00, 0x00 });
                return;
            }

            if (!(GameTools.Tools.GetItemGroup(GetItem.ItemTypeID) == 2))
            {
                player.SendResponse(new byte[] { 0x6E, 0x01, 0x6D, 0x00, 0x00, 0x00 });
                return;
            }
            var _db = new PangyaEntities();

            var invent = _db.USP_INVEN_PUSH((int)player.GetUID, (int)GetItem.ItemTypeID, IffEntry.GetItemName(GetItem.ItemTypeID), (int)GetItem.ItemIndex).FirstOrDefault();

            var Code = invent.Value;


            if (Code != 0)
            {
                player.SendResponse(new byte[] { 0x6E, 0x01, 0x6B, 0x00, 0x00, 0x00 });
                return;
            }

            if (player.Inventory.ItemWarehouse.RemoveItem(GetItem))
            {
                player.SendResponse(new byte[] { 0x39, 0x01, 0x00, 0x00 });


                player.Response.Write(new byte[] { 0xEC, 0x00 });
                player.Response.Write(1);
                player.Response.Write(1);
                player.Response.WriteStr("", 9);
                player.Response.Write(GetItem.ItemTypeID);
                player.Response.Write(GetItem.ItemIndex);
                player.Response.Write(player.GetUID);//quantity
                player.Response.WriteZero(27);
                player.Response.WriteStr(GetItem.ItemUCCUnique, 9);
                player.Response.Write(GetItem.ItemUCCCopyCount ?? 0);
                player.Response.Write(GetItem.ItemUCCStatus ?? 0);
                player.Response.WriteZero(54);
                player.Response.WriteStr(GetItem.ItemUCCName, 16);
                player.Response.WriteZero(25);
                player.Response.WriteStr(GetItem.ItemUCCDrawer, 22);
                player.SendResponse();


                player.Response.Write(new byte[] { 0x6E, 0x01 });
                player.Response.WriteZero(12);
                player.Response.Write(GetItem.ItemTypeID);
                player.Response.Write(GetItem.ItemIndex);
                player.Response.Write(player.GetUID);//quantity
                player.Response.WriteZero(27);
                player.Response.WriteStr(GetItem.ItemUCCUnique, 9);
                player.Response.Write(GetItem.ItemUCCCopyCount ?? 0);
                player.Response.Write(GetItem.ItemUCCStatus ?? 0);
                player.Response.WriteZero(54);
                player.Response.WriteStr(GetItem.ItemUCCName, 16);
                player.Response.WriteZero(25);
                player.Response.WriteStr(GetItem.ItemUCCDrawer, 22);
                player.SendResponse();
            }
        }