/// <summary> /// 加载数据 /// </summary> public static void InitBoss(UserGuild userGuild) { try { if (_userGuildList.ContainsKey(userGuild.GuildID)) { _userGuildList[userGuild.GuildID] = userGuild; } else { _userGuildList.Add(userGuild.GuildID, userGuild); } CombatGeneral general = CreateBossGeneral(userGuild); if (!_bossGeneralList.ContainsKey(userGuild.GuildID)) { _bossGeneralList.Add(userGuild.GuildID, new BossDictionary { BossGeneral = general }); } else { _bossGeneralList[userGuild.GuildID].BossGeneral = general; } } catch (Exception ex) { new BaseLog().SaveLog(ex); } }
/// <summary> /// 答题奖励 /// </summary> /// <param name="userGuild"></param> /// <param name="gameActive"></param> /// <param name="exuser"></param> /// <param name="user"></param> public static void DoPrize(UserGuild userGuild, GameActive gameActive, ExerciseUser exuser, GameUser user, ref int expNum, ref int Experience) { DateTime dt = DateTime.Now; if (dt < gameActive.BeginTime) { userGuild.GuildExercise.Status = 0; return; } if (exuser.Status == GuildExerciseStatus.All || (userGuild.GuildExercise.QuestionNo == exuser.QuestionNo && exuser.AnswerStatus)) { GuildExercisePrize prize = new ConfigCacheSet<GuildExercisePrize>().FindKey(userGuild.GuildExercise.Level); if (prize == null) return; decimal precent = GetExercisePrecent(userGuild); expNum = (int)Math.Floor((decimal)prize.ExpNum * precent); Experience = (int)Math.Floor((decimal)prize.Experience * precent); user.ExpNum = MathUtils.Addition(user.ExpNum, expNum, int.MaxValue); UserHelper.UserGeneralExp(user.UserID, Experience); } }
public override bool TakeAction() { _gameActiveList = new GameActiveCenter(Uid).GetActiveList(); guild = new ShareCacheStruct<UserGuild>().FindKey(ContextUser.MercenariesID); return true; }
public override bool TakeAction() { userGuild = new ShareCacheStruct<UserGuild>().FindKey(guildID); if (userGuild != null) { nextLv = MathUtils.Addition(userGuild.GuildLv, (short) 1, (short) GuildLvInfo.GuildMaxLv); GuildLvInfo guildLvInfo = new ConfigCacheSet<GuildLvInfo>().FindKey(nextLv); if (guildLvInfo != null) { demandExperience = MathUtils.Subtraction(guildLvInfo.UpExperience, userGuild.CurrExperience, 0); activityArray = guildLvInfo.ActivityDesc.ToList(); } } return true; }
public static GuildQuestion GetQuestion(UserGuild userGuild, GameActive gameActive, ExerciseUser exUser, ref int ColdTime) { DateTime dt = DateTime.Now; DateTime beginTime = gameActive.BeginTime.AddMinutes(gameActive.WaitMinutes); if (dt < gameActive.BeginTime.AddMinutes(gameActive.WaitMinutes)) { ColdTime = (int)(beginTime - dt).TotalSeconds; userGuild.GuildExercise.UpdateNotify(obj => { userGuild.GuildExercise.Status = 1; return true; }); return null; } GuildQuestion Question = new GuildQuestion(); if (userGuild.GuildExercise.QuesTime != null && dt < userGuild.GuildExercise.QuesTime.AddSeconds(QuestionWaitTime) && userGuild.GuildExercise.QuestionID != 0) { Question = new ConfigCacheSet<GuildQuestion>().FindKey(userGuild.GuildExercise.QuestionID); } else { int questionid = GetID(userGuild.GuildExercise.QuestionIDList.ToList()); userGuild.GuildExercise.QuestionID = questionid; Question = new ConfigCacheSet<GuildQuestion>().FindKey(userGuild.GuildExercise.QuestionID); userGuild.GuildExercise.UpdateNotify(obj => { if (userGuild.GuildExercise.QuesTime < beginTime) userGuild.GuildExercise.QuesTime = beginTime; int count = ((int)(dt - userGuild.GuildExercise.QuesTime).TotalSeconds) / QuestionWaitTime; if (count <= 0) { count = 0; } userGuild.GuildExercise.QuestionNo = MathUtils.Addition(userGuild.GuildExercise.QuestionNo, (count <= 1 ? 1 : count), int.MaxValue); userGuild.GuildExercise.QuesTime = beginTime.AddSeconds((userGuild.GuildExercise.QuestionNo - 1) * QuestionWaitTime); userGuild.GuildExercise.Status = 2; //已开始活动 userGuild.GuildExercise.CheckAllAnswer = 0; return true; });//userGuild.Update(); exUser.QuestionStatus = GuildQuestionStatus.ToAnswer; } ColdTime = QuestionWaitTime - (int)(dt - userGuild.GuildExercise.QuesTime).TotalSeconds; if (userGuild.GuildExercise.CheckAllAnswer == 0) { ColdTime -= 10; } if (ColdTime <= 0) { ColdTime = 0; return null; } return Question; }
/// <summary> /// 奖励加成 /// </summary> /// <param name="guild"></param> /// <returns></returns> public static decimal GetExercisePrecent(UserGuild guild) { decimal precent = 0.05M; int count = 0; foreach (ExerciseUser user in guild.GuildExercise.UserList) { if (user.QuestionNo != guild.GuildExercise.QuestionNo) { if (guild.GuildExercise.QuestionNo - user.QuestionNo >= 5) { continue; } } count++; } count = count - 1; if (count <= 0) count = 0; return (decimal)1 + (decimal)count * precent; }
public override bool TakeAction() { UserHelper.ChecheDailyContribution(ContextUser.MercenariesID, ContextUser.UserID); guild = new ShareCacheStruct<UserGuild>().FindKey(guildID); if (guild != null) { var memberLog = new ShareCacheStruct<GuildMemberLog>().FindKey(guildID) ?? new GuildMemberLog(); List<MemberLog> guildLogArray = memberLog.GetLog(null); foreach (MemberLog log in guildLogArray) { if (IsCurrentWeek(log.InsertDate)) { weekExperience = MathUtils.Addition(weekExperience, log.Experience, int.MaxValue); } } List<GuildMember> memberArray = new ShareCacheStruct<GuildMember>().FindAll(m => m.GuildID == guild.GuildID); foreach (GuildMember member in memberArray) { if (member.PostType == PostType.Chairman) { GameUser userInfo = UserCacheGlobal.CheckLoadUser(member.UserID); if (userInfo != null) { chairman = userInfo.NickName; } } if (member.UserID == ContextUser.UserID) { memberPost = (short)member.PostType; } } currPeople = memberArray.Count; GuildLvInfo guildLvInfo = new ConfigCacheSet<GuildLvInfo>().FindKey(guild.GuildLv); if (guildLvInfo != null) { int upLv =MathUtils.Addition(guild.GuildLv, (short)1, (short)GuildLvInfo.GuildMaxLv); if (new ConfigCacheSet<GuildLvInfo>().FindKey(upLv) != null) { upExperience = new ConfigCacheSet<GuildLvInfo>().FindKey(upLv).UpExperience; } maxPeople = MathUtils.Addition(guildLvInfo.MaxPeople, guild.AddMember); } } return true; }
public override bool TakeAction() { if (!string.IsNullOrEmpty(ContextUser.MercenariesID) && ContextUser.MercenariesID == guildID) { if (CombatHelper.GuildBossKill(ContextUser.MercenariesID)) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St5405_BossKilled; return false; } Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); GameActive gameActive = new ShareCacheStruct<GameActive>().FindKey(_activeId); if (gameActive != null) { bossPlotID = gameActive.BossPlotID; GuildBossCombat bossCombat = new GuildBossCombat(guildID); if (bossCombat.HasCombat) { _guild = bossCombat.UserGuild; if (_guild != null && _guild.GuildBossInfo != null) { if (_guild.GuildBossInfo.EnableWeek > 0 && _guild.GuildBossInfo.BossLv > 0) { _guild.BeginTime = UserHelper.GuildBossDate(_guild.GuildBossInfo); _guild.EndTime = _guild.BeginTime.AddMinutes(gameActive.Minutes); CombatStatus combatStatus = _guild.GuildBossRefreshStatus(); if (UserHelper.IsCurrentWeek(_guild.BeginTime) && UserHelper.IsCurrentWeek(_guild.GuildBossInfo.RefreshDate)) { if (DateTime.Now < _guild.BeginTime) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6101_GuildBossNotOpen; return false; } else if ((combatStatus == CombatStatus.Killed && DateTime.Now < _guild.EndTime) || DateTime.Now > _guild.EndTime) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6101_GuildBossOver; return true; } } else { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6101_GuildBossSet; return false; } if (combatStatus == CombatStatus.Wait || combatStatus == CombatStatus.Combat) { bossCombat.Append(ContextUser); BossUser bossUser = bossCombat.GetCombatUser(ContextUser.UserID); if (bossUser != null) { _inspirePercent = bossUser.InspirePercent; _reliveInspirePercent = bossUser.ReliveInspirePercent; _reLiveNum = bossUser.ReliveNum; } } List<BossUser> userList = bossCombat.GetCombatUser(); _regNum = userList.Count; int recordCount = 0; _bossUserList = userList.GetPaging(_pageIndex, _pageSize, out recordCount); } } } else { UserGuild guild = new ShareCacheStruct<UserGuild>().FindKey(ContextUser.MercenariesID); if (guild != null && guild.GuildBossInfo != null) { if (guild.GuildBossInfo.EnableWeek > 0 && guild.GuildBossInfo.BossLv > 0) { guild.BeginTime = UserHelper.GuildBossDate(guild.GuildBossInfo); guild.EndTime = guild.BeginTime.AddMinutes(gameActive.Minutes); if (UserHelper.IsCurrentWeek(guild.BeginTime) && UserHelper.IsCurrentWeek(guild.GuildBossInfo.RefreshDate)) { if (DateTime.Now < guild.BeginTime.AddMinutes(1)) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6101_GuildBossNotOpen; return false; } else { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6101_GuildBossOver; return true; } } else { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6101_GuildBossSet; return false; } } } else { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6101_GuildBossSet; return false; } } } stopwatch.Stop(); new BaseLog().SaveLog("公会boss6101所需时间:" + stopwatch.Elapsed.TotalMilliseconds + "ms"); } return true; }
/// <summary> /// 捐献数量,贡献声望 /// </summary> /// <param name="guild"></param> /// <param name="member"></param> /// <param name="wholeNum"></param> private void GetAddDonate(UserGuild guild, GuildMember member, int wholeNum) { guild.CurrDonateNum = MathUtils.Addition(guild.CurrDonateNum, wholeNum); //guild.Update(); if (donateType == 1) { ContextUser.GameCoin = MathUtils.Subtraction(ContextUser.GameCoin, totalDonateNum); member.DonateCoin = MathUtils.Addition(member.DonateCoin, totalDonateNum); } else if (donateType == 2) { ContextUser.UseGold = MathUtils.Addition(ContextUser.UseGold, totalDonateNum); member.DonateGold = MathUtils.Addition(member.DonateGold, totalDonateNum); } ContextUser.ObtainNum = MathUtils.Addition(ContextUser.ObtainNum, wholeNum); //ContextUser.Update(); member.Contribution = MathUtils.Addition(member.Contribution, wholeNum); member.TotalContribution = MathUtils.Addition(member.TotalContribution, wholeNum); //member.Update(); UserHelper.UserGuildUpLv(member.GuildID, wholeNum); //公会添加经验,升级 GuildMemberLog.AddLog(member.GuildID, new MemberLog { UserID = ContextUser.UserID, IdolID = 0, LogType = 1, GainObtion = wholeNum, Experience = wholeNum, GainAura = 0, InsertDate = DateTime.Now }); }
/// <summary> /// 初始化BOSS数据 /// </summary> /// <returns></returns> private static CombatGeneral CreateBossGeneral(UserGuild guild) { CombatGeneral boss = null; if (guild != null) { GuildBossInfo bossInfo = guild.GuildBossInfo; if (bossInfo != null) { var plotNpcInfoList = new ConfigCacheSet<PlotNPCInfo>().FindAll(m => m.PlotID == gameActive.BossPlotID); if (plotNpcInfoList.Count > 0) { var embattleList = new ConfigCacheSet<PlotEmbattleInfo>().FindAll(m => m.PlotNpcID == plotNpcInfoList[0].PlotNpcID); if (embattleList.Count > 0) { boss = (CombatGeneral)MonsterQueue.Create(embattleList[0]); boss.Lv = (short)MathUtils.Subtraction(bossInfo.BossLv, 0, gameActive.BossDefLv); int bossLiftNum = MonsterQueue.BossProperty(embattleList[0].PlotNpcID, AbilityType.ShengMing).ToInt(); int lifeNum = boss.LifeNum + (boss.Lv - gameActive.BossDefLv) * bossLiftNum; //ConfigEnvSet.GetInt("BossCombat.IncreaseLiveNum"); boss.LifeMaxNum = lifeNum; boss.LifeNum = lifeNum; } } else { throw new Exception(string.Format("公会战未配置BOSS:{0}", gameActive.BossPlotID)); } } } if (boss == null) { throw new Exception("Loading guid boss faild."); } return boss; }
/// <summary> /// 释放 /// </summary> /// <param name="userGuild"></param> public static void Dispose(UserGuild userGuild) { if (_bossGeneralList.ContainsKey(userGuild.GuildID)) { _bossGeneralList[userGuild.GuildID].Clear(); } if (_userGuildList.ContainsKey(userGuild.GuildID)) { _userGuildList.Remove(userGuild.GuildID); } }
/// <summary> /// 检查答题状态 /// </summary> /// <param name="guild"></param> /// <returns></returns> private bool checkAnswer(UserGuild guild) { if (guild.GuildExercise.CheckAllAnswer != 0) return false; foreach (ExerciseUser user in guild.GuildExercise.UserList) { if (user.Status == GuildExerciseStatus.All) { continue; } if (user.QuestionNo != guild.GuildExercise.QuestionNo) { if (guild.GuildExercise.QuestionNo - user.QuestionNo >= 5) { continue; } else { guild.GuildExercise.CheckAllAnswer = 2; return false; } } if (!user.AnswerStatus) { guild.GuildExercise.CheckAllAnswer = 2; return false; } } guild.GuildExercise.CheckAllAnswer = 1; return true; }
public static void DisposeData(UserGuild userGuild) { if (userGuild.LoadSuccess) { GameActive gameActive = new ShareCacheStruct<GameActive>().FindKey(UserGuild.ActiveID); userGuild.LoadSuccess = false; if (gameActive != null && gameActive.ActiveType == FunctionEnum.Goujili) { GuildBossCombat.Dispose(userGuild); } } }
public static void LoadData(UserGuild userGuild) { if ((userGuild.CombatStatus == CombatStatus.Wait || userGuild.CombatStatus == CombatStatus.Combat) && !userGuild.LoadSuccess) { GameActive gameActive = new ShareCacheStruct<GameActive>().FindKey(UserGuild.ActiveID); userGuild.LoadSuccess = true; if (gameActive != null && gameActive.ActiveType == FunctionEnum.Gonghui) { GuildBossCombat.InitBoss(userGuild); } } }
public override bool TakeAction() { int nameLength = System.Text.Encoding.Default.GetByteCount(guildName); List<UserQueue> queueArray = new PersonalCacheStruct<UserQueue>().FindAll(ContextUser.UserID, m => m.QueueType == QueueType.TuiChuGongHui); if (queueArray.Count > 0 && queueArray[0].DoRefresh() > 0 && queueArray[0].IsSuspend == false) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6006_GuildMemberNotDate; return false; } int createGoinNum = ConfigEnvSet.GetInt("UserGuild.CreateGoinNum"); int createLv = ConfigEnvSet.GetInt("UserGuild.CreateUserLv"); if (ContextUser.UserLv < createLv) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St_LevelNotEnough; return false; } if (ContextUser.GameCoin < createGoinNum) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St_GameCoinNotEnough; return false; } if (guildName == "") { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6017_GuildNameNotEmpty; return false; } if (nameLength < 4 || nameLength > 12) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6017_GuildNameTooLong; return false; } List<GuildMember> memberArray = new ShareCacheStruct<GuildMember>().FindAll(m => m.UserID == ContextUser.UserID); if (memberArray.Count > 0) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6017_UnionMembers; return false; } List<UserGuild> guildArray = new ShareCacheStruct<UserGuild>().FindAll(u => u.GuildName == guildName); if (guildArray.Count > 0) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6017_GuildRename; return false; } List<UserGuild> userGuildArray = new ShareCacheStruct<UserGuild>().FindAll(); int rankID = 0; if (userGuildArray.Count > 0) { rankID = MathUtils.Addition(userGuildArray.Count, 1, int.MaxValue); } else { rankID = 1; } string guildID = Guid.NewGuid().ToString(); ContextUser.MercenariesID = guildID; ContextUser.GameCoin = MathUtils.Subtraction(ContextUser.GameCoin, createGoinNum, 0); UserGuild userGuild = new UserGuild() { GuildID = guildID, UserID = ContextUser.UserID, GuildName = guildName, GuildLv = 1, GuildRank = rankID, WeekExperience = 0, CurrExperience = 0, CreateDate = DateTime.Now, }; new ShareCacheStruct<UserGuild>().Add(userGuild); GuildMember member = new GuildMember() { GuildID = guildID, UserID = ContextUser.UserID, PostType = PostType.Chairman, Contribution = 0, TotalContribution = 0, DevilNum = 0, SummonNum = 0, IsDevil = 0, IncenseNum = 0, InsertDate = DateTime.Now }; new ShareCacheStruct<GuildMember>().Add(member); var temp = new ShareCacheStruct<GuildMember>().FindKey(guildID, ContextUser.UserID); if (temp.HasChanged) { TraceLog.WriteInfo("6017 GuildMember update success."); } GuildIdol idolInfo = new GuildIdol() { GuildID = guildID, IdolLv = 1, CurrExperience = 0 }; new ShareCacheStruct<GuildIdol>().Add(idolInfo); return true; }