| | |
| | |
|
| | | int m_SelectedBoss = 0;
|
| | | public int selectedBoss {
|
| | | get {
|
| | | return this.m_SelectedBoss;
|
| | | }
|
| | | get { return this.m_SelectedBoss; }
|
| | | set {
|
| | | if (this.m_SelectedBoss != value)
|
| | | {
|
| | |
| | | public event Action<int> bossSelectedEvent;
|
| | | public event Action<int> surplusTimesChangeEvent;
|
| | |
|
| | | List<int> sortedElites = new List<int>();
|
| | | List<int> sortedBossIds = new List<int>();
|
| | | Dictionary<int, ElderGodBossData> elderGodBosses = new Dictionary<int, ElderGodBossData>();
|
| | | Dictionary<int, int> npcAngers = new Dictionary<int, int>();
|
| | |
| | |
|
| | | public bool IsBossUnLocked(int _bossId)
|
| | | {
|
| | | var config = Config.Instance.Get<ElderGodAreaConfig>(_bossId);
|
| | | if (config == null) |
| | | {
|
| | | return false; |
| | | }
|
| | |
|
| | | if (config.MonsterType == 1) |
| | | {
|
| | | return true; |
| | | }
|
| | | else
|
| | | {
|
| | | var playerLevel = PlayerDatas.Instance.baseData.LV;
|
| | | return elderGodBosses.ContainsKey(_bossId) && playerLevel >= elderGodBosses[_bossId].unLockLevel;
|
| | | }
|
| | | }
|
| | |
|
| | | public List<int> GetElderGodBosses()
|
| | | {
|
| | | return new List<int>(sortedBossIds);
|
| | | var bosses = new List<int>();
|
| | | bosses.Add(sortedElites[0]);
|
| | | bosses.AddRange(sortedBossIds);
|
| | | return bosses;
|
| | | }
|
| | |
|
| | | public int GetLatestUnLockBoss()
|
| | | public int GetRecommendNpc()
|
| | | {
|
| | | for (int i = 0; i < sortedBossIds.Count; i++)
|
| | | foreach (var item in sortedBossIds) |
| | | {
|
| | | var bossId = sortedBossIds[i];
|
| | | if (findPreciousModel.IsBossAlive(bossId))
|
| | | if (findPreciousModel.IsBossAlive(item))
|
| | | {
|
| | | return bossId;
|
| | | return item;
|
| | | }
|
| | | }
|
| | |
|
| | | return sortedBossIds[0];
|
| | | return sortedElites[0];
|
| | | }
|
| | |
|
| | | public int GetRecommendEliteNpc()
|
| | | {
|
| | | var npc = 0;
|
| | | var levelDelta = int.MaxValue;
|
| | | var myLevel = PlayerDatas.Instance.baseData.LV;
|
| | | foreach (var item in sortedElites)
|
| | | {
|
| | | var config = Config.Instance.Get<NPCConfig>(item);
|
| | | var delta = Mathf.Abs(myLevel - config.NPCLV);
|
| | | if (delta < levelDelta)
|
| | | {
|
| | | npc = item;
|
| | | levelDelta = delta;
|
| | | }
|
| | | }
|
| | |
|
| | | return npc;
|
| | | }
|
| | |
|
| | | private void ParseConfig()
|
| | |
| | | {
|
| | | elderGodBosses[config.NPCID] = new ElderGodBossData(config.NPCID);
|
| | | }
|
| | | else
|
| | | {
|
| | | sortedElites.Add(config.NPCID);
|
| | | }
|
| | |
|
| | | npcAngers[config.NPCID] = config.MonsterAnger;
|
| | | }
|
| | |
|
| | | sortedElites.Sort(EliteMonsterCompare);
|
| | | sortedBossIds.AddRange(elderGodBosses.Keys);
|
| | | sortedBossIds.Sort(ElderGodBossData.LevelCompare);
|
| | | }
|
| | |
|
| | | private int EliteMonsterCompare(int lhs, int rhs)
|
| | | {
|
| | | var config1 = Config.Instance.Get<NPCConfig>(lhs);
|
| | | var config2 = Config.Instance.Get<NPCConfig>(rhs);
|
| | |
|
| | | return config1.NPCLV < config2.NPCLV ? -1 : 1;
|
| | | }
|
| | |
|
| | | public void OnMapInitOk()
|
| | |
| | | var dataMapId = dungeonModel.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID);
|
| | | if (dataMapId == ELDERGODAREA_MAPID)
|
| | | {
|
| | | MapTransferUtility.Instance.MoveToNPC(selectedBoss);
|
| | | var target = 0;
|
| | | if (sortedElites.Contains(selectedBoss)) |
| | | {
|
| | | target = GetRecommendEliteNpc(); |
| | | }
|
| | | else
|
| | | {
|
| | | target = selectedBoss;
|
| | | }
|
| | |
|
| | | MapTransferUtility.Instance.MoveToNPC(target);
|
| | | }
|
| | | }
|
| | | } |