Увеличение урона Игрокам

Сообщения
12
Реакции
0
извиняюсь за навязчивость, а существует ли плагин, но уже с обратной функцией? для защиты)))чтоб урон по мне уменьшался?)
 

R1KO

fuck society
Сообщения
9,460
Реакции
7,799
  • Команда форума
  • #24
точно так же но
вместо
PHP:
public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
{
    if (0 < attacker <= MaxClients)
    {
        if (IsClientValid[attacker])
        {
            damage *= VALUE;
            return Plugin_Changed;
        }
    }

    return Plugin_Continue;
}
надо
PHP:
public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
{
    if (0 < attacker <= MaxClients)
    {
        if (IsClientValid[victim])
        {
            damage *= VALUE;
            return Plugin_Changed;
        }
    }

    return Plugin_Continue;
}
И VALUE должно быть ниже 1.
Тоесть от 0.0 до 1.0
 
Сообщения
12
Реакции
0
точно так же но
вместо
PHP:
public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
{
    if (0 < attacker <= MaxClients)
    {
        if (IsClientValid[attacker])
        {
            damage *= VALUE;
            return Plugin_Changed;
        }
    }

    return Plugin_Continue;
}
надо
PHP:
public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
{
    if (0 < attacker <= MaxClients)
    {
        if (IsClientValid[victim])
        {
            damage *= VALUE;
            return Plugin_Changed;
        }
    }

    return Plugin_Continue;
}
И VALUE должно быть ниже 1.
Тоесть от 0.0 до 1.0

а если оба плагина буду использывать, они между собой конфликтовать не будут?
 

R1KO

fuck society
Сообщения
9,460
Реакции
7,799
  • Команда форума
  • #26
Дмитрий Иванов 1927199390, соиденим их
PHP:
#include <sourcemod>
#include <sdkhooks>

new const String:hListSteamIDs[][] = {"STEAM_0:0:47497819", "STEAM_2", "STEAM_3"};

#define SIZE sizeof(hListSteamIDs)
#define DAMAGE	10.5 // коэффициент наносимого урона
#define HURT		0.5 // коэффициент получаемого урона

new bool:IsPluginEnabled = false;

new bool:IsClientValid[MAXPLAYERS + 1] = {false, ...};

public OnPluginStart()
{
    RegAdminCmd("sm_dmall", RCC_Callback, ADMFLAG_ROOT);
}
    
public OnClientPutInServer(client)
{
    decl String:SteamID[32];
    if (GetClientAuthString(client, SteamID, 32))
    {
        IsClientValid[client] = false;
        SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);

        for (new i = 0; i < SIZE; i++)
        {
            if (strcmp(hListSteamIDs[i], SteamID, false) == 0)
            {
                IsClientValid[client] = true;
                break;
            }
        }
    }
}

public Action:RCC_Callback(client, args)
{
    if (client > 0)
    {
        ReplyToCommand(client, "\x01\x03[SM] \x01Плагин %s", (IsPluginEnabled = !IsPluginEnabled) ? "включен" : "выключен");
        
        for (new i = 1; i <= MaxClients; i++)
        {
            if (IsClientInGame(i))
            {
                if (IsPluginEnabled)
                {
                    OnClientPutInServer(i);
                }
                else
                {
                    SDKUnhook(i, SDKHook_OnTakeDamage, OnTakeDamage)
                }
            }
        }
    }

    return Plugin_Handled;
}

public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
{
	if (0 < attacker <= MaxClients && sClientValid[attacker])
	{
		damage *= DAMAGE;	
		return Plugin_Changed;	
	}
	if (IsClientValid[victim])
		{
			damage *= HURT;
			return Plugin_Changed;
		}

	return Plugin_Continue;
}
 
Последнее редактирование:

R1KO

fuck society
Сообщения
9,460
Реакции
7,799
  • Команда форума
  • #28
AlmazON, и не нужно. Разве сервер не может нанести урон? Правда при получении урона от сервера он он уменьшится.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,756
Разве сервер не может нанести урон?
Так ты же своей проверкой наоборот, урон от сервера отсекаешь - защиты от него нет. А валидным атакующим сервер итак быть не сможет.
Сама проверка как раз и не нужна. Только лишняя нагрузка (событие то весьма частовызываемое).
 
Сообщения
12
Реакции
0
Дмитрий Иванов 1927199390, соиденим их
PHP:
#include <sourcemod>
#include <sdkhooks>

new const String:hListSteamIDs[][] = {"STEAM_0:0:47497819", "STEAM_2", "STEAM_3"};

#define SIZE sizeof(hListSteamIDs)
#define DAMAGE	10.5 // коэффициент наносимого урона
#define HURT		0.5 // коэффициент получаемого урона

new bool:IsPluginEnabled = false;

new bool:IsClientValid[MAXPLAYERS + 1] = {false, ...};

public OnPluginStart()
{
    RegAdminCmd("sm_dmall", RCC_Callback, ADMFLAG_ROOT);
}
    
public OnClientPutInServer(client)
{
    decl String:SteamID[32];
    if (GetClientAuthString(client, SteamID, 32))
    {
        IsClientValid[client] = false;
        SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);

        for (new i = 0; i < SIZE; i++)
        {
            if (strcmp(hListSteamIDs[i], SteamID, false) == 0)
            {
                IsClientValid[client] = true;
                break;
            }
        }
    }
}

public Action:RCC_Callback(client, args)
{
    if (client > 0)
    {
        ReplyToCommand(client, "\x01\x03[SM] \x01Плагин %s", (IsPluginEnabled = !IsPluginEnabled) ? "включен" : "выключен");
        
        for (new i = 1; i <= MaxClients; i++)
        {
            if (IsClientInGame(i))
            {
                if (IsPluginEnabled)
                {
                    OnClientPutInServer(i);
                }
                else
                {
                    SDKUnhook(i, SDKHook_OnTakeDamage, OnTakeDamage)
                }
            }
        }
    }

    return Plugin_Handled;
}

public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
{
	if (0 < attacker <= MaxClients && sClientValid[attacker])
	{
		damage *= DAMAGE;	
		return Plugin_Changed;	
	}
	if (IsClientValid[victim])
		{
			damage *= HURT;
			return Plugin_Changed;
		}

	return Plugin_Continue;
}

в соединенном виде, плагин не компилируется
 

Ice_Sochi

Участник
Сообщения
738
Реакции
435
Подскажите пожалуйста, в чем дело, при компиле выдает:
undefined symbol "IsClientValid"
C-подобный:
#include <sourcemod>
#include <sdkhooks>

#define VALUE 0.0


public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
{
    if (0 < attacker <= MaxClients)
    {
    if(GetRandomInt(0, 100) <= 85)
    {
        if (IsClientValid(victim))
        {
            damage *= VALUE;
            return Plugin_Changed;
        }
    }
    }

    return Plugin_Continue;
}
А если убираю if (IsClientValid(victim)), скомпиленный плагин просто не работает
п.с. хочу блокировать урон по игрокам с определенным шансом
 

Серый™

CS:S Server
Сообщения
2,925
Реакции
1,379
@Ice_Sochi, в см нет функции IsClientValid, это кто-то сам написал такую функцию, а ты от туда это содрал без самой функции.
 

Felton

Участник
Сообщения
799
Реакции
59
Доброго времени суток.Привежите этот плагин к админскому флагу ADMFLAG_BAN а не по стиму
C-подобный:
#include <sourcemod>
#include <sdkhooks>

new const String:hListSteamIDs[][] = {"STEAM_0:0:55555555", "STEAM_2", "STEAM_3"};

#define SIZE sizeof(hListSteamIDs)
#define DAMAGE    10.5 // коэффициент наносимого урона
#define HURT        0.5 // коэффициент получаемого урона

new bool:IsPluginEnabled = false;

new bool:IsClientValid[MAXPLAYERS + 1] = {false, ...};

public OnPluginStart()
{
    RegAdminCmd("sm_dmall", RCC_Callback, ADMFLAG_ROOT);
}
    
public OnClientPutInServer(client)
{
    decl String:SteamID[32];
    if (GetClientAuthString(client, SteamID, 32))
    {
        IsClientValid[client] = false;
        SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);

        for (new i = 0; i < SIZE; i++)
        {
            if (strcmp(hListSteamIDs[i], SteamID, false) == 0)
            {
                IsClientValid[client] = true;
                break;
            }
        }
    }
}

public Action:RCC_Callback(client, args)
{
    if (client > 0)
    {
        ReplyToCommand(client, "\x01\x03[SM] \x01Плагин %s", (IsPluginEnabled = !IsPluginEnabled) ? "включен" : "выключен");
        
        for (new i = 1; i <= MaxClients; i++)
        {
            if (IsClientInGame(i))
            {
                if (IsPluginEnabled)
                {
                    OnClientPutInServer(i);
                }
                else
                {
                    SDKUnhook(i, SDKHook_OnTakeDamage, OnTakeDamage)
                }
            }
        }
    }

    return Plugin_Handled;
}

public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
{
    if (0 < attacker <= MaxClients && IsClientValid[attacker])
    {
        damage *= DAMAGE;   
        return Plugin_Changed;   
    }
    if (IsClientValid[victim])
        {
            damage *= HURT;
            return Plugin_Changed;
        }

    return Plugin_Continue;
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,828
Реакции
5,267
@Felton, пробуй:
C-подобный:
#pragma semicolon 1

#include <sdkhooks>

#define ACCESS    ADMFLAG_BAN    // флаг(и) для применения коэффициентов
#define DAMAGE    10.5        // коэффициент наносимого урона
#define HURT    0.5            // коэффициент получаемого урона

new bool:bEnable,
    bool:bClientValid[MAXPLAYERS+1];

public OnPluginStart()
{
    RegAdminCmd("sm_dmall", Cmd_ToggleMult, ADMFLAG_ROOT);
}

public OnClientPutInServer(client)
{
    bClientValid[client] = !IsFakeClient(client) && GetUserFlagBits(client) & ACCESS;
    SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
}

public Action:Cmd_ToggleMult(client, args)
{
    ReplyToCommand(client, "\x01\x03[SM] \x01Плагин %s", (bEnable = !bEnable) ? "включён" : "выключен");

    for(new i = 1; i <= MaxClients; i++) if(IsClientInGame(i))
    {
        if(bEnable) OnClientPutInServer(i);
        else SDKUnhook(i, SDKHook_OnTakeDamage, OnTakeDamage);
    }

    return Plugin_Handled;
}

public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
{
    static bool:change;
    change = false;
    if(0 < attacker <= MaxClients && bClientValid[attacker])
    {
        damage *= DAMAGE;
        change = true;
    }

    if(bClientValid[victim])
    {
        damage *= HURT;
        change = true;
    }

    return change ? Plugin_Changed : Plugin_Continue;
}
 

Felton

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

Grey83

Скомпелировалась без ошибок.Закинул на домашний сервер.Урон стандартный.Кинул под себя грену и осталось 15-17 хп.В том коде что я скинул когда грену кидаеш под себя мементом умираеш.Короче урон не проходит в твоём коде.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,828
Реакции
5,267
@Felton, там если у тебя админские права применяется оба коэффициента
 

Felton

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

Grey83

Понятно.Будет работать на "99:z" и на "1:abcdefgjk" ???
 
Сверху Снизу