示例#1
0
        public override bool TakeAction()
        {
            string queID     = string.Empty;
            int    maxEquNum = ConfigEnvSet.GetInt("UserQueue.EquStrengMaxNum");

            _userGeneralArray = new GameDataCacheSet <UserGeneral>().FindAll(ContextUser.UserID, u => u.GeneralStatus == GeneralStatus.DuiWuZhong);
            List <UserQueue> userQueueArray = new GameDataCacheSet <UserQueue>().FindAll(ContextUser.UserID, m => m.QueueType == QueueType.EquipmentStrong);

            if (userQueueArray.Count > 0 && userQueueArray.Count == ContextUser.QueueNum)
            {
                int minEquNum     = userQueueArray[0].StrengNum;
                int totalcoldTime = userQueueArray[0].DoRefresh();
                queID = userQueueArray[0].QueueID;
                foreach (UserQueue queue in userQueueArray)
                {
                    if (totalcoldTime > queue.DoRefresh())
                    {
                        queID         = queue.QueueID;
                        totalcoldTime = queue.DoRefresh();
                    }

                    if (totalcoldTime > 0 && !queue.IsSuspend && minEquNum >= queue.StrengNum && userQueueArray.Count >= ContextUser.QueueNum)
                    {
                        minEquNum = queue.StrengNum;
                        if (minEquNum == maxEquNum)
                        {
                            _coldTime = totalcoldTime;
                            if (_coldTime == 0)
                            {
                                break;
                            }
                        }
                        else
                        {
                            _coldTime = 0;
                        }
                    }
                    else
                    {
                        _coldTime = 0;
                    }
                }
            }
            queueID = queID;
            return(true);
        }
示例#2
0
        public static int GetOpenGoldNum(int gNum, int crystalNum)
        {
            int latticeSpar   = 0; //开启每个格子的价格
            int Sum           = 0;
            int Sub           = 0;
            int minCrystalNum = ConfigEnvSet.GetInt("UserCrystal.CrystalMinNum");
            int subCrystalNum = MathUtils.Subtraction(gNum, minCrystalNum, 0);

            int minusNum = MathUtils.Subtraction(crystalNum, minCrystalNum, 0);

            for (int i = 1; i <= subCrystalNum; i++)
            {
                if (i == 0)
                {
                    latticeSpar = 0;
                }
                if (i == 1)
                {
                    latticeSpar = 10;
                }
                if (i >= 2)
                {
                    latticeSpar = i * 10;
                }
                Sum += latticeSpar;
            }

            for (int j = 0; j <= minusNum; j++)
            {
                if (j == 0)
                {
                    latticeSpar = 0;
                }
                if (j == 1)
                {
                    latticeSpar = 10;
                }
                if (j >= 2)
                {
                    latticeSpar = j * 10;
                }
                Sub += latticeSpar;
            }
            return(MathUtils.Subtraction(Sum, Sub, 0));
        }
示例#3
0
        public static int GetOpenGoldNum(int gNum, int userGridNum)
        {
            int latticeSpar = 0; //开启每个格子的价格
            int sum         = 0;
            int sub         = 0;
            int minGridNum  = ConfigEnvSet.GetInt("User.GridMinNum"); //物品背包初始开启格子数值
            int subGridNum  = MathUtils.Subtraction(gNum, minGridNum);

            int minusNum = MathUtils.Subtraction(userGridNum, minGridNum);

            for (int i = 1; i <= subGridNum; i++)
            {
                if (i == 0)
                {
                    latticeSpar = 0;
                }
                if (i == 1)
                {
                    latticeSpar = 2;
                }
                if (i >= 2)
                {
                    latticeSpar = i * 2;
                }
                sum += latticeSpar;
            }

            for (int j = 0; j <= minusNum; j++)
            {
                if (j == 0)
                {
                    latticeSpar = 0;
                }
                if (j == 1)
                {
                    latticeSpar = 2;
                }
                if (j >= 2)
                {
                    latticeSpar = j * 2;
                }
                sub += latticeSpar;
            }
            return(MathUtils.Subtraction(sum, sub));
        }
示例#4
0
        /// <summary>
        /// 检查赠送金豆
        /// </summary>
        /// <param name="user"></param>
        /// <param name="roomInfo"></param>
        public bool CheckDailyGiffCoin(GameUser user, RoomInfo roomInfo)
        {
            UserDailyRestrain restrain = new GameDataCacheSet <UserDailyRestrain>().FindKey(user.PersonalId);

            if (restrain != null)
            {
                RefreshRestrain(restrain);
                int dailyGiffCoinTime = ConfigEnvSet.GetInt("User.DailyGiffCoinTime", 1);
                if (restrain.RestrainProperty.DailyGiffCoinTime < dailyGiffCoinTime)
                {
                    user.GameCoin = MathUtils.Addition(user.GameCoin, roomInfo.GiffCion);
                    restrain.RestrainProperty.DailyGiffCoinTime = MathUtils.Addition(restrain.RestrainProperty.DailyGiffCoinTime, 1);

                    return(true);
                }
            }
            return(false);
        }
示例#5
0
        private void EnableFunction()
        {
            string[] funList  = ConfigEnvSet.GetString("User.DefaultFunction").Split(new[] { ',' });
            var      cacheSet = new GameDataCacheSet <UserFunction>();

            foreach (string fun in funList)
            {
                if (fun.TrimEnd().Length > 0)
                {
                    UserFunction userFun = new UserFunction();
                    userFun.UserID     = Uid;
                    userFun.FunEnum    = fun.ToEnum <FunctionEnum>();
                    userFun.CreateDate = DateTime.Now;
                    cacheSet.Add(userFun);
                    cacheSet.Update();
                }
            }
        }
示例#6
0
        public override bool TakeAction()
        {
            if (latticeNum > ContextUser.WarehouseNum)
            {
                int maxWarehouseNum = ConfigEnvSet.GetInt("User.WarehouseMaxNum");
                int openGold        = GetOpenGoldNum(latticeNum, ContextUser.WarehouseNum);
                int UserGridNum     = ContextUser.WarehouseNum;
                int OpenGridNum     = MathUtils.Addition(UserGridNum, latticeNum, maxWarehouseNum);//开启的格子数
                int subGridNum      = MathUtils.Subtraction(latticeNum, UserGridNum, 0);
                if (ops == 1)
                {
                    //开启第n个格子所需的晶石
                    this.ErrorCode = 1;
                    this.ErrorInfo = string.Format(LanguageManager.GetLang().St1108_WarehouseNumUseGold, subGridNum, openGold);
                    return(false);
                }
                else if (ops == 2)
                {
                    if (ContextUser.GoldNum >= openGold)
                    {
                        this.ErrorCode = 2;

                        ContextUser.UseGold      = MathUtils.Addition(ContextUser.UseGold, openGold, int.MaxValue);
                        ContextUser.WarehouseNum = latticeNum;
                        //ContextUser.Update();
                        UserLogHelper.AppenUseGoldLog(ContextUser.UserID, 5, latticeNum, OpenGridNum, openGold,
                                                      ContextUser.GoldNum,
                                                      MathUtils.Addition(ContextUser.GoldNum, openGold, int.MaxValue));
                    }
                    else
                    {
                        this.ErrorCode = LanguageManager.GetLang().ErrorCode;
                        this.ErrorInfo = LanguageManager.GetLang().St_GoldNotEnough;
                        return(false);
                    }
                }
                else
                {
                    this.ErrorCode = LanguageManager.GetLang().ErrorCode;
                    return(false);
                }
            }
            return(true);
        }
示例#7
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);
        }
示例#8
0
        public override bool TakeAction()
        {
            UserDailyRestrain dailyRestrain = new PersonalCacheStruct <UserDailyRestrain>().FindKey(ContextUser.UserID);
            int baseNum = ConfigEnvSet.GetInt("FengLu");
            int useGold = (ContextUser.UserLv * baseNum);

            if (dailyRestrain != null && dailyRestrain.RefreshDate.Date == DateTime.Now.Date && dailyRestrain.Funtion8 == 0)
            {
                if (dailyRestrain.Funtion8 == 0)
                {
                    dailyRestrain.Funtion8 = MathUtils.Addition(dailyRestrain.Funtion8, 1, int.MaxValue);
                    //dailyRestrain.Update();
                    ContextUser.GameCoin = MathUtils.Addition(ContextUser.GameCoin, useGold, int.MaxValue);
                    //ContextUser.Update();
                    ErrorInfo = string.Format(LanguageManager.GetLang().St1020_FengLu, useGold);
                }
            }
            return(true);
        }
示例#9
0
        /// <summary>
        /// 被克制属相
        /// </summary>
        /// <param name="zodiacType">玩家属相</param>
        /// <param name="typeID">类型 1.克制 2 被克制 3.全部属相</param>
        /// <returns></returns>
        public static TDictionary <short, decimal> ZodiacRestraint(ZodiacType zodiacType, int typeID)
        {
            TDictionary <short, decimal> zodiacTDList = new TDictionary <short, decimal>();

            string[] zodiacArray = ConfigEnvSet.GetString("Trump.ZodiacRestraint").Split(',');
            foreach (string s in zodiacArray)
            {
                string[] zodiacStr = s.Split('=');
                if (typeID == 1)
                {
                    if (zodiacStr.Length > 2 && zodiacType == zodiacStr[0].ToEnum <ZodiacType>())
                    {
                        string[] zodiacList = zodiacStr[1].Split('|');
                        foreach (string s1 in zodiacList)
                        {
                            zodiacTDList.Add(s1.ToShort(), zodiacStr[2].ToDecimal());
                        }
                    }
                }
                if (typeID == 2)
                {
                    if (zodiacStr.Length > 2)
                    {
                        string[] zodiacList = zodiacStr[1].Split('|');
                        foreach (string s1 in zodiacList)
                        {
                            if (s1 != ZodiacType.NoZodiac.ToString() && s1.ToEnum <ZodiacType>() == zodiacType)
                            {
                                zodiacTDList.Add(s1.ToShort(), zodiacStr[0].ToDecimal());
                            }
                        }
                    }
                }
                if (typeID == 3)
                {
                    if (zodiacStr.Length > 2 && zodiacStr[0].ToEnum <ZodiacType>() != zodiacType)
                    {
                        zodiacTDList.Add(s.ToShort(), zodiacStr[2].ToDecimal());
                    }
                }
            }
            return(zodiacTDList);
        }
示例#10
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);
        }
示例#11
0
        public override bool TakeAction()
        {
            receipt = new CombatMachEndReceipt();
            int addv = 0;

            if (result == EventStatus.Good)
            {
                addv = ConfigEnvSet.GetInt("Combat.MatchWinAwardCombatCoin");
            }
            else
            {
                addv = ConfigEnvSet.GetInt("Combat.MatchFailedAwardCombatCoin");
                GetCombat.LastMatchFightFailedDate = DateTime.Now;
            }
            //GetCombat.CombatCoin = MathUtils.Addition(GetCombat.CombatCoin, addv, int.MaxValue);

            UserHelper.RewardsCombatCoin(Current.UserId, addv);
            receipt.AwardCombatCoin = addv;

            BigInteger gold       = ConfigEnvSet.GetInt("Combat.MatchWinAwardGold");
            BigInteger awardValue = Math.Ceiling(GetBasis.UserLv / 50.0).ToInt() * gold;

            if (result == EventStatus.Good)
            {
                receipt.AwardGold = awardValue.ToString();
                UserHelper.RewardsGold(Current.UserId, awardValue, UpdateCoinOperate.NormalReward, true);
            }
            else
            {
                awardValue       /= 4;
                receipt.AwardGold = awardValue.ToString();
                UserHelper.RewardsGold(Current.UserId, awardValue, UpdateCoinOperate.NormalReward, true);
            }

            // 每日
            UserHelper.EveryDayTaskProcess(Current.UserId, TaskType.CombatMatch, 1);

            // 成就
            UserHelper.AchievementProcess(Current.UserId, AchievementType.CombatMatch, "1");


            return(true);
        }
示例#12
0
        public override bool TakeAction()
        {
            int needDiamond = ConfigEnvSet.GetInt("System.ChangeNicknameNeedDiamond");

            if (GetBasis.DiamondNum < needDiamond)
            {
                return(true);
            }
            var    nickNameCheck = new NickNameCheck();
            var    KeyWordCheck  = new KeyWordCheck();
            string msg;

            if (nickNameCheck.VerifyRange(newName, out msg) ||
                KeyWordCheck.VerifyKeyword(newName, out msg) ||
                nickNameCheck.IsExistNickName(newName, out msg))
            {
                ErrorCode = Language.Instance.ErrorCode;
                ErrorInfo = msg;
                return(false);
            }

            UserHelper.ConsumeDiamond(Current.UserId, needDiamond);
            GetBasis.NickName = newName;


            // 这里刷新排行榜数据
            var combat = UserHelper.FindRankUser(Current.UserId, RankType.Combat);

            combat.NickName = newName;
            var level = UserHelper.FindRankUser(Current.UserId, RankType.Level);

            level.NickName = newName;
            var fightvalue = UserHelper.FindRankUser(Current.UserId, RankType.FightValue);

            fightvalue.NickName = newName;
            var combo = UserHelper.FindRankUser(Current.UserId, RankType.Combo);

            combo.NickName = newName;

            receipt = true;
            return(true);
        }
示例#13
0
        public override bool TakeAction()
        {
            receipt = new LotteryReceipt();
            var timespan    = DateTime.Now.Subtract(GetLottery.StartRestoreLotteryTimesDate);
            int sec         = (int)Math.Floor(timespan.TotalSeconds);
            int canAddTimes = ConfigEnvSet.GetInt("User.LotteryTimesMax") - GetLottery.LotteryTimes;
            int addtimes    = Math.Min(sec / RestoreLotteryTimesSec * 4, canAddTimes);// 一次恢复4次

            GetLottery.LotteryTimes += addtimes;
            GetLottery.RemainTimeSec = RestoreLotteryTimesSec - sec % RestoreLotteryTimesSec;

            GetLottery.StartRestoreLotteryTimesDate = GetLottery.StartRestoreLotteryTimesDate.AddSeconds(
                Math.Min(sec / RestoreLotteryTimesSec, canAddTimes) * RestoreLotteryTimesSec
                );

            UserHelper.RandomStealTarget(Current.UserId);
            UserHelper.RandomRobTarget(Current.UserId);

            receipt.Lottery = GetLottery;
            foreach (var v in GetLottery.StealList)
            {
                UserBasisCache      basis     = UserHelper.FindUserBasis(v.RivalUid);
                UserAttributeCache  attribute = UserHelper.FindUserAttribute(v.RivalUid);
                UserEquipsCache     equips    = UserHelper.FindUserEquips(v.RivalUid);
                CombatMatchUserData data      = new CombatMatchUserData()
                {
                    UserId        = basis.UserID,
                    NickName      = basis.NickName,
                    Profession    = basis.Profession,
                    AvatarUrl     = basis.AvatarUrl,
                    RankId        = basis.LevelRankID,
                    UserLv        = basis.UserLv,
                    VipLv         = basis.VipLv,
                    FightingValue = attribute.FightValue,
                    Equips        = equips,
                    // SkillCarryList = user.SkillCarryList
                };

                receipt.StealList.Add(data);
            }
            return(true);
        }
示例#14
0
        /// <summary>
        /// 替换佣兵功能开启相关数值
        /// </summary>
        /// <param name="user"></param>
        public static void OpenReplaceGeneral(GameUser user)
        {
            var              cachePrize   = new ShareCacheStruct <UserTakePrize>();
            string           generalPrize = ConfigEnvSet.GetString("General.ReplaceGeneralPrize");
            string           content      = LanguageManager.GetLang().St1901_OpenGeneralReplace;
            List <PrizeInfo> prizeList    = new List <PrizeInfo>();

            if (!string.IsNullOrEmpty(generalPrize))
            {
                prizeList = JsonUtils.Deserialize <List <PrizeInfo> >(generalPrize);
            }
            foreach (PrizeInfo info in prizeList)
            {
                var takePrize = GetUserTake(info, user.UserID);
                cachePrize.Add(takePrize, GameEnvironment.CacheGlobalPeriod);
            }
            var chatService = new TjxChatService(user);

            chatService.SystemSendWhisper(user, content);
        }
示例#15
0
 /// <summary>
 /// 新手玩家达到等级获得奖励
 /// </summary>
 /// <param name="user"></param>
 public static void ActivationNewCard(GameUser user)
 {
     if (user.UserExtend != null && !string.IsNullOrEmpty(user.CardID))
     {
         string[] handLv = ConfigEnvSet.GetString("UserCard.GetPackageLv").Split(',');
         for (int i = 0; i < handLv.Length; i++)
         {
             short newHandLv = Convert.ToInt16(handLv[i]);
             if (IsReward(user.UserID, user.UserLv, newHandLv))
             {
                 int cardUserID = user.CardID.Substring(1).ToInt();
                 AddCardReward(user.UserID, strUserID, newHandLv);
                 AddCardReward(cardUserID.ToString(), user.UserID, newHandLv);
                 string item    = "5030=1=1";
                 string content = string.Format(LanguageManager.GetLang().NewHandPackage, newHandLv);
                 GainNewCardPackage(user.UserID, 0, item, content);
                 GainNewCardPackage(cardUserID.ToString(), 0, item, content);
             }
         }
     }
 }
示例#16
0
        /// <summary>
        /// 克制属相
        /// </summary>
        /// <param name="zodiacType1">玩家属相1</param>
        /// <param name="zodiacType2">玩家属相2</param>
        /// <returns></returns>
        public static decimal ZodiacRestraint(ZodiacType zodiacType1, ZodiacType zodiacType2)
        {
            string[] zodiacArray = ConfigEnvSet.GetString("Trump.ZodiacRestraint").Split(',');
            foreach (string s in zodiacArray)
            {
                string[] zodiacStr = s.Split('=');

                if (zodiacStr.Length > 2 && zodiacType1 == zodiacStr[0].ToEnum <ZodiacType>())
                {
                    string[] zodiacList = zodiacStr[1].Split('|');
                    foreach (string s1 in zodiacList)
                    {
                        if (s1.ToEnum <ZodiacType>() == zodiacType2)
                        {
                            return(zodiacStr[2].ToDecimal());
                        }
                    }
                }
            }
            return(0);
        }
示例#17
0
        /// <summary>
        /// 下一级属性数值
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="generalID"></param>
        /// <param name="abilityType"></param>
        /// <returns></returns>
        public static int FeelUpPropertyNum(string userID, int generalID, AbilityType abilityType)
        {
            int         upPropertyNum = 0;
            UserGeneral userGeneral   = new PersonalCacheStruct <UserGeneral>().FindKey(userID, generalID);

            if (userGeneral != null)
            {
                short      maxFeelLv    = ConfigEnvSet.GetInt("Gift.MaxFeelLv").ToShort();
                short      feelLv       = MathUtils.Addition(userGeneral.FeelLv, (short)1, maxFeelLv);
                FeelLvInfo upfeelLvInfo = new ShareCacheStruct <FeelLvInfo>().FindKey(feelLv);
                if (upfeelLvInfo != null && upfeelLvInfo.Property.Count > 0)
                {
                    GeneralProperty property = upfeelLvInfo.Property.Find(m => m.AbilityType == abilityType);
                    if (property != null)
                    {
                        upPropertyNum = property.AbilityValue.ToInt();
                    }
                }
            }
            return(upPropertyNum);
        }
示例#18
0
        /// <summary>
        /// 附魔符培养列表
        /// </summary>
        /// <returns></returns>
        public static List <EnchantCulTure> EnchantCultureList()
        {
            List <EnchantCulTure> enchantList = new List <EnchantCulTure>();

            string[] cultureArray = ConfigEnvSet.GetString("Enchant.EnchantCulture").Split(',');
            foreach (var str in cultureArray)
            {
                EnchantCulTure enchantCulTure = new EnchantCulTure();
                string[]       strCulture     = str.Split('=');
                if (strCulture.Length > 4)
                {
                    enchantCulTure.CultureType = strCulture[0].ToEnum <EnchantCultureType>();
                    enchantCulTure.GoldNum     = strCulture[1].ToInt();
                    enchantCulTure.MoJingNum   = strCulture[2].ToInt();
                    enchantCulTure.UpMature    = strCulture[3].ToShort();
                    enchantCulTure.SuccessNum  = strCulture[4].ToDecimal();
                    enchantList.Add(enchantCulTure);
                }
            }
            return(enchantList);
        }
示例#19
0
        public override bool TakeAction()
        {
            ErrorCode = _ops;
            int goldNum = ConfigEnvSet.GetInt("SparePart.PropertyGoldNum");

            if (_ops == 1)
            {
                ErrorInfo = string.Format(LanguageManager.GetLang().St1216_EnableSpartProperty, goldNum, _position);
            }
            else if (_ops == 2)
            {
                if (ContextUser.GoldNum < goldNum)
                {
                    ErrorCode = LanguageManager.GetLang().ErrorCode;
                    ErrorInfo = LanguageManager.GetLang().St_GoldNotEnough;
                    return(false);
                }
                if (ContextUser.EnableSpareProperty(_sparepartID, out _sparePart))
                {
                    ContextUser.UseGold = MathUtils.Addition(ContextUser.UseGold, goldNum);
                    //ContextUser.Update();
                    var          itempackage = UserItemPackage.Get(ContextUser.UserID);
                    UserItemInfo userItem    = itempackage.ItemPackage.Find(m => !m.IsRemove && m.UserItemID.Equals(_sparePart.UserItemID));
                    if (userItem != null && userItem.ItemStatus.Equals(ItemStatus.YongBing))
                    {
                        var userGeneral = new GameDataCacheSet <UserGeneral>().FindKey(ContextUser.UserID, userItem.GeneralID);
                        if (userGeneral != null)
                        {
                            userGeneral.RefreshMaxLife();
                        }
                    }
                }
                else
                {
                    ErrorCode = LanguageManager.GetLang().ErrorCode;
                    return(false);
                }
            }
            return(true);
        }
示例#20
0
        /// <summary>
        /// 计算伤害公式
        /// 攻击伤害 = 攻击力 - 物理防御力
        /// </summary>
        /// <param name="tagetGeneral">加血等辅助技能时可能为空值</param>
        /// <returns></returns>
        protected int GetPhysicalDamageNum(CombatGeneral tagetGeneral)
        {
            AbilityProperty property = General.AbilityProperty;

            ProcessLog.AbilityProperty = property;
            int     damageNum;
            int     attackNum;
            int     defenseNum = 0;
            decimal harmNum    = 0; //法宝属相克制伤害 --技能攻击

            attackNum = General.GetAttackNum(property);
            if (tagetGeneral != null)
            {
                harmNum    = TrumpAbilityAttack.TrumpZodiacHarm(General, tagetGeneral.UserID);
                defenseNum = tagetGeneral.GetDefenseNum(property, tagetGeneral);
                //普通攻击破防
                decimal normalAttackPoFang = TrumpAbilityAttack.GetEffect(General, AbilityType.NormalAttackPoFang);
                if (normalAttackPoFang > 0)
                {
                    ProcessLog.TrumpStatusList.Add(TrumpAbilityAttack.GetSkillprocess(AbilityType.NormalAttackPoFang, 0));
                }
                defenseNum = (int)Math.Floor(MathUtils.Subtraction(defenseNum, defenseNum * normalAttackPoFang));
            }
            General.MinDamageNum = (int)Math.Ceiling(attackNum * ConfigEnvSet.GetDouble("Combat.MinDamagePencent"));

            damageNum = MathUtils.Subtraction(attackNum, defenseNum, General.MinDamageNum);

            //加固定伤害
            damageNum = MathUtils.Addition(damageNum, General.FixedDamageNum, int.MaxValue);

            //法宝属相克制伤害 --技能攻击
            if (harmNum > 0 && !isPyharm)
            {
                damageNum = (int)(damageNum * MathUtils.Addition(1, (harmNum + General.EffectValue)));
                isPyharm  = true;
            }

            return(damageNum);
        }
示例#21
0
 /// <summary>
 /// 好感度升级
 /// </summary>
 /// <param name="general"></param>
 /// <param name="experience"></param>
 public static void GeneralFeelUpgrade(UserGeneral general, int experience, short saturationNum)
 {
     if (general != null)
     {
         int maxSatiationNum = ConfigEnvSet.GetInt("User.FeelMaxSatiationNum");
         general.FeelExperience = MathUtils.Addition(general.FeelExperience, experience);
         general.SaturationNum  = MathUtils.Addition(general.SaturationNum, saturationNum, (short)maxSatiationNum);
         while (true)
         {
             short      feelLv       = MathUtils.Addition(general.FeelLv, (short)1, maxFeelLv);
             FeelLvInfo upfeelLvInfo = new ShareCacheStruct <FeelLvInfo>().FindKey(feelLv);
             if (general.FeelLv < feelLv && upfeelLvInfo != null)
             {
                 if (general.FeelExperience >= upfeelLvInfo.Experience)
                 {
                     general.FeelLv         = MathUtils.Addition(general.FeelLv, (short)1, maxFeelLv);
                     general.FeelExperience = MathUtils.Subtraction(general.FeelExperience, upfeelLvInfo.Experience, 0);
                     general.RefreshMaxLife();
                     GeneralInfo generalInfo = new ShareCacheStruct <GeneralInfo>().FindKey(general.GeneralID);
                     if (generalInfo != null && generalInfo.ReplaceSkills != null)
                     {
                         if (general.FeelLv >= generalInfo.ReplaceSkills.FeelLv && general.AbilityID != generalInfo.ReplaceSkills.AbilityID)
                         {
                             general.AbilityID = generalInfo.ReplaceSkills.AbilityID;
                         }
                     }
                 }
                 else
                 {
                     break;
                 }
             }
             else
             {
                 break;
             }
         }
     }
 }
示例#22
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));
        }
示例#23
0
        public override bool TakeAction()
        {
            int maxDonateGold = ConfigEnvSet.GetInt("UserGuild.MaxDonateGold");

            if (string.IsNullOrEmpty(ContextUser.MercenariesID))
            {
                ErrorCode = LanguageManager.GetLang().ErrorCode;
                ErrorInfo = LanguageManager.GetLang().St6203_GuildMemberNotEnough;
                return(false);
            }
            UserGuild guild = new ShareCacheStruct <UserGuild>().FindKey(ContextUser.MercenariesID);

            if (guild == null)
            {
                ErrorCode = LanguageManager.GetLang().ErrorCode;
                return(false);
            }
            if (guild.AbilityInfo.Count == 0)
            {
                UserHelper.UserGuildAbilityList(ContextUser.MercenariesID);
            }
            CombatHelper.RepairGuildAbility(ContextUser.MercenariesID);
            currExperience = guild.CurrDonateNum;
            if (guild.AbilityInfo.Count > 0)
            {
                List <GuildAbility> abilitiesList = guild.AbilityInfo.ToList();
                abilityArray = abilitiesList.GetPaging(pageIndex, pageSize, out pageCount);
            }

            GuildMember member = new ShareCacheStruct <GuildMember>().FindKey(ContextUser.MercenariesID, ContextUser.UserID);

            if (member != null)
            {
                donateCoin = MathUtils.Subtraction(UserHelper.MaxDonateGameCoin(ContextUser.UserLv.ToInt()), member.DonateCoin);
                donateGold = MathUtils.Subtraction(maxDonateGold, member.DonateGold);
            }

            return(true);
        }
示例#24
0
        public override bool TakeAction()
        {
            int totalNum = 0;

            UserHelper.ChechDailyRestrain(ContextUser.UserID);
            totalNum = PlotHelper.HeroSurplusNum(ContextUser.UserID, cityID, ContextUser.VipLv);
            if (totalNum <= 0 || PlotHelper.HeroRefreshNum(ContextUser.UserID, cityID) > totalNum)
            {
                ErrorCode = LanguageManager.GetLang().ErrorCode;
                ErrorInfo = LanguageManager.GetLang().St4014_HeroRefreshPlotFull;
                return(false);
            }
            int useGold = ConfigEnvSet.GetInt("UserPlot.HeroRefreshGoldNum");

            if (ops == 1)
            {
                ErrorCode = ops;
                ErrorInfo = string.Format(LanguageManager.GetLang().St4014_HeroRefreshPlot, useGold);
                return(false);
            }
            else if (ops == 2)
            {
                if (ContextUser.GoldNum < useGold)
                {
                    ErrorCode = LanguageManager.GetLang().ErrorCode;
                    ErrorInfo = LanguageManager.GetLang().St_GoldNotEnough;
                    return(false);
                }
                UserDailyRestrain dailyRestrain = new GameDataCacheSet <UserDailyRestrain>().FindKey(ContextUser.UserID);
                if (dailyRestrain != null)
                {
                    //z增加刷新次数 (未完成)
                    HeroRefreshNum(ContextUser.UserID, cityID);
                }
                ContextUser.UseGold = MathUtils.Addition(ContextUser.UseGold, useGold, int.MaxValue);
                //ContextUser.Update();
            }
            return(true);
        }
示例#25
0
 private bool IsGotoNextLayer(int nextLayerNum)
 {
     string[] tempList = ConfigEnvSet.GetString("Plot.LayerNumLv").ToNotNullString().Split(',');
     foreach (var temp in tempList)
     {
         if (temp == null)
         {
             continue;
         }
         string[] lvList = temp.Split('=');
         if (lvList.Length == 2)
         {
             int layerNum = lvList[0].ToInt();
             if (layerNum != nextLayerNum)
             {
                 continue;
             }
             return(ContextUser.UserLv >= lvList[1].ToShort());
         }
     }
     return(false);
 }
示例#26
0
        public override bool TakeAction()
        {
            if (DateTime.Now < GetCombat.LastFailedDate)
            {
                return(false);
            }

            TimeSpan timeSpan    = DateTime.Now.Subtract(GetCombat.LastFailedDate);
            float    mins        = timeSpan.TotalMinutes.ToFloat();
            float    surplus     = MathUtils.Subtraction(ConfigEnvSet.GetInt("User.CombatFailedCD").ToFloat(), mins, 1.0f);
            int      needDiamond = Math.Ceiling(surplus).ToInt();

            if (GetBasis.DiamondNum < needDiamond)
            {
                return(false);
            }

            GetCombat.LastFailedDate = DateTime.MinValue;
            receipt = EventStatus.Good;

            UserHelper.ConsumeDiamond(Current.UserId, needDiamond);
            return(true);
        }
示例#27
0
        public override bool TakeAction()
        {
            int intervalDate      = ConfigEnvSet.GetInt("UserItemSold.IntervalDate");
            int totalIntervalDate = (intervalDate * 60 * 60);

            var package  = UserItemPackage.Get(Uid);
            var sellItem = package.ItemPackage.FindAll(m => !m.IsRemove && m.ItemStatus == ItemStatus.Sell);

            foreach (var item in sellItem)
            {
                if ((DateTime.Now - item.SoldDate).TotalSeconds > totalIntervalDate)
                {
                    UserItemHelper.AddItemLog(ContextUser.UserID, item.ItemID, item.Num, item.ItemLv, 4, item.UserItemID);

                    package.RemoveItem(item);
                }
            }

            var tempList = package.ItemPackage.FindAll(m => !m.IsRemove && m.ItemStatus == ItemStatus.Sell);

            userItemArray = tempList.GetPaging(pageIndex, pageSize, out pageCount);
            return(true);
        }
示例#28
0
        public override bool TakeAction()
        {
            if (ops == 1)
            {
                short onlineEnergy;
                if (NoviceHelper.OnlinePrize(ContextUser, out _takeNum, out _coldTime, out onlineEnergy))
                {
                    ErrorInfo = string.Format(LanguageManager.GetLang().St1013_JingliPrize, onlineEnergy);
                }
            }
            else if (ops == 2)
            {
                if (NoviceHelper.DailyEnergy(ContextUser.UserID))
                {
                    UserDailyRestrain dailyRestrain = new PersonalCacheStruct <UserDailyRestrain>().FindKey(ContextUser.UserID);
                    if (dailyRestrain != null)
                    {
                        short dailyEnergyNum = (short)ConfigEnvSet.GetInt("DailyEnergyNum");

                        if (dailyRestrain.Funtion15.Date != DateTime.Now)
                        {
                            dailyRestrain.Funtion15 = DateTime.Now;
                            //dailyRestrain.Update();
                            ContextUser.SurplusEnergy = dailyEnergyNum;
                            //ContextUser.Update();
                            ErrorInfo = string.Format(LanguageManager.GetLang().St1013_DailyJingliPrize, dailyEnergyNum);
                        }
                    }
                }
            }
            else if (ops == 3)
            {
                int festivalEnergy = NoviceHelper.AugustSecondWeekEnergy(ContextUser);
                ErrorInfo = string.Format(LanguageManager.GetLang().st_FestivalInfoReward, LanguageManager.GetLang().St_AugustSecondWeek, string.Format(LanguageManager.GetLang().St_EnergyNum, festivalEnergy));
            }
            return(true);
        }
示例#29
0
        /// <summary>
        /// 竞技场奖励下次领取时间
        /// </summary>
        /// <returns></returns>
        public static DateTime GetNextReceiveDate()
        {
            DateTime nextReceiveDate = new DateTime();                             //下次领取时间
            DateTime initialDate     = ConfigEnvSet.GetString("Sports.ReceiveBonusTime").ToDateTime();
            int      intervalDate    = ConfigEnvSet.GetInt("Sports.IntervalDate"); //间隔时间 (小时)
            int      intervalHours   = (int)((DateTime.Now - initialDate).TotalHours);
            int      dividedNum      = intervalHours / intervalDate;
            int      totalHuors      = (MathUtils.Addition(dividedNum, 1, int.MaxValue) * intervalDate);

            nextReceiveDate = initialDate.AddHours(totalHuors);
            DateTime nowDate = initialDate.AddHours((dividedNum * intervalDate));

            var date = ServerEnvSet.Get(ServerEnvKey.JingJiChangReward, "");

            if (nowDate != date.ToDateTime().Date)
            {
                ServerEnvSet.Set(ServerEnvKey.JingJiChangReward, nowDate.ToString());
            }
            else
            {
                ServerEnvSet.Set(ServerEnvKey.JingJiChangReward, nextReceiveDate.AddDays(-3).ToString());
            }
            return(nextReceiveDate.Date);
        }
示例#30
0
        /// <summary>
        /// 获得拉新卡
        /// </summary>
        /// <param name="user"></param>
        public static void NewHandCardFestival(GameUser user)
        {
            short userLv = (short)ConfigEnvSet.GetInt("UserCard.ActivationCardLv"); //获得新手卡等级

            if (user.UserLv >= userLv && (user.UserExtend == null || string.IsNullOrEmpty(user.UserExtend.CardUserID)))
            {
                GameUserExtend userExtend = new GameUserExtend();
                if (user.UserExtend != null)
                {
                    userExtend = user.UserExtend;
                }
                userExtend.CardUserID = NewHandCardID(user.UserID);
                user.UserExtend       = userExtend;
                int gamecoin = ConfigEnvSet.GetInt("UserCard.GainGameCoin");
                int handNum  = 0;
                DailyRestrainSet restrainSet = new ShareCacheStruct <DailyRestrainSet>().FindKey(RestrainType.NewHand);
                if (restrainSet != null)
                {
                    handNum = restrainSet.MaxNum;
                }
                string content = string.Format(LanguageManager.GetLang().GainNewCard, userLv, gamecoin, user.UserExtend.CardUserID, handNum);
                GainNewCardPackage(user.UserID, gamecoin, string.Empty, content);
            }
        }