using IVDataFormat; using IVServerFormat; using TMPro; using UnityEngine; using UnityEngine.UI; public class AdBuffMgr : MonoSingleton { #region Button [SerializeField] GameObject buttonWrap; [SerializeField] GameObject adbuffBadge; ButtonIV btnAtk; ButtonIV btnGold; ButtonIV btnExp; TextMeshProUGUI txtTimerAtk; TextMeshProUGUI txtTimerGold; TextMeshProUGUI txtTimerExp; Transform atkOn, goldOn, expOn; #endregion #region Buff Window [SerializeField] Canvas canvasUI; [SerializeField] GameObject bg; [SerializeField] GameObject imgAd; TextMeshProUGUI buffTitle; GameObject[] buffTabSet = new GameObject[3]; GameObject[] buffIconOn = new GameObject[3]; GameObject[] buffIconOff = new GameObject[3]; TextMeshProUGUI[] txtBuffLevel = new TextMeshProUGUI[3]; TextMeshProUGUI[] txtBuffTitle = new TextMeshProUGUI[3]; TextMeshProUGUI[] txtBuffDesc = new TextMeshProUGUI[3]; ButtonIV[] btnBuffAd = new ButtonIV[3]; TextMeshProUGUI[] txtBuffOn = new TextMeshProUGUI[3]; TextMeshProUGUI[] txtTimer = new TextMeshProUGUI[3]; TextMeshProUGUI[] txtBuffExpNum = new TextMeshProUGUI[3]; Slider[] sldBuffExp = new Slider[3]; ButtonIV[] btnBuffLvUp = new ButtonIV[3]; ParticleSystem[] ptcLevelUp = new ParticleSystem[3]; GameObject[] btnLevelBedge = new GameObject[3]; TextMeshProUGUI[] txtBuffLvUp = new TextMeshProUGUI[3]; GameObject[] timerInf = new GameObject[3]; GameObject[] buffMax = new GameObject[3]; #endregion #region Variables public enum AdNumber { atk=0, gold=1, exp=2 } private bool bReLocalize = true; int[] adTimer = new int[3] { -1, -1, -1 }; public static int[] GetAdTImer() { return Instance.adTimer; } int adTime = 1800;//광고로 인한 추가시간 int atkBuff = 1000000; int goldDrop = 500000; int expDrop = 500000; bool isNoAd = false; #endregion Variables #region Base private void OnApplicationFocus(bool focus) { DataHandler.PlayBuff.Save(DataHandler.PlayData.server); } private void OnApplicationQuit() { DataHandler.PlayBuff.Save(DataHandler.PlayData.server); } public static void SLocalize(bool bmain) => Instance?.Localize(bmain); private void Localize(bool bmain) { if (bmain) { btnAtk = buttonWrap.transform.Find("buffatk").GetComponent(); btnGold = buttonWrap.transform.Find("buffgold").GetComponent(); btnExp = buttonWrap.transform.Find("buffexp").GetComponent(); txtTimerAtk = btnAtk.transform.Find("timer").GetComponent(); txtTimerGold = btnGold.transform.Find("timer").GetComponent(); txtTimerExp = btnExp.transform.Find("timer").GetComponent(); atkOn = btnAtk.transform.Find("On"); goldOn = btnGold.transform.Find("On"); expOn = btnExp.transform.Find("On"); BadgeActive(); } else { bReLocalize = false; buffTabSet[(int)AdNumber.atk] = bg.transform.Find("BuffTabSetAtk").gameObject; buffTabSet[(int)AdNumber.gold] = bg.transform.Find("BuffTabSetGold").gameObject; buffTabSet[(int)AdNumber.exp] = bg.transform.Find("BuffTabSetExp").gameObject; buffTitle = bg.transform.Find("txtT").GetComponent(); bg.transform.Find("txtB").GetComponent().text = LocalizationText.GetText("adbuff_adbuff_effect"); imgAd.transform.Find("imgAd").transform.Find("txtAdTitle").GetComponent().text = LocalizationText.GetText("adbuff_img_title"); imgAd.transform.Find("imgAd").transform.Find("txtAdDescribe").GetComponent().text = LocalizationText.GetText("adbuff_img_describe"); imgAd.transform.Find("imgAd").transform.Find("txtAdPurchase").GetComponent().text = LocalizationText.GetText("adbuff_img_purchase"); buffTitle.text = LocalizationText.GetText("adbuff_title"); for (int i = 0; i < buffTabSet.Length; i++) { txtBuffLevel[i] = buffTabSet[i].transform.Find("txtBuffLv").GetComponent(); txtBuffTitle[i] = buffTabSet[i].transform.Find("txtBuffLabel").GetComponent(); txtBuffDesc[i] = buffTabSet[i].transform.Find("txtBuffDesc").GetComponent(); btnBuffAd[i] = buffTabSet[i].transform.Find("btnBuffAd").GetComponent(); txtBuffOn[i] = btnBuffAd[i].transform.GetChild(0).GetComponent(); txtTimer[i] = buffTabSet[i].transform.Find("txtTimer").GetComponent(); txtBuffExpNum[i] = buffTabSet[i].transform.Find("txtExpNum").GetComponent(); sldBuffExp[i] = buffTabSet[i].transform.Find("sldExp").GetComponent(); btnBuffLvUp[i] = buffTabSet[i].transform.Find("btnBuffLvUp").GetComponent(); btnLevelBedge[i] = btnBuffLvUp[i].transform.Find("badge").gameObject; txtBuffLvUp[i] = buffTabSet[i].transform.Find("txtBuffLvUp").GetComponent(); buffIconOn[i] = buffTabSet[i].transform.Find("imgOnBufficon").gameObject; buffIconOff[i] = buffTabSet[i].transform.Find("imgOffBufficon").gameObject; ptcLevelUp[i] = buffTabSet[i].transform.Find("ptcLevelUp").GetComponent(); timerInf[i] = buffTabSet[i].transform.Find("imgTimerInf").gameObject; buffMax[i] = buffTabSet[i].transform.Find("btnBuffMax").gameObject; } for (int i = 0; i < buffTabSet.Length; i++) { txtBuffOn[i].text = LocalizationText.GetText("adbuff_playad"); txtBuffLvUp[i].text = LocalizationText.GetText("adbuff_levelup"); switch (i) { case (int)AdNumber.atk: txtBuffTitle[i].text = LocalizationText.GetText("adbuff_atk_buff"); txtBuffDesc[i].text = FormatString.StringFormat("{0} + {1} %", LocalizationText.GetText("adbuff_atk_buff_per"), 100); break; case (int)AdNumber.gold: txtBuffTitle[i].text = LocalizationText.GetText("adbuff_gold_buff"); txtBuffDesc[i].text = FormatString.StringFormat("{0} + {1} %", LocalizationText.GetText("adbuff_gold_buff_per"), 100); break; case (int)AdNumber.exp: txtBuffTitle[i].text = LocalizationText.GetText("adbuff_exp_buff"); txtBuffDesc[i].text = FormatString.StringFormat("{0} + {1} %", LocalizationText.GetText("adbuff_exp_buff_per"), 100); break; } } } } // 설정에서 언어 변경 시 처리. public static void SReLocalize() { Instance.Localize(true); Instance.bReLocalize = true; } //게임을 시작할떄 광고버프가 광고제거가 되어있는지 아닌지를 판별한다. public static void InitRemainBuff() { if (Instance.bReLocalize) Instance.Localize(false); //광고버프가 구매된 상태라면 게임 시작할때 버프를 바로 틀어준다. const int removeAdShopID = 1; if (DataHandler.GetShop(removeAdShopID).buyCnt >= 1) { Instance.AdBuffNoAd(); return; } //광고버프가 구매되지 않은 상태라면 현재 지속시간을 불러와서 지속시간이 남아있는 버프를 켠다. Instance.adTimer = DataHandler.PlayBuff.adTimer; if (Instance.adTimer[(int)AdNumber.atk] > 0) { StartOnAdBuffAttack(); } if (Instance.adTimer[(int)AdNumber.exp] > 0) { StartOnAdBuffExp(); } if (Instance.adTimer[(int)AdNumber.gold] > 0) { StartOnAdBuffGold(); } } #endregion Base #region BuffWindow OnOff public static void SMoveAdbuff() { Instance.BuffWindowOn(); } public void BuffWindowOn()//버프 버튼을 눌러서 버프 창을 열음 { for (int i = 0; i < buffIconOn.Length; i++) buffIconOn[i].SetActive(!buffIconOff[i].activeSelf); canvasUI.enabled = true; BattleMgr.CloseFailScroll(); if (bReLocalize) Localize(false); atkBuff = DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.atkLv).atkValue; goldDrop = DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.goldLv).goldValue; expDrop = DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.expLv).expValue; //imgAd.SetActive(!isNoAd); BuffLevelSet(AdNumber.atk); BuffLevelSet(AdNumber.gold); BuffLevelSet(AdNumber.exp); BuffExpSet(AdNumber.atk); BuffExpSet(AdNumber.gold); BuffExpSet(AdNumber.exp); //SampleAdsMgr.LoadRewardedAd(); if (DataHandler.GetShop(1).buyCnt == 1) { AdBuffNoAd(); } SoundMgr.Instance.PlaySfx(SoundName.BtnPress); ButtonActive(); } public void BuffWindowOff()//열린 창을 닫음 { MissionMgr.SRefreshMission(); canvasUI.enabled = false; SoundMgr.Instance.PlaySfx(SoundName.BtnPress); for (int i = 0; i < buffIconOn.Length; i++) buffIconOn[i].SetActive(false); } public void ButtonActive()//레벨업 버튼 활성화 여부를 판별한다. { if (DataHandler.PlayBuff.atkExp >= DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.atkLv + 1).exp) { btnBuffLvUp[(int)AdNumber.atk].interactable = true; btnLevelBedge[(int)AdNumber.atk].SetActive(true); if (buffMax[(int)AdNumber.atk].activeSelf) { btnLevelBedge[(int)AdNumber.atk].SetActive(false); } } else { btnBuffLvUp[(int)AdNumber.atk].interactable = false; btnLevelBedge[(int)AdNumber.atk].SetActive(false); } if (DataHandler.PlayBuff.goldExp >= DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.goldLv + 1).exp) { btnBuffLvUp[(int)AdNumber.gold].interactable = true; btnLevelBedge[(int)AdNumber.gold].SetActive(true); if (buffMax[(int)AdNumber.gold].activeSelf) { btnLevelBedge[(int)AdNumber.gold].SetActive(false); } } else { btnBuffLvUp[(int)AdNumber.gold].interactable = false; btnLevelBedge[(int)AdNumber.gold].SetActive(false); } if (DataHandler.PlayBuff.expExp >= DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.expLv + 1).exp) { btnBuffLvUp[(int)AdNumber.exp].interactable = true; btnLevelBedge[(int)AdNumber.exp].SetActive(true); if (buffMax[(int)AdNumber.exp].activeSelf) { btnLevelBedge[(int)AdNumber.exp].SetActive(false); } } else { btnBuffLvUp[(int)AdNumber.exp].interactable = false; btnLevelBedge[(int)AdNumber.exp].SetActive(false); } } int activeBadge = 0; public void BadgeActive()//메인메뉴의 뱃지 활성화 여부를 판별한다. { if (DataHandler.PlayBuff.atkExp >= DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.atkLv + 1).exp) { //badge[(int)AdNumber.atk].SetActive(true); activeBadge++; if (DataHandler.PlayBuff.atkLv >= DataHandler.GetSysAdBuffs().Length) { //badge[(int)AdNumber.atk].SetActive(false); activeBadge--; } } else { //badge[(int)AdNumber.atk].SetActive(false); } if (DataHandler.PlayBuff.goldExp >= DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.goldLv + 1).exp) { //badge[(int)AdNumber.gold].SetActive(true); activeBadge++; if (DataHandler.PlayBuff.goldLv >= DataHandler.GetSysAdBuffs().Length) { //badge[(int)AdNumber.gold].SetActive(false); activeBadge--; } } else { //badge[(int)AdNumber.gold].SetActive(false); } if (DataHandler.PlayBuff.expExp >= DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.expLv + 1).exp) { //badge[(int)AdNumber.exp].SetActive(true); activeBadge++; if (DataHandler.PlayBuff.expLv >= DataHandler.GetSysAdBuffs().Length) { //badge[(int)AdNumber.exp].SetActive(false); activeBadge--; } } else { //badge[(int)AdNumber.exp].SetActive(false); } if (activeBadge > 0)//메인메뉴의 광고버프 뱃지는 하나이므로 한개 이상 조건을 만족하면 뱃지를 틀어준다. { adbuffBadge.SetActive(true); activeBadge = 0; } else { adbuffBadge.SetActive(false); activeBadge = 0; } } #endregion #region BuffStartOn public static void StartOnAdBuffAttack()//공격 벼프를 틀고 타이머를 세팅하며 버프아이콘을 교체하고 스텟을 재계산한다. 하위 3개는 게임 시작할때 조건에 따라 작동된다. { BuffMgr.Instance.OnAdBuff(eEffectType.AtkBuff, Instance.atkBuff, true); Instance.btnAtk.interactable = false; Instance.btnBuffAd[(int)AdNumber.atk].interactable = false; Instance.txtBuffOn[(int)AdNumber.atk].gameObject.SetActive(false); Instance.atkOn.gameObject.SetActive(true); Instance.txtTimerAtk.gameObject.SetActive(true); Instance.SetTimer((int)AdNumber.atk); Instance.SwitchBuffIcon((int)AdNumber.atk, true); BattleMgr.StatRecalc(); EnhanceMgr.Instance.CalcPlayerInfoStat(); } public static void StartOnAdBuffGold()//골드 벼프를 틀고 타이머를 세팅하며 버프아이콘을 교체하고 스텟을 재계산한다. { BuffMgr.Instance.OnAdBuff(eEffectType.GoldDropRate, Instance.goldDrop, true); Instance.btnGold.interactable = false; Instance.btnBuffAd[(int)AdNumber.gold].interactable = false; Instance.txtBuffOn[(int)AdNumber.gold].gameObject.SetActive(false); Instance.goldOn.gameObject.SetActive(true); Instance.txtTimerGold.gameObject.SetActive(true); Instance.SetTimer((int)AdNumber.gold); Instance.SwitchBuffIcon((int)AdNumber.gold, true); EnhanceMgr.Instance.CalcPlayerInfoStat(); } public static void StartOnAdBuffExp()//경험치 벼프를 틀고 타이머를 세팅하며 버프아이콘을 교체하고 스텟을 재계산한다. { BuffMgr.Instance.OnAdBuff(eEffectType.ExpDropRate, Instance.expDrop, true); Instance.btnExp.interactable = false; Instance.btnBuffAd[(int)AdNumber.exp].interactable = false; Instance.txtBuffOn[(int)AdNumber.exp].gameObject.SetActive(false); Instance.expOn.gameObject.SetActive(true); Instance.txtTimerExp.gameObject.SetActive(true); Instance.SetTimer((int)AdNumber.exp); Instance.SwitchBuffIcon((int)AdNumber.exp, true); EnhanceMgr.Instance.CalcPlayerInfoStat(); } #endregion #region Buff OnOff public static void btnOnAdBuffAttack()//광고를 틀고 광고가 전부 봐졌다면 버프를 실행한다. 광고제거가 있다면 계속 유지되므로 여기서는 구매여부를 점검하지 않는다. { //SampleAdsMgr.ShowAds(); SampleAdsMgr.ShowRewardedAd(SampleAdsMgr.ADRewardType.AdAtkBuff); //OnAdBuffAttack(); SoundMgr.Instance.PlaySfx(SoundName.BtnPress); } public static void SOnAdBuffAttack() { Instance.OnAdBuffAttack(); } private void OnAdBuffAttack()//광고를 보고나서 실행하는 부분. 하위 3개 묶음씩은 각 경험치와 골드를 보는 곳이다. { BuffMgr.Instance.OnAdBuff(eEffectType.AtkBuff, Instance.atkBuff, true); Instance.btnAtk.interactable = false; Instance.btnBuffAd[(int)AdNumber.atk].interactable = false; Instance.txtBuffOn[(int)AdNumber.atk].gameObject.SetActive(false); Instance.atkOn.gameObject.SetActive(true); Instance.txtTimerAtk.gameObject.SetActive(true); Instance.adTimer[(int)AdNumber.atk] = Instance.adTime; Instance.SetTimer((int)AdNumber.atk); Instance.SwitchBuffIcon((int)AdNumber.atk, true); BattleMgr.StatRecalc(); EnhanceMgr.Instance.CalcPlayerInfoStat(); } public static void btnOnAdBuffGold()//골드 { SampleAdsMgr.ShowRewardedAd(SampleAdsMgr.ADRewardType.AdGoldBuff); SoundMgr.Instance.PlaySfx(SoundName.BtnPress); } public static void SOnAdBuffGold() { Instance.OnAdBuffGold(); } private void OnAdBuffGold() { BuffMgr.Instance.OnAdBuff(eEffectType.GoldDropRate, Instance.goldDrop, true); Instance.btnGold.interactable = false; Instance.btnBuffAd[(int)AdNumber.gold].interactable = false; Instance.txtBuffOn[(int)AdNumber.gold].gameObject.SetActive(false); Instance.goldOn.gameObject.SetActive(true); Instance.txtTimerGold.gameObject.SetActive(true); Instance.adTimer[(int)AdNumber.gold] = Instance.adTime; Instance.SetTimer((int)AdNumber.gold); Instance.SwitchBuffIcon((int)AdNumber.gold, true); EnhanceMgr.Instance.CalcPlayerInfoStat(); } public static void btnOnAdBuffExp()//경험치 { SampleAdsMgr.ShowRewardedAd(SampleAdsMgr.ADRewardType.AdExpBuff); SoundMgr.Instance.PlaySfx(SoundName.BtnPress); } public static void SOnAdBuffExp() { Instance.OnAdBuffExp(); } private void OnAdBuffExp() { BuffMgr.Instance.OnAdBuff(eEffectType.ExpDropRate, Instance.expDrop, true); Instance.btnExp.interactable = false; Instance.btnBuffAd[(int)AdNumber.exp].interactable = false; Instance.txtBuffOn[(int)AdNumber.exp].gameObject.SetActive(false); Instance.expOn.gameObject.SetActive(true); Instance.txtTimerExp.gameObject.SetActive(true); Instance.adTimer[(int)AdNumber.exp] = Instance.adTime; Instance.SetTimer((int)AdNumber.exp); Instance.SwitchBuffIcon((int)AdNumber.exp, true); EnhanceMgr.Instance.CalcPlayerInfoStat(); } public static void btnOffAdBuffAttack()//광고제거가 없고 타이머가 다 되었을때 버프를 종료한다. { BuffMgr.Instance.OffAdBuff(eEffectType.AtkBuff, true); Instance.btnAtk.interactable = true; Instance.btnBuffAd[(int)AdNumber.atk].interactable = true; Instance.txtBuffOn[(int)AdNumber.atk].gameObject.SetActive(true); Instance.atkOn.gameObject.SetActive(false); Instance.txtTimerAtk.gameObject.SetActive(false); Instance.SwitchBuffIcon((int)AdNumber.atk, false); BattleMgr.StatRecalc(); EnhanceMgr.Instance.CalcPlayerInfoStat(); Instance.txtBuffOn[(int)AdNumber.atk].text = LocalizationText.GetText("adbuff_playad"); } public static void btnOffAdBuffGold() { BuffMgr.Instance.OffAdBuff(eEffectType.GoldDropRate, true); Instance.btnGold.interactable = true; Instance.btnBuffAd[(int)AdNumber.gold].interactable = true; Instance.txtBuffOn[(int)AdNumber.gold].gameObject.SetActive(true); Instance.goldOn.gameObject.SetActive(false); Instance.txtTimerGold.gameObject.SetActive(false); Instance.SwitchBuffIcon((int)AdNumber.gold, false); EnhanceMgr.Instance.CalcPlayerInfoStat(); Instance.txtBuffOn[(int)AdNumber.gold].text = LocalizationText.GetText("adbuff_playad"); } public static void btnOffAdBuffExp() { BuffMgr.Instance.OffAdBuff(eEffectType.ExpDropRate, true); Instance.btnExp.interactable = true; Instance.btnBuffAd[(int)AdNumber.exp].interactable = true; Instance.txtBuffOn[(int)AdNumber.exp].gameObject.SetActive(true); Instance.expOn.gameObject.SetActive(false); Instance.txtTimerExp.gameObject.SetActive(false); Instance.SwitchBuffIcon((int)AdNumber.exp, false); EnhanceMgr.Instance.CalcPlayerInfoStat(); Instance.txtBuffOn[(int)AdNumber.exp].text = LocalizationText.GetText("adbuff_playad"); } private void SwitchBuffIcon(int inum, bool bOn)//버프 여부에 따른 아이콘 교체 { switch (inum) { case (int)AdNumber.atk: if (canvasUI.enabled) buffIconOn[(int)AdNumber.atk].gameObject.SetActive(bOn); buffIconOff[(int)AdNumber.atk].gameObject.SetActive(!bOn); break; case (int)AdNumber.gold: if (canvasUI.enabled) buffIconOn[(int)AdNumber.gold].gameObject.SetActive(bOn); buffIconOff[(int)AdNumber.gold].gameObject.SetActive(!bOn); break; case (int)AdNumber.exp: if (canvasUI.enabled) buffIconOn[(int)AdNumber.exp].gameObject.SetActive(bOn); buffIconOff[(int)AdNumber.exp].gameObject.SetActive(!bOn); break; } } #endregion #region Time public static void SUpdateOneSec() { if (Instance != null) Instance.UpdateOneSec(); } // 매초마다 실행. SingleMgr에서 호출. private void UpdateOneSec() { if (BattleMgr.Instance.BattlePause) return; for (int i = 0; i < adTimer.Length; i++) { var timer = adTimer[i]; AdNumber adNum = (AdNumber)i; if (timer < 0) continue; if (timer >= 0 || isNoAd) //타이머가 남아있거나 광고제거가 구매되어있다면 진입한다. { if(timer >= 0 && !isNoAd) //타이머가 남아있는데 광고제거가 없다면 타이머가 줄어든다. timer -= 1; //초당 시간 줄어드는 양 var adBuff = DataHandler.GetSysAdBuffLevel(DataHandler.GetSysAdBuffMaxLevel()); switch (adNum) //1초당 경험치 1을 추가한다. { case AdNumber.atk: if (adBuff.exp > DataHandler.PlayBuff.atkExp) { DataHandler.PlayBuff.atkExp += 1;//초당 경험치량 if(adBuff.exp < DataHandler.PlayBuff.atkExp) { DataHandler.PlayBuff.atkExp = adBuff.exp; } BuffExpSet(AdNumber.atk); BadgeActive(); } break; case AdNumber.gold: if (adBuff.exp > DataHandler.PlayBuff.goldExp) { DataHandler.PlayBuff.goldExp += 1;//초당 경험치량 if (adBuff.exp < DataHandler.PlayBuff.goldExp) { DataHandler.PlayBuff.goldExp = adBuff.exp; } BuffExpSet(AdNumber.gold); BadgeActive(); } break; case AdNumber.exp: if (adBuff.exp > DataHandler.PlayBuff.expExp) { DataHandler.PlayBuff.expExp += 1;//초당 경험치량 if (adBuff.exp < DataHandler.PlayBuff.expExp) { DataHandler.PlayBuff.expExp = adBuff.exp; } BuffExpSet(AdNumber.exp); BadgeActive(); } break; } if (timer <= 0) { switch (adNum) { case AdNumber.atk: btnOffAdBuffAttack(); break; case AdNumber.gold: btnOffAdBuffGold(); break; case AdNumber.exp: btnOffAdBuffExp(); break; } } else { SetTimer(i); } } } if(canvasUI.isActiveAndEnabled) { ButtonActive(); } } private void SetTimer(int i)//1분 이상 남았을때와 이하로 남았을때 표시하는 방식을 다르게 해준다. { if (adTimer[i] < 60) { switch ((AdNumber)i) { case AdNumber.atk: txtTimerAtk.text = FormatString.StringFormat("{0}s", adTimer[i]); txtTimer[(int)AdNumber.atk].text = FormatString.StringFormat("{0} : {1}", adTimer[i] / 60, adTimer[i] % 60); break; case AdNumber.gold: txtTimerGold.text = FormatString.StringFormat("{0}s", adTimer[i]); txtTimer[(int)AdNumber.gold].text = FormatString.StringFormat("{0} : {1}", adTimer[i] / 60, adTimer[i] % 60); break; case AdNumber.exp: txtTimerExp.text = FormatString.StringFormat("{0}s", adTimer[i]); txtTimer[(int)AdNumber.exp].text = FormatString.StringFormat("{0} : {1}", adTimer[i] / 60, adTimer[i] % 60); break; } } else { switch ((AdNumber)i) { case AdNumber.atk: txtTimerAtk.text = FormatString.StringFormat("{0:0}m", adTimer[i]/60); txtTimer[(int)AdNumber.atk].text = FormatString.StringFormat("{0} : {1}", adTimer[i] / 60, adTimer[i] % 60); break; case AdNumber.gold: txtTimerGold.text = FormatString.StringFormat("{0:0}m", adTimer[i]/60); txtTimer[(int)AdNumber.gold].text = FormatString.StringFormat("{0} : {1}", adTimer[i] / 60, adTimer[i] % 60); break; case AdNumber.exp: txtTimerExp.text = FormatString.StringFormat("{0:0}m", adTimer[i]/60); txtTimer[(int)AdNumber.exp].text = FormatString.StringFormat("{0} : {1}", adTimer[i] / 60, adTimer[i] % 60); break; } } } #endregion Time #region AdFree public static void SAdBUffNoAd() { Instance.AdBuffNoAd(); } //광고제거가 구매되었다면 타이머를 제거하고 무제한 표시를 활성화한다. public void AdBuffNoAd() { SOnAdBuffAttack(); SOnAdBuffGold(); SOnAdBuffExp(); imgAd.SetActive(false); txtTimerAtk.gameObject.SetActive(false); txtTimerGold.gameObject.SetActive(false); txtTimerExp.gameObject.SetActive(false); for (int i = 0; i < btnBuffAd.Length; i++) { isNoAd = true; btnBuffAd[i].gameObject.SetActive(false); txtTimer[i].gameObject.SetActive(false); timerInf[i].SetActive(true); } } public void GoAdFreeShop()//광고제거 배너를 누르면 바로 광고제거를 구매하는 창으로 넘어간다. { //ShopMgr.SOpenShopSpecial(); ShopMgr.STryBuy(ShopMgr.SSGetSpecialGetPackKey()); BuffWindowOff(); } #endregion #region BuffLvExp public void BuffLevelSet(AdNumber iadnum)//버프레벨과 버프효과 퍼센트를 표기한다. { switch (iadnum) { case AdNumber.atk: txtBuffLevel[(int)iadnum].text = FormatString.StringFormat("Lv. {0}", DataHandler.PlayBuff.atkLv); txtBuffDesc[(int)iadnum].text = FormatString.StringFormat("{0} + {1}", LocalizationText.GetText("adbuff_atk_buff_per"), FormatString.TextIntPer0(DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.atkLv).atkValue)); break; case AdNumber.gold: txtBuffLevel[(int)iadnum].text = FormatString.StringFormat("Lv. {0}", DataHandler.PlayBuff.goldLv); txtBuffDesc[(int)iadnum].text = FormatString.StringFormat("{0} + {1}", LocalizationText.GetText("adbuff_gold_buff_per"), FormatString.TextIntPer0(DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.goldLv).goldValue)); break; case AdNumber.exp: txtBuffLevel[(int)iadnum].text = FormatString.StringFormat("Lv. {0}", DataHandler.PlayBuff.expLv); txtBuffDesc[(int)iadnum].text = FormatString.StringFormat("{0} + {1}", LocalizationText.GetText("adbuff_exp_buff_per"), FormatString.TextIntPer0(DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.expLv).expValue)); break; } } public void BuffExpSet(AdNumber iadnum)//경험치를 세팅한다. { dAdBuff bufflvnext; dAdBuff bufflvcurrent; float fexpmax = 0; float fprevmax = 0; float maxlvexp = DataHandler.GetSysAdBuffLevel(DataHandler.GetSysAdBuffs().Length).exp - DataHandler.GetSysAdBuffLevel(DataHandler.GetSysAdBuffs().Length - 1).exp; switch (iadnum) { case AdNumber.atk: bufflvnext = DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.atkLv + 1); bufflvcurrent = DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.atkLv); fexpmax = bufflvnext.exp; fprevmax = bufflvcurrent.exp; txtBuffExpNum[(int)iadnum].text = FormatString.TextCntPer((DataHandler.PlayBuff.atkExp - fprevmax).ToString(), (fexpmax - fprevmax).ToString()); if (DataHandler.PlayBuff.atkLv >= DataHandler.GetSysAdBuffs().Length) { txtBuffExpNum[(int)iadnum].text = "MAX"; txtBuffExpNum[(int)iadnum].color = Global.CLR_TextYellow; sldBuffExp[(int)iadnum].value = 1; buffMax[(int)iadnum].SetActive(true); } else { sldBuffExp[(int)iadnum].value = (DataHandler.PlayBuff.atkExp - fprevmax) / (fexpmax - fprevmax); } break; case AdNumber.gold: bufflvnext = DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.goldLv + 1); bufflvcurrent = DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.goldLv); fexpmax = bufflvnext.exp; fprevmax = bufflvcurrent.exp; txtBuffExpNum[(int)iadnum].text = FormatString.TextCntPer((DataHandler.PlayBuff.goldExp - fprevmax).ToString(), (fexpmax - fprevmax).ToString()); if (DataHandler.PlayBuff.goldLv >= DataHandler.GetSysAdBuffs().Length) { txtBuffExpNum[(int)iadnum].text = "MAX"; txtBuffExpNum[(int)iadnum].color = Global.CLR_TextYellow; sldBuffExp[(int)iadnum].value = 1; buffMax[(int)iadnum].SetActive(true); } else { sldBuffExp[(int)iadnum].value = (DataHandler.PlayBuff.goldExp - fprevmax) / (fexpmax - fprevmax); } break; case AdNumber.exp: bufflvnext = DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.expLv + 1); bufflvcurrent = DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.expLv); fexpmax = bufflvnext.exp; fprevmax = bufflvcurrent.exp; txtBuffExpNum[(int)iadnum].text = FormatString.TextCntPer((DataHandler.PlayBuff.expExp - fprevmax).ToString(), (fexpmax - fprevmax).ToString()); if (DataHandler.PlayBuff.expLv >= DataHandler.GetSysAdBuffs().Length) { txtBuffExpNum[(int)iadnum].text = "MAX"; txtBuffExpNum[(int)iadnum].color = Global.CLR_TextYellow; sldBuffExp[(int)iadnum].value = 1; buffMax[(int)iadnum].SetActive(true); } else { sldBuffExp[(int)iadnum].value = (DataHandler.PlayBuff.expExp - fprevmax) / (fexpmax - fprevmax); } break; } } public void BuffAtkLevelUp()//레벨업 버튼을 누르면 광고버프레벨이 올라간다. { if (DataHandler.GetSysAdBuffs().Length > DataHandler.PlayBuff.atkLv) { if (DataHandler.PlayBuff.atkExp >= DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.atkLv + 1).exp) { ptcLevelUp[0].Play(); DataHandler.PlayBuff.atkLv++; BuffLevelSet(AdNumber.atk); BuffExpSet(AdNumber.atk); BuffMgr.Instance.OnAdBuff(eEffectType.AtkBuff, DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.atkLv).atkValue, true); BattleMgr.StatRecalc(); EnhanceMgr.Instance.CalcPlayerInfoStat(); SoundMgr.Instance.PlaySfx(SoundName.ReinforceSuccess); TrySvPlayBuffSave(DataHandler.PlayBuff); } } } public void BuffGoldLevelUp() { if (DataHandler.GetSysAdBuffs().Length > DataHandler.PlayBuff.goldLv) { if (DataHandler.PlayBuff.goldExp >= DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.goldLv + 1).exp) { ptcLevelUp[1].Play(); DataHandler.PlayBuff.goldLv++; BuffLevelSet(AdNumber.gold); BuffExpSet(AdNumber.gold); BuffMgr.Instance.OnAdBuff(eEffectType.GoldDropRate, DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.goldLv).goldValue, true); BattleMgr.StatRecalc(); EnhanceMgr.Instance.CalcPlayerInfoStat(); SoundMgr.Instance.PlaySfx(SoundName.ReinforceSuccess); TrySvPlayBuffSave(DataHandler.PlayBuff); } } } public void BuffExpLevelUp() { if (DataHandler.GetSysAdBuffs().Length > DataHandler.PlayBuff.expLv) { if (DataHandler.PlayBuff.expExp >= DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.expLv + 1).exp) { ptcLevelUp[2].Play(); DataHandler.PlayBuff.expLv++; BuffLevelSet(AdNumber.exp); BuffExpSet(AdNumber.exp); BuffMgr.Instance.OnAdBuff(eEffectType.ExpDropRate, DataHandler.GetSysAdBuffLevel(DataHandler.PlayBuff.expLv).expValue, true); BattleMgr.StatRecalc(); EnhanceMgr.Instance.CalcPlayerInfoStat(); SoundMgr.Instance.PlaySfx(SoundName.ReinforceSuccess); TrySvPlayBuffSave(DataHandler.PlayBuff); } } } #endregion #region SVConnect nAdBuffReturn adBuffData = null; public static void TrySvPlayBuffSave(cAdBuffLevel data) { Instance.adBuffData = new nAdBuffReturn(); Instance.adBuffData.playBuff = data; Instance.APlayBuffSave(); } private void APlayBuffSave()//버프레벨업을 할때 저장한다. 버프 경험치는 로컬에 저장된다(서버에는 1초마다 저장을 할 수는 없으므로) { CoverCamera.Hold(); SvConnectManager.Instance.RequestSvPost(true, 0, UrlApi.GetUrl(UrlApi.SaveAdBuffLevel), typeof(nAdBuffReturn), APlayBuffSaveSucc, APlayBuffSaveFail, adBuffData, true); } private void APlayBuffSaveFail(SvError error, object request) { CoverCamera.Release(); adBuffData = null; } private void APlayBuffSaveSucc(object result, object request) { nAdBuffReturn data = result as nAdBuffReturn; if (data == null) { APlayBuffSaveFail(new SvError(eErrorCode.NULL_OR_EMPTY), request); return; } DataHandler.PlayBuff.Save(DataHandler.PlayData.server); ButtonActive(); BadgeActive(); adBuffData = null; CoverCamera.Release(); } #endregion }