Вход Регистрация
Файл: l2ps_v5/itog/bonus_bot.php
Строк: 219
<?php
/**
 * Данный  робот  считывает данные о голосах из базы данных, полученные роботом votes_bot.php,
 * и доставляет бонус за голосования.
 * Для настройки робота откройте файл config.php и установите следующие параметры:
 * 1. VGR_INT_GAME_ID: Идентификатор игры в системе vigre.su.
 * Целое число, смотри в личном кабинете на сайте vigre.su.
 * 2. VGR_INT_SEC_KEY: Секретный ключ игры, смотри в личном кабинете на сайте vigre.su.
 * 3. VGR_INT_VOTES_SQL_SERVER_HOST: IP адрес mysql сервера для хранения голосов.
 * 4. VGR_INT_VOTES_SQL_SERVER_DB: База данных для хранения голосов
 * 5. VGR_INT_VOTES_SQL_SERVER_USER: Имя пользователя для доступа к базе голосов.
 * Должен иметь права на выполнение select, insert, update, create table.
 * 6. VGR_INT_VOTES_SQL_SERVER_PASS: Пароль для доступа к базе голосов.
 *
 * Если при доставке бонус необходимо открывать соединение с базой данных игрового сервера,
 * то настроить дополнительные параметры:
 * 7. VGR_INT_GAME_SQL_SERVER_HOST: IP адрес mysql сервера игры.
 * 8. VGR_INT_GAME_SQL_SERVER_DB: База сервера игры.
 * 9. VGR_INT_GAME_SQL_SERVER_USER: Имя пользователя для доступа к базе игры.
 * 10.VGR_INT_GAME_SQL_SERVER_PASS: Пароль для доступа к базе игры.
 * Параметры 1-6 устанавливаются одни и те же для роботов votes_bot.php и bonus_bot.php.
 * Параметры 7-10 для работы робота votes_bot.php не нужны.
 * После настройки параметров в файле config.php необходимо открыть файл bonus.php
 * и реализовать логику доставки бонуса в функции vgrInt_deliverBonus.
 *
 * Внимание! Один и тот же персонаж может получать бонус не раньше, чем раз в сутки!
 * Бонус за дополнительные голоса для персонажа начислен не будет!
 * Если в данных голосования нет имени персонажа, то бонус для такого голоса не начисляется
 * Для запуска робота предлагается использовать cron (Linux) или планировщик задач (Windows).
 * 2 и более робота bonus_bot.php одновременно работать не могут.
 * Робот votes_bot.php может одновременно работать с роботом bonus_bot.php.
 */
error_reporting(E_ALL);
ini_set("display_errors"1);

require_once(
'common.php');
require_once(
'config.php');
require_once(
'bonus.php');

/**
 * Вызываемая функция робота
 *
 */
function vgrInt_Main()
{
    global 
$vgrInt_SQLLink;
    
header("Content-type: text/plain;charset=utf-8");
    
define('TAG''Робот получения бонусов за голосования');
    
$botType VGR_CORE_INT_BOT_TYPE_BONUS;
    
$botType intval($botType);
    
vgrInt_printMessage(TAGVGR_INT_MESSAGE_INFO'Начало работы');
    try
    {
        try
        {
            
vgrInt_openVotesSQLConnection();
        }
        catch (
Exception $e)
        {
            
vgrInt_printMessage(TAGVGR_INT_MESSAGE_INFO$e->getMessage());
            
vgrInt_printMessage(TAGVGR_INT_MESSAGE_INFO'Окончание работы');
            return;
        }
        
vgrInt_createSQLTables();
        
vgrInt_rawMain();
    }
    catch (
Exception $e)
    {
        
vgrInt_printMessage(TAGVGR_INT_MESSAGE_INFO$e->getMessage());
    }
    
$query "update vigre_votes_bot set running = 0, last_run=now() where type=$botType";
    
mysql_query($query$vgrInt_SQLLink);
    try
    {
        
vgrInt_deliverBonusDeinit();
    }
    catch (
Exception $e)
    {
        
vgrInt_printMessage(TAGVGR_INT_MESSAGE_INFO"vgrInt_deliverBonusDeinit call error: ".$e->getMessage());
    }
    
vgrInt_closeVotesSQLConnection();
    
vgrInt_printMessage(TAGVGR_INT_MESSAGE_INFO'Окончание работы');
}

function 
vgrInt_rawMain()
{
    global 
$vgrInt_SQLLink;
    
$botType VGR_CORE_INT_BOT_TYPE_BONUS;
    
$botType intval($botType);
    
$query "select running from vigre_votes_bot where type=$botType";
    
$res mysql_query($query$vgrInt_SQLLink) or vgrInt_throwMySQLError();
    
$numRows mysql_num_rows($res);
    switch (
$numRows)
    {
        case 
0:
            {
                
$query "insert into vigre_votes_bot (running, last_run, type) values (1, now(), $botType)";
                
mysql_query($query$vgrInt_SQLLink) or vgrInt_throwMySQLError();
                
vgrInt_processVotes();
                break;
            }
        case 
1:
            {
                
$row mysql_fetch_array($res);
                
$running $row['running'];
                if(
$running)
                {
                    
vgrInt_printMessage(TAGVGR_INT_MESSAGE_ERROR'Предыдущий робот еще работает');
                    return;
                }
                else
                {
                    
vgrInt_processVotes();
                }
                break;
            }
        default:
            {
                
vgrInt_printMessage(TAGVGR_INT_MESSAGE_ERROR'Неверное число записей в таблице vigre_votes_bot');
                return;
            }
    }
}


function 
vgrInt_processVotes()
{
    
vgrInt_deliverBonusInit();
    global 
$vgrInt_SQLLink;
    
$query "select
    vigre_votes.sms,
    vigre_bonus.bonus_date,
    (DAYOFMONTH(vigre_bonus.bonus_date) <> DAYOFMONTH(now())
    and vigre_bonus.bonus_date < now())  as bonus_enabled,
    vigre_votes.id,
    vigre_votes.date,
    vigre_votes.charname,
    vigre_votes.ip
    from vigre_votes left join vigre_bonus on (vigre_bonus.charname=vigre_votes.charname)
    where vigre_votes.status is null"
;
    
$res mysql_query($query$vgrInt_SQLLink) or vgrInt_throwMySQLError();
    
$numRows mysql_numrows($res);
    
vgrInt_printMessage(TAGVGR_INT_MESSAGE_INFO"Получено $numRows необработанных голосов");
    
$characters = array();
    
//Список пользователей, получивших бонус
    
$charactersBonus = array();
    while((
$row mysql_fetch_array($res)) != false)
    {
        
$sms $row['sms'];
        
$sms intval($sms);
        
$id $row['id'];
        
$id intval($id);
        
$date $row['date'];
        
$dateString $date;
        
$character $row['charname'];
        
$ip $row['ip'];
        
$bonusDate $row['bonus_date'];
        
$bonusEnabled $row['bonus_enabled'];
        
$info "[$id$dateString$ip$character]";

        
$setVoteStatus true;
        if(
$character == null)
        {
            
vgrInt_printMessage(TAGVGR_INT_MESSAGE_INFO"Персонаж не указан. Бонус не будет получен для голоса $info");
        }
        else
        {
            if(
                
$bonusDate != null &&
                !
$bonusEnabled &&
                !
in_array($character$charactersBonus) &&
                !
$sms
                
)
            {
                
array_push($charactersBonus$character);
            }
            if(
in_array($character$charactersBonus) && !$sms)
            {
                
vgrInt_printMessage(TAGVGR_INT_MESSAGE_INFO"Персонаж $character уже получил бонус сегодня ($bonusDate). Бонус доставлен не будет. Голос: $info");
            }
            else
            {
                if(
vgrInt_deliverBonus($id$date$ip$character$sms))
                {
                    if(!
$sms)
                    {
                        
array_push($charactersBonus$character);
                    }
                    
vgrInt_printMessage(TAGVGR_INT_MESSAGE_INFO"Бонус для голоса $info доставлен");
                    
$characterSQL mysql_real_escape_string($character$vgrInt_SQLLink);
                    if(!
$sms)
                    {
                        if(
$bonusDate == null)
                        {
                            if(
in_array($character$characters))
                            {
                                
$query "update vigre_bonus set bonus_date=now() where charname='$characterSQL'";
                            }
                            else
                            {
                                
array_push($characters$character);
                                
$query "insert into vigre_bonus (charname, bonus_date) values('$characterSQL', now())";
                            }
                        }
                        else
                        {
                            
$query "update vigre_bonus set bonus_date=now() where charname='$characterSQL'";
                        }
                        
mysql_query($query$vgrInt_SQLLink) or vgrInt_throwMySQLError();
                    }
                }
                else
                {
                    
$setVoteStatus false;
                    
vgrInt_printMessage(TAGVGR_INT_MESSAGE_ERROR"Ошибка при доставке бонуса для голоса $info");
                }
            }
        }
        if(
$setVoteStatus)
        {
            
$status VGR_CORE_INT_VOTE_STATUS_BONUS_RECEIVED;
            
$status intval($status);
            
$query "update vigre_votes set status=$status where id=$id";
            
mysql_query($query$vgrInt_SQLLink) or vgrInt_throwMySQLError();
        }
    }
}

/**
 * Вызываем робота
 */
vgrInt_Main();
?>
Онлайн: 0
Реклама