Skocz do zawartości

  • Zaloguj korzystając z Facebooka Zaloguj korzystając z Twittera Zaloguj przez Steam Zaloguj poprzez Google      Logowanie »   
  • Rejestracja

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.

  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Pytanie: Jak wywołać plugin innym pluginem.


Najlepsza odpowiedź grankee, 25.11.2014 22:12


Jeśli są to na przykład jakieś dzwięki powiązane z używaniem broni to wywołując funkcję dającą broń sprawiasz, że plugin docelowy będzie już to obsługiwał tzn nadpisywał dzwięki, modele itd po wykryciu danej broni specjalnej (wcześniej danej).

 

Wydaje mi się, że jasno tutaj odpowiedziałem.

Jeśli jest to obsługiwane za pomocą eventu to także. Zrozum, wywołując  forwardem jakąś funkcję w innym pluginie nie przenosisz jej do swojego tylko uruchamiasz w tymże pluginie (ale zdalnie) i wszystko jest tak jakbyś uruchomił ją w tym pluginie gdzie ona jest, a jeśli uruchomisz ją w tym pluginie docelowym w którym ona jest to wszystko działa jak należy, ustawia wartości zmiennej globalnej, obsługuje model broni, dźwięki itd (nieważne czy funkcjami bezpośrednio czy w eventach, bo ten plugin w którym jest funkcja dająca broń cały czas działa, ma sygnał że dana osoba dostała extra item, zmienia sobie to w globalnych i robi co trzeba).

 

Przejdź do postu


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
37 odpowiedzi w tym temacie

#21 MAGNET

    SourceLearned ;)

  • Moderator

Reputacja: 625
Wszechmogący

  • Postów:1510
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 22.11.2014 13:11

Nie bądź taki hop do przodu. Każdy plugin jest zbudowany inaczej i nie ma stuprocentowego gotowca dla każdego z nich, wiec jeśli chcesz coś zdziałać na forwardach trzeba kod trochę poobserwowac.
  • +
  • -
  • 1

#22 grankee

    Godlike

  • Support Team

Reputacja: 507
Wszechwiedzący

  • Postów:1500
  • Lokalizacja:Radom
Offline

Napisano 22.11.2014 14:33

Master Yoga skup się. Raz piszesz, że plugin ma 1000 linijek, a raz piszesz, że jeszcze go nie masz. Zdecyduj się, znajdź konkrety i wtedy się pomyśli. Plugin musi mieć funkcję dającą ten extra item (czyli w pewien sposób musi być przygotowany do takiego "zdalnego odpalenia").


No tak tylko, że znów wywołam tylko jeden public, który jedynie da mi zwykłą broń i ustawi zmienną globalną na true, a pozostaną jeszcze modele, dmg i inne dodatki.

 

Ty nie odpalasz fragmentu kodu z innego plginu w swoim, tylko swoim pluginem doprowadzasz do wykonania funkcji w oryginalnym pluginie, wszystko co dalej się dzieje jest obslugiwane już przez oryginalny plugin (dzwieki modele itd), a nie przez Twój.

 

 

Zrozumiałem, że znleziony przez Ciebie plugin to przyklad i to nie ten, którego masz zamiar używać więc nawet go nie otwieram.


  • +
  • -
  • 2

#23 Master Yoga

    Support Team | Mocarz

  • Autor tematu
  • Support Team

Reputacja: 115
Zaawansowany

  • Postów:250
  • GG:
  • Lokalizacja:Magistrala Adresowa
Offline

Napisano 22.11.2014 17:15

No właśnie chyba odwrotnie najpierw napisałem, że nie mam, a potem, że nie niektóre z itemów osiągają tysiąc linii, więc kto tu powinien się skupić... ?

 


Ty nie odpalasz fragmentu kodu z innego plginu w swoim, tylko swoim pluginem doprowadzasz do wykonania funkcji w oryginalnym pluginie, wszystko co dalej się dzieje jest obslugiwane już przez oryginalny plugin (dzwieki modele itd), a nie przez Twój.
ja nie mówię, że wywołana funkcji jest obługiwana przez mój plugin..., 

ale z tego co napisałeś mam rozumieć, że wywołując jedną funkcję ( public ) reszta wywoła się już razem z nim ?


  • +
  • -
  • 0

HTML      ★ CSS       ★ JAVASCRIPT       ★ AJAX       ★ JQUERY       ★ PHP       ★ C++       ★ PAWN      ★ SQL       ★ Objective-C++


#24 grankee

    Godlike

  • Support Team

Reputacja: 507
Wszechwiedzący

  • Postów:1500
  • Lokalizacja:Radom
Offline

Napisano 23.11.2014 15:03

Mam wrażenie, że brakuje Ci podstawowej wiedzy na temat działania funkcji, czy też ogólnie programowania. Musisz się trochę podciągnąć z podstaw jeśli idziesz w takie rzeczy. Żeby odpowiedzieć Ci na pytanie w sposób zaspakajający musiałbym przedstawić tutaj setki przypadków, a i tak bardzo możliwe, że nie trafie, bo będziesz miał jeszcze coś innego. Znajdź/zrób te pluginy, których funkcje chcesz uruchamiać ze swojego, a my zobaczymy czy to jest przystosowane czy nie i czy będzie to działało tak jak chcesz czy nie.


  • +
  • -
  • 2

#25 Master Yoga

    Support Team | Mocarz

  • Autor tematu
  • Support Team

Reputacja: 115
Zaawansowany

  • Postów:250
  • GG:
  • Lokalizacja:Magistrala Adresowa
Offline

Napisano 23.11.2014 16:39

Bardzo możliwe, że czegoś mi brakuję, ponieważ nikt mnie tego nie uczył...


wywołując jedną funkcję ( public ) reszta wywoła się już razem z nim ?
no, aż nie wieże, że sam tak napisałem  :facepalm2:

ale skoro już tu jesteś i udzielasz się w tym temacie to powinieneś próbować nam ( czyt. mi i ogierowi ) pomóc, a nie pierdzielić jakieś głupoty, czepiając się czy też wytykając jakieś głupie błędy. 

 


Żeby odpowiedzieć Ci na pytanie w sposób zaspakajający musiałbym przedstawić tutaj setki przypadków, a i tak bardzo możliwe, że nie trafie, bo będziesz miał jeszcze coś innego.
Widziałeś item pod zm ? No ba pytanie retoryczne skoro udzielasz mi tutaj takich "mądrych" odpowiedzi ... żeby otrzymać item wiadomo, że musimy wywołać funkcję dającą nam ten item. 

Nie mam pojęcia po co się tak głupio czepiasz. Ogier poruszył ten sam temat co ja. 
Jeżeli wywołamy jakąś tam funkcję np.

zp_extra_item_selected(index, item)

i będzie ona przykładowo wyglądała tak :

public zp_extra_item_selected(player, itemid){
if (itemid == g_itemid){
give_item(player, "weapon_broon")
client_print(player, print_chat, "Kupiles jakiś tam item")
(zmienna globalna)
}
}

to da ona nam tylko bron, a co z modelami itd ?


  • +
  • -
  • -1

HTML      ★ CSS       ★ JAVASCRIPT       ★ AJAX       ★ JQUERY       ★ PHP       ★ C++       ★ PAWN      ★ SQL       ★ Objective-C++


#26 grankee

    Godlike

  • Support Team

Reputacja: 507
Wszechwiedzący

  • Postów:1500
  • Lokalizacja:Radom
Offline

Napisano 24.11.2014 00:45

Słuchaj, ja też uczyłem się sam i uważnie czytałem porady lepszych ode mnie starając się je zrozumieć, a nie się wkurzałem, bo nie rozumiem , dlatego umiem to co umiem.

Zejdź trochę z tonu, bo to Ty prosisz o pomoc, a nie ja nalegam, żeby Ci jej udzielić.

Jeśli masz funkcję tak jak podałeś, czyli:


public zp_extra_item_selected(player, itemid){
if (itemid == g_itemid){
give_item(player, "weapon_broon")
client_print(player, print_chat, "Kupiles jakiś tam item")
(zmienna globalna)
}
}

To w pluginie docelowym (w którym ją masz) też nie ustawia żadnego modelu.

Jednak jeśli w pluginie docelowym wszystko działa jak należy, to znaczy, że tam jest już ustawiony model, a funkcja powinna wyglądać tak:

public zp_extra_item_selected(player, itemid){
     if (itemid == g_itemid){
     give_item(player, "weapon_broon")
     client_print(player, print_chat, "Kupiles jakiś tam item")
     (zmienna globalna)
     ustaw_model(player,itemid)
     ustaw_psio(player,itemid)
     ustaw_gówno(player,iteamid)
     }
}

Musisz po prostu przeczytać plugin docelowy, a następnie wywołać u siebie te funkcje (jedną, dwie, osiem-nie wiem), które są wywoływane żeby ten plugin dał Ci broń, ustawił model itd. Zwykle takie rzeczy są ze sobą ściśle powiązane i zamieszczone w jednej funkcji. Jeśli są to na przykład jakieś dzwięki powiązane z używaniem broni to wywołując funkcję dającą broń sprawiasz, że plugin docelowy będzie już to obsługiwał tzn nadpisywał dzwięki, modele itd po wykryciu danej broni specjalnej (wcześniej danej).


  • +
  • -
  • 1

#27 ogieR8

    Wszechmogący

  • Power User

Reputacja: 203
Profesjonalista

  • Postów:637
  • Imię:Mariusz
  • Lokalizacja:Ruda Śląska
Offline

Napisano 24.11.2014 20:21

Master - rozumiem troszkę oburzenie, przeszedłem ten etap i dalej go nieco przechodzę, Ci wyżsi z czasem swojej edukacji zapominają jak to przechodzili i jak swoją już wiedzę przekazać tak, byśmy to zrozumieli, jeżyk im się wzbogaca w treści, których nie rozumiemy.. ale nie unoś się, bo dobrze CI powiedzieli, tutaj my mamy kłopot i to oni z dobrej woli nam pomagają :P

 

Ale wiem o co Masterowi chodzi,, rzucę pluginem: http://amxx.pl/topic...5-dragon-canon/

 

Jest tam funkcja za zp menu, nazywa się zp_extra_item_selected, gdybyśmy dobrze pozbyli się cząstek zp, zmiennych, warunków, funkcji z zombie plague (forwardów) to mamy plugin działający bez include zombieplague, do czystego cs'a, aby otrzymać broń wystarczy w/w funkcję zamienić np na : 

public daj_dragoncannon(id) {
	if(!is_user_alive(id) || !is_user_connected(id))
		return PLUGIN_HANDLED

	g_had_cannon[id] = 1
	g_reloading[id] = 0
	
	give_item(id, "weapon_m249")
	
	static ent
	ent = find_ent_by_owner(-1, "weapon_m249", id)	
	
	cs_set_weapon_ammo(ent, 0)
	cs_set_user_bpammo(id, CSW_CANNON, get_pcvar_num(cvar_ammo))
	
	play_weapon_anim(id, 3)
	
	return PLUGIN_CONTINUE
}

i wywołać ją po wpisaniu komendy (register_clcmd) w plugin_init(). Wiem, bo robie tak samo, nawet odnosząc się do tego przykładu.. (bo zagraniczne itemy pod zm'a sa bardzo ciekawe, przede wszystkim bronie ;)). 

 

Ale teraz tak:

plugin bazowy: wywolywana jest funkcja, dostajemy bron, ustawiaja sie zmienne, plugin ciagnie za soba forwardy, eventy, kiedy ma zmieniac model, ustawia mu sprite w hud (żółty znaczek przy zmianie broni), dźwięki strzału, przeładowania, braku ammunicji itd - wszystko działą cacy.

A jak to jest, jeśli funkcję daj_dragoncanon zmienimy na natywną i ją użyjemy ? Podmiany audio-wizualne w eventach również zadziałają ? Bo nie kumam..


  • +
  • -
  • 1
DiabloEwenement v.2.0 [||||||_____]
 

Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !
CodeGenerators.pl - skopiuj kod do okna po prawej, kliknij 'Ułóż". To wszystko, trudne ?


#28 MAGNET

    SourceLearned ;)

  • Moderator

Reputacja: 625
Wszechmogący

  • Postów:1510
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 24.11.2014 20:28

Jeśli wywolasz public daj_dragoncannon, to zostaną wywołane wszystkie polecenia w tym public'u zawarte, z efektami audiowizualnymi włącznie
  • +
  • -
  • 0

#29 ogieR8

    Wszechmogący

  • Power User

Reputacja: 203
Profesjonalista

  • Postów:637
  • Imię:Mariusz
  • Lokalizacja:Ruda Śląska
Offline

Napisano 24.11.2014 20:29

Nie wiem jak to opisać.. w funkcji natywnej nie ma przekierowania do tych funkcji audio-wizualnych, jak to pokazałeś w przykładzie: 

public zp_extra_item_selected(player, itemid){
     if (itemid == g_itemid){
     give_item(player, "weapon_broon")
     client_print(player, print_chat, "Kupiles jakiś tam item")
     (zmienna globalna)
     ustaw_model(player,itemid)// TUTAJ !!!
     ustaw_psio(player,itemid)// TUTAJ !!!
     ustaw_gówno(player,iteamid) // TUTAJ !!!
     }
}

tylko za pomocą eventów zarejestrowanych w plugin_init coś sie dzieje - zmienia model czy coś, tymbardziej, że większość pluginów o których mówię tworzy zupełnie nową broń, rejestrując nawet bron w weapon_list :X Czy uzycie w takim wypadku natywu na danie broni da znac pluginowi-bibliotece, ze jego eventy sa dalej 'aktualne' ? Nie wiem jak sie wysłowic...

 

tylko, że w tym publicu nie ma funkcji związanych z audio-wizualizacją, a są 'aktywowane' przez eventy, dam CI przykład:

register_forward(FM_SetModel, "fw_SetModel")
public fw_SetModel(entity, model[])
{
	if(!is_valid_ent(entity))
		return FMRES_IGNORED;
	
	static szClassName[33]
	entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))
	
	if(!equal(szClassName, "weaponbox"))
		return FMRES_IGNORED;
	
	static iOwner
	iOwner = entity_get_edict(entity, EV_ENT_owner)
	
	if(equal(model, "models/w_m249.mdl"))
	{
		static ent
		ent = find_ent_by_owner(-1, "weapon_m249", entity)
		
		if(!is_valid_ent(ent))
			return FMRES_IGNORED;
		
		if(g_had_cannon[iOwner])
		{
			entity_set_int(ent, EV_INT_impulse, 1028)
			g_had_cannon[iOwner] = false
			set_pev(ent, pev_iuser3, cs_get_user_bpammo(iOwner, CSW_CANNON))
			entity_set_model(entity, w_model)
			
			return FMRES_SUPERCEDE;
		}
	}
	
	return FMRES_IGNORED;
}

nie ma nigdzie użytej funkcji fw_SetModel oprócz zarejestrowania forwardu


  • +
  • -
  • 0
DiabloEwenement v.2.0 [||||||_____]
 

Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !
CodeGenerators.pl - skopiuj kod do okna po prawej, kliknij 'Ułóż". To wszystko, trudne ?


#30 MAGNET

    SourceLearned ;)

  • Moderator

Reputacja: 625
Wszechmogący

  • Postów:1510
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 24.11.2014 20:47

Nie natywem, a forwardem
  • +
  • -
  • 0

#31 ogieR8

    Wszechmogący

  • Power User

Reputacja: 203
Profesjonalista

  • Postów:637
  • Imię:Mariusz
  • Lokalizacja:Ruda Śląska
Offline

Napisano 24.11.2014 21:00

Nie rozumiem.. jakie prawidłowe rozwiązanie ? Mam użyć funkcji daj_dragoncannon jako forwardu w moim głównym pluginie ? Znow sie pogubilem, albo w głównym dać public 'sprawdzający' czy gracz ma odpowiednia klase (diablomod) i wywolac ja forwardem w pluginie(bibliotece) ? :X


  • +
  • -
  • 0
DiabloEwenement v.2.0 [||||||_____]
 

Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !
CodeGenerators.pl - skopiuj kod do okna po prawej, kliknij 'Ułóż". To wszystko, trudne ?


#32 MAGNET

    SourceLearned ;)

  • Moderator

Reputacja: 625
Wszechmogący

  • Postów:1510
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 24.11.2014 21:21

Innego rozwiązania nie widzę. Natywem mógłbyś tylko coś "pokazać" - a nie "zadziałać". Jedyne rozwiązanie, jakie mi się nasuwa, to zrobienie forwardu z identycznymi odniesieniami jak wewnątrz funkcji daj_dragoncannon. Kodem sypać nie będę, bo pisze z telefonu.

Chyba ze jeszcze Grankee coś wymóżdży z tym natywem.
  • +
  • -
  • 0

#33 ogieR8

    Wszechmogący

  • Power User

Reputacja: 203
Profesjonalista

  • Postów:637
  • Imię:Mariusz
  • Lokalizacja:Ruda Śląska
Offline

Napisano 24.11.2014 21:31

nie musisz dokładny kod, ale prosiłbym o zilustrowanie tego forwardu.. bo się gubie w którą strone go użyć. Dobrze mysle ? Bo serio dla mnie osobiscie natywy, forwardy - czy teoria, czy praktyka to jakies jaja osobiscie.. dalej to troszke myle i nie wiem jak to zastosowac wzgledem moich potrzeb :D

 

'w glownym zrobic publica, w ktorym beda warunki i sprawdzenia, czy gracz spelnia wymagania na otrzymanie broni.. poczym w bibliotece uzyc w/w funkcji jako forwardu i w niej daj_dragoncannon' ?

 


  • +
  • -
  • 0
DiabloEwenement v.2.0 [||||||_____]
 

Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !
CodeGenerators.pl - skopiuj kod do okna po prawej, kliknij 'Ułóż". To wszystko, trudne ?


#34 MAGNET

    SourceLearned ;)

  • Moderator

Reputacja: 625
Wszechmogący

  • Postów:1510
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 24.11.2014 22:01

Tak jak mówisz
  • +
  • -
  • 0

#35 Master Yoga

    Support Team | Mocarz

  • Autor tematu
  • Support Team

Reputacja: 115
Zaawansowany

  • Postów:250
  • GG:
  • Lokalizacja:Magistrala Adresowa
Offline

Napisano 25.11.2014 08:20


Master - rozumiem troszkę oburzenie, przeszedłem ten etap i dalej go nieco przechodzę, Ci wyżsi z czasem swojej edukacji zapominają jak to przechodzili i jak swoją już wiedzę przekazać tak, byśmy to zrozumieli, jeżyk im się wzbogaca w treści, których nie rozumiemy.. ale nie unoś się, bo dobrze CI powiedzieli, tutaj my mamy kłopot i to oni z dobrej woli nam pomagają
 
Ale wiem o co Masterowi chodzi,, rzucę pluginem: http://amxx.pl/topic...5-dragon-canon/
ogierze ja nic nie przechodzę :D i myślę, żę jesteśmy na podobnym poziomie  ;)

jak zauważyłem, to tylko ty zrozumiałeś temat i kilku gości z support team'u, a ten dalej głosi jakieś teorię uważając, że nic nie kumam...

 


To w pluginie docelowym (w którym ją masz) też nie ustawia żadnego modelu.

plugin dał Ci broń, ustawił model itd.

już wiesz o co mi chodzi ? 

 

Magnet widzę, że jesteś maniacem BB, wieć masz coś wspólnego z zombie.|

 

Funkcję napisałem gdzieś tam wyżej ( zp_extra_item_selected )

w niej ustawiona jest zmienna globalna

w pluginie zarejestrowany jest event który sprawdza bron i model 
do sprawdzenia modelu też używana jest ta zmienna globalna, do dmg rownież, więc teraz pytanie 

czy wywołując tę funkcję z zmienną globalną pociągnie ona inne funkcję ?


o czystego cs'a, aby otrzymać broń wystarczy w/w funkcję zamienić np na
no fajnie super tylko, żę ja chciałbym żeby to jednocześnie działało jako item i jako bonus w menu 
  • +
  • -
  • 0

HTML      ★ CSS       ★ JAVASCRIPT       ★ AJAX       ★ JQUERY       ★ PHP       ★ C++       ★ PAWN      ★ SQL       ★ Objective-C++


#36 grankee

    Godlike

  • Support Team

Reputacja: 507
Wszechwiedzący

  • Postów:1500
  • Lokalizacja:Radom
Offline

Napisano 25.11.2014 22:12   Najlepsza odpowiedź


Jeśli są to na przykład jakieś dzwięki powiązane z używaniem broni to wywołując funkcję dającą broń sprawiasz, że plugin docelowy będzie już to obsługiwał tzn nadpisywał dzwięki, modele itd po wykryciu danej broni specjalnej (wcześniej danej).

 

Wydaje mi się, że jasno tutaj odpowiedziałem.

Jeśli jest to obsługiwane za pomocą eventu to także. Zrozum, wywołując  forwardem jakąś funkcję w innym pluginie nie przenosisz jej do swojego tylko uruchamiasz w tymże pluginie (ale zdalnie) i wszystko jest tak jakbyś uruchomił ją w tym pluginie gdzie ona jest, a jeśli uruchomisz ją w tym pluginie docelowym w którym ona jest to wszystko działa jak należy, ustawia wartości zmiennej globalnej, obsługuje model broni, dźwięki itd (nieważne czy funkcjami bezpośrednio czy w eventach, bo ten plugin w którym jest funkcja dająca broń cały czas działa, ma sygnał że dana osoba dostała extra item, zmienia sobie to w globalnych i robi co trzeba).

 


  • +
  • -
  • 1

#37 Master Yoga

    Support Team | Mocarz

  • Autor tematu
  • Support Team

Reputacja: 115
Zaawansowany

  • Postów:250
  • GG:
  • Lokalizacja:Magistrala Adresowa
Offline

Napisano 26.11.2014 12:37

Toż nie mogłeś tak od razu ? 


Zrozum, wywołując  forwardem jakąś funkcję w innym pluginie nie przenosisz jej do swojego tylko uruchamiasz w tymże pluginie (ale zdalnie)
czy ja piszę takie głupoty czy ty nie możesz mnie zrozumieć ? bo ja nie pisałem, że kod z jednego pluginu przeniesie się na inny plugin dlatego też napisałem w temacie wywołać, a nie przenieść,

ale dziękuję Ci za pomoc, oczywiście dostajesz +, choć szło ciężko :D

Temat można zamknąć chyba, że ogier chce jeszcze coś tam pokombinować z tym.

Dzięki


  • +
  • -
  • 0

HTML      ★ CSS       ★ JAVASCRIPT       ★ AJAX       ★ JQUERY       ★ PHP       ★ C++       ★ PAWN      ★ SQL       ★ Objective-C++


#38 grankee

    Godlike

  • Support Team

Reputacja: 507
Wszechwiedzący

  • Postów:1500
  • Lokalizacja:Radom
Offline

Napisano 26.11.2014 13:41


choć szło ciężko

Nic nie szkodzi, jak ja się uczyłem to też nie wszystko pojmowałem od razu :) Z czasem będziesz coraz bystrzej myślał  ^D^


  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych