itembox제작

This commit is contained in:
김민서 2024-02-28 15:47:18 +09:00
parent 0fe0af2130
commit 2823581f19
2 changed files with 152 additions and 51 deletions

View File

@ -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> _deckUnitInfo;
public List<DeckUnitInfo> deckUnitInfo { get { return _deckUnitInfo; } }
public List<DeckUnitInfo> addDeckUnitInfo;
List<Equipment> _equipment;
public List<Equipment> equipment { get { return _equipment; } }
public List<Equipment> addEquipment;
public ItemBox(User user)
{
_deckUnitInfo = Statics.deckUnitInfoSQL.SelectUid(user.id);
_equipment = Statics.equipmentrSQL.SelectUid(user.id);
addDeckUnitInfo = new List<DeckUnitInfo>();
addEquipment = new List<Equipment>();
}
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<DeckUnitInfo> 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<Equipment> items)
{
_equipment.AddRange(items);
addEquipment.AddRange(items);
return true;
}
}
}

View File

@ -3,6 +3,7 @@ using Newtonsoft.Json;
using Server.SQL; using Server.SQL;
using LibGit2Sharp; using LibGit2Sharp;
using System.Collections.Generic; using System.Collections.Generic;
using Server.Manager;
namespace Server.Service namespace Server.Service
{ {
@ -10,16 +11,16 @@ namespace Server.Service
{ {
private BuyShopItemReq req; private BuyShopItemReq req;
private void SaveSQL() private void SaveSQL(ItemManager item)
{ {
Statics.userSQL.SaveChanges(); Statics.userSQL.SaveChanges();
item.SaveSQL();
} }
public override string Process() public override string Process()
{ {
User user = Statics.userSQL.SelectUuid(req.uuid); User user = Statics.userSQL.SelectUuid(req.uuid);
ShopItemData shopItemData = Statics.shopItemExcel.getShopItemData(req.index); ShopItemData shopItemData = Statics.shopItemExcel.getShopItemData(req.index);
RewardData rewardData;
//획득 가능한 아이템인지 확인 //획득 가능한 아이템인지 확인
switch (shopItemData.buy_type) switch (shopItemData.buy_type)
@ -43,61 +44,16 @@ namespace Server.Service
throw new RuntimeException("Not case", Error.nodata); throw new RuntimeException("Not case", Error.nodata);
} }
DeckUnitInfo deckUnitInfo = null; ItemManager item = new ItemManager(user);
Equipment equipment = null;
//아이템 획득 처리 item.addReward(shopItemData.reward);
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);
SaveSQL(item);
}
}
SaveSQL();
return makeResp(); return makeResp();
} }
public override Protocol ProtocolValue() => Protocol.BuyShopItem; public override Protocol ProtocolValue() => Protocol.BuyShopItem;
public override Req Requst(string json) public override Req Requst(string json)
{ {
req = JsonConvert.DeserializeObject<BuyShopItemReq>(json); req = JsonConvert.DeserializeObject<BuyShopItemReq>(json);