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

DENZEL519

Работаю с AI !
Сообщения
417
Реакции
198
@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;
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
Для CS:GO вроде сто лет назад фикс делали, чтобы не тормозило игрока при получении им урона.
Только не помню можно ли там определять кто и чем нанёс урон.

Нашёл: Не поддерживается - No Damage Velocity Reduction
Сообщения автоматически склеены:

@oleg_nelasy, проверяй:
C-подобный:
#pragma semicolon 1
#pragma newdecls required

#include <sdkhooks>

float m_flStamina[MAXPLAYERS+1];

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)))
        return;

    SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
    SDKHook(client, SDKHook_OnTakeDamagePost, OnTakeDamagePost);
}

public Action OnTakeDamage(int client, int &attacker, int &inflictor, float &damage, int &damagetype)
{
    m_flStamina[client] = -1.0;

    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;
    m_flStamina[client] = GetEntPropFloat(client, Prop_Send, "m_flStamina");
    return Plugin_Changed;
}

public void OnTakeDamagePost(int client, int attacker, int inflictor, float damage, int damagetype)
{
    if(m_flStamina[client] < 0.0)
        return;

    SetEntPropFloat(client, Prop_Send, "m_flStamina", m_flStamina[client]);
    SetEntPropFloat(client, Prop_Send, "m_flVelocityModifier", 1.0);
    m_flStamina[client] = -1.0;
}
 
Последнее редактирование:

oleg_nelasy

Участник
Сообщения
664
Реакции
46
Для CS:GO вроде сто лет назад фикс делали, чтобы не тормозило игрока при получении им урона.
Только не помню можно ли там определять кто и чем нанёс урон.

Нашёл: Не поддерживается - No Damage Velocity Reduction
Сообщения автоматически склеены:

@oleg_nelasy, проверяй:
C-подобный:
#pragma semicolon 1
#pragma newdecls required

#include <sdkhooks>

float m_flStamina[MAXPLAYERS+1];

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)))
        return;

    SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
    SDKHook(client, SDKHook_OnTakeDamagePost, OnTakeDamagePost);
}

public Action OnTakeDamage(int client, int &attacker, int &inflictor, float &damage, int &damagetype)
{
    m_flStamina[client] = -1.0;

    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;
    m_flStamina[client] = GetEntPropFloat(client, Prop_Send, "m_flStamina");
    return Plugin_Changed;
}

public void OnTakeDamagePost(int client, int attacker, int inflictor, float damage, int damagetype)
{
    if(m_flStamina[client] < 0.0)
        return;

    SetEntPropFloat(client, Prop_Send, "m_flStamina", m_flStamina[client]);
    SetEntPropFloat(client, Prop_Send, "m_flVelocityModifier", 1.0);
    m_flStamina[client] = -1.0;
}
Спасибо вроде все работает как надо.
Сообщения автоматически склеены:

@Grey83 еще раз вроде работает как надо с ножа по тимейту не замедляет про противнику замедляет. Другое оружие вроде тоже замедляет как надо. Мне не понятно почему работает правильно? Вроде нет проверок на команду или тип оружия.
C++:
public void OnTakeDamagePost(int client, int attacker, int inflictor, float damage, int damagetype)
{
    if(m_flStamina[client] < 0.0)
        return;

    SetEntPropFloat(client, Prop_Send, "m_flStamina", m_flStamina[client]);
    SetEntPropFloat(client, Prop_Send, "m_flVelocityModifier", 1.0);
    m_flStamina[client] = -1.0;
}
Сообщения автоматически склеены:


Ой не заметил m_flStamina[client] = GetEntPropFloat(client, Prop_Send, "m_flStamina");
Я так понимаю если условия совпали тогда мы записали GetEntPropFloat(client, Prop_Send, "m_flStamina"); И в данном коде только тогда будет >= 0 поэтому не отработает
if(m_flStamina[client] < 0.0) return; и мы меняем значение "m_flStamina" и "m_flVelocityModifier" также перезаписываем m_flStamina[client]. Я все правильно понял?
 
Последнее редактирование:

Indast

Участник
Сообщения
12
Реакции
4
Доброго времени суток. Нужен плагин убирающий звук поднятия с земли дифузов для ксс34
 

MODER DEV

Участник
Сообщения
8
Реакции
4
Доброго времени суток. Нужен плагин убирающий звук поднятия с земли дифузов для ксс34
А какой звук у поднятия дифузов, если в Counter-Strike: Source (CSS) v34 build 4044 (и вообще в классическом CS:S) нельзя подобрать набор сапёра (Defuse Kit) с земли, в отличие от CS:GO, где это возможно.
 

Synd1qate

Участник
Сообщения
744
Реакции
259
А какой звук у поднятия дифузов, если в Counter-Strike: Source (CSS) v34 build 4044 (и вообще в классическом CS:S) нельзя подобрать набор сапёра (Defuse Kit) с земли, в отличие от CS:GO, где это возможно.
Кто такое сказал?
 

MODER DEV

Участник
Сообщения
8
Реакции
4
Кто такое сказал?
И в правду, просто странно, всю жизнь думал что нельзя. тогда это как то так должно работать...
Сообщения автоматически склеены:

Доброго времени суток. Нужен плагин убирающий звук поднятия с земли дифузов для ксс34
Проверь


C-подобный:
#pragma semicolon 1
#pragma newdecls required

#include <sourcemod>
#include <sdktools>

public Plugin myinfo =
{
    name = "Disable Defuser Pickup Sound",
    author = "Syntax",
    description = "Disable Defuser Pickup Sound",
    version = "1.1",
    url = "https://hlmod.ru/"
};

public void OnPluginStart()
{
    HookEvent("item_pickup", Event_ItemPickup);
}

public Action Event_ItemPickup(Event event, const char[] name, bool dontBroadcast)
{
    char item[32];
    event.GetString("item", item, sizeof(item));

    if (StrEqual(item, "defuser"))
    {
        return Plugin_Handled;
    }
    return Plugin_Continue;
}
 
Последнее редактирование:

oleg_nelasy

Участник
Сообщения
664
Реакции
46
Подскажите есть модуль для шоп. Игра кс го.
1) Продажа ножей которые есть в игре такие как керамбит, тычковые ножи и т. д. Желательно с возможностью добавления своих кастомных загруженных на сервер ножей.
2) !ws в шоп покраска оружия.
Мне нужно знать есть ли такое в принципе готов рассматривать приватные варианты если есть в открытом доступе то вообще супер.
Находил пару на ножи в открытом доступе но они плохо сделаны или не работают.
 

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
И в правду, просто странно, всю жизнь думал что нельзя. тогда это как то так должно работать...
Сообщения автоматически склеены:


Проверь


C-подобный:
#pragma semicolon 1
#pragma newdecls required

#include <sourcemod>
#include <sdktools>

public Plugin myinfo =
{
    name = "Disable Defuser Pickup Sound",
    author = "Syntax",
    description = "Disable Defuser Pickup Sound",
    version = "1.1",
    url = "https://hlmod.ru/"
};

public void OnPluginStart()
{
    HookEvent("item_pickup", Event_ItemPickup);
}

public Action Event_ItemPickup(Event event, const char[] name, bool dontBroadcast)
{
    char item[32];
    event.GetString("item", item, sizeof(item));

    if (StrEqual(item, "defuser"))
    {
        return Plugin_Handled;
    }
    return Plugin_Continue;
}
Так это ж блокировка поднятия китов, а не звука
 

DENZEL519

Работаю с AI !
Сообщения
417
Реакции
198
Доброго времени суток. Нужен плагин убирающий звук поднятия с земли дифузов для ксс34
🤷‍♂️

C-подобный:
#pragma semicolon 1
#pragma newdecls required

#include <sourcemod>
#include <sdktools>

#define SOUND_DEFUSEKIT_PICKUP "items/defuser_pickup.wav"

public Plugin myinfo =
{
    name = "Disable Defuse Kit Pickup Sound",
    author = "DENZEL519&AI",
    description = "Removes the sound when picking up defuse kit from ground",
    version = "1.0",
};

public void OnPluginStart()
{
    AddNormalSoundHook(SoundHook);
}

public Action SoundHook(int clients[64], int &numClients, char sample[PLATFORM_MAX_PATH],
    int &entity, int &channel, float &volume, int &level, int &pitch, int &flags)
{
    if (StrEqual(sample, SOUND_DEFUSEKIT_PICKUP))
    {
        return Plugin_Stop;
    }
    
    return Plugin_Continue;
}
Плагин использует звуковой хук для перехвата всех воспроизводимых звуков. Когда игра пытается воспроизвести звук поднятия Defuse Kit (items/defuser_pickup.wav), плагин блокирует его воспроизведение.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
#include <sourcemod>
#include <sdktools>
а хватило бы одного sdktools_sound
Сообщения автоматически склеены:

Вот примерно так:
SM1.13:
#pragma semicolon 1
#pragma newdecls required

#include <sdktools_sound>

#define SOUND_DEFUSEKIT_PICKUP    "items/defuser_pickup.wav"

public Plugin myinfo =
{
    name = "Disable Defuse Kit Pickup Sound",
    author = "DENZEL519&AI",
    description = "Removes the sound when picking up defuse kit from ground",
    version = "1.0"
}

public void OnPluginStart()
{
    AddNormalSoundHook(SoundHook);
}

public Action SoundHook(int clients[64], int &numClients, char sample[PLATFORM_MAX_PATH], int &entity, int &channel, float &volume, int &level, int &pitch, int &flags)
{
    return !strcmp(sample, SOUND_DEFUSEKIT_PICKUP, false) ? Plugin_Stop : Plugin_Continue;
}
Сообщения автоматически склеены:

Я все правильно понял?
да
 

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
а хватило бы одного sdktools_sound
Сообщения автоматически склеены:

Вот примерно так:
SM1.13:
#pragma semicolon 1
#pragma newdecls required

#include <sdktools_sound>

#define SOUND_DEFUSEKIT_PICKUP    "items/defuser_pickup.wav"

public Plugin myinfo =
{
    name = "Disable Defuse Kit Pickup Sound",
    author = "DENZEL519&AI",
    description = "Removes the sound when picking up defuse kit from ground",
    version = "1.0"
}

public void OnPluginStart()
{
    AddNormalSoundHook(SoundHook);
}

public Action SoundHook(int clients[64], int &numClients, char sample[PLATFORM_MAX_PATH], int &entity, int &channel, float &volume, int &level, int &pitch, int &flags)
{
    return !strcmp(sample, SOUND_DEFUSEKIT_PICKUP, false) ? Plugin_Stop : Plugin_Continue;
}
Сообщения автоматически склеены:


да
А где можно найти список SOUND_DEFUSEKIT_PICKUP
 
Сверху Снизу