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

Grey83

не пишу плагины с весны 2022
Сообщения
8,805
Реакции
5,254
@alexandr200121, типа такого нужно?
 

alexandr200121

Участник
Сообщения
49
Реакции
1
@alexandr200121, типа такого нужно?
Нет отдельный модуль дающий возможность ставить лазеры вип игрокам и убирать их. Количество лазеров которое можно поставить регулируемое в cfg или в вип группе. Ну и настройки самого лазера как в спойлера.
 
Последнее редактирование:

rgba

Участник
Сообщения
132
Реакции
14
Здравствуйте. Может есть у кого плагин, чтобы писать с канала тг на сервер?
 

khood

Участник
Сообщения
273
Реакции
95
Здравствуйте. Может есть у кого плагин, чтобы писать с канала тг на сервер?
 

7pElllHuK

Участник
Сообщения
1,654
Реакции
639
Здравствуйте. Может есть у кого плагин, чтобы писать с канала тг на сервер?
У меня есть аналог вышеупомянутого плагина, писать можно как с сервера так и на сервер, цена 2к (так же есть уведомления о банах, мутах, разбанах и тд, показ онлайна, вывод в тг репортов и показ вип игроков с сервера в тг)
 

Nekro

Терра инкогнита
Сообщения
4,169
Реакции
2,500
Здравствуйте. Может есть у кого плагин, чтобы писать с канала тг на сервер?

Идёт в тестовом режиме, но бесплатно
 

oleg_nelasy

Участник
Сообщения
674
Реакции
47
Нужен простой плагин который блокирует урон по союзнику с ножа.
 

khood

Участник
Сообщения
273
Реакции
95
Нужен простой плагин который блокирует урон по союзнику с ножа.
C-подобный:
#include <sdktools>
#include <sdkhooks>

public void OnPluginStart()
{
    for (int client = 1; client <= MaxClients; client++)
    {
        if (IsClientInGame(client))
        {
            SDKHook(client, SDKHook_OnTakeDamage, TakeDamageHook);
        }
    }
}

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

public Action TakeDamageHook(int client, int &attacker, int &inflictor, float &damage, int &damagetype)
{
    char weapon[8];
 
    if (client > 0 && client <= MaxClients && attacker > 0 && attacker <= MaxClients && attacker == inflictor)
    {
        if (GetClientTeam(client) == GetClientTeam(attacker))
        {
            GetClientWeapon(attacker, weapon, sizeof(weapon));
            if (StrContains(weapon, "knife") != -1)
            {
                damage = 0.0;
                return Plugin_Changed;
            }
        }
    }
    return Plugin_Continue;
}
 
Последнее редактирование:

oleg_nelasy

Участник
Сообщения
674
Реакции
47
public void OnPluginStart()
{
for (int client = 1; client <= MaxClients; client++)
{
if (IsClientInGame(client))
{
SDKHook(client, SDKHook_OnTakeDamage, TakeDamageHook);
}
}
}
Спасибо плагин сейчас протестирую. Просто интересно а зачем делать перебор. И если надо зачем именно при старте плагина может лучшее это делать при старте карты?
 

khood

Участник
Сообщения
273
Реакции
95
Спасибо плагин сейчас протестирую. Просто интересно а зачем делать перебор. И если надо зачем именно при старте плагина может лучшее это делать при старте карты?
OnMapStart() вызывается каждую смену карты
Если плагин уже работает, зачем повторно устанавливать те же хуки?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,805
Реакции
5,254
@khood, я бы так сделал, чтобы и с CS:GO совместимость была:
C-подобный:
#pragma semicolon 1
#pragma newdecls required

#include <sdkhooks>

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

public void OnClientPutInServer(int client)
{
    if(!IsFakeClient(client) || (!IsClientSourceTV(client) && !IsClientReplay(client)))
        SDKHook(client, SDKHook_OnTakeDamage, TakeDamageHook);
}

public Action TakeDamageHook(int client, int &attacker, int &inflictor, float &damage, int &damagetype)
{
    if(attacker != inflictor || client < 1 || MaxClients < client || attacker < 1 || MaxClients < attacker
    || GetClientTeam(client) != GetClientTeam(attacker))
        return Plugin_Continue;

    static char weapon[16];
    GetClientWeapon(attacker, weapon, sizeof(weapon));
    if(strncmp(weapon[7], "knife", 5, false) && strncmp(weapon[7], "bayonet", 7, false))
        return Plugin_Continue;

    damage = 0.0;
    return Plugin_Changed;
}
 

oleg_nelasy

Участник
Сообщения
674
Реакции
47
Нужен плагин при ставне выводит путь к .mdl скина на игроке в чат или консоль или туда и туда.
 

danil253467

💘Italo-Disco One Love💘
Сообщения
110
Реакции
67
Нужен плагин при ставне выводит путь к .mdl скина на игроке в чат или консоль или туда и туда.
PHP:
public void OnPluginStart()
{
    HookEvent("player_spawn", OnSpawn);
}

void OnSpawn(Event event, const char[] name, bool silent)
{
    int client = GetClientOfUserId(event.GetInt("userid"));
    if(GetClientTeam(client) > 1)
    {
        char sModelName[PLATFORM_MAX_PATH];
        GetEntPropString(client, Prop_Send, "m_ModelName", sModelName, sizeof(sModelName));
        
        PrintToChat(client, "Путь к вашей модели: %s", sModelName);
    }
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,805
Реакции
5,254
@oleg_nelasy, а для чего именно при спавне? Можно же в любой момент узнать через некоторые плагины.
 

oleg_nelasy

Участник
Сообщения
674
Реакции
47
@oleg_nelasy, а для чего именно при спавне? Можно же в любой момент узнать через некоторые плагины.
Да просто не охото команды писать. Если надо будет переделаю на чат команду. Нужно просто узнать путь до стандартного скина.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,805
Реакции
5,254
Да просто не охото команды писать.
Их можно забиндить и вызывать простым нажатием кнопки.
Хотя у меня использовался плагин, который показывал много информации в меню (и писал эту информацию мне в чат при выборе соответствующего пункта):
А тут я выкладывал исправленый инклюд плагина, где я улучшил само это меню (и добавил команду вызова этого меню):

Ну и ещё можно включить sv_cheats и командой самой игры глянуть (команду не помню), емнип.
Сообщения автоматически склеены:

всего-то 9 лет назад эту модификацию там запостил =)
 

oleg_nelasy

Участник
Сообщения
674
Реакции
47
@khood, я бы так сделал, чтобы и с CS:GO совместимость была:
C-подобный:
#pragma semicolon 1
#pragma newdecls required

#include <sdkhooks>

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

public void OnClientPutInServer(int client)
{
    if(!IsFakeClient(client) || (!IsClientSourceTV(client) && !IsClientReplay(client)))
        SDKHook(client, SDKHook_OnTakeDamage, TakeDamageHook);
}

public Action TakeDamageHook(int client, int &attacker, int &inflictor, float &damage, int &damagetype)
{
    if(attacker != inflictor || client < 1 || MaxClients < client || attacker < 1 || MaxClients < attacker
    || GetClientTeam(client) != GetClientTeam(attacker))
        return Plugin_Continue;

    static char weapon[16];
    GetClientWeapon(attacker, weapon, sizeof(weapon));
    if(strncmp(weapon[7], "knife", 5, false) && strncmp(weapon[7], "bayonet", 7, false))
        return Plugin_Continue;

    damage = 0.0;
    return Plugin_Changed;
}
Заметил такую проблему. Урон блокирует но игрок по которому ударили получает замедление возможно убрать этот эффект?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,805
Реакции
5,254
@oleg_nelasy, модно попробовать хукать не получнъение урона, а даже до него. Может быть и поможет.
Но это точно не сегодня.
 

DENZEL519

Работаю через AI !
Сообщения
644
Реакции
494
@oleg_nelasy, Проверь так
C-подобный:
#pragma semicolon 1
#pragma newdecls required

#include <sdkhooks>

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

public void OnClientPutInServer(int client)
{
    if(!IsFakeClient(client) && !IsClientSourceTV(client) && !IsClientReplay(client))
    {
        SDKHook(client, SDKHook_OnTakeDamage, TakeDamageHook);
    }
}

public Action TakeDamageHook(int client, int &attacker, int &inflictor, float &damage, int &damagetype)
{
    if(attacker != inflictor ||
       client < 1 || client > MaxClients ||
       attacker < 1 || attacker > MaxClients ||
       GetClientTeam(client) != GetClientTeam(attacker))
    {
        return Plugin_Continue;
    }

    char weapon[32];
    GetClientWeapon(attacker, weapon, sizeof(weapon));
    
    if(StrContains(weapon, "knife", false) == -1 && StrContains(weapon, "bayonet", false) == -1)
    {
        return Plugin_Continue;
    }

    damage = 0.0;
    
    return Plugin_Handled;
}
 
Сверху Снизу