Skocz do zawartości
szogun

[Rozwiązane] Ciche chodzenie

Rekomendowane odpowiedzi

Modyfikuje pewien plugin i postanowiłem w nim dodać ciche kroki dla oznaki, więc sobie zaczerpnąłem kod z klasy cod moda linuxa i teraz mam mały problem z kompilacja

 

Kod klasy od linuxa

Spoiler

#include <sourcemod>
#include <sdktools>
#include <codmod>

new const String:nazwa[] = "Buty Szturmowego";
new const String:opis[] = "Nie slychac twoich krokow";

new bool:ma_item[65];
public Plugin:myinfo =
{
	name = nazwa,
	author = "Linux`",
	description = "Cod Item",
	version = "1.0",
	url = "http://steamcommunity.com/id/linux2006"
};
public OnPluginStart()
{
	cod_register_item(nazwa, opis, 0, 0);
	AddNormalSoundHook(DzwiekiGracza);
}
public OnClientPutInServer(client)
{
	if(!IsFakeClient(client))
		SendConVarValue(client, FindConVar("sv_footsteps"), "0");
}

public Action:DzwiekiGracza(clients[64], &numclients, String:sample[PLATFORM_MAX_PATH], &entity, &channel, &Float:volume, &level, &pitch, &flags)
{
	if(!IsValidClient(entity) || IsFakeClient(entity))
		return Plugin_Continue;

	if((StrContains(sample, "physics") != -1 || StrContains(sample, "footsteps") != -1) && StrContains(sample, "suit") == -1)
	{
		if(!ma_item[entity])
			EmitSoundToAll(sample, entity);

		return Plugin_Handled;
	}

	return Plugin_Continue;
}

 

 

U mnie w modyfikowanym pluginie wygląda to tak

 

Spoiler

public void OnPluginStart()

{
	HookEvent("round_start", Event_RoundStart, EventHookMode_Post);
	HookEvent("player_death", Event_PlayerDeath, EventHookMode_Post);
	HookEvent("player_spawn", Event_Player_Spawn, EventHookMode_Pre);

	AddNormalSoundHook(Kroki);
}

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

	if(!IsFakeClient(client))
		SendConVarValue(client, FindConVar("sv_footsteps"), "0");
}

public Action:Kroki(clients[64], &numclients, String:sample[PLATFORM_MAX_PATH], &entity, &channel, &Float:volume, &level, &pitch, &flags)
{
	if(!IsValidClient(entity) || IsFakeClient(entity))
		return Plugin_Continue;

	if((StrContains(sample, "physics") != -1 || StrContains(sample, "footsteps") != -1) && StrContains(sample, "suit") == -1)
	{
		if(g_iRank[client] == 19) // 19 to warunek dla odznaki 
			EmitSoundToAll(sample, entity);

		return Plugin_Handled;
	}

	return Plugin_Continue;
}

 

 

Cytat

//SourceMod Batch Compiler
// by the SourceMod Dev Team

// ----------------------------------------

//// plugin.sp
//
// plugin.sp(1374) : error 017: undefined symbol "client"
//
// 1 Error.
//
// Compilation Time: 0,5 sec

 

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jak da entity zamiast client to mi nie sprawdzi czy gracz zdobyl 19 odznakę aby zaczęło mu działać ciche chodzenie

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
16 minut temu, szogun napisał:

Jak da entity zamiast client to mi nie sprawdzi czy gracz zdobyl 19 odznakę aby zaczęło mu działać ciche chodzenie

W tym przypadku entity to klient.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

ten kod to chyba nie do końca dobry jest, z racji że jak wejdzie jakaś osoba to ma jakiś dziwny dźwięk chodzenia a czasami wręcz i nie słychać

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

dziala tylko jakos na odwrot gdy mam odznaki od 1 do 17 to mam ciche chodzenie a jak zdobede 18 odznake to kroki slychac

 

public Action:Kroki(clients[64], &numclients, String:sample[PLATFORM_MAX_PATH], &entity, &channel, &Float:volume, &level, &pitch, &flags)
{
	if(!IsValidClient(entity) || IsFakeClient(entity))
		return Plugin_Continue;

	if((StrContains(sample, "physics") != -1 || StrContains(sample, "footsteps") != -1) && StrContains(sample, "suit") == -1)
	{
		if (g_iRank[enity] >= 18 && g_iRank[enity] < 19)
			EmitSoundToAll(sample, entity);

		return Plugin_Handled;
	}

	return Plugin_Continue;
}

 

Edytowane przez szogun

Udostępnij tę odpowiedź


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

EmitSoundToAll(sample, entity);

Tutaj emitujesz dźwięk chodzenia ...

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

To może wytłumaczmy zasadę działania...

 

Pierwsza część algorytmu:

public OnClientPutInServer(client)
{
	if(!IsFakeClient(client))	// Jeżeli gracz, który wszedł na serwer to nie bot
		SendConVarValue(client, FindConVar("sv_footsteps"), "0");	// Ustaw sv_footsteps na 0 - wyłącz dźwięk chodzenia
}

 

Druga część algorytmu:

public Action:DzwiekiGracza(clients[64], &numclients, String:sample[PLATFORM_MAX_PATH], &entity, &channel, &Float:volume, &level, &pitch, &flags)
{
	if(!IsValidClient(entity) || IsFakeClient(entity))	// Jeżeli byt wydający dźwięk jest botem lub nie jest valid(w grze, połączony, etc.)
		return Plugin_Continue;	// Wróć i pozwól na wykonanie - wyjdź z tego hook`a (zasada działania w przybliżeniu ;> )

	if((StrContains(sample, "physics") != -1 || StrContains(sample, "footsteps") != -1) && StrContains(sample, "suit") == -1)	// Jeżeli dźwięk, który jest przetwarzany
	{	// to dźwięk kroków(super-hiper warunki, które to powinny gwarantować)
		if(!ma_item[entity])	// Jeżeli nie ma cichych Adasiów
			EmitSoundToAll(sample, entity);	//Odtwórz dźwięk kroków

		return Plugin_Handled;	//Jeżeli ma ciche Adasie, to zatrzymaj wykonywanie
	}

	return Plugin_Continue;	//Jeżeli hook nie dotyczy dźwięku kroków, to wróć i pozwól na wykonanie
}

 

W rezultacie kod powinien wyglądać następująco zakładając, że kod źródłowy jest poprawny i dobrze sformułowałeś warunek z odznaką:

public Action:Kroki(clients[64], &numclients, String:sample[PLATFORM_MAX_PATH], &entity, &channel, &Float:volume, &level, &pitch, &flags)
{
	if(!IsValidClient(entity) || IsFakeClient(entity))
		return Plugin_Continue;

	if((StrContains(sample, "physics") != -1 || StrContains(sample, "footsteps") != -1) && StrContains(sample, "suit") == -1)
	{
		if(g_iRank[entity] != 19) // 19 to warunek dla odznaki // entity to byt, który wydaje dźwięk, czyli w tym przypadku gracz
			EmitSoundToAll(sample, entity);	// Jeżeli gracz nie ma 19 odznaki, to odtwórz dźwięk kroków

		return Plugin_Handled;
	}

	return Plugin_Continue;
}

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Hmm... To juz ogarnięte,  tylko pozostaje kwestia takiego szumu jak grac sie porusza,  cos jak pisalem wyzej na zasadzie obijanego sie ekwipunku,  ponoc to tworzy jakis plik dźwiękowy ktory zostal dodany po ostatniej operacji csgo

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Zakładając, że funkcja Kroki wykrywa też ten dźwięk, możesz po prostu wyświetlić ścieżkę do dźwięku (zmienna sample) i znaleźć który to plik. Znaleziony dźwięk zablokować i włala ?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Słyszałem, że nadal jest problem, bo dźwięku nie znaleziono. Prawdopodobnie jest to dźwięk

Cytat

player/footsteps/new/suit...

StrContains(sample, "suit") == -1

Ten warunek odpowiada za puszczanie tego dźwięku. Jeśli usuniesz go z ifa "dziwne szumy" powinny się usunąć

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wiadomość wygenerowana automatycznie

 

Pomoc udzielona

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.

×
×
  • Dodaj nową pozycję...