Skocz do zawartości
Master

[CS:GO] Brak Obrażeń z Kosy (No_Damage_Knife)

Rekomendowane odpowiedzi

Opis

 

Plugin wyłącza obrażenia z kosy.

 

Spoiler

#include <sdkhooks>

#pragma semicolon 1
#pragma newdecls required

#define NAME		"No Damage Knife"
#define AUTHOR		"Master"
#define VERSION		"3.0"
#define URL			"https://cswild.pl/"

public Plugin myinfo =
{ 
	name	= NAME,
	author	= AUTHOR,
	version	= VERSION,
	url		= URL
};

ConVar g_cMessage_Type;
int g_iMessage_Type;

public void OnPluginStart()
{
    g_cMessage_Type = CreateConVar("sm_no_knife_damage_message", "1", "Powiadomienie: 0 - Brak | 1 - Czat | 2 - Hint | 3 - Czat + Hint", 0); g_cMessage_Type.AddChangeHook(OnCvarChange);
    g_iMessage_Type = g_cMessage_Type.IntValue;

    AutoExecConfig(true, "No_Knife_Damage");
}

public void OnCvarChange(ConVar cvar, char[] oldValue, char[] newValue)
{
    g_iMessage_Type = StringToInt(newValue);
}

public void OnClientPutInServer(int client)
{
    SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
}

public Action OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype) 
{
    if(!IsValidClient(attacker))
        return Plugin_Continue;

    char sWeaponName[64];
    GetClientWeapon(attacker, sWeaponName, sizeof(sWeaponName));

    if(StrContains(sWeaponName, "knife", false) != -1 || StrContains(sWeaponName, "bayonet", false) != -1)
    {
        switch(g_iMessage_Type)
        {
            case 1: PrintToChat(attacker, " [\x10INFO\x01] Administrator wyłączył obrażenia z noża!");
            case 2: PrintHintText(attacker, "Administrator wyłączył obrażenia z noża!");
            case 3:
            {
                PrintToChat(attacker, " [\x10INFO\x01] Administrator wyłączył obrażenia z noża!");
                PrintHintText(attacker, "Administrator wyłączył obrażenia z noża!");
            }
        }

        damage = 0.0;
        return Plugin_Changed;
    }

    return Plugin_Continue;
}

bool IsValidClient(int client)
{
	return (1 <= client <= MaxClients && IsClientInGame(client));
}

 

 

ConVary:

sm_no_knife_damage_message "1" Powiadomienie: 0 - Brak | 1 - Czat | 2 - Hint | 3 - Czat + Hint

Plik konfiguracyjny tworzy się w csgo/cfg/No_Knife_Damage.cfg

 

No_Knife_Damage.sp
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Proponuję dodać jeden warunek dla pewności.

if(damagetype & DMG_SLASH)

 

1 godzinę temu, felik napisał:

Mi nie działa

Możliwe, że koliduje z innym pluginem.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
1 godzinę temu, Avgariat napisał:

Proponuję dodać jeden warunek dla pewności.


if(damagetype & DMG_SLASH)

 

Możliwe, że koliduje z innym pluginem.

 

Nie ma konieczności dodawania takiego warunku, ale istnieje możliwość, że jakiś plugin koliduje.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
GetClientWeapon(attacker, sWeaponName, sizeof(sWeaponName));

Technicznie funkcja powyżej pobiera nazwę broni w chwili zadania obrażeń, więc co się stanie, jeżeli gracz rzuci granat i zmieni broń na nóż? Logicznie rzecz biorąc Twój algorytm potraktuje te obrażenia jako zadane nożem, chociaż nigdy nie sprawdzałem. ?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
44 minuty temu, Avgariat napisał:

GetClientWeapon(attacker, sWeaponName, sizeof(sWeaponName));

Technicznie funkcja powyżej pobiera nazwę broni w chwili zadania obrażeń, więc co się stanie, jeżeli gracz rzuci granat i zmieni broń na nóż? Logicznie rzecz biorąc Twój algorytm potraktuje te obrażenia jako zadane nożem, chociaż nigdy nie sprawdzałem. ?

Wydaje mi się, że szybciej pobrałby broń niż zmieniłbyś ją, ale też nigdy nie sprawdzałem. W wolnej chwili potestuje ? 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Witaj, mam taki problem z powyższym pluginem, spamuje mi konsole takimi oto logami:

 

[SM] Blaming: no_knife_damage.smx
[SM] Call stack trace:
[SM]   [0] GetClientWeapon
[SM]   [1] Line 28, plugin.sp::OnTakeDamage

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Spoiler

#include <sdkhooks>

#pragma semicolon 1
#pragma newdecls required

#define NAME		"No Damage Knife"
#define AUTHOR		"Master"
#define VERSION		"1.0"
#define URL			"https://cswild.pl/"

public Plugin myinfo =
{ 
	name	= NAME,
	author	= AUTHOR,
	version	= VERSION,
	url		= URL
};

public void OnClientPutInServer(int client)
{
    SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
}

public Action OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype) 
{
    if(!attacker || !IsClientInGame(attacker))
        return Plugin_Continue;

    char sWeaponName[64];
    GetClientWeapon(attacker, sWeaponName, sizeof(sWeaponName));

    if(StrContains(sWeaponName, "knife", false) != -1 || StrContains(sWeaponName, "bayonet", false) != -1)
    {
        damage = 0.0;
        return Plugin_Changed;
    }

    return Plugin_Continue;
}  

 

Zapomniałem sprawdzić walidacji gracza. Proszę moderatorów o aktualizacje kodu.

Przez MAGNET,

Done

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Tym razem inny błąd, po wgraniu poprawionego pluginu
 

[SM] Blaming: no_knife_damage.smx
[SM] Call stack trace:
[SM]   [0] IsClientInGame
[SM]   [1] Line 26, plugin.sp::OnTakeDamage
[SM] Exception reported: Client index 76 is invalid

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Spoiler

#include <sdkhooks>

#pragma semicolon 1
#pragma newdecls required

#define NAME		"No Damage Knife"
#define AUTHOR		"Master"
#define VERSION		"2.0"
#define URL			"https://cswild.pl/"

public Plugin myinfo =
{ 
	name	= NAME,
	author	= AUTHOR,
	version	= VERSION,
	url		= URL
};

public void OnClientPutInServer(int client)
{
    SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
}

public Action OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype) 
{
    if(!IsValidClient(attacker))
        return Plugin_Continue;

    char sWeaponName[64];
    GetClientWeapon(attacker, sWeaponName, sizeof(sWeaponName));

    if(StrContains(sWeaponName, "knife", false) != -1 || StrContains(sWeaponName, "bayonet", false) != -1)
    {
        damage = 0.0;
        return Plugin_Changed;
    }

    return Plugin_Continue;
}

bool IsValidClient(int client)
{
	return (1 <= client <= MaxClients && IsClientInGame(client));
}

 

Teraz już musi być dobrze. Nie byłem świadom, że trzeba sprawdzać index gracza przy tym evencie. Ponownie proszę o aktualizację kodu przez moderatorów.

No_Knife_Damage.sp
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!

Przez MAGNET,

Done ;)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie mogę edytować poprzedniego posta, więc tak plugin działa - brak jakichkolwiek errorlogów

I tutaj jeszcze moja sugestia, można by dodać do niego info na say w stylu "Administrator wyłączył możliwość zadawania obrażeń nożem" czy coś w ten deseń, informujący gracza ponieważ czasem nieświadomy gracz naparza nożem przeciwnika i nie wie o co chodzi ;D

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Spoiler

#include <sdkhooks>

#pragma semicolon 1
#pragma newdecls required

#define NAME		"No Damage Knife"
#define AUTHOR		"Master"
#define VERSION		"3.0"
#define URL			"https://cswild.pl/"

public Plugin myinfo =
{ 
	name	= NAME,
	author	= AUTHOR,
	version	= VERSION,
	url		= URL
};

ConVar g_cMessage_Type;
int g_iMessage_Type;

public void OnPluginStart()
{
    g_cMessage_Type = CreateConVar("sm_no_knife_damage_message", "1", "Powiadomienie: 0 - Brak | 1 - Czat | 2 - Hint | 3 - Czat + Hint", 0); g_cMessage_Type.AddChangeHook(OnCvarChange);
    g_iMessage_Type = g_cMessage_Type.IntValue;

    AutoExecConfig(true, "No_Knife_Damage");
}

public void OnCvarChange(ConVar cvar, char[] oldValue, char[] newValue)
{
    g_iMessage_Type = StringToInt(newValue);
}

public void OnClientPutInServer(int client)
{
    SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
}

public Action OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype) 
{
    if(!IsValidClient(attacker))
        return Plugin_Continue;

    char sWeaponName[64];
    GetClientWeapon(attacker, sWeaponName, sizeof(sWeaponName));

    if(StrContains(sWeaponName, "knife", false) != -1 || StrContains(sWeaponName, "bayonet", false) != -1)
    {
        switch(g_iMessage_Type)
        {
            case 1: PrintToChat(attacker, " [\x10INFO\x01] Administrator wyłączył obrażenia z noża!");
            case 2: PrintHintText(attacker, "Administrator wyłączył obrażenia z noża!");
            case 3:
            {
                PrintToChat(attacker, " [\x10INFO\x01] Administrator wyłączył obrażenia z noża!");
                PrintHintText(attacker, "Administrator wyłączył obrażenia z noża!");
            }
        }

        damage = 0.0;
        return Plugin_Changed;
    }

    return Plugin_Continue;
}

bool IsValidClient(int client)
{
	return (1 <= client <= MaxClients && IsClientInGame(client));
}

 

 

@Angel Dodałem convar, który umożliwia wybranie własnych preferencji odnośnie powiadomień.

 

Plik tworzy się w

csgo/cfg/No_Knife_Damage.cfg
sm_no_knife_damage_message "1" Powiadomienie: 0 - Brak | 1 - Czat | 2 - Hint | 3 - Czat + Hint

 

No_Knife_Damage.sp
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Napisano (edytowane)

@Master

Hmm, u mnie na serwerze plugin przestał działać sam z siebie. Nic nie dodawałem ostatnio a nie działa, brak żadnych error logów... Czy jest to możliwe, że jakaś aktualizacja zepsuła plugin czy jest to tylko u mnie? 

Pozdrawiam.

 

Edytowane przez mefiu

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@szogun tak jak tutaj kolega powiedział, aktualizacja sourcemoda pomogła. Dzięki i do następnego! 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić obrazków. Dodaj lub załącz obrazki z adresu URL.


×
×
  • Dodaj nową pozycję...