Плагин для убийства дымовой гранатой

Сергей Божко

Участник
Сообщения
10
Реакции
0
Всем привет! Столкнулся с проблемой, дымовой гранатой никого нельзя убить на картах, подскажите пожалуйста плагин для решения этой проблемы.
 

Emma Hewitt

v34 живи
Сообщения
75
Реакции
30
Наверно дело в Noblock'e. А ты ставил плагин кидание ножей?)
 

Сергей Божко

Участник
Сообщения
10
Реакции
0
Да, они тоже никого не убивали. Я помню я ставил антифлуд оружием + noblock, но теперь найти его не могу
 

KorDen

Atra esterní ono thelduin!
Сообщения
2,142
Реакции
1,424
Сергей Божко, поставь простой NoBlock, вот код (создать sp файл с ним и скомпилировать)
PHP:
#include <sourcemod>
#include <sdktools>
new g_offsCollisionGroup=-1;
public OnPluginStart()
{
	g_offsCollisionGroup = FindSendPropOffs("CBaseEntity", "m_CollisionGroup");
	if (g_offsCollisionGroup == -1)
		SetFailState("[NoBlock] Failed to get offset");
	HookEvent("player_spawn", OnSpawn, EventHookMode_Post);
}
public OnSpawn(Handle:event, const String:name[], bool:dontBroadcast)
	SetEntData(GetClientOfUserId(GetEventInt(event, "userid")), g_offsCollisionGroup, 2, 4, true);
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #5
KorDen, а как сделать, чтобы он только для членов своей команды работал ?
 

KorDen

Atra esterní ono thelduin!
Сообщения
2,142
Реакции
1,424
R1KO, простым способом невозможно
 
  • Мне нравится
Реакции: R1KO

Серый™

CS:S Server
Сообщения
2,925
Реакции
1,376
R1KO, я пользуюсь таким плагом No-collide Team-mate
PHP:
/*
Thanks to VoiDeD for his collisionhook extension which allow us to say good-bye to the mayhem bug ;)
*/

#include <sourcemod>
#include <sdktools>
#include <collisionhook>

#define VERSION "2.0.0"

#pragma semicolon 1

#define COLLIDE_DISABLE_BUTTONS (IN_ATTACK | IN_ATTACK2)

public Plugin:myinfo =
{
	name = "No-collide Team-mate",
	author = "Mirandor",
	description = "Players dont collide if there on the same team.",
	version = VERSION,
	url = ""
};

new Handle:g_NoCollide_Chat 	= INVALID_HANDLE;
new Handle:g_NoCollide_Time 	= INVALID_HANDLE;
new Handle:g_FriendlyFire 		= INVALID_HANDLE;
new NoCollide_FF 				= 0;
new NoCollide_Chat 				= 0;
new Float:NoCollide_Time 		= 0.0;
new bool:NoCollide_Disabled 	= false;
new bool:NoCollide_Delayed 		= false;
new bool:P_Move[MAXPLAYERS+1]	= false;

public OnPluginStart()
{
	LoadTranslations("no_collide_teammate.phrases");
	
	CreateConVar( "SM_NoCollideTeammate_version", VERSION, "Version of the no-collide team-mate plugin", FCVAR_PLUGIN | FCVAR_REPLICATED | FCVAR_NOTIFY );
	
	g_NoCollide_Chat = CreateConVar("SM_NoCollideTeammate_Chat", "1", "Messages displayed to all players (in chat) or to server console only.\n1 - Print to chat\n0 - Print to server", _, true, 0.0, true, 1.0);
	g_NoCollide_Time = CreateConVar("SM_NoCollideTeammate_Time", "0.0", "Number of seconds after round_start with no-collision features.\n-1.0 = Collisions are always enabled\n 0.0 = Collisions are always disabled (default setting)\n>0.0 = Collisions are disabled for x seconds)", FCVAR_NONE, true, -1.0);
	//FriendlyFire does not work as is while collisions are removed, so i've had to add a shitty option to take care of it...
	g_FriendlyFire = FindConVar("mp_friendlyfire");
	
	HookEvent("round_start", EventRoundStart);
	
	HookConVarChange(g_NoCollide_Chat, OnSettingsChanged);
	HookConVarChange(g_NoCollide_Time, OnSettingsChanged);
	HookConVarChange(g_FriendlyFire, OnSettingsChanged);
	
	AutoExecConfig(true, "no_collide_teammate");
}

public OnMapStart()
{
	NoCollide_Chat = GetConVarInt(g_NoCollide_Chat);
	NoCollide_Time = GetConVarFloat(g_NoCollide_Time);
	if (NoCollide_Time < 0)
		NoCollide_Disabled = true;
}

public Action:EventRoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
	if (NoCollide_Time < 0)
	{
		if (NoCollide_Chat)
			PrintToChatAll("[SM] %t", "NCTC_P_Enabled");
		else
			PrintToServer("Team-mate collisions are permanently Enabled.");
	}
	else
	{
		if (NoCollide_Time == 0)
		{
			if (NoCollide_Chat)
				PrintToChatAll("\x01[SM] %t", "NCTC_P_Disabled");
			else
				PrintToServer("Team-mate collisions are permanently Disabled.");
		}
		else
		{
			for (new i = 1; i <= MaxClients; i++)
				if (IsClientInGame(i))
					P_Move[i] = false;
			
			if (NoCollide_Chat)
				PrintToChatAll("\x01[SM] %t", "NCTC_Disabled", "\x04", NoCollide_Time, "\x01");
			else
				PrintToServer("Team-mate collisions are Disabled for %0.1f seconds.", NoCollide_Time);
			
			NoCollide_Disabled = false;
			NoCollide_Delayed = false;
			CreateTimer(NoCollide_Time, Timer_Check_Collision, _, TIMER_FLAG_NO_MAPCHANGE);
		}
	}
}

public Action:Timer_Check_Collision(Handle:timer)
{
	NoCollide_Delayed = true;
	CreateTimer(0.1, Timer_Disable_Collision, _, TIMER_FLAG_NO_MAPCHANGE);
}

public Action:Timer_Disable_Collision(Handle:timer)
{
	if (NoCollide_Chat)
		PrintToChatAll("[SM] %t", "NCTC_Enabled");
	else
		PrintToServer("[SM] Team-mate collisions are now Enabled.");
	
	NoCollide_Disabled = true;
}

public Action:CH_PassFilter(ent1, ent2, &bool:result)
{	
	if (NoCollide_Disabled)
		return Plugin_Continue;
	
	if (IsValidClient(ent1) && IsValidClient(ent2))
	{
		if (IsSameTeam(ent1, ent2))
		{
			//If FriendlyFire is ON, we have to check if players are using attack or attack2 buttons...
			if(NoCollide_FF)
				if((GetClientButtons(ent1) & COLLIDE_DISABLE_BUTTONS) || (GetClientButtons(ent2) & COLLIDE_DISABLE_BUTTONS))
					return Plugin_Continue;
					
			//FF is Off or players don't use attack/attack2 buttons so let's remove collisions
			result = false;
			
			//Timer has just ended, so let's check if many players have to be moved...
			if (NoCollide_Delayed)
				ShouldMove(ent1, ent2);
				
			return Plugin_Handled;
		}
		return Plugin_Continue;
	}
	return Plugin_Continue;
}

ShouldMove(player1, player2)
{
	new Float:vec_player1[3], Float:vec_player2[3];
	GetClientAbsOrigin(player1, vec_player1);
	GetClientAbsOrigin(player2, vec_player2);
			
	if(GetVectorDistance(vec_player1, vec_player2) < 33.0)
	{
		//PrintToServer("%N collide with %N", player1, player2);
				
		if (P_Move[player1] && P_Move[player2])
			P_Move[player2] = false;
				
		if (!P_Move[player2])
		{
			//Force player2 to move backward
			//we hope players won't collide anymore...
			vec_player2[0] = FloatSub(vec_player2[0], 65.0);
			TeleportEntity(player2, vec_player2, NULL_VECTOR, NULL_VECTOR);
					
			if (NoCollide_Chat)
				PrintToChat(player2, "[SM] %t", "NCTC_Moved");
			else
				PrintToConsole(player2, "[SM] You have been moved to prevent a collision with a team-mate.");
					
			P_Move[player1] = true;
			P_Move[player2] = true;
		}
	}
}

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

stock bool:IsSameTeam(client1, client2) 
{
	new team1 = GetClientTeam(client1);
	new team2 = GetClientTeam(client2);
	
	if (team1 == team2 && team1 > 0) 
		return true;
		
	return false; 
}

public OnSettingsChanged(Handle:cvar, const String:oldvalue[], const String:newvalue[])
{
	if(cvar == g_NoCollide_Chat)
		NoCollide_Chat = StringToInt(newvalue);
	
	if(cvar == g_NoCollide_Time)
	{
		NoCollide_Time = StringToFloat(newvalue);
		
		if (NoCollide_Time < 0)
		{
			NoCollide_Time = -1.0;
			NoCollide_Disabled = true;
		}
		else
			NoCollide_Disabled = false;
			
		NoCollide_Delayed = false;
	}
	if(cvar == g_FriendlyFire)
		NoCollide_FF = StringToInt(newvalue);
}
Для работы нужно расширение collisionhook.ext
 
  • Мне нравится
Реакции: R1KO

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #8
KorDen, как обратно вернуть ? после
PHP:
SetEntData(GetClientOfUserId(GetEventInt(event, "userid")), g_offsCollisionGroup, 2, 4, true);
 
Сверху Снизу