['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 . ']
'; } } private static function useBattlePriems(): void { //используем приемы в бою if (self::$st['hpNow'] <= 0 || self::$bot['battle'] <= 0) { return; } $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 = []; } /** Удаление данных бота из БД. * @return void */ private static function clearBot(): void { //Удаляем сообщения в чате Db::sql('delete from chat where `to` = ?', [self::$bot['login']]); //Удаляем шмотки и эффекты Db::sql('delete from items_users where uid = ?', [self::$bot['login']]); Db::sql('delete from eff_users where uid = ?', [self::$bot['login']]); //Удаляем статы и поле в юзерс Db::sql('delete from users where id = ?', [self::$bot['login']]); Db::sql('delete from stats where id = ?', [self::$bot['login']]); Db::sql('delete from online where uid = ?', [self::$bot['login']]); Db::sql('delete from actions where uid = ?', [self::$bot['login']]); } //Действия бота вне боя 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 (!in_array(self::$bot['room'], [0, 2, 4, 5, 7, 377])) { 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'])) { //Покупаем кристалл 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 = 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()); } } } private static bool $botInit = false; //Включаем логику бота static function start($id): bool { if (!self::$botInit) { return self::$botInit; } global $u; self::$bot = $u::getInfo($id); if (!isset(self::$bot['id'])) { return self::$botInit; } self::$botInit = true; 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::useBattlePriems(); //Бот сделал удар, но никто не ответил, проверяем таймаут и если что заходим 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 || !in_array(self::$bot['room'], [0, 2, 4, 5, 7, 377])) { //Обновляем эффекты $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::clearBot(); } //Только-что из поединка, хиляется if (!in_array(self::$bot['room'], [0, 2, 4, 5, 7, 377])) { //В какой-то локации, видимо что-то делаем } 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()) { file_get_contents( '/main_bot.php?zayvka=1&r=4&uid=' . self::$bot['id'] . '&cron_core=' . md5(self::$bot['id'] . '_brfCOreW@!_' . self::$bot['pass']) . '&pass=' . self::$bot['pass'] . '&', false, stream_context_create(['https' => ['timeout' => 1]]) ); } } 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; } 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(): void { if (self::$bot['online'] >= time() - 60) { return; } //уровень/апп if (self::$bot['battle'] == 0 && self::$bot['zv'] == 0) { self::levelUp(); } 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; } } } /** Бот получил уровень, либо ап * @return void */ private static function levelUp(): void { $lvl = Db::getRow('select exp, upLevel from levels where upLevel = ?', [self::$bot['upLevel'] + 1]); if (isset($lvl['upLevel'])) { if ( self::$bot['level'] <= 5 && self::$bot['exp'] >= 12499 && Db::getValue('select count(id) from items_users where item_id = 1204 and uid = ?', [self::$bot['id']]) === 0 ) { ItemsModel::addItem(1204, self::$bot['id']); self::$bot['exp'] = 12500; } if ($lvl['exp'] <= self::$bot['exp']) { file_get_contents( '/main_bot.php?uid=' . self::$bot['id'] . '&cron_core=' . md5(self::$bot['id'] . '_brfCOreW@!_' . self::$bot['pass']) . '&pass=' . self::$bot['pass'] . '&', false, stream_context_create(['https' => ['timeout' => 1]]) ); Db::sql('update users set clss = 0 where id = ?', [self::$bot['id']]); } } else { self::e(self::$bot['login']); } } //Вспомогательные функции static function e($t): void { (new Chat())->debug($t, true); } static function rnd() { return time() + rand(3, 14) + rand(0, 14) + rand(7, 21); } private static function update($n, $v, $t = 'users'): void { Db::sql("update users set $n = ? where id = ?", [$v, self::$bot['id']]); self::$bot[$n] = $v; } }