public override bool TakeAction() { UserDailyRestrain dailyRestrain = new GameDataCacheSet <UserDailyRestrain>().FindKey(ContextUser.UserID); if (RankingHelper.IsGainSportsReward(ContextUser.UserID) && dailyRestrain != null && dailyRestrain.UserExtend != null) { var envSet = ServerEnvSet.Get(ServerEnvKey.JingJiChangReward, ""); SportsRewardInfo sportsInfo = new ConfigCacheSet <SportsRewardInfo>().FindKey(dailyRestrain.UserExtend.UserRankID); { if (envSet != null && sportsInfo != null) { if (envSet.ToDateTime().Date > dailyRestrain.Funtion11.Date && dailyRestrain.UserExtend.UserRankID > 0) { dailyRestrain.Funtion11 = DateTime.Now; dailyRestrain.UserExtend.UserRankID = 0; //dailyRestrain.Update(); ContextUser.ObtainNum = MathUtils.Addition(ContextUser.ObtainNum, sportsInfo.RewardObtian, int.MaxValue); ContextUser.GameCoin = MathUtils.Addition(ContextUser.GameCoin, sportsInfo.RewardGoin, int.MaxValue); //ContextUser.Update(); UserHelper.Contribution(ContextUser.UserID, sportsInfo.RewardObtian); ErrorInfo = string.Format(LanguageManager.GetLang().St5106_JingJiChangRankReward, sportsInfo.RewardObtian, sportsInfo.RewardGoin); } } } } return(true); }
/// <summary> /// 奖励物品 /// </summary> /// <param name="prize"></param> /// <returns></returns> public static void ChestGainTreasureInfo(GameUser user, DialInfo dialInfo, int count) { var treasure = new TreasureInfo(); treasure.UserID = user.UserID; treasure.Type = dialInfo.RewardType; treasure.ItemID = dialInfo.ItemID; treasure.Num = dialInfo.ItemNum; treasure.ItemLv = 1; UserDial userDial = new PersonalCacheStruct <UserDial>().FindKey(user.UserID); if (userDial == null) { userDial = new UserDial(); } userDial.GroupID = 0; userDial.RefreshDate = DateTime.Now; userDial.Treasure.Add(treasure); if (count == 0) { userDial.PrizeInfo = treasure; userDial.HeadID = dialInfo.HeadID; } if (GameConfigSet.Treasure > 0 && userDial.Treasure.Count > GameConfigSet.Treasure) { for (int i = 0; i < userDial.Treasure.Count - GameConfigSet.Treasure; i++) { userDial.Treasure.Remove(userDial.Treasure[i]); } } if (dialInfo.IsShow) { var cacheSet = new ShareCacheStruct <ServerEnvSet>(); var serverEnvSet = cacheSet.FindKey(ServerEnvKey.UserTreasure); if (serverEnvSet == null) { serverEnvSet = new ServerEnvSet(); serverEnvSet.EnvKey = ServerEnvKey.UserTreasure; cacheSet.Add(serverEnvSet); } var treasureInfoList = ServerEnvSetTreasure(treasure); serverEnvSet.EnvValue = JsonUtils.Serialize(treasureInfoList); } if (dialInfo.IsBroadcast && !string.IsNullOrEmpty(dialInfo.BroadContent)) { TjxChatService chatService = new TjxChatService(); chatService.SystemSend(ChatType.World, string.Format(dialInfo.BroadContent, user.NickName)); } if (dialInfo.RewardType == RewardType.Again || dialInfo.RewardType == RewardType.Mood || dialInfo.RewardType == RewardType.Recharge) { if (dialInfo.RewardType == RewardType.Recharge) { userDial.ReturnRatio = treasure.Num; } return; } ChestGetUserTake(treasure, user); }
public override bool TakeAction() { if (_isCurr == 0) { var bossFirst = ServerEnvSet.Get(ServerEnvKey.FirstHalfBoss, 0); if (!string.IsNullOrEmpty(bossFirst)) { int total; var tempList = JsonUtils.Deserialize <List <BossUser> >(bossFirst); if (tempList != null && tempList.Count > 0) { _bossUserList = tempList.GetPaging(1, Top, out total); _rankingNo = tempList.FindIndex(m => m.UserId == Uid) + 1; var killUserId = ServerEnvSet.GetInt(ServerEnvKey.KillBossUserID, 0); var killUser = tempList.Find(t => t.UserId == killUserId.ToString()); if (killUser != null) { _damageNum = killUser.DamageNum; _nickName = killUser.NickName; var userEntity = new PersonalCacheStruct <GameUser>().FindKey(killUserId.ToString()); if (userEntity != null) { _userLv = userEntity.UserLv; } } } } } else if (_isCurr == 1) { BossCombat bossCombat = new BossCombat(_activeId); GameActive gameActive = bossCombat.GameActive; if (gameActive == null) { return(true); } CombatStatus combatStatus = gameActive.CombatStatus; if (combatStatus == CombatStatus.Wait || combatStatus == CombatStatus.Combat) { int total; var tempList = bossCombat.RefreshRanking(); _bossUserList = tempList.GetPaging(1, Top, out total); _rankingNo = tempList.FindIndex(m => m.UserId == Uid) + 1; var killUserId = ServerEnvSet.GetInt(ServerEnvKey.KillBossUserID, 0); var killUser = tempList.Find(t => t.UserId == killUserId.ToString()); if (killUser != null) { _damageNum = killUser.DamageNum; _nickName = killUser.NickName; var userEntity = new PersonalCacheStruct <GameUser>().FindKey(killUserId.ToString()); if (userEntity != null) { _userLv = userEntity.UserLv; } } } } return(true); }
/// <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> /// 世界boss是否已杀 /// </summary> /// <returns></returns> public static bool IsBossKill(int activeId) { GameActive activeInfo = new ShareCacheStruct <GameActive>().FindKey(activeId); string envSet = ServerEnvSet.Get(ServerEnvKey.BossKillDate, ""); if (envSet != null && activeInfo != null) { DateTime killDate = envSet.ToDateTime(); string[] list = activeInfo.EnablePeriod.Split(new char[] { ',' }); //有多个时间段 foreach (string item in list) { DateTime beginTime = item.ToDateTime(DateTime.MinValue); DateTime endTime = beginTime.AddMinutes(activeInfo.Minutes); if (beginTime < killDate && endTime > killDate) { return(true); } } } return(false); }
/// <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); }