Skocz do zawartości
kubraczekk

Szukam pluginu - odrzucanie/popychanie gracza

Rekomendowane odpowiedzi

Cześć, szukam pluginu na odrzucanie przeciwnika/teammate. Mianowicie mam 2 pomysły i byłbym bardzo zadowolony jakby ktoś miał któryś.

1) Odrzucanie gracza (na +use)

2) Możliwość popychania graczy


Z góry bardzo dziękuje i wynagrodzę plusikami

 

Edytowane przez kubraczekk

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
2 godziny temu, kubraczekk napisał:

Odrzucanie gracza (na +use)

Widziałem w którymś anit rushu funkcję do tego. Poprzeglądaj kody pluginów tego typu.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość
Spoiler
#include <sourcemod>
#include <sdktools>

ConVar szybkosc_odepchniecia;
ConVar sila_odepchniecia;
ConVar odlegosc_do_odepchniecia;

public Plugin myinfo =
{
	name = "Odpychanie na E",
	author = "SUPER TIMOR",
	description = "Plugin na odpychanie graczy",
	version = "1.0",
	url = "http://goBoosting.pl"
};

public void OnPluginStart()
{
	szybkosc_odepchniecia = CreateConVar("szybkosc_odepchniecia", "30.0", "Szybkosc lotu odepchnietego");
	sila_odepchniecia = CreateConVar("sila_odepchniecia", "10.0", "Sila odepchniecia");
	odlegosc_do_odepchniecia = CreateConVar("odlegosc_do_odepchniecia", "80.0", "Ogległość, w której muszą się znajdować gracze by się odepchnąć");
	AutoExecConfig(true, "", "sourcemod");
}

public Action OnPlayerRunCmd(int client, int& buttons, int& impulse, float vel[3], float angles[3], int& weapons)
{
	if(!IsValidClient(client) || !IsPlayerAlive(client))
		return Plugin_Continue;

	if(buttons & IN_USE)
	{
		int target = GetClientAimTarget(client);
	
		if(!IsValidClient(target) || !IsPlayerAlive(target))
			return Plugin_Continue;
		
		float clientPos[3], targetPos[3], pushVel[3];
		GetClientAbsOrigin(client, clientPos);
		GetClientAbsOrigin(target, targetPos);
		float distance = GetVectorDistance(targetPos, clientPos);
		distance = (distance > 0.0) ? distance : 1.0;
		if(distance > odlegosc_do_odepchniecia.FloatValue)
			return Plugin_Continue;
		
		SubtractVectors(clientPos, targetPos, pushVel);
			
		pushVel[0] = -pushVel[0];
		pushVel[1] = -pushVel[1];
		pushVel[2] = szybkosc_odepchniecia.FloatValue;
		ScaleVector(pushVel, sila_odepchniecia.FloatValue);
		TeleportEntity(target, NULL_VECTOR, NULL_VECTOR, pushVel);
	}
	
	return Plugin_Continue;
}
public bool IsValidClient(int client)
{
	if(client >= 1 && client <= MaxClients && IsClientInGame(client))
		return true;

	return false;
}

 

Spróbuj tego, nie testowałem 😛 W razie czego jak za mocno, lub za lekko będzie odpychało kombinuj z convarami. 

Nie napisałeś czy teammate mogą się odpychać czy nie, i czy to na jedno wciśnięcie E czy cały czas 😛

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
3 godziny temu, VestSmart napisał:

A do czego ci potrzebny jest taki plugin? 

Odwzorowuje TTT z garrysmoda

1 godzinę temu, SUPER TIMOR napisał:
 
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! Pokaż ukrytą zawartość

#include <sourcemod>
#include <sdktools>

ConVar szybkosc_odepchniecia;
ConVar sila_odepchniecia;
ConVar odlegosc_do_odepchniecia;

public Plugin myinfo =
{
	name = "Odpychanie na E",
	author = "SUPER TIMOR",
	description = "Plugin na odpychanie graczy",
	version = "1.0",
	url = "http://goBoosting.pl"
};

public void OnPluginStart()
{
	szybkosc_odepchniecia = CreateConVar("szybkosc_odepchniecia", "30.0", "Szybkosc lotu odepchnietego");
	sila_odepchniecia = CreateConVar("sila_odepchniecia", "10.0", "Sila odepchniecia");
	odlegosc_do_odepchniecia = CreateConVar("odlegosc_do_odepchniecia", "80.0", "Ogległość, w której muszą się znajdować gracze by się odepchnąć");
	AutoExecConfig(true, "", "sourcemod");
}

public Action OnPlayerRunCmd(int client, int& buttons, int& impulse, float vel[3], float angles[3], int& weapons)
{
	if(!IsValidClient(client) || !IsPlayerAlive(client))
		return Plugin_Continue;

	if(buttons & IN_USE)
	{
		int target = GetClientAimTarget(client);
	
		if(!IsValidClient(target) || !IsPlayerAlive(target))
			return Plugin_Continue;
		
		float clientPos[3], targetPos[3], pushVel[3];
		GetClientAbsOrigin(client, clientPos);
		GetClientAbsOrigin(target, targetPos);
		float distance = GetVectorDistance(targetPos, clientPos);
		distance = (distance > 0.0) ? distance : 1.0;
		if(distance > odlegosc_do_odepchniecia.FloatValue)
			return Plugin_Continue;
		
		SubtractVectors(clientPos, targetPos, pushVel);
			
		pushVel[0] = -pushVel[0];
		pushVel[1] = -pushVel[1];
		pushVel[2] = szybkosc_odepchniecia.FloatValue;
		ScaleVector(pushVel, sila_odepchniecia.FloatValue);
		TeleportEntity(target, NULL_VECTOR, NULL_VECTOR, pushVel);
	}
	
	return Plugin_Continue;
}
public bool IsValidClient(int client)
{
	if(client >= 1 && client <= MaxClients && IsClientInGame(client))
		return true;

	return false;
}

 

Spróbuj tego, nie testowałem 😛 W razie czego jak za mocno, lub za lekko będzie odpychało kombinuj z convarami. 

Nie napisałeś czy teammate mogą się odpychać czy nie, i czy to na jedno wciśnięcie E czy cały czas 😛

Teammate mogą się odpychać, na wciśnięcie E

 

Wroce do domu (za godzinę max) to przetestuje ale z góry bardzo dziękuje za pomoc 👍

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
4 godziny temu, SUPER TIMOR napisał:
 
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! Pokaż ukrytą zawartość

#include <sourcemod>
#include <sdktools>

ConVar szybkosc_odepchniecia;
ConVar sila_odepchniecia;
ConVar odlegosc_do_odepchniecia;

public Plugin myinfo =
{
	name = "Odpychanie na E",
	author = "SUPER TIMOR",
	description = "Plugin na odpychanie graczy",
	version = "1.0",
	url = "http://goBoosting.pl"
};

public void OnPluginStart()
{
	szybkosc_odepchniecia = CreateConVar("szybkosc_odepchniecia", "30.0", "Szybkosc lotu odepchnietego");
	sila_odepchniecia = CreateConVar("sila_odepchniecia", "10.0", "Sila odepchniecia");
	odlegosc_do_odepchniecia = CreateConVar("odlegosc_do_odepchniecia", "80.0", "Ogległość, w której muszą się znajdować gracze by się odepchnąć");
	AutoExecConfig(true, "", "sourcemod");
}

public Action OnPlayerRunCmd(int client, int& buttons, int& impulse, float vel[3], float angles[3], int& weapons)
{
	if(!IsValidClient(client) || !IsPlayerAlive(client))
		return Plugin_Continue;

	if(buttons & IN_USE)
	{
		int target = GetClientAimTarget(client);
	
		if(!IsValidClient(target) || !IsPlayerAlive(target))
			return Plugin_Continue;
		
		float clientPos[3], targetPos[3], pushVel[3];
		GetClientAbsOrigin(client, clientPos);
		GetClientAbsOrigin(target, targetPos);
		float distance = GetVectorDistance(targetPos, clientPos);
		distance = (distance > 0.0) ? distance : 1.0;
		if(distance > odlegosc_do_odepchniecia.FloatValue)
			return Plugin_Continue;
		
		SubtractVectors(clientPos, targetPos, pushVel);
			
		pushVel[0] = -pushVel[0];
		pushVel[1] = -pushVel[1];
		pushVel[2] = szybkosc_odepchniecia.FloatValue;
		ScaleVector(pushVel, sila_odepchniecia.FloatValue);
		TeleportEntity(target, NULL_VECTOR, NULL_VECTOR, pushVel);
	}
	
	return Plugin_Continue;
}
public bool IsValidClient(int client)
{
	if(client >= 1 && client <= MaxClients && IsClientInGame(client))
		return true;

	return false;
}

 

Spróbuj tego, nie testowałem 😛 W razie czego jak za mocno, lub za lekko będzie odpychało kombinuj z convarami. 

Nie napisałeś czy teammate mogą się odpychać czy nie, i czy to na jedno wciśnięcie E czy cały czas 😛

@SUPER TIMOR Działa lepiej niż myślałem, dasz rade ustawić tylko convar na ograniczenie czasowe używania tego? Podaj steama bo mam sprawe tak w ogóle 🙂

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość

Pewnie, że da 😛

Spoiler
#include <sourcemod>
#include <sdktools>

ConVar szybkosc_odepchniecia;
ConVar sila_odepchniecia;
ConVar odlegosc_do_odepchniecia;
ConVar cooldown;

int iCooldown[MAXPLAYERS+1];

public Plugin myinfo =
{
	name = "Odpychanie na E",
	author = "SUPER TIMOR",
	description = "Plugin na odpychanie graczy",
	version = "1.0",
	url = "http://goBoosting.pl"
};

public void OnPluginStart()
{
	HookEvent("player_spawn", OdrodzenieGracza);	
	szybkosc_odepchniecia = CreateConVar("szybkosc_odepchniecia", "30.0", "Szybkosc lotu odepchnietego");
	sila_odepchniecia = CreateConVar("sila_odepchniecia", "10.0", "Sila odepchniecia");
	odlegosc_do_odepchniecia = CreateConVar("odlegosc_do_odepchniecia", "80.0", "Ogległość, w której muszą się znajdować gracze by się odepchnąć");
	cooldown = CreateConVar("odepchniecie_cooldown", "2", "Ile sekund między odepchnięciami?");	
	AutoExecConfig(true, "", "sourcemod");
}
	
public Action OnPlayerRunCmd(int client, int& buttons, int& impulse, float vel[3], float angles[3], int& weapons)
{
	if(!IsValidClient(client) || !IsPlayerAlive(client))
		return Plugin_Continue;

	if(buttons & IN_USE)
	{
		if(iCooldown[client] >= GetTime())
			return Plugin_Continue;	
			
		int target = GetClientAimTarget(client);
	
		if(!IsValidClient(target) || !IsPlayerAlive(target))
			return Plugin_Continue;
		
		float clientPos[3], targetPos[3], pushVel[3];
		GetClientAbsOrigin(client, clientPos);
		GetClientAbsOrigin(target, targetPos);
		float distance = GetVectorDistance(targetPos, clientPos);
		distance = (distance > 0.0) ? distance : 1.0;
		if(distance > odlegosc_do_odepchniecia.FloatValue)
			return Plugin_Continue;
		
		SubtractVectors(clientPos, targetPos, pushVel);
			
		pushVel[0] = -pushVel[0];
		pushVel[1] = -pushVel[1];
		pushVel[2] = szybkosc_odepchniecia.FloatValue;
		ScaleVector(pushVel, sila_odepchniecia.FloatValue);
		TeleportEntity(target, NULL_VECTOR, NULL_VECTOR, pushVel);
		iCooldown[client] = GetTime() + cooldown.IntValue;				
	}
	
	return Plugin_Continue;
}
public Action OdrodzenieGracza(Event event, char[] name, bool dontBroadcast)
{
	int client = GetClientOfUserId(GetEventInt(event, "userid"));
	iCooldown[client] = 0;
}
public bool IsValidClient(int client)
{
	if(client >= 1 && client <= MaxClients && IsClientInGame(client))
		return true;

	return false;
}

 

 

Steam u mnie na profilu, podałem również na shoutboxie 😛 

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