Jump to content
  • Chmurka
  • Boróweczka
  • Jabłuszko
  • Limonka
  • Czekoladka
  • Węgielek
Sign in to follow this  
Master

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

Recommended Posts

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!

  • Lubię to! 1
  • Kocham to! 1

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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. ?

Share this post


Link to post
Share on other sites
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 ? 

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites
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.

  • Lubię to! 1
By MAGNET,

Done

Share this post


Link to post
Share on other sites

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

 

  • Lubię to! 1

Share this post


Link to post
Share on other sites
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!

  • Lubię to! 1
By MAGNET,

Done ;)

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites
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!

  • Lubię to! 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

Nasza historia

Na początku byliśmy małą grupą internetowych znajomych, którzy stwierdzili, że potrzebne jest solidne forum, na którym znajdą się ludzie z dużą wiedzą programistyczną ukierunkowaną na CS:GO. Pomysł powstał na początku 2018 roku, a parę miesięcy później, 19 kwietnia, powstała ta strona internetowa. Jako alternatywna odpowiedź na inne tego typu miejsca, poważnie podeszliśmy do tematu, najpierw tłumacząc angielską dokumentację SourceMod'a na język polski, a potem pisząc rozległe poradniki i wypełniając forum najpotrzebniejszymi rzeczami dla właścicieli serwerów i programistów. Cała nasza Ekipa jest dumna z pracy jaką w to włożyliśmy i cieszymy się że zbierają się wokół nas zarówno ludzie znający tematy sourcepawn'a i konfiguracji, jak i również nowe twarze w tym "biznesie", którym z chęcią niesiemy wiedzę oraz pomoc w rozwiązywaniu problemów.

Największe modyfikacje serwerowe

×
×
  • Create New...