Esempio n. 1
0
        /// <summary>
        /// 处理击杀奖励
        /// </summary>
        private void DoKillPrize(GameUser user)
        {
            BossActivePrize bossPrize = GameActive.BossPrize;

            if (bossPrize == null)
            {
                return;
            }
            TjxChatService chatService = new TjxChatService();

            var rankingList = RefreshRanking();

            ServerEnvSet.Set(ServerEnvKey.FirstHalfBoss, rankingList.ToJson());
            int length = rankingList.Count > bossPrize.TopObtain ? bossPrize.TopObtain : rankingList.Count;

            //处理排名奖励
            for (int i = 0; i < length; i++)
            {
                string   prizeItemMsg = string.Empty;
                GameUser tempUser     = new GameDataCacheSet <GameUser>().FindKey(rankingList[i].UserId);
                tempUser.GameCoin = MathUtils.Addition(tempUser.GameCoin, bossPrize.TopObtainNum, int.MaxValue);
                //前3名奖励
                if (i == 0)
                {
                    DoTopThreePrize(i + 1, tempUser, bossPrize.Rank1, bossPrize.Items, out prizeItemMsg);
                }
                else if (i == 1)
                {
                    DoTopThreePrize(i + 1, tempUser, bossPrize.Rank2, bossPrize.Items, out prizeItemMsg);
                }
                else if (i == 2)
                {
                    DoTopThreePrize(i + 1, tempUser, bossPrize.Rank3, bossPrize.Items, out prizeItemMsg);
                }
                //tempUser.Update();

                if (!string.IsNullOrEmpty(prizeItemMsg))
                {
                    prizeItemMsg = "," + prizeItemMsg;
                }

                chatService.SystemSend(ChatType.World, string.Format(LanguageManager.GetLang().St5405_CombatRankmReward,
                                                                     tempUser.NickName,
                                                                     (i + 1),
                                                                     bossPrize.TopObtainNum,
                                                                     prizeItemMsg));
                TraceLog.ReleaseWriteDebug(string.Format(LanguageManager.GetLang().St5405_CombatRankmReward,
                                                         tempUser.NickName,
                                                         (i + 1),
                                                         bossPrize.TopObtainNum,
                                                         prizeItemMsg));
                // CountryCombat.Contribution(tempUser.UserID, bossPrize.TopObtainNum); //公会贡献
            }
        }
Esempio n. 2
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);
        }
Esempio n. 3
0
        /// <summary>
        /// 刷新活动
        /// </summary>
        private static void RefreshActive(object sender)
        {
            try
            {
                Trace.WriteLine("刷新活动被执行");
                foreach (var gameActive in _gameActiveList)
                {
                    string[] list = gameActive.EnablePeriod.Split(new char[] { ',' });
                    //有多个时间段
                    foreach (string item in list)
                    {
                        gameActive.BeginTime = item.ToDateTime(DateTime.MinValue);
                        gameActive.EndTime   = gameActive.BeginTime.AddMinutes(gameActive.Minutes);
                        if (gameActive.BossPrize == null && gameActive.ActiveType == FunctionEnum.Booszhang)
                        {
                            gameActive.BossPrize = JsonUtils.Deserialize <BossActivePrize>(gameActive.ActivePize);
                        }
                        DateTime currTime = DateTime.Now;

                        if (gameActive.CombatStatus != CombatStatus.Killed &&
                            gameActive.WaitMinutes > 0 && currTime >= gameActive.BeginTime &&
                            currTime <= gameActive.BeginTime.AddMinutes(gameActive.WaitMinutes))
                        {
                            LoadData(gameActive);
                            gameActive.CombatStatus = CombatStatus.Wait;
                        }
                        else if (gameActive.CombatStatus != CombatStatus.Killed &&
                                 currTime >= gameActive.BeginTime && currTime <= gameActive.EndTime)
                        {
                            LoadData(gameActive);
                            gameActive.CombatStatus = CombatStatus.Combat;
                        }
                        else if (currTime < gameActive.BeginTime)
                        {
                            gameActive.CombatStatus = CombatStatus.NoStart;
                        }
                        else if (currTime > gameActive.EndTime)
                        {
                            gameActive.CombatStatus = CombatStatus.Over;
                        }

                        CombatStatus combatStatus = gameActive.RefreshStatus();

                        if (combatStatus == CombatStatus.Wait)
                        {
                            //有等待时间
                            int minute = gameActive.WaitMinutes;
                            if (combatStatus != CombatStatus.Killed &&
                                currTime >= gameActive.BeginTime.AddMinutes(minute) && currTime <= gameActive.EndTime)
                            {
                                ServerEnvSet.Set(ServerEnvKey.KillBossUserID, 0);
                                gameActive.CombatStatus = CombatStatus.Combat;
                            }
                            break;
                        }
                        else if (combatStatus == CombatStatus.Combat)
                        {
                            break;
                        }
                        else if (combatStatus == CombatStatus.Over)
                        {
                            DisposeData(gameActive);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                new BaseLog().SaveLog(ex);
            }
        }
Esempio n. 4
0
 /// <summary>
 /// 时间boss被杀时间
 /// </summary>
 public static void BossKillDate()
 {
     ServerEnvSet.Set(ServerEnvKey.BossKillDate, DateTime.Now);
 }
Esempio n. 5
0
        /// <summary>
        /// 触发战斗
        /// </summary>
        /// <param name="user"></param>
        /// <param name="bossCombatProcess"></param>
        /// <returns></returns>
        public bool Combat(GameUser user, BossCombatProcess bossCombatProcess)
        {
            CombatGeneral bossGeneral = Boss;

            bossGeneral.LossLifeNum = 0;

            BossUser          bossUser       = GetCombatUser(user.UserID);
            ICombatController controller     = CombatControllerFactory.Create();
            ISingleCombat     plotCombater   = controller.GetSingleCombat(CombatType.BossPlot);
            double            inspirePercent = bossUser.InspirePercent + bossUser.ReliveInspirePercent;

            plotCombater.SetAttack(new UserEmbattleQueue(user.UserID, user.UseMagicID, inspirePercent, CombatType.BossPlot));
            plotCombater.SetDefend(new MonsterQueue(Boss));

            bool isWin = plotCombater.Doing();

            bossCombatProcess.ProcessContainer = (CombatProcessContainer)plotCombater.GetProcessResult();
            bossUser.CombatNum         += 1;
            bossUser.DamageNum          = MathUtils.Addition(bossUser.DamageNum, bossGeneral.LossLifeNum, int.MaxValue);
            bossCombatProcess.LiveNum   = bossGeneral.LifeNum;
            bossCombatProcess.DamageNum = bossGeneral.LossLifeNum;
            bossCombatProcess.IsWin     = isWin;
            bossCombatProcess.UserId    = user.UserID;

            DoDamagePrize(user, bossGeneral.LossLifeNum, bossCombatProcess);
            if (isWin && bossGeneral.IsOver)
            {
                GameActive active   = GameActive;
                short      lv       = MathUtils.Subtraction(bossGeneral.Lv, (short)active.BossPrize.KillBossLv, (short)1);
                int        killCoin = lv * active.BossPrize.KillBossRate;
                user.GameCoin = MathUtils.Addition(user.GameCoin, killCoin, int.MaxValue);

                new TjxChatService().SystemSend(ChatType.World, string.Format(LanguageManager.GetLang().St5405_CombatKillReward, user.NickName, killCoin));
                TraceLog.ReleaseWriteDebug(string.Format(LanguageManager.GetLang().St5405_CombatKillReward, user.NickName, killCoin));
                bossCombatProcess.KillGameCoin = killCoin;

                ServerEnvSet.Set(ServerEnvKey.KillBossUserID, user.UserID);
                DoKillPrize(user);

                int tempMinute = active.Minutes - ConfigEnvSet.GetInt("BossCombat.KillTime");
                if (new TimeSpan(0, tempMinute, 0).TotalSeconds - active.ColdTime < 0)
                {
                    //Boss自动升级
                    active.BossLv = MathUtils.Addition(active.BossLv, (short)1);
                    //active.Update();
                }
                active.CombatStatus = CombatStatus.Killed;
                CombatHelper.BossKillDate(); //增加boss被杀时间
            }
            else
            {
                bossUser.IsRelive        = true;
                bossUser.ReliveBeginDate = DateTime.Now;
            }
            //日志
            var log = new UserCombatLog
            {
                CombatLogID   = Guid.NewGuid().ToString(),
                UserID        = user.UserID,
                CityID        = user.CityID,
                PlotID        = GameActive == null ? 0 : GameActive.BossPlotID,
                NpcID         = bossGeneral.GeneralID,
                CombatType    = CombatType.BossPlot,
                HostileUser   = string.Empty,
                IsWin         = isWin,
                CombatProcess = JsonUtils.Serialize(bossCombatProcess),
                CreateDate    = DateTime.Now
            };
            var sender = DataSyncManager.GetDataSender();

            sender.Send(log);

            //user.Update();

            return(isWin);
        }