Skocz do zawartości

iSave v0.2


Rekomendowane odpowiedzi

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
-

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

  • 4 tygodnie później...
Ś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

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

  • 1 miesiąc temu...

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...