using Server.System; using Newtonsoft.Json; using Server.SQL; using LibGit2Sharp; namespace Server.Service { public class BuyShopItem : AbstractService { private BuyShopItemReq req; private void SaveSQL() { Statics.userSQL.SaveChanges(); } public override string Process() { User user = Statics.userSQL.SelectUuid(req.uuid); ShopItemData shopItemData = Statics.shopItemExcel.getShopItemData(req.index); RewardData rewardData; //획득 가능한 아이템인지 확인 switch (shopItemData.buy_type) { case eBuyType.gold: if(user.gold < shopItemData.buy) { throw new RuntimeException("Not gold", Error.nogold); } user.gold -= shopItemData.buy; break; case eBuyType.cash: if (!user.buyCash(shopItemData.buy)) { throw new RuntimeException("Not cash", Error.nogold); } break; case eBuyType.money://현금결제 현재로서는 무조건 결제완료가 나오도록 처리할것 break; default: throw new RuntimeException("Not case", Error.nodata); } //아이템 획득 처리 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: break; case eRewardItemType.equipment: break; case eRewardItemType.consumable: break; case eRewardItemType.etc: break; default: throw new RuntimeException("Not case", Error.nodata); } } SaveSQL(); return makeResp(); } public override Protocol ProtocolValue() => Protocol.BuyShopItem; public override Req Requst(string json) { req = JsonConvert.DeserializeObject(json); return req; } private string makeResp() { BuyShopItemResp resp = new BuyShopItemResp(); return resp.ToJson(); } } public class BuyShopItemReq : Req { public string uuid; public long index; public override bool IsReceivedAllField() { if (uuid == "" || index == 0) return false; return true; } } public class BuyShopItemResp : Resp { } }