185 lines
6.9 KiB
C#
185 lines
6.9 KiB
C#
using CodeStage.AntiCheat.ObscuredTypes;
|
|
using System.Collections.Generic;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
|
|
public class btn_gacha : MonoBehaviour
|
|
{
|
|
public TextMeshProUGUI[] texts; // 0 0회 뽑기
|
|
public MoneyForm[] moneyForms;
|
|
|
|
enum eGachaBtnType { OnlyTicket, TicketAndCash, OnlyCash, CantGacha }
|
|
|
|
GachaConfigTableData m_Data;
|
|
public ObscuredInt _count;
|
|
public int m_Count
|
|
{
|
|
get { return _count; }
|
|
set { _count = value; _count.RandomizeCryptoKey(); }
|
|
}
|
|
|
|
public void Set(int count, GachaConfigTableData gachaConfigTableData)
|
|
{
|
|
m_Count = count;
|
|
m_Data = gachaConfigTableData;
|
|
var sdata = ServerInfo.Ins.m_ServerData;
|
|
|
|
texts[0].text = DSUtil.Format(382, m_Count);
|
|
|
|
switch (Get_BtnType())
|
|
{
|
|
case eGachaBtnType.OnlyTicket:
|
|
moneyForms[0].gameObject.SetActive(true);
|
|
moneyForms[0].Set_Need(m_Data.n_GachaTicketID, m_Count);
|
|
moneyForms[1].gameObject.SetActive(false);
|
|
break;
|
|
case eGachaBtnType.TicketAndCash:
|
|
moneyForms[0].gameObject.SetActive(true);
|
|
moneyForms[0].Set_Need(m_Data.n_GachaTicketID, m_Count);
|
|
moneyForms[1].gameObject.SetActive(true);
|
|
moneyForms[1].Set_Need(m_Data.n_GachaGoodsID, m_Count - (int)sdata.Get_ItemAmount(m_Data.n_GachaTicketID) * m_Data.n_GachaPrice);
|
|
break;
|
|
case eGachaBtnType.OnlyCash:
|
|
case eGachaBtnType.CantGacha:
|
|
moneyForms[0].gameObject.SetActive(true);
|
|
moneyForms[0].Set_Need(m_Data.n_GachaGoodsID, m_Count * m_Data.n_GachaPrice);
|
|
moneyForms[1].gameObject.SetActive(false);
|
|
break;
|
|
}
|
|
}
|
|
|
|
eGachaBtnType Get_BtnType()
|
|
{
|
|
var sdata = ServerInfo.Ins.m_ServerData;
|
|
if (sdata.Check_ItemAmount(m_Data.n_GachaTicketID, m_Count, false))
|
|
return eGachaBtnType.OnlyTicket; // 뽑기권이 충분하면 뽑기권만
|
|
else if (sdata.Get_ItemAmount(m_Data.n_GachaTicketID) > 0)
|
|
{
|
|
var remaincount = m_Count - (int)sdata.Get_ItemAmount(m_Data.n_GachaTicketID);
|
|
if (sdata.Check_ItemAmount(m_Data.n_GachaGoodsID, remaincount * m_Data.n_GachaPrice, false))
|
|
return eGachaBtnType.TicketAndCash; // 뽑기권이 횟수만큼 부족하지만 부족한 만큼 캐시 사용
|
|
}
|
|
|
|
if (sdata.Check_ItemAmount(m_Data.n_GachaGoodsID, m_Count * m_Data.n_GachaPrice, false))
|
|
return eGachaBtnType.OnlyCash; // 캐시만 사용할 때
|
|
|
|
return eGachaBtnType.CantGacha;
|
|
}
|
|
|
|
public void OnClick_Gacha()
|
|
{
|
|
var sdata = ServerInfo.Ins.m_ServerData;
|
|
switch (Get_BtnType())
|
|
{
|
|
case eGachaBtnType.OnlyTicket:
|
|
sdata.Use_Item(m_Data.n_GachaTicketID, m_Count);
|
|
Gacha_Process();
|
|
break;
|
|
case eGachaBtnType.TicketAndCash:
|
|
var ticketamount = sdata.Get_ItemAmount(m_Data.n_GachaTicketID);
|
|
sdata.Use_Item(m_Data.n_GachaGoodsID, (m_Count - ticketamount) * m_Data.n_GachaPrice);
|
|
sdata.Use_Item(m_Data.n_GachaTicketID, ticketamount);
|
|
Gacha_Process();
|
|
break;
|
|
case eGachaBtnType.OnlyCash:
|
|
sdata.Use_Item(m_Data.n_GachaGoodsID, m_Count * m_Data.n_GachaPrice);
|
|
Gacha_Process();
|
|
break;
|
|
default:
|
|
ToastUI.Ins.Set(388);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Gacha_Process()
|
|
{
|
|
var sdata = ServerInfo.Ins.m_ServerData;
|
|
var rateData = table_gacharate.Ins.Get_Data(m_Data.n_ID, m_Data.b_StageLv ? sdata.MapData_Get_MaxChapter() : 1);
|
|
List<ItemSimpleData> items = new List<ItemSimpleData>();
|
|
List<int> grades = new List<int>();
|
|
var benefit1Count = table_GlobalValue.Ins.Get_Int("n_Benefit1Count");
|
|
var benefit2Count = table_GlobalValue.Ins.Get_Int("n_Benefit2Count");
|
|
var benefit1Grade = table_GlobalValue.Ins.Get_Int("n_Benefit1Grade");
|
|
var benefit2Grade = table_GlobalValue.Ins.Get_Int("n_Benefit2Grade");
|
|
var benefit1 = false;
|
|
var benefit2 = false;
|
|
for (int i = 0; i < m_Count; i++)
|
|
{
|
|
var grade = rateData.Get_RandomGrade();
|
|
grades.Add(grade);
|
|
var item = table_gacharandombag.Ins.Get_RandomItemData(m_Data.dic_randomgbag[m_Count], grade);
|
|
items.Add(item);
|
|
|
|
sdata.Add_Gacha(m_Data.n_ID, 1);
|
|
var gachaCount = sdata.Get_GachaCount(m_Data.n_ID);
|
|
if (!benefit1 && gachaCount >= benefit1Count && gachaCount % benefit1Count == 0) benefit1 = true;
|
|
if (!benefit2 && gachaCount >= benefit2Count && gachaCount % benefit2Count == 0) benefit2 = true;
|
|
}
|
|
|
|
// gachacount 가 10일 때마다 4등급 아이템 하나가 포함되어야 함
|
|
if (benefit1)
|
|
{
|
|
bool existgrade1 = false;
|
|
for (int i = 0; i < grades.Count; i++)
|
|
{
|
|
if (!existgrade1 && grades[i] == benefit1Grade)
|
|
existgrade1 = true;
|
|
}
|
|
|
|
if (!existgrade1)
|
|
{
|
|
for (int i = grades.Count - 1; i > 0 ; i--)
|
|
{
|
|
if (grades[i] < benefit1Grade)
|
|
{
|
|
items[i] = table_gacharandombag.Ins.Get_RandomItemData(m_Data.dic_randomgbag[m_Count], benefit1Grade);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// gachacount 가 50일 때마다 5등급 아이템 하나가 포함되어야 함
|
|
if (benefit2)
|
|
{
|
|
bool existgrade2 = false;
|
|
for (int i = 0; i < grades.Count; i++)
|
|
{
|
|
if (!existgrade2 && grades[i] == benefit2Grade)
|
|
existgrade2 = true;
|
|
}
|
|
|
|
if (!existgrade2)
|
|
{
|
|
for (int i = grades.Count - 1; i >= 0; i--)
|
|
{
|
|
if (grades[i] < benefit2Grade)
|
|
{
|
|
items[i] = table_gacharandombag.Ins.Get_RandomItemData(m_Data.dic_randomgbag[m_Count], benefit2Grade);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
for (int i = 0; i < items.Count; i++)
|
|
sdata.Add_Item(items[i].itemid, items[i].amount);
|
|
|
|
sdata.Add_MissionCount(ePurpose.GACHA_ALL, 0, m_Count);
|
|
if (m_Data.isSkillGacha)
|
|
{
|
|
sdata.Add_MissionCount(ePurpose.GACHA_SKILL, 0, m_Count);
|
|
sdata.Add_MissionCount(ePurpose.GACHA_SKILL_ACC, 0, m_Count);
|
|
}
|
|
else
|
|
{
|
|
sdata.Add_MissionCount(ePurpose.GACHA_EQUIP, 0, m_Count);
|
|
sdata.Add_MissionCount(ePurpose.GACHA_EQUIP_ACC, 0, m_Count);
|
|
}
|
|
|
|
ObtainItemUI.Ins.Set(items);
|
|
NewGameUI.Ins.m_GachaUI.Set_Money();
|
|
NewGameUI.Ins.m_GachaUI.m_gachaBase.Set_UI();
|
|
}
|
|
} |