The End Is Near...
Russian Roulette
- Сообщения
- 874
- Реакции
- 691
public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
{
if (0 < attacker <= MaxClients)
{
if (IsClientValid[attacker])
{
damage *= VALUE;
return Plugin_Changed;
}
}
return Plugin_Continue;
}
public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
{
if (0 < attacker <= MaxClients)
{
if (IsClientValid[victim])
{
damage *= VALUE;
return Plugin_Changed;
}
}
return Plugin_Continue;
}
точно так же но
вместо
надо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; }
И VALUE должно быть ниже 1.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; }
Тоесть от 0.0 до 1.0
#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;
}
Никто так и не догадался это убрать? :)0 < attacker
Так ты же своей проверкой наоборот, урон от сервера отсекаешь - защиты от него нет. А валидным атакующим сервер итак быть не сможет.Разве сервер не может нанести урон?
Сама проверка как раз и не нужна. Только лишняя нагрузка (событие то весьма частовызываемое).не нужно
Дмитрий Иванов 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; }
Букву потерял, вот и не компилируется.if (0 < attacker <= MaxClients && IsClientValid[attacker])
Букву потерял, вот и не компилируется.
#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;
}
Уже разобрался)@Ice_Sochi, в см нет функции IsClientValid, это кто-то сам написал такую функцию, а ты от туда это содрал без самой функции.
#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;
}
#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;
}