Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
        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;
        }