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

Zeit

Участник
Сообщения
180
Реакции
34
CS_OnCSWeaponDrop:
#include <sdktools_entinput>
#define SZF(%0) %0, sizeof(%0)

public Action CS_OnCSWeaponDrop(int iClient, int iWeapon)
{
    char sWeapon[32]; GetEdictClassname(iWeapon, SZF(sWeapon));
    if(StrEqual(sWeapon, "weapon_snowball"))
    {
        AcceptEntityInput(iWeapon, "Kill"); // или return Plugin_Handled; // чтоб вообще не выкидывались
    }
 
 
    return Plugin_Continue;
}

Это при условии что у тебя нет никаких там, дуэлей, нестандартных раундов, а так еще шаманить надо будет.

Тебе как вариант еще удалять каждые N секунд разбросанные(дропнутые) снежки по карте. Из 3 в запасе, один сцука дропается. "3" это у меня максимум снежков, может у тебя 99, хз что там будет вообще.

timer:
Handle hTimer;

public void OnMapStart()
{
    hTimer = CreateTimer(30., timer_del_snow, _, TIMER_REPEAT);
}

public void OnMapEnd()
{
    delete hTimer;
}


Action timer_del_snow(Handle timer)
{
    int iMaxEntities = GetMaxEntities();
    char sWeapon[64];

    for(int i = MaxClients; i < iMaxEntities; i++)
    {
        if(IsValidEdict(i) && IsValidEntity(i))
        {
            GetEdictClassname(i, sWeapon, sizeof sWeapon);
            if((StrContains(sWeapon,  "weapon_snowball") != -1)
            {
                RemoveEdict(i);
            }
        }
    }
     return Plugin_Continue;
}

public Action CS_OnCSWeaponDrop(int iClient, int iWeapon)
{
    char sWeapon[32]; GetEdictClassname(iWeapon, SZF(sWeapon));
    if(StrEqual(sWeapon, "weapon_snowball"))
    {
        AcceptEntityInput(iWeapon, "Kill");
    }
    return Plugin_Continue;
}
// C:\Users\User\Desktop\comp\scripting\SnowballDropFix.sp(5) : error 001: expected token: "-identifier-", but found ","
// C:\Users\User\Desktop\comp\scripting\SnowballDropFix.sp(25) : error 001: expected token: ")", but found "{"
// C:\Users\User\Desktop\comp\scripting\SnowballDropFix.sp(30) : warning 217: loose indentation
// C:\Users\User\Desktop\comp\scripting\SnowballDropFix.sp(35) : error 017: undefined symbol "SZF"
// C:\Users\User\Desktop\comp\scripting\SnowballDropFix.sp(38) : error 017: undefined symbol "AcceptEntityInput"
 

google>

oldgamers
Сообщения
373
Реакции
210
// C:\Users\User\Desktop\comp\scripting\SnowballDropFix.sp(5) : error 001: expected token: "-identifier-", but found ","
// C:\Users\User\Desktop\comp\scripting\SnowballDropFix.sp(25) : error 001: expected token: ")", but found "{"
// C:\Users\User\Desktop\comp\scripting\SnowballDropFix.sp(30) : warning 217: loose indentation
// C:\Users\User\Desktop\comp\scripting\SnowballDropFix.sp(35) : error 017: undefined symbol "SZF"
// C:\Users\User\Desktop\comp\scripting\SnowballDropFix.sp(38) : error 017: undefined symbol "AcceptEntityInput"
PHP:
#include <sdktools_entinput>
#define SZF(%0) %0, sizeof(%0)

Handle hTimer;
int iWeapon;

public void OnPluginStart()
{
    iWeapon = FindSendPropInfo("CBaseCombatWeapon", "m_hOwnerEntity");
}
public void OnMapStart()
{
    hTimer = CreateTimer(30.0, timer_del_snow, _, TIMER_REPEAT);
}

public void OnMapEnd()
{
    delete hTimer;
}


Action timer_del_snow(Handle timer)
{
    int iMaxEntities = GetMaxEntities();
    char sWeapon[64];

    for(int i = MaxClients; i < iMaxEntities; i++)
    {
        if(IsValidEdict(i) && IsValidEntity(i))
        {
            GetEdictClassname(i, sWeapon, sizeof sWeapon);
            if((StrContains(sWeapon, "weapon_snowball") != -1) && GetEntDataEnt2(i, iWeapon) == -1)
            {
                RemoveEdict(i);
            }
        }
    }
     return Plugin_Continue;
}

public Action CS_OnCSWeaponDrop(int iClient, int iWeapon)
{
    char sWeapon[32]; GetEdictClassname(iWeapon, SZF(sWeapon));
    if(StrEqual(sWeapon, "weapon_snowball"))
    {
        AcceptEntityInput(iWeapon, "Kill");
    }
    return Plugin_Continue;
}
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@Zeit, так будет блочить и уничтожать снежки, которые игрок попытается подобрать:
C-подобный:
#include <sdkhooks>
#include <sdktools_entinput>
#tryinclude <sdktools_variant_t>

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

public void OnClientPutInServer(int client)
{
    SDKHook(client, SDKHook_WeaponCanUse, BlockSnowball);
    SDKHook(client, SDKHook_WeaponEquip, BlockSnowball);
}

public Action BlockSnowball(int client, int weapon)
{
    static char cls[20]
    if(GetEntityClassname(weapon, cls, sizeof(cls)) && strlen(cls) == 15 && !strcmp(cls[7], "snowball", false))
    {
        SetVariantString("OnUser1 !self:kill::0.1:1");
        AcceptEntityInput(weapon, "AddOutput");
        AcceptEntityInput(weapon, "FireUser1");
        return Plugin_Handled;
    }

    return Plugin_Continue;
}
Загружать плагин можно в любой момент
 
Последнее редактирование:
  • Мне нравится
Реакции: Zeit

Zeit

Участник
Сообщения
180
Реакции
34
@Zeit, так будет блочить и уничтожать снежки, которые игрок попытается подобрать:
C-подобный:
#include <sdkhooks>
#include <sdktools_entinput>
#tryinclude <sdktools_variant_t>

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

public void OnClientPutInServer(int client)
{
    SDKHook(client, SDKHook_WeaponCanUse, BlockSnowball);
    SDKHook(client, SDKHook_WeaponEquip, BlockSnowball);
}

public Action BlockSnowball(int client, int weapon)
{
    static char cls[20]
    if(GetEntityClassname(weapon, cls, sizeof(cls)) && strlen(cls) == 15 && !strcmp(cls[7], "snowball", false))
    {
        SetVariantString("OnUser1 !self:kill::0.1:1");
        AcceptEntityInput(weapon, "AddOutput");
        AcceptEntityInput(weapon, "FireUser1");
        return Plugin_Handled;
    }

    return Plugin_Continue;
}
Загружать плагин можно в любой момент
Снежки из кучи можно будет брать? У меня изначально была проблема что можно дропать на G из 255 снежков все, и тем самым крашить. К тому же во время ножевого раунда игроки нажимают на кучу снежков, затем они также как и при дропе валяются и также вызывают краш. Надо как-то запретить выдачу снежков из кучи или из снега если игрок не может брать любое оружие как пример нож раунд
 

Grey83

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

google>

oldgamers
Сообщения
373
Реакции
210
Снежки из кучи можно будет брать? У меня изначально была проблема что можно дропать на G из 255 снежков все, и тем самым крашить. К тому же во время ножевого раунда игроки нажимают на кучу снежков, затем они также как и при дропе валяются и также вызывают краш. Надо как-то запретить выдачу снежков из кучи или из снега если игрок не может брать любое оружие как пример нож раунд
Ну так надо в коде и описывать, если это CR_IsCustomRound и CR_GetCurrentRoundName такой-то, то делать то-то а если просто CR_IsCustomRound то это, если ничего из этих то еще что-то.
 

npocmoyuri

Участник
Сообщения
50
Реакции
1
Надеюсь я туда написал.
Не бейте палкой, если что.
Нашёл пару плагинов которые довольно долго искал, что бы нормально компилировались.
Плагины рабочие но есть пару моментов которые я бы хотел исправить.
Но из-за моего узкого знания в этом, я прошу помощи у знающих в этом людей.

Приложу исходники и переводы в файлы

1) Плагин который при убийстве показывает кто убил, с какого растояния и оружия.
Нужно сделать что бы при написании команды sm_killerinfo , в чате было сообщение по типу:
- Информация включена
- Информация выключена
Просто вроде в исходнике эта функция есть, но при написании команды, в чате пусто, хотя информацию выключает и включает.

2) Плагин показывающий наибольшее количество убийств и урон
Сделать возможность поставить свой Тег в плагин
- [ТЕГ] Макс. Урон
- [ТЕГ] Макс. Убийств
Там просто так всё сложно устроено для меня(
В обычном коде где PrintToChat я бы и сам добавил Тег к плагину, а тут не шарю...
Сообщения автоматически склеены:

Надеюсь я туда написал.
Не бейте палкой, если что.
Нашёл пару плагинов которые довольно долго искал, что бы нормально компилировались.
Плагины рабочие но есть пару моментов которые я бы хотел исправить.
Но из-за моего узкого знания в этом, я прошу помощи у знающих в этом людей.

Приложу исходники и переводы в файлы

1) Плагин который при убийстве показывает кто убил, с какого растояния и оружия.
Нужно сделать что бы при написании команды sm_killerinfo , в чате было сообщение по типу:
- Информация включена
- Информация выключена
Просто вроде в исходнике эта функция есть, но при написании команды, в чате пусто, хотя информацию выключает и включает.

2) Плагин показывающий наибольшее количество убийств и урон
Сделать возможность поставить свой Тег в плагин
- [ТЕГ] Макс. Урон
- [ТЕГ] Макс. Убийств
Там просто так всё сложно устроено для меня(
В обычном коде где PrintToChat я бы и сам добавил Тег к плагину, а тут не шарю...
 

Вложения

  • KillerInfoDisplay.sp
    12.5 КБ · Просмотры: 6
  • KillerInfoDisplay.txt
    2.6 КБ · Просмотры: 5
  • Destructive.sp
    3.8 КБ · Просмотры: 7
  • Destructive.txt
    1.1 КБ · Просмотры: 4

sviridov_artem

Добрая душа
Сообщения
134
Реакции
30
Всем привет, нужен плагин, перезагрузка карты на ту же, которая сейчас стоит, при отправке команды через консоль сервера.
 

bigboi300

Не удаляю копирайты
Сообщения
153
Реакции
28
Всем привет, нужен плагин, перезагрузка карты на ту же, которая сейчас стоит, при отправке команды через консоль сервера.
C-подобный:
public void OnPluginStart()
{
    RegServerCmd("sm_remap", reloadmap)
}

public Action reloadmap(int args)
{
    char mapname[64];
    GetCurrentMap(mapname, sizeof(mapname));
    ServerCommand("sm_map %s", mapname);
    return Plugin_Handled;
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@bigboi300, я себе 4 года назад (судя по дате создания файла) сделал такое с пунктом в админке и извещением в чат/консоль (смотря куда прописывалась команда).
Ну и таймер на 3 секунды сделал, чтобы можно было успеть прочитать ответ плагина. =)
 

Вложения

  • sm_remap.sp
    1.8 КБ · Просмотры: 13

bigboi300

Не удаляю копирайты
Сообщения
153
Реакции
28
@Grey83, да удобно конечно, но тут суть как я понял была именно в отправке команды через консоль сервера :)
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@bigboi300, ну так у меня тоже через ркон отправить можно:
RegAdminCmd("sm_remap", Cmd_ReMap, ADMFLAG_CHANGEMAP, "Reload current map");
 

npocmoyuri

Участник
Сообщения
50
Реакции
1
Ты бы для начала указал версию SM используемого на сервере.
SourceMod Version: 1.10.0.6490
Сообщения автоматически склеены:

Может кто сделать так, что бы можно было командой отключать снег?
Версия Sourcemod 1.10
 

Вложения

  • Snow.sp
    3 КБ · Просмотры: 4
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
Просто вроде в исходнике эта функция есть, но при написании команды, в чате пусто, хотя информацию выключает и включает.
В файле переводов отступы и пробелами и символами табуляции.
И ещё: в плагине используется инклюд morecolors, который предназначен только для CS:S OB (и не будет работать в CS:S v34 и CS:GO).
Кроме того в сообщении о включении у тебя почему-то стоит тег {N} вместо тега цвета.

В логах ошибок точно на файл переводов SM не жаловался?

В обычном коде где PrintToChat я бы и сам добавил Тег к плагину, а тут не шарю...
1) плагин содержит раскраску текста для CS:S (как v34, так и OB, но в последнем будет использоваться только 4 из 16кк поддерживаемых). В CS:GO текст не будет отображаться (потому что используется только битбуфер).
2) там всё просто: делается точно так же, как и в PrintToChat
Прикрепил поправленный и переписанный на новом синтаксисе. Тег менять на строке 5 исходника.

И да: почему у тебя в файле переводов вместо русского перевода прописан украинский? Для украинского есть код "ua".
 

Вложения

  • Destructive 0.08_fix.sp
    4.1 КБ · Просмотры: 8

npocmoyuri

Участник
Сообщения
50
Реакции
1
В файле переводов отступы и пробелами и символами табуляции.
И ещё: в плагине используется инклюд morecolors, который предназначен только для CS:S OB (и не будет работать в CS:S v34 и CS:GO).
Кроме того в сообщении о включении у тебя почему-то стоит тег {N} вместо тега цвета.

В логах ошибок точно на файл переводов SM не жаловался?


1) плагин содержит раскраску текста для CS:S (как v34, так и OB, но в последнем будет использоваться только 4 из 16кк поддерживаемых). В CS:GO текст не будет отображаться (потому что используется только битбуфер).
2) там всё просто: делается точно так же, как и в PrintToChat
Прикрепил поправленный и переписанный на новом синтаксисе. Тег менять на строке 5 исходника.

И да: почему у тебя в файле переводов вместо русского перевода прописан украинский? Для украинского есть код "ua".
Сейчас всё пересмотрю.
Спасибо так же за то что прошарил по окрашивании плагинов, буду знать теперь.
Увы но на переводы не ругался ни один плагин)
По поводу украинского в переводе ру
Просто большинство плагинов написанные под ру, а каждому дописывать перевод под юа не очень есть время, поэтому просто перевожу всё на украинский язык)
Пойду тестировать и смотреть)
Сообщения автоматически склеены:

В файле переводов отступы и пробелами и символами табуляции.
И ещё: в плагине используется инклюд morecolors, который предназначен только для CS:S OB (и не будет работать в CS:S v34 и CS:GO).
Кроме того в сообщении о включении у тебя почему-то стоит тег {N} вместо тега цвета.

В логах ошибок точно на файл переводов SM не жаловался?


1) плагин содержит раскраску текста для CS:S (как v34, так и OB, но в последнем будет использоваться только 4 из 16кк поддерживаемых). В CS:GO текст не будет отображаться (потому что используется только битбуфер).
2) там всё просто: делается точно так же, как и в PrintToChat
Прикрепил поправленный и переписанный на новом синтаксисе. Тег менять на строке 5 исходника.

И да: почему у тебя в файле переводов вместо русского перевода прописан украинский? Для украинского есть код "ua".
Чудово працює)) Дякую)))
А да кстати, в 1 плагине где инфа о убийце.
Там пишеться что отключилось или включилось, но пишеться в Консоль просто а не в чат.
Я думаю справлюсь)
 
Последнее редактирование:

Grey83

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

@BossKotoriiNeSmok, я так и не понял как ты хочешь чтобы он работал.
Я кидал тебе версию, где вообще снежки люди не могут использовать.
 

npocmoyuri

Участник
Сообщения
50
Реакции
1
должно писать в консоль, если команда писалась в консоль
если её писали в чат, то и ответ в чате должен быть
ну или инклюд кривой
Сообщения автоматически склеены:

@BossKotoriiNeSmok, я так и не понял как ты хочешь чтобы он работал.
Я кидал тебе версию, где вообще снежки люди не могут использовать.
Я просто прописал CPrintToChat где надо было, и теперь при команде в чате пишет уведомление о том отключилось или включилось инфа о убийце)
Спасибо тебе большое)))
 
Сверху Снизу