public void BuyItem(int itemType, int itemId, int count, Action <int> action) { Debug.Log("[C_Item_BuyItem_0x0403]"); _onBuyItem = action; var data = new C_Item_BuyItem_0x0403(); data._itemType = itemType; data._itemId = itemId; data._count = count; Singleton._serverCallback.AddCallback <S_Item_BuyItem_0x0403>(OnBuyItem); Singleton._messageManager.Send(data); }
// 价格表 // 根据价格处理 // 金币要减少 void OnBuyItem(Client peer, C_Item_BuyItem_0x0403 msg) { Singleton._log.Info("C_Item_BuyItem_0x0403" + ", client=" + peer._accountName); int code = 0; var data = Singleton._sqlServer.GetAssetData(peer._accountName); if (data == null) { code = 11; } else { List <int> list = new List <int>(); switch (msg._itemType) { // 购买砖块模型 case 0: list.Clear(); list.AddRange(data._blocks); var rs = list.Any((int temp) => temp == msg._itemId); if (rs) { // 已经购买该物品 code = 10; break; } var b0 = Singleton._excelUtil.GetBlock(msg._itemId); if (b0 == null) { // 表中找不到该物品 code = 13; break; } var finalCost = b0._gold * msg._count; if (data._gold < finalCost) { // 余额不足 code = 12; break; } data._gold -= finalCost; Singleton._log.InfoFormat("账户{0}扣除金币{1}, 剩余金币{2}", peer._accountName, finalCost, data._gold); list.Add(msg._itemId); data._blocks = list.ToArray(); break; // 购买砖块遮盖板 case 1: list.Clear(); list.AddRange(data._blockBoards); rs = list.Any((int temp) => temp == msg._itemId); // 如果已经拥有就无法购买 // 此处是指只能拥有一个的物品 if (rs) { // 已经购买该物品 code = 10; break; } var b1 = Singleton._excelUtil.GetBlockBoard(msg._itemId); if (b1 == null) { // 表中找不到该物品 code = 13; break; } finalCost = b1._gold * msg._count; if (data._gold < finalCost) { // 余额不足 code = 12; break; } data._gold -= finalCost; Singleton._log.InfoFormat("账户{0}扣除金币{1}, 剩余金币{2}", peer._accountName, finalCost, data._gold); list.Add(msg._itemId); data._blockBoards = list.ToArray(); break; // 购买棋盘 case 2: list.Clear(); list.AddRange(data._boards); rs = list.Any((int temp) => temp == msg._itemId); // 如果已经拥有就无法购买 // 此处是指只能拥有一个的物品 if (rs) { // 已经购买该物品 code = 10; break; } var b2 = Singleton._excelUtil.GetBoard(msg._itemId); if (b2 == null) { // 表中找不到该物品 code = 13; break; } finalCost = b2._gold * msg._count; if (data._gold < finalCost) { // 余额不足 code = 12; break; } data._gold -= finalCost; Singleton._log.InfoFormat("账户{0}扣除金币{1}, 剩余金币{2}", peer._accountName, finalCost, data._gold); list.Add(msg._itemId); data._boards = list.ToArray(); break; // 购买人物 case 3: list.Clear(); list.AddRange(data._persons); rs = list.Any((int temp) => temp == msg._itemId); // 如果已经拥有就无法购买 // 此处是指只能拥有一个的物品 if (rs) { // 已经购买该物品 code = 10; break; } var b3 = Singleton._excelUtil.GetPerson(msg._itemId); if (b3 == null) { // 表中找不到该物品 code = 13; break; } finalCost = b3._gold * msg._count; if (data._gold < finalCost) { // 余额不足 code = 12; break; } data._gold -= finalCost; Singleton._log.InfoFormat("账户{0}扣除金币{1}, 剩余金币{2}", peer._accountName, finalCost, data._gold); list.Add(msg._itemId); data._persons = list.ToArray(); break; } } if (code == 0) { code = Singleton._sqlServer.ChangeAsset(data); } // 更新客户端金币 Singleton._log.Info("S_Item_GetGold_0x0404" + ", client=" + peer._accountName); int num = 0; var a = Singleton._sqlServer.GetAssetData(peer._accountName); if (a != null) { num = a._gold; } Send(peer, new S_Item_GetGold_0x0404 { _num = num }); Singleton._log.Info("S_Item_BuyItem_0x0403" + ", client=" + peer._accountName); Send(peer, new S_Item_BuyItem_0x0403 { _itemType = msg._itemType, _itemId = msg._itemId, _code = code }); }