Beispiel #1
0
    /// <summary>
    /// 跟新心法item信息
    /// </summary>
    /// <param name="item"></param>
    void UpdateHeartSkillItemInfo(GameCmd.HeartSkill heartSkill)
    {
        HeartSkillDataBase db = GameTableManager.Instance.GetTableItem <HeartSkillDataBase>(heartSkill.skill_id, (int)heartSkill.level);

        SetItemLv((int)db.orderId - 1);
        SetItemMask((int)db.orderId - 1);
    }
Beispiel #2
0
        /// <summary>
        /// 通过[编号]二分快速查表
        /// </summary>
        /// <param name="id">编号</param>
        /// <returns></returns>
        public static IEnumerable <HeartSkillDataBase> Query(this List <HeartSkillDataBase> sorted, uint id)
        {
            var key = new HeartSkillDataBase()
            {
                id = id
            };
            var comparer = new Comparer1();
            var from     = sorted.BinarySearch(key, comparer);

            if (from < 0)
            {
                yield break;
            }
            var to = from + 1;

            while (from > 0 && comparer.Compare(key, sorted[from - 1]) == 0)
            {
                from--;
            }
            while (to < sorted.Count && comparer.Compare(key, sorted[to]) == 0)
            {
                to++;
            }
            for (var i = from; i < to; i++)
            {
                yield return(sorted[i]);
            }
        }
Beispiel #3
0
    public uint GetHeartCd(uint skillID)
    {
        uint cd = 0;
        HeartSkillDataBase db = GetHeartSkillData(skillID);

        if (db != null)
        {
            string   effectStr = db.enhanceEffect;
            string[] strArray  = effectStr.Split(';');
            for (int i = 0; i < strArray.Length; i++)
            {
                List <uint> idList = StringUtil.GetSplitStringList <uint>(strArray[i], '_');
                if (idList == null)
                {
                    return(cd);
                }
                if (idList.Count <= 0)
                {
                    return(cd);
                }
                if (idList[0] == 12)
                {
                    //12表示减cd
                    return(idList[1]);
                }
            }
        }
        return(cd);
    }
Beispiel #4
0
    public HeartSkillDataBase GetHeartSkillData(uint skillID)
    {
        string        des        = "";
        SkillDatabase db         = GameTableManager.Instance.GetTableItem <SkillDatabase>(skillID, 1);
        bool          hasLearn   = false;
        uint          heartID    = db.heartID;
        uint          heartLevel = 0;

        if (db != null)
        {
            List <GameCmd.HeartSkill> heartList = DataManager.Manager <HeartSkillManager>().OwnedHeartSkillList;

            for (int i = 0; i < heartList.Count; i++)
            {
                HeartSkill hs = heartList[i];
                if (hs.skill_id == heartID)
                {
                    hasLearn   = true;
                    heartLevel = hs.level;
                    break;
                }
            }
        }
        if (hasLearn)
        {
            HeartSkillDataBase hdb = GameTableManager.Instance.GetTableItem <HeartSkillDataBase>(heartID, (int)heartLevel);
            if (hdb != null)
            {
                return(hdb);
            }
        }
        return(null);
    }
Beispiel #5
0
    public string GetHeartDes(uint skillID)
    {
        HeartSkillDataBase db = GetHeartSkillData(skillID);

        if (db != null)
        {
            return(db.des);
        }
        return("");
    }
Beispiel #6
0
        /// <summary>
        /// 通过[编号 + 等级]二分快速查表
        /// </summary>
        /// <param name="id">编号</param>
        /// <param name="lv">等级</param>
        /// <returns></returns>
        public static HeartSkillDataBase Query(this List <HeartSkillDataBase> sorted, uint id, uint lv)
        {
            var key = new HeartSkillDataBase()
            {
                id = id, lv = lv
            };
            var comparer = new Comparer2();
            var index    = sorted.BinarySearch(key, comparer);

            return(index >= 0 ? sorted[index] : default(HeartSkillDataBase));
        }
Beispiel #7
0
    /// <summary>
    /// 设置等级
    /// </summary>
    /// <param name="item"></param>
    void SetItemLv(int item)
    {
        Transform gridTransf = m_grid_heartSkillGridContent.transform.GetChild(item);

        if (gridTransf != null)
        {
            UIHeartSkillGrid   grid = gridTransf.GetComponent <UIHeartSkillGrid>();
            HeartSkillDataBase db   = GameTableManager.Instance.GetTableItem <HeartSkillDataBase>(m_heartSkillList[item].skill_id, (int)m_heartSkillList[item].level);
            if (grid != null && db != null)
            {
                grid.SetLv(db.lv);
            }
        }
    }
Beispiel #8
0
    /// <summary>
    /// 设置遮罩mask
    /// </summary>
    /// <param name="item"></param>
    void SetItemMask(int item)
    {
        Transform gridTransf = m_grid_heartSkillGridContent.transform.GetChild(item);

        if (gridTransf != null)
        {
            UIHeartSkillGrid   grid = gridTransf.GetComponent <UIHeartSkillGrid>();
            HeartSkillDataBase db   = GameTableManager.Instance.GetTableItem <HeartSkillDataBase>(m_heartSkillList[item].skill_id, (int)m_heartSkillList[item].level);
            if (grid != null)
            {
                bool isLock = db.lv == 0 ? true : false;
                grid.SetMask(isLock);
            }
        }
    }
Beispiel #9
0
    /// <summary>
    /// grid点击事件
    /// </summary>
    /// <param name="eventType"></param>
    /// <param name="data"></param>
    /// <param name="param"></param>
    void OnSelectCallback(UIEventType eventType, object data, object param)
    {
        if (eventType == UIEventType.Click)
        {
            UIHeartSkillGrid grid = data as UIHeartSkillGrid;
            if (grid == null)
            {
                return;
            }

            HeartSkillDataBase db = GameTableManager.Instance.GetTableItem <HeartSkillDataBase>(grid.m_heartSkill.skill_id, (int)grid.m_heartSkill.level);
            if (db != null)
            {
                SetSelectItem((int)db.orderId - 1);
            }
        }
    }
Beispiel #10
0
    public override void SetGridData(object data)
    {
        base.SetGridData(data);
        m_heartSkill = data as HeartSkill;
        if (m_heartSkill == null)
        {
            return;
        }

        HeartSkillDataBase db = GameTableManager.Instance.GetTableItem <HeartSkillDataBase>(m_heartSkill.skill_id, (int)m_heartSkill.level);

        if (db != null)
        {
            SetIcon(db.icon);
            SetName(db.name);
            SetLv(db.lv);
            bool isLock = db.lv == 0 ? true : false;
            SetMask(isLock);
        }
    }
Beispiel #11
0
    public List <GameCmd.HeartSkill> GetHeartSkillList()
    {
        List <HeartSkill> heartSkillList = new List <HeartSkill>();
        List <uint>       list           = GetHeartSkillIdList();

        for (int i = 0; i < list.Count; i++)
        {
            //此处要判断, 综合服务器数据和客户端数据
            GameCmd.HeartSkill heartSkill = m_ownedHeartSkillList.Find((data) => { return(list[i] == data.skill_id); });

            if (heartSkill != null)
            {
                heartSkillList.Add(heartSkill);            //服务器获得的,已经解锁的
            }
            else
            {
                HeartSkillDataBase db = GameTableManager.Instance.GetTableItem <HeartSkillDataBase>(list[i], 0); //还未解锁的
                heartSkillList.Add(new HeartSkill {
                    skill_id = list[i], level = db.lv
                });
            }
        }
        return(heartSkillList);
    }
Beispiel #12
0
    /// <summary>
    /// 心法升级信息
    /// </summary>
    void InitHeartSkillUpgradeInfo()
    {
        IPlayer mainPlayer = ClientGlobal.Instance().MainPlayer;

        if (mainPlayer == null)
        {
            return;
        }

        HeartSkillDataBase db = GameTableManager.Instance.GetTableItem <HeartSkillDataBase>(m_heartSkillList[m_selectItem].skill_id, (int)m_heartSkillList[m_selectItem].level);

        if (db != null)
        {
            if (0 <= db.lv && db.lv <= db.maxLv)  //解锁
            {
                //当前等级
                m_widget_HeartSkill_unlock.gameObject.SetActive(true);//打开当前
                m_label_HeartSkill_unlock_name_now.text     = db.name;
                m_label_HeartSkill_unlock_level_now.text    = string.Format("{0}级", db.lv);
                m_label_HeartSkill_unlock_describe_now.text = db.des;
                if (db.lv == db.maxLv)  //当前等级为最大等级
                {
                    m_widget_HeartSkill_max.gameObject.SetActive(true);
                    m_widget_HeartSkill_NextLevel.gameObject.SetActive(false);
                }
                else
                {
                    m_widget_HeartSkill_max.gameObject.SetActive(false);
                    m_widget_HeartSkill_NextLevel.gameObject.SetActive(true);
                }
                m_widget_HeartSkill__lock.gameObject.SetActive(false);



                //升级到下一等级需要的信息
                HeartSkillDataBase nextDb = GameTableManager.Instance.GetTableItem <HeartSkillDataBase>(m_heartSkillList[m_selectItem].skill_id, (int)m_heartSkillList[m_selectItem].level + 1);
                if (nextDb != null)
                {
                    m_widget_HeartSkill_NextLevel.gameObject.SetActive(true);       //打开下一级

                    m_label_HeartSkill_unlock_describe_nextlevel.text = nextDb.des; //下一等级描述

                    //解锁神魔等级
                    m_label_HeartSkill_unlock_locklevel_nextlevel.text = string.Format("{0}级", nextDb.needPlayerLv);



                    if (mainPlayer.GetProp((int)CreatureProp.Level) >= nextDb.needPlayerLv)
                    {
                        m_label_HeartSkill_unlock_locklevel_nextlevel.color = new Color(28, 40, 50, 255); // Color.white;
                    }
                    else
                    {
                        m_label_HeartSkill_unlock_locklevel_nextlevel.color = Color.red;
                    }


                    //消耗 心法点 金币
                    m_label_HeartSkill_consume.text            = nextDb.costHeartSkillPoint.ToString(); //消耗心法点
                    m_label_HeartSkill_unlock_xiaohao_Num.text = nextDb.need_money.ToString();          //消耗金币
                    if (HSManager.HeartSkillPoint >= nextDb.costHeartSkillPoint)                        //心法点不足  字体红色
                    {
                        m_label_HeartSkill_consume.color = new Color(28, 40, 50, 255);                  // Color.white;
                    }
                    else
                    {
                        m_label_HeartSkill_consume.color = Color.red;
                    }

                    if (mainPlayer.GetProp((int)PlayerProp.Coupon) >= nextDb.need_money)          //金币不足 字体红色
                    {
                        m_label_HeartSkill_unlock_xiaohao_Num.color = new Color(28, 40, 50, 255); // Color.white;
                    }
                    else
                    {
                        m_label_HeartSkill_unlock_xiaohao_Num.color = Color.red;
                    }

                    //前置技能
                    List <HeartSkill> preHeartSkillList = HSManager.GetPreHeartSkill(nextDb.pre_skill);
                    string            preSkillString    = "";
                    for (int i = 0; i < preHeartSkillList.Count; i++)
                    {
                        HeartSkillDataBase preSkillDb = GameTableManager.Instance.GetTableItem <HeartSkillDataBase>(preHeartSkillList[i].skill_id, (int)preHeartSkillList[i].level);
                        if (preSkillDb != null)
                        {
                            string preSkill = string.Format("{0}等级{1}", preSkillDb.name, preSkillDb.lv);
                            bool   isExists = HSManager.OwnedHeartSkillList.Exists((d) => { return(d.skill_id == preHeartSkillList[i].skill_id && d.level >= preHeartSkillList[i].level); });//前置技能学没学
                            if (isExists)
                            {
                                preSkill = string.Format("[1C2832]{0}[-]  ", preSkill);
                            }
                            else
                            {
                                preSkill = string.Format("[ff0000]{0}[-]  ", preSkill);
                            }

                            preSkillString += preSkill;
                        }
                    }
                    m_label_HeartSkill_unlock_locklevel_PreSkills.text = preSkillString;//
                }
                else
                {
                    m_widget_HeartSkill_NextLevel.gameObject.SetActive(false);//关闭下一级
                }
            }
        }
    }
Beispiel #13
0
    /// <summary>
    /// 心法是否可升级
    /// </summary>
    public bool IsEnableUpgrade(HeartSkill heartSkill)
    {
        bool isEnableUpgrade = true;

        //下一等级心法数据
        HeartSkillDataBase nextDb = GameTableManager.Instance.GetTableItem <HeartSkillDataBase>(heartSkill.skill_id, (int)heartSkill.level + 1);

        if (nextDb == null)
        {
            isEnableUpgrade = false;
            return(isEnableUpgrade);
        }

        //神魔等级
        IPlayer player = Client.ClientGlobal.Instance().MainPlayer;

        if (player != null)
        {
            if (player.GetProp((int)CreatureProp.Level) < nextDb.needPlayerLv)
            {
                isEnableUpgrade = false;
            }
        }


        //心法点
        if (m_heartSkillPoint < nextDb.costHeartSkillPoint)
        {
            isEnableUpgrade = false;
        }

        //前置技能
        List <HeartSkill> preSkillList = GetPreHeartSkill(nextDb.pre_skill);

        for (int i = 0; i < preSkillList.Count; i++)
        {
            if (false == m_ownedHeartSkillList.Exists((data) => { return(data.skill_id == preSkillList[i].skill_id && data.level == preSkillList[i].level); }))
            {
                isEnableUpgrade = false;
            }
        }

        //消耗金币
        if (Client.ClientGlobal.Instance().MainPlayer.GetProp((int)Client.PlayerProp.Coupon) < nextDb.need_money)   //金币不足 字体红色
        {
            isEnableUpgrade = false;
        }

        //是否最高等级
        HeartSkillDataBase db = GameTableManager.Instance.GetTableItem <HeartSkillDataBase>(heartSkill.skill_id, (int)heartSkill.level);

        if (db != null)
        {
            if (heartSkill.level == db.maxLv)
            {
                isEnableUpgrade = false;
            }
        }

        return(isEnableUpgrade);
    }