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

Сообщения
12
Реакции
0
Здравствуйте еще раз

#include <sourcemod>
#include <sdkhooks>

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

#define SIZE sizeof(hListSteamIDs)
#define VALUE 1.5

public OnClientAuthorized(client, const String:auth[])
{
for (new i = 0; i < SIZE; i++)
{
if (strcmp(hListSteamIDs, auth, false) == 0)
{
SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
break;
}
}
}

public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
{
damage *= VALUE;
}



проверил код который дали, в итоге не рабочий
что не так??
обьясняю, проверял на себе - без плагина кинул под себя гранату осталось 19хп
и после плагина тоже 19 хотя в стиме ввел свой стим
 

R1KO

fuck society
Сообщения
9,460
Реакции
7,799
  • Команда форума
  • #4
public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
{
damage *= VALUE;
}
return Plugin_Changed;

В OnTakeDamage нет проверки на наличие прав у игрока.
На остальное даже смотреть не хочу.
 

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
Как-то так, наверное
PHP:
#include <sourcemod>
#include <sdkhooks>

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

#define SIZE sizeof(hListSteamIDs)
#define VALUE 1.5

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

public OnClientAuthorized(client, const String:auth[])
{
	IsClientValid[client] = false;

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

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

	return Plugin_Continue;
}
 
Сообщения
12
Реакции
0
Как-то так, наверное
PHP:
#include <sourcemod>
#include <sdkhooks>

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

#define SIZE sizeof(hListSteamIDs)
#define VALUE 1.5

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

public OnClientAuthorized(client, const String:auth[])
{
	IsClientValid[client] = false;

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

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

	return Plugin_Continue;
}

работает, но не могу понять, как пашет, к примеру на 30% больше урон сделать
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,756
на 30% больше урон сделать
Умножь
на 100% и получишь проценты сверх нормы (т.е. сверх нормальных 100%) - стоит 150%.
100% = 1.0, 1.0/100% = 0.01 * 30% = 0.3 (прибавка) + 1.0 (стандарт) = 1.3.
Оффтоп
 
Сообщения
12
Реакции
0
Дмитрий Иванов 1927199390,

Это коэффициент умножения урона.
1.0 - нормальный
1.3 - на 30 % больше
1.5 - на 50 % больше
2.0 - в 2 раза больше



похоже не пашет, при точно проверке, умножил на 3 чтоб греной себя убить, и так же остается хп - 18-19
 

R1KO

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

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

#define SIZE sizeof(hListSteamIDs) 
#define VALUE 1.5 

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

public OnClientAuthorized(client, const String:auth[]) 
{ 
    IsClientValid[client] = false; 

	SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage); 

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

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

    return Plugin_Continue; 
}
 

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
работает, но не могу понять, как пашет, к примеру на 30% больше урон сделать
похоже не пашет, при точно проверке, умножил на 3 чтоб греной себя убить, и так же остается хп - 18-19
странно как-то

R1KO
Зачем ловить дамаг, если клиент не причастен к этому
upd. Хм, это работает

PHP:
#include <sourcemod>
#include <sdkhooks>

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

#define SIZE sizeof(hListSteamIDs)
#define VALUE 10.5

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

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:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
{
	if (IsClientValid[attacker])
	{
		damage *= VALUE;
		return Plugin_Changed;
	}

	return Plugin_Continue;
}
 
Последнее редактирование:
Сообщения
12
Реакции
0
а можно ли сделать, чтоб она включилась по команде и выключалась?
к примеру sm_alldm 1 включилась и sm_alldm 0 выключилась?
 

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
PHP:
#include <sourcemod>
#include <sdkhooks>

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

#define SIZE sizeof(hListSteamIDs)
#define VALUE 10.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)
	{
		if (IsClientValid[attacker])
		{
			damage *= VALUE;
			return Plugin_Changed;
		}
	}

	return Plugin_Continue;
}

Добавлено через 21 час 46 минут
Оффтоп
 
Последнее редактирование:
Сообщения
12
Реакции
0
PHP:
#include <sourcemod>
#include <sdkhooks>

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

#define SIZE sizeof(hListSteamIDs)
#define VALUE 10.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)
	{
		if (IsClientValid[attacker])
		{
			damage *= VALUE;
			return Plugin_Changed;
		}
	}

	return Plugin_Continue;
}

Добавлено через 21 час 46 минут
Оффтоп


если ты про запись которая была ниже твоей, и удалена автором или еще кем то, то я ее скачал
#include <sdkhooks>

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

#define SIZE sizeof(hListSteamIDs)
#define VALUE 10.5

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

public OnClientAuthorized(client, const String:auth[])
{
if(client)
{
if(PlayersDamage) SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
if(IsFakeClient(client) == false)
{
for(new i; i<SIZE; i++)
{
if(strcmp(auth, hListSteamIDs) == 0)
{
IsClientValid[client] = true;
if(PlayersDamage++ == 0)
{
HookEvent("player_disconnect", PD);
for(i=1; i<=MaxClients; i++) if(IsClientInGame(i)) SDKHook(i, SDKHook_OnTakeDamage, OnTakeDamage);
}
}break;
}
}
}
}

public PD(Handle:E, String:N[], bool:B)
{
new c = GetClientOfUserId(GetEventInt(E, "userid"));
if(c)
{
if(IsClientValid[c])
{
IsClientValid[c] = false;
if(PlayersDamage-- == 1)
{
UnhookEvent("player_disconnect", PD);
for(c=1; c<=MaxClients; c++) if(IsClientInGame(c))
{
if(IsClientValid[c])
{
PlayersDamage = 1;
HookEvent("player_disconnect", PD);
for(c--; 0<c; c--) if(IsClientInGame(c)) SDKHook(c, SDKHook_OnTakeDamage, OnTakeDamage);
break;
}else SDKUnhook(c, SDKHook_OnTakeDamage, OnTakeDamage);
}
}else SDKUnhook(c, SDKHook_OnTakeDamage, OnTakeDamage);
}else SDKUnhook(c, SDKHook_OnTakeDamage, OnTakeDamage);
}
}

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


Вот исходник
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,756

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
AlmazON
Вроде как выяснили, что в если в цикле ловить хук лишь нужным клиентам, то работать оптимально не будет.

Грузит? поподробнее
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,756
Вроде как выяснили, что в если в цикле ловить хук лишь нужным клиентам, то работать оптимально не будет
Ты о чём? Просто хукать надо всех, а не только атакующего.
Грузит? поподробнее
Человека с указанным SteamID нет на сервере - каждый раз происходит хук при подключении, причём он и не отключается при дисконнекте (на нормальных скриптах должен быть).
От каждого ранения проверяется функция... когда, опять же, не нужно вовсе (некому умножать дамаг). Нагрузка ощутимая.
 
Сверху Снизу