가챠 즉시 지급 시스템 수정

This commit is contained in:
김판돌 2024-03-10 00:41:35 +09:00
parent 1d03d1117e
commit ca8d7d59d6
3 changed files with 205 additions and 16 deletions

View File

@ -35,13 +35,11 @@ namespace Server.Manager
user.pay_cash += rewardData.return_count; user.pay_cash += rewardData.return_count;
break; break;
case eRewardItemType.character: case eRewardItemType.character:
for (int n = 0; n < rewardData.return_count; n++)
{
DeckUnitInfo deckUnitInfo = new DeckUnitInfo(); DeckUnitInfo deckUnitInfo = new DeckUnitInfo();
deckUnitInfo.user_id = user.id; deckUnitInfo.user_id = user.id;
deckUnitInfo.unit_data_id = rewardData.return_item; deckUnitInfo.unit_data_id = rewardData.return_item;
deckUnitInfo.count = rewardData.return_count;
box.Add(deckUnitInfo); box.Add(deckUnitInfo);
}
break; break;
case eRewardItemType.equipment: case eRewardItemType.equipment:
Random rand = new Random(); Random rand = new Random();
@ -56,11 +54,22 @@ namespace Server.Manager
} }
break; break;
case eRewardItemType.consumable: case eRewardItemType.consumable:
ConsumableItemData consumableItemData = Statics.consumableItemExcel.getConsumableItemData(rewardData.return_item);
switch (consumableItemData.item_type)
{
case eItemType.exp:
case eItemType.package:
ConsumableItem consumableItem = new ConsumableItem(); ConsumableItem consumableItem = new ConsumableItem();
consumableItem.user_id = user.id; consumableItem.user_id = user.id;
consumableItem.consumable_item_data_id = rewardData.return_item; consumableItem.consumable_item_data_id = rewardData.return_item;
consumableItem.count = rewardData.return_count; consumableItem.count = rewardData.return_count;
box.Add(consumableItem); box.Add(consumableItem);
break;
case eItemType.random:
randomItem(consumableItemData.reward, rewardData.return_count);
break;
}
break; break;
case eRewardItemType.etc: case eRewardItemType.etc:
EtcItem etcItem = new EtcItem(); EtcItem etcItem = new EtcItem();
@ -71,8 +80,6 @@ namespace Server.Manager
break; break;
default: default:
throw new RuntimeException("Not case", Error.nodata); throw new RuntimeException("Not case", Error.nodata);
} }
} }
@ -85,6 +92,169 @@ namespace Server.Manager
box.Add(deckUnitInfo); box.Add(deckUnitInfo);
} }
public void randomItem(int group, int count)
{
List<RandomRewardData> randomRewardDatas = Statics.randomRewardExcel.getRandomRewardDataGroup(group);
int maxProb = 0;
List<int> zero = new List<int>();
List<int> ints = new List<int>();
//확정보상부터 지급
for (int n = 0; n < randomRewardDatas.Count; n++)
{
if (randomRewardDatas[n].prob == -1)
{
//보상지급
switch (randomRewardDatas[n].reward_item_type)
{
case eRewardItemType.gold:
user.gold += (randomRewardDatas[n].return_count * count);
break;
case eRewardItemType.freecash:
user.free_cash += (randomRewardDatas[n].return_count * count);
break;
case eRewardItemType.paycash:
user.pay_cash += (randomRewardDatas[n].return_count * count);
break;
case eRewardItemType.character:
DeckUnitInfo deckUnitInfo = new DeckUnitInfo();
deckUnitInfo.user_id = user.id;
deckUnitInfo.unit_data_id = randomRewardDatas[n].reward;
deckUnitInfo.count = (randomRewardDatas[n].return_count * count);
box.Add(deckUnitInfo);
break;
case eRewardItemType.equipment:
Random rand = new Random();
int reward_count = (randomRewardDatas[n].return_count * count);
for (int m = 0; m < reward_count; m++)
{
Equipment equipment = new Equipment();
equipment.user_id = user.id;
equipment.equip_unit = 0;
equipment.rand_stats = rand.Next(5);
equipment.equipment_data_id = randomRewardDatas[n].reward;
box.Add(equipment);
}
break;
case eRewardItemType.consumable:
//패키지에서 나온 아이탬은 절대 가챠를 돌리지 않고 아이템 형태로 인벤 지급
ConsumableItem consumableItem = new ConsumableItem();
consumableItem.user_id = user.id;
consumableItem.consumable_item_data_id = randomRewardDatas[n].reward;
consumableItem.count = (randomRewardDatas[n].return_count * count);
box.Add(consumableItem);
break;
case eRewardItemType.etc:
EtcItem etcItem = new EtcItem();
etcItem.user_id = user.id;
etcItem.etc_item_data_id = randomRewardDatas[n].reward;
etcItem.count = (randomRewardDatas[n].return_count * count);
box.Add(etcItem);
break;
default:
throw new RuntimeException("Not case", Error.nodata);
}
//지급된 보상은 가챠에서 제외
randomRewardDatas.RemoveAt(n);
n--;
}
else if (randomRewardDatas[n].prob == 0)
{
zero.Add(n);
}
else
{
maxProb += randomRewardDatas[n].prob;
for(int m = 0; m < randomRewardDatas[n].prob; m++)
{
ints.Add(n);
}
}
}
//모든것이 확정보상일경우를 대비
if(randomRewardDatas.Count != 0)
{
Random rand = new Random();
if (maxProb == 0)
{
maxProb = randomRewardDatas.Count;
for (int n = 0; n < maxProb; n++)
{
ints.Add(n);
}
}
else
maxProb = 10000;
for (int n = 0; n < count; n++)
{
int select = rand.Next(10000);
int selectItem = 0;
if(select < ints.Count)
{
selectItem = ints[select];
}
else
{
select = rand.Next(zero.Count);
selectItem = zero[select];
}
switch (randomRewardDatas[selectItem].reward_item_type)
{
case eRewardItemType.gold:
user.gold += (randomRewardDatas[selectItem].return_count * count);
break;
case eRewardItemType.freecash:
user.free_cash += (randomRewardDatas[selectItem].return_count * count);
break;
case eRewardItemType.paycash:
user.pay_cash += (randomRewardDatas[selectItem].return_count * count);
break;
case eRewardItemType.character:
DeckUnitInfo deckUnitInfo = new DeckUnitInfo();
deckUnitInfo.user_id = user.id;
deckUnitInfo.unit_data_id = randomRewardDatas[selectItem].reward;
deckUnitInfo.count = (randomRewardDatas[selectItem].return_count * count);
box.Add(deckUnitInfo);
break;
case eRewardItemType.equipment:
int reward_count = (randomRewardDatas[selectItem].return_count * count);
for (int m = 0; m < reward_count; m++)
{
Equipment equipment = new Equipment();
equipment.user_id = user.id;
equipment.equip_unit = 0;
equipment.rand_stats = rand.Next(5);
equipment.equipment_data_id = randomRewardDatas[selectItem].reward;
box.Add(equipment);
}
break;
case eRewardItemType.consumable:
//패키지에서 나온 아이탬은 절대 가챠를 돌리지 않고 아이템 형태로 인벤 지급
ConsumableItem consumableItem = new ConsumableItem();
consumableItem.user_id = user.id;
consumableItem.consumable_item_data_id = randomRewardDatas[selectItem].reward;
consumableItem.count = (randomRewardDatas[selectItem].return_count * count);
box.Add(consumableItem);
break;
case eRewardItemType.etc:
EtcItem etcItem = new EtcItem();
etcItem.user_id = user.id;
etcItem.etc_item_data_id = randomRewardDatas[selectItem].reward;
etcItem.count = (randomRewardDatas[selectItem].return_count * count);
box.Add(etcItem);
break;
default:
throw new RuntimeException("Not case", Error.nodata);
}
}
}
}
//리워드 아이탬 획득 코드 작성 //리워드 아이탬 획득 코드 작성
//패키지 구매시 패키지를 전부 풀어서 아이탬을 획득하는 코드 작성 //패키지 구매시 패키지를 전부 풀어서 아이탬을 획득하는 코드 작성
} }

View File

@ -9,7 +9,7 @@ namespace Server.SQL
public long index { get; set; } public long index { get; set; }
public string name { get; set; } public string name { get; set; }
public eItemType item_type { get; set; } public eItemType item_type { get; set; }
public string reward { get; set; } public int reward { get; set; }
} }
public enum eItemType public enum eItemType
@ -43,7 +43,7 @@ namespace Server.SQL
consumableItemData.index = item.Key; consumableItemData.index = item.Key;
consumableItemData.name = (string)item.Value["name"]; consumableItemData.name = (string)item.Value["name"];
consumableItemData.item_type = (eItemType)item.Value["item_type"]; consumableItemData.item_type = (eItemType)item.Value["item_type"];
consumableItemData.reward = item.Value["reward"].ToString(); consumableItemData.reward = (int)item.Value["reward"];
this.consumableItemData.Add(item.Key, consumableItemData); this.consumableItemData.Add(item.Key, consumableItemData);
} }
} }

View File

@ -1,4 +1,5 @@
using Server.Git; using Server.Git;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace Server.SQL namespace Server.SQL
@ -10,6 +11,8 @@ namespace Server.SQL
public int group { get; set; } public int group { get; set; }
public long reward { get; set; } public long reward { get; set; }
public int prob { get; set; } public int prob { get; set; }
public eRewardItemType reward_item_type { get; set; }
public int return_count { get; set; }
} }
public class RandomRewardDataExcel public class RandomRewardDataExcel
@ -27,6 +30,20 @@ namespace Server.SQL
{ {
return randomRewardData.Values.ToList(); return randomRewardData.Values.ToList();
} }
public List<RandomRewardData> getRandomRewardDataGroup(int group)
{
List<RandomRewardData> get = new List<RandomRewardData>();
foreach (var item in randomRewardData)
{
if (item.Value.group == group)
{
get.Add(item.Value);
}
}
return get;
}
public void init(Sheet data) public void init(Sheet data)
{ {
this.randomRewardData = new Dictionary<long, RandomRewardData>(); this.randomRewardData = new Dictionary<long, RandomRewardData>();
@ -37,6 +54,8 @@ namespace Server.SQL
randomRewardData.group = (int)item.Value["group"]; randomRewardData.group = (int)item.Value["group"];
randomRewardData.reward = (int)item.Value["reward"]; randomRewardData.reward = (int)item.Value["reward"];
randomRewardData.prob = (int)item.Value["prob"]; randomRewardData.prob = (int)item.Value["prob"];
randomRewardData.reward_item_type = (eRewardItemType)item.Value["reward_item_type"];
randomRewardData.return_count = (int)item.Value["return_count"];
this.randomRewardData.Add(item.Key, randomRewardData); this.randomRewardData.Add(item.Key, randomRewardData);
} }
} }