Project_WL/Assets/Script/UI/Gacha/btn_gacha.cs

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();
}
}