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

msl1

Участник
Сообщения
162
Реакции
20
Помогите перевести под sourcemod 1.8, часть кода. Сам код написан sm 1.6
PHP:
new i = 1;
    new Handle:hFile = OpenConfig();
    decl String:sTemp[8];
    decl Country[322];   
    for (IntToString(i, sTemp, sizeof(sTemp)); KvJumpToKey(hFile, sTemp, false); i++ ,IntToString(i, sTemp, sizeof(sTemp)))
    {
        KvGetString(hFile, "url", Country, 192, "");
        TrimString(Country);       
        if (strlen(Country) > 0 && KvGetNum(hFile, "enabled", 1))
        {
            KvGetString(hFile, "country", Country[192], 128, "all");
            Country[320] = KvGetNum(hFile, "reversed", 0) ? 1:0;
            Country[321] = KvGetNum(hFile, "showtime", 0);
            PushArrayString(g_trLinks, Country, -1);
        }
        KvRewind(hFile);   
    }
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
Помогите перевести под sourcemod 1.8, часть кода. Сам код написан sm 1.6
PHP:
new i = 1;
    new Handle:hFile = OpenConfig();
    decl String:sTemp[8];
    decl Country[322];  
    for (IntToString(i, sTemp, sizeof(sTemp)); KvJumpToKey(hFile, sTemp, false); i++ ,IntToString(i, sTemp, sizeof(sTemp)))
    {
        KvGetString(hFile, "url", Country, 192, "");
        TrimString(Country);      
        if (strlen(Country) > 0 && KvGetNum(hFile, "enabled", 1))
        {
            KvGetString(hFile, "country", Country[192], 128, "all");
            Country[320] = KvGetNum(hFile, "reversed", 0) ? 1:0;
            Country[321] = KvGetNum(hFile, "showtime", 0);
            PushArrayString(g_trLinks, Country, -1);
        }
        KvRewind(hFile);  
    }
C-подобный:
    int i = 1;
    Handle hFile = OpenConfig();
    char sTemp[8], Country[322];
    for (IntToString(i, sTemp, sizeof(sTemp)); KvJumpToKey(hFile, sTemp, false); i++ ,IntToString(i, sTemp, sizeof(sTemp)))
    {
        KvGetString(hFile, "url", Country, 192, "");
        TrimString(Country);       
        if (strlen(Country) > 0 && KvGetNum(hFile, "enabled", 1))
        {
            KvGetString(hFile, "country", Country[192], 128, "all");
            Country[320] = KvGetNum(hFile, "reversed", 0) ? 1:0;
            Country[321] = KvGetNum(hFile, "showtime", 0);
            PushArrayString(g_trLinks, Country, -1);
        }
        KvRewind(hFile);   
    }
 
  • Мне нравится
Реакции: msl1

msl1

Участник
Сообщения
162
Реакции
20
C-подобный:
    int i = 1;
    Handle hFile = OpenConfig();
    char sTemp[8], Country[322];
    for (IntToString(i, sTemp, sizeof(sTemp)); KvJumpToKey(hFile, sTemp, false); i++ ,IntToString(i, sTemp, sizeof(sTemp)))
    {
        KvGetString(hFile, "url", Country, 192, "");
        TrimString(Country);      
        if (strlen(Country) > 0 && KvGetNum(hFile, "enabled", 1))
        {
            KvGetString(hFile, "country", Country[192], 128, "all");
            Country[320] = KvGetNum(hFile, "reversed", 0) ? 1:0;
            Country[321] = KvGetNum(hFile, "showtime", 0);
            PushArrayString(g_trLinks, Country, -1);
        }
        KvRewind(hFile);  
    }
Ошибка error 092: number of arguments does not match definition
в строке PushArrayString(g_trLinks, Country, -1);
 

gazik003

Участник
Сообщения
34
Реакции
1
кто может написать плагин который выполняет такую функцию: когда КТ режет Т ножом ПКМ то Т становится бессмертен на 3 сек. при этом ХП снимается, но только 50 хп , при последующем ударе ножом его можно убить
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
Extra Cash:
Нужно закрывать Handle
Не нужно/не имеет смысла, потому что:
Они не могут быть закрыты, пока SourceMod не будет выгружен
Вдогонку, если посмотреть в исходники SM, то можно увидеть, что он ничего (абсолютно ничего) не делает при закрытии хендла.
 

Doker0909

Участник
Сообщения
105
Реакции
3
Доброго времени суток. Можно ли написать плагин, который по команде sm_muteoff, в консоль, будет отключать всем игрокам, на сервере, микрофон (как по стандарту, до перезахода, но так чтоб сразу всем) и так же включать микрофоны командой sm_muteon
чтоб эта возможность была доступна администраторам с любым флагом.
или это вопрос в раздел "требуется"
буду безгранично благодарен 😉
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
Доброго времени суток. Можно ли написать плагин, который по команде sm_muteoff, в консоль, будет отключать всем игрокам, на сервере, микрофон (как по стандарту, до перезахода, но так чтоб сразу всем) и так же включать микрофоны командой sm_muteon
чтоб эта возможность была доступна администраторам с любым флагом.
или это вопрос в раздел "требуется"
буду безгранично благодарен 😉
Да, такое можно написать 😉 Оффтоп
Сообщения автоматически склеены:

C-подобный:
#include <sourcemod>
#include <sdktools>

#pragma newdecls required
#pragma semicolon 1

public Plugin myinfo =
{
    name        = "Mute Command",
    version        = "1.0.0",
    author        = "iLoco",
    url            = "hlmod.com"
}

public void OnPluginStart()
{
    RegAdminCmd("sm_muteoff", CMD_MuteOff, ADMFLAG_GENERIC);
    RegAdminCmd("sm_muteon", CMD_MuteOn, ADMFLAG_GENERIC);
}

public Action CMD_MuteOff(int client, int args)
{
    SetListening(true);
}

public Action CMD_MuteOn(int client, int args)
{
    SetListening(false);
}

stock void SetListening(bool isEnable)
{
    for(int i = 1; i <= MaxClients; i++)    if(IsClientAuthorized(i) && IsClientInGame(i) && !IsFakeClient(i))
    {
        for(int p = 1; p <= MaxClients; p++)    if(IsClientAuthorized(p) && IsClientInGame(p) && !IsFakeClient(p))
        {
            SetListenOverride(i, p, isEnable ? Listen_Yes : Listen_No);
            SetListenOverride(p, i, isEnable ? Listen_Yes : Listen_No);
        }
    }
}
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@iLoco, а нафига в каждом цикле создавать переменную p и до 8 тысяч (если на сервере человек 60 играет) раз определять какой флаг отправлять?
Да и отправляется значение каждому игроку для связи с другим игроком по 2 раза.
Короче поле для оптимизации этого кода непаханное.
 

Doker0909

Участник
Сообщения
105
Реакции
3
@iLoco, а нафига в каждом цикле создавать переменную p и до 8 тысяч (если на сервере человек 60 играет) раз определять какой флаг отправлять?
Да и отправляется значение каждому игроку для связи с другим игроком по 2 раза.
Короче поле для оптимизации этого кода непаханное.
буду очень благодарен, если поможешь с оптимизацией))) и я забыл указать - это CSS v34
 

iLoco

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

KiKiEEKi

🏆 🥇
Сообщения
653
Реакции
513
Привет, надеюсь в эту тему с вопросом попал. Как изменить громкость звука если этот звук проигрывает другой плагин? Без редактирование исходника. Если не льзя то возможно ли все звуки на сервере приглушить на какой то процент?
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
Привет, надеюсь в эту тему с вопросом попал. Как изменить громкость звука если этот звук проигрывает другой плагин? Без редактирование исходника. Если не льзя то возможно ли все звуки на сервере приглушить на какой то процент?
AddAmbientSoundHook · sdktools_sound · SourceMod Scripting API Reference и/или AddNormalSoundHook · sdktools_sound · SourceMod Scripting API Reference
через них можно это реализовать
 

gazik003

Участник
Сообщения
34
Реакции
1
Полный запрет удара, ниже вон прислали на 50 урона.
C-подобный:
public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3], float angles[3], int &weapon, int &subtype, int &cmdnum, int &tickcount, int &seed, int mouse[2])
{
    if (IsPlayerAlive(client))
    {
        if (buttons & IN_ATTACK2)
        {
            static char class[32];
            GetClientWeapon(client, class, sizeof(class));
            if(StrContains(class, "knife") != -1 || StrContains(class, "bayonet") != -1)
            {
                buttons &= ~IN_ATTACK2;
                buttons |= IN_ATTACK;
                return Plugin_Changed;
            }
        }
    }
    return Plugin_Continue;
}
работает, но ты походу сделал на лкм а не пкм , быстро ножм бьют просто, можешь поменять по мере возможности?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@Doker0909, вот так всего 2 цикла по игрокам (первый раз поиск валидных игроков, а второй - назначение взаимных правил), добавил команду сброса до дефолтных значений (полезно, если нужно чтобы команды не слышали противоположную) и собщение админу о выполнении команды.
C-подобный:
#pragma newdecls required
#pragma semicolon 1

#include <sdktools_voice>

public void OnPluginStart()
{
    RegAdminCmd("sm_muteoff",    CMD_MuteOff,    ADMFLAG_GENERIC, "Разрешить всем голосовую связь");
    RegAdminCmd("sm_muteon",    CMD_MuteOn,        ADMFLAG_GENERIC, "Заглушить всех");
    RegAdminCmd("sm_mutereset",    CMD_MuteReset,    ADMFLAG_GENERIC, "Сбросить на дефолтное значение");
}

public Action CMD_MuteOff(int client, int args)
{
    SetListening(Listen_Yes);
    ReplyToCommand(client, "Mute disabled");
}

public Action CMD_MuteOn(int client, int args)
{
    SetListening(Listen_No);
    ReplyToCommand(client, "Mute enabled");
}

public Action CMD_MuteReset(int client, int args)
{
    SetListening(Listen_Default);
    ReplyToCommand(client, "Mute reseted");
}

stock void SetListening(ListenOverride override)
{
    int i = 1, clients[MAXPLAYERS], num, j;

    for(; i <= MaxClients; i++) if(IsClientInGame(i) && !IsFakeClient(i)) clients[num++] = i;

    for(i = 0; i < num; i++) for(j = i+1; j < num; j++)
    {
        SetListenOverride(clients[i], clients[j], override);
        SetListenOverride(clients[j], clients[i], override);
    }
}
 
Последнее редактирование:

Doker0909

Участник
Сообщения
105
Реакции
3
@Grey83, огромное спасибо, протестирую и отпишусь по результатам 😇
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@Doker0909, чуть поправил код. Скопируй ещё раз и можно пользоваться.
 

KiKiEEKi

🏆 🥇
Сообщения
653
Реакции
513
Можете готовый написать пожалуйста если там немного работы, я в интернете нашел только пример с заменой звука определенный.
 
Сверху Снизу