[VIP] Anti Knife Damage

[VIP] Anti Knife Damage 1.1.0

MizzZer

Где Крузя. Крузи нет.
Сообщения
216
Реакции
103
  • Автор ресурса
  • #1
MizzZer добавил(а) новый ресурс:

[VIP] Anti Knife Damage - Убирает урон от ножа VIP игрокам

Позволяет убрать урон от ножа VIP игрокам.

Плагин не проверялся, ибо негде. Буду ждать ваших сообщений о работе плагина.

Так же спасибо @HolyHender, за небольшую помощь.

Узнать больше об этом ресурсе...
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #2
@MizzZer,

public void OnClientPutInServer(int client)
{
if(VIP_IsClientVIP(client) && VIP_IsClientFeatureUse(client, g_sFeature))
{
SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
}
}
не будет работать. в этом событии у игрока еще нет вип. проверяй уже внутри OnTakeDamage или через переменную, которая будет через события вип обновляться

if(bCRLoaded && CR_IsCustomRound() || bLSDLoaded && g_bDuelStart) //При Кастамном раунде или Дуэли в конце раунда, нож наносит урон
{
return Plugin_Changed;
}
не критично но всё же return Plugin_Continue;
 

Faya™

Жуестер
Сообщения
867
Реакции
457
Нормальную ты там нагрузку забубенил, каждое событие урона будет цикл по всем игрокам
C#:
#pragma semicolon 1

#include <sourcemod>
#include <sdkhooks>
#include <vip_core>

#undef REQUIRE_PLUGIN
#include <lsd>
#include <custom_rounds>

#pragma newdecls required

#define DAMAGE 0.0 //Регулировать урон с ножа, 0.0 - урона нет

bool g_bDuelStart,
    bLSDLoaded,
    bCRLoaded;

bool g_bStatus[MAXPLAYERS + 1];

static const char g_sFeature[] = "AntiKnifeDamage"; // Уникальное имя ф-и в VIP

/* ДОБАВИТЬ В ФАЙЛ ПЕРЕВОДА
"Phrases"
{
    "AntiKnifeDamage"
    {
        "ru"        "Защита от урона ножом"
    }
}
*/

public Plugin myinfo =
{
    name    = "[VIP] Anti Knife Damage",
    author    = "MizzZer",
    version    = "1.0.0",
    url        = "vk.com/mizzzer"
}

public void OnPluginStart()
{
    if(VIP_IsVIPLoaded())
    {
        VIP_OnVIPLoaded();
    }
}

public void VIP_OnVIPLoaded()
{
    VIP_RegisterFeature(g_sFeature, BOOL, TOGGLABLE, ChangeStatus); //Отображение пункта в меню VIP
}

Action ChangeStatus(int iClient, const char[] szFeature, VIP_ToggleState eOldStatus, VIP_ToggleState &eNewStatus)
{
    g_bStatus[iClient] = eNewStatus == ENABLED;

    return Plugin_Continue;
}

//Проверка на наличие плагинов.
public void OnAllPluginsLoaded()
{
    bLSDLoaded = LibraryExists("lsd");
    bCRLoaded = LibraryExists("custom_rounds");
}

public void OnLibraryRemoved(const char[] szName)
{
    SetLibraryStatus(szName, false);
}

public void OnLibraryAdded(const char[] szName)
{
    SetLibraryStatus(szName, true);
}

void SetLibraryStatus(const char[] szName, bool bStatus)
{
    if(strcmp(szName, "lsd") == 0)
    {
        bLSDLoaded = bStatus;
    }

    if(strcmp(szName, "custom_rounds") == 0)
    {
        bCRLoaded = bStatus;
    }
}
//////////////////////////////////////////////////

public void VIP_OnVIPClientLoaded(int iClient)
{
    g_bStatus[iClient] = VIP_IsClientFeatureUse(iClient, g_sFeature);

    if(g_bStatus[iClient])
    {
        SDKHook(iClient, SDKHook_OnTakeDamage, OnTakeDamage);
    }
}

public void VIP_OnVIPClientAdded(int iClient, int iAdmin)
{
    VIP_OnVIPClientLoaded(iClient);
}

public void VIP_OnVIPClientRemoved(int iClient, const char[] szReason, int iAdmin)
{
    g_bStatus[iClient] = false;
    SDKUnhook(iClient, SDKHook_OnTakeDamage, OnTakeDamage);
}

Action OnTakeDamage(int victim, int& attacker, int& inflictor, float& damage, int& damagetype)
{
    if(attacker > 0 && g_bStatus[victim] && damagetype & DMG_SLASH)
    {
        if(bCRLoaded && CR_IsCustomRound() || bLSDLoaded && g_bDuelStart)
        {
            return Plugin_Continue;
        }

        static char szWeapon[32];
        GetClientWeapon(attacker, szWeapon, sizeof szWeapon);

        if(StrContains(szWeapon, "knife", false) != -1 || StrContains(szWeapon, "bayonet", false) != -1)
        {
            damage = DAMAGE;

            return Plugin_Changed;
        }
    }

    return Plugin_Continue;
}

public void LSD_OnDuelStart(KeyValues hKV, const int iDuelist[2], const char[] sMode)
{
    g_bDuelStart = true;
}

public void LSD_OnDuelEnd(int iReason, const int iDuelist[2])
{
    g_bDuelStart = false;
}

public void OnPluginEnd()
{
    if(CanTestFeatures() && GetFeatureStatus(FeatureType_Native, "VIP_UnregisterFeature") == FeatureStatus_Available)
    {
        VIP_UnregisterFeature(g_sFeature);
    }
}
 
Сверху Снизу