示例#1
0
        /// <summary>
        /// 获取攻击力(物,魂,魔)+ 触发的技能加成
        /// </summary>
        /// <returns></returns>
        public int GetAttackNum(AbilityProperty property)
        {
            //释放魂技加成
            decimal AttackRatio = ConfigEnvSet.GetDecimal("Combat.AttackRatio");
            int     attackNum   = 0;

            switch (property)
            {
            case AbilityProperty.Physical:
                attackNum = IsMonster ? PhyAttackNum : (int)Math.Floor(this.PowerNum * this.Lv * AttackRatio);
                attackNum = MathUtils.Addition(attackNum, ExtraAttack.WuliNum, int.MaxValue);
                attackNum = (int)Math.Floor(TriggerAbilityEffectNum(AbilityType.WuLiGongJi, attackNum));
                attackNum = MathUtils.Addition(attackNum, ExtraAttack.AdditionWuliNum * attackNum).ToInt();
                break;

            case AbilityProperty.Ability:
                attackNum = IsMonster ? AbiAttackNum : (int)Math.Floor(this.SoulNum * this.Lv * AttackRatio);
                attackNum = MathUtils.Addition(attackNum, ExtraAttack.HunjiNum, int.MaxValue);
                attackNum = (int)Math.Floor(TriggerAbilityEffectNum(AbilityType.HunJiGongJi, attackNum));
                attackNum = MathUtils.Addition(attackNum, ExtraAttack.AdditionHunjiNum * attackNum).ToInt();
                break;

            case AbilityProperty.Magic:
                attackNum = IsMonster ? MagAttackNum : (int)Math.Floor(this.IntellectNum * this.Lv * AttackRatio);
                attackNum = MathUtils.Addition(attackNum, ExtraAttack.MofaNum, int.MaxValue);
                attackNum = (int)Math.Floor(TriggerAbilityEffectNum(AbilityType.MoFaGongJi, attackNum));
                attackNum = MathUtils.Addition(attackNum, ExtraAttack.AdditionMofaNum * attackNum).ToInt();
                break;

            default:
                break;
            }
            return(attackNum);
        }
示例#2
0
        public override bool TakeAction()
        {
            int maxGeneralNum    = ContextUser.GeneralMaxNum;
            var userGeneralsList = new GameDataCacheSet <UserGeneral>().FindAll(ContextUser.UserID, u => u.GeneralStatus == GeneralStatus.DuiWuZhong && u.GeneralType != GeneralType.Soul);

            if (userGeneralsList.Count >= MathUtils.Addition(maxGeneralNum, 1, int.MaxValue))
            {
                ErrorCode = LanguageManager.GetLang().ErrorCode;
                ErrorInfo = LanguageManager.GetLang().St1404_MaxGeneralNumFull;
                return(false);
            }
            var generalInfo = new ConfigCacheSet <GeneralInfo>().FindKey(generalID);

            if (generalInfo == null)
            {
                ErrorCode = LanguageManager.GetLang().ErrorCode;
                return(false);
            }
            var userGeneral = new GameDataCacheSet <UserGeneral>().FindKey(ContextUser.UserID, generalID);

            if (userGeneral == null && GeneralHelper.IsGeneralRecruit(ContextUser.UserID, generalID) == 1)
            {
                userGeneral                   = new UserGeneral();
                userGeneral.UserID            = ContextUser.UserID;
                userGeneral.GeneralID         = generalID;
                userGeneral.GeneralName       = generalInfo.GeneralName;
                userGeneral.HeadID            = generalInfo.HeadID;
                userGeneral.PicturesID        = generalInfo.PicturesID;
                userGeneral.GeneralLv         = (short)generalInfo.GeneralLv;
                userGeneral.LifeNum           = generalInfo.LifeNum;
                userGeneral.GeneralType       = GeneralType.YongBing;
                userGeneral.CareerID          = generalInfo.CareerID;
                userGeneral.PowerNum          = generalInfo.PowerNum;
                userGeneral.SoulNum           = generalInfo.SoulNum;
                userGeneral.IntellectNum      = generalInfo.IntellectNum;
                userGeneral.TrainingPower     = 0;
                userGeneral.TrainingSoul      = 0;
                userGeneral.TrainingIntellect = 0;
                userGeneral.HitProbability    = ConfigEnvSet.GetDecimal("Combat.HitiNum");
                userGeneral.AbilityID         = generalInfo.AbilityID;
                userGeneral.Momentum          = 0;
                userGeneral.Description       = generalInfo.Description;
                userGeneral.GeneralStatus     = GeneralStatus.DuiWuZhong;
                userGeneral.CurrExperience    = 0;
                userGeneral.Experience1       = 0;
                userGeneral.Experience2       = 0;
                var cacheSet = new GameDataCacheSet <UserGeneral>();
                cacheSet.Add(userGeneral, GameEnvironment.CacheUserPeriod);
            }
            ErrorCode = 0;
            ErrorInfo = LanguageManager.GetLang().St1434_RecruitmentErfolg;
            return(true);
        }
示例#3
0
        /// <summary>
        /// 创建佣兵或佣兵灵魂
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="general"></param>
        /// <param name="type"></param>
        /// <param name="num"></param>
        public static void CreateUserGeneral(string userID, GeneralInfo general, GeneralType type, int num)
        {
            var        cacheSet   = new GameDataCacheSet <UserGeneral>();
            int        generalID  = 0;
            CareerInfo careerInfo = null;

            if (type == GeneralType.YongBing)
            {
                generalID  = general.GeneralID;
                careerInfo = new ConfigCacheSet <CareerInfo>().FindKey(general.CareerID);
            }
            else if (type == GeneralType.Soul)
            {
                generalID = general.SoulID;
            }
            if (generalID > 0)
            {
                UserGeneral userGeneral = new UserGeneral();
                userGeneral.UserID            = userID;
                userGeneral.GeneralID         = generalID;
                userGeneral.GeneralName       = general.GeneralName;
                userGeneral.HeadID            = general.HeadID;
                userGeneral.PicturesID        = general.PicturesID;
                userGeneral.GeneralLv         = 1;
                userGeneral.GeneralType       = type;
                userGeneral.CareerID          = general.CareerID;
                userGeneral.PowerNum          = general.PowerNum;
                userGeneral.SoulNum           = general.SoulNum;
                userGeneral.IntellectNum      = general.IntellectNum;
                userGeneral.TrainingPower     = 0;
                userGeneral.TrainingSoul      = 0;
                userGeneral.TrainingIntellect = 0;
                userGeneral.AbilityID         = general.AbilityID;
                userGeneral.Momentum          = 0;
                userGeneral.Description       = string.Empty;
                userGeneral.HitProbability    = ConfigEnvSet.GetDecimal("Combat.HitiNum");
                userGeneral.GeneralStatus     = GeneralStatus.DuiWuZhong;
                userGeneral.CurrExperience    = 0;
                userGeneral.Experience1       = 0;
                userGeneral.Experience2       = 0;
                if (careerInfo != null)
                {
                    userGeneral.LifeNum = MathUtils.Addition(general.LifeNum, careerInfo.LifeIncreaseNum * (MathUtils.Subtraction(careerInfo.Lv, (short)1, (short)0)), int.MaxValue);
                }
                if (type == GeneralType.Soul)
                {
                    userGeneral.AtmanNum = num;
                }
                userGeneral.HeritageType = HeritageType.Normal;
                userGeneral.AbilityNum   = 3;
                cacheSet.Add(userGeneral, GameEnvironment.CacheUserPeriod);
            }
        }
示例#4
0
        /// <summary>
        /// 获取防御力(物,魂,魔)+ 触发的技能加成
        /// </summary>
        /// <returns></returns>
        public int GetDefenseNum(AbilityProperty property, CombatGeneral tagetGeneral)
        {
            var DefenseRatio = ConfigEnvSet.GetDecimal("Combat.DefenseRatio");
            int defenseNum   = 0;

            switch (property)
            {
            case AbilityProperty.Physical:
                bool    tType       = false;
                decimal tpLvPercent = GetLvPercent(tagetGeneral, out tType);
                defenseNum = IsMonster ? PhyDefenseNum : (int)Math.Floor(this.PowerNum * this.Lv * DefenseRatio);
                defenseNum = MathUtils.Addition(defenseNum, ExtraDefense.WuliNum, int.MaxValue);
                defenseNum = (int)Math.Floor(TriggerAbilityEffectNum(AbilityType.WuLiFangYu, defenseNum));
                if (!tType)
                {
                    defenseNum = MathUtils.Subtraction(defenseNum, (tpLvPercent * defenseNum).ToInt());
                }
                else
                {
                    defenseNum = MathUtils.Addition(defenseNum, (tpLvPercent * defenseNum).ToInt());
                }
                defenseNum = MathUtils.Addition(defenseNum, ExtraDefense.AdditionWuliNum * defenseNum).ToInt();
                break;

            case AbilityProperty.Ability:
                defenseNum = IsMonster ? AbiDefenseNum : (int)Math.Floor(this.SoulNum * this.Lv * DefenseRatio);
                defenseNum = MathUtils.Addition(defenseNum, ExtraDefense.HunjiNum, int.MaxValue);
                defenseNum = (int)Math.Floor(TriggerAbilityEffectNum(AbilityType.HunJiFangYu, defenseNum));
                defenseNum = MathUtils.Addition(defenseNum, ExtraDefense.AdditionHunjiNum * defenseNum).ToInt();
                break;

            case AbilityProperty.Magic:
                defenseNum = IsMonster ? MagDefenseNum : (int)Math.Floor(this.IntellectNum * this.Lv * DefenseRatio);
                defenseNum = MathUtils.Addition(defenseNum, ExtraDefense.MofaNum, int.MaxValue);
                defenseNum = (int)Math.Floor(TriggerAbilityEffectNum(AbilityType.MoFaFangYu, defenseNum));
                defenseNum = MathUtils.Addition(defenseNum, ExtraDefense.AdditionMofaNum * defenseNum).ToInt();
                break;

            default:
                break;
            }

            if (!defenseNum.IsValid())
            {
                defenseNum = 0;
            }
            return(defenseNum);
        }
示例#5
0
        private void CreateGeneral(CareerInfo careerInfo)
        {
            GeneralInfo        general          = new ConfigCacheSet <GeneralInfo>().FindKey(generalID);
            List <UserGeneral> userGeneralArray = new GameDataCacheSet <UserGeneral>().FindAll(Uid);

            if (userGeneralArray.Count > 0 || general == null)
            {
                return;
            }

            UserGeneral userGeneral = new UserGeneral();

            userGeneral.UserID            = Uid;
            userGeneral.GeneralID         = general.GeneralID;
            userGeneral.GeneralName       = general.GeneralName;
            userGeneral.HeadID            = general.HeadID;
            userGeneral.PicturesID        = general.PicturesID;
            userGeneral.GeneralLv         = (short)careerInfo.Lv;
            userGeneral.GeneralType       = GeneralType.YongHu;
            userGeneral.CareerID          = _careerID;
            userGeneral.PowerNum          = general.PowerNum;
            userGeneral.SoulNum           = general.SoulNum;
            userGeneral.IntellectNum      = general.IntellectNum;
            userGeneral.TrainingPower     = 0;
            userGeneral.TrainingSoul      = 0;
            userGeneral.TrainingIntellect = 0;
            userGeneral.AbilityID         = general.AbilityID;
            userGeneral.Momentum          = 0;
            userGeneral.Description       = string.Empty;
            userGeneral.HitProbability    = ConfigEnvSet.GetDecimal("Combat.HitiNum");
            userGeneral.GeneralStatus     = GeneralStatus.DuiWuZhong;
            userGeneral.CurrExperience    = 0;
            userGeneral.Experience1       = 0;
            userGeneral.Experience2       = 0;
            //userGeneral.LifeNum = MathUtils.Addition(general.LifeNum, careerInfo.LifeIncreaseNum * (MathUtils.Subtraction(careerInfo.Lv, (short)1, (short)0)), int.MaxValue);
            userGeneral.RefreshMaxLife();
            userGeneral.HeritageType = HeritageType.Normal;
            userGeneral.AbilityNum   = 3;
            var cacheSet = new GameDataCacheSet <UserGeneral>();

            cacheSet.Add(userGeneral);
            cacheSet.Update();
            UserAbilityHelper.AddUserAbility(general.AbilityID, Uid.ToInt(), generalID, 1);
        }
示例#6
0
        /// <summary>
        /// 等级差压制
        /// </summary>
        /// <param name="tagetGeneral"></param>
        /// <param name="tType">False:攻击方等级高,True:被攻击方等级高</param>
        /// <returns></returns>
        private decimal GetLvPercent(CombatGeneral tagetGeneral, out bool tType)
        {
            tType = false;
            var lvrate = ConfigEnvSet.GetDecimal("Combat.LvPercentRate");
            var subLv  = 0;

            if (tagetGeneral.Lv > this.Lv)
            {
                tType = true;
                subLv = MathUtils.Subtraction(tagetGeneral.Lv, this.Lv, (short)0);
            }
            else
            {
                subLv = MathUtils.Subtraction(this.Lv, tagetGeneral.Lv, (short)0);
            }
            var val = subLv * lvrate;

            return(val);
        }
示例#7
0
        /// <summary>
        /// 触发命中概率
        /// </summary>
        /// <param name="general"></param>
        /// <param name="tpLvPercent"></param>
        /// <param name="percent"></param>
        /// <returns></returns>
        public bool TriggerHitPercent(CombatGeneral tagetGeneral, out decimal hitPercent)
        {
            //int tType = 0;
            //decimal tpLvPercent = GetLvPercent(tagetGeneral, out tType);
            hitPercent = HitNum + TriggerAbilityEffectNum(AbilityType.MingZhong, 1);
            decimal shanbiPercent = tagetGeneral.ShanbiNum + tagetGeneral.TriggerAbilityEffectNum(AbilityType.ShanBi, 1);

            hitPercent = MathUtils.Subtraction(hitPercent, shanbiPercent, 0);

            //原因:增加最小概率
            decimal minHitNum = ConfigEnvSet.GetDecimal("Combat.MinHitPercent");

            if (minHitNum == 0)
            {
                minHitNum = (decimal)0.4;
            }
            if (hitPercent < minHitNum)
            {
                hitPercent = minHitNum;
            }
            return(RandomUtils.IsHit(hitPercent));
        }
示例#8
0
        public override bool TakeAction()
        {
            var cacheSet = new PersonalCacheStruct <UserGeneral>();

            if (recruitType == RecruitType.SoulRecruit)
            {
                general = new ShareCacheStruct <GeneralInfo>().FindKey(soulID);
                if (general == null)
                {
                    ErrorCode = LanguageManager.GetLang().ErrorCode;
                    return(false);
                }
                UserGeneral userGeneral = cacheSet.FindKey(ContextUser.UserID, soulID);
                if (soulID == 0 || userGeneral != null)
                {
                    UserItemHelper.AddUserItem(ContextUser.UserID, general.ItemID, 1);
                }
                else
                {
                    userGeneral        = new UserGeneral();
                    userGeneral.UserID = ContextUser.UserID;
                    cacheSet.Add(userGeneral);
                    userGeneral.GeneralID         = general.GeneralID;
                    userGeneral.GeneralName       = general.GeneralName;
                    userGeneral.HeadID            = general.HeadID;
                    userGeneral.PicturesID        = general.PicturesID;
                    userGeneral.GeneralLv         = (short)general.GeneralLv;
                    userGeneral.LifeNum           = general.LifeNum;
                    userGeneral.GeneralType       = GeneralType.YongBing;
                    userGeneral.CareerID          = general.CareerID;
                    userGeneral.PowerNum          = general.PowerNum;
                    userGeneral.SoulNum           = general.SoulNum;
                    userGeneral.IntellectNum      = general.IntellectNum;
                    userGeneral.TrainingPower     = 0;
                    userGeneral.TrainingSoul      = 0;
                    userGeneral.TrainingIntellect = 0;
                    userGeneral.HitProbability    = ConfigEnvSet.GetDecimal("Combat.HitiNum");
                    userGeneral.AbilityID         = general.AbilityID;
                    userGeneral.Momentum          = 0;
                    userGeneral.Description       = general.Description;
                    userGeneral.GeneralStatus     = GeneralStatus.DuiWuZhong;
                    userGeneral.CurrExperience    = 0;
                    userGeneral.Experience1       = 0;
                    userGeneral.Experience2       = 0;
                }
            }
            else
            {
                RecruitRule recruitRule = new ShareCacheStruct <RecruitRule>().FindKey(recruitType);
                if (recruitRule == null)
                {
                    ErrorCode = LanguageManager.GetLang().ErrorCode;
                    return(false);
                }
                int surplusNum = GeneralHelper.SurplusNum(ContextUser.UserID, recruitRule.FreeNum,
                                                          recruitRule.RecruitType.ToEnum <RecruitType>());
                if (surplusNum > 0 && !GeneralHelper.GeneralRecruitColdTime(ContextUser.UserID, recruitType))
                {
                    GeneralHelper.UpdateDailyRecruitNum(ContextUser.UserID, recruitType);
                    GeneralHelper.UpdateRecruitColdTime(ContextUser.UserID, recruitRule);
                }
                else
                {
                    if (ContextUser.GoldNum < recruitRule.GoldNum)
                    {
                        ErrorCode = LanguageManager.GetLang().ErrorCode;
                        ErrorInfo = LanguageManager.GetLang().St_GoldNotEnough;
                        return(false);
                    }
                    ContextUser.UseGold = MathUtils.Addition(ContextUser.UseGold, recruitRule.GoldNum);
                }

                CacheList <RecruitInfo> recruitInfos = recruitRule.GeneralQuality;
                double[] probability = new double[recruitInfos.Count];
                for (int i = 0; i < recruitInfos.Count; i++)
                {
                    probability[i] = (double)recruitInfos[i].Probability;
                }
                int            index2      = RandomUtils.GetHitIndex(probability);
                GeneralQuality quality     = recruitInfos[index2].Quality;
                var            generalList = new ShareCacheStruct <GeneralInfo>().FindAll(s => s.GeneralQuality == quality);
                if (generalList.Count > 0)
                {
                    int indexradom = RandomUtils.GetRandom(0, generalList.Count);
                    if (indexradom < 0 || indexradom >= generalList.Count)
                    {
                        return(false);
                    }
                    general = generalList[indexradom];

                    UserGeneral userGeneral = cacheSet.FindKey(ContextUser.UserID, general.GeneralID);

                    if (userGeneral != null && userGeneral.GeneralStatus != GeneralStatus.YinCang)
                    {
                        currSoulID  = general.SoulID;
                        gainNum     = general.DemandNum;
                        userGeneral = cacheSet.FindKey(ContextUser.UserID, currSoulID);
                        if (userGeneral != null)
                        {
                            userGeneral.AtmanNum = MathUtils.Addition(userGeneral.AtmanNum, gainNum);
                            generalType          = GeneralType.Soul;
                        }
                        else
                        {
                            userGeneral           = new UserGeneral();
                            userGeneral.UserID    = ContextUser.UserID;
                            userGeneral.GeneralID = currSoulID;
                            generalType           = GeneralType.Soul;
                            cacheSet.Add(userGeneral);
                            UserAbilityHelper.AddUserAbility(general.AbilityID, ContextUser.UserID.ToInt(), general.GeneralID, 1);
                        }
                    }
                    else if (userGeneral == null)
                    {
                        userGeneral           = new UserGeneral();
                        userGeneral.UserID    = ContextUser.UserID;
                        userGeneral.GeneralID = general.GeneralID;
                        generalType           = GeneralType.YongBing;
                        cacheSet.Add(userGeneral);
                        UserAbilityHelper.AddUserAbility(general.AbilityID, ContextUser.UserID.ToInt(), general.GeneralID, 1);
                    }
                    userGeneral.GeneralName       = general.GeneralName;
                    userGeneral.HeadID            = general.HeadID;
                    userGeneral.PicturesID        = general.PicturesID;
                    userGeneral.GeneralLv         = (short)general.GeneralLv;
                    userGeneral.LifeNum           = general.LifeNum;
                    userGeneral.GeneralType       = generalType;
                    userGeneral.CareerID          = general.CareerID;
                    userGeneral.PowerNum          = general.PowerNum;
                    userGeneral.SoulNum           = general.SoulNum;
                    userGeneral.IntellectNum      = general.IntellectNum;
                    userGeneral.TrainingPower     = 0;
                    userGeneral.TrainingSoul      = 0;
                    userGeneral.TrainingIntellect = 0;
                    userGeneral.HitProbability    = ConfigEnvSet.GetDecimal("Combat.HitiNum");
                    userGeneral.AbilityID         = general.AbilityID;
                    userGeneral.Momentum          = 0;
                    userGeneral.Description       = general.Description;
                    userGeneral.GeneralStatus     = GeneralStatus.DuiWuZhong;
                    userGeneral.CurrExperience    = 0;
                    userGeneral.Experience1       = 0;
                    userGeneral.Experience2       = 0;

                    //玩家抽取到蓝色和紫色佣兵时,给予系统频道提示
                    //if (recruitType != RecruitType.SoulRecruit)
                    //{
                    //    if (general.GeneralQuality.ToEnum<GeneralQuality>() == GeneralQuality.Blue || general.GeneralQuality.ToEnum<GeneralQuality>() == GeneralQuality.Purple)
                    //    {
                    //        string content = string.Empty;
                    //        content = string.Format(LanguageManager.GetLang().St_UserGetGeneralQuality, ContextUser.NickName,recruitType,
                    //                            general.GeneralQuality.ToEnum<GeneralQuality>(), general.GeneralName);
                    //        new TjxChatService().SystemSend(ChatType.System, content);
                    //    }
                    //}
                }
            }
            return(true);
        }
示例#9
0
        public static IGeneral Create(SJTPlotEmbattleInfo embattle)
        {
            var monster = new ConfigCacheSet <SJTMonsterInfo>().FindKey(embattle.MonsterID);

            if (monster == null)
            {
                throw new Exception("Plot monster:" + embattle.MonsterID + " is not exist");
            }

            CareerInfo  career    = new ConfigCacheSet <CareerInfo>().FindKey(monster.CareerID);
            AbilityInfo ability   = new ConfigCacheSet <AbilityInfo>().FindKey(monster.AbilityID);
            var         abilityLv = new ConfigCacheSet <AbilityLvInfo>().FindKey(monster.AbilityLv);

            if (career == null || ability == null || abilityLv == null)
            {
                throw new Exception("career or ability or AbilityLv is null.");
            }

            CombatGeneral general = new CombatGeneral()
            {
                UserID      = null,
                Position    = embattle.GridSeqNo,
                GeneralID   = embattle.MonsterID,
                GeneralName = monster.GeneralName,
                HeadID      = monster.HeadID,
                CareerID    = monster.CareerID,
                CareerType  = career.CareerType,
                IsMove      = career.IsMove,
                LifeNum     = monster.LifeNum,
                LifeMaxNum  = monster.LifeNum,
                Lv          = monster.GeneralLv,
                Momentum    = (short)monster.MomentumNum,
                Ability     = ability,
                IsAttrMove  = ability.IsMove,
                BaojiNum    = monster.BaojiNum,
                BishaNum    = monster.BishaNum,
                RenxingNum  = monster.RenxingNum,
                HitNum      =
                    monster.HitNum == 0
                        ? ConfigEnvSet.GetDecimal("Combat.HitiNum")
                        : monster.HitNum,
                ShanbiNum      = monster.ShanbiNum,
                GedangNum      = monster.GedangNum,
                PojiNum        = monster.PojiNum,
                BattleStatus   = BattleStatus.Normal,
                PowerNum       = monster.PowerNum,
                SoulNum        = monster.SoulNum,
                IntellectNum   = monster.IntellectNum,
                FixedDamageNum = 0,
                //怪物没有附加属性
                ExtraAttack   = new CombatProperty(),
                ExtraDefense  = new CombatProperty(),
                IsMonster     = true,
                IsWait        = false,
                PhyAttackNum  = monster.PhyAttackNum,
                PhyDefenseNum = monster.PhyDefenseNum,
                MagAttackNum  = monster.MagAttackNum,
                MagDefenseNum = monster.MagDefenseNum,
                AbiAttackNum  = monster.AbiAttackNum,
                AbiDefenseNum = monster.AbiDefenseNum
            };

            general.PhyAttackNum = MathUtils.Addition(general.PhyAttackNum,
                                                      (general.PhyAttackNum * abilityLv.EffectValue)).ToInt();
            general.PhyDefenseNum = MathUtils.Addition(general.PhyDefenseNum,
                                                       (general.PhyDefenseNum * abilityLv.EffectValue)).ToInt();
            general.MagAttackNum = MathUtils.Addition(general.MagAttackNum,
                                                      (general.MagAttackNum * abilityLv.EffectValue)).ToInt();
            general.MagDefenseNum = MathUtils.Addition(general.MagDefenseNum,
                                                       (general.MagDefenseNum * abilityLv.EffectValue)).ToInt();
            general.AbiAttackNum = MathUtils.Addition(general.AbiAttackNum,
                                                      (general.AbiAttackNum * abilityLv.EffectValue)).ToInt();
            general.AbiDefenseNum = MathUtils.Addition(general.AbiDefenseNum,
                                                       (general.AbiDefenseNum * abilityLv.EffectValue)).ToInt();
            return(general);
        }
示例#10
0
        public override bool TakeAction()
        {
            UserHelper.ChechDailyRestrain(ContextUser.UserID);
            UserGeneral general = new GameDataCacheSet <UserGeneral>().FindKey(ContextUser.UserID, generalID);

            if (general == null)
            {
                return(false);
            }
            if (general.FeelLv >= GiftHelper.maxFeelLv)
            {
                ErrorCode = LanguageManager.GetLang().ErrorCode;
                ErrorInfo = LanguageManager.GetLang().St1422_MaxFeelFull;
                return(false);
            }
            int     useGold         = ConfigEnvSet.GetInt("User.PresentationGold");
            int     feelNum         = ConfigEnvSet.GetInt("User.PresentationFeelNum");
            int     maxSatiationNum = ConfigEnvSet.GetInt("User.FeelMaxSatiationNum");
            decimal generalEffect   = ConfigEnvSet.GetDecimal("Gift.GeneralEffectNum");

            if (ops == 1)
            {
                var package  = UserItemPackage.Get(ContextUser.UserID);
                var useritem = package.ItemPackage.Find(m => m.UserItemID.Equals(userItemID));
                if (useritem == null)
                {
                    return(false);
                }
                ItemBaseInfo itemInfo = new ConfigCacheSet <ItemBaseInfo>().FindKey(useritem.ItemID);
                if (itemInfo != null)
                {
                    if (general.SaturationNum >= maxSatiationNum)
                    {
                        ErrorCode = LanguageManager.GetLang().ErrorCode;
                        ErrorInfo = LanguageManager.GetLang().St1422_FeelMaxSatiationNum;
                        return(false);
                    }
                    int giftEffect = itemInfo.EffectNum;
                    //佣兵喜欢类型的礼物,好感度加成
                    GeneralInfo generalInfo = new ConfigCacheSet <GeneralInfo>().FindKey(generalID);
                    if (generalInfo != null && itemInfo.GiftType == generalInfo.GiftType)
                    {
                        decimal sumGeneralEffect = MathUtils.Addition(generalEffect, 1, decimal.MaxValue);
                        giftEffect = MathUtils.RoundCustom(giftEffect * sumGeneralEffect).ToShort();
                    }
                    GiftHelper.GeneralFeelUpgrade(general, giftEffect, itemInfo.SatiationNum);
                    UserItemHelper.UseUserItem(ContextUser.UserID, itemInfo.ItemID, 1);
                    ErrorCode = ops;
                    ErrorInfo = string.Format(LanguageManager.GetLang().St1422_PresentationFeelNum, giftEffect);
                }
            }
            else if (ops == 2)
            {
                int addNum = UseGoldZengSong(ContextUser.UserID);
                useGold   = MathUtils.Addition(useGold, addNum);
                ErrorCode = ops;
                ErrorInfo = string.Format(LanguageManager.GetLang().St1422_PresentationUseGold, useGold, feelNum);
                return(false);
            }
            else if (ops == 3)
            {
                if (GiftHelper.SurplusGoldNum(ContextUser.UserID) <= 0)
                {
                    ErrorCode = LanguageManager.GetLang().ErrorCode;
                    ErrorInfo = LanguageManager.GetLang().St1422_PresentationGoldNum;
                    return(false);
                }
                UserDailyRestrain userDaily = new GameDataCacheSet <UserDailyRestrain>().FindKey(ContextUser.UserID);
                int addNum = UseGoldZengSong(ContextUser.UserID);
                useGold = MathUtils.Addition(useGold, addNum);
                if (ContextUser.GoldNum < useGold)
                {
                    ErrorCode = LanguageManager.GetLang().ErrorCode;
                    ErrorInfo = LanguageManager.GetLang().St_GoldNotEnough;
                    return(false);
                }

                if (userDaily != null)
                {
                    if (userDaily.UserExtend == null)
                    {
                        userDaily.UserExtend = new DailyUserExtend();
                    }
                    userDaily.UserExtend.UpdateNotify(obj =>
                    {
                        userDaily.UserExtend.GoldNum = MathUtils.Addition(userDaily.UserExtend.GoldNum, (short)1);
                        return(true);
                    });
                }
                int feelExp = general.FeelExperience;
                int upExp   = MathUtils.Addition(feelExp, feelNum);
                ContextUser.UseGold = MathUtils.Addition(ContextUser.UseGold, useGold);
                GiftHelper.GeneralFeelUpgrade(general, feelNum, 0);
                //TraceLog.ReleaseWrite(string.Format("玩家{0}(通行证ID)的佣兵{1}(ID){2}使用晶石赠送增加好感度{3}。好感度从{4}上升到{5}。",
                //    ContextUser.Pid,
                //    ContextUser.UserID,
                //    ContextUser.NickName, feelNum,
                //    feelExp, upExp));
                ErrorCode = ops;
                ErrorInfo = string.Format(LanguageManager.GetLang().St1422_PresentationFeelNum, feelNum);
            }
            return(true);
        }
示例#11
0
 /// <summary>
 /// 等级差压制
 /// </summary>
 /// <param name="tagetGeneral"></param>
 /// <returns></returns>
 private decimal GetLvPercent(CombatGeneral tagetGeneral)
 {
     return(tagetGeneral.Lv.Subtraction(this.Lv, 0) * ConfigEnvSet.GetDecimal("Combat.LvPercentRate"));
 }
示例#12
0
        public static IGeneral Create(SJTPlotEmbattleInfo embattle, double difficultNum)
        {
            SJTMonsterInfo monster = new ShareCacheStruct <SJTMonsterInfo>().FindKey(embattle.MonsterID);

            if (monster == null)
            {
                throw new Exception("Plot monster:" + embattle.MonsterID + " is not exist");
            }

            CareerInfo  career  = new ShareCacheStruct <CareerInfo>().FindKey(monster.CareerID);
            AbilityInfo ability = new ShareCacheStruct <AbilityInfo>().FindKey(monster.AbilityID);

            if (career == null || ability == null)
            {
                throw new Exception("career or ability is null.");
            }
            CombatGeneral general = new CombatGeneral()
            {
                UserID      = null,
                Position    = embattle.GridSeqNo,
                GeneralID   = embattle.MonsterID,
                GeneralName = monster.GeneralName,
                HeadID      = monster.HeadID,
                CareerID    = monster.CareerID,
                CareerType  = career.CareerType,
                IsMove      = career.IsMove,
                LifeNum     = monster.LifeNum,
                LifeMaxNum  = monster.LifeNum,
                Lv          = monster.GeneralLv,
                Momentum    = (short)monster.MomentumNum,
                Ability     = ability,
                IsAttrMove  = ability.IsMove,
                BaojiNum    = monster.BaojiNum,
                BishaNum    = monster.BishaNum,
                RenxingNum  = monster.RenxingNum,
                HitNum      =
                    monster.HitNum == 0
                        ? ConfigEnvSet.GetDecimal("Combat.HitiNum")
                        : monster.HitNum,
                ShanbiNum    = monster.ShanbiNum,
                GedangNum    = monster.GedangNum,
                PojiNum      = monster.PojiNum,
                BattleStatus = BattleStatus.Normal,
                PowerNum     = monster.PowerNum,
                SoulNum      = monster.SoulNum,
                IntellectNum = monster.IntellectNum,
                //todo 圣吉塔怪物表未配置固定伤害值
                FixedDamageNum = 1, //monster.DamageNum,
                //怪物没有附加属性
                ExtraAttack   = new CombatProperty(),
                ExtraDefense  = new CombatProperty(),
                IsMonster     = true,
                IsWait        = false,
                PhyAttackNum  = (monster.PhyAttackNum * difficultNum).ToInt(),
                PhyDefenseNum = (monster.PhyDefenseNum * difficultNum).ToInt(),
                MagAttackNum  = (monster.MagAttackNum * difficultNum).ToInt(),
                MagDefenseNum = (monster.MagDefenseNum * difficultNum).ToInt(),
                AbiAttackNum  = (monster.AbiAttackNum * difficultNum).ToInt(),
                AbiDefenseNum = (monster.AbiDefenseNum * difficultNum).ToInt()
            };

            return(general);
        }