/// <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() { ContextUser.UserLocation = Location.City; UserGuild guild = new ShareCacheStruct <UserGuild>().FindKey(ContextUser.MercenariesID); if (guild == null) { ErrorCode = LanguageManager.GetLang().ErrorCode; return(false); } GameActive gameactive = new ShareCacheStruct <GameActive>().FindKey(11); if (gameactive == null || !gameactive.State) { return(false); } gameactive.BeginTime = gameactive.EnablePeriod.ToDateTime(DateTime.MinValue); gameactive.EndTime = gameactive.BeginTime.AddMinutes(gameactive.Minutes); DateTime readytime = gameactive.BeginTime.AddMinutes(0 - gameactive.WaitMinutes); if (gameactive.BeginTime > DateTime.Now) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6301_GuildExerciseNoOpen; return(false); } if (gameactive.BeginTime.AddMinutes(gameactive.WaitMinutes) < DateTime.Now && gameactive.EndTime > DateTime.Now) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6301_GuildExerciseIsOpen; return(false); } if (gameactive.EndTime < DateTime.Now) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6301_GuildExerciseClose; return(false); } if (guild.GuildExercise == null) { TraceLog.ReleaseWriteFatal("重新刷了6301接口1"); guild.GuildExercise = new GuildExercise(); } if (guild.GuildExercise.QuestionNo > 0) { TraceLog.ReleaseWriteFatal("重新刷了6301接口2"); guild.GuildExercise = new GuildExercise(); } if (guild.GuildExercise.UserList.Find(u => u.UserID == ContextUser.UserID) == null) { ExerciseUser exUser = new ExerciseUser(); exUser.AnswerStatus = false; exUser.QuestionNo = 0; exUser.Status = GuildExerciseStatus.Default; exUser.UserID = ContextUser.UserID; guild.GuildExercise.UpdateNotify(obj => { guild.GuildExercise.UserList.Add(exUser); return(true); }); //guild.Update(); } ContextUser.UserLocation = Location.GuildExercise; //ContextUser.Update(); return(true); }
public override bool TakeAction() { UserGuild guild = new ShareCacheStruct <UserGuild>().FindKey(ContextUser.MercenariesID); if (guild == null) { ErrorCode = LanguageManager.GetLang().ErrorCode; return(false); } GameActive gameactive = new ShareCacheStruct <GameActive>().FindKey(11); if (gameactive == null || !gameactive.State) { return(false); } gameactive.BeginTime = gameactive.EnablePeriod.ToDateTime(DateTime.MinValue); gameactive.EndTime = gameactive.BeginTime.AddMinutes(gameactive.Minutes); DateTime readytime = gameactive.BeginTime.AddMinutes(0 - gameactive.WaitMinutes); if (readytime > DateTime.Now) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6301_GuildExerciseNoOpen; return(false); } if (gameactive.EndTime < DateTime.Now) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6301_GuildExerciseClose; return(false); } if (guild.GuildExercise == null) { return(false); } ExerciseUser exUser = guild.GuildExercise.UserList.Find(u => u.UserID == ContextUser.UserID); if (exUser == null) { return(false); } if (QuestionNo != guild.GuildExercise.QuestionNo) { return(false); } if ((DateTime.Now - guild.GuildExercise.QuesTime).TotalSeconds < 20) { return(false); } if (guild.GuildExercise.CheckAllAnswer == 0) { checkAnswer(guild); if (guild.GuildExercise.CheckAllAnswer == 1) { if (guild.GuildExercise.Level < 20) { guild.GuildExercise.Level = MathUtils.Addition(guild.GuildExercise.Level, 1); } } if (guild.GuildExercise.CheckAllAnswer == 2) { guild.GuildExercise.Level = guild.GuildExercise.Level = 1; } //guild.Update(); } if (guild.GuildExercise.CheckAllAnswer == 1) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6303_GuildExerciseAllAnswerTrue; } if (guild.GuildExercise.CheckAllAnswer == 2) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6303_GuildExerciseAllAnswerFalse; } return(true); }
public override bool TakeAction() { UserGuild guild = new ShareCacheStruct <UserGuild>().FindKey(ContextUser.MercenariesID); if (guild == null) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6301_GuildExerciseIsOpen; return(false); } GameActive gameactive = new ShareCacheStruct <GameActive>().FindKey(11); if (gameactive == null || !gameactive.State) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6301_GuildExerciseIsOpen; return(false); } gameactive.BeginTime = gameactive.EnablePeriod.ToDateTime(DateTime.MinValue); gameactive.EndTime = gameactive.BeginTime.AddMinutes(gameactive.Minutes); DateTime readytime = gameactive.BeginTime.AddMinutes(0 - gameactive.WaitMinutes); if (gameactive.BeginTime > DateTime.Now) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6301_GuildExerciseIsOpen; return(false); } if (gameactive.EndTime < DateTime.Now.AddSeconds(2)) { ContextUser.UserLocation = Location.City; Status = 3; ColdTime = 10; ErrorInfo = LanguageManager.GetLang().St6301_GuildExerciseClose; return(true); } if (guild.GuildExercise == null) { ContextUser.UserLocation = Location.City; Status = 3; ColdTime = 10; ErrorInfo = LanguageManager.GetLang().St6301_GuildExerciseClose; return(true); } if (guild.GuildExercise.UserList.Count == 0) { ContextUser.UserLocation = Location.City; Status = 3; ColdTime = 10; ErrorInfo = LanguageManager.GetLang().St6301_GuildExerciseClose; return(true); } ExerciseUser exUser = guild.GuildExercise.UserList.Find(u => u.UserID == ContextUser.UserID); if (exUser == null) { ContextUser.UserLocation = Location.City; Status = 3; ColdTime = 10; ErrorInfo = LanguageManager.GetLang().St6301_GuildExerciseClose; return(true); } Question = GuildExerciseHelper.GetQuestion(guild, gameactive, exUser, ref ColdTime); if (Question == null) { Question = null; } if (Question != null) { Level = guild.GuildExercise.Level; QuestionNo = guild.GuildExercise.QuestionNo; } if (guild.GuildExercise.QuestionNo - exUser.QuestionNo > 5) { ContextUser.UserLocation = Location.City; Status = 3; ColdTime = 10; ErrorInfo = LanguageManager.GetLang().St6301_GuildExerciseTimeOut; return(true); } if (guild.GuildExercise.CheckAllAnswer == 0) { if (guild.GuildExercise.QuestionNo != exUser.QuestionNo) { exUser.QuestionStatus = GuildQuestionStatus.ToAnswer; } } else { exUser.QuestionStatus = GuildQuestionStatus.ToNext; } Status = guild.GuildExercise.Status; QueueStatus = (int)exUser.QuestionStatus; IsAuto = exUser.Status == GuildExerciseStatus.All ? 1 : 0; return(true); }
public override bool TakeAction() { ErrorCode = ops; UserGuild guild = new ShareCacheStruct <UserGuild>().FindKey(ContextUser.MercenariesID); if (guild == null) { ErrorCode = LanguageManager.GetLang().ErrorCode; return(false); } GameActive gameactive = new ShareCacheStruct <GameActive>().FindKey(11); if (gameactive == null || !gameactive.State) { return(false); } gameactive.BeginTime = gameactive.EnablePeriod.ToDateTime(DateTime.MinValue); gameactive.EndTime = gameactive.BeginTime.AddMinutes(gameactive.Minutes); DateTime readytime = gameactive.BeginTime.AddMinutes(0 - gameactive.WaitMinutes); if (readytime > DateTime.Now) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6301_GuildExerciseNoOpen; return(false); } if (guild.GuildExercise == null) { return(false); } ExerciseUser exUser = guild.GuildExercise.UserList.Find(u => u.UserID == ContextUser.UserID); if (exUser == null) { return(false); } if (QuestionNo != guild.GuildExercise.QuestionNo) { return(false); } if (exUser.QuestionNo == guild.GuildExercise.QuestionNo) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6305_GuildExerciseISAnswer; return(false); } //自动答题 if (exUser.Status == GuildExerciseStatus.All) { ops = 4; } if (ops == 0) { exUser.QuestionNo = QuestionNo; GuildQuestion Question = new ConfigCacheSet <GuildQuestion>().FindKey(guild.GuildExercise.QuestionID); if (Question != null && Question.Answer == Answer) { exUser.AnswerStatus = true; } else { exUser.AnswerStatus = false; } } int expen = 0; if (ops == 1)//晶石询问 { expen = baseexpen + exUser.GameConisCount * 2; ErrorCode = ops; ErrorInfo = string.Format(LanguageManager.GetLang().St6305_GuildExerciseGoldAnswer, expen); return(false); } if (ops == 2)//晶石确认 { expen = baseexpen + exUser.GameConisCount * 2; //晶石不足 if (ContextUser.GoldNum < expen) { this.ErrorCode = LanguageManager.GetLang().ErrorCode; this.ErrorInfo = LanguageManager.GetLang().St_GoldNotEnough; return(false); } exUser.QuestionNo = QuestionNo; exUser.AnswerStatus = true; exUser.GameConisCount = MathUtils.Addition(exUser.GameConisCount, 1); ContextUser.UseGold = MathUtils.Addition(ContextUser.UseGold, expen, int.MaxValue); //ContextUser.Update(); } if (ops == 3)//自动答题询问 { int expenAll = 200; ErrorCode = ops; ErrorInfo = string.Format(LanguageManager.GetLang().St6305_GuildExerciseAutoAnswer, expenAll); return(false); } if (ops == 4)//自动答题 { if (exUser.Status != GuildExerciseStatus.All) { int expenAll = 200; //晶石不足 if (ContextUser.GoldNum < expenAll) { this.ErrorCode = LanguageManager.GetLang().ErrorCode; this.ErrorInfo = LanguageManager.GetLang().St_GoldNotEnough; return(false); } exUser.Status = GuildExerciseStatus.All; ContextUser.UseGold = MathUtils.Addition(ContextUser.UseGold, expenAll, int.MaxValue); //ContextUser.Update(); } exUser.QuestionNo = QuestionNo; exUser.AnswerStatus = true; } Result = exUser.AnswerStatus ? 1 : 0; //奖励 if (QuestionNo == guild.GuildExercise.QuestionNo && exUser.AnswerStatus) { int Expen = 0; int Experience = 0; GuildExerciseHelper.DoPrize(guild, gameactive, exUser, ContextUser, ref Expen, ref Experience); ErrorInfo = string.Format(LanguageManager.GetLang().St6305_GuildExerciseAnswerSuss, Expen, Experience); //答对提示 } else { ErrorInfo = LanguageManager.GetLang().St6305_GuildExerciseAnswerFail; new TjxChatService(ContextUser).SystemGuildSend(ChatType.Guild, string.Format(LanguageManager.GetLang().St6305_GuildExerciseGuildChat, ContextUser.NickName)); } exUser.QuestionStatus = GuildQuestionStatus.WaitForResults; //guild.Update(); 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); }