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

[Rozwiązane] Ciche chodzenie

Recommended Posts

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

 

 

Share this post


Link to post
Share on other sites

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

Share this post


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

Share this post


Link to post
Share on other sites

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ć

Share this post


Link to post
Share on other sites

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;
}

 

Edited by szogun

Share this post


Link to post
Share on other sites
Guest Qesik
Cytat

EmitSoundToAll(sample, entity);

Tutaj emitujesz dźwięk chodzenia ...

 

Share this post


Link to post
Share on other sites

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;
}

 

  • Lubię to! 1

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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 ?

Share this post


Link to post
Share on other sites

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ąć

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