HLX Проблема с плагином

Danyas

Участник
Сообщения
2,173
Реакции
1,072
@Danyas, оно под рутом только...

upload_2016-2-26_18-51-48.png

xD

Это не VPS/VDS, это вебхостинг с под cpanel с ssh доступом
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Всё таки вру, запрос не выполняется когда идет ошибка.

upload_2016-2-27_1-32-22.png
upload_2016-2-27_1-33-51.png
--- Добавлено позже ---
На первое время поставил костыль:
PHP:
public OnPluginStart()
{
     ...
    CreateTimer(30.0, Timer_En, _, TIMER_FLAG_NO_MAPCHANGE | TIMER_REPEAT);
    ...
}

public Action:Timer_En(Handle:timer, any:client)
{
    SQL_Query(hDatabase, "SELECT 1");
}
 

selax

Добрая душа
Сообщения
1,172
Реакции
521
@Danyas, а как у вас код компилируется? Он же не должен... Синтаксис у вас не 1.6, а 1.6 и 1.7 вперемешку.
Самому стало интересно и пока возился с плагином уже вдруг 6 утра наступило. >.<

В общем возможно исправил эту ошибку, плюс дабы показать как на синтаксис 1.7 перенести выкладываю код.
Извиняюсь за кучу пробелов и не нужных скобок, но без них я вообще не понимаю код.
Не уверен на счёт OnMapStart/OnPluginStart. Но по идее даже если лишнего понаписал - проверку там добавил.

Успешно компилируется на сайте SM, но я его не тестировал, так как писал с планшета. Да и нету у меня HLStatsX...
PHP:
#pragma newdecls required

Database hDatabase = null;

public Plugin myinfo =
{
    name = "HLStatsX: TOP Announcer",
    author = "Danyas"
}

// Если эта функция вызывается каждый рестарт карты,
// то блок OnMapStart можно удалить. Меня глючит.
public void OnPluginStart ( )
{
    Database.Connect ( GotDatabase, "hlstats" );
}

public void OnMapStart ( )
{
    if ( hDatabase == null )
    {
        Database.Connect ( GotDatabase, "hlstats" );
    }
}

public void OnMapEnd ( )
{
    delete hDatabase;
}

public void GotDatabase ( Database db, const char[] error, any data )
{
    if ( hDatabase != null )
    {
        delete db;
        return;
    }

    hDatabase = db;

    if ( hDatabase == null )
    {
        LogError ( "Database failure: %s", error );
        return;
    }
}

public void OnClientPostAdminCheck ( int client )
{
    if ( client == 0 )
    {
        return;
    }

    char steamid [ 32 ], query [ 512 ];
    GetClientAuthId ( client, AuthId_Engine, steamid, sizeof( steamid ) );

    Format ( query, sizeof( query ), "SELECT COUNT(*) AS rank FROM hlstats_Players WHERE hlstats_Players.game = 'v34' AND hideranking = 0 AND skill > (SELECT skill from hlstats_Players JOIN hlstats_PlayerUniqueIds ON hlstats_Players.playerId = hlstats_PlayerUniqueIds.playerId WHERE uniqueID = MID('%s', 9) AND hlstats_PlayerUniqueIds.game = 'v34') -1", steamid );

    if ( !hDatabase )
    {
        Database.Connect ( GotDatabase, "hlstats" );
    }
    
    // DBPrio_High наверное можно убрать. Мне просто хотелось подлиннее строчку.
    hDatabase.Query ( T_CheckTop10, query, client, DBPrio_High );
}

public void T_CheckTop10 ( Database db, DBResultSet rs, const char[] error, any client )
{

    if ( !IsClientConnected ( client ) || IsFakeClient( client ) )
    {
        return;
    }

    if ( rs == null )
    {
        LogError ( "Query failed! %s", error );
        return;
    }

    if ( rs.FetchRow ( ) )
    {
        int pid = rs.FetchInt ( 0 );
    
        if ( pid > 0 )
        {
            if(5 < pid < 11)        PrintToChatAll("\x04[HLStatsX:CE]\x03 ТОП-10\x01 Игрок \x03%N\x01 подключен.",client);
            else if(3 < pid < 6)    PrintToChatAll("\x04[HLStatsX:CE]\x03 ТОП-5\x01 Игрок \x03%N\x01 подключен.", client);
            else if(1 < pid < 4)    PrintToChatAll("\x04[HLStatsX:CE]\x03 ТОП-3\x01 Игрок \x03%N\x01 подключен.", client);
            else if(0 < pid < 2)    PrintToChatAll("\x04[HLStatsX:CE]\x03 ТОП-1\x01 Игрок \x03%N\x01 подключен.", client);
        }
    }
}
--- Добавлено позже ---
@Danyas, а оно вообще работает? :D
 
Сверху Снизу