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

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
Какой тип m_iCompetitiveRankType у wingman ranks?
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
@Mr_panica, нельзя. Оффтоп

@Loco, если это "Напарники", то вроде 7.
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
@Mr_panica, нельзя. Оффтоп

@Loco, если это "Напарники", то вроде 7.
Ставит дефолтные всё-ровно. Тестил на старом модуле Fakerank для LR
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
Ставит дефолтные всё-ровно.
Потому что просто сменить тип ранга - недостаточно. Там ещё другие цифры по итогу будут в самом свойстве ранга. Какие именно - не подскажу, мне давно @komashchenko скидывал. У него имеет смысл спросить.
 

Ice_Sochi

Участник
Сообщения
709
Реакции
413
Ловлю вылет при подключении к серверу:
Client "тЩб SUBARU" connected.
Dropped тЩб SUBARU from server: Connection rejected by game

Дело в коде, подскажите пожалуйста, в чем моя ошибка?
C-подобный:
public bool OnClientConnect(int client, char[] rejectmsg, int maxlen)
{
    new String:steamid[32];
    GetClientAuthId(client, AuthId_Steam2, steamid, sizeof(steamid));
    new String:clientname[32];
    GetClientName(client, clientname, 32);
    char sQuery[64];
    
    Format(sQuery, sizeof(sQuery), "INSERT INTO %s (steamid, nickname) VALUES (%d,'%s')", TBL_PLAYERS, steamid, clientname);
}
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
В конец функции допишите return true;. По умолчанию, она "возвращает" false, в этом случае SM отклоняет соединение в этом событии.

P.S.: В OnClientConnect(), SteamID может быть (и будет) недоступен.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,981
Ice_Sochi, ты должен в конце возвращать true чтобы игрок мог подключиться
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
@Ice_Sochi, и через 0.1 секунду Стима тоже может и не быть. Лучше слушайте событие OnClientAuthorized(). Оно срабатывает, когда SteamID уже гарантированно доступен.
 

smxnet

Участник
Сообщения
80
Реакции
4
Привет ребят я декомпилировал плагин но скомпилировать не могу как понимаю его надо править скриптеры или кто знает кто может помогите исправить скрипт что бы можно было бы его без ошибок скомпилировать и выложите sp (заранее благодарю плагин нужен для сервера css steam)
C-подобный:
public PlVers:__version =
{
    version = 5,
    filevers = "1.5.2-dev+3931",
    date = "07/05/2017",
    time = "20:17:14"
};
new Float:NULL_VECTOR[3];
new String:NULL_STRING[4];
public Extension:__ext_core =
{
    name = "Core",
    file = "core",
    autoload = 0,
    required = 0,
};
new MaxClients;
public Extension:__ext_sdktools =
{
    name = "SDKTools",
    file = "sdktools.ext",
    autoload = 1,
    required = 1,
};
public Extension:__ext_cstrike =
{
    name = "cstrike",
    file = "games/game.cstrike.ext",
    autoload = 0,
    required = 1,
};

new g_iMode;
new Handle:g_hTimer;
new bool:g_bInZone[66];
new Handle:g_hZonesArray;
public __ext_core_SetNTVOptional()
{
    MarkNativeAsOptional("GetFeatureStatus");
    MarkNativeAsOptional("RequireFeature");
    MarkNativeAsOptional("AddCommandListener");
    MarkNativeAsOptional("RemoveCommandListener");
    MarkNativeAsOptional("BfWriteBool");
    MarkNativeAsOptional("BfWriteByte");
    MarkNativeAsOptional("BfWriteChar");
    MarkNativeAsOptional("BfWriteShort");
    MarkNativeAsOptional("BfWriteWord");
    MarkNativeAsOptional("BfWriteNum");
    MarkNativeAsOptional("BfWriteFloat");
    MarkNativeAsOptional("BfWriteString");
    MarkNativeAsOptional("BfWriteEntity");
    MarkNativeAsOptional("BfWriteAngle");
    MarkNativeAsOptional("BfWriteCoord");
    MarkNativeAsOptional("BfWriteVecCoord");
    MarkNativeAsOptional("BfWriteVecNormal");
    MarkNativeAsOptional("BfWriteAngles");
    MarkNativeAsOptional("BfReadBool");
    MarkNativeAsOptional("BfReadByte");
    MarkNativeAsOptional("BfReadChar");
    MarkNativeAsOptional("BfReadShort");
    MarkNativeAsOptional("BfReadWord");
    MarkNativeAsOptional("BfReadNum");
    MarkNativeAsOptional("BfReadFloat");
    MarkNativeAsOptional("BfReadString");
    MarkNativeAsOptional("BfReadEntity");
    MarkNativeAsOptional("BfReadAngle");
    MarkNativeAsOptional("BfReadCoord");
    MarkNativeAsOptional("BfReadVecCoord");
    MarkNativeAsOptional("BfReadVecNormal");
    MarkNativeAsOptional("BfReadAngles");
    MarkNativeAsOptional("BfGetNumBytesLeft");
    MarkNativeAsOptional("PbReadInt");
    MarkNativeAsOptional("PbReadFloat");
    MarkNativeAsOptional("PbReadBool");
    MarkNativeAsOptional("PbReadString");
    MarkNativeAsOptional("PbReadColor");
    MarkNativeAsOptional("PbReadAngle");
    MarkNativeAsOptional("PbReadVector");
    MarkNativeAsOptional("PbReadVector2D");
    MarkNativeAsOptional("PbGetRepeatedFieldCount");
    MarkNativeAsOptional("PbReadRepeatedInt");
    MarkNativeAsOptional("PbReadRepeatedFloat");
    MarkNativeAsOptional("PbReadRepeatedBool");
    MarkNativeAsOptional("PbReadRepeatedString");
    MarkNativeAsOptional("PbReadRepeatedColor");
    MarkNativeAsOptional("PbReadRepeatedAngle");
    MarkNativeAsOptional("PbReadRepeatedVector");
    MarkNativeAsOptional("PbReadRepeatedVector2D");
    MarkNativeAsOptional("PbSetInt");
    MarkNativeAsOptional("PbSetFloat");
    MarkNativeAsOptional("PbSetBool");
    MarkNativeAsOptional("PbSetString");
    MarkNativeAsOptional("PbSetColor");
    MarkNativeAsOptional("PbSetAngle");
    MarkNativeAsOptional("PbSetVector");
    MarkNativeAsOptional("PbSetVector2D");
    MarkNativeAsOptional("PbAddInt");
    MarkNativeAsOptional("PbAddFloat");
    MarkNativeAsOptional("PbAddBool");
    MarkNativeAsOptional("PbAddString");
    MarkNativeAsOptional("PbAddColor");
    MarkNativeAsOptional("PbAddAngle");
    MarkNativeAsOptional("PbAddVector");
    MarkNativeAsOptional("PbAddVector2D");
    MarkNativeAsOptional("PbReadMessage");
    MarkNativeAsOptional("PbReadRepeatedMessage");
    MarkNativeAsOptional("PbAddMessage");
    VerifyCoreVersion();
    return 0;
}

bool:operator>(Float:,Float:)(Float:oper1, Float:oper2)
{
    return FloatCompare(oper1, oper2) > 0;
}

bool:operator>=(Float:,Float:)(Float:oper1, Float:oper2)
{
    return FloatCompare(oper1, oper2) >= 0;
}

bool:operator<=(Float:,Float:)(Float:oper1, Float:oper2)
{
    return FloatCompare(oper1, oper2) <= 0;
}

public OnPluginStart()
{
    g_hZonesArray = CreateArray(1, 0);
    HookEvent("round_freeze_end", OnRoundStart, EventHookMode:1);
    HookEvent("round_end", OnRoundEnd, EventHookMode:1);
    return 0;
}

bool:IsClientInZone(&iClient, Float:flMins[3], Float:flMaxs[3])
{
    decl Float:flOrigin[3];
    GetClientAbsOrigin(iClient, flOrigin);
    new var1;
    if (flOrigin[0] >= flMins[0] && flOrigin[0] <= flMaxs[0] && flOrigin[1] >= flMins[1] && flOrigin[1] <= flMaxs[1] && flOrigin[2] >= flMins[2] && flOrigin[2] <= flMaxs[2])
    {
        return true;
    }
    return false;
}

CloseHandleArray(Handle:adt_array)
{
    new i;
    while (GetArraySize(adt_array) > i)
    {
        CloseHandle(GetArrayCell(adt_array, i, 0, false));
        i++;
    }
    return 0;
}

public OnMapStart()
{
    CloseHandleArray(g_hZonesArray);
    ClearArray(g_hZonesArray);
    decl String:sMap[128];
    GetCurrentMap(sMap, 128);
    if (strncmp(sMap, "de_", 3, true))
    {
        if (strncmp(sMap, "cs_", 3, true))
        {
            g_iMode = 0;
        }
        g_iMode = 1;
    }
    else
    {
        g_iMode = 2;
    }
    decl String:config[256];
    BuildPath(PathType:0, config, 256, "data/zones/%s.cfg", sMap);
    if (FileExists(config, false))
    {
        new Handle:hKeyValues = CreateKeyValues("Zones", "", "");
        FileToKeyValues(hKeyValues, config);
        if (!KvGotoFirstSubKey(hKeyValues, true))
        {
            CloseHandle(hKeyValues);
            return 0;
        }
        decl Float:vector1[3];
        decl Float:vector2[3];
        decl Float:fMin[3];
        decl Float:fMax[3];
        decl Handle:TempArray;
        decl i;
        do {
            TempArray = CreateArray(3, 0);
            KvGetVector(hKeyValues, "coordinates 1", vector1, 1688);
            KvGetVector(hKeyValues, "coordinates 2", vector2, 1688);
            i = 0;
            while (i < 3)
            {
                if (vector1[i] > vector2[i])
                {
                    fMin[i] = vector2[i];
                    fMax[i] = vector1[i];
                }
                else
                {
                    fMin[i] = vector1[i];
                    fMax[i] = vector2[i];
                }
                i++;
            }
            PushArrayArray(TempArray, fMin, 3);
            PushArrayArray(TempArray, fMax, 3);
            PushArrayCell(TempArray, KvGetNum(hKeyValues, "restrict_team", 0));
            PushArrayCell(g_hZonesArray, TempArray);
        } while (KvGotoNextKey(hKeyValues, true));
        CloseHandle(hKeyValues);
    }
    return 0;
}

public OnRoundEnd(Handle:event, String:name[], bool:dontBroadcast)
{
    if (g_hTimer)
    {
        KillTimer(g_hTimer, false);
        g_hTimer = MissingTAG:0;
    }
    return 0;
}

public OnRoundStart(Handle:event, String:name[], bool:dontBroadcast)
{
    if (g_hTimer)
    {
        KillTimer(g_hTimer, false);
        g_hTimer = MissingTAG:0;
    }
    new i = 1;
    while (i <= MaxClients)
    {
        g_bInZone[i] = 0;
        i++;
    }
    g_hTimer = CreateTimer(20.0, Timer_StartCheck, any:0, 0);
    return 0;
}

public Action:Timer_StartCheck(Handle:timer)
{
    Timer_Check(Handle:0);
    g_hTimer = CreateTimer(7.0, Timer_Check, any:0, 1);
    return Action:4;
}

public Action:Timer_Check(Handle:timer)
{
    new i = 1;
    new iTeam;
    new j;
    new iSize = GetArraySize(g_hZonesArray);
    new Handle:hZone;
    new iZoneTeam;
    new Float:fMin[3] = 0.0;
    new Float:fMax[3] = 0.0;
    new bool:bInZone;
    new bool:b;
    while (i <= MaxClients)
    {
        new var1;
        if (IsClientInGame(i) && IsPlayerAlive(i))
        {
            iTeam = GetClientTeam(i);
            if (iTeam > 1)
            {
                bInZone = g_bInZone[i];
                b = false;
                j = 0;
                while (j < iSize)
                {
                    hZone = GetArrayCell(g_hZonesArray, j, 0, false);
                    iZoneTeam = GetArrayCell(hZone, 2, 0, false);
                    new var2;
                    if (g_iMode != 1 && iTeam != g_iMode && iTeam != iZoneTeam)
                    {
                    }
                    else
                    {
                        GetArrayArray(hZone, 0, fMin, 3);
                        GetArrayArray(hZone, 1, fMax, 3);
                        if (IsClientInZone(i, fMin, fMax))
                        {
                            if (bInZone)
                            {
                                PrintToChat(i, "\x07FF0000Покиньте зону респы!");
                                SlapPlayer(i, 25, true);
                            }
                            else
                            {
                                PrintToChat(i, "\x07FF0000У вас есть 7 секунд чтобы покинуть зону респы!");
                                g_bInZone[i] = 1;
                            }
                            b = true;
                            if (!b)
                            {
                                g_bInZone[i] = 0;
                            }
                        }
                    }
                    j++;
                }
                if (!b)
                {
                    g_bInZone[i] = 0;
                }
            }
        }
        i++;
    }
    return Action:0;
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,981
а имени у плагина не было, что ли?
судя по коду это запрет на нахождение на респе больше 7 секунд
иожет такие давно на форуме выложены
 

alexmy

Участник
Сообщения
284
Реакции
13
Всем привет. пытаюсь узнать название территории но увы. Как правильно можно сделать отладку. А что у меня только символы не понятно показывается и всё.
PHP:
int area = event.GetInt("area");
    
    char sBuffer[512];
    FormatEx(sBuffer, sizeof(sBuffer), "%s", area);
    PrintToChatAll(sBuffer);
 

Черная вдова

Участник
Сообщения
2,795
Реакции
670
Всем привет. пытаюсь узнать название территории но увы. Как правильно можно сделать отладку. А что у меня только символы не понятно показывается и всё.
PHP:
int area = event.GetInt("area");
   
    char sBuffer[512];
    FormatEx(sBuffer, sizeof(sBuffer), "%s", area);
    PrintToChatAll(sBuffer);
У тебя area это int а вот "%s" это вывод строки а не int (числа)
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,981
вместо всего твоего кода
C++:
PrintToChatAll("Area: %i", event.GetInt("area"));
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
Как использовать SetListenOverride() на всех игроках?
PHP:
public OnRoundEnd()
{   
    CreateTimer(1.0, Timer_Mute);
}

public Action:Timer_Mute(Handle:hTimer)
{
    for(new i = 1; i <= MaxClients; i++)
    {
        for(new k = 1; k <= MaxClients; k++)
        {
            if ( i == k ) continue;
            SetListenOverride(k, i, Listen_No);
        }
    }   
    return Plugin_Continue;
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,981
Loco, чтобы никто никого не слышал?
C++:
#include <cstrike>
#include <sdktools_voice>

public void OnPluginStart()
{
    HookEvent("round_start", Event_Start, EventHookMode_PostNoCopy);
}

public void Event_Start(Event event, const char[] name, bool dontBroadcast)
{
    CreateTimer(0.1, Timer_Voice, Listen_Default, TIMER_FLAG_NO_MAPCHANGE);
}

public Action CS_OnTerminateRound(float& delay, CSRoundEndReason& reason)
{
    CreateTimer(0.1, Timer_Voice, Listen_No, TIMER_FLAG_NO_MAPCHANGE);
}

public Action Timer_Voice(Handle hTimer, ListenOverride lo)
{
    for(int i = 1, j; i <= MaxClients; i++) if(IsClientInGame(i))
        for(j = 1; j <= MaxClients; j++) if(i != j && IsClientInGame(j))
            SetListenOverride(j, i, lo);
}
 

alexmy

Участник
Сообщения
284
Реакции
13
вместо всего твоего кода
C++:
PrintToChatAll("Area: %i", event.GetInt("area"));
Мля точно, что-то не подумал...
Сообщения автоматически склеены:

Всем привет. Вообщем интересует такое. Делаю вообщем отладку для любопытства хочу, что-то вроде узнать название Энтити или ещё что-то подобное. Много вариантов пробовал, но добился всего лишь, что стал получать цифры.
PHP:
#pragma semicolon 1
#include <sourcemod>

char entname[128];
public void OnPluginStart()
{
    HookEvent("player_use", Event_Player_Use);
}

public Action Event_Player_Use(Event event, const char[] name, bool dontBroadcast)
{
    int id = event.GetInt("targetid");
    {
        if(IsValidEntity(id) && IsValidEdict(id))
        {
            if(GetEdictClassname(id, entname, sizeof(entname)))
            {
                PrintToChatAll("%i", id);
            }
        }
    }
    return Plugin_Continue;
}
Для теста я выбираю функцию которую уже знаю prop_door_rotating_checkpoint но место этого, я получаю цифры. Есть какие нибудь варианты. Чтоб получать название?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,981
ну так ты класс получаешь, но не выводишь в чат
C++:
#pragma semicolon 1

public void OnPluginStart()
{
    HookEvent("player_use", Event_PlayerUse);
}

public void Event_PlayerUse(Event event, const char[] name, bool dontBroadcast)
{
    static int client, id;
    static char cls[128];
    if((client = GetClientOfUserId(event.GetInt("userid"))) && (id = event.GetInt("targetid"))
    && IsValidEntity(id) && GetEntityClassname(id, cls, sizeof(cls)))
        PrintToChatAll("%N use '%s' (%i)", client, cls, id);
}
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
Как заменить модели в teammenu на свои?
44073
 
Сверху Снизу