1089 lines
51 KiB
PHP
1089 lines
51 KiB
PHP
<?php
|
||
|
||
use Core\Db;
|
||
use User\ItemsModel;
|
||
|
||
class BotLogic
|
||
{
|
||
|
||
public static array $bot = [];
|
||
public static array $st = [];
|
||
private static array $btl = [];
|
||
private static array $enemy = [];
|
||
private static array $pr = [];
|
||
|
||
public 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>';
|
||
|
||
}
|
||
}
|
||
|
||
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;
|
||
}
|
||
|
||
}
|