Example #1
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);
            int version = reader.ReadInt();

            //Version 0
            if (version >= 0)
            {
                m_AccountName                = reader.ReadString();
                m_CaptchaSourceType          = (CaptchaSourceType)reader.ReadInt();
                m_NextCaptchaTime            = reader.ReadDateTime();
                m_CaptchaRequired            = reader.ReadBool();
                m_CaptchaAttempt             = reader.ReadInt();
                m_ConfirmPrompt              = reader.ReadBool();
                m_CurrentPenalty             = (PenaltyLevelType)reader.ReadInt();
                m_CurrentPenaltyExpiration   = reader.ReadDateTime();
                m_PreviousPenalty            = (PenaltyLevelType)reader.ReadInt();
                m_PenaltyProbationExpiration = reader.ReadDateTime();

                m_SelectedRow1Index = reader.ReadInt();
                m_SelectedRow2Index = reader.ReadInt();
                m_SelectedRow3Index = reader.ReadInt();

                m_Row1CorrectIndex = reader.ReadInt();
                m_Row2CorrectIndex = reader.ReadInt();
                m_Row3CorrectIndex = reader.ReadInt();

                int row1Count = reader.ReadInt();
                for (int a = 0; a < row1Count; a++)
                {
                    m_Row1IDs.Add(reader.ReadInt());
                }

                int row2Count = reader.ReadInt();
                for (int a = 0; a < row2Count; a++)
                {
                    m_Row2IDs.Add(reader.ReadInt());
                }

                int row3Count = reader.ReadInt();
                for (int a = 0; a < row3Count; a++)
                {
                    m_Row3IDs.Add(reader.ReadInt());
                }
            }

            //-----

            CaptchaPersistance.m_AccountEntries.Add(this);
        }
Example #2
0
        public bool Attempt(PlayerMobile player, CaptchaSourceType captchaSource)
        {
            if (m_CurrentPenalty != PenaltyLevelType.None && DateTime.UtcNow >= m_CurrentPenaltyExpiration)
            {
                m_CurrentPenalty = PenaltyLevelType.None;
            }

            if (m_PreviousPenalty != null && DateTime.UtcNow >= m_PenaltyProbationExpiration)
            {
                m_PreviousPenalty = PenaltyLevelType.None;
            }

            if (m_CurrentPenalty != PenaltyLevelType.None)
            {
                string timeRemaining = Utility.CreateTimeRemainingString(DateTime.UtcNow, m_CurrentPenaltyExpiration, false, true, true, true, false);

                player.SendMessage(2115, "Due to previous captcha failures, your account is not allowed to gather resources for another " + timeRemaining + ".");

                return(false);
            }

            if (m_CaptchaRequired)
            {
                m_CaptchaSourceType = captchaSource;

                m_ConfirmPrompt = false;

                player.SendSound(0x055);

                player.CloseGump(typeof(CaptchaGump));
                player.SendGump(new CaptchaGump(player));

                return(false);
            }

            else
            {
                if (DateTime.UtcNow >= m_NextCaptchaTime)
                {
                    GenerateIDs();

                    player.SendSound(0x055);

                    m_NextCaptchaTime = DateTime.UtcNow + TimeSpan.FromMinutes((double)Utility.RandomMinMax(MinimumCaptchaDelay, MaximumCaptchaDelay));
                    m_CaptchaRequired = true;
                    m_CaptchaAttempt  = 0;
                    m_ConfirmPrompt   = false;

                    m_CaptchaSourceType = captchaSource;

                    player.CloseGump(typeof(CaptchaGump));
                    player.SendGump(new CaptchaGump(player));

                    return(false);
                }

                else
                {
                    return(true);
                }
            }
        }