<?php
/*
* Модуль получения бонуса за голосование в Aion-Top
* Скрипт: bonus.php
* Назначение: Сам модуль
* Автор модуля PROGRAMMATOR
* © 2010
http://www.aion-top.info
*/
// проверим, name проставлен или нет
if (isset($_POST['name']))
{
// отправляем заголовки серверу, необходимые для корректного
// отображения ответов на Ajax с использованием кириллицы
@header('Content-type: text/plain; charset=windows-1251');
@header('Cache-Control: no-store, no-cache, must-revalidate');
@header('Cache-Control: post-check=0, pre-check=0', false);
// устанавливаем контстанту AION_TOP
// далее используем ее для защиты от прямого доступа
define('AION_TOP', true);
// подключаем конфигурационный файл
require_once 'configure.php';
// подключаем локализацию
require_once 'language.php';
// удаляем возможные пробелы и html теги
$name = trim(strip_tags($_POST['name']));
// проверяем не пустое ли поле "Имя игрового персонажа" (обработка ошибок)
if (empty($name)) {
die($lang['error_name_empty']);
}
// проверяем длину имени (обработка ошибок)
if (strlen($name) < $cfg['min_name_len'] or strlen($name) > $cfg['max_name_len']) {
die($lang['error_name_len']);
}
// получаем данные из статистики Aion-Top с учетом введенного имени
preg_match_all('/([0-9\-]+).([0-9:]+).('.$name.'+)/', @file_get_contents('http://www.aion-top.info/voting/'.$cfg['site_id']), $votes);
// проверяем, существует ли указанное имя в статистике (обработка ошибок)
if (empty($votes[3][0])) {
die($lang['error_stats_empty']);
}
// конвертируем полученую дату голосования в ее штамп
$last_votes_time = strtotime($votes[1][0].$votes[2][0]);
// проверка времени голосования в статистике Aion-Top (обработка ошибок)
if ($last_votes_time + 86400 < time()) {
die($lang['error_votes_time_out']);
}
############################################ НЕ РЕДАКТИРОВАТЬ! ###########################################
// подключаемся к серверу MySQL
mysql_connect($cfg['db']['host'].':'.$cfg['db']['port'], $cfg['db']['user'], $cfg['db']['pass']) or die();
// выбираем необходимую базу данных
mysql_select_db($cfg['db']['base']);
##########################################################################################################
// запрос на получение данных о игровом персонаже
$sql = mysql_query('SELECT id, name, online FROM players WHERE name="'.mysql_real_escape_string($name).'"');
// создаем ассоциативный массив данных $player
$player = mysql_fetch_assoc($sql);
// освобождаем ресурсы
mysql_free_result($sql);
// проверка существования такого персонажа на сервере (обработка ошибок)
if (!is_array($player)) {
die($lang['error_player_not_found']);
}
// проверка отсутствия игрового персонажа в игре (обработка ошибок)
if ($player['online']) {
die($lang['error_player_is_online']);
}
// запрос на получение данных о полученных бонусах
$sql = mysql_query('SELECT time, bonus FROM aion_top WHERE name="'.$player['name'].'" ORDER BY time DESC LIMIT 1');
// создаем ассоциативный массив данных $aion_top
$aion_top = mysql_fetch_assoc($sql);
// освобождаем ресурсы
mysql_free_result($sql);
// существуют ли записи о получениях бонуса данным персонажем
if (is_array($aion_top)) {
// проверим дату получения бонуса и дату последнего голосования (обработка ошибок)
if ($aion_top['time'] == $last_votes_time) {
die($lang['error_bonus_you_received']);
}
}
// запрос на получение количества предметов в инвентаре персонажа
$sql = mysql_query('SELECT itemCount FROM inventory WHERE itemOwner="'.$player['id'].'" AND itemId="'.intval($cfg['item']['id']).'"');
// создаем ассоциативный массив данных $item
$item = mysql_fetch_assoc($sql);
// освобождаем ресурсы
mysql_free_result($sql);
// проверим существует ли предмет с указанным ID в инвентаре персонажа
if (is_array($item)) {
// предмет(ы) найден(ы), добавляем к их количеству $cfg['item']['count']
mysql_query('UPDATE inventory SET itemCount="'.(intval($item['itemCount']) + intval($cfg['item']['count'])).'" WHERE itemOwner="'.$player['id'].'" AND itemId="'.intval($cfg['item']['id']).'"');
} else {
// запрос на получение последнего obj_id предмета в инвентаре персонажа
$sql = mysql_query('SELECT itemUniqueId FROM inventory WHERE itemOwner="'.$player['id'].'" ORDER BY itemUniqueId DESC');
// создаем ассоциативный массив данных $obj_id
$obj_id = mysql_fetch_assoc($sql);
// освобождаем ресурсы
mysql_free_result($sql);
// предметов нет, просто создаем новую запись с указанными предметом и его количеством
mysql_query('INSERT INTO inventory (itemUniqueId, itemId, itemCount, itemColor, itemOwner, isEquiped, slot, itemLocation) VALUES ("'.($obj_id['itemUniqueId'] + 1).'", "'.intval($cfg['item']['id']).'", "'.intval($cfg['item']['count']).'", "0", "'.$player['id'].'", "0", "0", "0")');
}
// записываем данные о получении бонусов за голосование в Aion-Top
mysql_query('INSERT INTO aion_top (name, time, bonus) VALUES ("'.$player['name'].'", "'.$last_votes_time.'", "'.time().'")');
// сообщаем пользователю, что он получил свой бонус
die ($lang['bonus_successfully_issued']);
}
?>