Zaloguj się by uzyskać pełen dostęp. Nie masz jeszcze konta? Założ je już teraz w kilka sekund.

Wysłany: 2018-01-07, 12:38


Shlasku

Uczeń Pawno






Wiek: 22
Na forum: 3206 dni
Posty: 133
Nick w MP: luki1123

Piwa: 17

Respekt: 60

Witam, m?g?by mi kto? napisa? przyk?adow? range np. Gracz i gdy napisze co? na chacie wyswietla si? ID [Gracz] Nick: wiadomo??. By?bym bardzo wdzi?czny i oczywi?cie postawie :piwo:

Podpis
Zwykły szary człowiek z niezwykłymi umiejętnościami :)
Postaw piwo autorowi tego posta
 

 
Wysłany: 2018-01-07, 21:05


Destinn







Wiek: 26
Na forum: 3094 dni
Posty: 104
Nick w MP: Destin

Piwa: 25

Respekt: 90

W callbacku OnPlayerText formatujesz tekst jaki jest wysy?any na czat.

Kod:

new string[256], nick[24];
GetPlayerName(playerid, nick, sizeof(nick));

format(string, sizeof(string), "%d [Gracz] %s: %s", playerid, nick, text);


Ewentualnie jak formatujesz to zamiast [Gracz] dajesz np. %s i owym stringiem b?dzie ranga, czyli np.

Kod:

format(string, sizeof(string), "%d [%s] %s: %s", playerid, PlayerInfo[playerid][pRanga], nick, text);


I pod formatowaniem dajesz funkcj?, kt?ra ma si? wykona?, np. wys?anie wiadomo?ci do wszystkich na serwerze b?d? je?eli posiadasz w?asn?, kt?ra wysy?a wiadomo?? do os?b w danej odleg?o?ci.

Wysy?anie wiadomo?ci do wszystkich na serwerze - http://wiki.sa-mp.com/wiki/SendPlayerMessageToAll

Postaw piwo autorowi tego posta
 

 
Więcej szczegółów
Wystawiono 1 piw(a):
Shlasku
Wysłany: 2018-01-09, 15:18


Shlasku

Uczeń Pawno






Wiek: 22
Na forum: 3206 dni
Posty: 133
Nick w MP: luki1123

Piwa: 17

Respekt: 60

A jakbym chcia? np. przypisa? do tej rangi komendy? Bo da?e? to co ma miec ka?dy gracz. A je?li chcia?bym teraz zrobi? drug? rang? np. Admin? Wiem ?e musze stworzyc newa ( new Admin[MAX_PLAYERS]; ) ale jak zrobi? ?e gdy Admin(playerid) = 1 bedzie np. "ID [Admin] Nick: Wiadomosc" ?

Cytat:


if(Admin[playerid] == 1)
{
format(...)
}


Tak powinno by??

Podpis
Zwykły szary człowiek z niezwykłymi umiejętnościami :)
Postaw piwo autorowi tego posta
 

 
Wysłany: 2018-01-09, 15:49


Destinn







Wiek: 26
Na forum: 3094 dni
Posty: 104
Nick w MP: Destin

Piwa: 25

Respekt: 90

Zale?y czy nadal korzystasz z PV'ar?w czy ju? przerzuci?e? si? na enumy.

Enum powinien wygl?da? (PRYK?ADOWO) tak:

Kod:

enum E_PLAYER
{
pUID,
pNick[24],
pRanga
};
new PlayerInfo[MAX_PLAYERS][E_PLAYER];


Zamiast pUID, pNick[24] i pRanga mo?esz pododawa? swoje zmienne jakich u?ywasz dla gracza, np. Float:pHealth itd.
Zmienna, kt?r? tworzysz pod enumem jest bardzo wa?na, mo?esz zmieni? jej nazw?, ale nale?y pami?ta?, ?e po zmianie nale?y w ca?ym skrypcie zaktualizowa? nazw? na now?.

Dobra, czyli teraz jak tego u?y??!
Rangi mo?esz zapisywa? "w stopniach", czyli poziomach administracyjnych, osobi?cie polecam, gdzie? na g?rze skryptu mo?esz sobie zapisa? te poziomy, ?eby p??niej nie zapomnie?/nie pomyli? si? w razie tworzenia czego?. Np. poziom "1" to Moderator, poziom "2" to JuniorAdmin itd, przyk?ad:

Kod:

if(PlayerInfo[playerid][pRanga] == 1)
{
...
}


Wy?ej podanego kodu mo?esz u?y? do zrobienia jakie? komendy, gdzie wymaga si?, by gracz posiada? dan? rang?/poziom administracyjny, np. "1".

Dam Ci pe?ny przyk?ad callback'a OnPlayerText gdzie sprawdza "switch" sprawdza rang? gracza i "case 0, 1, 2" sprawdza poziom administracyjny gracza, gdzie NA PRZYK?AD; 0 to Gracz, 1 to Moderator i 2 to Admin. Mo?esz to zmieni? pod swoje upodobania, a nawet pododawa? wi?cej rang "case'?w".

Kod:

public OnPlayerText(playerid, text[])
{
new string[256], nick[24];
GetPlayerName(playerid, nick, sizeof(nick));

switch(PlayerInfo[playerid][pRanga])
{
case 0:
{
format(string, sizeof(string), "%d [Gracz] %s: %s", playerid, nick, text);
}
case 1:
{
format(string, sizeof(string), "%d [Moderator] %s: %s", playerid, nick, text);
}
case 2:
{
format(string, sizeof(string), "%d [Admin] %s: %s", playerid, nick, text);
}
}

SendPlayerMessageToAll(playerid, string);

return 0; // ignoruje wysy?anie podstawowej wiadomo?ci, wysy?a t? sformatowan? z ID, rang?, nickiem (i oczywi?cie tekstem)
}


Postaw piwo autorowi tego posta
 

 
Więcej szczegółów
Wystawiono 1 piw(a):
Shlasku
Wysłany: 2018-01-09, 16:15


Shlasku

Uczeń Pawno






Wiek: 22
Na forum: 3206 dni
Posty: 133
Nick w MP: luki1123

Piwa: 17

Respekt: 60

Destinn, dzi?ki ale je?li teraz chce np. przydzieli? range Moderator to to musze zawrze? w komendzie?

@edit
Cytat:

switch(PlayerInfo[playerid][pRanga])


mam takie errory:

Cytat:

C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(92) : error 017: undefined symbol "PlayerInfo"
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(92) : error 029: invalid expression, assumed zero
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(92) : error 029: invalid expression, assumed zero
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(92) : fatal error 107: too many error messages on one line


Podpis
Zwykły szary człowiek z niezwykłymi umiejętnościami :)
Postaw piwo autorowi tego posta
 

 
Wysłany: 2018-01-09, 17:12


MG303







Wiek: 30
Na forum: 6418 dni
Posty: 654

Piwa: 2990

Respekt: 231,6
Respekt: 231,6Respekt: 231,6

to doda?e??
Kod:

new PlayerInfo[MAX_PLAYERS][E_PLAYER];


Postaw piwo autorowi tego posta
 

 
Więcej szczegółów
Wystawiono 1 piw(a):
Shlasku
Wysłany: 2018-01-09, 17:26


Shlasku

Uczeń Pawno






Wiek: 22
Na forum: 3206 dni
Posty: 133
Nick w MP: luki1123

Piwa: 17

Respekt: 60

Cytat:

SendPlayerMessageToAll(playerid, string);


error:

Cytat:

C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(124) : error 002: only a single statement (or expression) can follow each "case"


Podpis
Zwykły szary człowiek z niezwykłymi umiejętnościami :)
Postaw piwo autorowi tego posta
 

 
Wysłany: 2018-01-09, 20:36


Destinn







Wiek: 26
Na forum: 3094 dni
Posty: 104
Nick w MP: Destin

Piwa: 25

Respekt: 90

Spr?buj.

Kod:

public OnPlayerText(playerid, text[])
{
new string[256], nick[24];
GetPlayerName(playerid, nick, sizeof(nick));

switch(PlayerInfo[playerid][pRanga])
{
case 0:
{
format(string, sizeof(string), "%d [Gracz] %s: %s", playerid, nick, text);
SendPlayerMessageToAll(playerid, string);
}
case 1:
{
format(string, sizeof(string), "%d [Moderator] %s: %s", playerid, nick, text);
SendPlayerMessageToAll(playerid, string);
}
case 2:
{
format(string, sizeof(string), "%d [Admin] %s: %s", playerid, nick, text);
SendPlayerMessageToAll(playerid, string);
}
}

return 0; // ignoruje wysy?anie podstawowej wiadomo?ci, wysy?a t? sformatowan? z ID, rang?, nickiem (i oczywi?cie tekstem)
}


Postaw piwo autorowi tego posta
 

 
Więcej szczegółów
Wystawiono 1 piw(a):
Shlasku
Wysłany: 2018-01-10, 17:24


Shlasku

Uczeń Pawno






Wiek: 22
Na forum: 3206 dni
Posty: 133
Nick w MP: luki1123

Piwa: 17

Respekt: 60

Destinn, nic to nie da?o lecz je?li return 0; wstawie do ka?dego case'a a ten na samym ko?cu wywale, to wsz?dzie gdzie mam puste callbacki to wywala mi errory.

A og?lnie to jakie includy potrzebuj? ?eby te case'y dzia?a?y normalnie? Altualnie mam: sscanf2, zcmd, a_samp, dini

Podpis
Zwykły szary człowiek z niezwykłymi umiejętnościami :)
Postaw piwo autorowi tego posta
 

 
Wysłany: 2018-01-10, 17:29


Seboo







Wiek: 30
Na forum: 5515 dni
Posty: 124
Nick w MP: Sebo

Piwa: 1228

Respekt: 102
Respekt: 102

Bo parametr playerid jest zb?dny je?li wysy?amy wiadomo?? do wszystkich.

Kod:

SendClientMessageToAll(-1, string);


Poza tym, pobieranie nicku co wysy?anie jednej wiadomo?ci i deklarowanie zmiennej do formatowania tekstu jest strasznie nieoptymalne, wi?c radzi?bym Ci nie korzysta? z takiego rozwi?zania.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2018-01-10, 17:31


Shlasku

Uczeń Pawno






Wiek: 22
Na forum: 3206 dni
Posty: 133
Nick w MP: luki1123

Piwa: 17

Respekt: 60

Og?lnie teraz mam problem z
Cytat:

return 0;
:

Cytat:

C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(447) : error 002: only a single statement (or expression) can follow each "case"


A gdy wywale return 0; :

Cytat:

C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(338) : warning 217: loose indentation
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(338) : warning 202: number of arguments does not match definition
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(338) : warning 202: number of arguments does not match definition
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(338) : warning 202: number of arguments does not match definition
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(338) : warning 213: tag mismatch
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(339) : warning 213: tag mismatch
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(340) : warning 213: tag mismatch
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(341) : warning 213: tag mismatch
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(342) : warning 213: tag mismatch
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(343) : warning 213: tag mismatch
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(344) : warning 213: tag mismatch
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(345) : warning 213: tag mismatch
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(346) : warning 213: tag mismatch
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(348) : warning 202: number of arguments does not match definition
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(348) : warning 213: tag mismatch
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(349) : warning 213: tag mismatch
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(350) : warning 213: tag mismatch
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(351) : warning 213: tag mismatch
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(352) : warning 213: tag mismatch
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(353) : warning 213: tag mismatch
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(354) : warning 213: tag mismatch
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(355) : warning 213: tag mismatch
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(356) : warning 213: tag mismatch
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(358) : warning 213: tag mismatch
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(359) : warning 213: tag mismatch
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(360) : warning 213: tag mismatch
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(361) : warning 213: tag mismatch
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(362) : warning 213: tag mismatch
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(363) : warning 213: tag mismatch
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(364) : warning 213: tag mismatch
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(365) : warning 213: tag mismatch
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(366) : warning 213: tag mismatch
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(368) : warning 217: loose indentation
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(390) : warning 217: loose indentation
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(426) : warning 217: loose indentation
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(449) : warning 217: loose indentation
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(449) : error 029: invalid expression, assumed zero
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(449) : error 004: function "zcmd_OnPlayerCommandText" is not implemented
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(451) : error 017: undefined symbol "cmdtext"
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(454) : error 079: inconsistent return types (array & non-array)
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(456) : error 079: inconsistent return types (array & non-array)
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(459) : warning 225: unreachable code
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(459) : error 029: invalid expression, assumed zero
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(459) : error 004: function "OnPlayerEnterVehicle" is not implemented
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(461) : error 079: inconsistent return types (array & non-array)
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(464) : warning 225: unreachable code
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(464) : error 029: invalid expression, assumed zero
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(464) : error 004: function "OnPlayerExitVehicle" is not implemented
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(466) : error 079: inconsistent return types (array & non-array)
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(469) : warning 225: unreachable code
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(469) : error 029: invalid expression, assumed zero
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(469) : error 004: function "OnPlayerStateChange" is not implemented
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(471) : error 079: inconsistent return types (array & non-array)
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(474) : warning 225: unreachable code
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(474) : error 029: invalid expression, assumed zero
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(474) : error 004: function "OnPlayerEnterCheckpoint" is not implemented
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(476) : error 079: inconsistent return types (array & non-array)
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(479) : warning 225: unreachable code
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(479) : error 029: invalid expression, assumed zero
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(479) : error 004: function "OnPlayerLeaveCheckpoint" is not implemented
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(481) : error 079: inconsistent return types (array & non-array)
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(484) : warning 225: unreachable code
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(484) : error 029: invalid expression, assumed zero
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(484) : error 004: function "OnPlayerEnterRaceCheckpoint" is not implemented
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(486) : error 079: inconsistent return types (array & non-array)
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(489) : warning 225: unreachable code
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(489) : error 029: invalid expression, assumed zero
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(489) : error 004: function "OnPlayerLeaveRaceCheckpoint" is not implemented
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(491) : error 079: inconsistent return types (array & non-array)

Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


26 Errors.


Dzieje si? to

Podpis
Zwykły szary człowiek z niezwykłymi umiejętnościami :)
Postaw piwo autorowi tego posta
 

 
Wysłany: 2018-01-10, 17:38


Seboo







Wiek: 30
Na forum: 5515 dni
Posty: 124
Nick w MP: Sebo

Piwa: 1228

Respekt: 102
Respekt: 102

Kod:

new
string[256];

enum E_PLAYER
{
pUID,
pNick[MAX_PLAYER_NAME],
pRanga
};
new PlayerInfo[MAX_PLAYERS][E_PLAYER];

public OnPlayerConnect(playerid)
{
GetPlayerName(playerid, pNick[playerid], MAX_PLAYER_NAME);
return 1;
}

public OnPlayerText(playerid, text[])
{
switch(PlayerInfo[playerid][pRanga])
{
case 0: format(string, 256, "%d [Gracz] %s: %s", playerid, nick, text);
case 1: format(string, 256, "%d [Moderator] %s: %s", playerid, nick, text);
case 2: format(string, 256, "%d [Admin] %s: %s", playerid, nick, text);
}

SendClientMessageToAll(-1, string);
return 0;
}


Postaw piwo autorowi tego posta
 

 
Więcej szczegółów
Wystawiono 1 piw(a):
Shlasku
Wysłany: 2018-01-10, 17:44


Shlasku

Uczeń Pawno






Wiek: 22
Na forum: 3206 dni
Posty: 133
Nick w MP: luki1123

Piwa: 17

Respekt: 60

Seboo, problem z t? linijk?:

Cytat:

GetPlayerName(playerid, pNick[playerid], MAX_PLAYER_NAME);


Cytat:

C:\Users\Luki\Desktop\Serwer PAS\pawno\include\dini.inc(239) : warning 219: local variable "string" shadows a variable at a preceding level
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(75) : error 028: invalid subscript (not an array or too many subscripts): "pNick"
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(75) : warning 215: expression has no effect
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(75) : error 001: expected token: ";", but found "]"
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(75) : error 029: invalid expression, assumed zero
C:\Users\Luki\Desktop\Serwer PAS\gamemodes\pasgm.pwn(75) : fatal error 107: too many error messages on one line


Podpis
Zwykły szary człowiek z niezwykłymi umiejętnościami :)
Postaw piwo autorowi tego posta
 

 
Wysłany: 2018-01-10, 18:15


Seboo







Wiek: 30
Na forum: 5515 dni
Posty: 124
Nick w MP: Sebo

Piwa: 1228

Respekt: 102
Respekt: 102

Kod:

GetPlayerName(playerid, PlayerInfo[playerid][pNick], MAX_PLAYER_NAME);


Postaw piwo autorowi tego posta
 

 
Więcej szczegółów
Wystawiono 1 piw(a):
Shlasku
Wysłany: 2018-01-10, 18:29


Shlasku

Uczeń Pawno






Wiek: 22
Na forum: 3206 dni
Posty: 133
Nick w MP: luki1123

Piwa: 17

Respekt: 60

Seboo, dzi?ki. A teraz jak nada? np. Admina ?

@edit po wej?ciu na serwer pokazuje si? na chacie: [Gracz] : wiadomo?? (bez nicku)

Cytat:

case 0: format(string, 256, "%d {C0C0C0}[Gracz] {FFFFFF}%s: %s", playerid, pNick, text);


Podpis
Zwykły szary człowiek z niezwykłymi umiejętnościami :)
Postaw piwo autorowi tego posta
 

 
Tagi: ranga
Anonymous





Na forum: 245 dni
Posty: 1



Anonymous Koniecznie zajrzyj na:






Skocz do:  
Wyświetl posty z ostatnich:   
GTAONLINE.PL » JĘZYKI PROGRAMOWANIA » PAWN Ten temat jest zablokowany bez możliwości zmiany postów lub pisania odpowiedzi

Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Dodaj temat do Ulubionych
Wersja do druku