From 2823581f1951ab8eade5a37de32f21cdab7bf361 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=AF=BC=EC=84=9C?= Date: Wed, 28 Feb 2024 15:47:18 +0900 Subject: [PATCH] =?UTF-8?q?itembox=EC=A0=9C=EC=9E=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Server/Manager/ItemManager.cs | 145 ++++++++++++++++++++++++++++++++++ Server/Service/BuyShopItem.cs | 58 ++------------ 2 files changed, 152 insertions(+), 51 deletions(-) create mode 100644 Server/Manager/ItemManager.cs diff --git a/Server/Manager/ItemManager.cs b/Server/Manager/ItemManager.cs new file mode 100644 index 0000000..772ff60 --- /dev/null +++ b/Server/Manager/ItemManager.cs @@ -0,0 +1,145 @@ +using Server.SQL; +using Server.System; + +namespace Server.Manager +{ + public class ItemManager + { + User user; + + public ItemBox box; + + public ItemManager(User user) + { + this.user = user; + box = new ItemBox(user); + } + + public void addReward(long reward) + { + RewardData rewardData; + + //아이템 획득 처리 + if (reward == 0) + { + //따로 처리가 필요함. + } + else + { + rewardData = Statics.rewardExcel.getRewardData(reward); + switch (rewardData.reward_item_type) + { + case eRewardItemType.gold: + user.gold += rewardData.return_item; + break; + case eRewardItemType.freecash: + user.free_cash += rewardData.return_item; + break; + case eRewardItemType.paycash: + user.pay_cash += rewardData.return_item; + break; + case eRewardItemType.character: + DeckUnitInfo deckUnitInfo = new DeckUnitInfo(); + deckUnitInfo.user_id = user.id; + deckUnitInfo.unit_id = rewardData.return_item; + box.Add(deckUnitInfo); + break; + case eRewardItemType.equipment: + Equipment equipment = new Equipment(); + equipment.user_id = user.id; + equipment.equip_unit = 0; + equipment.rand_stats = (new Random()).Next(5); + equipment.equipment_data_id = rewardData.return_item; + box.Add(equipment); + break; + case eRewardItemType.consumable: + //소모품 만들고 넣기 + break; + case eRewardItemType.etc: + //기타아이탬 만들고 넣기 + break; + default: + throw new RuntimeException("Not case", Error.nodata); + + + } + } + } + + //리워드 아이탬 획득 코드 작성 + //패키지 구매시 패키지를 전부 풀어서 아이탬을 획득하는 코드 작성 + } + + public class ItemBox + { + List _deckUnitInfo; + public List deckUnitInfo { get { return _deckUnitInfo; } } + + public List addDeckUnitInfo; + + List _equipment; + public List equipment { get { return _equipment; } } + public List addEquipment; + + public ItemBox(User user) + { + _deckUnitInfo = Statics.deckUnitInfoSQL.SelectUid(user.id); + _equipment = Statics.equipmentrSQL.SelectUid(user.id); + addDeckUnitInfo = new List(); + addEquipment = new List(); + } + + public void SaveSQL() + { + if (_deckUnitInfo.Count != 0) + { + Statics.deckUnitInfoSQL.Insert(_deckUnitInfo); + Statics.deckUnitInfoSQL.SaveChanges(); + _deckUnitInfo.Clear(); + } + if (_equipment.Count != 0) + { + Statics.equipmentrSQL.Insert(_equipment); + Statics.equipmentrSQL.SaveChanges(); + _equipment.Clear(); + } + } + + public bool Add(DeckUnitInfo item) + { + if(_deckUnitInfo.FindIndex(n => n.unit_id == item.unit_id) != -1) + return false; + _deckUnitInfo.Add(item); + addDeckUnitInfo.Add(item); + return true; + } + + public bool Add(List items) + { + foreach(var item in items) + { + if (_deckUnitInfo.FindIndex(n => n.unit_id == item.unit_id) != -1) + return false; + } + _deckUnitInfo.AddRange(items); + addDeckUnitInfo.AddRange(items); + return true; + } + + public bool Add(Equipment item) + { + _equipment.Add(item); + addEquipment.Add(item); + return true; + } + + + public bool Add(List items) + { + _equipment.AddRange(items); + addEquipment.AddRange(items); + return true; + } + } + +} diff --git a/Server/Service/BuyShopItem.cs b/Server/Service/BuyShopItem.cs index 52c6f4b..3acf750 100644 --- a/Server/Service/BuyShopItem.cs +++ b/Server/Service/BuyShopItem.cs @@ -3,6 +3,7 @@ using Newtonsoft.Json; using Server.SQL; using LibGit2Sharp; using System.Collections.Generic; +using Server.Manager; namespace Server.Service { @@ -10,16 +11,16 @@ namespace Server.Service { private BuyShopItemReq req; - private void SaveSQL() + private void SaveSQL(ItemManager item) { Statics.userSQL.SaveChanges(); + item.SaveSQL(); } public override string Process() { User user = Statics.userSQL.SelectUuid(req.uuid); ShopItemData shopItemData = Statics.shopItemExcel.getShopItemData(req.index); - RewardData rewardData; //획득 가능한 아이템인지 확인 switch (shopItemData.buy_type) @@ -43,61 +44,16 @@ namespace Server.Service throw new RuntimeException("Not case", Error.nodata); } - DeckUnitInfo deckUnitInfo = null; - Equipment equipment = null; + ItemManager item = new ItemManager(user); - //아이템 획득 처리 - if (shopItemData.reward == 0) - { - //따로 처리가 필요함. - } - else - { - rewardData = Statics.rewardExcel.getRewardData(shopItemData.reward); - switch (rewardData.reward_item_type) - { - case eRewardItemType.gold: - user.gold += rewardData.return_item; - break; - case eRewardItemType.freecash: - user.free_cash += rewardData.return_item; - break; - case eRewardItemType.paycash: - user.pay_cash += rewardData.return_item; - break; - case eRewardItemType.character: - deckUnitInfo = new DeckUnitInfo(); - deckUnitInfo.user_id = user.id; - deckUnitInfo.unit_id = rewardData.return_item; - break; - case eRewardItemType.equipment: - equipment = new Equipment(); - equipment.user_id = user.id; - equipment.equip_unit = 0; - equipment.rand_stats = (new Random()).Next(5); - equipment.equipment_data_id = rewardData.return_item; - break; - case eRewardItemType.consumable: - //소모품 만들고 넣기 - break; - case eRewardItemType.etc: - //기타아이탬 만들고 넣기 - break; - default: - throw new RuntimeException("Not case", Error.nodata); + item.addReward(shopItemData.reward); - - } - } - - - - SaveSQL(); + SaveSQL(item); return makeResp(); } public override Protocol ProtocolValue() => Protocol.BuyShopItem; - + public override Req Requst(string json) { req = JsonConvert.DeserializeObject(json);