нанесение урона, скрипт.

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
PHP:
#pragma semicolon 1

#include <sourcemod>
#include <sdktools>
#include <sdkhooks>

new bool:bAntiknife;

public OnPluginStart()
{
	for(new i = 1; i <= MaxClients; i++)
	{
		if(IsClientValid(i))
		{
			SDKHook(i, SDKHook_TraceAttack, OnTraceAttack);
		}
	}
	
	RegConsoleCmd("sm_antiknife", AntiKnife);
	RegConsoleCmd("sm_anti_knife", AntiKnife);
	RegConsoleCmd("sm_anti-knife", AntiKnife);
}

public OnClientPutInServer(client)
{
	SDKHook(client, SDKHook_TraceAttack, OnTraceAttack);
}

public Action:AntiKnife(client, args)
{
	bAntiknife = true;
}

public Action:OnTraceAttack(victim, &attacker, &inflictor, &Float:damage, &damagetype, &ammotype, hitbox, hitgroup)
{
    if(bAntiknife == true)
    {
        if(IsClientValid(attacker) && IsClientValid(victim))
        {
            decl String:sWeapon[32];
            GetClientWeapon(attacker, sWeapon, sizeof(sWeapon));
            if(StrEqual(sWeapon[7], "knife", false))
            {
                return Plugin_Handled;
            }
        }
		
        return Plugin_Continue;
    }
} 

stock bool:IsClientValid(client)
{
    if(client > 0 && client <= MaxClients && IsClientInGame(client))
    {
        return true;
    }
    return false;
}
Что не так? Выдает ошибку при компиляции.
Оффтоп
 

Саша Шеин

Кому костылей?
Сообщения
1,697
Реакции
621
Hejter,
C-подобный:
#pragma semicolon 1

#include <sourcemod>
#include <sdktools>
#include <sdkhooks>

new bool:bAntiknife;

public OnPluginStart()
{
    for(new i = 1; i <= MaxClients; i++)
    {
        if(IsClientValid(i))
        {
            SDKHook(i, SDKHook_TraceAttack, OnTraceAttack);
        }
    }
    
    RegConsoleCmd("sm_antiknife", AntiKnife);
    RegConsoleCmd("sm_anti_knife", AntiKnife);
    RegConsoleCmd("sm_anti-knife", AntiKnife);
}

public OnClientPutInServer(client)
{
    SDKHook(client, SDKHook_TraceAttack, OnTraceAttack);
}

public Action:AntiKnife(client, args)
{
    bAntiknife = true;
}

public Action:OnTraceAttack(victim, &attacker, &inflictor, &Float:damage, &damagetype, &ammotype, hitbox, hitgroup)
{
    if(bAntiknife == true)
    {
        if(IsClientValid(attacker) && IsClientValid(victim))
        {
            decl String:sWeapon[32];
            GetClientWeapon(attacker, sWeapon, sizeof(sWeapon));
            if(StrEqual(sWeapon[7], "knife", false))
            {
                return Plugin_Handled;
            }
        }
    }
    [B]return Plugin_Continue;[/B]
} 

stock bool:IsClientValid(client)
{
    if(client > 0 && client <= MaxClients && IsClientInGame(client))
    {
        return true;
    }
    return false;
}
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
if(StrEqual(sWeapon[7], "knife", false))
Оффтоп
PHP:
if(bAntiknife == true)
Любой один игрок прописал и всё, на всю "жизнь" сервера?!
PHP:
stock bool:IsClientValid(client)
{
 if(client > 0 && client <= MaxClients && IsClientInGame(client))
 {
 return true;
 }
 return false;
}
Кака.
 
  • Мне нравится
Реакции: TWRP

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Hejter, не помню, что делает SDKHook_TraceAttack, поэтому может быть не верно исполнение кода:
PHP:
#pragma semicolon 1

#include <sourcemod>
#include <sdktools>
#include <sdkhooks>

new bool:bAntiknife[MAXPLAYERS+1];

public OnPluginStart()
{
    for(new i = 1; i <= MaxClients; i++)
    {
        if(IsClientValid(i))
        {
            SDKHook(i, SDKHook_TraceAttack, OnTraceAttack);
        }
    }
    
    RegConsoleCmd("sm_antiknife", AntiKnife);
    RegConsoleCmd("sm_anti_knife", AntiKnife);
    RegConsoleCmd("sm_anti-knife", AntiKnife);
}

public OnClientPutInServer(client)
{
    SDKHook(client, SDKHook_TraceAttack, OnTraceAttack);
	bAntiknife[client] = false;
}

public Action:AntiKnife(client, args)
{
    bAntiknife[client] = !bAntiknife[client];
}

public Action:OnTraceAttack(victim, &attacker, &inflictor, &Float:damage, &damagetype, &ammotype, hitbox, hitgroup)
{
    if(bAntiknife[victim])
    {
        if(attacker <= MaxClients)
        {
            decl String:sWeapon[13];
            GetClientWeapon(attacker, sWeapon, 13);
            if(strcmp(sWeapon[7], "knife") == 0)
            {
                return Plugin_Handled;
            }
        }
    }
	return Plugin_Continue;
}
Команда теперь не только включает, но и отключает при повторном вводе.
Теперь поддерживает почти все ножи CS:GO (допишешь, если не CS:S).
 

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
Оффтоп

Оффтоп

Добавлено через 32 минуты
Hejter, не помню, что делает SDKHook_TraceAttack, поэтому может быть не верно исполнение кода:
PHP:
#pragma semicolon 1

#include <sourcemod>
#include <sdktools>
#include <sdkhooks>

new bool:bAntiknife[MAXPLAYERS+1];

public OnPluginStart()
{
    for(new i = 1; i <= MaxClients; i++)
    {
        if(IsClientValid(i))
        {
            SDKHook(i, SDKHook_TraceAttack, OnTraceAttack);
        }
    }
    
    RegConsoleCmd("sm_antiknife", AntiKnife);
    RegConsoleCmd("sm_anti_knife", AntiKnife);
    RegConsoleCmd("sm_anti-knife", AntiKnife);
}

public OnClientPutInServer(client)
{
    SDKHook(client, SDKHook_TraceAttack, OnTraceAttack);
	bAntiknife[client] = false;
}

public Action:AntiKnife(client, args)
{
    bAntiknife[client] = !bAntiknife[client];
}

public Action:OnTraceAttack(victim, &attacker, &inflictor, &Float:damage, &damagetype, &ammotype, hitbox, hitgroup)
{
    if(bAntiknife[victim])
    {
        if(attacker <= MaxClients)
        {
            decl String:sWeapon[13];
            GetClientWeapon(attacker, sWeapon, 13);
            if(strcmp(sWeapon[7], "knife") == 0)
            {
                return Plugin_Handled;
            }
        }
    }
	return Plugin_Continue;
}
Команда теперь не только включает, но и отключает при повторном вводе.
Теперь поддерживает почти все ножи CS:GO (допишешь, если не CS:S).

Как прикрутить файл перевода?
PHP:
public Action:AntiKnife(client, args)
{
    bAntiknife[client] = !bAntiknife[client];
 if (!bAntiknife[client])
  PrintToChat(client, "[Anti-Knife] %t", "AntiKnifeEnable");
 else
  PrintToChat(client, "[Anti-Knife] %t", "AntiKnifeDisable");
 return Plugin_Handled; 
}

PHP:
public Action:AntiKnife(client, args)
{
    bAntiknife[client] = !bAntiknife[client];
  PrintToChat(client, "[Anti-Knife] %t", "AntiKnifeEnable");
 else
  PrintToChat(client, "[Anti-Knife] %t", "AntiKnifeDisable");
 return Plugin_Handled; 
}

Что я хочу сделать. Чтобы оповещало в чате, что клиент установил защиту от ножа.
 
Последнее редактирование:

White Wolf

🍉
Сообщения
2,382
Реакции
2,187
  • Команда форума
  • #10
Hejter, создаешь файл в addons/sourcemod/translations с названием anti-knife.phrases.txt
Далее пишешь в OnPluginStart()
PHP:
LoadTranslations("anti-knife.phrases");

Далее используешь свой код #1. После чего редактируешь anti-knife.phrases.txt таким форматом:
C-подобный:
"Phrases"
{
       "AntiKnifeEnable"
       {
             "en"         "Фраза включения на англ."
             "ru"         "Фраза включения на рус."
       }
       "AntiKnifeDisable"
       {
             "en"         "Фраза выключения на англ."
             "ru"         "Фраза выключения на рус."
       }
}
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
оповещало в чате, что клиент установил защиту от ножа
PHP:
public Action:AntiKnife(client, args) 
{ 
 PrintToChat(client, "[Anti-Knife] %t", (bAntiknife[client] = !bAntiknife[client]) ? "AntiKnifeEnable":"AntiKnifeDisable"); 
 return Plugin_Handled;  
}
Только условься не прописывать команды в консоли, либо добавь проварку if(client).
используешь свой код #1
И при включении будет писать, что выключено...
 

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
Hejter, создаешь файл в addons/sourcemod/translations с названием anti-knife.phrases.txt
Далее пишешь в OnPluginStart()
PHP:
LoadTranslations("anti-knife.phrases");

Далее используешь свой код #1. После чего редактируешь anti-knife.phrases.txt таким форматом:
C-подобный:
"Phrases"
{
       "AntiKnifeEnable"
       {
             "en"         "Фраза включения на англ."
             "ru"         "Фраза включения на рус."
       }
       "AntiKnifeDisable"
       {
             "en"         "Фраза выключения на англ."
             "ru"         "Фраза выключения на рус."
       }
}

Это то я знаю, что и как создать, я не знал какой именно код, правильный.
 
Сверху Снизу