<?php

class BotLogic
{

    public static $bot = [];
    public static $st = [];
    private static $btl = [];
    private static $enemy = [];
    private static $pr = false;

    static function inuser_go_btl($id, $txt = '')
    {
        if (isset($id['id'])) {
            $ctx = stream_context_create(['https' => ['timeout' => 30]]);
            $val = file_get_contents('/jx/battle/refresh_bot.php?uid=' . $id['id'] . '&cron_core=' . md5($id['id'] . '_brfCOreW@!_' . $id['pass']) . '&pass=' . $id['pass'] . '&' . $txt, false, $ctx);
            echo '[' . $val . ']<hr>';
            unset($val);
        }
    }

    static function battle_priems()
    {
        //используем приемы в бою
        if (self::$st['hpNow'] > 0 && self::$bot['battle'] > 0) {

            $pr = explode('|', self::$bot['priems']);
            $rz = explode('|', self::$bot['priems_z']);
            $i = 0;
            while ($i < count($pr)) {
                if ($pr[$i] > 0) {
                    self::$pr[$pr[$i]] = $rz[$i];
                }
                $i++;
            }
            $i = 0;
            while ($i < count($pr)) {
                if ($rz[$i] < 1 && $pr[$i] > 0) {
                    //Можно использовать прием, подключаем логику
                    BotPriemLogic::start($i, $pr[$i]);
                }
                $i++;
            }
            self::$pr = false;
        }
    }

    static function clear_bot()
    {

        //Очистка бота, обнуляем его до [0], удаляем эффекты, предметы и т.д, а текущему ставим логин delete

        //Удаляем сообщения в чате
        mysql_query('DELETE FROM `chat` WHERE `to` = "' . self::$bot['login'] . '"');
        //Удаляем шмотки и эффекты
        mysql_query('DELETE FROM `items_users` WHERE `uid` = "' . self::$bot['id'] . '"');
        mysql_query('DELETE FROM `eff_users` WHERE `uid` = "' . self::$bot['id'] . '"');

        //Удаляем статы и поле в юзерс
        mysql_query('DELETE FROM `users` WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
        mysql_query('DELETE FROM `stats` WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
        mysql_query('DELETE FROM `online` WHERE `uid` = "' . self::$bot['id'] . '" LIMIT 1');
        mysql_query('DELETE FROM `actions` WHERE `uid` = "' . self::$bot['id'] . '" LIMIT 1');

    }

    static function inuser_go_main($id, $txt = '')
    {
        if (isset($id['id'])) {
            $ctx = stream_context_create(['https' => ['timeout' => 1]]);
            file_get_contents('/main_bot.php?uid=' . $id['id'] . '&cron_core=' . md5($id['id'] . '_brfCOreW@!_' . $id['pass']) . '&pass=' . $id['pass'] . '&' . $txt, false, $ctx);
        }
    }

    static function inuser_go_zv($id, $txt = '')
    {
        if (isset($id['id'])) {
            $ctx = stream_context_create(['https' => ['timeout' => 1]]);
            file_get_contents('/main_bot.php?zayvka=1&r=4&uid=' . $id['id'] . '&cron_core=' . md5($id['id'] . '_brfCOreW@!_' . $id['pass']) . '&pass=' . $id['pass'] . '&' . $txt, false, $ctx);
        }
    }

    //ПРоверка на файтрум
    static function test_fr($id, $city = 'capitalcity')
    {
        return $city != 'capitalcity' || $id == 0 || $id == 2 || $id == 4 || $id == 5 || $id == 7 || $id == 377;
    }

    //Действия бота вне боя
    static function actions()
    {

        global $u;

        if (self::$bot['battle'] == 0 && self::$bot['zv'] == 0 && self::$bot['pass'] == 'saintlucia') {

            //Можно: сменить фулл, перейти в другую комнату, входить наймом, делать бафы

            //Переходим в другую комнату
            if (true == false && self::$bot['a1'] != 0 && self::$bot['a1'] != self::$bot['room']) {

                self::_loc(self::$bot['a1']);

            } else {

                self::update('a1', 0);

                //CAPITAL
                if (self::$bot['city'] == 'capitalcity' && !self::test_fr(self::$bot['room'])) {

                    if (self::$bot['exp'] > 400000 && self::$bot['level'] == 8) {
                        self::$bot['exp'] = 400000;
                        mysql_query('UPDATE `stats` SET `exp` = "400000" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
                    } elseif (self::$bot['exp'] > 3500000 && self::$bot['level'] == 9) {
                        self::$bot['exp'] = 3500000;
                        mysql_query('UPDATE `stats` SET `exp` = "3500000" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
                    }

                    //Действие в комнате
                    //Магазин
                    //Покупаем кристалл вечности
                    if (self::$bot['room'] == 10 && self::$bot['level'] == 5 && self::$bot['exp'] >= 12499) {
                        $cr = mysql_fetch_array(mysql_query('SELECT `id` FROM `items_users` WHERE `item_id` = "1204" AND `uid` = "' . self::$bot['id'] . '" AND `delete` = "0" LIMIT 1'));
                        if (!isset($cr['id'])) {
                            //Покупаем кристалл
                            \User\ItemsModel::addItem(1204, self::$bot['id']);
                        }
                    }
                    //Переходим в комнату для сражений
                    self::_loc(self::_loc_zv());
                }
            }

            //Если бот уже набрал опыт для перехода на 6-ой
            if (self::$bot['level'] == 5 && self::$bot['exp'] >= 12499) {
                $cr = mysql_fetch_array(mysql_query('SELECT `id` FROM `items_users` WHERE `item_id` = "1204" AND `uid` = "' . self::$bot['id'] . '" AND `delete` = "0" LIMIT 1'));
                if (!isset($cr['id'])) {
                    self::update('a1', 10);
                }
            }

            //Похоже что боту пора сменить комплект ))
            if (self::$bot['clss'] == 0) {

                //Выбираем новый класс и шмотки :)

                //Меняем класс
                self::$bot['clss'] = rand(1, 4);

                $x = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `a_bot_tree` WHERE `level` = "' . (self::$bot['level']) . '" '));

                if ($x[0] > 0) {

                    if ($x[0] > 1) {

                        $x = rand(1, $x[0]);
                        //выбираем 1 из нескольких
                        $da = ['ASC', 'DESC', 'DESC', 'ASC'];
                        $da = $da[rand(0, 5)];
                        $com = mysql_fetch_array(mysql_query('SELECT * FROM `a_bot_tree` WHERE `level` = "' . (self::$bot['level']) . '" ORDER BY `id` ' . $da . ' LIMIT ' . ($x - 1) . ',1'));
                    } else {
                        $com = mysql_fetch_array(mysql_query('SELECT * FROM `a_bot_tree` WHERE `level` = "' . (self::$bot['level']) . '" LIMIT 1'));
                    }

                    if (!isset($com['id'])) {

                        $com = mysql_fetch_array(mysql_query('SELECT * FROM `a_bot_tree` WHERE `level` < "' . (self::$bot['level']) . '" ORDER BY `id` DESC LIMIT 1'));

                    }

                    if (isset($com['id'])) {

                        mysql_query('UPDATE `users` SET `clss` = "' . self::$bot['clss'] . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');

                        /* Забираем старые шмотки и эффекты */
                        mysql_query('UPDATE `items_users` SET `delete` = "' . time() . '" WHERE `gift` = "" AND `item_id` != "1204" AND `uid` = "' . self::$bot['id'] . '" AND `delete` = "0"');
                        mysql_query('UPDATE `items_users` SET `iznosNOW` = "0" WHERE `uid` = "' . self::$bot['id'] . '" AND `delete` = "0"');
                        mysql_query('UPDATE `eff_users` SET `delete` = "' . time() . '" WHERE `uid` = "' . self::$bot['id'] . '" AND `delete` = "0"');

                        /* Обновляем статы и приемы */

                        if ($com['pr'] == '') {
                            $i = 1;
                            while ($i <= 18) {
                                $com['pr'] .= $com['p' . $i] . '|';
                                $i++;
                            }
                            $com['pr'] .= '0';
                        }

                        mysql_query('UPDATE `stats` SET `stats` = "' . $com['stats'] . '",`priems` = "' . $com['pr'] . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');

                        $i = 1;
                        while ($i <= 20) {
                            if ($com['e' . $i] > 0) {
                                //Выдаем и надеваем предмет
                                //$it = \User\ItemsModel::addItem($com['e'.$i],self::$bot['id']);
                                $eff = mysql_fetch_array(mysql_query('SELECT * FROM `eff_main` WHERE `id2` = "' . $com['e' . $i] . '" LIMIT 1'));
                                mysql_query('INSERT INTO `eff_users` (`overType`,`id_eff`,`uid`,`name`,`timeUse`,`data`,`no_Ace`) VALUES ("' . $eff['oneType'] . '","' . $eff['id2'] . '","' . self::$bot['id'] . '","' . $eff['mname'] . '","' . (time() + 9640000) . '","' . $eff['mdata'] . '","' . $eff['noAce'] . '")');
                            }
                            $i++;
                        }

                        $i = 1;
                        while ($i <= 20) {
                            if ($com['w' . $i] > 0) {
                                //Выдаем и надеваем предмет
                                $it = \User\ItemsModel::addItem($com['w' . $i], self::$bot['id']);
                                $eff1 = mysql_fetch_array(mysql_query('SELECT * FROM `items_shop` WHERE `item_id` = "' . $com['w' . $i] . '" LIMIT 1'));
                                if ($it > 0) {
                                    mysql_query('UPDATE `items_users` SET `inOdet` = "' . $i . '",`delete` = "0", `1price` = "' . $eff1['price_1'] . '" WHERE `uid` = "' . self::$bot['id'] . '" AND `id` = "' . $it . '" LIMIT 1');
                                }
                            }
                            $i++;
                        }
                    }
                }
            }

            //если бот уже 1-ый уровень, а сидит в новичках :) кидаем его в залы
            if (self::$bot['city'] == 'capitalcity' && self::$bot['level'] < 2 && self::$bot['room'] == 0 && self::$bot['a1'] == 0) {
                self::_loc(self::_loc_zv());
            }
        }
    }

    public $bot_last_action = [];

    //Включаем логику бота
    static function start($id)
    {
        if (!isset($bot_last_action[$id])) {
            global $u;
            $bot_last_action[$id]++;
            self::$bot = mysql_fetch_array(mysql_query('SELECT `u`.*,`st`.* FROM `users` AS `u` LEFT JOIN `stats` AS `st` ON `st`.`id` = `u`.`id` WHERE `u`.`id` = "' . mysql_real_escape_string($id) . '" AND `u`.`banned` = "0" LIMIT 1'));

            if (isset(self::$bot['id'])) {

                self::$st = $u->getStats(self::$bot, 0);

                //Заходим ботом в онлайн
                self::_online();

                if (self::$bot['battle'] > 0) {

                    //Действия бота в поединке
                    self::$btl = mysql_fetch_array(mysql_query('SELECT * FROM `battle` WHERE `id` = "' . mysql_real_escape_string(self::$bot['battle']) . '" AND `team_win` = "-1" LIMIT 1'));
                    if (isset(self::$btl['id'])) {

                        $go_bot = false;
                        $go_txt = '';

                        $a1 = mysql_fetch_array(mysql_query('SELECT `id`,`uid1`,`uid2`,`time` FROM `battle_act` WHERE `battle` = "' . self::$btl['id'] . '" AND `uid1` = "' . self::$bot['id'] . '" ORDER BY `time` ASC LIMIT 1'));

                        //Проверяем возможность использования приемов и делаем список что использовать
                        //используем приемы
                        self::battle_priems();

                        //Бот сделал удар, но никто не ответил, проверяем таймаут и если что заходим
                        if (isset($a1['id']) && $a1['time'] + self::$btl['timeout'] < time()) {
                            $go_bot = true;
                        }

                        //ТУТ test
                        $a2 = mysql_fetch_array(mysql_query('SELECT `id`,`uid1`,`uid2`,`time` FROM `battle_act` WHERE `battle` = "' . self::$btl['id'] . '" AND `uid2` = "' . self::$bot['id'] . '" ORDER BY `time` ASC LIMIT 1'));
                        if (isset($a2['uid1'])) {
                            mysql_query('UPDATE `stats` SET `enemy` = "' . $a2['uid1'] . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
                        }
                        $a3 = mysql_fetch_array(mysql_query('SELECT `id`,`uid1`,`uid2`,`time` FROM `battle_act` WHERE `battle` = "' . self::$btl['id'] . '" AND `uid2` = "' . self::$bot['id'] . '" ORDER BY `time` ASC LIMIT 1'));
                        if (isset($a3['uid2'])) {
                            mysql_query('UPDATE `stats` SET `enemy` = "' . $a3['uid2'] . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
                        }
                        //Размен с противником


                        self::$enemy = mysql_fetch_array(mysql_query('SELECT * FROM `stats` WHERE `id` = "' . self::$bot['enemy'] . '" LIMIT 1'));

                    } else {

                        //Заходим на персонажа
                        self::inuser_go_btl(self::$bot);

                        //Поединок уже завершился, выкидываем из боя
                        self::$bot['battle'] = 0;
                        mysql_query('UPDATE `users` SET `battle` = "' . self::$bot['battle'] . '" WHERE `id` = "' . mysql_real_escape_string(self::$bot['id']) . '" LIMIT 1 ');
                    }

                } else {

                    //Действия бота вне поединка
                    if (self::$bot['timeMain'] < time()) {

                        mysql_query('UPDATE `chat` SET `time` = "' . time() . '" WHERE `to` = "' . self::$bot['login'] . '" AND `time` = "-1"');

                        //Действие возможно произвести
                        if (self::$bot['ipreg'] == 1 || self::$bot['ipreg'] == 2 || self::$bot['ipreg'] == 4) {
                            //Принимаем только хаоты
                            self::$bot['ipreg'] = 3;
                        }
                        if (self::$bot['ipreg'] == 5) {
                            //Подаем только хаоты
                            self::$bot['ipreg'] = 7;
                        }
                        //
                        if (self::$bot['ipreg'] == 0 || !self::test_fr(self::$bot['room'])) {

                            //Обновляем эффекты
                            $com = mysql_fetch_array(mysql_query('SELECT * FROM `a_bot_tree` WHERE `level` = "' . (self::$bot['level']) . '" LIMIT 1'));
                            if (isset($com['id'])) {
                                $eft = mysql_fetch_array(mysql_query('SELECT `id` FROM `eff_users` WHERE `uid` = "' . self::$bot['id'] . '" AND `delete` = "0" LIMIT 1'));
                                if (!isset($eft['id'])) {
                                    mysql_query('UPDATE `eff_users` SET `delete` = "' . time() . '" WHERE `uid` = "' . self::$bot['id'] . '" AND `delete` = "0"');
                                    $i = 1;
                                    while ($i <= 20) {
                                        if ($com['e' . $i] > 0) {
                                            //Выдаем и надеваем предмет
                                            //$it = \User\ItemsModel::addItem($com['e'.$i],self::$bot['id']);
                                            $eff = mysql_fetch_array(mysql_query('SELECT * FROM `eff_main` WHERE `id2` = "' . $com['e' . $i] . '" LIMIT 1'));
                                            mysql_query('INSERT INTO `eff_users` (`overType`,`id_eff`,`uid`,`name`,`timeUse`,`data`,`no_Ace`) VALUES ("' . $eff['oneType'] . '","' . $eff['id2'] . '","' . self::$bot['id'] . '","' . $eff['mname'] . '","' . (time() + 86400 * 7) . '","' . $eff['mdata'] . '","' . $eff['noAce'] . '")');
                                        }
                                        $i++;
                                    }
                                }
                            }

                            if (self::$bot['level'] >= 13 && self::$bot['clan'] == 0 && self::$bot['align'] == 0) {
                                //обнуляем бота
                                self::clear_bot();
                            }

                            //Только-что из поединка, хиляется
                            if (!self::test_fr(self::$bot['room'])) {

                                //В какой-то локации, видимо что-то делаем

                            } elseif (self::$st['hpNow'] >= self::$st['hpAll']) {
                                echo 1;
                                //Приступаем к активной деятельности :)
                                mysql_query('UPDATE `stats` SET `zv`= "0",`team`= "0",`hpNow` = "' . self::$st['hpNow'] . '",`mpNow` = "' . self::$st['mpNow'] . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
                                mysql_query('UPDATE `users` SET `ipreg` = "' . self::new_action() . '",`mod_zvanie` = "Стажер" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');

                            } else {

                                if (self::$bot['mod_zvanie'] == 'Стажер100500') {
                                    //Надеваем комплект + обновляем эффекты
                                    mysql_query('UPDATE `eff_users` SET `timeUse` = "' . (time() + 7200) . '" WHERE `uid` = "' . self::$bot['id'] . '" AND `delete` = "0" AND `v1` != "priem" LIMIT 12');
                                    mysql_query('UPDATE `items_users` SET `inOdet` = "0" WHERE `uid` = "' . self::$bot['id'] . '" AND `inOdet` > 0 AND `delete` = "0"');
                                    $sp = mysql_query('SELECT `u`.`id`,`st`.`inslot`,`st`.`2too` FROM `items_users` AS `u` LEFT JOIN `items_main` AS `st` ON `st`.`id` = `u`.`item_id` WHERE `u`.`inOdet` = 0 AND `st`.`inslot` > 0 AND `st`.`inSlot` <= 20');
                                    $in = [];
                                    while ($pl = mysql_fetch_array($sp)) {
                                        $od = $pl['inslot'];

                                        if ($od == 10 && $in[10] > 0) {
                                            if ($in[11] > 0) {
                                                if ($in[12] == 0) {
                                                    $od = 12;
                                                }
                                            } else {
                                                $od = 11;
                                            }
                                        }

                                        if ($od == 3 && $in[3] > 0 && $pl['2too'] > 0) {
                                            if ($in[14] > 0) {
                                                mysql_query('UPDATE `items_users` SET `inOdet` = "0" WHERE `uid` = "' . self::$bot['id'] . '" AND `inOdet` = "14" AND `delete` = "0" LIMIT 1');
                                                $in[14] = 0;
                                            }
                                            $od = 14;
                                        }

                                        if ($in[$od] == 0) {
                                            $in[$od] = $pl['id'];
                                            mysql_query('UPDATE `items_users` SET `inOdet` = "' . $od . '" WHERE `id` = "' . $pl['id'] . '" AND `uid` = "' . self::$bot['id'] . '" LIMIT 1');
                                        }
                                    }
                                    mysql_query('UPDATE `items_users` SET `mod_zvanie` = "Cтaжер" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
                                }

                                //Хиляемся дальше
                                if (self::$bot['regHP'] == 0 || self::$bot['regMP'] == 0) {
                                    mysql_query('UPDATE `stats` SET `regHP` = "' . time() . '", `regMP` = "' . time() . '",`hpNow` = "' . self::$st['hpNow'] . '",`mpNow` = "' . self::$st['mpNow'] . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
                                }

                                $reg = $u->regen(self::$bot['id'], self::$st, 0);
                            }

                            self::actions();

                            self::update('timeMain', self::rnd());

                        } elseif (self::$bot['ipreg'] == 1) {

                            //Принять заявку на бой (физ.)
                            if (self::$bot['zv'] == 0) {

                                //Выделяем подходящую заявку в физ. поединке
                                $rz = 2;
                                $zv = 0;
                                $nozv = 0;

                                if (self::$bot['level'] == 0) {
                                    $rz = 1;
                                }

                                $zv = mysql_fetch_array(mysql_query('SELECT * FROM `zayvki` WHERE `city` = "' . self::$bot['city'] . '" AND `otk` < "' . rand(2, 6) . '" AND `time` < "' . (time() - rand(15, 25)) . '" AND `bcs` < "' . time() . '" AND `start` = "0" AND `razdel` = "' . $rz . '" AND `cancel` = "0" AND `time` > "' . (time() - 1111) . '" AND `money3` = 0 ORDER BY `time` DESC  LIMIT 1'));

                                if (isset($zv['id'])) {

                                    $uz1 = mysql_fetch_array(mysql_query('SELECT `u`.`sex`,`u`.`id`,`u`.`login`,`u`.`align`,`u`.`clan`,`u`.`admin`,`u`.`city`,`u`.`room`,`u`.`online`,`u`.`level`,`u`.`battle`,`u`.`money`,`st`.* FROM `stats` AS `st` LEFT JOIN `users` AS `u` ON (`st`.`id` = `u`.`id`) WHERE `st`.`zv`="' . $zv['id'] . '" AND `st`.`team`="1" LIMIT 1'));
                                    $uz2 = mysql_fetch_array(mysql_query('SELECT `u`.`sex`,`u`.`id`,`u`.`login`,`u`.`align`,`u`.`clan`,`u`.`admin`,`u`.`city`,`u`.`room`,`u`.`online`,`u`.`level`,`u`.`battle`,`u`.`money`,`st`.* FROM `stats` AS `st` LEFT JOIN `users` AS `u` ON (`st`.`id` = `u`.`id`) WHERE `st`.`zv`="' . $zv['id'] . '" AND `st`.`team`="2" LIMIT 1'));

                                    if (isset($uz1['id']) && !isset($uz2['id'])) {

                                        $uz1st = $u->getStats($uz1, 0);

                                        if ($uz1st['reting'] <= floor(self::$st['reting'] * 1.27)) {

                                            //Принимаем заявку
                                            $sa = '';
                                            if (self::$bot['sex'] == 2) {
                                                $sa = 'а';
                                            }

                                            $text = ' [login:' . self::$bot['login'] . '] принял' . $sa . ' вашу заявку на бой.[reflesh_main_zv_priem:' . self::$bot['id'] . ']';
                                            $chatMessageDto = new ChatMessage();
                                            $chatMessageDto->setCity($uz1['city']);
                                            $chatMessageDto->setTo($uz1['login']);
                                            $chatMessageDto->setText($text);
                                            $chatMessageDto->setType(6);
                                            $chat = new Chat();
                                            $chat->sendMsg($chatMessageDto);

                                            mysql_query('UPDATE `stats` SET `zv` = "' . $zv['id'] . '",`team` = "2" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
                                            mysql_query('UPDATE `users` SET `ipreg` = "8",`timeMain` = "' . self::rnd() . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');

                                        } else {
                                            $nozv = 1;
                                        }

                                        unset ($uz1st);

                                    } else {
                                        $nozv = 1;
                                    }
                                } else {
                                    $nozv = 1;
                                }

                                if ($nozv == 1 && self::$bot['timeMain'] < time() - rand(1, 3) * 60) {
                                    mysql_query('UPDATE `users` SET `ipreg` = "0",`timeMain` = "' . self::rnd() . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
                                }

                                unset($rz);
                            }


                        } elseif (self::$bot['ipreg'] == 2) {

                            //Принять заявку на бой (груп.)
                            self::bot_group_haot_zv(6);
                        } elseif (self::$bot['ipreg'] == 3) {

                            //Принять заявку на бой (хаот.)
                            self::bot_group_haot_zv(7);
                        } elseif (self::$bot['ipreg'] == 4) {

                            //Принять заявку на бой (турнир.)
                            self::e('' . self::$bot['login'] . ', я хочу принять турнир...');
                        } elseif (self::$bot['ipreg'] == 5) {

                            //Подать заявку (физ.)
                            if (self::$bot['zv'] == 0) {

                                $rz = 2;
                                if (self::$bot['level'] == 0) {
                                    $rz = 1;
                                }

                                $ins = mysql_query('INSERT INTO `zayvki` (`bot1`,`bot2`,`time`,`city`,`creator`,`type`,`time_start`,`timeout`,`min_lvl_1`,`min_lvl_2`,`max_lvl_1`,`max_lvl_2`,`tm1max`,`tm2max`,`travmaChance`,`invise`,`razdel`,`comment`,`money`,`withUser`,`tm1`,`tm2`) VALUES (
																		"0",
																		"0",
																		"' . time() . '",
																		"' . self::$bot['city'] . '",
																		"' . self::$bot['id'] . '",
																		"0",
																		"0",
																		"300",
																		"0",
																		"21",															
																		"0",
																		"21",
																		"1",
																		"1",
																		"0",
																		"0",
																		"' . $rz . '",
																		"",
																		"",
																		"","' . (0 + self::$bot['reting']) . '","0")');
                                $zid = mysql_insert_id();
                                mysql_query('UPDATE `stats` SET `zv` = "' . $zid . '", `team` = "1" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
                                mysql_query('UPDATE `users` SET `ipreg` = "8",`timeMain` = "' . self::rnd() . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
                            }

                        } elseif (self::$bot['ipreg'] == 6 || self::$bot['ipreg'] == 7) {

                            self::bot_group_haot_zv(self::$bot['ipreg']);

                            if (self::$bot['zv'] == 0) {

                                $rz = 5;

                                $zv_c = [

                                    'time_start' => (60 * 5), 'tm1' => rand(2, 6), 'tm2' => rand(2, 6), 'l1min' => 0, 'l1max' => 21, 'l2min' => 0, 'l2max' => 21, 'timeout' => (60 * rand(1, 3)),

                                ];

                                if (self::$bot['ipreg'] == 7) {
                                    $zv_c['tm1'] = 99;
                                }

                                $zv_c['tm2'] = $zv_c['tm1'];
                                $zv_c['l1min'] = self::$bot['level'];
                                $zv_c['l1max'] = self::$bot['level'];

                                if ($zv_c['l1min'] < 2) {
                                    $zv_c['l1min'] = 2;
                                }
                                if ($zv_c['l1max'] > 21) {
                                    $zv_c['l1max'] = 21;
                                }

                                $zv_c['l2min'] = $zv_c['l1min'];
                                $zv_c['l2max'] = $zv_c['l1max'];

                            }

                        } elseif (self::$bot['ipreg'] == 8) {

                            //Ожидание начала поединка
                            if (self::$bot['zv'] == 0) {

                                //Поединок не удалось начать
                                mysql_query('UPDATE `users` SET `ipreg` = "0",`timeMain` = "' . self::rnd() . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
                            } else {
                                $zv = mysql_fetch_array(mysql_query('SELECT * FROM `zayvki` WHERE `id` = "' . self::$bot['zv'] . '" AND `cancel` = "0" AND `start` = "0" LIMIT 1'));

                                if (!isset($zv['id'])) {

                                    //Обнуляем действия
                                    mysql_query('UPDATE `users` SET `ipreg` = "0",`timeMain` = "' . self::rnd() . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');

                                } elseif ($zv['razdel'] == 4 || $zv['razdel'] == 5) {

                                    //хаот или группа
                                    if ($zv['time_start'] + $zv['time'] <= time()) {

                                        self::inuser_go_zv(self::$bot);
                                    }

                                } else {
                                    //физ
                                    if ($zv['creator'] == self::$bot['id']) {

                                        $uz2 = mysql_fetch_array(mysql_query('SELECT `u`.`sex`,`u`.`id`,`u`.`login`,`u`.`align`,`u`.`clan`,`u`.`admin`,`u`.`city`,`u`.`room`,`u`.`online`,`u`.`level`,`u`.`battle`,`u`.`money`,`st`.* FROM `stats` AS `st` LEFT JOIN `users` AS `u` ON (`st`.`id` = `u`.`id`) WHERE `st`.`zv`="' . $zv['id'] . '" AND `st`.`team`="2" LIMIT 1'));
                                        if (isset($uz2['id'])) {
                                            //Заявку кто-то принял, реагируем! :)
                                            $pr = -1;

                                            $uz2st = $u->getStats($uz2, 0);

                                            //btl-cof
                                            if ($uz2st['reting'] > floor(self::$st['reting'] * 1.27)) {

                                                //Отказываем, в 95% случаев, противник слишком силен
                                                if (rand(0, 100) > 95) {
                                                    //отправляем бота на избиение :D
                                                    $pr = 1;
                                                } else {
                                                    //отказ
                                                    $pr = 0;
                                                }

                                            } else {
                                                $pr = 1;
                                            }

                                            //Можно принять заявку
                                            //$pr = 0;

                                            if ($pr == 1) {

                                                //Прием заявки
                                                //создаем поединок с ботом
                                                $expB = 0;
                                                $btl = ['players' => '', 'timeout' => $zv['timeout'], 'type' => $zv['type'], 'invis' => $zv['invis'], 'noinc' => 0, 'travmChance' => 0, 'typeBattle' => 0, 'addExp' => $expB, 'money' => 0];
                                                $ins = mysql_query('INSERT INTO `battle` (`time_over`,`city`,`time_start`,`players`,`timeout`,`type`,`invis`,`noinc`,`travmChance`,`typeBattle`,`addExp`,`money`,`team_win`) VALUES (
																					"0",
																					"' . self::$bot['city'] . '",
																					"' . time() . '",
																					"' . $btl['players'] . '",
																					"' . $btl['timeout'] . '",
																					"' . $btl['type'] . '",
																					"' . $btl['invis'] . '",
																					"' . $btl['noinc'] . '",
																					"' . $btl['travmChance'] . '",
																					"' . $btl['typeBattle'] . '",
																					"' . $btl['addExp'] . '",
																					"' . $btl['money'] . '",
																					"-1")');
                                                if ($ins) {
                                                    $btl_id = mysql_insert_id();
                                                    //обновляем данные о поединке
                                                    mysql_query('UPDATE `users` SET `battle`="' . $btl_id . '" WHERE `id` = "' . $uz2['id'] . '" LIMIT 1');
                                                    mysql_query('UPDATE `users` SET `battle`="' . $btl_id . '",`ipreg` = "0" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
                                                    mysql_query('UPDATE `stats` SET `zv` = "0",`team`="1" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
                                                    mysql_query('UPDATE `stats` SET `zv` = "0",`team`="2" WHERE `id` = "' . $uz2['id'] . '" LIMIT 1');

                                                    //Если бой кулачный, то снимаем вещи
                                                    if ($btl['type'] == 1) {
                                                        mysql_query('UPDATE `items_users` SET `inOdet`="0" WHERE `uid` = "' . self::$bot['id'] . '" AND `inOdet`!=0');
                                                        mysql_query('UPDATE `items_users` SET `inOdet`="0" WHERE `uid` = "' . $uz2['id'] . '" AND `inOdet`!=0');
                                                    }

                                                    mysql_query('UPDATE `zayvki` SET `start` = "' . time() . '",`btl_id` = "' . $btl_id . '" WHERE `id` = "' . $zv['id'] . '" LIMIT 1');

                                                    //обновляем заявку, что бой начался
                                                    self::$bot['battle'] = $btl_id;

                                                    //Отправляем сообщение в чат всем бойцам
                                                    $chatDto = new ChatMessage();
                                                    $chatDto->setCity($u->info['city']);
                                                    $chatDto->setRoom($u->info['room']);
                                                    $chatDto->setTo($uz2['login']);
                                                    $chatDto->setType(11);
                                                    $chatDto->setSound(117);
                                                    (new Chat())->sendMsg($chatDto);
                                                }

                                            } elseif ($pr == 0) {

                                                //Отказ
                                                $sa = '';
                                                if (self::$bot['sex'] == 2) {
                                                    $sa = 'а';
                                                }
                                                $text = ' [login:' . self::$bot['login'] . '] отказал' . $sa . ' вам в поединке.';
                                                $chatDto = new ChatMessage();
                                                $chatDto->setCity($uz2['city']);
                                                $chatDto->setTo($uz2['login']);
                                                $chatDto->setText($text);
                                                $chatDto->setType(6);
                                                (new Chat())->sendMsg($chatDto);

                                                mysql_query('UPDATE `stats` SET `zv` = "0",`team` = "1" WHERE `id` = "' . $uz2['id'] . '" LIMIT 1');
                                                mysql_query('UPDATE `zayvki` SET `otk` = ( `otk` + 1 ),`bcs` = "' . (time() + rand(30, rand(60, 180))) . '" WHERE `id` = "' . $zv['id'] . '" LIMIT 1');
                                            }

                                        } else {

                                            //Заявку никто не принял, возможно стоит отменить заявку вообще!
                                            if (self::$bot['timeMain'] < time() - 30 - rand((7 / $zv['otk']), (3 * 49 / $zv['otk']))) {

                                                mysql_query('UPDATE `stats` SET `zv` = "0" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
                                                mysql_query('UPDATE `users` SET `ipreg` = "0",`timeMain` = "' . self::rnd() . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
                                                mysql_query('UPDATE `zayvki` SET `cancel` = "' . time() . '"  WHERE `id` = "' . $zv['id'] . '" LIMIT 1');

                                            }

                                        }

                                    }

                                }

                                //Бот уже слишком долго ждет ответа игрока, отказываемся от заявки
                                if (self::$bot['timeMain'] < time() - rand((30 / $zv['otk']), (135 / $zv['otk'])) && $zv['creator'] != self::$bot['id'] && ($zv['razdel'] == 1 || $zv['razdel'] == 2)) {

                                    $uz1 = mysql_fetch_array(mysql_query('SELECT `u`.`sex`,`u`.`id`,`u`.`login`,`u`.`align`,`u`.`clan`,`u`.`admin`,`u`.`city`,`u`.`room`,`u`.`online`,`u`.`level`,`u`.`battle`,`u`.`money`,`st`.* FROM `stats` AS `st` LEFT JOIN `users` AS `u` ON (`st`.`id` = `u`.`id`) WHERE `st`.`zv`="' . $zv['id'] . '" AND `st`.`team`="1" LIMIT 1'));
                                    if (isset($uz1['id'])) {

                                        $sa = '';
                                        if (self::$bot['sex'] == 2) {
                                            $sa = 'а';
                                        }

                                        $text = ' [login:' . self::$bot['login'] . '] отозвал' . $sa . ' свой запрос на бой.';
                                        $chatDto = new ChatMessage();
                                        $chatDto->setCity($uz1['city']);
                                        $chatDto->setTo($uz1['login']);
                                        $chatDto->setText($text);
                                        $chatDto->setType(6);
                                        (new Chat())->sendMsg($chatDto);
                                    }

                                    mysql_query('UPDATE `zayvki` SET `otk` = ( `otk` + 1 ),`bcs` = "' . (time() + rand(30, rand(60, 180))) . '" WHERE `id` = "' . $zv['id'] . '" LIMIT 1');
                                    mysql_query('UPDATE `stats` SET `zv` = "0",`team` = "1" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
                                    mysql_query('UPDATE `users` SET `ipreg` = "1",`timeMain` = "' . self::rnd() . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
                                }

                            }

                        } else {
                            self::update('ipreg', 0);
                        }

                    }

                }

                return true;

            } else {

                return false;

            }
        }
    }

    static function team_zv_cf($zv, $tm)
    {
        $r = mysql_fetch_array(mysql_query('SELECT SUM(`btl_cof`) FROM `stats` WHERE `zv` = "' . $zv['id'] . '" AND `team` = "' . $tm . '" LIMIT 1'));
        return $r[0];
    }

    static function new_action()
    {

        $r = rand(1, 7);

        if (self::$bot['level'] < 2) {
            if ($r == 2 || $r == 3 || $r == 6 || $r == 7 || $r == 8) {
                if (rand(0, 1) == 1) {
                    $r = 1; //принимаем физ
                } elseif (rand(0, 1) == 0) {
                    $r = 4; //принимаем турнир
                } else {
                    $r = 5; //подаем физ
                }
            }
        } elseif (self::$bot['level'] == 0) {
            if (rand(0, 1) == 1) {
                $r = 1; //принимаем физ
            } else {
                $r = 5; //подаем физ
            }
        }

        if ($r == 4) {
            $r = 1;
        }

        return $r;

    }


    /*/
    Базовые функции обучения бота
    /*/
    //Бот ищет заявку в группы или хаот для своего уровня и подходящую ему
    static function bot_group_haot_zv($id)
    {
        $rz = 5;

        $sp = mysql_query('SELECT * FROM `zayvki` WHERE `razdel` = "' . $rz . '" AND `cancel` = "0" AND `start` = "0" AND `invise` = "0" AND `money3` = 0 AND (
				( `min_lvl_1` <= ' . self::$bot['level'] . ' AND  `max_lvl_1` >= ' . self::$bot['level'] . ' ) OR ( `min_lvl_2` <= ' . self::$bot['level'] . ' AND  `max_lvl_2` >= ' . self::$bot['level'] . ' )
			)');

        $pr = 0;

        while ($pl = mysql_fetch_array($sp)) {

            if ($pr == 0) {

                $go = 1;
                $tm = [0, 0, 0];

                if ($rz == 4) {

                    $tm1c = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `stats` WHERE `zv` = "' . $pl['id'] . '" AND `team` = "1" LIMIT 1'));
                    $tm2c = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `stats` WHERE `zv` = "' . $pl['id'] . '" AND `team` = "2" LIMIT 1'));

                    if ($tm1c[0] < $pl['tm1max'] && $pl['min_lvl_1'] <= self::$bot['level'] && $pl['max_lvl_1'] >= self::$bot['level']) {
                        $tm[1] = 1;
                    }

                    if ($tm2c[0] < $pl['tm2max'] && $pl['min_lvl_1'] <= self::$bot['level'] && $pl['max_lvl_1'] >= self::$bot['level']) {
                        $tm[2] = 1;
                    }

                    $atm = 1;
                    $tmr = 0;
                    if ($tm[1] == 1 && $tm[2] == 0) {
                        $tmr = 1;
                    } elseif ($tm[1] == 0 && $tm[2] == 1) {
                        $tmr = 2;
                    } else {
                        $tmr = rand(1, 2);
                    }

                    if ($tmr > 0) {
                        if ($tmr == 1) {
                            $atm = 2;
                        }


                        //Логика приема заявки
                        if ((self::team_zv_cf($pl, $atm) > (self::team_zv_cf($pl, $tmr) + self::$st['reting']) * 1.67 || ($zv['tm2max'] < $zv['tm1max'] / 2) || ($zv['tm1max'] < $zv['tm2max'] / 2)) && rand(0, 100) < 90) {
                            $go = 0;
                        }
                    }

                } elseif ($rz == 5) {


                    if ($pl['min_lvl_1'] == self::$bot['level'] && $pl['max_lvl_1'] == self::$bot['level']) {
                        $tm[1] = 1;
                    }
                    $col_p = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `stats` WHERE `zv` = "' . $pl['id'] . '"'));
                    $cols = $col_p[0];
                    if ($cols >= $pl['maxplayers']) {
                        $go = 0;
                    }

                }


                if ($go == 1 && ($tm[1] != 0 || $tm[2] != 0)) {

                    if ($tm[1] == 1 && $tm[2] == 0) {
                        $tm = 1;
                    } elseif ($tm[1] == 0 && $tm[2] == 1) {
                        $tm = 2;
                    } else {
                        $tm = rand(1, 2);
                    }

                    if ($rz == 5) {
                        $tm = 1;
                    }


                    if ($rz == 5) {
                        $tm = rand(1, 2);

                        if ($pl['invise'] == 0) {
                            $nxtID = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM `stats` WHERE `zv` = "' . $pl['id'] . '"'));
                            $nxtID = $nxtID[0];
                            self::$bot['login2'] = '';
                        } else {
                            self::$bot['login2'] = '';
                        }

                        $blnc = 100 * self::$bot['level'] + self::$st['reting'];

                        $pl['tm' . $tm] += $blnc;

                        mysql_query('UPDATE `zayvki` SET `tm1` = "' . $pl['tm1'] . '", `tm2` = "' . $pl['tm2'] . '" WHERE `id` = "' . $pl['id'] . '" LIMIT 1');

                    }

                    if ($tm > 0 || $rz == 5) {

                        //Принимаем участие в заявке
                        mysql_query('UPDATE `stats` SET `zv` = "' . $pl['id'] . '",`team` = "' . $tm . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
                        mysql_query('UPDATE `users` SET `login2` = "' . self::$bot['login2'] . '",`ipreg` = "8" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
                        self::$bot['zv'] = $pl['id'];
                        $pr = $pl['id'];

                    }

                } //if

            } // while

        }

    }

    //Добавляем нового бота
    static function createNewBot($login, $sex)
    {
        if ($sex != 1) {
            $sex = 0;
        } else {
            $se = 1;
        }

        $r = ['name' => '_', 'chatColor' => 'Black'];

        $ins = mysql_query("INSERT INTO `users` (`fnq`,`host_reg`,`room`,`login`,`pass`,`ipreg`,`ip`,`city`,`cityreg`,`name`,`sex`,`chatColor`,`timereg`) VALUES (
						'0',
						'real_bot_user',
						'0',
						'" . mysql_real_escape_string($login) . "',
						'" . md5('regnxt#$%^а0.' . time()) . "',
						'127.0.0.1',
						'127.0.0.1',
						'capitalcity',
						'capitalcity',
						'" . $r['name'] . "',
						'" . mysql_real_escape_string($sex) . "',
						'" . $r['chatColor'] . "',
						'" . time() . "')");
        if ($ins) {
            $uid = mysql_insert_id();
            mysql_query("INSERT INTO `online` (`uid`,`timeStart`) VALUES ('" . $uid . "','" . time() . "')");
            mysql_query("INSERT INTO `stats` (`id`,`stats`) VALUES ('" . $uid . "','s1=3|s2=3|s3=3|s4=3|rinv=40|m9=5|m6=10')");
            mysql_query("UPDATE `users` SET `online`='" . time() . "' WHERE `uid` = '" . $uid . "' LIMIT 1");
        }

    }

    //Бот находится в онлайне
    static function _online()
    {
        if (self::$bot['online'] < time() - 60) {
            //уровень/апп
            if (self::$bot['battle'] == 0 && self::$bot['zv'] == 0) {
                self::_level();
            }
            self::update('online', time());

        }
    }

    //Бот меняет локацию
    static function _loc_A($a, $b)
    {
        return $b;
    }

    static function _loc_zv()
    {

        if (rand(0, 100) < 5) {
            $r = 1;
        } else {
            $r = rand(1, 4);
        }

        //будуар
        if ($r == 4 && self::$bot['sex'] != 1) {
            $r = rand(1, 3);
        }

        if (self::$bot['city'] == 'capitalcity') {
            if ($r == 4) {
                //будуар
                $r = 7;
            } elseif ($r == 3) {
                //ЗВ 3
                $r = 5;
            } elseif ($r == 2) {
                //ЗВ 2
                $r = 2;
            } else {
                //ЗВ 1
                $r = 4;
            }

            if (self::$bot['level'] == 0) {
                //Новички
                $r = 0;
            }

        }

        return $r;
    }

    static function _loc($id)
    {

        if ($id == self::$bot['room']) {
            //ничего, уже пришли
            self::update('a1', 0);

        } else {

            //Прокладываем маршрут из текущей комнаты
            $rid_next = self::_loc_A(self::$bot['room'], $id);
            if ($rid_next > 0) {
                //Идем туда
                //$rid_next = 377;
                mysql_query('UPDATE `users` SET `room` = "' . $rid_next . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
                return true;
            } else {
                //Невозможно дойти туда
                return false;
            }

        }

    }

    //Бот получил уровень, либо апп
    static function _level()
    {
        global $u;
        $lvl = mysql_fetch_array(mysql_query('SELECT `upLevel`,`nextLevel`,`exp`,`money`,`money_bonus1`,`money_bonus2`,`ability`,`skills`,`nskills`,`sskills`,`expBtlMax`,`hpRegen`,`mpRegen`,`money2` FROM `levels` WHERE `upLevel`="' . (self::$bot['upLevel'] + 1) . '" LIMIT 1'));
        if (isset($lvl['upLevel'])) {

            if (self::$bot['level'] <= 5 && self::$bot['exp'] >= 12499) {
                $cr = mysql_fetch_array(mysql_query('SELECT `id` FROM `items_users` WHERE `item_id` = "1204" AND `uid` = "' . self::$bot['id'] . '" AND `delete` = "0" LIMIT 1'));
                if (!isset($cr['id'])) {
                    \User\ItemsModel::addItem(1204, self::$bot['id']);
                    self::$bot['exp'] = 12500;
                }
            }
            if ($lvl['exp'] <= self::$bot['exp']) {
                self::inuser_go_main(self::$bot);
                mysql_query('UPDATE `users` SET `clss` = "0" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');

            }

        } else {
            self::e(self::$bot['login']);
        }

    }

    //Вспомогательные функции
    static function e($t)
    {
        (new Chat())->debug($t, true);
    }

    static function rnd()
    {
        return time() + rand(3, 14) + rand(0, 14) + rand(7, 21);
    }

    static function update($n, $v, $t = 'users')
    {
        self::$bot[$n] = $v;
        mysql_query('UPDATE `' . $t . '` SET `' . $n . '` = "' . self::$bot[$n] . '"  WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
    }

}