function UpdateBots() { $now = time(); if (read_config('bots') > 0 && read_config('bots_last_update') < $now - 60) { include_once XN_ROOT . 'includes/functions/CheckPlanetBuildingQueue.php'; include_once XN_ROOT . 'includes/functions/GetBuildingPrice.php'; include_once XN_ROOT . 'includes/functions/IsElementBuyable.php'; include_once XN_ROOT . 'includes/functions/SetNextQueueElementOnTop.php'; include_once XN_ROOT . 'includes/functions/UpdatePlanetBatimentQueueList.php'; include_once XN_ROOT . 'includes/functions/IsTechnologieAccessible.php'; include_once XN_ROOT . 'includes/functions/GetElementPrice.php'; include_once XN_ROOT . 'includes/functions/HandleTechnologieBuild.php'; include_once XN_ROOT . 'includes/functions/CheckPlanetUsedFields.php'; if (read_config('log_bots')) { $BotLog = "\n\n------------------------------------------\n"; } $allbots = doquery("SELECT * FROM {{table}} WHERE `next_time`<" . $now, 'bots'); $update_bots = array(); $update_users = array(); while ($bot = $allbots->fetch_array()) { $user = doquery("SELECT * FROM {{table}} WHERE `id` = '" . $bot['user'] . "'", 'users', true); $thebot = new Bot($user, $bot); $thebot->Play(); if (isset($BotLog)) { $BotLog .= $thebot->log; } /** * Para calcular la próxima actividad, se genera una función que decrece de * probabilidad casi totalmente en 15 minutos. Luego se calcula la próxima * actividad un poco aleatóriamente, teniendo en cuenta la noche, las horas * de sueño y según los minutos que está conectado. **/ if (date('H', $now) < 8) { $max_time = 28800 / (($bot['minutes_per_day'] < 975 ? 15 : $bot['minutes_per_day'] - 960) / 15); } elseif ($bot['minutes_per_day'] >= 960) { $max_time = 60; } else { $max_time = 57600 / ($bot['minutes_per_day'] / 15); } if ($max_time / 60 > 15) { $random = mt_rand(1, 100); if ($random <= 30) { $next_time = $now + mt_rand(1, 120); } elseif ($random <= 45) { $next_time = $now + mt_rand(61, 180); } elseif ($random <= 55) { $next_time = $now + mt_rand(121, 240); } elseif ($random <= 62) { $next_time = $now + mt_rand(181, 300); } elseif ($random <= 68) { $next_time = $now + mt_rand(241, 360); } elseif ($random <= 73) { $next_time = $now + mt_rand(301, 420); } elseif ($random <= 81) { $next_time = $now + mt_rand(361, 540); } elseif ($random <= 90) { $next_time = $now + mt_rand(421, 660); } else { $next_time = $now + mt_rand(541, 960); } } if (mt_rand(0, 1) or $max_time / 60 <= 15) { $next_time = $now + mt_rand($max_time > 120 ? $max_time - 60 : 60, $max_time + 60); } if (date('H', $next_time) < 8 && $bot['minutes_per_day'] < 960) { $next_time = mktime(8); } $update_bots[$bot['id']] = array('last_time' => $now, 'next_time' => $next_time, 'minutes_per_day' => !mt_rand(0, 999) ? mt_rand(1, 1440) : $bot['minutes_per_day'], 'last_planet' => $thebot->end_planet); $update_users[$bot['user']] = array('onlinetime' => $now, 'user_lastip' => 'BOT', 'user_agent' => 'BOT'); unset($thebot); } if (isset($BotLog)) { $st = fopen(XN_ROOT . "adm/Log/BotLog.php", "a"); $BotLog .= 'Bots actualizados a las ' . date('H:i:s - j/n/Y', $now) . "\n"; $BotLog .= "------------------------------------------"; fwrite($st, $BotLog); fclose($st); } unset($bot); unset($allbots); if (!empty($update_bots)) { $query = 'UPDATE {{table}}'; $bot_ids = array(); $user_ids = array(); foreach ($update_bots as $id => $values) { foreach ($values as $field => $value) { if (!isset($fields[$field])) { $fields[$field] = ' SET `' . $field . '` = CASE'; } $fields[$field] .= ' WHEN `id` = \'' . $id . '\' THEN \'' . $value . '\''; } $bot_ids[] = $id; } foreach ($fields as $field => $text) { $query_bots = $query . $text . ' ELSE `' . $field . '` END,'; } $query_bots = substr($query_bots, 0, -1) . ' WHERE `id` IN (' . implode(',', $bot_ids) . ')'; foreach ($update_users as $id => $values) { foreach ($values as $field => $value) { if (!isset($fields[$field])) { $fields[$field] = ' SET `' . $field . '` = CASE'; } $fields[$field] .= ' WHEN `id` = \'' . $id . '\' THEN \'' . $value . '\''; } $user_ids[] = $id; } foreach ($fields as $field => $text) { $query_users = $query . $text . ' ELSE `' . $field . '` END,'; } $query_users = substr($query_users, 0, -1) . ' WHERE `id` IN (' . implode(',', $user_ids) . ')'; doquery($query_bots, 'bots'); doquery($query_users, 'users'); } update_config('bots_last_update', $now); } }