가챠 즉시 지급 시스템 수정
This commit is contained in:
parent
1d03d1117e
commit
ca8d7d59d6
|
|
@ -35,13 +35,11 @@ namespace Server.Manager
|
|||
user.pay_cash += rewardData.return_count;
|
||||
break;
|
||||
case eRewardItemType.character:
|
||||
for (int n = 0; n < rewardData.return_count; n++)
|
||||
{
|
||||
DeckUnitInfo deckUnitInfo = new DeckUnitInfo();
|
||||
deckUnitInfo.user_id = user.id;
|
||||
deckUnitInfo.unit_data_id = rewardData.return_item;
|
||||
deckUnitInfo.count = rewardData.return_count;
|
||||
box.Add(deckUnitInfo);
|
||||
}
|
||||
break;
|
||||
case eRewardItemType.equipment:
|
||||
Random rand = new Random();
|
||||
|
|
@ -56,11 +54,22 @@ namespace Server.Manager
|
|||
}
|
||||
break;
|
||||
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.user_id = user.id;
|
||||
consumableItem.consumable_item_data_id = rewardData.return_item;
|
||||
consumableItem.count = rewardData.return_count;
|
||||
box.Add(consumableItem);
|
||||
break;
|
||||
case eItemType.random:
|
||||
randomItem(consumableItemData.reward, rewardData.return_count);
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
case eRewardItemType.etc:
|
||||
EtcItem etcItem = new EtcItem();
|
||||
|
|
@ -71,8 +80,6 @@ namespace Server.Manager
|
|||
break;
|
||||
default:
|
||||
throw new RuntimeException("Not case", Error.nodata);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -85,6 +92,169 @@ namespace Server.Manager
|
|||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//리워드 아이탬 획득 코드 작성
|
||||
//패키지 구매시 패키지를 전부 풀어서 아이탬을 획득하는 코드 작성
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ namespace Server.SQL
|
|||
public long index { get; set; }
|
||||
public string name { get; set; }
|
||||
public eItemType item_type { get; set; }
|
||||
public string reward { get; set; }
|
||||
public int reward { get; set; }
|
||||
}
|
||||
|
||||
public enum eItemType
|
||||
|
|
@ -43,7 +43,7 @@ namespace Server.SQL
|
|||
consumableItemData.index = item.Key;
|
||||
consumableItemData.name = (string)item.Value["name"];
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using Server.Git;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace Server.SQL
|
||||
|
|
@ -10,6 +11,8 @@ namespace Server.SQL
|
|||
public int group { get; set; }
|
||||
public long reward { get; set; }
|
||||
public int prob { get; set; }
|
||||
public eRewardItemType reward_item_type { get; set; }
|
||||
public int return_count { get; set; }
|
||||
}
|
||||
|
||||
public class RandomRewardDataExcel
|
||||
|
|
@ -27,6 +30,20 @@ namespace Server.SQL
|
|||
{
|
||||
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)
|
||||
{
|
||||
this.randomRewardData = new Dictionary<long, RandomRewardData>();
|
||||
|
|
@ -37,6 +54,8 @@ namespace Server.SQL
|
|||
randomRewardData.group = (int)item.Value["group"];
|
||||
randomRewardData.reward = (int)item.Value["reward"];
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue