[MANUAL] Создание модулей

Саша Шеин

Кому костылей?
Сообщения
1,697
Реакции
621
Извините за тупой вопрос
Как определить, что отключился вип-игрок с используемой привилегией?

Работает:
public void OnClientDisconnect(int iClient)
{
    if(!IsFakeClient(iClient))
    {
        //...
    }
}

Не работает:
public void OnClientDisconnect(int iClient)
{
    if(VIP_IsClientVIP(iClient) && VIP_IsClientFeatureUse(iClient, VIP_FEATURE))
    {
        //...
    }
}

Целесообразно ли делать через VIP_OnVIPClientRemoved -> !IsClientInGame?
Есть вариант использовать forward ядра -
 

Yooki

Добрая душа
Сообщения
473
Реакции
169
Не подскажете, как выдать VIP и указать номер сервера (или 0 - т.е. все сервера)
Нашел в .inc VIP_GiveClientVIP, но там нет параметров с id сервера
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #43
Не подскажете, как выдать VIP и указать номер сервера (или 0 - т.е. все сервера)
Нашел в .inc VIP_GiveClientVIP, но там нет параметров с id сервера
выдавать на нужном сервере или через базу. как-то в API я не учел этот момент. надо подумать как улучшить этот механизм
 

Yooki

Добрая душа
Сообщения
473
Реакции
169
выдавать на нужном сервере или через базу. как-то в API я не учел этот момент. надо подумать как улучшить этот механизм
Понял, спасибо. Просто хотел сделать, чтобы одновременно могли быть и привилегии, которые работают на всех серверах, а некоторые только на указаных. Поэтому было бы удобно указывать ID сервера
Сообщения автоматически склеены:

Кто-нибудь может, пожалуйста, поделиться сниппетом кода для корректного запроса по добавлению VIP игрока в ДБ.
В sourcepawn не разбираюсь и то, что я пытался написать - не работает.


C-подобный:
int iExpires, iAccountID;
                
                    
iExpires = SetTime + GetTime();
iAccountID  = GetSteamAccountID(iClient);
                
                    
char error[255];
Database db = SQL_Connect("vip_core", true, error, sizeof(error));
 
if (db == null)
{

    PrintToServer("Could not connect: %s", error);
                                    
}
else
{
    char szBuffer[128];
    Format(szBuffer, sizeof(szBuffer), "INSERT INTO `vip_users`(`account_id`, `name`, `lastvisit`, `sid`, `group`, `expires`) VALUES (%i, %i, %i, 0, %s, %i)", iAccountID, iClient, GetTime(), g_Groups[i][VIPGroup], iExpires);
                      
    SQL_TQuery(db, SQL_DefCallback, szBuffer);
    delete db;
}
 
Последнее редактирование:

Nekro

Терра инкогнита
Сообщения
4,025
Реакции
2,260
Ловлю ошибку

C-подобный:
[SM] Exception reported: Language phrase "Give_GrenadeHe" not found (arg 6)
[SM] Blaming: vip_module.smx
[SM] Call stack trace:
[SM]   [0] FormatEx
[SM]   [1] Line 96, C:\sm\vip_module.sp::OnDisplayItem
[SM]   [3] Call_Finish
[SM]   [4] Line 226, vip/VipMenu.sp::Handler_VIPMenu
[SM]   [6] Menu.Display
[SM]   [7] Line 262, vip/CMD.sp::VIPMenu_CMD

От этого блока кода:
C-подобный:
public bool OnDisplayItem(int client, const char[] sFeatureName, char[] sDisplay, int maxlen)
{   
    if(!VIP_GetClientFeatureStatus(client, sFeatureName))
        return false;

    int count = VIP_GetClientFeatureInt(client, sFeatureName);
    if(count)
    {
        FormatEx(sDisplay, maxlen, "%T [Доступно: %i]", sFeatureName, client, count);
    }
    else FormatEx(sDisplay, maxlen, "%T", sFeatureName, client);
    return true;
}

Проблема именно в построении перевода, а именно в этой строке:
C-подобный:
FormatEx(sDisplay, maxlen, "%T [Доступно: %i]", sFeatureName, client, count);

Сам "Give_GrenadeHe" :

CSS:
"Give_GrenadeHe"
{
    "en"    "Auto weapon he"
    "ru"    "Автовыдача гранат"
}

Подскажите, какой он аргумент ищет? Там их вообще нет же
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
Ловлю ошибку

C-подобный:
[SM] Exception reported: Language phrase "Give_GrenadeHe" not found (arg 6)
[SM] Blaming: vip_module.smx
[SM] Call stack trace:
[SM]   [0] FormatEx
[SM]   [1] Line 96, C:\sm\vip_module.sp::OnDisplayItem
[SM]   [3] Call_Finish
[SM]   [4] Line 226, vip/VipMenu.sp::Handler_VIPMenu
[SM]   [6] Menu.Display
[SM]   [7] Line 262, vip/CMD.sp::VIPMenu_CMD

От этого блока кода:
C-подобный:
public bool OnDisplayItem(int client, const char[] sFeatureName, char[] sDisplay, int maxlen)
{
    if(!VIP_GetClientFeatureStatus(client, sFeatureName))
        return false;

    int count = VIP_GetClientFeatureInt(client, sFeatureName);
    if(count)
    {
        FormatEx(sDisplay, maxlen, "%T [Доступно: %i]", sFeatureName, client, count);
    }
    else FormatEx(sDisplay, maxlen, "%T", sFeatureName, client);
    return true;
}

Проблема именно в построении перевода, а именно в этой строке:
C-подобный:
FormatEx(sDisplay, maxlen, "%T [Доступно: %i]", sFeatureName, client, count);

Сам "Give_GrenadeHe" :

CSS:
"Give_GrenadeHe"
{
    "en"    "Auto weapon he"
    "ru"    "Автовыдача гранат"
}

Подскажите, какой он аргумент ищет? Там их вообще нет же
Аргумент перевода ищет
Сообщения автоматически склеены:

Аргумент перевода ищет
строка Give_GrenadeHe должна быть равна строке предмета
и зачем там стоит предпоследний аргумент client?
 

Nekro

Терра инкогнита
Сообщения
4,025
Реакции
2,260
Аргумент перевода ищет
Сообщения автоматически склеены:


строка Give_GrenadeHe должна быть равна строке предмета
Дык в том то и дело, что вроде как не должна [VIP] Regen HP

C-подобный:
public bool:OnItemDisplay(iClient, const String:sFeatureName[], String:sDisplay[], iMaxLen)
{
    if(VIP_IsClientFeatureUse(iClient, g_sFeature[VIP_REGEN_HP]))
    {
        FormatEx(sDisplay, iMaxLen, "%T [%i HP/%i сек]", g_sFeature[VIP_REGEN_HP], iClient, VIP_GetClientFeatureInt(iClient, g_sFeature[VIP_REGEN_HP]), VIP_GetClientFeatureInt(iClient, g_sFeature[VIP_REGEN_HP_INTERVAL]));

        return true;
    }

    return false;
}



CSS:
"RegenHP"
{
    "ru"        "Регенерация здоровья"
    "en"        "HP Regeneration"
    "fi"        "Terveyden uudistaminen"
}
 

babka68

Участник
Сообщения
2,124
Реакции
956
@Nekro,
C-подобный:
typeset ItemSelectCallback
{
    function Action(int iClient, const char[] sFeatureName, VIP_ToggleState OldStatus VIP_ToggleState &NewStatus);
    function bool(int iClient, const char[] sFeatureName);
};
Запятую пропустил VIP_ToggleState OldStatus,
C-подобный:
  function Action(int iClient, const char[] sFeatureName, VIP_ToggleState OldStatus, VIP_ToggleState &NewStatus);
 
Сверху Снизу