Как убрать урон от ножа по своим!

psychedelic

Участник
Сообщения
131
Реакции
35
Операционная система
Linux
Текст ошибки
Нету ошибки
Список мета-модулей
не важно
Список плагинов SM
не важно
Список расширений SM
Не важно
Как убрать урон по своим с ножа?

Я поставил эти квары, и что я получаю , у меня люди могут наносить дамаг с ножа и фаера !! За это отвечает квар ff_damage_reduction_other 0.45
Как сделать чтобы фаер дамажил своих, а вот нож нет?

ff_damage_reduction_grenade 0.45 // Урон от гранат по своим!
ff_damage_reduction_bullets 0 // Урон от пуль по своим
ff_damage_reduction_other 0.45 // Урон от предметов и так далее! (От фаера тоже) и от ножа
ff_damage_reduction_grenade_self 1 // Урон по себе
 

psychedelic

Участник
Сообщения
131
Реакции
35

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
966
Попробуйте
 

Вложения

  • noknifeffdmg.smx
    3.4 КБ · Просмотры: 1
  • noknifeffdmg.sp
    892 байт · Просмотры: 5
  • Мне нравится
Реакции: NaN

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
966
Если будет нестандартный нож (bayonet, к примеру), то будет криво работать.
GetEntityClassname не различает ножи, проверил еще много лет назад
Единственное, что возможно сможет помешать, это золотой нож
Сообщения автоматически склеены:

В любом случае вот абсолютно универсальный вариант
 

Вложения

  • noknifeffdmg.sp
    897 байт · Просмотры: 4
  • noknifeffdmg.smx
    3.4 КБ · Просмотры: 3

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
GetEntityClassname не различает ножи, проверил еще много лет назад
Единственное, что возможно сможет помешать, это золотой нож
Сообщения автоматически склеены:

В любом случае вот абсолютно универсальный вариант
Не лучше ли будет проверить наявность названия 'knife' в классе оружия?
C++:
stock bool IsWeaponKnife(int weapon)
{
    char sBuffer[32]
    GetEntityClassname(weapon, sBuffer, sizeof sBuffer);

    if(StrContains(sBuffer, "knife") != -1)
        return true;

    return false;
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,552
Реакции
5,029
В любом случае вот абсолютно универсальный вариант
неа, штыки игнорить будет в ксго
Вот так не будет:
C-подобный:
#pragma semicolon 1

#include <sdkhooks>

bool gLate;

public APLRes AskPluginLoad2(Handle plugin, bool late, char[] error, int max)
{
    gLate = late;
    return APLRes_Success;
}

public void OnPluginStart()
{
    if(!gLate) return;

    for(int i = MaxClients; i; i--) if(IsClientInGame(i)) OnClientPutInServer(i);
    gLate = false;
}

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

public Action OnPlayerTakeDamage(int victim, int& attacker, int& inflictor, float& dmg, int& type, int& wpn, float force[3], float pos[3])
{
    if(0 < attacker || attacker <= MaxClients && wpn != -1 && GetClientTeam(victim) == GetClientTeam(attacker)
    && IsWeaponKnife(wpn))
        return Plugin_Handled;

    return Plugin_Continue;
}

stock bool IsWeaponKnife(int weapon)
{
    static char cls[32];
    GetEntityClassname(weapon, cls, sizeof cls);
    return StrContains(cls[7], "knife") != -1 || StrContains(cls[7], "bayonet") != -1;
}
 

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
966
@iLoco, надежнее так:
C-подобный:
stock bool IsWeaponKnife(int iWeapon){
    char sClass[8];
    GetEntityNetClass(iWeapon, sClass, sizeof(sClass));
    return strncmp(sClass, "CKnife", 6) == 0;
}
Это самое быстрое, что я когда-либо видел
Сообщения автоматически склеены:

неа, штыки игнорить будет в ксго
Вот так не будет:
C-подобный:
#pragma semicolon 1

#include <sdkhooks>

bool gLate;

public APLRes AskPluginLoad2(Handle plugin, bool late, char[] error, int max)
{
    gLate = late;
    return APLRes_Success;
}

public void OnPluginStart()
{
    if(!gLate) return;

    for(int i = MaxClients; i; i--) if(IsClientInGame(i)) OnClientPutInServer(i);
    gLate = false;
}

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

public Action OnPlayerTakeDamage(int victim, int& attacker, int& inflictor, float& dmg, int& type, int& wpn, float force[3], float pos[3])
{
    if(0 < attacker || attacker <= MaxClients && wpn != -1 && GetClientTeam(victim) == GetClientTeam(attacker)
    && IsWeaponKnife(wpn))
        return Plugin_Handled;

    return Plugin_Continue;
}

stock bool IsWeaponKnife(int weapon)
{
    static char cls[32];
    GetEntityClassname(weapon, cls, sizeof cls);
    return StrContains(cls[7], "knife") != -1 || StrContains(cls[7], "bayonet") != -1;
}
PHP:
#include <cstrike>
#include <sdktools>

public void OnPluginStart()
{
    RegConsoleCmd("sm_test2", TestCMD)
}

public Action TestCMD(int client, int args)
{
    int weapon = GivePlayerItem(client, "weapon_bayonet")
   
    PrintToChat(client, "%i", IsWeaponKnife_1(weapon))
    PrintToChat(client, "%i", IsWeaponKnife_2(weapon))
    PrintToChat(client, "%i", IsWeaponKnife_3(weapon))
    PrintToChat(client, "%i", IsWeaponKnife_4(weapon))
}

bool IsWeaponKnife_1(int weapon)
{
    char sBuffer[32]
    GetEntityClassname(weapon, sBuffer, sizeof sBuffer)
    return !strncmp(sBuffer, "weapon_knife", 12)
}

bool IsWeaponKnife_2(int weapon)
{
    char sBuffer[32]
    GetEntityClassname(weapon, sBuffer, sizeof sBuffer);
    if(StrContains(sBuffer, "knife") != -1)
        return true;
    return false;
}

bool IsWeaponKnife_3(int weapon)
{
    char sBuffer[32]
    GetEntityClassname(weapon, sBuffer, sizeof sBuffer)
    return !strncmp(sBuffer[7], "knife", 5)
}

bool IsWeaponKnife_4(int iWeapon){
    char sClass[8];
    GetEntityNetClass(iWeapon, sClass, sizeof(sClass));
    return strncmp(sClass, "CKnife", 6) == 0;
}
Все функции выдали true
Скажу еще раз: GetEntityClassname не замечает разновидности ножей (единственное, с чем может быть проблема - это золотой нож)
Сообщения автоматически склеены:

Окончательный, быстрый и абсолютный вариант с указанием всех авторов сея бреда
 

Вложения

  • noknifeffdmg.sp
    1 КБ · Просмотры: 12
  • noknifeffdmg.smx
    3.4 КБ · Просмотры: 8
Последнее редактирование:

Lnk

Добрая душа
Сообщения
249
Реакции
78
Это самое быстрое, что я когда-либо видел
Сообщения автоматически склеены:


PHP:
#include <cstrike>
#include <sdktools>

public void OnPluginStart()
{
    RegConsoleCmd("sm_test2", TestCMD)
}

public Action TestCMD(int client, int args)
{
    int weapon = GivePlayerItem(client, "weapon_bayonet")
  
    PrintToChat(client, "%i", IsWeaponKnife_1(weapon))
    PrintToChat(client, "%i", IsWeaponKnife_2(weapon))
    PrintToChat(client, "%i", IsWeaponKnife_3(weapon))
    PrintToChat(client, "%i", IsWeaponKnife_4(weapon))
}

bool IsWeaponKnife_1(int weapon)
{
    char sBuffer[32]
    GetEntityClassname(weapon, sBuffer, sizeof sBuffer)
    return !strncmp(sBuffer, "weapon_knife", 12)
}

bool IsWeaponKnife_2(int weapon)
{
    char sBuffer[32]
    GetEntityClassname(weapon, sBuffer, sizeof sBuffer);
    if(StrContains(sBuffer, "knife") != -1)
        return true;
    return false;
}

bool IsWeaponKnife_3(int weapon)
{
    char sBuffer[32]
    GetEntityClassname(weapon, sBuffer, sizeof sBuffer)
    return !strncmp(sBuffer[7], "knife", 5)
}

bool IsWeaponKnife_4(int iWeapon){
    char sClass[8];
    GetEntityNetClass(iWeapon, sClass, sizeof(sClass));
    return strncmp(sClass, "CKnife", 6) == 0;
}
Все функции выдали true
Скажу еще раз: GetEntityClassname не замечает разновидности ножей (единственное, с чем может быть проблема - это золотой нож)
Сообщения автоматически склеены:

Окончательный, быстрый и абсолютный вариант с указанием всех авторов сея бреда

А есть какой нибудь фикс?
После сегоднящнего обновления не работает nokniffdmg
 
Сверху Снизу