/// <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); //公会贡献 } }
/// <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); }
/// <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); } }
/// <summary> /// 时间boss被杀时间 /// </summary> public static void BossKillDate() { ServerEnvSet.Set(ServerEnvKey.BossKillDate, DateTime.Now); }
/// <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); }