Здравствуйте, гость ( Вход | Регистрация )

> Capcha Sys, Sphere 0.56b
Moll Dayer
сообщение 21.2.2026, 17:26
Сообщение #1


**

Neophyte
Сообщений: 18
Регистрация: 1.12.2021
Группа: Пользователи
Наличность: 39
Пользователь №: 20.137
Возраст: 36



Всем добра !

Вот еще один скрипт на Сферу 56б
Капча на добычу ресурсов (в данном случае на добычу руды)
При добыче руды, есть шанс что всплывет окно капчи (5%) и игрока замораживает.
Гамп не закрывается и игрок не будет разморожен, пока не ответит. Если игрок ответил неверно или попросту закрыл УО, то на него накладывается штраф в виде заморозки. Если в течении дня несколько неверных ответов, то время наказания (заморозки) растет. Обязательно проверьте чтоб гамп на картинку костей совпадал. В общем пользуйтесь, надеюсь кому-то полезно будет.

Код
[DEFNAME captcha_settings]
CAPTCHA_CHANCE          50 // шанс капчи (50 - 5%)
CAPTCHA_RESET_TIME      864000      // сутки в тиках (86400 сек * 10)
CAPTCHA_PROTECT_MINUTES 15
CAPTCHA_PROTECT_TICKS   <EVAL 15 * 60 * 10>   // 9000 тиков = 15 минут

[EVENTS e_anti_bot_simple]
ON=@SkillStart
    IF (<ACTION> == Skill_Mining)
        // Защита 15 минут после успешного прохождения
        LOCAL.protect_left = <EVAL <ACCOUNT.TAG0.captcha_protect_end> - <SERV.TIME>>
        IF (<LOCAL.protect_left> > 0)
            RETURN 0  // Капча не показывается
        ENDIF

        IF (<EVAL {1 1000}> <= <DEF.CAPTCHA_CHANCE>)
            f_captcha_show
            RETURN 1
        ENDIF
    ENDIF

ON=@Login
    // Проверяем, заморожен ли игрок
    IF (<FLAGS> & statf_freeze) && (<TAG0.freeze_end_time_abs> > 0)
        IF (<TAG0.freeze_end_time_abs> > <SERV.TIME>)
            LOCAL.TICKS_LEFT = <EVAL (<TAG0.freeze_end_time_abs> - <SERV.TIME>)>
            LOCAL.TOTAL_SEC = <EVAL (<LOCAL.TICKS_LEFT> / 10)>
            LOCAL.MIN = <EVAL (<LOCAL.TOTAL_SEC> / 60)>
            LOCAL.SEC = <EVAL (<LOCAL.TOTAL_SEC> % 60)>
          
            SYSMESSAGE @0021 [CAPTCHA] You refused Capcha last time! You are frozen now!
            SYSMESSAGE @0bc Remaining Time: <dLOCAL.MIN> min. <dLOCAL.SEC> sec.
            SYSMESSAGE @0ee Use .freeze command to check remaining time.
          
            TIMERF <EVAL (<LOCAL.TICKS_LEFT> / 10)>, f_remove_freeze
        ELSE
            FLAGS &= ~statf_freeze
            TAG0.freeze_end_time_abs = 0
        ENDIF
    ELSE
        TAG0.captcha_active = 0
        TAG0.freeze_end_time_abs = 0
    ENDIF

[FUNCTION f_captcha_show]
LOCAL.variant = <EVAL {1 30}>
IF <LOCAL.variant> == 1
    TAG0.dice1_gump = 11284
    TAG0.dice2_gump = 11283
    TAG0.dice3_gump = 11281
    TAG0.captcha_ans = 11
ELIF <LOCAL.variant> == 2
    TAG0.dice1_gump = 11285
    TAG0.dice2_gump = 11282
    TAG0.dice3_gump = 11280
    TAG0.captcha_ans = 10
ELIF <LOCAL.variant> == 3
    TAG0.dice1_gump = 11285
    TAG0.dice2_gump = 11282
    TAG0.dice3_gump = 11281
    TAG0.captcha_ans = 11
ELIF <LOCAL.variant> == 4
    TAG0.dice1_gump = 11284
    TAG0.dice2_gump = 11285
    TAG0.dice3_gump = 11283
    TAG0.captcha_ans = 15
ELIF <LOCAL.variant> == 5
    TAG0.dice1_gump = 11285
    TAG0.dice2_gump = 11284
    TAG0.dice3_gump = 11282
    TAG0.captcha_ans = 14
ELIF <LOCAL.variant> == 6
    TAG0.dice1_gump = 11285
    TAG0.dice2_gump = 11280
    TAG0.dice3_gump = 11283
    TAG0.captcha_ans = 11
ELIF <LOCAL.variant> == 7
    TAG0.dice1_gump = 11285
    TAG0.dice2_gump = 11285
    TAG0.dice3_gump = 11284
    TAG0.captcha_ans = 17
ELIF <LOCAL.variant> == 8
    TAG0.dice1_gump = 11281
    TAG0.dice2_gump = 11285
    TAG0.dice3_gump = 11283
    TAG0.captcha_ans = 12
ELIF <LOCAL.variant> == 9
    TAG0.dice1_gump = 11284
    TAG0.dice2_gump = 11284
    TAG0.dice3_gump = 11284
    TAG0.captcha_ans = 15
ELIF <LOCAL.variant> == 10
    TAG0.dice1_gump = 11284
    TAG0.dice2_gump = 11285
    TAG0.dice3_gump = 11281
    TAG0.captcha_ans = 13
ELIF <LOCAL.variant> == 11
    TAG0.dice1_gump = 11284
    TAG0.dice2_gump = 11283
    TAG0.dice3_gump = 11280
    TAG0.captcha_ans = 10
ELIF <LOCAL.variant> == 12
    TAG0.dice1_gump = 11285
    TAG0.dice2_gump = 11281
    TAG0.dice3_gump = 11282
    TAG0.captcha_ans = 11
ELIF <LOCAL.variant> == 13
    TAG0.dice1_gump = 11285
    TAG0.dice2_gump = 11282
    TAG0.dice3_gump = 11284
    TAG0.captcha_ans = 14
ELIF <LOCAL.variant> == 14
    TAG0.dice1_gump = 11285
    TAG0.dice2_gump = 11284
    TAG0.dice3_gump = 11281
    TAG0.captcha_ans = 13
ELIF <LOCAL.variant> == 15
    TAG0.dice1_gump = 11283
    TAG0.dice2_gump = 11285
    TAG0.dice3_gump = 11282
    TAG0.captcha_ans = 13
ELIF <LOCAL.variant> == 16
    TAG0.dice1_gump = 11281
    TAG0.dice2_gump = 11285
    TAG0.dice3_gump = 11283
    TAG0.captcha_ans = 12
ELIF <LOCAL.variant> == 17
    TAG0.dice1_gump = 11280
    TAG0.dice2_gump = 11284
    TAG0.dice3_gump = 11280
    TAG0.captcha_ans = 7
ELIF <LOCAL.variant> == 18
    TAG0.dice1_gump = 11282
    TAG0.dice2_gump = 11285
    TAG0.dice3_gump = 11281
    TAG0.captcha_ans = 11
ELIF <LOCAL.variant> == 19
    TAG0.dice1_gump = 11284
    TAG0.dice2_gump = 11285
    TAG0.dice3_gump = 11283
    TAG0.captcha_ans = 15
ELIF <LOCAL.variant> == 20
    TAG0.dice1_gump = 11284
    TAG0.dice2_gump = 11282
    TAG0.dice3_gump = 11280
    TAG0.captcha_ans = 9
ELIF <LOCAL.variant> == 21
    TAG0.dice1_gump = 11285
    TAG0.dice2_gump = 11284
    TAG0.dice3_gump = 11282
    TAG0.captcha_ans = 14
ELIF <LOCAL.variant> == 22
    TAG0.dice1_gump = 11285
    TAG0.dice2_gump = 11281
    TAG0.dice3_gump = 11284
    TAG0.captcha_ans = 13
ELIF <LOCAL.variant> == 23
    TAG0.dice1_gump = 11285
    TAG0.dice2_gump = 11284
    TAG0.dice3_gump = 11283
    TAG0.captcha_ans = 15
ELIF <LOCAL.variant> == 24
    TAG0.dice1_gump = 11283
    TAG0.dice2_gump = 11285
    TAG0.dice3_gump = 11282
    TAG0.captcha_ans = 13
ELIF <LOCAL.variant> == 25
    TAG0.dice1_gump = 11281
    TAG0.dice2_gump = 11285
    TAG0.dice3_gump = 11280
    TAG0.captcha_ans = 9
ELIF <LOCAL.variant> == 26
    TAG0.dice1_gump = 11280
    TAG0.dice2_gump = 11285
    TAG0.dice3_gump = 11280
    TAG0.captcha_ans = 8
ELIF <LOCAL.variant> == 27
    TAG0.dice1_gump = 11282
    TAG0.dice2_gump = 11284
    TAG0.dice3_gump = 11281
    TAG0.captcha_ans = 10
ELIF <LOCAL.variant> == 28
    TAG0.dice1_gump = 11282
    TAG0.dice2_gump = 11284
    TAG0.dice3_gump = 11281
    TAG0.captcha_ans = 10
ELIF <LOCAL.variant> == 29
    TAG0.dice1_gump = 11284
    TAG0.dice2_gump = 11285
    TAG0.dice3_gump = 11280
    TAG0.captcha_ans = 12
ELIF <LOCAL.variant> == 30
    TAG0.dice1_gump = 11280
    TAG0.dice2_gump = 11285
    TAG0.dice3_gump = 11281
    TAG0.captcha_ans = 9
ELSE
    TAG0.dice1_gump = 11284
    TAG0.dice2_gump = 11283
    TAG0.dice3_gump = 11281
    TAG0.captcha_ans = 11
ENDIF
TAG0.captcha_active = 1
FLAGS |= statf_freeze
SDIALOG d_captcha_text

[DIALOG d_captcha_text]
150,100
page 0
noclose
nomove
resizepic 0 0 2620 320 220
dtext 20 20 1152 Подтвердите, что вы не бот!
dtext 20 50 1152 Вычислите сумму кубиков:
gumppic 40 80 <TAG0.dice1_gump>
gumppic 130 80 <TAG0.dice2_gump>
gumppic 220 80 <TAG0.dice3_gump>
dtext 20 130 1152 Ответ:
checkertrans 20 155 100 22
dtextentry 22 157 96 20 0fc 1
button 130 155 4023 4025 1 0 1
dtext 160 157 1152
dtext 20 185 0299 Введите ответ и нажмите ОК!

[DIALOG d_captcha_text button]
ON=1
IF (<TAG0.captcha_active> == 1)
    

    IF (<dARGTXT[1]> == <dTAG0.captcha_ans>)
        SYSMESSAGE @0044 Correct! You may continue.
        
        // 15-минутная защита
        LOCAL.new_protect = <EVAL <SERV.TIME> + 9000>
        ACCOUNT.TAG0.captcha_protect_end = <LOCAL.new_protect>
        
        TAG0.captcha_active = 0
        FLAGS &= ~statf_freeze
        RETURN 1
    ELSE
        IF (<ISNUM <ARGTXT[1]>>) || (!<ISEMPTY <ARGTXT[1]>>)
            SYSMESSAGE @0021 Incorrect!
          
            IF !(<ACCOUNT.TAG0.captcha_last_error_time>)
                ACCOUNT.TAG0.captcha_last_error_time = <SERV.TIME>
            ENDIF
            
            IF (<EVAL <SERV.TIME> - <ACCOUNT.TAG0.captcha_last_error_time>> > <DEF.CAPTCHA_RESET_TIME>)
                ACCOUNT.TAG0.captcha_errors = 0
            ENDIF
            
            ACCOUNT.TAG0.captcha_errors += 1
            ACCOUNT.TAG0.captcha_last_error_time = <SERV.TIME>
            
            LOCAL.FREEZE_TIME = 3600
            
            IF (<dACCOUNT.TAG0.captcha_errors> == 1)
                LOCAL.FREEZE_TIME = 180
            ELIF (<dACCOUNT.TAG0.captcha_errors> == 2)
                LOCAL.FREEZE_TIME = 900
            ENDIF
            
            SYSMESSAGE @0ee [CAPTCHA] Incorrect! Error #<dACCOUNT.TAG0.captcha_errors>.
            f_apply_freeze_new <dLOCAL.FREEZE_TIME>
            TAG0.captcha_active = 0
            RETURN 1
        ELSE
            SYSMESSAGE @0ee Please enter the answer in the text field!
            SDIALOG d_captcha_text
        ENDIF
    ENDIF
ENDIF
RETURN 1

[FUNCTION f_apply_freeze_new]
FLAGS |= statf_freeze
UPDATE
TAG0.freeze_end_time_abs = <EVAL (<SERV.TIME> + (<ARGS> * 10))>
SYSMESSAGE @0ee You are frozen for <EVAL (<ARGS> / 60)> min.
TIMERF <dARGS>, f_remove_freeze

[FUNCTION f_remove_freeze]
IF !(<FLAGS> & statf_freeze)
    RETURN 1
ENDIF
FLAGS &= ~statf_freeze
UPDATE
TAG0.freeze_end_time_abs = 0
SYSMESSAGE @05d1 Time is out. You are unfrozen now.

[PLEVEL 1]
freeze

[FUNCTION freeze]
IF !(<FLAGS> & statf_freeze) || (<dTAG0.freeze_end_time_abs> == 0)
    SYSMESSAGE @05d1 You are not frozen now.
    RETURN 1
ENDIF
LOCAL.TICKS_LEFT = <EVAL (<dTAG0.freeze_end_time_abs> - <SERV.TIME>)>
IF (<dLOCAL.TICKS_LEFT> <= 0)
    SYSMESSAGE @05d1 Freezing time is up, please wait for system update.
    RETURN 1
ENDIF
LOCAL.TOTAL_SEC = <EVAL (<dLOCAL.TICKS_LEFT> / 10)>
LOCAL.MIN = <EVAL (<LOCAL.TOTAL_SEC> / 60)>
LOCAL.SEC = <EVAL (<LOCAL.TOTAL_SEC> % 60)>
SYSMESSAGE @0bc Remaining Time: <dLOCAL.MIN> min. <dLOCAL.SEC> sec.
RETURN 1

[eof]

Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
Moll Dayer   Capcha Sys   21.2.2026, 17:26


Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 21.3.2026, 21:40
Designed by Nickostyle