Jakim Opublikowano 23 Sierpnia 2013 Udostępnij Opublikowano 23 Sierpnia 2013 Tytuł: RPG Structure System Opis: niżej. W skrócie: rozbudowany system organizacji danych dla gry RPG (i nie tylko!). Wersja: 0.5 Download: https://gmclan.org/up506_4_RPG_Structure_System.html Rozmiar pliku: 96 KB Autor: Jakim Wersja GM: Game Maker 8.1 Szczegółowy opis: Oto kompleksowy system plików, który pozwoli stworzyć postacie, dialogi, przedmioty czy plansze w sposób spójny i zorganizowany. Kluczowym elementem tej struktury jest elastyczność - to od dalszego kodowania zależy jedynie, jak bardzo gra na bazie tej struktury będzie dała się modyfikować i ulepszać z zewnętrznego poziomu. Struktura plików: System obsługuje następujące typy plików: .STR (string: łańcuchy znaków) Główny plik zawierający wszystkie używane przez grę łańcuchy znaków - elementy menu, kwestie dialogowe, komunikaty i tak dalej. Wszystkie nazwy poza własnymi, jak np. postaci, będą uchowane właśnie tu. To rozwiązanie jest szczególnie przydatne, gdy zamierzamy tłumaczyć naszą grę/edytować nazwy istniejącej już gry bez przeszukiwania silnika czy też samych plików istot. Warto pamiętać, że w grze pozostają jedynie informacje o id tekstu, do którego się dany obiekt odnosi. Za każdym razem w miejscu creature_name czy item_name wartością jest INTEGER, nie STRING. Dodatkowo, warto posługiwać się stałymi referencjami do odpowiednich kwestii - ułatwia to pracę. W tym celu stworzony został plik refs.cns. W przyszłości tekst, o określonym charakterze, będzie można połaczyć z dźwiękiem; za każdym razem, gdy się pojawi w określonym przez typ kontekście, zostanie wydana komenda odtworzenia dźwięku. Z racji tego, iż radzę unikać wbudowanego systemu obsługi dźwięków, wprowadziłem komendę wav_play. Kwestie zawarte w STR mogą zawierać znaczniki typu [CHARNAME] czy [HP], które automatycznie będą zamieniane na inny tekst/wartość odpowiedniej zmiennej (przez variable_global_? Nie wiem jeszcze). Planuję dodać również inicjowanie globalnych akcji z tego poziomu. .ITM (items: przedmioty) Wszystko, co powinniśmy wiedzieć o przedmiocie, powinno być tu zapisane, a więc atak, czy bonusy wynikające z noszenia/atakowania danym przedmiotem. Możemy ustalić liczbę dodatkowych parametrów i wprowadzić specjalne efekty broni. Podobnie jak typ powyżej, struktura zostanie omówiona szerzej w detalach technicznych. .ARE (areas: lokacje) Mapa lokacji. Teren o ustalonych wymiarach składa się z trzech warstw - pierwsza odpowiada za kolor, druga za literkę obiektu (na potrzeby roguelike'a), a trzecia symbolizuje, czy obiekt stanowi przeszkodę czy nie. Po wypełnieniu informacji o całej lokacji, na końcu ładowane są obiekty specjalne: spawnpointy, NPC czy aktywatory odpowiadające za przenoszenie do innego obszaru. .CHR (characters: postacie) Upgrade'owany CRE o status gry, a więc informacje wynikające z prowadzenia fabuły, niepotrzebne "zwykłym" postaciom niezależnym. .STO (stores: sklepy) Plik zawierający listę sprzedawanych przedmiotów. Polecam obejrzeć sto_save/sto_load, by zobaczyć strukturę pliku. W przyszłości dodam informację o przelicznikach cen oraz wpływie reputacji na cenę. .TBL (tables: tabele) Tu znajdują się tabele. Ich głównym celem jest łączenie zasobów z wybranym przez nas identyfikatorem (głównie na potrzeby edytorów aniżeli samej gry); w przyszłości również tabele doświadczeń na następne poziomy, liczby możliwych zaklęć w zależności od poziomu - ogólnie wszystko, co da się zapisać w formie prostej tabeli. Poniżej przedstawiono struktury, których wprowadzenie jest dopiero w planach lub nie jest możliwe bez silnika samej gry. .SPL (spells: czary) Ta opcja, mimo iż kluczowa dla wielu RPG, pozostaja na razie pusta - z racji tego, jak różnie można podejść do tej kwestii przy pisaniu własnego silnika; nie chcę narzucać żadnych odgórnych rozwiązań. Tym niemniej postaram się niedługo zamieścić przykład użycia. .DLG (dialogs: dialogi) System dialogów połączony z triggerami i akcjami, a więc inicjowaniem cutscenek, zdarzeń gry czy zmiany statusu gry. Oczywiście, pliki .dlg nie zawierają informacji o wypowiedzianych kwestiach, odnoszą się do pliku .str. Na razie jednak triggery i akcje muszę zostawić niezaimplementowane, gdyż silnie zależą od niezależnego od struktury systemu gry. .ACT (actions: akcje) Pliki akcji, czyli ewentualne oskryptowanie wszystkiego, co się rusza w świecie gry, rzucam jedynie jako sugestię. Zaletą tego rozwiązania jest tworzenie świata gry spoza, co jest właściwie głównym celem tego silnika. Bez tego feature'a jakiekolwiek modyfikowanie gry z zewnątrz będzie ograniczone, a czasami nawet niemożliwe. Wadą - spowolniona komunikacja między graczem a silnikiem gry. Tym niemniej zalecam korzystać z tego typu plików, chociażby dla zachowania spójności silnika. WAV i PNG nie wymagają tłumaczenia. To drugie będzie jedynie źródłem grafik do zaimportowania przez Game Makera. Parę technicznych komunikatów. Główne pliki (ITM/CRE/ARE...) mają poniższą strukturę: 1. Nagłówek 2. Podstawowe parametry 3. Listowane dodatkowe elementy O ile kwestia nagłówka jest jasna (na razie nie jest nam potrzebne nic więcej poza typem pliku), o tyle wyjaśnienia może wymagać dalsza część. Wygodnie będzie posłużyć się screenem: Nagłówek i podstawowe parametry mają stały rozmiar, dalsza część zależy od ilości dodatkowych elementów, które są naliczane w ostatnim bajcie drugiej sekcji - ten ostatni bajt zawiera informację o ilości podstruktur niższego rzędu o stałej wielkości, wyznaczoną przez xxx_secondary_size oraz poszczególne wielkości elementów size_xxx_. Kluczową rolę odgrywają dodane stałe. Przy każdej modyfikacji liczby i własności czy to przedmiotów, postaci czy obszarów, gra się nie wysypie - bo o to głównie chodzi - by móc tworzyć RPG bez obawy, że trzeba będzie przerabiać pół gry, by wprowadzić dodatkowy współczynnik istot lub usunąć nieprzydatną. Kopia wprowadzonych stałych znajduje się w pliku engine.cns i, o ile wcześniej nie napiszemy własnego edytora do gry, z poziomu tego pliku modyfikujemy najistotniejsze dla silnika rzeczy. Nieco inaczej wygląda struktura plików STR, która bardziej przypomina tablicę alokacji. 1. Nagłówek 2. Licznik kwestii 3. Offsety i długości kwestii 4. Tekst Pon nagłówku występuje licznik (3 bity są zarezerwowane na wszelki wypadek, 2 jeszcze można przekroczyć) wszystkich elementów. Dalej, dla każdego elementu znajduje się jego absolutna pozycja i długość (z technicznego punktu widzenia można byłoby operować samą długością wejść, jednakże proszę sobie wyobrazić odczytywanie ostatnich stringów - byłoby to niewspółmiernie obciążające przy dużych plikach) elementu. Na końcu pozostaje umieścić sam tekst. Jak widać, silnik jest mocno inspirowany Infinity Engine - moim skromnym zdaniem jest to pewien wzór do naśladowania. Nie jest on optymalny - np. brakuje narzędzia, które przydzielałoby określone miejsce zmiennej w pamięci gry (wszak wszystkie zmienne użyte w grze są z ustalonego zakresu, który co prawda można podnieść/obniżyć), co, chociaż można byłoby naprawić z użyciem odpowiedniej biblioteki, na razie zarzucam. Również kusiłoby wykorzystanie metod do powtarzających się fragmentów kodu - to jest jednak poza zasięgiem Game Makera. Przy tak wielu niezaimplementowanych rzeczach, można byłoby spytać, czemu publikuję już w tym momencie. Odpowiedź jest prozaiczna: umieszczam ten szkielet struktury już w tym momencie, ponieważ im szybciej zauważycie jakieś błędy bądź nieprzemyślenia silnika, tym łatwiej będzie je wyeliminować. Poza tym przy ciągłym supporcie mogę dostosowywać silnik do waszych potrzeb i wprowadzać rozwiązania, na które sam nie wpadłem. Podstawowe skrypty: xxx_save/xxx_load zapisuje do/ładuje z pamięci podręcznej informacje o przedmiocie/postaci/lokacji. strings_get_ pobiera wartość z zadanego pliku tekstowego STR. Ścieżki do plików uzyskuje się za pomocą komend file_path_. Dodatkowe skrypty: Zawarłem kilka dodatkowych, technicznych skryptów do obsługi plików binarnych, np. - file_bin_copy_string(file,start,length) - kopiuje łańcuch znaków z pliku binarnego, - file_bin_copy_value(file,start,length) - jak wyżej, tyle że wartość o ustalonej długości, - file_bin_read_value(file,length) - odczytuje wartość o ustalonej długości (bez zmiany pozycji pliku), - file_bin_write_chain(file,value,length) - zapisuje łańcuch bajtów na podstawie zadanej wartości, - file_bin_write_string(file,position,string) - zapisuje ciąg znaków, - decompose(value,index) - wyciąga odpowiedni bajt z n-bitowej wartości. Posługuję się cienkokońcowym (little endian) sposobem zapisem informacji, według mnie jest to naturalna i przystępna droga kodowania danych. Co będzie w przyszłości? - rzeczy wymienione, aczkolwiek niezaimplementowane jeszcze, - edytor CRE/ARE/ITM/TBL (napisany raczej już nie w GM) i, jeżeli się uda, kompleksowy edytor i walidator całego świata, - silnik błędów i komunikatów, - kilka przykładowych tagów i kwestii połączonych z dźwiękiem w pliku STR, - przykład nieużywanych jeszcze elementów SPL (czary), - przykładowa gierka RPG wykorzystująca cały system, wliczając osobny, prosty system skryptowania oraz zapis do SAV, - automatyczne tworzenie pliku TBL na podstawie katalogów ITM/CRE, - pakowanie i zabezpieczanie danych przed edycją, - szczegółowy help. Jaki jest cel tego silnika? Może zamiast odpowiedzieć, rzucę pytanie, które zawiera esencję tego, czego oczekiwałbym po dobrym, niestarzejącym się RPG: - Czy jako gracz mogę stworzyć swój własny świat i własną historię na podstawie tej gry, jeżeli tylko dostanę odpowiednie narzędzia? Oczywiście, nie musisz dążyć do tego podczas robienia swojej gry RPG (a może i nie tylko RPG?). Drugi powód jest jeszcze prostszy - zamierzam kiedyś skończyć roguelike ;). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PaladynXD Opublikowano 23 Sierpnia 2013 Udostępnij Opublikowano 23 Sierpnia 2013 Na pewno mi się dziś przyda :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Amaterasu Opublikowano 24 Sierpnia 2013 Udostępnij Opublikowano 24 Sierpnia 2013 Widać że w powijakach, ale system wydaje się być stabilny. Znając Cię, wiem że nie będziesz miał problemu z dokończeniem reszty, niemniej jeśli zechcesz, chętnie pomogę z którymś z elementów (Huder zresztą też), bo cel jest szczytny, a silnik przyda mi się bardziej niż bardzo. 5/5 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jakim Opublikowano 24 Sierpnia 2013 Autor Udostępnij Opublikowano 24 Sierpnia 2013 W sumie jest rzecz, z którą można by mi pomóc, mianowicie edytory ITM/CRE/CHR/STR/itd. Chciałbym, żeby dla oszczędności miejsca i pamięci były napisane w C++/C#, niestety nie mam narzędzi/bibliotek, by to sporządzić tak, żeby działało również na nowszych systemach. To są proste programiki, relatywnie szybko się je pisze. Na przykład walidacja STR to dosyć przyjemna rzecz, mogę opisać cały algorytm sprawdzania poprawności pliku. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 24 Sierpnia 2013 Udostępnij Opublikowano 24 Sierpnia 2013 Coś jest nie tak w funkcji itm_load(); GML ___________________________________________ ERROR in action number 1 of Create Event for object obj_main: In script itm_load: Error in code at line 18: for(iterator[itm_get_parameters]=0;iterator[itm_get_parameters]<item_main_size;iterator[itm_get_parameters]+=1) ^ at position 23: Unknown variable itm_get_parameters Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jakim Opublikowano 24 Sierpnia 2013 Autor Udostępnij Opublikowano 24 Sierpnia 2013 Zmieniałem nazwę funkcji przed uploadem, iteratorów nie poprawiłem - powinny mieć indeks skryptu, w którym się znajdują. Już wrzucam poprawkę. A tak przy okazji iteratorów: przez tę strukturę zagnieżdżanie funkcji skończy się (ba, nie skończy się) nieprzerwaną pętlą. Jeżeli chcesz zagnieżdżać - to znaczy, że coś robisz już źle w momencie planowania. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 24 Sierpnia 2013 Udostępnij Opublikowano 24 Sierpnia 2013 No właśnie coś mi się nie zgadzał opis funkcji item_load() bo tam wszedzie masz USAGE: itm_get_parameters(file_path) xD Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jakim Opublikowano 24 Sierpnia 2013 Autor Udostępnij Opublikowano 24 Sierpnia 2013 Opis komend też na końcu będę musiał poprawić :). Dzięki za spostrzeżenie, wrzuciłem fix'niętą wersję. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 24 Sierpnia 2013 Administratorzy Udostępnij Opublikowano 24 Sierpnia 2013 Przypomina mi to, co robiłem do Almory Online 0.8 - ale od czasu jak można korzystać z plików XML, to przestało mi się to opłacać, bo edytorem zapisuję do XMLa od razu. Nie mniej dla pozostałych GMów, a także innych języków programowania - rozwiązanie wciąż bardzo ciekawe i uczące jak korzystać z plików binarnych. Propsy za wykonaną pracę. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 24 Sierpnia 2013 Udostępnij Opublikowano 24 Sierpnia 2013 Proponuję zmienić show_message("ITM file will be overwritten.") na show_debug_message("ITM file ( " + filename_name( temp_item_path ) + " ) will be overwritten.") Raz że nie wyskakuje tabelka z informacją zamiast tego będzie info w debugu to 2 że poda konkretną nazwę pliku. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jakim Opublikowano 24 Sierpnia 2013 Autor Udostępnij Opublikowano 24 Sierpnia 2013 Ja planuję i tak własny system komunikatów, więc to, co podałeś, to na bank będzie (zapisywanie do .log) :D. Dzięki za komentarze. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 24 Sierpnia 2013 Udostępnij Opublikowano 24 Sierpnia 2013 Nie mogę się doszukać jak są tworzone texty. Widzę że w pliku texts.str one są ale jak bym chciał dodać tekst "staff" to jak to zrobić? Ręcznie edytując ten plik? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jakim Opublikowano 24 Sierpnia 2013 Autor Udostępnij Opublikowano 24 Sierpnia 2013 Na razie tak, dlatego muszę czym prędzej znaleźć kogoś, kto napisze kompatybilny edytor .str :D. Na razie ta wersja jest poglądowa, służy do zapoznania się z wizją architektury - to dobry moment, byście zaproponowali własne elementy, których obecność byłaby mile widziana ;). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Amaterasu Opublikowano 24 Sierpnia 2013 Udostępnij Opublikowano 24 Sierpnia 2013 Czy tylko mi się wydaje, czy pierwszy tekst w tym pliku ma zerową długość? Wnioskuję z obrazka. 0D = 13, tekstów jest 12. Chciałem ten edytor napisać i nie wiem czy po prostu mam to ominąć, czy to jakiś bug. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jakim Opublikowano 24 Sierpnia 2013 Autor Udostępnij Opublikowano 24 Sierpnia 2013 To nie bug, pierwszy string jest pusty celowo. Czasami będziemy takiego potrzebować. Ustawienie go jako pierwszego wydaje się najrozsądniejszym pomysłem - gdy jakaś zmienna się przypadkowo wyzeruje, otrzymamy empty string. Jak już pewnie zauważyłeś, znacznik każdej kwestii jest siedmiobajtowy. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jakim Opublikowano 25 Sierpnia 2013 Autor Udostępnij Opublikowano 25 Sierpnia 2013 Ok, zrezygnowałem z GUI - niepotrzebnie wydłuża obieg informacji. Dołączyłem mój silnik roguelike na starcie i to będzie bazą do dalszych działań. Wkrótce nowa wersja. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jakim Opublikowano 28 Sierpnia 2013 Autor Udostępnij Opublikowano 28 Sierpnia 2013 UWAGA, duży update: dodałem przykład roguelike'a jako sztampowe zastosowanie silnika. Na razie bez AI wrogów i bez opisu funkcji. Między innymi pojawiło się: - korzystanie z plików TBL, - przechodzenie między lokacjami, - wczytywanie świata z pliku ARE, - 60 przedmiotów, 5 typów potworów i 5 sklepów (większość jeszcze nieaktywna w grze), - system RPG: ekwipunek, sklep, walka, - wiele, wiele więcej. Pozostaje dodać dialogi i skrypty oraz narzędzia do edycji świata :). Link pozostaje ten sam. W miarę możliwości starałem się oddzielić skrypty dotyczące samego silnika od skryptów dla roguelike'a. Teraz każdemu dodanemu elementowi (plikowi ITM/CRE/STO) trzeba nadać identyfikator w odpowiedniej tabeli. Lepiej operować refkami do zasobu aniżeli ścieżką do pliku. CTRL służy do ataku/rozmowy. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Amaterasu Opublikowano 28 Sierpnia 2013 Udostępnij Opublikowano 28 Sierpnia 2013 ___________________________________________ COMPILATION ERROR in Script: compose_from_string Error in code at line 5: temp_value+=string_byte_at(argument0,1+iterator[compose_from_string])*power(256,iterator[compose_from_string]); ^ at position 18: Unknown function or script: string_byte_at Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jakim Opublikowano 28 Sierpnia 2013 Autor Udostępnij Opublikowano 28 Sierpnia 2013 To wbudowana funkcja Game Makera, przynajmniej w 8.1; której wersji używasz? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Amaterasu Opublikowano 28 Sierpnia 2013 Udostępnij Opublikowano 28 Sierpnia 2013 8.1 Jeśli chodzi o wybranie litery z napisu, to u mnie jest string_char_at. E: Po zamianie zaczęło działać. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 28 Sierpnia 2013 Udostępnij Opublikowano 28 Sierpnia 2013 truncate() == clamp() Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jakim Opublikowano 28 Sierpnia 2013 Autor Udostępnij Opublikowano 28 Sierpnia 2013 O, nie wiedziałem nawet. Zastąpiłem wszystkie wystąpienia truncate. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 28 Sierpnia 2013 Udostępnij Opublikowano 28 Sierpnia 2013 Musiałem xD 3 osobne czcionki 1 do area 2 do charów 3 do menusów. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jakim Opublikowano 28 Sierpnia 2013 Autor Udostępnij Opublikowano 28 Sierpnia 2013 O, możesz podesłać? :D Fajnie to wyglada. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 28 Sierpnia 2013 Udostępnij Opublikowano 28 Sierpnia 2013 https://gmclan.org/up539_14_rogue.html Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jakim Opublikowano 28 Sierpnia 2013 Autor Udostępnij Opublikowano 28 Sierpnia 2013 Dzięki, zaimplementowałem. Będziesz w kreditsach ;). Amaterasu, Ty również :). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 28 Sierpnia 2013 Udostępnij Opublikowano 28 Sierpnia 2013 https://gmclan.org/up539_14_rogue.html Exe plz :F Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jakim Opublikowano 30 Sierpnia 2013 Autor Udostępnij Opublikowano 30 Sierpnia 2013 https://gmclan.org/up506_4_RPG_Structure_System.html Plik EXE dołączony + naprawiono parę bugów z wyświetlaniem oraz dodano zapis postaci przy wyjściu z gry. Dodałem prowizoryczny area_editor: CTRL+1...K - wybór koloru, CTRL-Q/W/E - wybór stawianego obiektu (PPM), posługują się refkami z odpowiedniego pliku TBL (id obiektu ARE/CRE), F2 - zapis, F3 - odczyt (gdy mapy są innych rozmiarów, najpierw raz poziom się zrestartuje), F5 - stawianie przeszkód ON/OFF, F7 - usuń obiekt. Jako że korzysta z keyboard_string, zwiesi się, gdy przełączymy grę. Polecam wczytać jedną z map, by zobaczyć, jak to wewnątrz wygląda. Amaterasu przygotował także string_editor, obsługa jest intuicyjna. Ja się zmywam na 2 tygodnie. Stay tuned! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Amaterasu Opublikowano 30 Sierpnia 2013 Udostępnij Opublikowano 30 Sierpnia 2013 Po rozpoczęciu gry zacząłem zdobywać 30 poziomów na sekundę, na samej górze przy napisie "Exp" niezmiennie widniała liczba -16777215. To tak miało być? : | Fajnie się sprawuje kupowanie przedmiotów. Na trawiastym terenie pojawił się czerwony x, którego nie sposób było trafić nawet z najlepszej broni (miałem już 415 lvl [wyłączyłem zdobywanie poziomów] i ulepszyłem staty). Przydałoby się, żeby gracz dowiadywał się, jaki stwór zabrał mu właśnie 7-8 hp. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jakim Opublikowano 30 Sierpnia 2013 Autor Udostępnij Opublikowano 30 Sierpnia 2013 Wat? :< Co prawda nie zabezpieczałem jeszcze plików przed "złym" otwarciem, ale tego się nie spodziewałem. Upewniłeś się, że plik cre poprawnie się załadował? Podobnie z tym spiderem. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się