Dawidds Opublikowano 3 Grudnia 2008 Udostępnij Opublikowano 3 Grudnia 2008 Nudziło mi się, to postanowiłem zrobić se własny system obsługi plików (coś jak INI). Oczywiście system obsługi plików umie se napisać każdy noob, także musiałem dodać coś więcej... No i tak sobie pomyślałem, żeby dodać do tego system zabezpieczeń (jak w TYM artykule). Wszystko działa jak należy, a, że to jest dość przydatne to postanowiłem to opublikować :) Jeśli ktoś nie może zrozumieć zasady działania tego skryptu - niech poczta artykuł powyżej :P Download v0.2 - DOWNLOAD WERSJA GM6 Dlaczego iSave a nie INI...? + Daje większe możliwości (a chociażby możliwość listowania zawartości pliku) + Plik zapisu nie musi się znajdować w folderze z grą (w INI niestety musi...) + A co najważniejsze, dzięki niemu w prosty sposób możemy zabezpieczyć nasz plik przed niegrzecznymi userami... :) (znaczy podglądać plik zapisu może każdy, ale próba zmodyfikowania go będzie się kończyła usunięciem tego pliku, nie włączeniem się gry, czy co tak chcemy zrobić... :P) - Nie ma oddzielonych funkcja dla czytania/zapisywania stringów/wartości rzeczywistych (tzn. że jeśli chcę zapisać liczbę, to przy zapisywaniu muszę użyć string(), a przy odczytywaniu real()). Ale co to za problem pamiętać o dodaniu real() przy wczytywaniu...? Chyba żadny :P Przykładowy plik best_name=Dawidds best_pkt=62 #_PASS=d911414fde71cfc30e92ed2f2f73b2a4 Chyba każdy wie, o co chodzi (wartość [#_PASS] nie jest tworzona przez nas - jest generowana automatycznie). Funkcje A więc po kolei. isave_load(filename, pass) - Wczytuje plik o podanej nazwie, oraz haśle. Jeśli suma kontrolna zawarta w pliku pasuje do zawartości pliku (i podanego hasła :P) zwraca identyfikator pliku, jeśli nie - zwraca -1. Jeśli nie chcemy używać hasła wprowadzamy "" (pusta wartość :P). Przykład:GMLfile = isave_open("moj_plik.txt", "moje super mega ultra tajne haslo;D"); if(file == -1) { show_message("Wykryto modyfikacje pliku save.##Gra zostanie zamknieta..."); game_end(); //Lub kod odpowiedzialne za tworzenie nowego, "czystego" (poprawnego) pliku } isave_save(id, filename, pass) - Zapisuje plik o podanym id (to to, co w powyższym przykładzie kryje się pod zmienną [file]) pod podana nazwa, używając poprawnego kodu PASUJĄCEGO do podanego hasła i zawartości pliku. (jeśli nie chcemy używać haseł - podobnie, jak w przypadku wczytywania - podajemy pustą wartość). Przykładu pisać nie rzeba, tylko dodam, że hasło ma być takie samo jak to, ktrygo używamy przy odczytywaniu. isave_read(id, value_name) - Czyta wartość o podanej nazwie (wyjaśniać mam nadzieję nie trzeba ^_^) isave_set(id, value_name, value) - Tworzy wartość o nazwie [value_name] i zawartości [value]. isave_delete(id, value_name) - Kasuje wartość o podanej nazwie isave_exists(id, value_name) - Spreawdza, czy podana wartość istnieje isave_count(id) - Zwraca liczbę wszystkich wartości isave_clear(id) - Kasuje wszystkei wartości. isave_name(id, number) - Funkcja wykorzystywana przy listowaniu (wyświetlaniu wartości i nazw WSZYSTKICH wartości zapisanych do pliku (w pełni automatyczne - jeśli sami dodamy jakąś wartość do pliku z zapisem - program sam automatycznie wyswietli jej zawartość)). Zwraca NAZWĘ wartości o podanym numerze. Pieprwsza wartość ma numer 0, druga 1, trzecia 2, czwarta 3... itd... isave_close(id) - Zamyka plik - nie będzie można go już używać (no chyba, że wczytamy go ejszcze raz :P). Przy okazji zwalnia z pamięci zasoby zajmowane przez plik ^_^ Załączanie Abyśmy w naszej grze mogli używać funkcji iSave w oknie GM'a wybieramy File >> Merge Game... I wybieramy plik isave.gmk. Do naszego projektu dołączą wszystkie funkcje iSave :) I... to właściwie wszystko :P Przykładu nie robię, bo chyba nie ma takiej potrzeby... :P Znajdziecie jakieś bugi - piszcie, postaram się poprawić. Creditsów oczywiście nie wymagam. Miłego dnia ;P PS: Jest jedna spora luka z zabwezpieczeniach - używam se pewnego programu pewnego użytkownika (nie, nie dekompilatora), pozawalającego na zapiswanie pamięci procesu do pliku, otwieram ten plik notatnikiem, wyszukuje frazę "isave_save", patrzę na hasło, i sam sobie zakodowywuje odpowiedni control_code... Ale to wina GM'a, a nie mojego skryptu ;P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Compi Opublikowano 26 Grudnia 2008 Udostępnij Opublikowano 26 Grudnia 2008 Świetne rozwiązanie! Nie wiem kto dał 1 ale zasługujesz na wyższą ocenę. Sam tego nie użyje bo nie mam GM 7.0 a jak prze konwertuje na GM 6.1 to mam pusty plik gm6 ;/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Egzekutor Opublikowano 26 Grudnia 2008 Udostępnij Opublikowano 26 Grudnia 2008 Fajne to tylko trochę skomplikowane jak dla mnie. Dam ocenę 4/5 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Lechu4444 Opublikowano 26 Grudnia 2008 Udostępnij Opublikowano 26 Grudnia 2008 Świetne rozwiązanie! Nie wiem kto dał 1 ale zasługujesz na wyższą ocenę. Sam tego nie użyje bo nie mam GM 7.0 a jak prze konwertuje na GM 6.1 to mam pusty plik gm6 ;/ A co to za problem wchodzisz na yoyogames.com i upgrade'ujesz sobie serial'a do wersji 7 da się coś takiego zrobić bo tak pisze w wskazówkach do gm 7. A co do skryptu chyba dobry nie sprawdzałem bo pewnie nie ruszy na wersji lite ale zobaczę jak ruszy to "gits to gits"(takie moje powiedzonko) i ocenkę dam w edicie. E. Co ja za głupoty gadam przecież teraz gry dlatego nie będę robić żeby wytestować ale kod wygląda ciekawie dam Ci 5/5, co ja będę gadał jeszcze znowu jakąś głupotę walnę;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawidds Opublikowano 27 Grudnia 2008 Autor Udostępnij Opublikowano 27 Grudnia 2008 Ahh co za reakcja... ^_^ Egzekutor: skomplikowane ;P ? Właśnie prosto zrobiłem. Po prostu lista, której kolejnymi elementami są kolejne linie save'u. Myślałem nad użycie mapy, ale po chwili namysłu stwierdziłem, że zapisywanie pliku z listy będzie szybsze niż z mapy... :P Choć nie testowałem... Co do GM6 - Nobody wczoraj przesyłał mi na GG wersję *.gm6, także konwerter powinien zadziałać ;P (ale jak to gg - nie doszło...) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nobody Opublikowano 27 Grudnia 2008 Udostępnij Opublikowano 27 Grudnia 2008 Dałem ci później linka do uploadera... https://gmclan.org/up2596_4_isave.html wersja .gm6 i GM w javie, którym konwertuję na .gm6 :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
XxMichałxX Opublikowano 25 Lutego 2009 Udostępnij Opublikowano 25 Lutego 2009 jak ustalić id pliku? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 25 Lutego 2009 Udostępnij Opublikowano 25 Lutego 2009 przecież jest napisane: file = isave_open("moj_plik.txt", Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
XxMichałxX Opublikowano 26 Lutego 2009 Udostępnij Opublikowano 26 Lutego 2009 zal GML file=isave_open('plicz.txt','thu') if file==-1 { show_message('Wykryto modyfikacje pliku chamie jeden!') game_end() } else { show_message('Otworzono!') isave_set('dupa','kupy','dwie') isave_save(file,'plicz.txt','thu') game_end() } I nie modyfikowalem a pisze ze wykryto 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ę