game/_incl_data/class/BotLogic.php

1044 lines
51 KiB
PHP
Raw Normal View History

<?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()
{
2023-01-10 16:29:32 +00:00
//используем приемы в бою
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) {
2023-01-10 16:29:32 +00:00
//Можно использовать прием, подключаем логику
BotPriemLogic::start($i, $pr[$i]);
}
$i++;
}
self::$pr = false;
}
}
static function clear_bot()
{
2023-01-10 16:29:32 +00:00
//Очистка бота, обнуляем его до [0], удаляем эффекты, предметы и т.д, а текущему ставим логин delete
2023-01-10 16:29:32 +00:00
//Удаляем сообщения в чате
mysql_query('DELETE FROM `chat` WHERE `to` = "' . self::$bot['login'] . '"');
2023-01-10 16:29:32 +00:00
//Удаляем шмотки и эффекты
mysql_query('DELETE FROM `items_users` WHERE `uid` = "' . self::$bot['id'] . '"');
mysql_query('DELETE FROM `eff_users` WHERE `uid` = "' . self::$bot['id'] . '"');
2023-01-10 16:29:32 +00:00
//Удаляем статы и поле в юзерс
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);
}
}
2023-01-10 16:29:32 +00:00
//ПРоверка на файтрум
static function test_fr($id, $city = 'capitalcity')
{
return $city != 'capitalcity' || $id == 0 || $id == 2 || $id == 4 || $id == 5 || $id == 7 || $id == 377;
}
2023-01-10 16:29:32 +00:00
//Действия бота вне боя
static function actions()
{
global $u;
if (self::$bot['battle'] == 0 && self::$bot['zv'] == 0 && self::$bot['pass'] == 'saintlucia') {
2023-01-10 16:29:32 +00:00
//Можно: сменить фулл, перейти в другую комнату, входить наймом, делать бафы
2023-01-10 16:29:32 +00:00
//Переходим в другую комнату
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');
}
2023-01-10 16:29:32 +00:00
//Действие в комнате
//Магазин
//Покупаем кристалл вечности
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'])) {
2023-01-10 16:29:32 +00:00
//Покупаем кристалл
$u->addItem(1204, self::$bot['id']);
}
}
2023-01-10 16:29:32 +00:00
//Переходим в комнату для сражений
self::_loc(self::_loc_zv());
}
}
2023-01-10 16:29:32 +00:00
//Если бот уже набрал опыт для перехода на 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);
}
}
2023-01-10 16:29:32 +00:00
//Похоже что боту пора сменить комплект ))
if (self::$bot['clss'] == 0) {
2023-01-10 16:29:32 +00:00
//Выбираем новый класс и шмотки :)
2023-01-10 16:29:32 +00:00
//Меняем класс
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]);
2023-01-10 16:29:32 +00:00
//выбираем 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');
2023-01-10 16:29:32 +00:00
/* Забираем старые шмотки и эффекты */
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"');
2023-01-10 16:29:32 +00:00
/* Обновляем статы и приемы */
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) {
2023-01-10 16:29:32 +00:00
//Выдаем и надеваем предмет
//$it = $u->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) {
2023-01-10 16:29:32 +00:00
//Выдаем и надеваем предмет
$it = $u->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++;
}
}
}
}
2023-01-10 16:29:32 +00:00
//если бот уже 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 = [];
2023-01-10 16:29:32 +00:00
//Включаем логику бота
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);
2023-01-10 16:29:32 +00:00
//Заходим ботом в онлайн
self::_online();
if (self::$bot['battle'] > 0) {
2023-01-10 16:29:32 +00:00
//Действия бота в поединке
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'));
2023-01-10 16:29:32 +00:00
//Проверяем возможность использования приемов и делаем список что использовать
//используем приемы
self::battle_priems();
2023-01-10 16:29:32 +00:00
//Бот сделал удар, но никто не ответил, проверяем таймаут и если что заходим
if (isset($a1['id']) && $a1['time'] + self::$btl['timeout'] < time()) {
$go_bot = true;
}
2023-01-10 16:29:32 +00:00
//ТУТ 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');
}
2023-01-10 16:29:32 +00:00
//Размен с противником
self::$enemy = mysql_fetch_array(mysql_query('SELECT * FROM `stats` WHERE `id` = "' . self::$bot['enemy'] . '" LIMIT 1'));
} else {
2023-01-10 16:29:32 +00:00
//Заходим на персонажа
self::inuser_go_btl(self::$bot);
2023-01-10 16:29:32 +00:00
//Поединок уже завершился, выкидываем из боя
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 {
2023-01-10 16:29:32 +00:00
//Действия бота вне поединка
if (self::$bot['timeMain'] < time()) {
mysql_query('UPDATE `chat` SET `time` = "' . time() . '" WHERE `to` = "' . self::$bot['login'] . '" AND `time` = "-1"');
2023-01-10 16:29:32 +00:00
//Действие возможно произвести
if (self::$bot['ipreg'] == 1 || self::$bot['ipreg'] == 2 || self::$bot['ipreg'] == 4) {
2023-01-10 16:29:32 +00:00
//Принимаем только хаоты
self::$bot['ipreg'] = 3;
}
if (self::$bot['ipreg'] == 5) {
2023-01-10 16:29:32 +00:00
//Подаем только хаоты
self::$bot['ipreg'] = 7;
}
//
if (self::$bot['ipreg'] == 0 || !self::test_fr(self::$bot['room'])) {
2023-01-10 16:29:32 +00:00
//Обновляем эффекты
$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) {
2023-01-10 16:29:32 +00:00
//Выдаем и надеваем предмет
//$it = $u->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) {
2023-01-10 16:29:32 +00:00
//обнуляем бота
self::clear_bot();
}
2023-01-10 16:29:32 +00:00
//Только-что из поединка, хиляется
if (!self::test_fr(self::$bot['room'])) {
2023-01-10 16:29:32 +00:00
//В какой-то локации, видимо что-то делаем
} elseif (self::$st['hpNow'] >= self::$st['hpAll']) {
echo 1;
2023-01-10 16:29:32 +00:00
//Приступаем к активной деятельности :)
mysql_query('UPDATE `stats` SET `zv`= "0",`team`= "0",`hpNow` = "' . self::$st['hpNow'] . '",`mpNow` = "' . self::$st['mpNow'] . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
2023-01-10 16:29:32 +00:00
mysql_query('UPDATE `users` SET `ipreg` = "' . self::new_action() . '",`mod_zvanie` = "Стажер" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
} else {
2023-01-10 16:29:32 +00:00
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');
}
}
2023-01-10 16:29:32 +00:00
mysql_query('UPDATE `items_users` SET `mod_zvanie` = "Cтaжер" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
}
2023-01-10 16:29:32 +00:00
//Хиляемся дальше
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) {
2023-01-10 16:29:32 +00:00
//Принять заявку на бой (физ.)
if (self::$bot['zv'] == 0) {
2023-01-10 16:29:32 +00:00
//Выделяем подходящую заявку в физ. поединке
$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)) {
2023-01-10 16:29:32 +00:00
//Принимаем заявку
$sa = '';
if (self::$bot['sex'] == 2) {
2023-01-10 16:29:32 +00:00
$sa = 'а';
}
2023-01-10 16:29:32 +00:00
$text = ' [login:' . self::$bot['login'] . '] принял' . $sa . ' вашу заявку на бой.[reflesh_main_zv_priem:' . self::$bot['id'] . ']';
2023-01-28 02:24:37 +00:00
$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) {
2023-01-10 16:29:32 +00:00
//Принять заявку на бой (груп.)
self::bot_group_haot_zv(6);
} elseif (self::$bot['ipreg'] == 3) {
2023-01-10 16:29:32 +00:00
//Принять заявку на бой (хаот.)
self::bot_group_haot_zv(7);
} elseif (self::$bot['ipreg'] == 4) {
2023-01-10 16:29:32 +00:00
//Принять заявку на бой (турнир.)
self::e('' . self::$bot['login'] . ', я хочу принять турнир...');
} elseif (self::$bot['ipreg'] == 5) {
2023-01-10 16:29:32 +00:00
//Подать заявку (физ.)
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) {
2023-01-10 16:29:32 +00:00
//Ожидание начала поединка
if (self::$bot['zv'] == 0) {
2023-01-10 16:29:32 +00:00
//Поединок не удалось начать
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'])) {
2023-01-10 16:29:32 +00:00
//Обнуляем действия
mysql_query('UPDATE `users` SET `ipreg` = "0",`timeMain` = "' . self::rnd() . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
} elseif ($zv['razdel'] == 4 || $zv['razdel'] == 5) {
2023-01-10 16:29:32 +00:00
//хаот или группа
if ($zv['time_start'] + $zv['time'] <= time()) {
self::inuser_go_zv(self::$bot);
}
} else {
2023-01-10 16:29:32 +00:00
//физ
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'])) {
2023-01-10 16:29:32 +00:00
//Заявку кто-то принял, реагируем! :)
$pr = -1;
$uz2st = $u->getStats($uz2, 0);
//btl-cof
if ($uz2st['reting'] > floor(self::$st['reting'] * 1.27)) {
2023-01-10 16:29:32 +00:00
//Отказываем, в 95% случаев, противник слишком силен
if (rand(0, 100) > 95) {
2023-01-10 16:29:32 +00:00
//отправляем бота на избиение :D
$pr = 1;
} else {
2023-01-10 16:29:32 +00:00
//отказ
$pr = 0;
}
} else {
$pr = 1;
}
2023-01-10 16:29:32 +00:00
//Можно принять заявку
//$pr = 0;
if ($pr == 1) {
2023-01-10 16:29:32 +00:00
//Прием заявки
//создаем поединок с ботом
$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();
2023-01-10 16:29:32 +00:00
//обновляем данные о поединке
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');
2023-01-10 16:29:32 +00:00
//Если бой кулачный, то снимаем вещи
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');
2023-01-10 16:29:32 +00:00
//обновляем заявку, что бой начался
self::$bot['battle'] = $btl_id;
2023-01-10 16:29:32 +00:00
//Отправляем сообщение в чат всем бойцам
2023-01-28 02:24:37 +00:00
$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) {
2023-01-10 16:29:32 +00:00
//Отказ
$sa = '';
if (self::$bot['sex'] == 2) {
2023-01-10 16:29:32 +00:00
$sa = 'а';
}
2023-01-10 16:29:32 +00:00
$text = ' [login:' . self::$bot['login'] . '] отказал' . $sa . ' вам в поединке.';
2023-01-28 02:24:37 +00:00
$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 {
2023-01-10 16:29:32 +00:00
//Заявку никто не принял, возможно стоит отменить заявку вообще!
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');
}
}
}
}
2023-01-10 16:29:32 +00:00
//Бот уже слишком долго ждет ответа игрока, отказываемся от заявки
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) {
2023-01-10 16:29:32 +00:00
$sa = 'а';
}
2023-01-10 16:29:32 +00:00
$text = ' [login:' . self::$bot['login'] . '] отозвал' . $sa . ' свой запрос на бой.';
2023-01-28 02:24:37 +00:00
$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) {
2023-01-10 16:29:32 +00:00
$r = 1; //принимаем физ
} elseif (rand(0, 1) == 0) {
2023-01-10 16:29:32 +00:00
$r = 4; //принимаем турнир
} else {
2023-01-10 16:29:32 +00:00
$r = 5; //подаем физ
}
}
} elseif (self::$bot['level'] == 0) {
if (rand(0, 1) == 1) {
2023-01-10 16:29:32 +00:00
$r = 1; //принимаем физ
} else {
2023-01-10 16:29:32 +00:00
$r = 5; //подаем физ
}
}
if ($r == 4) {
$r = 1;
}
return $r;
}
/*/
2023-01-10 16:29:32 +00:00
Базовые функции обучения бота
/*/
2023-01-10 16:29:32 +00:00
//Бот ищет заявку в группы или хаот для своего уровня и подходящую ему
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;
}
2023-01-10 16:29:32 +00:00
//Логика приема заявки
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) {
2023-01-10 16:29:32 +00:00
//Принимаем участие в заявке
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
}
}
2023-01-10 16:29:32 +00:00
//Добавляем нового бота
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) . "',
2023-01-10 16:29:32 +00:00
'" . 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");
}
}
2023-01-10 16:29:32 +00:00
//Бот находится в онлайне
static function _online()
{
if (self::$bot['online'] < time() - 60) {
2023-01-10 16:29:32 +00:00
//уровень/апп
if (self::$bot['battle'] == 0 && self::$bot['zv'] == 0) {
self::_level();
}
self::update('online', time());
}
}
2023-01-10 16:29:32 +00:00
//Бот меняет локацию
static function _loc_A($a, $b)
{
return $b;
}
static function _loc_zv()
{
if (rand(0, 100) < 5) {
$r = 1;
} else {
$r = rand(1, 4);
}
2023-01-10 16:29:32 +00:00
//будуар
if ($r == 4 && self::$bot['sex'] != 1) {
$r = rand(1, 3);
}
if (self::$bot['city'] == 'capitalcity') {
if ($r == 4) {
2023-01-10 16:29:32 +00:00
//будуар
$r = 7;
} elseif ($r == 3) {
2023-01-10 16:29:32 +00:00
//ЗВ 3
$r = 5;
} elseif ($r == 2) {
2023-01-10 16:29:32 +00:00
//ЗВ 2
$r = 2;
} else {
2023-01-10 16:29:32 +00:00
//ЗВ 1
$r = 4;
}
if (self::$bot['level'] == 0) {
2023-01-10 16:29:32 +00:00
//Новички
$r = 0;
}
}
return $r;
}
static function _loc($id)
{
if ($id == self::$bot['room']) {
2023-01-10 16:29:32 +00:00
//ничего, уже пришли
self::update('a1', 0);
} else {
2023-01-10 16:29:32 +00:00
//Прокладываем маршрут из текущей комнаты
$rid_next = self::_loc_A(self::$bot['room'], $id);
if ($rid_next > 0) {
2023-01-10 16:29:32 +00:00
//Идем туда
//$rid_next = 377;
mysql_query('UPDATE `users` SET `room` = "' . $rid_next . '" WHERE `id` = "' . self::$bot['id'] . '" LIMIT 1');
return true;
} else {
2023-01-10 16:29:32 +00:00
//Невозможно дойти туда
return false;
}
}
}
2023-01-10 16:29:32 +00:00
//Бот получил уровень, либо апп
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'])) {
$u->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']);
}
}
2023-01-10 16:29:32 +00:00
//Вспомогательные функции
static function e($t)
{
2023-01-28 02:24:37 +00:00
(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');
}
}