diff --git a/_incl_data/class/Captcha/Captcha.php b/_incl_data/class/Captcha/Captcha.php new file mode 100644 index 00000000..eba19552 --- /dev/null +++ b/_incl_data/class/Captcha/Captcha.php @@ -0,0 +1,81 @@ +width = max($width, 1); + return $this; + } + + public function height(int $height): Captcha + { + $this->height = max($height, 1); + return $this; + } + + public function newImage() + { + if ($this->width < 1 || $this->height < 1) { + return; + } + + $img = imagecreatetruecolor($this->width, $this->height) or die('Cannot create image'); // создаем картинку + imagefill($img, 0, 0, 0x616161); // заполняем фон картинки + $x = -20; + $i = 1; + $sum = ""; + $colorRGB = rand(180, 200); //цвет текста + while ($i++ <= 5000) { + imageSetPixel($img, rand(0, 105), rand(0, 24), 0x515151); + } + + //рисуем 2 линии + imageLine($img, rand(0, 10), rand(0, 50), rand(95, 105), rand(0, 26), 0x909090); + imageLine($img, rand(0, 10), rand(0, 50), rand(95, 105), rand(0, 26), 0x909090); + //рамка + imageRectangle($img, 0, 0, 105, 24, 0x343434); + + $fonts = [ + 'fonts/FRSCRIPT.ttf', + 'fonts/CHILLER.ttf', + 'fonts/Bradley Hand ITC.ttf', + 'fonts/de_Manu_2_Regular.ttf', + 'fonts/Edgar_da_cool_Regular.ttf', + 'fonts/Hurryup_Hurryup.ttf', + 'fonts/Fh_Script_Regular.ttf', + 'fonts/Gabo4_Gabo4.ttf', + 'fonts/JAMI_Regular.ttf', + 'fonts/Justy1_Regular.ttf', + ]; + $font = '../' . $fonts[rand(0, sizeof($fonts) - 1)]; + + $i = 1; + while ($i++ <= 4) { // выводим одну цифру за один проход цикла + imagettftext($img, 15, 0, $x = $x + 25, 20, imagecolorallocate($img, $colorRGB, $colorRGB, $colorRGB), $font, $rnd = mt_rand(0, 9)); // выводим текст поверх картинки + $sum = $sum . $rnd; // Собираем в одну строку все символы на картинке + } + + ob_start(); + imagepng($img); // выводим готовую картинку в формате PNG + $imgData = ob_get_clean(); + imagedestroy($img); // освобождаем память, выделенную для картинки + + echo 'captcha'; + $this->sum = $sum; + } + + /** + * @return string + */ + public function getSum(): string + { + return $this->sum; + } +} \ No newline at end of file diff --git a/fonts/BK2.ttf b/_incl_data/class/Captcha/fonts/BK2.ttf similarity index 100% rename from fonts/BK2.ttf rename to _incl_data/class/Captcha/fonts/BK2.ttf diff --git a/fonts/Bradley Hand ITC.ttf b/_incl_data/class/Captcha/fonts/Bradley Hand ITC.ttf similarity index 100% rename from fonts/Bradley Hand ITC.ttf rename to _incl_data/class/Captcha/fonts/Bradley Hand ITC.ttf diff --git a/fonts/CHILLER.ttf b/_incl_data/class/Captcha/fonts/CHILLER.ttf similarity index 100% rename from fonts/CHILLER.ttf rename to _incl_data/class/Captcha/fonts/CHILLER.ttf diff --git a/fonts/Edgar_da_cool_Regular.ttf b/_incl_data/class/Captcha/fonts/Edgar_da_cool_Regular.ttf similarity index 100% rename from fonts/Edgar_da_cool_Regular.ttf rename to _incl_data/class/Captcha/fonts/Edgar_da_cool_Regular.ttf diff --git a/fonts/FRSCRIPT.ttf b/_incl_data/class/Captcha/fonts/FRSCRIPT.ttf similarity index 100% rename from fonts/FRSCRIPT.ttf rename to _incl_data/class/Captcha/fonts/FRSCRIPT.ttf diff --git a/fonts/Fh_Script_Regular.ttf b/_incl_data/class/Captcha/fonts/Fh_Script_Regular.ttf similarity index 100% rename from fonts/Fh_Script_Regular.ttf rename to _incl_data/class/Captcha/fonts/Fh_Script_Regular.ttf diff --git a/fonts/Gabo4_Gabo4.ttf b/_incl_data/class/Captcha/fonts/Gabo4_Gabo4.ttf similarity index 100% rename from fonts/Gabo4_Gabo4.ttf rename to _incl_data/class/Captcha/fonts/Gabo4_Gabo4.ttf diff --git a/fonts/GothicRus.ttf b/_incl_data/class/Captcha/fonts/GothicRus.ttf similarity index 100% rename from fonts/GothicRus.ttf rename to _incl_data/class/Captcha/fonts/GothicRus.ttf diff --git a/fonts/Hurryup_Hurryup.ttf b/_incl_data/class/Captcha/fonts/Hurryup_Hurryup.ttf similarity index 100% rename from fonts/Hurryup_Hurryup.ttf rename to _incl_data/class/Captcha/fonts/Hurryup_Hurryup.ttf diff --git a/fonts/JAMI_Regular.ttf b/_incl_data/class/Captcha/fonts/JAMI_Regular.ttf similarity index 100% rename from fonts/JAMI_Regular.ttf rename to _incl_data/class/Captcha/fonts/JAMI_Regular.ttf diff --git a/fonts/Justy1_Regular.ttf b/_incl_data/class/Captcha/fonts/Justy1_Regular.ttf similarity index 100% rename from fonts/Justy1_Regular.ttf rename to _incl_data/class/Captcha/fonts/Justy1_Regular.ttf diff --git a/fonts/de_Manu_2_Regular.ttf b/_incl_data/class/Captcha/fonts/de_Manu_2_Regular.ttf similarity index 100% rename from fonts/de_Manu_2_Regular.ttf rename to _incl_data/class/Captcha/fonts/de_Manu_2_Regular.ttf diff --git a/_incl_data/class/FightRequest.php b/_incl_data/class/FightRequest.php index 2a8f06da..9eea8be1 100644 --- a/_incl_data/class/FightRequest.php +++ b/_incl_data/class/FightRequest.php @@ -1197,14 +1197,17 @@ class FightRequest HTML; if ($r === self::BATTLE_RAZDEL_CHAOTIC) { - if (!$this->u->info['no_zv_key']): ?> + if (!$this->u->info['no_zv_key']): + $security = new Captcha\Captcha(); + ?>
-

- +
+ width(70)->height(20)->newImage(); + $_SESSION['code'] = $security->getSum(); ?> Код подтверждения:
- + width(70)->height(20)->newImage(); + $_SESSION['code'] = $security->getSum(); ?> Код подтверждения:
diff --git a/buttons.php b/buttons.php index 5c488dcf..ab977d8e 100644 --- a/buttons.php +++ b/buttons.php @@ -2,6 +2,7 @@ /* Главный игровой файл. */ +use Captcha\Captcha; use Core\Config; use Core\Database; use Core\Db; @@ -26,33 +27,42 @@ function er($e) exit($err); } +function gameexit() +{ + setcookie('login', '', 0, '', Config::get('host')); + setcookie('login', '', 0); + setcookie('auth', '', 0); + Db::sql('update users set online = unix_timestamp() - 420 where id = ?', [$u->info['id']]); + exit(Config::get('exit')); +} + Database::init(); define('IP', UserIp::get()); $u = User::start(); + +if (empty($u->info)) { + exit(Config::get('exit')); +} + $filter = new Filter(); $chat = new Chat(); - $userclan = new Clan($u->info); ini_set('max_execution_time', '120'); if (isset($_GET['showcode'])) { - include_once 'show_reg_img/security.php'; - die(); + $security = new Captcha(); + $security->width(107)->height(26)->newImage(); + $_SESSION['code'] = $security->getSum(); + exit(); } if (isset($u->info['joinIP']) && $u->info['joinIP'] == 1 && $u->info['ip'] != IP) { er('#Пожалуйста авторизируйтесь с главной страницы'); } elseif (isset($_GET['exit'])) { - setcookie('login', '', 0, '', Config::get('host')); - setcookie('login', '', 0); - setcookie('auth', '', 0); - Db::sql('update users set online = unix_timestamp() - 420 where id = ?', [$u->info['id']]); - die(Config::get('exit')); -} elseif (!isset($u->info['id'])) { - er('Возникла проблема с определением id персонажа
Авторизируйтесь с главной страницы.'); + gameexit(); } if ($u->info['online'] < time() - 60) { diff --git a/js/gameEngine.js b/js/gameEngine.js index abaca8ef..1b81e5f4 100644 --- a/js/gameEngine.js +++ b/js/gameEngine.js @@ -1,4 +1,4 @@ -const sml = new Array("p001", 18, 18, "p002", 15, 15, "p003", 22, 15, "p004", 15, 15, "p005", 20, 20, "p006", 31, 28, "p007", 15, 15, +const sml = ["p001", 18, 18, "p002", 15, 15, "p003", 22, 15, "p004", 15, 15, "p005", 20, 20, "p006", 31, 28, "p007", 15, 15, "p008", 21, 22, "p009", 28, 24, "p010", 28, 21, "p011", 62, 28, "p012", 15, 21, "p013", 15, 19, "p014", 15, 15, "p015", 16, 16, "p016", 15, 15, "p017", 21, 15, "p018", 15, 21, "p019", 42, 23, "p020", 26, 25, "p021", 25, 27, "p022", 26, 26, "p023", 26, 27, "p024", 27, 22, "p025", 26, 28, "p026", 15, 15, "p027", 19, 17, "p028", 15, 18, "p029", 15, 15, "p030", 49, 18, "p031", 37, 15, @@ -17,7 +17,7 @@ const sml = new Array("p001", 18, 18, "p002", 15, 15, "p003", 22, 15, "p004", 15 "p102", 31, 36, "p103", 30, 35, "p104", 32, 32, "p105", 45, 45, "p106", 50, 35, "p107", 45, 41, "p108", 31, 27, "p109", 44, 30, "p110", 29, 20, "p111", 29, 27, "p112", 29, 20, "p113", 29, 20, "p114", 51, 24, "p115", 43, 35, "p116", 45, 23, "p117", 36, 24, "p118", 51, 35, "p119", 41, 31, "p120", 29, 29, - "p121", 32, 26, "p122", 40, 25, "p123", 37, 22, "p124", 40, 36, "p125", 38, 33, "p126", 23, 23, "p127", 33, 24, "p128", 30, 20); + "p121", 32, 26, "p122", 40, 25, "p123", 37, 22, "p124", 40, 36, "p125", 38, 33, "p126", 23, 23, "p127", 33, 24, "p128", 30, 20]; let cb_id = 1, cb_date = {}, @@ -105,17 +105,6 @@ function anrenameGo(id, val) { getUrl('main', `main.php?newanimal&rename=${id}&vvv=${val}`); } - -//Каптча на действия -// 5 -function captcha(title, act) { - win.add('captcha', `${title}  `, '
Укажите код с картинки:
', { - 'a1': `captchatext1($(\'#captchatext1\').val(),\'${act}\')`, - 'usewin': '$(\'#captchatext1\').focus()', - 'd': '' - }, 3, 1, 'min-width:230px;'); -} - // 6 function captchatext1(val, act) { getUrl('main', `${act}&cptch1=${val}`); diff --git a/modules_data/_zv.php b/modules_data/_zv.php index 3b9199e8..312f9fd4 100644 --- a/modules_data/_zv.php +++ b/modules_data/_zv.php @@ -463,13 +463,16 @@ if ($zv->error) {

Бой без правил (проигравшая сторона получает инвалидность)
+ style="color: #777; ">(проигравшая сторона получает инвалидность)
Закрытый поединок (бой будет изолирован от нападений)
Запрет на использование свитков восстановления НР и Маны
- info['no_zv_key']): ?> - - Код подтверждения: ' + info['no_zv_key']): + $security = new Captcha\Captcha(); + $security->width(70)->height(20)->newImage(); + $_SESSION['code'] = $security->getSum(); + ?> + Код подтверждения:
diff --git a/show_reg_img/security.php b/show_reg_img/security.php deleted file mode 100644 index c10206f0..00000000 --- a/show_reg_img/security.php +++ /dev/null @@ -1,55 +0,0 @@ - \ No newline at end of file diff --git a/show_reg_img/security3.php b/show_reg_img/security3.php deleted file mode 100644 index 93ac5256..00000000 --- a/show_reg_img/security3.php +++ /dev/null @@ -1,48 +0,0 @@ - \ No newline at end of file diff --git a/support/captcha.class.php b/support/captcha.class.php deleted file mode 100644 index ff930adf..00000000 --- a/support/captcha.class.php +++ /dev/null @@ -1,36 +0,0 @@ -keystring=array(); - - for($i=0;$i < $this->length;$i++){ - $this->keystring[] .= mt_rand(0,9); - } - - } - - - public function draw(){ - $img = ''; - foreach($this->keystring as $keystring){ - $img .= ''; - } - - return $img; - } - - - public function getKeyString(){ - return implode($this->keystring); - } - -} - -?> \ No newline at end of file diff --git a/support/captcha.php b/support/captcha.php deleted file mode 100644 index 3669101d..00000000 --- a/support/captcha.php +++ /dev/null @@ -1,11 +0,0 @@ -getKeyString(); - -echo $captcha->draw(); - -?> \ No newline at end of file diff --git a/support/images/0.gif b/support/images/0.gif deleted file mode 100644 index db1488b6..00000000 Binary files a/support/images/0.gif and /dev/null differ diff --git a/support/images/1.gif b/support/images/1.gif deleted file mode 100644 index 3064269e..00000000 Binary files a/support/images/1.gif and /dev/null differ diff --git a/support/images/2.gif b/support/images/2.gif deleted file mode 100644 index 62b6f531..00000000 Binary files a/support/images/2.gif and /dev/null differ diff --git a/support/images/3.gif b/support/images/3.gif deleted file mode 100644 index 73f182bb..00000000 Binary files a/support/images/3.gif and /dev/null differ diff --git a/support/images/4.gif b/support/images/4.gif deleted file mode 100644 index bde657e4..00000000 Binary files a/support/images/4.gif and /dev/null differ diff --git a/support/images/5.gif b/support/images/5.gif deleted file mode 100644 index a9ce8b7a..00000000 Binary files a/support/images/5.gif and /dev/null differ diff --git a/support/images/6.gif b/support/images/6.gif deleted file mode 100644 index b1552e77..00000000 Binary files a/support/images/6.gif and /dev/null differ diff --git a/support/images/7.gif b/support/images/7.gif deleted file mode 100644 index 0cf419ac..00000000 Binary files a/support/images/7.gif and /dev/null differ diff --git a/support/images/8.gif b/support/images/8.gif deleted file mode 100644 index c7c6a00b..00000000 Binary files a/support/images/8.gif and /dev/null differ diff --git a/support/images/9.gif b/support/images/9.gif deleted file mode 100644 index 552c2719..00000000 Binary files a/support/images/9.gif and /dev/null differ diff --git a/support/images/bgbtn.jpg b/support/images/bgbtn.jpg deleted file mode 100644 index e95c2c18..00000000 Binary files a/support/images/bgbtn.jpg and /dev/null differ diff --git a/support/images/bginput.jpg b/support/images/bginput.jpg deleted file mode 100644 index 8e710983..00000000 Binary files a/support/images/bginput.jpg and /dev/null differ diff --git a/support/index.php b/support/index.php index a4143fe3..8d4a519e 100644 --- a/support/index.php +++ b/support/index.php @@ -1,302 +1,304 @@ -set_error_delimiters('
', '
'); +$security = new Captcha(); + //Задаем правила валидации -$rules = array( - array( - 'field' => 'user_name', - 'label' => 'Ваше ник в игре', - 'rules' => array( - 'trim' => '', //Обрезаем пробелы по бокам - 'strip_tags' => '', // Удаляем HTML и PHP теги - 'required' => 'Поле %s обязательно для заполнения' - ) - ), - array( - 'field' => 'user_email', - 'label' => 'Ваш e-mail адрес связанный с ником', - 'rules' => array( - 'trim' => '', - 'required' => 'Поле %s обязательно для заполнения', - 'valid_email' => 'Поле %s должно содержать правильный email-адрес' - ) - ), - array( - 'field' => 'user_url', - 'label' => 'URL info персонажа', - 'rules' => array( - 'trim' => '', - 'valid_url' => 'Поле %s должно содержать правильный URL адрес' - ) - ), - array( - 'field' => 'subject', - 'label' => 'Тема обращения', - 'rules' => array( - 'trim' => '', //Обрезаем пробелы по бокам - 'strip_tags' => '', // Удаляем HTML и PHP теги - 'required' => 'Поле %s обязательно для заполнения' - ) - ), - array( - 'field' => 'text', - 'label' => 'Суть проблемы/обращения', - 'rules' => array( - 'trim' => '', //Обрезаем пробелы по бокам - 'strip_tags' => '', // Удаляем HTML и PHP теги - 'required' => 'Поле %s обязательно для заполнения' - ) - ), - array( - 'field' => 'keystring', - 'label' => 'Капча', - 'rules' => array( - 'trim' => '', //Обрезаем пробелы по бокам - 'required' => 'Вы не ввели цифры изображенные на картинке', - 'valid_captcha[keystring]' => 'Вы ввели не правильный цифры с картинки' - ) - ) -); +$rules = [ + [ + 'field' => 'user_name', + 'label' => 'Ваше ник в игре', + 'rules' => [ + 'trim' => '', //Обрезаем пробелы по бокам + 'strip_tags' => '', // Удаляем HTML и PHP теги + 'required' => 'Поле %s обязательно для заполнения', + ], + ], + [ + 'field' => 'user_email', + 'label' => 'Ваш e-mail адрес связанный с ником', + 'rules' => [ + 'trim' => '', + 'required' => 'Поле %s обязательно для заполнения', + 'valid_email' => 'Поле %s должно содержать правильный email-адрес', + ], + ], + [ + 'field' => 'user_url', + 'label' => 'URL info персонажа', + 'rules' => [ + 'trim' => '', + 'valid_url' => 'Поле %s должно содержать правильный URL адрес', + ], + ], + [ + 'field' => 'subject', + 'label' => 'Тема обращения', + 'rules' => [ + 'trim' => '', //Обрезаем пробелы по бокам + 'strip_tags' => '', // Удаляем HTML и PHP теги + 'required' => 'Поле %s обязательно для заполнения', + ], + ], + [ + 'field' => 'text', + 'label' => 'Суть проблемы/обращения', + 'rules' => [ + 'trim' => '', //Обрезаем пробелы по бокам + 'strip_tags' => '', // Удаляем HTML и PHP теги + 'required' => 'Поле %s обязательно для заполнения', + ], + ], + [ + 'field' => 'keystring', + 'label' => 'Капча', + 'rules' => [ + 'trim' => '', //Обрезаем пробелы по бокам + 'required' => 'Вы не ввели цифры изображенные на картинке', + 'valid_captcha[keystring]' => 'Вы ввели не правильный цифры с картинки', + ], + ], +]; //Устанавливаем правила валидации $validator->set_rules($rules); $message = ''; //Запускаем валидацию POST данных -if($validator->run()){ - - //Здесь впишите свой e-mail адрес - //на негу будут приходить уведомления с формы - $to = 'support@new-combats.com'; - - $from = "=?UTF-8?b?" . base64_encode($validator->postdata('user_name')) . "?="; - $subject = "=?UTF-8?b?" . base64_encode( $validator->postdata('subject') ) . "?="; - - $mail_body = "Поступил новый ответ от формы обратной связи.\r\nАвтор оставил такие данные:\r\n"; - - //Формируем текст сообщения - foreach($rules as $rule){ - if($rule['field'] == 'keystring') continue; - $mail_body .= $rule['label'].': '.$validator->postdata($rule['field'])."\r\n"; - } - - $header = "MIME-Version: 1.0\n"; - $header .= "Content-Type: text/plain; charset=UTF-8\n"; - $header .= "From: ". $from . " <" . $validator->postdata('user_email'). ">"; +if ($validator->run()) { + + //Здесь впишите свой e-mail адрес + //на негу будут приходить уведомления с формы + $to = 'support@new-combats.com'; + + $from = "=?UTF-8?b?" . base64_encode($validator->postdata('user_name')) . "?="; + $subject = "=?UTF-8?b?" . base64_encode($validator->postdata('subject')) . "?="; + + $mail_body = "Поступил новый ответ от формы обратной связи.\r\nАвтор оставил такие данные:\r\n"; + + //Формируем текст сообщения + foreach ($rules as $rule) { + if ($rule['field'] == 'keystring') { + continue; + } + $mail_body .= $rule['label'] . ': ' . $validator->postdata($rule['field']) . "\r\n"; + } + + $header = "MIME-Version: 1.0\n"; + $header .= "Content-Type: text/plain; charset=UTF-8\n"; + $header .= "From: " . $from . " <" . $validator->postdata('user_email') . ">"; + + //Отправка сообщения + if (mail($to, $subject, $mail_body, $header)) { + + $message = '
Ваше сообщение успешно отправлено!
'; + + //Очищаем форму обратной связи + $validator->reset_postdata(); + } else { + $message = '
Ваше сообщение не отправлено!
'; + } +} else { - //Отправка сообщения - if(mail($to, $subject, $mail_body, $header)){ - - $message = '
Ваше сообщение успешно отправлено!
'; - - //Очищаем форму обратной связи - $validator->reset_postdata(); - } - else{ - - $message = '
Ваше сообщение не отправлено!
'; - } -} -else{ - //Получаем сообщения об ошибках в виде строки - $message = $validator->get_string_errors(); - + $message = $validator->get_string_errors(); + //Получаем сообщения об ошибках в виде массива - $errors = $validator->get_array_errors(); - + $errors = $validator->get_array_errors(); } - ?> - + - -Форма обратной связи с Администрацией проекта «Бойцовский клуб» + + Форма обратной связи с Администрацией проекта «Бойцовский клуб» + - + --> + -

Заполните контактную форму и мы свяжемся с вами в ближайшее время, чтобы сообщить об устранении неисправностей.

- -
+
- '.$message.'
': ''?> -
-
> - - -
- -
> - - -
- -
> - - -
- -
> - - -
- -
- - -
- -
> - -
- -
+
+

Заполните контактную форму и мы свяжемся с вами в ближайшее время, чтобы сообщить об устранении неисправностей.

+ + ' . $message . '
' : '' ?> + +
> + + +
+ +
> + + +
+ +
> + + +
+ +
> + + +
+ +
+ + +
+ +
> + +
+ width(100)->height(30)->newImage(); + $_SESSION['keystring'] = $security->getSum(); ?> +
+ +
+ +
+ + +
+ + +
-
- -
- - - -
-