Skocz do zawartości

Danielus

Użytkownicy
  • Postów

    391
  • Dołączył

  • Ostatnia wizyta

Treść opublikowana przez Danielus

  1. Niestety nie wyskakuje bo na razie robiłem bardzo podstawowe testy. Czyli najpierw: DGE_initbuildplace( 1, 8 ) - z założenia ma stworzyc w db.planet[1] tablice 8 buildplace. Gdy potem proboje DGE_edit_buildplace( 1, 1, 1, 70 ) Czyli zeby do db.planet[1].buildplace[1].kat dac 70 juz gmowi nie pasuje. Poza zasieg wiec napewno nie wychodzi. Jedyne co mi przychodzi na mysl to to że ta tablica buildplacow zostala skasowana(?) A nie bardzo wiem jak to sprawdzic.
  2. Nie bardzo wiem w czym to mi ma pomóc, skoro dll dziala poprawnie( w sensie mam juz funkcje w gmie wszystko dziala, jak zakomentuje linijke w której napisalem że jest błąd to poprawnie zwróci 0 ). Tu jest jeszcze DGE_DB.h zeby uniknac kolejnych nieporozumien: #ifndef DGE_DB_H_ #define DGE_DB_H_ #include <windows.h> #include "DB_class.h" #define export extern "C" __declspec(dllexport) export double DGE_edit_buildplace( double, double, double, double ); export double DGE_zwroc_buildplace( double, double, double); export double DGE_init_buildplace( double, double ); #endif /* _DLL_H_ */ A jezeli w tamtym arcie jest mimo wszystko odpowiedx na moje pytanie to prosiłbym o wskazanie bo pacze juz na ten kod i pacze i nic wypaczec nie moge ;p A nie chce czekac do jutra aż mój mózg znowu będzie w stanie dokonac na to świeżego spojrzenia^^
  3. Witam. Mam taki kod w dllu #include "DGE_DB.h" static CLASS_DB db(100); double DGE_init_buildplace( double numer_planety, double ilosc ) { db.planet[(int)numer_planety].init_buildplace( (int)ilosc ); return 0; } double DGE_edit_buildplace( double numer_planety, double numer_buildplace, double katczybudynek, double wartosc ) { if( katczybudynek ) // 1- ustalenie pozycji buildplacu { db.planet[(int)numer_planety].build_place[(int)numer_buildplace].kat=(int)wartosc; // <----------- TA linijka powoduje blad } else // 0 - ustalenie numeru budynku { db.planet[(int)numer_planety].build_place[(int)numer_buildplace].budynek=wartosc; } return 0; } klasy: struct BUILD_PLACE { int kat; int budynek; }; class CLASS_PLANET { public: int wlasciciel; int a; BUILD_PLACE* build_place; CLASS_PLANET::CLASS_PLANET() { wlasciciel=0; } void init_buildplace( int ilosc_buildplace ) { BUILD_PLACE* build_place = new BUILD_PLACE[ilosc_buildplace]; for(int a=0;a<ilosc_buildplace;a++){ build_place[a].budynek=0; build_place[a].kat=0; } } }; class CLASS_DB { public: CLASS_PLANET* planet; CLASS_DB::CLASS_DB( int ilosc_planet ) { CLASS_PLANET* planet= new CLASS_PLANET[ilosc_planet]; } }; No i gdy w gmie odpale DGE_init_buildplace to nie ma żadnych problemów ale gdy potem używam DGE_edit_buildplace wywala oczywiście "nieoczekiwany bląd". z tego co samemu udało mi sie ustalić to błąd powoduje linijka z przypisaniem wartości. DLL kompiluje sie normalnie ( visual studio 2010 ) Nie mam pomysłu co może być źle, może to cos oczywistego i ktos da radę pomóc :P
  4. To jest starszy problem i juz go rozwiazalem i owszem udalo się :) Jeśli zmienna byla 2x ty_real to wywalało błąd bo próbowałem sie odniesc do niestniejacego elemtu tablicy( błąd w pentli for ) natomiast gdy dałem ty_string to wszystko działało tylko dll zwracał śmieci.
  5. Zebrałem się w końcu i zacząłem dlla sprawdzać linijka po linijce i znalazłem błąd w pętli for( zwiększałem nie tą zmienną co trzeba ) Dziwny jednak jest ten brak reakcji przy wysyłaniu stringa do doubla. W każdym razie mam teraz inny problemik z tym dllem: Mam funkcje RANGE ( wszystko jest w dllu( DOWNLOAD ) wiec można ściągnąć i zobaczyć pełny kod ) void RANGE( int x_pos, int y_pos, int start_steps, int range ) { int steps=start_steps;//liczba krokow ktora juz zostala zrobiona if( steps<range ) //kontynuujemy tylko jesli jestesmy w zasiegu { steps++; //zwiekszamy ilosc krokow ktore zrobilismy if( pole_exists(x_pos-1,y_pos+1) ) { if( x[x_pos-1].y[y_pos+1].free==FLAG_FREE ) //lewy dolny { if( x[x_pos-1].y[y_pos+1].in_range==FLAG_OUT_OF_RANGE ) { x[x_pos-1].y[y_pos+1].in_range=FLAG_IN_RANGE; x[x_pos-1].y[y_pos+1].steps_number=steps; x[x_pos-1].y[y_pos+1].x_previous=x_pos; x[x_pos-1].y[y_pos+1].y_previous=y_pos; RANGE(x_pos-1,y_pos+1,steps,range); } else { if( x[x_pos-1].y[y_pos+1].steps_number>steps ) //jezeli dotychczasowa liczba krokow byla wieksza to zamieniamy na krotsza sciezke { x[x_pos-1].y[y_pos+1].in_range=FLAG_IN_RANGE; x[x_pos-1].y[y_pos+1].steps_number=steps; x[x_pos-1].y[y_pos+1].x_previous=x_pos; x[x_pos-1].y[y_pos+1].y_previous=y_pos; RANGE(x_pos-1,y_pos+1,steps,range); } } } } if( pole_exists(x_pos-1,y_pos) ) //lewy { if( x[x_pos-1].y[y_pos].free==FLAG_FREE ) { if( x[x_pos-1].y[y_pos].in_range==FLAG_OUT_OF_RANGE ) { x[x_pos-1].y[y_pos].in_range=FLAG_IN_RANGE; x[x_pos-1].y[y_pos].steps_number=steps; x[x_pos-1].y[y_pos].x_previous=x_pos; x[x_pos-1].y[y_pos].y_previous=y_pos; RANGE(x_pos-1,y_pos,steps,range); } else { if( x[x_pos-1].y[y_pos].steps_number>steps ) //jezeli dotychczasowa liczba krokow byla wieksza to zamieniamy na krotsza sciezke { x[x_pos-1].y[y_pos].in_range=FLAG_IN_RANGE; x[x_pos-1].y[y_pos].steps_number=steps; x[x_pos-1].y[y_pos].x_previous=x_pos; x[x_pos-1].y[y_pos].y_previous=y_pos; RANGE(x_pos-1,y_pos,steps,range); } } } } if( pole_exists(x_pos-1,y_pos-1) ) { if( x[x_pos-1].y[y_pos-1].free==FLAG_FREE ) //lewy gorny { if( x[x_pos-1].y[y_pos-1].in_range==FLAG_OUT_OF_RANGE ) { x[x_pos-1].y[y_pos-1].in_range=FLAG_IN_RANGE; x[x_pos-1].y[y_pos-1].steps_number=steps; x[x_pos-1].y[y_pos-1].x_previous=x_pos; x[x_pos-1].y[y_pos-1].y_previous=y_pos; RANGE(x_pos-1,y_pos-1,steps,range); } else { if( x[x_pos-1].y[y_pos-1].steps_number>steps ) //jezeli dotychczasowa liczba krokow byla wieksza to zamieniamy na krotsza sciezke { x[x_pos-1].y[y_pos-1].in_range=FLAG_IN_RANGE; x[x_pos-1].y[y_pos-1].steps_number=steps; x[x_pos-1].y[y_pos-1].x_previous=x_pos; x[x_pos-1].y[y_pos-1].y_previous=y_pos; RANGE(x_pos-1,y_pos-1,steps,range); } } } } if( pole_exists(x_pos,y_pos-1) ) { if( x[x_pos].y[y_pos-1].free==FLAG_FREE ) //prawy gorny { if( x[x_pos].y[y_pos-1].in_range==FLAG_OUT_OF_RANGE ) { x[x_pos].y[y_pos-1].in_range=FLAG_IN_RANGE; x[x_pos].y[y_pos-1].steps_number=steps; x[x_pos].y[y_pos-1].x_previous=x_pos; x[x_pos].y[y_pos-1].y_previous=y_pos; RANGE(x_pos,y_pos-1,steps,range); } else { if( x[x_pos].y[y_pos-1].steps_number>steps ) //jezeli dotychczasowa liczba krokow byla wieksza to zamieniamy na krotsza sciezke { x[x_pos].y[y_pos-1].in_range=FLAG_IN_RANGE; x[x_pos].y[y_pos-1].steps_number=steps; x[x_pos].y[y_pos-1].x_previous=x_pos; x[x_pos].y[y_pos-1].y_previous=y_pos; RANGE(x_pos,y_pos-1,steps,range); } } } } if( pole_exists(x_pos+1,y_pos) ) { if( x[x_pos+1].y[y_pos].free==FLAG_FREE ) //prawy { if( x[x_pos+1].y[y_pos].in_range==FLAG_OUT_OF_RANGE ) { x[x_pos+1].y[y_pos].in_range=FLAG_IN_RANGE; x[x_pos+1].y[y_pos].steps_number=steps; x[x_pos+1].y[y_pos].x_previous=x_pos; x[x_pos+1].y[y_pos].y_previous=y_pos; RANGE(x_pos+1,y_pos,steps,range); } else { if( x[x_pos+1].y[y_pos].steps_number>steps ) //jezeli dotychczasowa liczba krokow byla wieksza to zamieniamy na krotsza sciezke { x[x_pos+1].y[y_pos].in_range=FLAG_IN_RANGE; x[x_pos+1].y[y_pos].steps_number=steps; x[x_pos+1].y[y_pos].x_previous=x_pos; x[x_pos+1].y[y_pos].y_previous=y_pos; RANGE(x_pos-1,y_pos,steps,range); } } } } funkcja ta ma za określić zadanie które pola są w zasięgu i z którego pola sie na to trafiło( to potem wykorzystuje do szukania ścieżek, nie muszę szukać od nowa tylko przeskakuje z pola na pole ). Niestety to nie działa - znakuje niewłaściwe pola, na dodatek gdy zwracam numer poprzedniego pola to potrafi nawet zwrócić wartości ujemne( co jest niemożliwe ) Funkcja ma teoretycznie dzialac tak: Mamy pole startowe i zasięg( np 2 pola ). Wywołujemy range z tymi parametrami: RANGE( pole_x, pole_y, 0, zasięg ) 0- zero dlatego ze dopiero zaczynamy i nie sprawdziliśmy jeszcze żadnego pola Teraz wywołujemy funkcje RANGE dla wszystkich sasiadujaych pól( z tym że zamiast 0 w trzecim argumencie podajemy ile kroków już zrobiliśmy od pola startowego). i tak wywołujemy RANGE na każdym polu dopóki się nam nie skończy zasięg. Wprawdzie to c++ ale nie chce zakładac osobnego tematu. Mam nadzieję że ktoś wie o co mi chodzi i jak to naprawic ^^
  6. Próbowałem użyć dll w zupełnie nowym projekcie i dzieje się dokładnie to samo. Z ty_string wywołuje się bez błędów z ty_real błąd( Najlepsze jest to że w nowym projekcie jest błąd GM'a a w tym starym teraz jest błąd Windowsowy( z wysyłanie raportu o błędach )) Macie tu dlla, może z nim coś jest nie tak: KLIK Jakieś pomysły?
  7. Już nie raz tworzyłem dlle i wszystkie działały( mam jeden szablon ich tworzenia ) więc tu raczej nie o to chodzi.
  8. Nie, kompiluje się wszytko bez problemu. Dodałem return 1 ale oczywiście nic się nie zmieniło. Jeszcze co jest ciekawe to jeśli GM wysyła stringa to double z dll musi coś odebrac. Ta funkcja init generuje dwuwymiarową tablicę dynamiczna( której drugi wymiar pochodzi od tego doubla ze stringiem ). Najlepsze jest to że odwołuje się w takim razie do nieistniejących indeksów które nie dość że nie istnieją to jeszcze zwracają jakieś wartości( bo prawda bezsensowne, ale błędu nie ma ).
  9. Nie dawno wróciłem do robienia swojego starszego ale już dosyć rozbudowanego projektu. No i mam sobie niedokończony dll który miał służyć m. in. do szukania ścieżek na hexowych mapach. Od razu trochę się jednak zdziwiłem( i naprawdę nie pamiętam czemu tak wcześniej zrobiłem ) Otóż mam taki kod w skrypcie inicjującym: GML global._Battledll_Init=external_define('Battledll.dll','Battle_Init',dll_cdecl,ty_real,2,ty_real,ty_string); Natomias dll: battle.h export double Battle_Init( double, double); battle.cpp double Battle_Init( double wysokosc_mapy, double szerokosc_mapy ) { battle.battlefield.init((int)wysokosc_mapy,(int)szerokosc_mapy); } Jak widać oba argumenty są typu double, natomiast w game makerze drugi argument jest stringiem. I wszystko jest ok gra uruchamia się bez błędów, dll też reaguje tylko że cały czas zwraca jakieś śmieci zamiast tego czego bym chciał i sądzę że to właśnie wina tego stringa. Dodam jeszcze że gdy wpisze drugi typ jako ty_real to wyskakuje standardowo o niespodziewanym błędzie. Nie rozumiem też czemu nic się nie dzieje jeśli game maker rzeczywiście przesyła stringa do doubla( żadnych błędów? )
  10. Gdzie dokładnie dałeś ten kod? Bo to raczej niemożliwe żeby zatrzymywało wszystkie. i jeśli używasz { } to już nie pisz then :) np: GML if( a==b ) then a+=1; if( a==b ){ a+=1; }
  11. GML EVENT[0]=cos; EVENT[1]=cos1; EVENT[2]=cos2; this_event=1; w tablice wpisujesz sobie wszystkie eventy a potem robisz coś jakby wskaźnik który pokazuje do którego elementu tablicy się odwołujesz. potem korzystasz z tego: EVENT[this_event]
  12. ogólnie dużo pomieszał ma argumenty 0,1,3,4,5,6,7 więc ma nawet 8 ale próbuje korzystać z 7 :) E: A faktycznie wysyła 7 a wydawało mi się że widzę 6, mój błąd :)
  13. a>argument1 ( a=1; argument1=200 ) Przecież to nigdy nie zachodzi. Znaki muszą być na odwrót b>argument2 ( b=400; arguemnt4=5 i potem oddajesz do b "object0" ) Będzie zachodzić w nieskończoność Po za tym wysyłasz 6 argumentów a korzystasz z 7, więc przeanalizuj sobie to wszystko dokładnie i popoprawiaj
  14. Danielus

    Wzór na wszechświat

    Jeśli coś komuś zarzucasz to od razu podaj dowód( w tym wypadku cytat ) Na razie wychodzi na to że nie masz już jak się wybronic więc stosujesz uniki :)
  15. Danielus

    Wzór na wszechświat

    Ale co to znaczy że coś jest niemożliwe? Coś co w jednym układzie nie jest możliwe w innym już będzie. http://www.sjp.pl/co/wszechmoc Słownik pradę Ci powie - "moc nieograniczona". Po za tym chyba nie wiesz co to czarna dziura że gadasz takie głupoty. Czarna dziura to po prostu gwiazda ktora ma tak olbrzymią masę że posiada tak wielką grawitację że nawet światło przy swojej prędkosci nie potrafi uciec. Skoro nie ma stamtąd żadnego światła to nic nie zobaczymy( a raczej zobaczymy czystą czerń ). I na koniec ciekawostka: Nawet ty oddziałujesz grawitacyjnie na wszystko wokół. Czyli innymi słowy przyciągasz do siebie wszystko i wszystko przyciąga Ciebie. Niestety masz za mała masę by to było w jakikolwiek sposób zauważalne :)
  16. Danielus

    Wzór na wszechświat

    Poxipol ale wszechmoc polega na tym że można zrobić wszystko, i dlatego coś takiego jest samo w sobie zaprzeczeniem. Jeśli twierdzisz że Bóg może zrobić wszystko co zechce( a więc tworzy kamień którego najpierw nie może podnieść, a za chwile podnosi bez problemu ) to nazwij to sobie inaczej. Coś takiego jak wszechmoc nie istnieje. To tak jakbyś napisał że jakaś zmienna jednocześnie jest równa 2 i 5, co jest niemożliwe. Mówiąc zdanie o dzieleniu przez 0 sam sobie udowodniłeś że wszechmoc jest niemożliwa :) Po za tym do tego zera odwołałeś się trochę zbyt ogólnie, bo ja mogę sobie stworzyć własny system matematyczny w którym dzielenie przez 0 będzie dopuszczalne ^^ My nie uciekliśmy od tematu, tylko nie było nikogo kto by ciągnął twoją wersję, więc raczej to ty na chwilę uciekłeś by zebrać myśli ;) To że wszechświat je zapętlony jest bardzo ciekawą możliwością, jednak to tak jakby patrzec na Ziemię. Możemy się po niej kręcić w kółko. Możemy jednak wziąć trzeci wymiar i polecieć w kosmos. Tu możemy założyć że "wszechświat jest zapętlony więc też będziemy się kręcić w kółko i kolejny krok w odkrywaniu naszego świata zrobimy gdy odbijemy w 4 wymiar który znów będzie zapętlony itd
  17. Danielus

    Wzór na wszechświat

    Zależy co rozumiesz przez "koniec". Bo wszechświat ma koniec, chociaż mozna założyc że poza wszechświatem również coś jest itd. Wtedy faktycznie będzie nieskończony. Po za tym jeśli określasz wymiary to musisz miec punkt odniesienia, początek, a więc i początek czasu :) Po za tym próbujemy zrozumiec coś takiego a nie jesteśmy nawet stwierdzic czy istnieje coś takiego jak grawitacja( są wersje że grawitacja jest tylko efektem działania innych sił )
  18. Danielus

    Wzór na wszechświat

    a co było przed tym "niczym"? Albo czym jest nicośc? Bo nawet próżnia w której teoretycznie nic nie ma jest wnętrzem naszego wszechświata :)
  19. Danielus

    Wzór na wszechświat

    przykro mi poxipol ale gdybyś czytał co piszę to bys zobaczył że ja obaliłem argument programisty, a ty zamiast obalić mój zacząłeś pisać jakieś głupoty że nie będziesz się więcej wypowiadał. Procesy powstawania planet czy słońc w teorii są już opisane, co do tego skąd wogole się wziął wszechświat to na razie nic nie wiemy, ale my nie boimy się tego przyznać. @Osiem: Jeśli coś takiego jak Bóg istnieje to wywołał on co najwyżej wielki wybuch, a reszta potoczyła się sama na podstawie ustalonych praw fizyki. Przy okazji podpisuję się pod pytaniem Platyny :)
  20. Danielus

    Wzór na wszechświat

    To jedyna możliwa wersja, ale kościół nie uznaje "Ewangelii Judasza", więc czekam na to co powie Poxipol na ten temat.
  21. Danielus

    Wzór na wszechświat

    Platyna, ale w momencie kiedy pozbawia się wszechmocy przestaje by wszechmocny. Tak więc Poxipol przegrał( czego dowodem jest standardowa ucieczka, zasłaniajac się że nie ma u nas logiki. OK pokaż nam brak logiki u nas, najlepiej bardzo ładnie rozpisując i cytując ) Poxipol a skoro pochodzisz z rodziny badaczy Biblii to mam jeszcze jedno pytanie: - Skąd Jezus wiedział ze Judasz go zdradzi? Skoro mamy wolną wole a Jezus na Ziemi był człowiekiem i podlegał prawom naszego świata to skąd wiedział? Wolna wola nie istnieje nawet w odniesieniu do naszego postrzegania czasu?
  22. Danielus

    Wzór na wszechświat

    Przykład jest poprawny bo "móc" i "nie móc" nie odnosi się do tego samego zdarzenia. Popatrzcie na to tak: 1. Bóg stwarza kamień który potrafi podnieść - wszystko jest ok. 2. Bóg stwarza kamień którego nie potrafi podnieść - skoro jest wszechmocny to musi umieć stworzyć taki kamień 3. No i tu mamy problem bo: Założenie: Wszechmoc to możliwość zrobienia wszystkiego, więc nie może być że czegoś się nie da zrobić. -jeśli nie stworzy takiego kamienia to nie jest wszechmocny. -jeśli uda mu się stworzyć taki kamień to nie jest wszechmocny bo teraz nie jest w stanie go podnieść. -jeśli uda mu się go podnieść to nie jest wszechmocny bo nie stworzył kamienia którego nie byłby w stanie podnieść. Jak widzisz "móc" odnosi się do możliwości stworzenia czegoś a "nie móc" do tego co nie można zrobić ze stworzonym przedmiotem więc jest to jak najbardziej poprawne. To tak jak byś mówił że nie poprawne jest zdanie: "Jaś może kupić książkę ale nie może jej przeczytać" - Jaś ma pieniądze więc może sobie książkę kupić, ale niestety nie umie jeszcze czytać, więc nie może książki przeczytać. @ alwin: nie widze problemu w robieniu gry w którą nie zagram( wchodzisz do GM'a robisz 1 room tworzysz exeka, ale nie uruchamiasz nigdy gry. Gotowe ). Robię zupe, ale jej nie zjadam tylko wylewam. Gotowe. To czy dla kogoś takie coś bedzie miało sens nie ma znaczenia ważne że jest możliwe.
  23. Danielus

    Wzór na wszechświat

    programista bardzo dobry cytat ale czytanie ze zrozumieniem się kłania :) Tam jest napisane że zdanie gdy ktoś jednocześnie coś "może" i "nie może" jest bezsensowne i to prawda. Natomiast zdanie do którego się przyczepiłeś to: To zdanie jest poprawne bo jeśli ktoś czegoś nie może to nie jest wszechmogący. Wcześniej padło jeszcze bardzo znane "czy Bóg może stworzyc kamien którego nie podniesie" - To już nam pokazuje że coś takiego jak wszechmoc nie istnieje ponieważ byłaby zaprzeczeniem samej siebie( skoro możemy wszystko to powinniśmy też "nie móc" - co jest bezsensowne ) Innymi słowy Bóg nie może by wszechmogący bo takie coś jak wszechmoc nie istnieje. @Poxipol więc proszę oświec mnie jak to jest z tym co się z nami dzieje po śmierci - bo ja przez długi czas byłem uczony o niebie i piekle. Co do kataklizmów to są to efekty całkwicie naturalne związane z ocieplaniem się planety i to jest chyba teraz 4 takie samo powtarzenie się historii: Efekt Cieplarniany -> Ocieplenie, kataklizmy -> topienie się lodowców -> zanik Golfsztromu -> epoka lodowcowa -> cofanie sie lodu -> stan umiarkowany -> Efekt cieplarniany -> itd; Więc nie panikuj :)
  24. Danielus

    Wzór na wszechświat

    Wzór na wszechświat możemy sobie odpuścić bo za mało wiemy o jego budowie. Od paru lat( krótko po tym jak zacząłem sie bawić programowaniem ) naszła mnie pewna myśl która nie opuściła mnie do dziś: "Nasz świat jest tylko programem który jest symulowany na jakimś komputerze" - jestem ciekaw czy ktoś byłby w stanie przedstawić jakiś dowód na to ze to nie możliwe, bo ja na razie nic nie wymyśliłem :) A co do tematu religijnego który się tutaj rozwinął: 1. Bóg jest wszechwiedzący 2. Jeśli Bóg jest wszechwiedzący to znaczy że w momencie gdy człowiek się rodzi on już zna jego losy( a nawet znał je przed jego urodzeniem ) 3. Człowiek żyje sobie mamiony wizją nieba myśląc że ma wolną wolę. 4. Człowiek umiera i jest sądzony. Przypuśćmy że idzie do nieba 5. Po co to wszystko skoro Bóg z góry o wszystkim wiedział? 6. No ale jest sobie ten człowieczek w jakiejś postaci w niebie. No i co on tam w tym niebie robi przez całą wieczność? 7. Co z dziećmi/osobami chorymi umysłowo?( Dzieci "dorastają w niebie" czy zostają na poziomie z chwili śmierci?, chorzy umysłowo zdrowieją i juz są normalni? ) Tak na marginesie dodam jeszcze że każda prawdziwie wszechwiedząca istota z miejsca popełniłaby samobójstwo :) Na koniec jeszcze takie dziwne pytanie: Kiedy ludzie jako gatunek zyskali samoświadomość i jak to wyglądało( skokowo, stopniowo? ) Jeśli skokowo to jak musiał się czuć ten "pierwszy" który zrozumiał że żyje.
×
×
  • Dodaj nową pozycję...