Передача userid таймер

Drop

Участник
Сообщения
41
Реакции
1
Как передавать userid из таймера в callback, чтбы последний правлиьно выполнялся?


PHP:
public void OnMapStart()   
{
    CreateTimer(120.0, Timer_Message, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}

public Action Timer_Message(Handle hTimer) // Каллбек нашего таймера
{
 int iCount;
    for (new i = 1 ; i <= MaxClients; ++i)
        {
        decl String:steamid[32],String:clientname[24];

        decl String:ip[64];
        GetClientName(i, clientname, sizeof(clientname));
        GetClientIP(i, ip, sizeof(ip));
        GetClientAuthId(i,AuthId_Steam2,steamid,sizeof(steamid));
        char szQuery[256], szAuth[32];
        GetClientAuthId(i, AuthId_Engine, szAuth, sizeof(szAuth), true);
      
        FormatEx(szQuery, sizeof(szQuery), "kakoit-o zapros",  premennye);   
        g_hDatabase.Query(SQL_Callback_UpdateSteamid, szQuery, GetClientUserId(i));
      
 
        ++iCount;
    }
      if(iCount == 0)   
    {
        return Plugin_Stop;   
    }

    return Plugin_Continue;
}


public void SQL_Callback_UpdateSteamid(Database hDatabase, DBResultSet results, const char[] sError, any iUserID)
    {
    if(sError[0])
    {   
      LogError("SQL_Callback_UpdateSteamid: %s", sError);
        return;
    }
    new iClient = GetClientOfUserId(iUserID);
    if (iClient > 0 && SQL_GetAffectedRows(results) < 1 && !IsClientInKickQueue(iClient)) 
{
} 
}
 

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
966
CreateTimer(9999.0, TheTimer, GetClientUserId(cow))
public Action TheTimer(Handle timer, int cow)
{
if((cow = GetClientOfUserId(cow)) != 0)
// do something
}
 

Drop

Участник
Сообщения
41
Реакции
1
GetClientUserId(cow) // cow - индекс клиента
--- Добавлено позже ---
а, понял
--- Добавлено позже ---
Стоп, не совсем понял
компилятор ругается на строчку CreateTimer(9999.0, TheTimer, GetClientUserId(cow))
ошибка такая:
error 017: undefined symbol "cow"
 

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
966
компилятор ругается на строчку CreateTimer(9999.0, TheTimer, GetClientUserId(cow))
ошибка такая:
error 017: undefined symbol "cow"
Не, я про первый пост. Что вообще нужно?


error 017: undefined symbol "cow"
cow - индекс клиента
 

Drop

Участник
Сообщения
41
Реакции
1
Не, я про первый пост. Что вообще нужно?
Нужно, чтобы таймер выполнялся каждые н-минут, по отношению к каждому игроку.
например, чтобы каждые две минуты, проверялся стим ид игрока, на наличие его в бан листе.
То есть, sql запрос в таймере и кик клиента посредством SQL_Callback
Однако, на сколько я понял, SQL_Callback не работает, т.к. нет передачи стим ид игрока, по отношению к которому выполняется запрос sql
 

Exle

Участник
Сообщения
190
Реакции
216
Нужно, чтобы таймер выполнялся каждые н-минут, по отношению к каждому игроку.
например, чтобы каждые две минуты, проверялся стим ид игрока, на наличие его в бан листе.
То есть, sql запрос в таймере и кик клиента посредством SQL_Callback
Однако, на сколько я понял, SQL_Callback не работает, т.к. нет передачи стим ид игрока, по отношению к которому выполняется запрос sql
В цикле у тебя не было проверок.

PHP:
public void OnMapStart()
{
    CreateTimer(120.0, Timer_Message, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}

public Action Timer_Message(Handle hTimer) // Коллбек нашего таймера
{
    for (int i = 1 ; i <= MaxClients; i++)
    {
        if (!IsClientInGame(i) || IsFakeClient(i))
        {
            continue;
        }

        char steamid[32], clientname[24], ip[64], szQuery[256], szAuth[32];

        GetClientName(i, clientname, sizeof(clientname));
        GetClientIP(i, ip, sizeof(ip));
        GetClientAuthId(i, AuthId_Steam2, steamid, sizeof(steamid));
        GetClientAuthId(i, AuthId_Engine, szAuth, sizeof(szAuth), true);

        FormatEx(szQuery, sizeof(szQuery), "kakoit-o zapros",  premennye);
        g_hDatabase.Query(SQL_Callback_UpdateSteamid, szQuery, GetClientUserId(i));
    }
}


public void SQL_Callback_UpdateSteamid(Database hDatabase, DBResultSet results, const char[] sError, any iUserID)
{
    if(sError[0])
    {
        LogError("SQL_Callback_UpdateSteamid: %s", sError);
        return;
    }

    int iClient = GetClientOfUserId(iUserID);
    if (iClient > 0 && SQL_GetAffectedRows(results) < 1 && !IsClientInKickQueue(iClient))
    {
        //
    }
}
 
Последнее редактирование:

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
Нужно, чтобы таймер выполнялся каждые н-минут, по отношению к каждому игроку.
Берёшь, делаешь глобальный повторяющийся таймер на n сек. В нём делаешь цикл по всем игрокам и делаешь запрос по каждому.
Так не будет таймера для каждого игрока, да и вообще заморочек с ними.
 

Drop

Участник
Сообщения
41
Реакции
1
В цикле у тебя не было проверок.

PHP:
public void OnMapStart() 
{
    CreateTimer(120.0, Timer_Message, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}

public Action Timer_Message(Handle hTimer) // Каллбек нашего таймера
{
    int iCount;
    for (int i = 1 ; i <= MaxClients; i++)
    {
        if (!IsClientInGame(i) || IsFakeClient(i))
        {
            continue;
        }

        char steamid[32], clientname[24], ip[64], szQuery[256], szAuth[32];

        GetClientName(i, clientname, sizeof(clientname));
        GetClientIP(i, ip, sizeof(ip));
        GetClientAuthId(i, AuthId_Steam2, steamid, sizeof(steamid));
        GetClientAuthId(i, AuthId_Engine, szAuth, sizeof(szAuth), true);

        FormatEx(szQuery, sizeof(szQuery), "kakoit-o zapros",  premennye); 
        g_hDatabase.Query(SQL_Callback_UpdateSteamid, szQuery, GetClientUserId(i));
    
 
        ++iCount;
    }

    if (iCount == 0) 
    {
        return Plugin_Stop; 
    }

    return Plugin_Continue;
}


public void SQL_Callback_UpdateSteamid(Database hDatabase, DBResultSet results, const char[] sError, any iUserID)
{
    if(sError[0])
    { 
        LogError("SQL_Callback_UpdateSteamid: %s", sError);
        return;
    }

    int iClient = GetClientOfUserId(iUserID);
    if (iClient > 0 && SQL_GetAffectedRows(results) < 1 && !IsClientInKickQueue(iClient))
    {
        //
    }
}
То что нужно! Спасибо
 
Сверху Снизу