Example #1
0
        /// <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);
            }
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
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);
        }
Example #5
0
        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);
        }
Example #6
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);
        }