//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Friday, January 12, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TableConfig; namespace Snxxz.UI { public class FindPreciousBossRebornBehaviour : MonoBehaviour { [SerializeField] RectTransform m_ContainerBossReborn; [SerializeField] Image m_BossIcon; [SerializeField] Text m_BossName; [SerializeField] Text m_BossLevel; [SerializeField] Button m_Goto; [SerializeField] Button m_Close; MapModel mapModel { get { return ModelCenter.Instance.GetModel(); } } FindPreciousModel model { get { return ModelCenter.Instance.GetModel(); } } DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel(); } } DemonJarModel demonJarModel { get { return ModelCenter.Instance.GetModel(); } } BossHomeModel bossHomeModel { get { return ModelCenter.Instance.GetModel(); } } private void OnEnable() { m_Goto.AddListener(GotoKillBoss); m_Close.AddListener(ReportConfirmBossRebornNotify); } private void OnDisable() { m_Goto.RemoveAllListeners(); m_Close.RemoveAllListeners(); } public void DisplayRebornBoss() { if (model.currentBossNotify != 0) { var type = model.GetBossFindPreciousType(model.currentBossNotify); if (type == FindPreciousModel.FindPreciousType.DemonJar) { if (demonJarModel.GetSurplusTimes() <= 0) { m_ContainerBossReborn.gameObject.SetActive(false); } } else { } m_ContainerBossReborn.gameObject.SetActive(true); var bossId = model.currentBossNotify; var config = Config.Instance.Get(bossId); if (config != null) { m_BossIcon.SetSprite(config.HeadPortrait); m_BossName.text = config.charName; m_BossLevel.text = Language.Get("FindPrecious_11", config.NPCLV); } } else { m_ContainerBossReborn.gameObject.SetActive(false); } } private void GotoKillBoss() { var mapId = PlayerDatas.Instance.baseData.MapID; var bossId = model.currentBossNotify; var type = model.GetBossFindPreciousType(bossId); switch (type) { case FindPreciousModel.FindPreciousType.DemonJar: GotoKillDemonJarBoss(bossId); break; case FindPreciousModel.FindPreciousType.WorldBoss: GotoKillWorldBoss(bossId); break; case FindPreciousModel.FindPreciousType.BossHome: GotoKillBossHomeBoss(bossId); break; case FindPreciousModel.FindPreciousType.ElderGodArea: GotoKillElderGodAreaBoss(bossId); break; case FindPreciousModel.FindPreciousType.PersonalBoss: break; } ReportConfirmBossRebornNotify(); } private void ReportConfirmBossRebornNotify() { if (model.currentBossNotify != 0) { model.ReportConfirmBossRebornNotify(model.currentBossNotify); } else { m_ContainerBossReborn.gameObject.SetActive(false); } } private void GotoKillDemonJarBoss(int _bossId) { var mapId = PlayerDatas.Instance.baseData.MapID; var mapConfig = Config.Instance.Get(mapId); if (mapConfig.MapFBType == (int)MapType.OpenCountry) { WindowCenter.Instance.Close(); var demonJarModel = ModelCenter.Instance.GetModel(); demonJarModel.selectedBoss = _bossId; demonJarModel.lockSelectedBoss = true; WindowCenter.Instance.Open(false, 0); } else { SysNotifyMgr.Instance.ShowTip("InDungeon_CantGo"); } } private void GotoKillWorldBoss(int _bossId) { var mapId = PlayerDatas.Instance.baseData.MapID; var mapConfig = Config.Instance.Get(mapId); if (mapConfig.MapFBType == (int)MapType.OpenCountry) { MapTransferUtility.Instance.MoveToNPC(_bossId); } else { SysNotifyMgr.Instance.ShowTip("InDungeon_CantGo"); } } private void GotoKillBossHomeBoss(int _bossId) { var config = Config.Instance.Get(_bossId); var dataMapId = dungeonModel.GetDungeonDataIdByMapId(PlayerDatas.Instance.baseData.MapID); if (dataMapId == BossHomeModel.BOSSHOME_MAPID) { if (PlayerDatas.Instance.baseData.dungeonLineId == config.FloorNum - 1) { MapTransferUtility.Instance.MoveToNPC(_bossId); } else { var vipLevel = PlayerDatas.Instance.baseData.VIPLv; var vipNeed = bossHomeModel.GetFloorVipRequirement(PlayerDatas.Instance.baseData.dungeonLineId + 1); if (vipLevel < vipNeed) { var moneyNeed = bossHomeModel.GetVipLackCost(PlayerDatas.Instance.baseData.dungeonLineId + 1); var dungeonId = dungeonModel.DungeonMap(dataMapId, PlayerDatas.Instance.baseData.dungeonLineId); var dungeonConfig = Config.Instance.Get(dungeonId); ConfirmCancel.ShowPopConfirm( Language.Get("Mail101"), Language.Get("QuitRemindBossHome", dungeonConfig.FBName, vipNeed, moneyNeed), (bool _ok) => { if (_ok) { EnterBossHome(config.FloorNum); } } ); } else { EnterBossHome(config.FloorNum); } } } else { var mapId = PlayerDatas.Instance.baseData.MapID; var mapConfig = Config.Instance.Get(mapId); if (mapConfig.MapFBType == (int)MapType.OpenCountry) { EnterBossHome(config.FloorNum); } else { SysNotifyMgr.Instance.ShowTip("InDungeon_CantGo"); } } } private void GotoKillElderGodAreaBoss(int _bossId) { var dataMapId = dungeonModel.GetDungeonDataIdByMapId(PlayerDatas.Instance.baseData.MapID); if (dataMapId == ElderGodAreaModel.ELDERGODAREA_MAPID) { MapTransferUtility.Instance.MoveToNPC(_bossId); } else { var mapId = PlayerDatas.Instance.baseData.MapID; var mapConfig = Config.Instance.Get(mapId); if (mapConfig.MapFBType == (int)MapType.OpenCountry) { var error = 0; if (TestEnterElderGodAreaDungeon(out error)) { var model = ModelCenter.Instance.GetModel(); model.selectedBoss = _bossId; DungeonSuppliesLackWin.lackType = DungeonSuppliesLackWin.LackType.ElderGodArea; WindowCenter.Instance.Open(); } else { switch (error) { case 1: SysNotifyMgr.Instance.ShowTip("DemonJar_Text2"); break; } } } else { SysNotifyMgr.Instance.ShowTip("InDungeon_CantGo"); } } } private void EnterBossHome(int _floor) { var error = 0; if (TestEnterBossHomeDungeon(_floor, out error)) { bossHomeModel.selectedFloor = _floor; dungeonModel.SingleChallengeDungeon(BossHomeModel.BOSSHOME_MAPID, bossHomeModel.selectedFloor - 1); } else { ProcessEnterBossHomeDungeonError(_floor, error); } } private bool TestEnterBossHomeDungeon(int _selectedFloor, out int _error) { var bossHomeModel = ModelCenter.Instance.GetModel(); var vipLevel = PlayerDatas.Instance.baseData.VIPLv; if (vipLevel < bossHomeModel.GetFloorVipRequirement(1)) { _error = 1; return false; } var vipNeed = bossHomeModel.GetFloorVipRequirement(_selectedFloor); if (vipLevel < vipNeed) { _error = 2; return false; } _error = 0; return true; } private void ProcessEnterBossHomeDungeonError(int _floor, int _error) { var bossHomeModel = ModelCenter.Instance.GetModel(); switch (_error) { case 1: WindowCenter.Instance.Open(); break; case 2: var moneyNeed = bossHomeModel.GetVipLackCost(_floor); var title = Language.Get("Mail101"); var tip = Language.Get("FightTreasure_BossHome", moneyNeed); ConfirmCancel.ShowPopConfirm( title, tip, (bool _ok) => { if (_ok) { var moneyOwn = PlayerDatas.Instance.baseData.Gold + PlayerDatas.Instance.baseData.GoldPaper; if (moneyOwn < moneyNeed) { if (VersionConfig.Get().isBanShu) { SysNotifyMgr.Instance.ShowTip("GoldErr"); return; } WindowCenter.Instance.Open(); } else { var dungeonModel = ModelCenter.Instance.GetModel(); dungeonModel.SingleChallengeDungeon(BossHomeModel.BOSSHOME_MAPID, _floor - 1); } } } ); break; } } private bool TestEnterElderGodAreaDungeon(out int _error) { var enterTimes = dungeonModel.GetDungeonEnterTimes(ElderGodAreaModel.ELDERGODAREA_MAPID); var totalTimes = dungeonModel.GetDungeonTotalTimes(ElderGodAreaModel.ELDERGODAREA_MAPID); if (enterTimes >= totalTimes) { _error = 1; return false; } _error = 0; return true; } } }