userid возвращает 0

Designed

Твой антибиотик
Сообщения
233
Реакции
107
Подскажите почему userid возвращает 0 ?
C-подобный:
public void OnPluginStart()
{
    HookEvent("player_connect", Client_connect);
}

public void Client_connect(Event hEvent, const char[] sName, bool bDontBroadcast)
{
char client_name[32];
char client_steamID[32];
hEvent.GetString("name",client_name,sizeof(client_name));
hEvent.GetString("networkid",client_steamID,sizeof(client_steamID));
int iClient = GetClientOfUserId(hEvent.GetInt("userid"));

if (!(GetUserFlagBits(iClient) == 0))
{
CGOPrintToChatAll("{LIGHTRED}%s {DEFAULT}[%s] подключается...",client_name,client_steamID);
}
else
{
CGOPrintToChatAll("{OLIVE}%s {DEFAULT}[%s] подключается...",client_name,client_steamID);
}
}

L 01/31/2019 - 22:37:02: [SM] Exception reported: Client index 0 is invalid
L 01/31/2019 - 22:37:02: [SM] Blaming: test.smx
L 01/31/2019 - 22:37:02: [SM] Call stack trace:
L 01/31/2019 - 22:37:02: [SM] [0] GetUserFlagBits
L 01/31/2019 - 22:37:02: [SM] [1] Line 25, D:\_SPCOMPILE\scripting\test.sp::Client_connect
 

Rabb1t

Амбассадор
Сообщения
2,968
Реакции
1,429
  • Команда форума
  • #2
@Designed, во-первых, не userid, а Client.
Во-вторых, а кто проверку будет делать на валидность игрока?
 

Designed

Твой антибиотик
Сообщения
233
Реакции
107
@Designed, во-первых, не userid, а Client.
Во-вторых, а кто проверку будет делать на валидность игрока?
Да , извиняюсь , client а не userid.
Сделал проверку , но факт в том , что при коннекте любого игрока client возвращает 0.
Оффтоп
 

Rabb1t

Амбассадор
Сообщения
2,968
Реакции
1,429
  • Команда форума
  • #4
@Designed,
PHP:
if(0 < iClient <= MaxClients && IsClientInGame(iClient) && !IsFakeClient(iClient) {
// Твой дальше код
}
вставь перед получением флагов у игрока.
 

Someone

Участник
Сообщения
1,933
Реакции
1,653
Подскажите почему userid возвращает 0 ?
C-подобный:
public void OnPluginStart()
{
    HookEvent("player_connect", Client_connect);
}

public void Client_connect(Event hEvent, const char[] sName, bool bDontBroadcast)
{
char client_name[32];
char client_steamID[32];
hEvent.GetString("name",client_name,sizeof(client_name));
hEvent.GetString("networkid",client_steamID,sizeof(client_steamID));
int iClient = GetClientOfUserId(hEvent.GetInt("userid"));

if (!(GetUserFlagBits(iClient) == 0))
{
CGOPrintToChatAll("{LIGHTRED}%s {DEFAULT}[%s] подключается...",client_name,client_steamID);
}
else
{
CGOPrintToChatAll("{OLIVE}%s {DEFAULT}[%s] подключается...",client_name,client_steamID);
}
}

L 01/31/2019 - 22:37:02: [SM] Exception reported: Client index 0 is invalid
L 01/31/2019 - 22:37:02: [SM] Blaming: test.smx
L 01/31/2019 - 22:37:02: [SM] Call stack trace:
L 01/31/2019 - 22:37:02: [SM] [0] GetUserFlagBits
L 01/31/2019 - 22:37:02: [SM] [1] Line 25, D:\_SPCOMPILE\scripting\test.sp::Client_connect
Попробуй так:
PHP:
public void OnPluginStart()
{
    HookEvent("player_connect", Event_ClientConnect, EventHookMode_Pre);
}

public void Event_ClientConnect(Event hEvent, const char[] sName, bool bDontBroadcast)
{
    static int iClient;
    static char sAuth[32];
 
    hEvent.BroadcastDisabled = true;
    hEvent.GetString("networkid", sAuth, sizeof(sAuth));

    if((iClient = GetClientOfUserId(hEvent.GetInt("userid"))) != 0 && !IsFakeClient(iClient))
    {
        CGOPrintToChatAll("{%s}%N {DEFAULT}[%s] подключается...", GetUserFlagBits(iClient) != 0 ? "LIGHTRED":"OLIVE", iClient, sAuth);
    }
}
 
Последнее редактирование:

Rabb1t

Амбассадор
Сообщения
2,968
Реакции
1,429
  • Команда форума
  • #6
@Someone, разве не Action нужно тогда? И добавить
PHP:
 return Plugin_Handled;
т.к. хук Pre
 

Designed

Твой антибиотик
Сообщения
233
Реакции
107
Я не собирался ничего возвращать. Там по умолчанию должно быть Plugin_Continue.
C-подобный:
public void OnPluginStart()
{
    HookEvent("player_connect", Event_ClientConnect, EventHookMode_Pre);
}

public void Event_ClientConnect(Event hEvent, const char[] sName, bool bDontBroadcast)
{
static int iClient;
static char sAuth[32];

//hEvent.SetBroadcast(true);
// error 105: cannot find method or property Event.SetBroadcast
hEvent.GetString("networkid",sAuth,sizeof(sAuth));


if((iClient = GetClientOfUserId(hEvent.GetInt("userid"))) != 0 && !IsFakeClient(iClient))
{
CGOPrintToChatAll("{%s}%N {DEFAULT}[%s] подключается...", GetUserFlagBits(iClient) != 0 ? "LIGHTRED":"OLIVE", iClient, sAuth);
PrintToServer("[SUCCES] index = %i",iClient);
}
else
{
PrintToServer("[NO SUCCES] index = %i",iClient);
}
}

В консоли : [NO SUCCES] index = 0
 

Someone

Участник
Сообщения
1,933
Реакции
1,653
C-подобный:
public void OnPluginStart()
{
    HookEvent("player_connect", Event_ClientConnect, EventHookMode_Pre);
}

public void Event_ClientConnect(Event hEvent, const char[] sName, bool bDontBroadcast)
{
static int iClient;
static char sAuth[32];

//hEvent.SetBroadcast(true);
// error 105: cannot find method or property Event.SetBroadcast
hEvent.GetString("networkid",sAuth,sizeof(sAuth));


if((iClient = GetClientOfUserId(hEvent.GetInt("userid"))) != 0 && !IsFakeClient(iClient))
{
CGOPrintToChatAll("{%s}%N {DEFAULT}[%s] подключается...", GetUserFlagBits(iClient) != 0 ? "LIGHTRED":"OLIVE", iClient, sAuth);
PrintToServer("[SUCCES] index = %i",iClient);
}
else
{
PrintToServer("[NO SUCCES] index = %i",iClient);
}
}

В консоли : [NO SUCCES] index = 0
Тогда просто так:

UPD:
PHP:
public void OnClientPostAdminCheck(int iClient)
{
    static char sAuth[32];
 
    GetClientAuthId(iClient, AuthId_Steam2 sAuth, sizeof(sAuth));

    if(!IsFakeClient(iClient))
    {
        CGOPrintToChatAll("{%s}%N {DEFAULT}[%s] подключается...", GetUserFlagBits(iClient) != 0 ? "LIGHTRED":"OLIVE", iClient, sAuth);
    }
}
 
Последнее редактирование:

Designed

Твой антибиотик
Сообщения
233
Реакции
107
Тогда просто так:
PHP:
public void OnClientPostAdminCheck(int iClient)
{
    static int iClient;
    static char sAuth[32];
 
    GetClientAuthId(iClient, AuthId_Steam2 sAuth, sizeof(sAuth));

    if((iClient = GetClientOfUserId(hEvent.GetInt("userid"))) != 0 && !IsFakeClient(iClient))
    {
        CGOPrintToChatAll("{%s}%N {DEFAULT}[%s] подключается...", GetUserFlagBits(iClient) != 0 ? "LIGHTRED":"OLIVE", iClient, sAuth);
    }
}
PHP:
public void OnClientPostAdminCheck(int iClient)
{
static char sAuth[32];

GetClientAuthId(iClient,AuthId_Steam2,sAuth,sizeof(sAuth));

if (iClient != 0 && !IsFakeClient(iClient))
{
CGOPrintToChatAll("{%s}%N {DEFAULT}[%s] подключается...", GetUserFlagBits(iClient) != 0 ? "LIGHTRED":"OLIVE", iClient, sAuth);
//PrintToServer("[SUCCES] %s", GetUserFlagBits(iClient) != 0 ? "ADM":"PLAYER");
}
}

Благодарю , полет нормальный!
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #12
int iClient = GetClientOfUserId(hEvent.GetInt("userid"));
в
player_connect у клиента уже есть юзер ид но еще нет индекс, поэтому его еще нельзя получить в этом событии
только вот не помню где эта инфа написана
 
Сверху Снизу