121 lines
3.7 KiB
C#
121 lines
3.7 KiB
C#
using CodeStage.AntiCheat.ObscuredTypes;
|
|
using Newtonsoft.Json;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class RewardRandomBagTableData : TableDataBase
|
|
{
|
|
public int n_ItemGrade;
|
|
//e_ItemType
|
|
|
|
ObscuredInt _DropIndex;
|
|
public int n_DropIndex
|
|
{
|
|
get { return _DropIndex; }
|
|
set { _DropIndex = value; _DropIndex.RandomizeCryptoKey(); }
|
|
}
|
|
|
|
ObscuredInt _ItemId;
|
|
public int n_ItemId
|
|
{
|
|
get { return _ItemId; }
|
|
set { _ItemId = value; _ItemId.RandomizeCryptoKey(); }
|
|
}
|
|
|
|
ObscuredInt _DropRate;
|
|
public int n_DropRate
|
|
{
|
|
get { return _DropRate; }
|
|
set { _DropRate = value; _DropRate.RandomizeCryptoKey(); }
|
|
}
|
|
|
|
ObscuredInt _DropCountMin;
|
|
public int n_DropCountMin
|
|
{
|
|
get { return _DropCountMin; }
|
|
set { _DropCountMin = value; _DropCountMin.RandomizeCryptoKey(); }
|
|
}
|
|
|
|
ObscuredInt _DropCountMax;
|
|
public int n_DropCountMax
|
|
{
|
|
get { return _DropCountMax; }
|
|
set { _DropCountMax = value; _DropCountMax.RandomizeCryptoKey(); }
|
|
}
|
|
|
|
public int Get_Count() { return Random.Range(n_DropCountMin, n_DropCountMax + 1); }
|
|
|
|
}
|
|
|
|
public class table_RewardRandomBag : table_base
|
|
{
|
|
public static table_RewardRandomBag Ins;
|
|
|
|
List<RewardRandomBagTableData> tableDatas;
|
|
Dictionary<int, List<RewardRandomBagTableData>> dic_Datas = new Dictionary<int, List<RewardRandomBagTableData>>();
|
|
|
|
protected override void Awake()
|
|
{
|
|
Ins = this;
|
|
base.Awake();
|
|
}
|
|
|
|
protected override void Start()
|
|
{
|
|
tableDatas = JsonConvert.DeserializeObject<List<RewardRandomBagTableData>>(json_last);
|
|
for (int i = 0; i < tableDatas.Count; i++)
|
|
{
|
|
var temp = tableDatas[i];
|
|
if (!dic_Datas.ContainsKey(temp.n_DropIndex))
|
|
dic_Datas.Add(temp.n_DropIndex, new List<RewardRandomBagTableData>());
|
|
dic_Datas[temp.n_DropIndex].Add(temp);
|
|
}
|
|
base.Start();
|
|
}
|
|
|
|
public List<RewardRandomBagTableData> Get_DataList() { return tableDatas; }
|
|
public List<RewardRandomBagTableData> Get_Datas(int index) { return dic_Datas[index]; }
|
|
|
|
public ItemSimpleData Get_Reward(int index)
|
|
{
|
|
if (dic_Datas.ContainsKey(index))
|
|
{
|
|
var lst = dic_Datas[index];
|
|
if (lst == null || lst.Count == 0)
|
|
{
|
|
Popup.Ins.Set($"랜덤백 ID({index})에 설정된 아이템이 없습니다.");
|
|
return new ItemSimpleData();
|
|
}
|
|
|
|
// 전체 확률 합계 구하기
|
|
int totalWeight = 0;
|
|
for (int i = 0; i < lst.Count; i++)
|
|
totalWeight += lst[i].n_DropRate;
|
|
|
|
if (totalWeight <= 0)
|
|
{
|
|
Popup.Ins.Set($"랜덤백 ID({index})에 설정된 가중치가 없습니다.");
|
|
return new ItemSimpleData();
|
|
}
|
|
|
|
// 랜덤값 추출 (1 ~ totalWeight)
|
|
int rand = Random.Range(1, totalWeight + 1);
|
|
|
|
// 가중치에 따라 선택
|
|
int cumulative = 0;
|
|
for (int i = 0; i < lst.Count; i++)
|
|
{
|
|
cumulative += lst[i].n_DropRate;
|
|
if (rand <= cumulative)
|
|
{
|
|
if (table_ItemList.Ins.Get_Data_orNull(lst[i].n_ItemId) == null)
|
|
Popup.Ins.Set($"랜덤백에 설정된 아이템 ID({lst[i].n_ItemId})는 아이템 테이블에 없는 아이템입니다.");
|
|
return new ItemSimpleData { itemid = lst[i].n_ItemId, amount = lst[i].Get_Count() };
|
|
}
|
|
}
|
|
}
|
|
|
|
Popup.Ins.Set($"랜덤백 ID({index})는 테이블에 없습니다.");
|
|
return new ItemSimpleData();
|
|
}
|
|
} |