GameCMS API + Member API

Сообщения
892
Реакции
149
Помог
25 раз(а)
Здравствуйте.
Пытаюсь получить значение айди на сайте, используя cmsapi_is_user_member.
C++:
public client_putinserver(UserId) {
    new UserSiteId = cmsapi_is_user_member(UserId);
    server_print("%i", UserSiteId);
}
Оно выводит всегда 0, хотя на сайте другое айди, так же с другими игроками.
Стим айди на сайте указан.
Возможно кто сталкивался?
Пытался использовать форвард:
C++:
public OnAPIMemberConnected(UserId, MemberId) {
    server_print("HERE");
    server_print("MemberId = %i", MemberId);
}
Но результатов нету. Выводит сообщение HERE и айдишник 0.
Версия апи последняя (5.6.3)
 
Сообщения
336
Реакции
414
Помог
7 раз(а)
В client_putinserver ты точно не получишь данные игрока, даже не пытайся. А вот в OnAPIMemberConnected возможно бывает задержка, попробуй использовать set_task и еще вместе с этим пробуй использовать параметр полученный с форварда или натив cmsapi_is_user_member
17 Фев 2024
Код:
public OnAPIMemberConnected(id, memberId, memberName[]) {
    server_print("memberId - %d", memberId);

    new iPlayerData[1];
    iPlayerData[0] = id;

    set_task(1.0, "testapi", 111111 + id, iPlayerData, sizeof(iPlayerData));
}

public testapi(iPlayerData[], iTaskId) {
    server_print("memberId - %d", cmsapi_is_user_member(iPlayerData[0]));
}
 
Сообщения
892
Реакции
149
Помог
25 раз(а)
Albertio, действительно, помогло. Спасибо большое.
 
Последнее редактирование:
Сообщения
336
Реакции
414
Помог
7 раз(а)
ImmortalAmxx, там все в качестве примера я сделал. Поэтому это все надо грамотно оформить и самое главное - 1 секунда скорее всего много, сделай пару тестов и найди оптимальное минимальное время
 
Сообщения
892
Реакции
149
Помог
25 раз(а)
Albertio, UPD. Магическим образом пофиксилось, и без задержки выводит нужный айди.
C++:
public OnAPIMemberConnected(UserId, memberId) {
    server_print("memberId no task - %d", memberId);

    new iPlayerData[1];
    iPlayerData[0] = UserId;

    set_task(1.0, "testapi", 111111 + UserId, iPlayerData, sizeof(iPlayerData));
}

public testapi(iPlayerData[], iTaskId) {
    server_print("memberId - %d", cmsapi_is_user_member(iPlayerData[0]));
}
1708176489076.png
 
Сообщения
336
Реакции
414
Помог
7 раз(а)
ImmortalAmxx, видимо есть какая то бага или ошибка в апишке. Я бы лучше советовал с таском, ибо если бывают случаи, когда id не получен, то это может повториться
 
Сообщения
1,292
Реакции
2,288
Помог
57 раз(а)
ImmortalAmxx напиши плагин который логирует стимид игрока в client_authorized (тот что приходит 2-ым аргументом в функцию) и отдельно стимид в client_putinserver(). Сопоставление двух вариантов нужно сделать через strcmp. Есть какой-то специфичный баг с тем что в client_authorized во 2ом аргументе стимид предыдущего игрока что был в этом слоте (если там кто-то был, иначе всё ок). У тебя возможно та же проблема.
17 Фев 2024
Просто в геймцмс всё заваривается в
Код:
public client_authorized(id, const authid[])
{
    copy(g_szAuthIDs[id], charsmax(g_szAuthIDs[]), authid);
    UTIL_GetUserAuthid64(id, g_szAuthIDs64[id], charsmax(g_szAuthIDs64[]), g_szAuthIDs[id]);
    
    if(~g_bitAPIstatus & UseGameCmsGroups)
    {
        bPlayerDataLoaded[id] = true;
        AuthorizeUser(id);
    }
}
Ну и как бы если у тебя этот баг имеет место быть, то это объясняет, почему явный мембер считается плагином как не мембер. Стимид не тот.
 
Сообщения
892
Реакции
149
Помог
25 раз(а)
BlackSignature, интересно, спасибо, посмотрю. В любом случае, с задержкой всё работает, по методу Альбертино.
 
Сообщения
333
Реакции
290
Помог
9 раз(а)

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу