Написание плагинов

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
@-=|УЧЕНИК|=-, проверяй.
C-подобный:
#pragma semicolon 1
#pragma newdecls required

#define CS_DMG_HEADSHOT    (1 << 30)    /**< Headshot */

#include <sdkhooks>

public void OnPluginStart()
{
    for(int i = 1; i <= MaxClients; i++) if (IsClientInGame(i)) OnClientPutInServer(i);
}

public void OnClientPutInServer(int client)
{
    SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
}

public Action OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype)
{
    if(!(damagetype & CS_DMG_HEADSHOT) && attacker != victim && 0 < attacker && attacker <= MaxClients)
    {
        static char wpn[16];
        GetClientWeapon(attacker, wpn, sizeof(wpn));
        if(!strcmp(wpn[7], "deagle"))
        {
            damage = 0.0;
            return Plugin_Changed;
        }
    }

    return Plugin_Continue;
}
 
Последнее редактирование:

-=|УЧЕНИК|=-

вся жизнь,сплошной цирк.
Сообщения
876
Реакции
212
@-=|УЧЕНИК|=-, проверяй.
Я не уверен, что SDKHook вообще передаёт индекс оружия (во всяком случае не во всех играх, где-то было индекс 0 всегда)
C-подобный:
#pragma semicolon 1
#pragma newdecls required

#define CS_DMG_HEADSHOT    (1 << 30)    /**< Headshot */

#include <sdkhooks>

public Plugin myinfo =
{
    name = "[SpirT] Deagle HS Only",
    version = "1.0.2_fix",
    author = "SpirT"
}

public void OnPluginStart()
{
    for(int i = 1; i <= MaxClients; i++) if (IsClientInGame(i)) OnClientPutInServer(i);
}

public void OnClientPutInServer(int client)
{
    SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
}

public Action OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int& weapon, float damageForce[3], float damagePosition[3])
{
    if(!(damagetype & CS_DMG_HEADSHOT) && IsValidEdict(weapon))
    {
        static char wpn[16];
        GetEdictClassname(weapon, wpn, sizeof(wpn));
        if(!strcmp(wpn, "weapon_deagle"))
        {
            damage = 0.0;
            return Plugin_Changed;
        }
    }

    return Plugin_Continue;
}
Инклюд этому плагину вообще не нужен, кмк.
Так же как было,проходит урон по всему телу.
 

Felton

Участник
Сообщения
799
Реакции
59
Доброго времени суток.Достался мне плагин но при компиле выдает ошибку
prefix.sp
refix.sp(121) : error 017: undefined symbol "GetClientAuthId"
Сесвер Counter-Strike Source v.34 SourceMod [1.6.4] Возможно подпилить под мою версию?
C-подобный:
#include <sdktools>

public Plugin:myinfo = {
    name = "[SM] Set Tags Clients",
    author = "css-help",
    version = "1.1.0",
    description = "",
    url = "",
};

new bool:g_bIsTag[66];
new String:g_AuthId_Steam2[66][64];
new String:g_sGetTag[66][100];
new String:g_sGetColorTag[66][16];
new g_iTimeTag[66];
new bool:g_bCreateTag[66];
new String:g_sBufferTag[66][100];
new String:g_sBufferColor[66][16];
new Handle:g_arInAdvanceTag = INVALID_HANDLE;
new g_iNuM_Tag[66];
new g_id_Target[66];
new Handle:g_hTIMER = INVALID_HANDLE;
new Handle:g_hDB_TagClients = INVALID_HANDLE;

public OnPluginStart()
{
    DBI_Create();
    RegAdminCmd("sm_tag", OpenGlobalMenu, 16384, _, _, 0);
    RegAdminCmd("sm_prefix", OpenGlobalMenu, 16384, _, _, 0);
    g_arInAdvanceTag = CreateArray(100, 0);
}

public OnMapStart()
{
    if (FileExists("addons/sourcemod/logs/prefix.txt", false))
    {
        DeleteFile("addons/sourcemod/logs/prefix.txt");
    }
    ClearArray(g_arInAdvanceTag);
    OnCreateFile_SetTagCFG("cfg/sourcemod/prefix.cfg");
    OnOpenFile_SetTagCFG("cfg/sourcemod/prefix.cfg");
    if (g_hTIMER == INVALID_HANDLE)
    {
        g_hTIMER = CreateTimer(5.0, OnCheckTagPlayer, 0, 1);
    }
}

public Action:OnCheckTagPlayer(Handle:timer)
{
    new iTheTime = GetTime(_);
    for (new iClient = 1; iClient <= MaxClients; iClient++)
    {
        if (IsClientInGame(iClient) && !IsFakeClient(iClient))
        {
            if (g_bIsTag[iClient] && g_sGetTag[iClient][0] && iTheTime > g_iTimeTag[iClient] && g_iTimeTag[iClient] != -1)
            {
                g_bIsTag[iClient] = false;
                g_sGetTag[iClient][0] = '\0';
            }
        }
    }
}

OnCreateFile_SetTagCFG(String:filename[])
{
    if (!FileExists(filename, false))
    {
        new Handle:file = OpenFile(filename, "w+");
        if (file)
        {
            WriteFileLine(file, "[VIP]\n[ADMIN]\n[BOSS]");
            CloseHandle(file);
        }
    }
}

OnOpenFile_SetTagCFG(String:filename[])
{
    new Handle:file = OpenFile(filename, "r");
    if (file)
    {
        new String:buffer[100];
        while (!IsEndOfFile(file))
        {
            ReadFileLine(file, buffer, 100);
            new pos = 0;
            pos = StrContains(buffer, "//", true);
            if (pos != -1)
            {
                buffer[pos] = '\0';
            }
            pos = StrContains(buffer, "#", true);
            if (pos != -1)
            {
                buffer[pos] = '\0';
            }
            pos = StrContains(buffer, ";", true);
            if (pos != -1)
            {
                buffer[pos] = '\0';
            }
            TrimString(buffer);
            if (buffer[0] == 0)
            {
                continue;
            }
            if (FindStringInArray(g_arInAdvanceTag, buffer) != -1)
            {
                continue;
            }
            PushArrayString(g_arInAdvanceTag, buffer);
        }
        CloseHandle(file);
    }
}

public OnClientPutInServer(client)
{
    if (IsClientInGame(client) && !IsFakeClient(client))
    {
        GetClientAuthId(client, AuthId_Steam2, g_AuthId_Steam2[client], 64, true);
        decl String:Name[64];
        GetClientName(client, Name, 64);
        LogToFileEx("addons/sourcemod/logs/prefix.txt", "OnClientPutInServer :: %s %s", Name, g_AuthId_Steam2[client]);
        DBI_SelectInfo(client);
    }
}

public OnClientDisconnect(client)
{
    decl String:Name[64];
    GetClientName(client, Name, 64);
    LogToFileEx("addons/sourcemod/logs/prefix.txt", "OnClientDisconnect :: %s %s", Name, g_AuthId_Steam2[client]);
    DBI_UpdateInfo(client);
}

public Action:OpenGlobalMenu(client, args)
{
    if (client && IsClientInGame(client))
    {
        MenuGlobal(client);
    }
}

MenuGlobal(client)
{
    new Handle:menu = CreateMenu(_MenuGlobal, MENU_ACTIONS_DEFAULT);
    SetMenuTitle(menu, "Запись Префиксов\n");
    AddMenuItem(menu, "", "Установить Префикс", 0);
    AddMenuItem(menu, "", "Удалить Префикс", 0);
    SetMenuExitButton(menu, true);
    DisplayMenu(menu, client, 0);
}

public _MenuGlobal(Handle:menu, MenuAction:action, client, item)
{
    if (action == MenuAction:4)
    {
        if (item == 0)
        {
            MenuTag(client);
        }
        else
        {
            MenuDelTag(client);
        }
    }
    else
    {
        if (action == MenuAction:16)
        {
            CloseHandle(menu);
        }
    }
}

MenuTag(client)
{
    new size_array = 0;
    if ((size_array = GetArraySize(g_arInAdvanceTag)) > 0)
    {
        new Handle:menu = CreateMenu(_MenuTag, MENU_ACTIONS_DEFAULT);
        SetMenuTitle(menu, "Выберите префикс:\n");
        new String:NuM[16], String:buffer[100];
        AddMenuItem(menu, "new", "Свой префикс", 0);
        for (new i = 0; i < size_array; i++)
        {
            GetArrayString(g_arInAdvanceTag, i, buffer, 100);
            IntToString(i, NuM, 15);
            AddMenuItem(menu, NuM, buffer, 0);
        }
        SetMenuExitButton(menu, true);
        DisplayMenu(menu, client, 0);
    }
    else
    {
        g_iNuM_Tag[client] = -1;
        g_bCreateTag[client] = true;
        PrintToChat(client, "[SM] Напишите в чат желаемый префикс");
    }
}

public _MenuTag(Handle:menu, MenuAction:action, client, item)
{
    if (action == MenuAction:4)
    {
        new String:buffer[64];
        GetMenuItem(menu, item, buffer, 64, _, _, 0);
        if (StrEqual(buffer, "new", true))
        {
            g_iNuM_Tag[client] = -1;
            g_bCreateTag[client] = true;
            PrintToChat(client, "[SM] Напишите в чат желаемый префикс");
        }
        else
        {
            g_iNuM_Tag[client] = StringToInt(buffer, 10);
            MenuColorTag(client);
        }
    }
    else
    {
        if (action == MenuAction:16)
        {
            CloseHandle(menu);
        }
    }
}

MenuColorTag(client)
{
    new Handle:menu = CreateMenu(_MenuColorTag, MENU_ACTIONS_DEFAULT);
    SetMenuTitle(menu, "Каким цветом будет Тег:\n");
    AddMenuItem(menu, "{DEFAULT}", "Желтый", 0);
    AddMenuItem(menu, "{GREEN}", "Зеленый", 0);
    AddMenuItem(menu, "{LIGHTGREEN}", "Салатовый", 0);
    AddMenuItem(menu, "{TEAM}", "Цвет команды", 0);
    AddMenuItem(menu, "{RED}", "Красный", 0);
    AddMenuItem(menu, "{BLUE}", "Синий", 0);
    AddMenuItem(menu, "{GRAY}", "Серый", 0);
    SetMenuExitButton(menu, true);
    DisplayMenu(menu, client, 0);
}

public _MenuColorTag(Handle:menu, MenuAction:action, client, item)
{
    if (action == MenuAction:4)
    {
        GetMenuItem(menu, item, g_sBufferColor[client], 16, _, _, 0);
        MenuPlayerTag(client);
        DBI_UpdateInfo(client);
    }
    else
    {
        if (action == MenuAction:16)
        {
            CloseHandle(menu);
        }
    }
}

MenuPlayerTag(client)
{
    new Handle:menu = CreateMenu(_MenuPlayerTag, MENU_ACTIONS_DEFAULT);
    new String:userid[8], String:sTar[64];
    SetMenuTitle(menu, "Кому установить префикс:\n");
    for (new iClient = 1; iClient <= MaxClients; iClient++)
    {
        if (IsClientInGame(iClient) && !IsFakeClient(iClient))
        {
            IntToString(GetClientUserId(iClient), userid, 15);
            GetClientName(iClient, sTar, 64);
            AddMenuItem(menu, userid, sTar, 0);
        }
    }
    SetMenuExitButton(menu, true);
    DisplayMenu(menu, client, 0);
}

public _MenuPlayerTag(Handle:menu, MenuAction:action, client, item)
{
    if (action == MenuAction:4)
    {
        decl String:userid[16];
        GetMenuItem(menu, item, userid, 15, _, _, 0);
        new target = GetClientOfUserId(StringToInt(userid, 10));
        if (target < 1 || !IsClientInGame(target))
        {
            PrintToChat(client, "[SM] Игрок больше не доступен.");
            MenuPlayerTag(client);
        }
        else
        {
            g_id_Target[client] = target;
            MenuTimerTag(client);
        }
    }
}

MenuTimerTag(client)
{
    new Handle:menu = CreateMenu(_MenuTimerTag, MENU_ACTIONS_DEFAULT);
    SetMenuTitle(menu, "На сколько довать Тег");
    new String:sTimeTag[16];
    IntToString(86400, sTimeTag, 16);
    AddMenuItem(menu, sTimeTag, "1 день", 0);
    IntToString(604800, sTimeTag, 16);
    AddMenuItem(menu, sTimeTag, "7 дней", 0);
    IntToString(2419200, sTimeTag, 16);
    AddMenuItem(menu, sTimeTag, "1 месяц", 0);
    IntToString(4838400, sTimeTag, 16);
    AddMenuItem(menu, sTimeTag, "2 месяца", 0);
    IntToString(7257600, sTimeTag, 16);
    AddMenuItem(menu, sTimeTag, "3 месяца", 0);
    IntToString(12096000, sTimeTag, 16);
    AddMenuItem(menu, sTimeTag, "5 месяцев", 0);
    IntToString(29030400, sTimeTag, 16);
    AddMenuItem(menu, sTimeTag, "1 год", 0);
    SetMenuExitButton(menu, true);
    DisplayMenu(menu, client, 0);
}

public _MenuTimerTag(Handle:menu, MenuAction:action, client, item)
{
    if (action == MenuAction:4)
    {
        new target = g_id_Target[client];
        if (!IsClientInGame(target))
        {
            PrintToChat(client, "[SM] Игрок больше не доступен.");
            MenuPlayerTag(client);
            return;
        }
        decl String:sTimeTag[16];
        GetMenuItem(menu, item, sTimeTag, 16, _, _, 0);
        if (g_iNuM_Tag[client] != -1)
        {
            decl String:buffer[100];
            GetArrayString(g_arInAdvanceTag, g_iNuM_Tag[client], buffer, 100);
            strcopy(g_sGetTag[target], 100, buffer);
        }
        else
        {
            strcopy(g_sGetTag[target], 100, g_sBufferTag[client]);
        }
        g_bIsTag[target] = true;
        g_iTimeTag[target] = GetTime(_) + StringToInt(sTimeTag, 10);
        strcopy(g_sGetColorTag[target], 16, g_sBufferColor[client]);
        decl String:sAdmin[64], String:sTarger[64];
        GetClientName(client, sAdmin, 64);
        GetClientName(target, sTarger, 64);
        PrintToChat(target, "[SM] Админ \x03%s установил вам префикс.", sAdmin);
        PrintToChat(client, "[SM] Вы установили \x03%s префикс.", sTarger);
        DBI_UpdateInfo(target);
    }
    else
    {
        if (action == MenuAction:16)
        {
            CloseHandle(menu);
        }
    }
}

MenuDelTag(client)
{
    new Handle:menu = CreateMenu(_MenuDelTag, MENU_ACTIONS_DEFAULT);
    new String:userid[8], String:sTar[64];
    SetMenuTitle(menu, "У кого удалить Тег:\n");
    for (new iClient = 1; iClient <= MaxClients; iClient++)
    {
        if (IsClientInGame(iClient) && !IsFakeClient(iClient) && g_bIsTag[iClient])
        {
            IntToString(GetClientUserId(iClient), userid, 15);
            GetClientName(iClient, sTar, 64);
            AddMenuItem(menu, userid, sTar, 0);
        }
    }
    SetMenuExitButton(menu, true);
    DisplayMenu(menu, client, 0);
}

public _MenuDelTag(Handle:menu, MenuAction:action, client, item)
{
    if (action == MenuAction:4)
    {
        decl String:userid[16];
        GetMenuItem(menu, item, userid, 15, _, _, 0);
        new target = GetClientOfUserId(StringToInt(userid, 10));
        if (target < 1 || !IsClientInGame(target))
        {
            PrintToChat(client, "[SM] Игрок больше не доступен.");
            MenuDelTag(client);
        }
        else
        {
            decl String:sAdmin[64], String:sTarger[64];
            GetClientName(client, sAdmin, 64);
            GetClientName(target, sTarger, 64);
            PrintToChat(target, "[SM] Админ \x03%s удалил Ваш префикс.", sAdmin);
            PrintToChat(client, "[SM] Вы удалили префикс игроку \x03%s.", sTarger);
            g_bIsTag[target] = false;
            g_sGetTag[target][0] = '\0';
            MenuDelTag(client);
            DBI_UpdateInfo(target);
        }
    }
}

MenuConfirmTag(client)
{
    new Handle:menu = CreateMenu(_MenuConfirmTag, MENU_ACTIONS_DEFAULT);
    new String:buffer[256];
    Format(buffer, 255, "Вы написали этот префикс:\n%10s%s\nВсе верно?\n \n", " ", buffer);
    SetMenuTitle(menu, buffer);
    AddMenuItem(menu, "", "Да. Продолжить", 0);
    AddMenuItem(menu, "", "Нет. Написать другой", 0);
    if (GetArraySize(g_arInAdvanceTag))
    {
        AddMenuItem(menu, "", "Нет. Выбрать из списка", 0);
    }
    SetMenuExitButton(menu, true);
    DisplayMenu(menu, client, 0);
}

public _MenuConfirmTag(Handle:menu, MenuAction:action, client, item)
{
    if (action == MenuAction:4)
    {
        if (item == 0)
        {
            MenuColorTag(client);
        }
        else
        {
            if (item == 1)
            {
                g_bCreateTag[client] = true;
                PrintToChat(client, "[SM] Напишите в чат свой желаемый префикс");
            }
            else
            {
                if (item == 2)
                {
                    MenuTag(client);
                }
            }
        }
    }
    else
    {
        if (action == MenuAction:16)
        {
            CloseHandle(menu);
        }
    }
}

public Action:OnClientSayCommand(client, const String:command[], const String:sArgs[])
{
    if (client && IsClientInGame(client))
    {
        decl String:sText[256];
        strcopy(sText, 255, sArgs);
        TrimString(sText);
        StripQuotes(sText);
        if (sArgs[1] == 64 || sArgs[1] == 47)
        {
            return Plugin_Continue;
        }
        if (g_bCreateTag[client])
        {
            if (strlen(sText) < 2)
            {
                PrintToChat(client, "[SM] Ошибка. Минимальное количество символов \x03(2)");
                return Plugin_Handled;
            }
            strcopy(g_sBufferTag[client], 100, sText);
            MenuConfirmTag(client);
            g_bCreateTag[client] = false;
            return Plugin_Handled;
        }
        if (g_bIsTag[client])
        {
            decl String:buffer[256], String:sName[64];
            GetClientName(client, sName, 64);
            new iColor = ReplaceColors(g_sGetColorTag[client]);
            FormatEx(buffer, 255, "%s[%s] %s: %s", (iColor == -2) ? "" : ((iColor == -1) ? "" : "\x03"), g_sGetTag[client], sName, sText);
            switch (iColor)
            {
                case -2, -1, 0:
                {
                    for (new target = 1; target <= MaxClients; target++)
                    {
                        if (IsClientInGame(target) && !IsFakeClient(client))
                        {
                            PrintToChat(target, buffer);
                        }
                    }
                }
                case 1, 2, 3:
                {
                    PrintSayToChatAll(buffer, iColor);
                }
                case 4:
                {
                    PrintSayAll(client, buffer);
                }
            }
            return Plugin_Handled;
        }
    }
    return Plugin_Continue;
}

PrintSayAll(client, String:text[])
{
    new Handle:h = StartMessageAll("SayText2", 0);
    if (h)
    {
        BfWriteByte(h, client);
        BfWriteByte(h, 1);
        BfWriteString(h, text);
        EndMessage();
    }
}

PrintSayToChatAll(String:text[], iColor)
{
    new iTarget = FindPlayerByTeam(iColor);
    if (iTarget)
    {
        new Handle:h = StartMessageAll("SayText2", 0);
        if (h)
        {
            BfWriteByte(h, iTarget);
            BfWriteByte(h, 1);
            BfWriteString(h, text);
            EndMessage();
        }
    }
    else
    {
        PrintMsgToAll(text);
    }
}

PrintMsgToAll(String:text[])
{
    for (new i = 1; i <= MaxClients; i++)
    {
        if (IsClientInGame(i))
        {
            new Handle:hBf = StartMessageOne("SayText2", i, 0);
            if (hBf)
            {
                BfWriteByte(hBf, i);
                BfWriteByte(hBf, 1);
                BfWriteString(hBf, text);
                EndMessage();
            }
        }
    }
}

ReplaceColors(String:color[])
{
    if (StrContains(color, "{GREEN}", true) != -1)
    {
        return -1;
    }
    if (StrContains(color, "{LIGHTGREEN}", true) != -1)
    {
        return 0;
    }
    if (StrContains(color, "{GRAY}", true) != -1)
    {
        return 1;
    }
    if (StrContains(color, "{RED}", true) != -1)
    {
        return 2;
    }
    if (StrContains(color, "{BLUE}", true) != -1)
    {
        return 3;
    }
    if (StrContains(color, "{TEAM}", true) != -1)
    {
        return 4;
    }
    return -2;
}

FindPlayerByTeam(iTeam)
{
    for (new i = 1; i <= MaxClients; i++)
    {
        if (IsClientInGame(i) && GetClientTeam(i) == iTeam)
        {
            return i;
        }
    }
    return -1;
}

OnClearInfo(client)
{
    g_bIsTag[client] = false;
    g_iTimeTag[client] = 0;
    g_sGetTag[client][0] = '\0';
    strcopy(g_sGetColorTag[client], 16, "{DEFAULT}");
}

DBI_Create()
{
    decl String:buffer[256];
    g_hDB_TagClients = SQLite_UseDatabase("prefix", buffer, 255);
    if (!g_hDB_TagClients)
    {
        LogError("SQLite_UseDatabase error: %s", buffer);
        SetFailState("SQLite_UseDatabase error: %s", buffer);
    }
    SQL_LockDatabase(g_hDB_TagClients);
    Format(buffer, 255, "CREATE TABLE IF NOT EXISTS %s (steam TEXT(%i), tag_name TEXT(%i), color_tag TEXT(%i), time INT);", "prefix", 64, 100, 16);
    SQL_FastQuery(g_hDB_TagClients, buffer, -1);
    SQL_UnlockDatabase(g_hDB_TagClients);
}

DBI_SelectInfo(client)
{
    if (!IsClientInGame(client) || IsFakeClient(client))
    {
        return;
    }
    decl String:buffer[256];
    Format(buffer, 255, "SELECT * FROM %s WHERE steam = '%s' LIMIT 1;", "prefix", g_AuthId_Steam2[client]);
    SQL_TQuery(g_hDB_TagClients, OnSelectClient, buffer, GetClientUserId(client), DBPrio_Normal);
}

DBI_AddInfo(client)
{
    if (!IsClientInGame(client) || IsFakeClient(client))
    {
        return;
    }
    decl String:buffer[256];
    Format(buffer, 255, "INSERT INTO %s (steam, tag_name, color_tag, time) VALUES ('%s', '', '{DEFAULT}', 0);", "prefix", g_AuthId_Steam2[client]);
    SQL_TQuery(g_hDB_TagClients, OnSQLRequest, buffer, 0, DBPrio_Normal);
    decl String:Name[64];
    GetClientName(client, Name, 64);
    LogToFileEx("addons/sourcemod/logs/prefix.txt", "OnAddClient :: %s %s [enable='%s' | time='%i' | tag='%s' | color='%s']", Name, g_AuthId_Steam2[client], (g_bIsTag[client]) ? "true" : "false", g_iTimeTag[client], g_sGetTag[client], g_sGetColorTag[client]);
}

DBI_UpdateInfo(client)
{
    if (IsClientInGame(client) && !IsFakeClient(client))
    {
        decl String:buffer[256];
        Format(buffer, 255, "UPDATE %s SET tag_name = '%s', color_tag = '%s', time = %i WHERE steam = '%s';", "prefix", g_sGetTag[client], g_sGetColorTag[client], g_iTimeTag[client], g_AuthId_Steam2[client]);
        SQL_TQuery(g_hDB_TagClients, OnSQLRequest, buffer, client, DBPrio_Normal);
        decl String:Name[64];
        GetClientName(client, Name, 64);
        LogToFileEx("addons/sourcemod/logs/prefix.txt", "OnUpdateClient :: %s %s [enable='%s' | time='%i' | tag='%s' | color='%s']\n \n", Name, g_AuthId_Steam2[client], (g_bIsTag[client]) ? "true" : "false", g_iTimeTag[client], g_sGetTag[client], g_sGetColorTag[client]);
    }
}

public OnSelectClient(Handle:owner, Handle:hndl, String:error[], any:data)
{
    if (!hndl)
    {
        LogError("OnSelectClient error: %s", error);
        return;
    }
    new client = GetClientOfUserId(data);
    if (!client)
    {
        return;
    }
    OnClearInfo(client);
    if (SQL_FetchRow(hndl))
    {
        if (IsClientInGame(client) && !IsFakeClient(client))
        {
            SQL_FetchString(hndl, 1, g_sGetTag[client], 100, _);
            if (!StrEqual(g_sGetTag[client], "", true))
            {
                SQL_FetchString(hndl, 2, g_sGetColorTag[client], 16, _);
                g_iTimeTag[client] = SQL_FetchInt(hndl, 3, _);
                g_bIsTag[client] = true;
                decl String:Name[64];
                GetClientName(client, Name, 64);
                LogToFileEx("addons/sourcemod/logs/prefix.txt", "OnSelectClient :Get Array: %s %s [enable='%s' | time='%i' | tag='%s' | color='%s']\n \n", Name, g_AuthId_Steam2[client], (g_bIsTag[client]) ? "true" : "false", g_iTimeTag[client], g_sGetTag[client], g_sGetColorTag[client]);
            }
        }
    }
    else
    {
        DBI_AddInfo(client);
    }
}

public OnSQLRequest(Handle:owner, Handle:hndl, String:error[], any:data)
{
    if (!hndl)
    {
        LogError("OnSQLRequest error: %s", error);
        return;
    }
}
 

babka68

Участник
Сообщения
2,124
Реакции
956
Доброго времени суток.Достался мне плагин но при компиле выдает ошибку
prefix.sp
refix.sp(121) : error 017: undefined symbol "GetClientAuthId"
Сесвер Counter-Strike Source v.34 SourceMod [1.6.4] Возможно подпилить под мою версию?
C-подобный:
#include <sdktools>

public Plugin:myinfo = {
    name = "[SM] Set Tags Clients",
    author = "css-help",
    version = "1.1.0",
    description = "",
    url = "",
};

new bool:g_bIsTag[66];
new String:g_AuthId_Steam2[66][64];
new String:g_sGetTag[66][100];
new String:g_sGetColorTag[66][16];
new g_iTimeTag[66];
new bool:g_bCreateTag[66];
new String:g_sBufferTag[66][100];
new String:g_sBufferColor[66][16];
new Handle:g_arInAdvanceTag = INVALID_HANDLE;
new g_iNuM_Tag[66];
new g_id_Target[66];
new Handle:g_hTIMER = INVALID_HANDLE;
new Handle:g_hDB_TagClients = INVALID_HANDLE;

public OnPluginStart()
{
    DBI_Create();
    RegAdminCmd("sm_tag", OpenGlobalMenu, 16384, _, _, 0);
    RegAdminCmd("sm_prefix", OpenGlobalMenu, 16384, _, _, 0);
    g_arInAdvanceTag = CreateArray(100, 0);
}

public OnMapStart()
{
    if (FileExists("addons/sourcemod/logs/prefix.txt", false))
    {
        DeleteFile("addons/sourcemod/logs/prefix.txt");
    }
    ClearArray(g_arInAdvanceTag);
    OnCreateFile_SetTagCFG("cfg/sourcemod/prefix.cfg");
    OnOpenFile_SetTagCFG("cfg/sourcemod/prefix.cfg");
    if (g_hTIMER == INVALID_HANDLE)
    {
        g_hTIMER = CreateTimer(5.0, OnCheckTagPlayer, 0, 1);
    }
}

public Action:OnCheckTagPlayer(Handle:timer)
{
    new iTheTime = GetTime(_);
    for (new iClient = 1; iClient <= MaxClients; iClient++)
    {
        if (IsClientInGame(iClient) && !IsFakeClient(iClient))
        {
            if (g_bIsTag[iClient] && g_sGetTag[iClient][0] && iTheTime > g_iTimeTag[iClient] && g_iTimeTag[iClient] != -1)
            {
                g_bIsTag[iClient] = false;
                g_sGetTag[iClient][0] = '\0';
            }
        }
    }
}

OnCreateFile_SetTagCFG(String:filename[])
{
    if (!FileExists(filename, false))
    {
        new Handle:file = OpenFile(filename, "w+");
        if (file)
        {
            WriteFileLine(file, "[VIP]\n[ADMIN]\n[BOSS]");
            CloseHandle(file);
        }
    }
}

OnOpenFile_SetTagCFG(String:filename[])
{
    new Handle:file = OpenFile(filename, "r");
    if (file)
    {
        new String:buffer[100];
        while (!IsEndOfFile(file))
        {
            ReadFileLine(file, buffer, 100);
            new pos = 0;
            pos = StrContains(buffer, "//", true);
            if (pos != -1)
            {
                buffer[pos] = '\0';
            }
            pos = StrContains(buffer, "#", true);
            if (pos != -1)
            {
                buffer[pos] = '\0';
            }
            pos = StrContains(buffer, ";", true);
            if (pos != -1)
            {
                buffer[pos] = '\0';
            }
            TrimString(buffer);
            if (buffer[0] == 0)
            {
                continue;
            }
            if (FindStringInArray(g_arInAdvanceTag, buffer) != -1)
            {
                continue;
            }
            PushArrayString(g_arInAdvanceTag, buffer);
        }
        CloseHandle(file);
    }
}

public OnClientPutInServer(client)
{
    if (IsClientInGame(client) && !IsFakeClient(client))
    {
        GetClientAuthId(client, AuthId_Steam2, g_AuthId_Steam2[client], 64, true);
        decl String:Name[64];
        GetClientName(client, Name, 64);
        LogToFileEx("addons/sourcemod/logs/prefix.txt", "OnClientPutInServer :: %s %s", Name, g_AuthId_Steam2[client]);
        DBI_SelectInfo(client);
    }
}

public OnClientDisconnect(client)
{
    decl String:Name[64];
    GetClientName(client, Name, 64);
    LogToFileEx("addons/sourcemod/logs/prefix.txt", "OnClientDisconnect :: %s %s", Name, g_AuthId_Steam2[client]);
    DBI_UpdateInfo(client);
}

public Action:OpenGlobalMenu(client, args)
{
    if (client && IsClientInGame(client))
    {
        MenuGlobal(client);
    }
}

MenuGlobal(client)
{
    new Handle:menu = CreateMenu(_MenuGlobal, MENU_ACTIONS_DEFAULT);
    SetMenuTitle(menu, "Запись Префиксов\n");
    AddMenuItem(menu, "", "Установить Префикс", 0);
    AddMenuItem(menu, "", "Удалить Префикс", 0);
    SetMenuExitButton(menu, true);
    DisplayMenu(menu, client, 0);
}

public _MenuGlobal(Handle:menu, MenuAction:action, client, item)
{
    if (action == MenuAction:4)
    {
        if (item == 0)
        {
            MenuTag(client);
        }
        else
        {
            MenuDelTag(client);
        }
    }
    else
    {
        if (action == MenuAction:16)
        {
            CloseHandle(menu);
        }
    }
}

MenuTag(client)
{
    new size_array = 0;
    if ((size_array = GetArraySize(g_arInAdvanceTag)) > 0)
    {
        new Handle:menu = CreateMenu(_MenuTag, MENU_ACTIONS_DEFAULT);
        SetMenuTitle(menu, "Выберите префикс:\n");
        new String:NuM[16], String:buffer[100];
        AddMenuItem(menu, "new", "Свой префикс", 0);
        for (new i = 0; i < size_array; i++)
        {
            GetArrayString(g_arInAdvanceTag, i, buffer, 100);
            IntToString(i, NuM, 15);
            AddMenuItem(menu, NuM, buffer, 0);
        }
        SetMenuExitButton(menu, true);
        DisplayMenu(menu, client, 0);
    }
    else
    {
        g_iNuM_Tag[client] = -1;
        g_bCreateTag[client] = true;
        PrintToChat(client, "[SM] Напишите в чат желаемый префикс");
    }
}

public _MenuTag(Handle:menu, MenuAction:action, client, item)
{
    if (action == MenuAction:4)
    {
        new String:buffer[64];
        GetMenuItem(menu, item, buffer, 64, _, _, 0);
        if (StrEqual(buffer, "new", true))
        {
            g_iNuM_Tag[client] = -1;
            g_bCreateTag[client] = true;
            PrintToChat(client, "[SM] Напишите в чат желаемый префикс");
        }
        else
        {
            g_iNuM_Tag[client] = StringToInt(buffer, 10);
            MenuColorTag(client);
        }
    }
    else
    {
        if (action == MenuAction:16)
        {
            CloseHandle(menu);
        }
    }
}

MenuColorTag(client)
{
    new Handle:menu = CreateMenu(_MenuColorTag, MENU_ACTIONS_DEFAULT);
    SetMenuTitle(menu, "Каким цветом будет Тег:\n");
    AddMenuItem(menu, "{DEFAULT}", "Желтый", 0);
    AddMenuItem(menu, "{GREEN}", "Зеленый", 0);
    AddMenuItem(menu, "{LIGHTGREEN}", "Салатовый", 0);
    AddMenuItem(menu, "{TEAM}", "Цвет команды", 0);
    AddMenuItem(menu, "{RED}", "Красный", 0);
    AddMenuItem(menu, "{BLUE}", "Синий", 0);
    AddMenuItem(menu, "{GRAY}", "Серый", 0);
    SetMenuExitButton(menu, true);
    DisplayMenu(menu, client, 0);
}

public _MenuColorTag(Handle:menu, MenuAction:action, client, item)
{
    if (action == MenuAction:4)
    {
        GetMenuItem(menu, item, g_sBufferColor[client], 16, _, _, 0);
        MenuPlayerTag(client);
        DBI_UpdateInfo(client);
    }
    else
    {
        if (action == MenuAction:16)
        {
            CloseHandle(menu);
        }
    }
}

MenuPlayerTag(client)
{
    new Handle:menu = CreateMenu(_MenuPlayerTag, MENU_ACTIONS_DEFAULT);
    new String:userid[8], String:sTar[64];
    SetMenuTitle(menu, "Кому установить префикс:\n");
    for (new iClient = 1; iClient <= MaxClients; iClient++)
    {
        if (IsClientInGame(iClient) && !IsFakeClient(iClient))
        {
            IntToString(GetClientUserId(iClient), userid, 15);
            GetClientName(iClient, sTar, 64);
            AddMenuItem(menu, userid, sTar, 0);
        }
    }
    SetMenuExitButton(menu, true);
    DisplayMenu(menu, client, 0);
}

public _MenuPlayerTag(Handle:menu, MenuAction:action, client, item)
{
    if (action == MenuAction:4)
    {
        decl String:userid[16];
        GetMenuItem(menu, item, userid, 15, _, _, 0);
        new target = GetClientOfUserId(StringToInt(userid, 10));
        if (target < 1 || !IsClientInGame(target))
        {
            PrintToChat(client, "[SM] Игрок больше не доступен.");
            MenuPlayerTag(client);
        }
        else
        {
            g_id_Target[client] = target;
            MenuTimerTag(client);
        }
    }
}

MenuTimerTag(client)
{
    new Handle:menu = CreateMenu(_MenuTimerTag, MENU_ACTIONS_DEFAULT);
    SetMenuTitle(menu, "На сколько довать Тег");
    new String:sTimeTag[16];
    IntToString(86400, sTimeTag, 16);
    AddMenuItem(menu, sTimeTag, "1 день", 0);
    IntToString(604800, sTimeTag, 16);
    AddMenuItem(menu, sTimeTag, "7 дней", 0);
    IntToString(2419200, sTimeTag, 16);
    AddMenuItem(menu, sTimeTag, "1 месяц", 0);
    IntToString(4838400, sTimeTag, 16);
    AddMenuItem(menu, sTimeTag, "2 месяца", 0);
    IntToString(7257600, sTimeTag, 16);
    AddMenuItem(menu, sTimeTag, "3 месяца", 0);
    IntToString(12096000, sTimeTag, 16);
    AddMenuItem(menu, sTimeTag, "5 месяцев", 0);
    IntToString(29030400, sTimeTag, 16);
    AddMenuItem(menu, sTimeTag, "1 год", 0);
    SetMenuExitButton(menu, true);
    DisplayMenu(menu, client, 0);
}

public _MenuTimerTag(Handle:menu, MenuAction:action, client, item)
{
    if (action == MenuAction:4)
    {
        new target = g_id_Target[client];
        if (!IsClientInGame(target))
        {
            PrintToChat(client, "[SM] Игрок больше не доступен.");
            MenuPlayerTag(client);
            return;
        }
        decl String:sTimeTag[16];
        GetMenuItem(menu, item, sTimeTag, 16, _, _, 0);
        if (g_iNuM_Tag[client] != -1)
        {
            decl String:buffer[100];
            GetArrayString(g_arInAdvanceTag, g_iNuM_Tag[client], buffer, 100);
            strcopy(g_sGetTag[target], 100, buffer);
        }
        else
        {
            strcopy(g_sGetTag[target], 100, g_sBufferTag[client]);
        }
        g_bIsTag[target] = true;
        g_iTimeTag[target] = GetTime(_) + StringToInt(sTimeTag, 10);
        strcopy(g_sGetColorTag[target], 16, g_sBufferColor[client]);
        decl String:sAdmin[64], String:sTarger[64];
        GetClientName(client, sAdmin, 64);
        GetClientName(target, sTarger, 64);
        PrintToChat(target, "[SM] Админ \x03%s установил вам префикс.", sAdmin);
        PrintToChat(client, "[SM] Вы установили \x03%s префикс.", sTarger);
        DBI_UpdateInfo(target);
    }
    else
    {
        if (action == MenuAction:16)
        {
            CloseHandle(menu);
        }
    }
}

MenuDelTag(client)
{
    new Handle:menu = CreateMenu(_MenuDelTag, MENU_ACTIONS_DEFAULT);
    new String:userid[8], String:sTar[64];
    SetMenuTitle(menu, "У кого удалить Тег:\n");
    for (new iClient = 1; iClient <= MaxClients; iClient++)
    {
        if (IsClientInGame(iClient) && !IsFakeClient(iClient) && g_bIsTag[iClient])
        {
            IntToString(GetClientUserId(iClient), userid, 15);
            GetClientName(iClient, sTar, 64);
            AddMenuItem(menu, userid, sTar, 0);
        }
    }
    SetMenuExitButton(menu, true);
    DisplayMenu(menu, client, 0);
}

public _MenuDelTag(Handle:menu, MenuAction:action, client, item)
{
    if (action == MenuAction:4)
    {
        decl String:userid[16];
        GetMenuItem(menu, item, userid, 15, _, _, 0);
        new target = GetClientOfUserId(StringToInt(userid, 10));
        if (target < 1 || !IsClientInGame(target))
        {
            PrintToChat(client, "[SM] Игрок больше не доступен.");
            MenuDelTag(client);
        }
        else
        {
            decl String:sAdmin[64], String:sTarger[64];
            GetClientName(client, sAdmin, 64);
            GetClientName(target, sTarger, 64);
            PrintToChat(target, "[SM] Админ \x03%s удалил Ваш префикс.", sAdmin);
            PrintToChat(client, "[SM] Вы удалили префикс игроку \x03%s.", sTarger);
            g_bIsTag[target] = false;
            g_sGetTag[target][0] = '\0';
            MenuDelTag(client);
            DBI_UpdateInfo(target);
        }
    }
}

MenuConfirmTag(client)
{
    new Handle:menu = CreateMenu(_MenuConfirmTag, MENU_ACTIONS_DEFAULT);
    new String:buffer[256];
    Format(buffer, 255, "Вы написали этот префикс:\n%10s%s\nВсе верно?\n \n", " ", buffer);
    SetMenuTitle(menu, buffer);
    AddMenuItem(menu, "", "Да. Продолжить", 0);
    AddMenuItem(menu, "", "Нет. Написать другой", 0);
    if (GetArraySize(g_arInAdvanceTag))
    {
        AddMenuItem(menu, "", "Нет. Выбрать из списка", 0);
    }
    SetMenuExitButton(menu, true);
    DisplayMenu(menu, client, 0);
}

public _MenuConfirmTag(Handle:menu, MenuAction:action, client, item)
{
    if (action == MenuAction:4)
    {
        if (item == 0)
        {
            MenuColorTag(client);
        }
        else
        {
            if (item == 1)
            {
                g_bCreateTag[client] = true;
                PrintToChat(client, "[SM] Напишите в чат свой желаемый префикс");
            }
            else
            {
                if (item == 2)
                {
                    MenuTag(client);
                }
            }
        }
    }
    else
    {
        if (action == MenuAction:16)
        {
            CloseHandle(menu);
        }
    }
}

public Action:OnClientSayCommand(client, const String:command[], const String:sArgs[])
{
    if (client && IsClientInGame(client))
    {
        decl String:sText[256];
        strcopy(sText, 255, sArgs);
        TrimString(sText);
        StripQuotes(sText);
        if (sArgs[1] == 64 || sArgs[1] == 47)
        {
            return Plugin_Continue;
        }
        if (g_bCreateTag[client])
        {
            if (strlen(sText) < 2)
            {
                PrintToChat(client, "[SM] Ошибка. Минимальное количество символов \x03(2)");
                return Plugin_Handled;
            }
            strcopy(g_sBufferTag[client], 100, sText);
            MenuConfirmTag(client);
            g_bCreateTag[client] = false;
            return Plugin_Handled;
        }
        if (g_bIsTag[client])
        {
            decl String:buffer[256], String:sName[64];
            GetClientName(client, sName, 64);
            new iColor = ReplaceColors(g_sGetColorTag[client]);
            FormatEx(buffer, 255, "%s[%s] %s: %s", (iColor == -2) ? "" : ((iColor == -1) ? "" : "\x03"), g_sGetTag[client], sName, sText);
            switch (iColor)
            {
                case -2, -1, 0:
                {
                    for (new target = 1; target <= MaxClients; target++)
                    {
                        if (IsClientInGame(target) && !IsFakeClient(client))
                        {
                            PrintToChat(target, buffer);
                        }
                    }
                }
                case 1, 2, 3:
                {
                    PrintSayToChatAll(buffer, iColor);
                }
                case 4:
                {
                    PrintSayAll(client, buffer);
                }
            }
            return Plugin_Handled;
        }
    }
    return Plugin_Continue;
}

PrintSayAll(client, String:text[])
{
    new Handle:h = StartMessageAll("SayText2", 0);
    if (h)
    {
        BfWriteByte(h, client);
        BfWriteByte(h, 1);
        BfWriteString(h, text);
        EndMessage();
    }
}

PrintSayToChatAll(String:text[], iColor)
{
    new iTarget = FindPlayerByTeam(iColor);
    if (iTarget)
    {
        new Handle:h = StartMessageAll("SayText2", 0);
        if (h)
        {
            BfWriteByte(h, iTarget);
            BfWriteByte(h, 1);
            BfWriteString(h, text);
            EndMessage();
        }
    }
    else
    {
        PrintMsgToAll(text);
    }
}

PrintMsgToAll(String:text[])
{
    for (new i = 1; i <= MaxClients; i++)
    {
        if (IsClientInGame(i))
        {
            new Handle:hBf = StartMessageOne("SayText2", i, 0);
            if (hBf)
            {
                BfWriteByte(hBf, i);
                BfWriteByte(hBf, 1);
                BfWriteString(hBf, text);
                EndMessage();
            }
        }
    }
}

ReplaceColors(String:color[])
{
    if (StrContains(color, "{GREEN}", true) != -1)
    {
        return -1;
    }
    if (StrContains(color, "{LIGHTGREEN}", true) != -1)
    {
        return 0;
    }
    if (StrContains(color, "{GRAY}", true) != -1)
    {
        return 1;
    }
    if (StrContains(color, "{RED}", true) != -1)
    {
        return 2;
    }
    if (StrContains(color, "{BLUE}", true) != -1)
    {
        return 3;
    }
    if (StrContains(color, "{TEAM}", true) != -1)
    {
        return 4;
    }
    return -2;
}

FindPlayerByTeam(iTeam)
{
    for (new i = 1; i <= MaxClients; i++)
    {
        if (IsClientInGame(i) && GetClientTeam(i) == iTeam)
        {
            return i;
        }
    }
    return -1;
}

OnClearInfo(client)
{
    g_bIsTag[client] = false;
    g_iTimeTag[client] = 0;
    g_sGetTag[client][0] = '\0';
    strcopy(g_sGetColorTag[client], 16, "{DEFAULT}");
}

DBI_Create()
{
    decl String:buffer[256];
    g_hDB_TagClients = SQLite_UseDatabase("prefix", buffer, 255);
    if (!g_hDB_TagClients)
    {
        LogError("SQLite_UseDatabase error: %s", buffer);
        SetFailState("SQLite_UseDatabase error: %s", buffer);
    }
    SQL_LockDatabase(g_hDB_TagClients);
    Format(buffer, 255, "CREATE TABLE IF NOT EXISTS %s (steam TEXT(%i), tag_name TEXT(%i), color_tag TEXT(%i), time INT);", "prefix", 64, 100, 16);
    SQL_FastQuery(g_hDB_TagClients, buffer, -1);
    SQL_UnlockDatabase(g_hDB_TagClients);
}

DBI_SelectInfo(client)
{
    if (!IsClientInGame(client) || IsFakeClient(client))
    {
        return;
    }
    decl String:buffer[256];
    Format(buffer, 255, "SELECT * FROM %s WHERE steam = '%s' LIMIT 1;", "prefix", g_AuthId_Steam2[client]);
    SQL_TQuery(g_hDB_TagClients, OnSelectClient, buffer, GetClientUserId(client), DBPrio_Normal);
}

DBI_AddInfo(client)
{
    if (!IsClientInGame(client) || IsFakeClient(client))
    {
        return;
    }
    decl String:buffer[256];
    Format(buffer, 255, "INSERT INTO %s (steam, tag_name, color_tag, time) VALUES ('%s', '', '{DEFAULT}', 0);", "prefix", g_AuthId_Steam2[client]);
    SQL_TQuery(g_hDB_TagClients, OnSQLRequest, buffer, 0, DBPrio_Normal);
    decl String:Name[64];
    GetClientName(client, Name, 64);
    LogToFileEx("addons/sourcemod/logs/prefix.txt", "OnAddClient :: %s %s [enable='%s' | time='%i' | tag='%s' | color='%s']", Name, g_AuthId_Steam2[client], (g_bIsTag[client]) ? "true" : "false", g_iTimeTag[client], g_sGetTag[client], g_sGetColorTag[client]);
}

DBI_UpdateInfo(client)
{
    if (IsClientInGame(client) && !IsFakeClient(client))
    {
        decl String:buffer[256];
        Format(buffer, 255, "UPDATE %s SET tag_name = '%s', color_tag = '%s', time = %i WHERE steam = '%s';", "prefix", g_sGetTag[client], g_sGetColorTag[client], g_iTimeTag[client], g_AuthId_Steam2[client]);
        SQL_TQuery(g_hDB_TagClients, OnSQLRequest, buffer, client, DBPrio_Normal);
        decl String:Name[64];
        GetClientName(client, Name, 64);
        LogToFileEx("addons/sourcemod/logs/prefix.txt", "OnUpdateClient :: %s %s [enable='%s' | time='%i' | tag='%s' | color='%s']\n \n", Name, g_AuthId_Steam2[client], (g_bIsTag[client]) ? "true" : "false", g_iTimeTag[client], g_sGetTag[client], g_sGetColorTag[client]);
    }
}

public OnSelectClient(Handle:owner, Handle:hndl, String:error[], any:data)
{
    if (!hndl)
    {
        LogError("OnSelectClient error: %s", error);
        return;
    }
    new client = GetClientOfUserId(data);
    if (!client)
    {
        return;
    }
    OnClearInfo(client);
    if (SQL_FetchRow(hndl))
    {
        if (IsClientInGame(client) && !IsFakeClient(client))
        {
            SQL_FetchString(hndl, 1, g_sGetTag[client], 100, _);
            if (!StrEqual(g_sGetTag[client], "", true))
            {
                SQL_FetchString(hndl, 2, g_sGetColorTag[client], 16, _);
                g_iTimeTag[client] = SQL_FetchInt(hndl, 3, _);
                g_bIsTag[client] = true;
                decl String:Name[64];
                GetClientName(client, Name, 64);
                LogToFileEx("addons/sourcemod/logs/prefix.txt", "OnSelectClient :Get Array: %s %s [enable='%s' | time='%i' | tag='%s' | color='%s']\n \n", Name, g_AuthId_Steam2[client], (g_bIsTag[client]) ? "true" : "false", g_iTimeTag[client], g_sGetTag[client], g_sGetColorTag[client]);
            }
        }
    }
    else
    {
        DBI_AddInfo(client);
    }
}

public OnSQLRequest(Handle:owner, Handle:hndl, String:error[], any:data)
{
    if (!hndl)
    {
        LogError("OnSQLRequest error: %s", error);
        return;
    }
}
 

Вложения

  • New Script.smx
    13.6 КБ · Просмотры: 3
  • New Script.sp
    21.1 КБ · Просмотры: 12

Felton

Участник
Сообщения
799
Реакции
59

babka68

1 Error
/// New Script.sp
/ New Script.sp(121) : error 092: number of arguments does not match definition
 

babka68

Участник
Сообщения
2,124
Реакции
956

babka68

1 Error
/// New Script.sp
/ New Script.sp(121) : error 092: number of arguments does not match definition
скачал _4 / smdrop-1.6 / Downloads — Bitbucket
1.png
 

Felton

Участник
Сообщения
799
Реакции
59

babka68

Да всё скомпелил все нормально.У меня был косяк.Но вот плагин не пашет .Ошибок нет.Даю себе префикс пишет что успешно выдан префикс а на самом деле его нет.Может сам плагин кривой?Вот лог
L 07/03/2021 - 17:04:24: OnClientPutInServer :: = Go - Ша = STEAM_0:0:833584498
L 07/03/2021 - 17:04:24: OnSelectClient :Get Array: = Go - Ша = STEAM_0:0:833584498 [enable='true' | time='1625407442' | tag='[ADMIN]' | color='{RED}']
 

🟡differend🟢

Что хочу - то и делаю
Сообщения
975
Реакции
661
Подскажите как добавить еще вариантов выигрыша. Попробовал сам добавить, но чет warningi и error меня преследуют.
 

Вложения

  • lotshop_v4.sp
    23.3 КБ · Просмотры: 16

Pr[E]fix

Code
Сообщения
171
Реакции
29
Подскажите как реализовать такую штуку как в этом модуле от ws, интересует только заряд медика, сам процесс заряда. Сам sp прикрепил,
 

Вложения

  • VIP_Teammates_Medic.sp
    11.1 КБ · Просмотры: 16
  • заряд.png
    заряд.png
    26.1 КБ · Просмотры: 75

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
@Pr[E]fix, вот этот код за формирование прогрессбара отвечает:
C-подобный:
        new Float:fNum = FloatMul(100.0, FloatDiv(g_fMedicProgresBarPos[client], CVAR_RE_MAX));
        decl String:sBuffer[32];
        if(fNum > 100.0) fNum = 100.0;
        if(fNum < 0.0) fNum = 0.0;
        new i, iBuffer;
        iBuffer = RoundFloat(FloatMul(0.25, fNum));
        for (; i < iBuffer; i++) sBuffer[i] = 35;    // символ #
        for (; i < 25; i++) sBuffer[i] = 61;          // символ =
        iBuffer = RoundFloat(fNum);

        g_fMedicProgresBarPos[client] += CVAR_RE_INC;

        PrintHintText(client, "Заряд медика: %i%%\n[%s]", iBuffer, sBuffer);
 

Pr[E]fix

Code
Сообщения
171
Реакции
29
@Pr[E]fix, вот этот код за формирование прогрессбара отвечает:
C-подобный:
        new Float:fNum = FloatMul(100.0, FloatDiv(g_fMedicProgresBarPos[client], CVAR_RE_MAX));
        decl String:sBuffer[32];
        if(fNum > 100.0) fNum = 100.0;
        if(fNum < 0.0) fNum = 0.0;
        new i, iBuffer;
        iBuffer = RoundFloat(FloatMul(0.25, fNum));
        for (; i < iBuffer; i++) sBuffer[i] = 35;    // символ #
        for (; i < 25; i++) sBuffer[i] = 61;          // символ =
        iBuffer = RoundFloat(fNum);

        g_fMedicProgresBarPos[client] += CVAR_RE_INC;

        PrintHintText(client, "Заряд медика: %i%%\n[%s]", iBuffer, sBuffer);
1625761188843.png
1625761219935.png
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
@Pr[E]fix, ну дык синтаксис же старый
переведи на новый и всё скомпилится
 

d3NDI

Участник
Сообщения
59
Реакции
26
Привет всем. Можете добавить в vip healthshot эффект по бокам и скорость x2 на 2-3 секунды после использования?
Про эффект, почитав чуть информации на других форумах, понял что это делает m_flHealthShotBoostExpirationTime.

Заранее благодарю
Сообщения автоматически склеены:

@Grey83 может ты сможешь помочь с этим?
 

Вложения

  • VIP_Healthshot_1.3.sp
    1.4 КБ · Просмотры: 12
  • 1626529089961.png
    1626529089961.png
    620.3 КБ · Просмотры: 70
Последнее редактирование:

HooLIGUN

MatchMaking CS:S / RGMIX.ru
Сообщения
1,062
Реакции
267
Может кто помочь с плагином?
Нужна функция "Поменять игроков местами в командах" - то бишь выбрать 2 игрока из разных команд и одновременно поменять их местами
Есть плагин аля teamswitch , но там сначала одного игрока перекидываешь, затем тоже самое проделываешь для другого.
Задумка:
В админке есть пункт "Поменять местами игроков", в нем сначала игроки одной команды (например Т), выбираешь игрока которого хочешь переместить за КТ, затем открывается список другой команды (КТ), выбираешь игрока которого хочешь переместить за Т,
После выбора двух игроков появляется пункт "Когда переместить" и режимы "Сразу" ,"В конце раунда", "После смерти обоих"

Желаемая структура меню:
C-подобный:
-Админ меню:
            -Управление игроками:
                                    Поменять местами:
                                                    - Команта Т (выбор игрока):
                                                    Terrorist_nick_1
                                                    Terrorist_nick_2
                                                    Terrorist_nick_3
                                                    Terrorist_nick_4
                                                    И т.д.
                                                    - Команда КТ (выбор игрока):
                                                    CT_nick_1
                                                    CT_nick_2
                                                    CT_nick_3
                                                    CT_nick_4
                                                                - Когда переместить:
                                                                Сразу
                                                                В конце раунда
                                                                После смерти обоих
Игра CS:S Steam, SM 1.10
Куплю плагин, свзяь в ЛС
 

StormX

Участник
Сообщения
891
Реакции
302
Кто сможет подправить плагин под CSS OB за денежку?
Убрать ограничение на символы.
На CSGO с этим проблем нету, а на OB есть.
Игрался с этими параметрами
char sText[2048];
char sBuffer[2048];
Без результатно 😁
 

Вложения

  • adverts.sp
    4.3 КБ · Просмотры: 12
Сверху Снизу