Jump to content
  • Chmurka
  • Boróweczka
  • Jabłuszko
  • Limonka
  • Czekoladka
  • Węgielek
szogun

[Brak rozwiązania] Dmg z molotova

Recommended Posts

Mam malutki problem z pluginem który zadaje dmg po wejściu w molotova od swojej drużyny

 

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

#define PLUGIN_AUTHOR "f0re4ch"
#define PLUGIN_VERSION "1.0"

public Plugin:myinfo =
{
	name = "Competitive Anti-FF",
	author = PLUGIN_AUTHOR,
	description = "Protects Players from Friendly-Fire but enable molotov damage",
	version = PLUGIN_VERSION,
	url = "http://kpservidores.com"
};

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

public Action OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &weapon, float damageForce[3], float damagePosition[3])
{
	int attackerUserId = attacker;
	int victimUserId = victim;

	char WeaponCallBack[32];
	GetEdictClassname(inflictor, WeaponCallBack, sizeof(WeaponCallBack));

	if ((!IsValidEntity(victimUserId)) || (!IsValidEntity(attackerUserId)))
		return Plugin_Continue;

	if ((strlen(WeaponCallBack) <= 0) || (attackerUserId == victimUserId) || (GetClientTeam(victimUserId) != GetClientTeam(attackerUserId)) )
		return Plugin_Continue;

	if (StrEqual(WeaponCallBack, "inferno", false))
		return Plugin_Continue;

	return Plugin_Handled;
}

 

 

 [SM] Exception reported: Client index 306 is invalid
 [SM] Blaming: no_ff_molotov.smx
 [SM] Call stack trace:
 [SM] [0] GetClientTeam
 [SM] [1] Line 21, no_ff_molotov.sp::OnTakeDamage
[SM] Exception reported: Client index 306 is invalid

 

Share this post


Link to post
Share on other sites

Przed sprawdzaniem drużyny klienta nie sprawdzasz czy jest w ogóle połączony z serwerem lub czy jest w grze, stąd error

Share this post


Link to post
Share on other sites
42 minuty temu, Bioły napisał:

if (IsValidClient(client))

Maybe?

Samo IsValidClient nie wystarczy ? Trzeba też to utworzyć na dole

 

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

No i zrobić to tak:

 

if (!IsValidClient(client))
{
	return;
}

 

Efekt powinien wyglądać +- tak

 

Spoiler

/*	Copyright (C) 2019 f0re4ch
	This program is free software: you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.
	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.
	
	You should have received a copy of the GNU General Public License
	along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

#pragma newdecls required
#pragma semicolon 1

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

#define PLUGIN_AUTHOR "f0re4ch"
#define PLUGIN_VERSION "1.0"

public Plugin myinfo =
{
	name = "Competitive Anti-FF",
	author = PLUGIN_AUTHOR,
	description = "Protects Players from Friendly-Fire but enable molotov damage",
	version = PLUGIN_VERSION,
	url = "http://kpservidores.com"
};

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

public Action OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &weapon, float damageForce[3], float damagePosition[3])
{
	int attackerUserId = attacker;
	int victimUserId = victim;

	char WeaponCallBack[32];
	GetEdictClassname(inflictor, WeaponCallBack, sizeof(WeaponCallBack));

	if(!IsValidClient(attacker))
	{
		return Plugin_Continue;
	}

	if ((!IsValidEntity(victimUserId)) || (!IsValidEntity(attackerUserId)))
		return Plugin_Continue;

	if ((strlen(WeaponCallBack) <= 0) || (attackerUserId == victimUserId) || (GetClientTeam(victimUserId) != GetClientTeam(attackerUserId)) )
		return Plugin_Continue;

	if (StrEqual(WeaponCallBack, "inferno", false))
		return Plugin_Continue;

	return Plugin_Handled;
}

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

 

 

  • Lubię to! 1
  • Dobry pomysł! 1

Share this post


Link to post
Share on other sites

Coś mi to nie do końca działa na sm_cvar mp_friendlyfire 1 zabiera dmg nawet przy strzelaniu do swojego a nie jak było założenie aby tylko molotov mógł zabierać dmg.

Share this post


Link to post
Share on other sites

Sprawdź czy na pewno obrażenia od mołotowa nazywają się "inferno" poprzez wyświetlanie nazwy WeaponCallBack zaraz przed ostatnim if'em

Share this post


Link to post
Share on other sites

Wiadomość wygenerowana automatycznie

 

Temat został zamknięty i przeniesiony do działu "Przestarzałe tematy". Powodem jest brak rozwiązania problemu zawartego w temacie lub brak zainteresowania autora w jego rozwiązaniu.

 

Jeśli się z tym nie zgadzasz, zaraportuj ten post z prośbą o ponowne otwarcie i kontynuację dyskusji.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

  • 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...