using UnityEngine; using UnityEngine.UI; using System.Collections; using System.Collections.Generic; using GCGame.Table; using GCGame; using System; public class BossUI : UIControllerBase { #region static public static void ShowUI() { UIManager.ShowUI(UIInfo.Boss); } #endregion public class BossInfo { public int BossID; public int bossType; //0个人BOSS 1世界BOSS 2BOSS之家 3跨服BOSS public string bossName; public int bossLevel; public int bossModelID; public string bossBack; public bool isKilled; public int reliveTime; //复活倒计时 等于0表示已刷新 public int ActivityValue; public string Reward1; //奖励列表1 public string Reward2; //奖励列表2 public int NoPayTimes; //1 不消耗奖励次数 0消耗奖励次数 public int FubenID; public int SceneID; public float PosX; public float PosZ; public int LeaveBlood; public string bossDesc; public int VipFreeEnter; //VIP免费进等级 public int ConsumType; public int ConsumSubType; public int ConsumCount; public BossInfo() { Clear(); } public void Clear() { BossID = -1; bossType = -1; bossName = ""; bossLevel = -1; bossModelID = -1; bossBack = ""; isKilled = false; reliveTime = 0; Reward1 = ""; Reward2 = ""; FubenID = -1; SceneID = -1; PosX = 0; PosZ = 0; LeaveBlood = 100; bossDesc = ""; VipFreeEnter = 0; NoPayTimes = 0; } } public GameObject DescriptBtn; public GameObject DescriptBtn1; public GameObject HistorKillerObj; public GameObject ScoreBtnObj; public GameObject HistorKillTip; public Text HistoryKillItem; public GameObject Reward1Obj; public GameObject Reward2Obj; public GameObject Reward1child2; public GameObject Reward1child1; public Text BossLeaveBlood; public Text Desc; //跨服BOSS和个人BOSS的描述 public Text Desc2;//BOSS之家 public Text ActivtyValue;//活力值消耗 public Text VipFree;//VIP免费次数 public Text BookRewardTimes;//图鉴奖励次数 public Text LastKillRewardTimes;//最后一击奖励次数 public Text JoinRewardTimes;//参与奖励次数 public GameObject m_WorldBossReward; public GameObject NoPay; public GameObject AwardDesc; public UITagPanel _TagPanel; public UIContainerSelect m_BossSceneLevels; public UIContainerSelect m_BossList; public RectTransform m_BossListRect; public UICameraTexture m_BossModel; public RectTransform m_MaskRect; public Text JoinBtnText; public Toggle AddFocus; public GameObject WorldBossBtn; public GameObject AwardBtn; private string m_WorldBookRewardTimesAndMax; private string m_WorldLastKillRewardTimesAndMax; private string m_WorldJoinRewardTimesAndMax; private string m_HomeBookRewardTimesAndMax; private string m_HomeWorldLastKillRewardTimesAndMax; private string m_HomeWorldJoinRewardTimesAndMax; protected override void Init() { base.Init(); SetInstance(this); } public void OnEnable() { WorldBossData.Instance.AskHomeBossInfo(); } //请求世界BOSS和BOSS之家的历史被杀记录 public void AskHomeBossKillsInfo() { ReqBossHomeBossKillHistory cmd = new ReqBossHomeBossKillHistory(); cmd.bossid = m_CurrentSelect.BossID; cmd.fubenid = m_CurrentSelect.FubenID; cmd.SendMsg(); } List m_historyInfos = new List(); public void HomeBossKillsInfo(AckBossHomeBossKillHistory homeBoss) { if (m_CurrentSelect == null) return; HistorKillTip.SetActive(true); int index = 0; for(int i=0;i(HistoryKillItem); if(newText!=null) { newText.transform.SetParent(HistoryKillItem.transform.parent); newText.transform.localPosition = HistoryKillItem.transform.localPosition; newText.transform.localScale = HistoryKillItem.transform.localScale; m_historyInfos.Add(newText); } } index++; m_historyInfos[i].gameObject.SetActive(true); DateTime time = Utils.GetServerDateTime(homeBoss.killtime[i]); m_historyInfos[i].text = StrDictionary.GetClientDictionaryString("#{49108}", time.ToString("HH:mm:ss"), homeBoss.killer[i]); } for(int i= index; i< m_historyInfos.Count; i++) { m_historyInfos[i].gameObject.SetActive(false); } } public void Show_WorldBoss() { if(m_CurrentSelect!=null) { if(m_WorldBossReward.activeSelf) { m_WorldBossReward.SetActive(false); BossLeaveBlood.transform.parent.gameObject.SetActive(m_CurrentSelect.bossType != 0); m_MaskRect.sizeDelta = new Vector2(730, 470); AwardBtn.SetActive(true); WorldBossBtn.SetActive(false); } else { m_WorldBossReward.SetActive(true); AwardBtn.SetActive(false); WorldBossBtn.SetActive(true); BossLeaveBlood.transform.parent.gameObject.SetActive(false); m_MaskRect.sizeDelta = Vector2.zero; } } } int m_CurrentAddFocusState = -1; public void BossFocusState(RetBossHomeBossRssState rss) { if (m_CurrentSelect == null) return; if (m_CurrentSelect.FubenID != rss.fubenid || m_CurrentSelect.BossID != rss.bossid) return; AddFocus.gameObject.SetActive(true); m_CurrentAddFocusState = rss.rss; AddFocus.isOn = (rss.rss == 1); } public void BossFocus(RetBossHomeSetBossRss rss) { for(int i=0;i 0); m_ShowBossList[j].reliveTime = (int)Time.realtimeSinceStartup + bossState.birthtime[i] - GlobalData.ServerAnsiTime; } } } m_BossList.RefreshItems(); if(m_CurrentSelect!=null) BossLeaveBlood.text = string.Format("{0}%", m_CurrentSelect.LeaveBlood); } public void UserBossInfo() { UserInfo(); } private void Start() { TagShowPageMain(1); } public void ShowPage(int index) { if (_TagPanel) _TagPanel.ShowPage(index); } private int m_Page = 0; List m_ShowBossList = new List(); public void TagShowPageMain(int page) { m_Page = page; OpenType(page); m_ShowBossList.Clear(); if (page == 0) { PrivateBossInfo(); _DescripID = -1; } else if (page == 1 || page == 2) { WorldBossInfo(page); _DescripID = (page == 1 ? 40 : 60); return; } else if (page == 4) { ExtraBoss(); _DescripID = -1; } else { _DescripID = 52; CrossServerBoss(); } if (m_ShowBossList.Count <= 0) return; BossInfo sel = null; for (int i=0;i= GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.CurStamina) { sel = m_ShowBossList[i]; continue; } if(sel.bossLevel < m_ShowBossList[i].bossLevel) { sel = m_ShowBossList[i]; } } } sel = (sel == null ? m_ShowBossList[0] : sel); List sels = new List(); sels.Add(sel); m_BossList.InitSelectContent(m_ShowBossList, sels, OnSelectBoss); } List SceneLevelItems = new List(); private void ShowSceneBoss(object obj) { string scenelevel = (string)obj; string[] strs = scenelevel.Split('_'); if (strs.Length < 1) return; int SceneID = -1; if (int.TryParse(strs[0], out SceneID) == false) return; if (strs[1] == "1" && m_Page == 1) { Reward1child1.SetActive(false); BookRewardTimes.gameObject.SetActive(false); } else { Reward1child1.SetActive(true); BookRewardTimes.gameObject.SetActive(true); } AskHomeBossInfo1(SceneID); BossInfo sel = null; List shows = new List(); for (int i = 0; i < m_ShowBossList.Count; i++) { if (m_ShowBossList[i].SceneID == SceneID) { if(m_ShowBossList[i].bossLevel <= GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level) { if (sel == null || sel.bossLevel < m_ShowBossList[i].bossLevel) sel = m_ShowBossList[i]; } shows.Add(m_ShowBossList[i]); } } if (shows.Count <= 0) return; sel = (sel == null ? shows[0] : sel); List sels = new List(); sels.Add(sel); m_BossList.InitSelectContent(shows, sels, OnSelectBoss); } private void WorldBossInfo(int type) { Dictionary bossInfos = TableManager.GetWorldBoss(); List SceneLevels = new List(); int lastScene = 0; int index = 0; string selectLevel = ""; string lastSceneStr = ""; foreach (var boss in bossInfos) { if (boss.Value.Type != type) continue; Tab_RoleBaseAttr role = TableManager.GetRoleBaseAttrByID(boss.Value.Id, 0); if (role == null) continue; BossInfo info = new BossInfo(); m_ShowBossList.Add(info); info.bossName = role.Name; info.bossBack = boss.Value.Icon; info.BossID = boss.Value.Id; info.bossLevel = boss.Value.Level; info.bossModelID = role.CharModelID; info.bossType = type; info.SceneID = boss.Value.SceneID; info.FubenID = boss.Value.FubenID; info.PosX = boss.Value.PosX; info.PosZ = boss.Value.PosZ; info.Reward1 = boss.Value.GetRewardShowbyIndex(0); info.Reward2 = boss.Value.GetRewardShowbyIndex(1); info.bossDesc = boss.Value.BossDesc; info.VipFreeEnter = boss.Value.VipLevel; info.ConsumType = boss.Value.ConsumeType; info.ConsumSubType = boss.Value.ConsumeSubType; info.ConsumCount = boss.Value.ConsumeNum; info.NoPayTimes = boss.Value.RewardTimes; if(boss.Value.SceneID!=lastScene) { lastScene = boss.Value.SceneID; index++; string sceneLevel = string.Format("{0}_{1}", boss.Value.SceneID, index); if (index == 1 && info.bossType == 1) sceneLevel = string.Format("{0}_{1}_true", boss.Value.SceneID, index); if (SceneLevels.Contains(sceneLevel) == false) SceneLevels.Add(sceneLevel); lastSceneStr = sceneLevel; } if (GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level >= info.bossLevel) { selectLevel = lastSceneStr; } } if (SceneLevels.Count <= 0) return; List sels = new List(); if (string.IsNullOrEmpty(selectLevel)) { sels.Add(SceneLevels[0]); } else { sels.Add(selectLevel); } m_BossSceneLevels.InitSelectContent(SceneLevels, sels, ShowSceneBoss); } private void CrossServerBoss() { Dictionary bossInfos = TableManager.GetWorldBoss(); List SceneLevels = new List(); foreach (var boss in bossInfos) { if (boss.Value.Type != 3) continue; Tab_RoleBaseAttr role = TableManager.GetRoleBaseAttrByID(boss.Value.Id, 0); if (role == null) continue; BossInfo info = new BossInfo(); m_ShowBossList.Add(info); info.bossName = role.Name; info.bossBack = boss.Value.Icon; info.BossID = boss.Value.Id; info.bossLevel = boss.Value.Level; info.bossModelID = role.CharModelID; info.bossType = 3; info.bossDesc = ""; info.SceneID = boss.Value.SceneID; info.FubenID = boss.Value.FubenID; info.PosX = boss.Value.PosX; info.PosZ = boss.Value.PosZ; info.Reward1 = boss.Value.GetRewardShowbyIndex(0); info.Reward2 = boss.Value.GetRewardShowbyIndex(1); info.VipFreeEnter = boss.Value.VipLevel; info.ConsumType = boss.Value.ConsumeType; info.ConsumSubType = boss.Value.ConsumeSubType; info.ConsumCount = boss.Value.ConsumeNum; info.NoPayTimes = boss.Value.RewardTimes; } if(m_ShowBossList.Count>0) { AskHomeBossInfo1(m_ShowBossList[0].FubenID); } } private void PrivateBossInfo() { Dictionary bossInfos = TableManager.GetPrivateBoss(); foreach(var boss in bossInfos) { Tab_RoleBaseAttr role = TableManager.GetRoleBaseAttrByID(boss.Value.Id, 0); if (role == null) continue; BossInfo info = new BossInfo(); m_ShowBossList.Add(info); info.bossName = role.Name; info.bossBack = boss.Value.Icon; info.BossID = boss.Value.Id; info.bossLevel = boss.Value.Level; info.bossModelID = role.CharModelID; info.ActivityValue = boss.Value.ActivityValue; info.bossType = 0; info.bossDesc = (GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level >= boss.Value.Level ? StrDictionary.GetClientDictionaryString("#{49106}") : string.Format("{0}", StrDictionary.GetClientDictionaryString("#{49107}",boss.Value.Level))); info.FubenID = boss.Value.FubenID; info.SceneID = 0; info.Reward1 = boss.Value.GetRewardShowbyIndex(1); info.Reward2 = boss.Value.GetRewardShowbyIndex(0); info.NoPayTimes = 0; } } private void ExtraBoss() { Dictionary bossInfos = TableManager.GetWorldBoss(); List SceneLevels = new List(); foreach (var boss in bossInfos) { if (boss.Value.Type != 4) continue; Tab_RoleBaseAttr role = TableManager.GetRoleBaseAttrByID(boss.Value.Id, 0); if (role == null) continue; BossInfo info = new BossInfo(); m_ShowBossList.Add(info); info.bossName = role.Name; info.bossBack = boss.Value.Icon; info.BossID = boss.Value.Id; info.bossLevel = boss.Value.Level; info.bossModelID = role.CharModelID; info.bossType = 3; info.bossDesc = ""; info.SceneID = boss.Value.SceneID; info.FubenID = boss.Value.FubenID; info.PosX = boss.Value.PosX; info.PosZ = boss.Value.PosZ; info.Reward1 = boss.Value.GetRewardShowbyIndex(0); info.Reward2 = boss.Value.GetRewardShowbyIndex(1); info.VipFreeEnter = boss.Value.VipLevel; info.ConsumType = boss.Value.ConsumeType; info.ConsumSubType = boss.Value.ConsumeSubType; info.ConsumCount = boss.Value.ConsumeNum; info.NoPayTimes = boss.Value.RewardTimes; } //if (m_ShowBossList.Count > 0) //{ // AskHomeBossInfo1(m_ShowBossList[0].FubenID); //} } private void OpenType(int type) { BossLeaveBlood.transform.parent.gameObject.SetActive(type != 0); Reward1child1.SetActive(type != 0); DescriptBtn1.SetActive(type == 3); DescriptBtn.SetActive(type == 1 || type == 2 || type == 4); HistorKillerObj.SetActive(type == 1 || type == 2 || type == 4); ScoreBtnObj.SetActive(type == 1 || type == 2 || type == 4); HistorKillTip.SetActive(false); AddFocus.gameObject.SetActive(type == 1 || type == 2); m_BossSceneLevels.gameObject.SetActive(type == 1 || type == 2 || type == 4); Desc.gameObject.SetActive(type == 0 || type == 3); Desc2.gameObject.SetActive(type == 2); ActivtyValue.gameObject.SetActive(type == 0); VipFree.gameObject.SetActive(type == 0); BookRewardTimes.gameObject.SetActive(type == 1 || type == 2 || type == 4); JoinRewardTimes.gameObject.SetActive(type == 1 || type == 2 || type == 4); LastKillRewardTimes.gameObject.SetActive(type == 1 || type == 2 || type == 4); m_BossListRect.sizeDelta = new Vector2(220, (type == 0 || type == 3) ? 540 : 480); } public void UserInfo() { if (m_CurrentSelect == null) return; if (m_CurrentSelect!=null) ActivtyValue.text = string.Format("({0})", StrDictionary.GetClientDictionaryString("#{49102}", string.Format("{0}/{1}", GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.CurStamina, m_CurrentSelect.ActivityValue))); VipFree.text = string.Format("({0})", StrDictionary.GetClientDictionaryString("#{49103}", WorldBossData.Instance.VipFreeLeaveTimes < 0 ? 0 : WorldBossData.Instance.VipFreeLeaveTimes)); BookRewardTimes.text = StrDictionary.GetClientDictionaryString("#{49104}", string.Format("{0}", m_CurrentSelect.bossType == 1 ? m_WorldBookRewardTimesAndMax : m_HomeBookRewardTimesAndMax)); JoinRewardTimes.text = StrDictionary.GetClientDictionaryString("#{49135}", string.Format("{0}", m_CurrentSelect.bossType == 1 ? m_WorldJoinRewardTimesAndMax : m_HomeWorldJoinRewardTimesAndMax)); LastKillRewardTimes.text = StrDictionary.GetClientDictionaryString("#{49105}", string.Format("{0}", m_CurrentSelect.bossType == 1 ? m_WorldLastKillRewardTimesAndMax : m_HomeWorldLastKillRewardTimesAndMax)); } private BossInfo m_CurrentSelect; public void OnSelectBoss(object initInfo) { m_CurrentSelect = (BossInfo)initInfo; BossLeaveBlood.text = string.Format("{0}%", m_CurrentSelect.LeaveBlood); if(m_CurrentSelect.bossType == 0) { Desc.text = StrDictionary.GetClientDictionaryString("#{49100}"); } if (m_CurrentSelect.bossType == 3) { Desc.text = StrDictionary.GetClientDictionaryString("#{49149}"); } UserInfo(); AwardDesc.SetActive(m_CurrentSelect.NoPayTimes == 0); NoPay.SetActive(m_CurrentSelect.NoPayTimes == 1); m_BossModel.gameObject.SetActive(false); Tab_CharModel charModel = TableManager.GetCharModelByID(m_CurrentSelect.bossModelID, 0); if (charModel != null) { m_BossModel.gameObject.SetActive(true); m_BossModel.InitModelPath("", charModel, LoadAssetBundle.BUNDLE_PATH_MODEL, true); } if (m_CurrentSelect.bossType != 0) { m_MaskRect.sizeDelta = Vector2.zero; m_WorldBossReward.SetActive(true); BossLeaveBlood.transform.parent.gameObject.SetActive(false); } InitJoinReward(m_CurrentSelect.Reward1, Reward1Obj, BackRewards); InitJoinReward(m_CurrentSelect.Reward2, Reward2Obj, JoinRewards); JoinBtnText.text = (m_CurrentSelect.VipFreeEnter > 0 ? StrDictionary.GetClientDictionaryString("#{49141}", m_CurrentSelect.VipFreeEnter) : StrDictionary.GetClientDictionaryString("#{49142}")); AddFocus.gameObject.SetActive(false); if(m_CurrentSelect.bossType == 1 || m_CurrentSelect.bossType == 2) { ReqBossHomeBossRssState cmd = new ReqBossHomeBossRssState(); cmd.bossid = m_CurrentSelect.BossID; cmd.fubenid = m_CurrentSelect.FubenID; cmd.SendMsg(); } } List JoinRewards = new List(); List BackRewards = new List(); public void InitJoinReward(string items, GameObject cloneObj, List objs) { for (int i = 0; i < objs.Count; i++) { objs[i].SetActive(false); } string[] itemIds = items.Split('|'); for (int i = 0; i < itemIds.Length; i++) { int itemID = -1; if (int.TryParse(itemIds[i], out itemID)) { if (objs.Count > i) { CloneRewardItem(itemID, objs[i], cloneObj); continue; } GameObject newObj = CloneRewardItem(itemID, null, cloneObj); if (newObj != null) objs.Add(newObj); } } } public GameObject CloneRewardItem(int itemId, GameObject oldItemObj, GameObject cloneObj) { if (oldItemObj == null && cloneObj == null) return null; Tab_CommonItem commonItem = TableManager.GetCommonItemByID(itemId, 0); if (commonItem == null) return null; if (oldItemObj == null) { oldItemObj = GameObject.Instantiate(cloneObj); oldItemObj.transform.SetParent(cloneObj.transform.parent); oldItemObj.transform.localPosition = Vector3.zero; oldItemObj.transform.localScale = cloneObj.transform.localScale; } if (oldItemObj == null) return null; oldItemObj.SetActive(true); Button btn = oldItemObj.GetComponentInChildren