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; 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); var remaincount = m_Count - (int)sdata.Get_ItemAmount(m_Data.n_GachaTicketID); moneyForms[1].Set_Need(m_Data.n_GachaGoodsID, remaincount * 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); 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); break; case eGachaBtnType.OnlyCash: sdata.Use_Item(m_Data.n_GachaGoodsID, m_Count * m_Data.n_GachaPrice); break; default: ToastUI.Ins.Set(388); return; } ServerInfo.Ins.Save_Gacha(m_Data.n_ID, m_Count, result => { List items = new List(); for (int i = 0; i < result.gacha.Count; i++) { items.Add(new ItemSimpleData { itemid = result.gacha[i], amount = 1 }); sdata.Add_Item(result.gacha[i], 1); sdata.Add_Gacha(m_Data.n_ID, 1); } 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(); }); return; // 클라 기반 //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 items = new List(); List grades = new List(); 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); } ServerInfo.Ins.Write(() => { ObtainItemUI.Ins.Set(items); NewGameUI.Ins.m_GachaUI.Set_Money(); NewGameUI.Ins.m_GachaUI.m_gachaBase.Set_UI(); }); } }