Пример #1
0
        /// <summary>
        /// 返回声望勋章数据
        /// </summary>
        /// <returns></returns>
        public static PrestigeMedalData GetPrestigeMedalData(GameClient client)
        {
            // 如果1.4.1的功能没开放
            if (GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot4Dot1))
            {
                return(null);
            }
            //开放等级  声望4阶
            if (!GlobalNew.IsGongNengOpened(client, GongNengIDs.PrestigeMedal))
            {
                return(null);
            }

            PrestigeMedalData prestigeMedalData = client.ClientData.prestigeMedalData;

            if (prestigeMedalData == null)
            {
                PrestigeMedalBasicData basic = null;
                prestigeMedalData = new PrestigeMedalData();

                List <int> data = Global.GetRoleParamsIntListFromDB(client, RoleParamName.PrestigeMedal);
                if (data == null || data.Count <= 0)
                {
                    basic = GetPrestigeMedalBasicDataByID(_defaultMedalID);
                    prestigeMedalData.RoleID  = client.ClientData.RoleID;
                    prestigeMedalData.MedalID = basic.MedalID;

                    ModifyPrestigeMedalData(client, prestigeMedalData, true);
                }
                else
                {
                    prestigeMedalData.RoleID     = client.ClientData.RoleID;
                    prestigeMedalData.MedalID    = data[0];
                    prestigeMedalData.LifeAdd    = data[1];
                    prestigeMedalData.AttackAdd  = data[2];
                    prestigeMedalData.DefenseAdd = data[3];
                    prestigeMedalData.HitAdd     = data[4];

                    if (prestigeMedalData.MedalID > _prestigeMedalBasicList.Count)
                    {
                        prestigeMedalData.UpResultType = 3;
                        basic = GetPrestigeMedalBasicDataByID(_prestigeMedalBasicList.Count);
                    }
                    else
                    {
                        basic = GetPrestigeMedalBasicDataByID(prestigeMedalData.MedalID);
                    }
                }

                prestigeMedalData.Diamond  = GetPrestigeMedalDiamond(client, GetPrestigeMedalUpCount(client));
                prestigeMedalData.Prestige = basic.PrestigeCost;

                client.ClientData.prestigeMedalData = prestigeMedalData;
            }

            prestigeMedalData.PrestigeLeft = GameManager.ClientMgr.GetShengWangValue(client);

            return(prestigeMedalData);
        }
Пример #2
0
        public static void SetPrestigeMedalLevel(GameClient client, int level)
        {
            level = ((level <= 0) ? 1 : level);
            PrestigeMedalData      prestigeMedalData = new PrestigeMedalData();
            PrestigeMedalBasicData basic             = PrestigeMedalManager.GetPrestigeMedalBasicDataByID(level);

            prestigeMedalData.RoleID  = client.ClientData.RoleID;
            prestigeMedalData.MedalID = basic.MedalID;
            if (prestigeMedalData.MedalID > PrestigeMedalManager._prestigeMedalBasicList.Count)
            {
                prestigeMedalData.UpResultType = 3;
            }
            PrestigeMedalManager.ModifyPrestigeMedalData(client, prestigeMedalData, true);
            client.ClientData.prestigeMedalData = prestigeMedalData;
            PrestigeMedalManager.SetPrestigeMedalProps(client, prestigeMedalData);
        }
Пример #3
0
        /// <summary>
        /// 声望勋章——提升
        /// </summary>
        /// <param name="client"></param>
        /// <param name="MedalID"></param>
        /// <returns></returns>
        public static PrestigeMedalData UpPrestigeMedal(GameClient client, int MedalID)
        {
            PrestigeMedalData prestigeMedalData = client.ClientData.prestigeMedalData;

            if (prestigeMedalData != null && prestigeMedalData.UpResultType == (int)PrestigeMedalResultType.End)
            {
                prestigeMedalData.UpResultType = (int)PrestigeMedalResultType.EOver;
                return(prestigeMedalData);
            }

            if (prestigeMedalData == null || prestigeMedalData.MedalID != MedalID)
            {
                prestigeMedalData.UpResultType = (int)PrestigeMedalResultType.Fail;
                return(prestigeMedalData);
            }

            //开放等级  声望4阶
            bool isOpen = GlobalNew.IsGongNengOpened(client, GongNengIDs.PrestigeMedal);

            if (!isOpen)
            {
                prestigeMedalData.UpResultType = (int)PrestigeMedalResultType.EnoOpen;
                return(prestigeMedalData);
            }

            PrestigeMedalBasicData basicMedal = GetPrestigeMedalBasicDataByID(MedalID);

            //声望
            int prestigeNow = GameManager.ClientMgr.GetShengWangValue(client);

            if (basicMedal.PrestigeCost > prestigeNow)
            {
                prestigeMedalData.UpResultType = (int)PrestigeMedalResultType.EnoPrestige;
                return(prestigeMedalData);
            }

            //钻石
            int upCount     = GetPrestigeMedalUpCount(client);
            int diamondNeed = GetPrestigeMedalDiamond(client, upCount);

            if (diamondNeed > 0 && !GameManager.ClientMgr.SubUserMoney(client, diamondNeed, "声望勋章提升"))
            {
                prestigeMedalData.UpResultType = (int)PrestigeMedalResultType.EnoDiamond;
                return(prestigeMedalData);
            }

            try
            {
                GameManager.ClientMgr.ModifyShengWangValue(client, -basicMedal.PrestigeCost, "声望勋章提升");
            }
            catch (Exception)
            {
                prestigeMedalData.UpResultType = (int)PrestigeMedalResultType.EnoPrestige;
                return(prestigeMedalData);
            }

            //几率
            int[] addNums = null;
            int   rate    = 0;
            int   r       = Global.GetRandomNumber(0, 100);

            for (int i = 0; i < basicMedal.RateList.Count; i++)
            {
                rate += basicMedal.RateList[i];
                if (r <= rate)
                {
                    addNums = basicMedal.AddNumList[i];
                    prestigeMedalData.BurstType = i;//暴击
                    break;
                }
            }

            //加成
            prestigeMedalData.LifeAdd += addNums[0] * _medalRate;
            prestigeMedalData.LifeAdd  = prestigeMedalData.LifeAdd > basicMedal.LifeMax ? basicMedal.LifeMax : prestigeMedalData.LifeAdd;

            prestigeMedalData.AttackAdd += addNums[1] * _medalRate;
            prestigeMedalData.AttackAdd  = prestigeMedalData.AttackAdd > basicMedal.AttackMax ? basicMedal.AttackMax : prestigeMedalData.AttackAdd;

            prestigeMedalData.DefenseAdd += addNums[2] * _medalRate;
            prestigeMedalData.DefenseAdd  = prestigeMedalData.DefenseAdd > basicMedal.DefenseMax ? basicMedal.DefenseMax : prestigeMedalData.DefenseAdd;

            prestigeMedalData.HitAdd += addNums[3] * _medalRate;
            prestigeMedalData.HitAdd  = prestigeMedalData.HitAdd > basicMedal.HitMax ? basicMedal.HitMax : prestigeMedalData.HitAdd;

            if (prestigeMedalData.LifeAdd < basicMedal.LifeMax || prestigeMedalData.DefenseAdd < basicMedal.DefenseMax ||
                prestigeMedalData.AttackAdd < basicMedal.AttackMax || prestigeMedalData.HitAdd < basicMedal.HitMax)
            {
                prestigeMedalData.UpResultType = (int)PrestigeMedalResultType.Success;
                prestigeMedalData.Prestige     = basicMedal.PrestigeCost;
                prestigeMedalData.Diamond      = GetPrestigeMedalDiamond(client, upCount + 1);
            }
            else
            {
                prestigeMedalData.MedalID   += 1;
                prestigeMedalData.LifeAdd    = 0;
                prestigeMedalData.AttackAdd  = 0;
                prestigeMedalData.DefenseAdd = 0;
                prestigeMedalData.HitAdd     = 0;

                prestigeMedalData.UpResultType = (int)PrestigeMedalResultType.Next;
                if (prestigeMedalData.MedalID > _prestigeMedalBasicList.Count)
                {
                    prestigeMedalData.UpResultType = (int)PrestigeMedalResultType.End;
                    prestigeMedalData.Prestige     = 0;
                    prestigeMedalData.Diamond      = 0;
                }
                else
                {
                    basicMedal = GetPrestigeMedalBasicDataByID(prestigeMedalData.MedalID);
                    prestigeMedalData.Prestige = basicMedal.PrestigeCost;
                    prestigeMedalData.Diamond  = GetPrestigeMedalDiamond(client, upCount + 1);
                }
            }

            ModifyPrestigeMedalUpCount(client, upCount + 1, true);
            ModifyPrestigeMedalData(client, prestigeMedalData);

            client.ClientData.prestigeMedalData = prestigeMedalData;

            SetPrestigeMedalProps(client, prestigeMedalData);

            //通知客户端属性变化
            GameManager.ClientMgr.NotifyUpdateEquipProps(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client);
            // 总生命值和魔法值变化通知(同一个地图才需要通知)
            GameManager.ClientMgr.NotifyOthersLifeChanged(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client);

            prestigeMedalData.PrestigeLeft = GameManager.ClientMgr.GetShengWangValue(client);
            return(prestigeMedalData);
        }
Пример #4
0
        /// <summary>
        /// 加载声望勋章基本信息
        /// </summary>
        public static bool LoadPrestigeMedalBasicData()
        {
            string fileName = "Config/ShengWangXunZhang.xml";

            GeneralCachingXmlMgr.RemoveCachingXml(Global.GameResPath(fileName));

            XElement xml = GeneralCachingXmlMgr.GetXElement(Global.GameResPath(fileName));

            if (null == xml)
            {
                LogManager.WriteLog(LogTypes.Fatal, "加载Config/ShengWangXunZhang.xml时出错!!!文件不存在");
                return(false);
            }

            try
            {
                _prestigeMedalBasicList.Clear();

                IEnumerable <XElement> xmlItems = xml.Elements();
                foreach (var xmlItem in xmlItems)
                {
                    if (xmlItem == null)
                    {
                        continue;
                    }

                    PrestigeMedalBasicData config = new PrestigeMedalBasicData();
                    config.MedalID      = Convert.ToInt32(Global.GetDefAttributeStr(xmlItem, "ID", "0"));
                    config.MedalName    = Convert.ToString(Global.GetDefAttributeStr(xmlItem, "Name", ""));
                    config.LifeMax      = Convert.ToInt32(Global.GetDefAttributeStr(xmlItem, "LifeV", "0"));
                    config.AttackMax    = Convert.ToInt32(Global.GetDefAttributeStr(xmlItem, "AddAttack", "0"));
                    config.DefenseMax   = Convert.ToInt32(Global.GetDefAttributeStr(xmlItem, "AddDefense", "0"));
                    config.HitMax       = Convert.ToInt32(Global.GetDefAttributeStr(xmlItem, "HitV", "0"));
                    config.PrestigeCost = Convert.ToInt32(Global.GetDefAttributeStr(xmlItem, "CostShengWang", "0"));

                    string addString = Convert.ToString(Global.GetDefAttributeStr(xmlItem, "QiangHua", ""));
                    if (addString.Length > 0)
                    {
                        config.RateList   = new List <int>();
                        config.AddNumList = new List <int[]>();

                        string[] addArr = addString.Split('|');
                        foreach (string str in addArr)
                        {
                            string[] oneArr = str.Split(',');

                            float rate = float.Parse(oneArr[0]);
                            config.RateList.Add((int)(rate * 100));

                            List <int> numList = new List <int>();
                            for (int i = 1; i < oneArr.Length; i++)
                            {
                                numList.Add(int.Parse(oneArr[i]));
                            }

                            config.AddNumList.Add(numList.ToArray());
                        }
                    }

                    _prestigeMedalBasicList.Add(config.MedalID, config);
                }
            }
            catch (Exception ex)
            {
                LogManager.WriteLog(LogTypes.Fatal, "加载Config/ShengWangXunZhang.xml时文件出现异常!!!", ex);
                return(false);
            }

            return(true);
        }
Пример #5
0
        public static PrestigeMedalData UpPrestigeMedal(GameClient client, int MedalID)
        {
            PrestigeMedalData prestigeMedalData = client.ClientData.prestigeMedalData;
            PrestigeMedalData result;

            if (prestigeMedalData != null && prestigeMedalData.UpResultType == 3)
            {
                prestigeMedalData.UpResultType = -4;
                result = prestigeMedalData;
            }
            else if (prestigeMedalData == null || prestigeMedalData.MedalID != MedalID)
            {
                prestigeMedalData.UpResultType = 0;
                result = prestigeMedalData;
            }
            else if (!GlobalNew.IsGongNengOpened(client, GongNengIDs.PrestigeMedal, false))
            {
                prestigeMedalData.UpResultType = -1;
                result = prestigeMedalData;
            }
            else
            {
                PrestigeMedalBasicData basicMedal = PrestigeMedalManager.GetPrestigeMedalBasicDataByID(MedalID);
                int prestigeNow = GameManager.ClientMgr.GetShengWangValue(client);
                if (basicMedal.PrestigeCost > prestigeNow)
                {
                    prestigeMedalData.UpResultType = -2;
                    result = prestigeMedalData;
                }
                else
                {
                    int upCount     = PrestigeMedalManager.GetPrestigeMedalUpCount(client);
                    int diamondNeed = PrestigeMedalManager.GetPrestigeMedalDiamond(client, upCount);
                    if (diamondNeed > 0 && !GameManager.ClientMgr.SubUserMoney(client, diamondNeed, "声望勋章提升", true, true, true, true, DaiBiSySType.ShengWangYinJi))
                    {
                        prestigeMedalData.UpResultType = -3;
                        result = prestigeMedalData;
                    }
                    else
                    {
                        try
                        {
                            GameManager.ClientMgr.ModifyShengWangValue(client, -basicMedal.PrestigeCost, "声望勋章提升", false, true);
                        }
                        catch (Exception)
                        {
                            prestigeMedalData.UpResultType = -2;
                            return(prestigeMedalData);
                        }
                        int[] addNums = null;
                        int   rate    = 0;
                        int   r       = Global.GetRandomNumber(0, 100);
                        for (int i = 0; i < basicMedal.RateList.Count; i++)
                        {
                            rate += basicMedal.RateList[i];
                            if (r <= rate)
                            {
                                addNums = basicMedal.AddNumList[i];
                                prestigeMedalData.BurstType = i;
                                break;
                            }
                        }
                        prestigeMedalData.LifeAdd    += addNums[0] * PrestigeMedalManager._medalRate;
                        prestigeMedalData.LifeAdd     = ((prestigeMedalData.LifeAdd > basicMedal.LifeMax) ? basicMedal.LifeMax : prestigeMedalData.LifeAdd);
                        prestigeMedalData.AttackAdd  += addNums[1] * PrestigeMedalManager._medalRate;
                        prestigeMedalData.AttackAdd   = ((prestigeMedalData.AttackAdd > basicMedal.AttackMax) ? basicMedal.AttackMax : prestigeMedalData.AttackAdd);
                        prestigeMedalData.DefenseAdd += addNums[2] * PrestigeMedalManager._medalRate;
                        prestigeMedalData.DefenseAdd  = ((prestigeMedalData.DefenseAdd > basicMedal.DefenseMax) ? basicMedal.DefenseMax : prestigeMedalData.DefenseAdd);
                        prestigeMedalData.HitAdd     += addNums[3] * PrestigeMedalManager._medalRate;
                        prestigeMedalData.HitAdd      = ((prestigeMedalData.HitAdd > basicMedal.HitMax) ? basicMedal.HitMax : prestigeMedalData.HitAdd);
                        if (prestigeMedalData.LifeAdd < basicMedal.LifeMax || prestigeMedalData.DefenseAdd < basicMedal.DefenseMax || prestigeMedalData.AttackAdd < basicMedal.AttackMax || prestigeMedalData.HitAdd < basicMedal.HitMax)
                        {
                            prestigeMedalData.UpResultType = 1;
                            prestigeMedalData.Prestige     = basicMedal.PrestigeCost;
                            prestigeMedalData.Diamond      = PrestigeMedalManager.GetPrestigeMedalDiamond(client, upCount + 1);
                        }
                        else
                        {
                            prestigeMedalData.MedalID++;
                            prestigeMedalData.LifeAdd      = 0;
                            prestigeMedalData.AttackAdd    = 0;
                            prestigeMedalData.DefenseAdd   = 0;
                            prestigeMedalData.HitAdd       = 0;
                            prestigeMedalData.UpResultType = 2;
                            if (prestigeMedalData.MedalID > PrestigeMedalManager._prestigeMedalBasicList.Count)
                            {
                                prestigeMedalData.UpResultType = 3;
                                prestigeMedalData.Prestige     = 0;
                                prestigeMedalData.Diamond      = 0;
                            }
                            else
                            {
                                basicMedal = PrestigeMedalManager.GetPrestigeMedalBasicDataByID(prestigeMedalData.MedalID);
                                prestigeMedalData.Prestige = basicMedal.PrestigeCost;
                                prestigeMedalData.Diamond  = PrestigeMedalManager.GetPrestigeMedalDiamond(client, upCount + 1);
                            }
                        }
                        PrestigeMedalManager.ModifyPrestigeMedalUpCount(client, upCount + 1, true);
                        PrestigeMedalManager.ModifyPrestigeMedalData(client, prestigeMedalData, true);
                        client.ClientData.prestigeMedalData = prestigeMedalData;
                        PrestigeMedalManager.SetPrestigeMedalProps(client, prestigeMedalData);
                        GameManager.ClientMgr.NotifyUpdateEquipProps(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client);
                        GameManager.ClientMgr.NotifyOthersLifeChanged(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, true, false, 7);
                        prestigeMedalData.PrestigeLeft = GameManager.ClientMgr.GetShengWangValue(client);
                        result = prestigeMedalData;
                    }
                }
            }
            return(result);
        }