Skocz do zawartości
Paweł

[Rozwiązane] EmitSoundToClient nie odtwarza dźwięku

Rekomendowane odpowiedzi

Witam, mam problem z EmitSoundToClient . Mianowicie normalnie robię PrecacheSound, a dźwięk i tak nie działa. Podrzucam kawałki kodu.

Event:

Spoiler

	/* [ NoScope Info ] */
	char Victim[64], Attacker[64];
	if(!GetEntProp(attacker, Prop_Send, "m_bIsScoped") && StrEqual(weapon, "awp"))
	{
		GetClientName(attacker, Attacker, sizeof(Attacker));
		GetClientName(victim, Victim, sizeof(Victim));
		float distance = Entity_GetDistance(victim, attacker);
		distance = Math_UnitsToMeters(distance);
		CPrintToChatAll("{darkred}-------------");
		CPrintToChatAll("%s {orchid}%s{lightgreen} został zabity NoScope przez {orchid}%s{lightgreen} z {green}%0.02f{lightgreen} metrow!", OnlyAwp_Tag, Victim, Attacker, distance);
		CPrintToChatAll("{darkred}-------------");
		for(int i = 1; i <= MaxClients; i++)
			if(IsValidClient(i))
				SendMessageToAll(i);
	}

 

SendMessageToAll:

Spoiler

stock void SendMessageToAll(int client)
{
	if(g_bIsNoscopeRound)
		return;
	
	for(int i = 1; i <= MaxClients; i++)
	{
		if(IsValidClient(i))
		{
			int music = GetRandomInt(1, 5);
			switch(music)
			{
				case 1: EmitSoundToClient(i, "*/OnlyAwp_Yamakashi/sound/Noscope_Sound1.mp3", _, _, _, _, 0.55);
				case 2: EmitSoundToClient(i, "*/OnlyAwp_Yamakashi/sound/Noscope_Sound2.mp3", _, _, _, _, 0.55);
				case 3: EmitSoundToClient(i, "*/OnlyAwp_Yamakashi/sound/Noscope_Sound3.mp3", _, _, _, _, 0.55);
				case 4: EmitSoundToClient(i, "*/OnlyAwp_Yamakashi/sound/Noscope_Sound4.mp3", _, _, _, _, 0.55);
				case 5: EmitSoundToClient(i, "*/OnlyAwp_Yamakashi/sound/Noscope_Sound5.mp3", _, _, _, _, 0.55);
			}
		}
	}
}

 

 

Pobieranie + Precache:

Spoiler

stock void OnlyAwp_LoadSounds()
{	
	AddFileToDownloadsTable("sound/OnlyAwp_Yamakashi/sound/Noscope_Sound1.mp3");
	AddFileToDownloadsTable("sound/OnlyAwp_Yamakashi/sound/Noscope_Sound2.mp3");
	AddFileToDownloadsTable("sound/OnlyAwp_Yamakashi/sound/Noscope_Sound3.mp3");
	AddFileToDownloadsTable("sound/OnlyAwp_Yamakashi/sound/Noscope_Sound4.mp3");
	AddFileToDownloadsTable("sound/OnlyAwp_Yamakashi/sound/Noscope_Sound5.mp3");
	AddFileToDownloadsTable("sound/OnlyAwp_Yamakashi/sound/FirstBlood.mp3");
	PrecacheSound("*/OnlyAwp_Yamakashi/sound/Noscope_Sound1.mp3", true);
	PrecacheSound("*/OnlyAwp_Yamakashi/sound/Noscope_Sound2.mp3", true);
	PrecacheSound("*/OnlyAwp_Yamakashi/sound/Noscope_Sound3.mp3", true);
	PrecacheSound("*/OnlyAwp_Yamakashi/sound/Noscope_Sound4.mp3", true);
	PrecacheSound("*/OnlyAwp_Yamakashi/sound/Noscope_Sound5.mp3", true);
	PrecacheSound("*/OnlyAwp_Yamakashi/sound/FirstBlood.mp3", true);
}

 

 

Przez Vasto_Lorde,

Lekko poprawiam nazwę tematu

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Czemu robisz "SendMessageToAll" to forem a w tej funkcji robisz jeszcze jednego fora zamiast

stock void SendMessageToAll()
{
	if (g_bIsNoscopeRound)
		return;
	
	int music = GetRandomInt(1, 5);
	switch (music)
	{
		case 1:EmitSoundToAll("*/OnlyAwp_Yamakashi/sound/Noscope_Sound1.mp3", SOUND_FROM_PLAYER, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 0.55);
		case 2:EmitSoundToAll("*/OnlyAwp_Yamakashi/sound/Noscope_Sound2.mp3", SOUND_FROM_PLAYER, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 0.55);
		case 3:EmitSoundToAll("*/OnlyAwp_Yamakashi/sound/Noscope_Sound3.mp3", SOUND_FROM_PLAYER, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 0.55);
		case 4:EmitSoundToAll("*/OnlyAwp_Yamakashi/sound/Noscope_Sound4.mp3", SOUND_FROM_PLAYER, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 0.55);
		case 5:EmitSoundToAll("*/OnlyAwp_Yamakashi/sound/Noscope_Sound5.mp3", SOUND_FROM_PLAYER, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 0.55);
	}
} 

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Zastosowałem twoje rozwiązanie @Brum Brum, ale nadal nie ma tego dźwięku.

Udostępnij tę odpowiedź


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

@Yamakashi A dźwięki w cs'ie włączone? ?

Przez Vasto_Lorde,

Pomimo sarkastycznego tonu wypowiedzi, jest to jeden z możliwych "błędów" :D

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Napisano (edytowane)

Nie wiem do końca jak masz to zrobione, ale sobie podmienisz. Powinno działać, mam tak zrobione w swoich roundsoundach i jest legit
 

char Music[][] = 
{
	"OnlyAwp_Yamakashi/sound/Noscope_Sound1.mp3", 
	"OnlyAwp_Yamakashi/sound/Noscope_Sound2.mp3", 
	"OnlyAwp_Yamakashi/sound/Noscope_Sound3.mp3", 
	"OnlyAwp_Yamakashi/sound/Noscope_Sound4.mp3", 
	"OnlyAwp_Yamakashi/sound/Noscope_Sound5.mp3", 
	"OnlyAwp_Yamakashi/sound/FirstBlood.mp3", 
}

public void OnPluginStart()
{
	HookEvent("player_death", Event_PlayerDeath);
}

public void OnMapStart()
{
	for (int i = 1; i < sizeof(Music); i++)
	{
		char sBuffer[PLATFORM_MAX_PATH];
		Format(sBuffer, sizeof(sBuffer), "*/%s", Music[i]);
		PrecacheSound(sBuffer, true);
	}
	AddFileToDownloadsTable("sound/OnlyAwp_Yamakashi/sound/Noscope_Sound1.mp3");
	AddFileToDownloadsTable("sound/OnlyAwp_Yamakashi/sound/Noscope_Sound2.mp3");
	AddFileToDownloadsTable("sound/OnlyAwp_Yamakashi/sound/Noscope_Sound3.mp3");
	AddFileToDownloadsTable("sound/OnlyAwp_Yamakashi/sound/Noscope_Sound4.mp3");
	AddFileToDownloadsTable("sound/OnlyAwp_Yamakashi/sound/Noscope_Sound5.mp3");
	AddFileToDownloadsTable("sound/OnlyAwp_Yamakashi/sound/FirstBlood.mp3");
}

public Action Event_PlayerDeath(Event event, const char[] name, bool dontBroadcast)
{
	/* [ NoScope Info ] */
	char Victim[64], Attacker[64];
	if (!GetEntProp(attacker, Prop_Send, "m_bIsScoped") && StrEqual(weapon, "awp"))
	{
		GetClientName(attacker, Attacker, sizeof(Attacker));
		GetClientName(victim, Victim, sizeof(Victim));
		float distance = Entity_GetDistance(victim, attacker);
		distance = Math_UnitsToMeters(distance);
		CPrintToChatAll("{darkred}-------------");
		CPrintToChatAll("%s {orchid}%s{lightgreen} został zabity NoScope przez {orchid}%s{lightgreen} z {green}%0.02f{lightgreen} metrow!", OnlyAwp_Tag, Victim, Attacker, distance);
		CPrintToChatAll("{darkred}-------------");
		SendMessageToAll();
	}
}

stock void SendMessageToAll()
{
	if (g_bIsNoscopeRound)
		return;
	
	char sBuffer[PLATFORM_MAX_PATH];
	int music = GetRandomInt(1, 5);
	Format(sBuffer, sizeof(sBuffer), "*/%s", Music[music]);
	switch (music)
	{
		case 1:EmitSoundToAll(sBuffer, SOUND_FROM_PLAYER, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 0.55);
		case 2:EmitSoundToAll(sBuffer, SOUND_FROM_PLAYER, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 0.55);
		case 3:EmitSoundToAll(sBuffer, SOUND_FROM_PLAYER, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 0.55);
		case 4:EmitSoundToAll(sBuffer, SOUND_FROM_PLAYER, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 0.55);
		case 5:EmitSoundToAll(sBuffer, SOUND_FROM_PLAYER, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 0.55);
	}
} 

 

Edytowane przez Brum Brum
Poprawka w SendMessageToAll

Udostępnij tę odpowiedź


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

@Yamakashi A dźwięki w cs'ie włączone? ?

Tak...

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

I na pewno nie ma żadnych specjalnych wiadomości w konsoli serwera/gracza?

Dla upewnienia się że cały kod jest poprawny daj jakiś print zaraz przed switch (music) 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@Brum Brum 

Spoiler

//// OnlyAwp_Yamakashi.sp
//
// D:\ServerPlugins\OnlyAwpPlugins\OnlyAwp_Yamakashi.sp(243) : error 029: invali
d expression, assumed zero
// D:\ServerPlugins\OnlyAwpPlugins\OnlyAwp_Yamakashi.sp(243) : error 029: invali
d expression, assumed zero
// D:\ServerPlugins\OnlyAwpPlugins\OnlyAwp_Yamakashi.sp(243) : error 029: invali
d expression, assumed zero
// D:\ServerPlugins\OnlyAwpPlugins\OnlyAwp_Yamakashi.sp(243) : fatal error 190:
too many error messages on one line
//
// Compilation aborted.
// 4 Errors.
//
// Compilation Time: 2,67 sec
// ----------------------------------------

Press enter to exit ...

 

 

Dokładnie:

Spoiler

public void OnMapStart()
{ <------------
	for (int i = 1; i < sizeof(Music); i++)
	{
		char sBuffer[PLATFORM_MAX_PATH];
		Format(sBuffer, sizeof(sBuffer), "*/%s", Music[i]);
		PrecacheSound(sBuffer, true);
	}
	AddFileToDownloadsTable("sound/OnlyAwp_Yamakashi/sound/Noscope_Sound1.mp3");
	AddFileToDownloadsTable("sound/OnlyAwp_Yamakashi/sound/Noscope_Sound2.mp3");
	AddFileToDownloadsTable("sound/OnlyAwp_Yamakashi/sound/Noscope_Sound3.mp3");
	AddFileToDownloadsTable("sound/OnlyAwp_Yamakashi/sound/Noscope_Sound4.mp3");
	AddFileToDownloadsTable("sound/OnlyAwp_Yamakashi/sound/Noscope_Sound5.mp3");
	AddFileToDownloadsTable("sound/OnlyAwp_Yamakashi/sound/FirstBlood.mp3");
}

 

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
4 minuty temu, Yamakashi napisał:

@Brum Brum 

 
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! Ukryj treść


//// OnlyAwp_Yamakashi.sp
//
// D:\ServerPlugins\OnlyAwpPlugins\OnlyAwp_Yamakashi.sp(243) : error 029: invali
d expression, assumed zero
// D:\ServerPlugins\OnlyAwpPlugins\OnlyAwp_Yamakashi.sp(243) : error 029: invali
d expression, assumed zero
// D:\ServerPlugins\OnlyAwpPlugins\OnlyAwp_Yamakashi.sp(243) : error 029: invali
d expression, assumed zero
// D:\ServerPlugins\OnlyAwpPlugins\OnlyAwp_Yamakashi.sp(243) : fatal error 190:
too many error messages on one line
//
// Compilation aborted.
// 4 Errors.
//
// Compilation Time: 2,67 sec
// ----------------------------------------

Press enter to exit ...

 

 

Dokładnie:

 
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! Ukryj treść


public void OnMapStart()
{ <------------
	for (int i = 1; i < sizeof(Music); i++)
	{
		char sBuffer[PLATFORM_MAX_PATH];
		Format(sBuffer, sizeof(sBuffer), "*/%s", Music[i]);
		PrecacheSound(sBuffer, true);
	}
	AddFileToDownloadsTable("sound/OnlyAwp_Yamakashi/sound/Noscope_Sound1.mp3");
	AddFileToDownloadsTable("sound/OnlyAwp_Yamakashi/sound/Noscope_Sound2.mp3");
	AddFileToDownloadsTable("sound/OnlyAwp_Yamakashi/sound/Noscope_Sound3.mp3");
	AddFileToDownloadsTable("sound/OnlyAwp_Yamakashi/sound/Noscope_Sound4.mp3");
	AddFileToDownloadsTable("sound/OnlyAwp_Yamakashi/sound/Noscope_Sound5.mp3");
	AddFileToDownloadsTable("sound/OnlyAwp_Yamakashi/sound/FirstBlood.mp3");
}

 

 

Mi wszystko ładnie kompiluje 
 

Spoiler

#include <sdktools>
#include <smlib>
#include <multicolors>

#define OnlyAwp_Tag "[TAG]"

char Music[][] = 
{
	"OnlyAwp_Yamakashi/sound/Noscope_Sound1.mp3", 
	"OnlyAwp_Yamakashi/sound/Noscope_Sound2.mp3", 
	"OnlyAwp_Yamakashi/sound/Noscope_Sound3.mp3", 
	"OnlyAwp_Yamakashi/sound/Noscope_Sound4.mp3", 
	"OnlyAwp_Yamakashi/sound/Noscope_Sound5.mp3", 
	"OnlyAwp_Yamakashi/sound/FirstBlood.mp3", 
}

public void OnPluginStart()
{
	HookEvent("player_death", Event_PlayerDeath);
}

public void OnMapStart()
{
	for (int i = 1; i < sizeof(Music); i++)
	{
		char sBuffer[PLATFORM_MAX_PATH];
		Format(sBuffer, sizeof(sBuffer), "*/%s", Music[i]);
		PrecacheSound(sBuffer, true);
	}
	AddFileToDownloadsTable("sound/OnlyAwp_Yamakashi/sound/Noscope_Sound1.mp3");
	AddFileToDownloadsTable("sound/OnlyAwp_Yamakashi/sound/Noscope_Sound2.mp3");
	AddFileToDownloadsTable("sound/OnlyAwp_Yamakashi/sound/Noscope_Sound3.mp3");
	AddFileToDownloadsTable("sound/OnlyAwp_Yamakashi/sound/Noscope_Sound4.mp3");
	AddFileToDownloadsTable("sound/OnlyAwp_Yamakashi/sound/Noscope_Sound5.mp3");
	AddFileToDownloadsTable("sound/OnlyAwp_Yamakashi/sound/FirstBlood.mp3");
}

public Action Event_PlayerDeath(Event event, const char[] name, bool dontBroadcast)
{
	/* [ NoScope Info ] */
	char weapon[32];
	event.GetString("weapon", weapon, sizeof(weapon));
	int victim = GetClientOfUserId(event.GetInt("userid"));
	int attacker = GetClientOfUserId(event.GetInt("attacker"));
	if (!GetEntProp(attacker, Prop_Send, "m_bIsScoped") && StrEqual(weapon, "awp"))
	{
		float distance = Entity_GetDistance(victim, attacker);
		distance = Math_UnitsToMeters(distance);
		CPrintToChatAll("{darkred}-------------");
		CPrintToChatAll("%s {orchid}%s{lightgreen} został zabity NoScope przez {orchid}%s{lightgreen} z {green}%0.02f{lightgreen} metrow!", OnlyAwp_Tag, victim, attacker, distance);
		CPrintToChatAll("{darkred}-------------");
		SendMessageToAll();
	}
}

stock void SendMessageToAll()
{
	//if (g_bIsNoscopeRound) Zakodowałem bo nie wiem skąd się to bierze.
	//	return;
	
	char sBuffer[PLATFORM_MAX_PATH];
	int music = GetRandomInt(1, 5);
	Format(sBuffer, sizeof(sBuffer), "*/%s", Music[music]);
	switch (music)
	{
		case 1:EmitSoundToAll(sBuffer, SOUND_FROM_PLAYER, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 0.55);
		case 2:EmitSoundToAll(sBuffer, SOUND_FROM_PLAYER, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 0.55);
		case 3:EmitSoundToAll(sBuffer, SOUND_FROM_PLAYER, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 0.55);
		case 4:EmitSoundToAll(sBuffer, SOUND_FROM_PLAYER, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 0.55);
		case 5:EmitSoundToAll(sBuffer, SOUND_FROM_PLAYER, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 0.55);
	}
} 

 

Tylko zamień tam sobie player_death bo trochę pozmieniałem + zakodowałem g_bIsNoscopeRound

Udostępnij tę odpowiedź


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

stock void SendMessageToAll()
{
	//if (g_bIsNoscopeRound) Zakodowałem bo nie wiem skąd się to bierze.
	//	return;
	
	char sBuffer[PLATFORM_MAX_PATH];
	int music = GetRandomInt(1, 5);
	Format(sBuffer, sizeof(sBuffer), "*/%s", Music[music]);
	switch (music)
	{
		case 1:EmitSoundToAll(sBuffer, SOUND_FROM_PLAYER, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 0.55);
		case 2:EmitSoundToAll(sBuffer, SOUND_FROM_PLAYER, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 0.55);
		case 3:EmitSoundToAll(sBuffer, SOUND_FROM_PLAYER, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 0.55);
		case 4:EmitSoundToAll(sBuffer, SOUND_FROM_PLAYER, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 0.55);
		case 5:EmitSoundToAll(sBuffer, SOUND_FROM_PLAYER, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 0.55);
	}
} 

 

Ale wiesz, że każdy case zawiera idealnie to samo? XD

 

stock void SendMessageToAll(int client)
{
	if(g_bIsNoscopeRound)
		return;
	
	char soundPath[PLATFORM_MAX_PATH];
	Format(soundPath, sizeof(soundPath), "%s", nameOfMusicMatrixVar[GetRandomInt(0, sizeof(nameOfMusicMatrixVar)-1)]);
	
	for(int i = 1; i <= MaxClients; i++)
		if(IsValidClient(i))
			EmitSoundToClient(i, soundPath, -2, 0, 0, 0, 0.55);
}

nameOfMusicMatrixVar - tablica ze ścieżkami do plików muzycznych z pominięciem folderu sound.

 

To @up tak dla samej idei zrobiłem. Co do tematu, to zrób sobie komendę, która będzie wywoływać SendMessageToAll i sprawdź, czy w ogóle Ci te odtwarzanie działa. Jeżeli tak, to błąd jest w innym miejscu. W przeciwnym wypadku proponuję sprawdzić format plików muzycznych.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
1 godzinę temu, Avgariat napisał:

Ale wiesz, że każdy case zawiera idealnie to samo? XD

 

?? 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
54 minuty temu, Brum Brum napisał:

?? 

Instrukcja switch nie miała sensu, bo każdy case robił dokładnie to samo. Wystarczyło w tym przypadku 

EmitSoundToAll(sBuffer, SOUND_FROM_PLAYER, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 0.55);

 

Udostępnij tę odpowiedź


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

Instrukcja switch nie miała sensu, bo każdy case robił dokładnie to samo. Wystarczyło w tym przypadku 


EmitSoundToAll(sBuffer, SOUND_FROM_PLAYER, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 0.55);

 

Fakt, zapomniałem o usunięciu case`a ?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Aktualnie mam taki error w konsoli:

[Sound] S_StartSound(): Failed to load sound 'sound\onlyawp_yamakashi\sound\levelup_sound.mp3'. File is missing from disk or is invalid.

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Funkcje EmitSound(...) i PrechacheSound kierują od razu do folderu csgo/sound/, a AddFileToDownload nie. Dlatego ścieżki przy precache i emit powinny być z pominięciem folderu csgo/sound/.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Lubię to! 1
Napisano (edytowane)

Do zamknięcia, Avgariat pomógł mi na pw. Zadziałało wyrzucenie "*" przy PrecacheSound oraz EmitSoundToClient .

Edytowane przez Yamakashi

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