Skocz do zawartości

Problem ze wczytywaniem zmiennych z .ini


szmalu

Rekomendowane odpowiedzi

W GM:s nie ma już funkcji game_save i game_load, a i tak były kiepskie, więc stan gry (najważniejsze wartości globalne) wczytuję z pliku .ini, który sam uprzednio utworzyłem i dodałem do Included Files. Mam od tego skrypty, które uruchamiam przed przejściem do następnego rooma.

 

Global_left_pressed:

 

GML
if room=room1

{

if global.intro=0

{

load_game()

room_goto(teksty)

}

else

{

load_game()

room_goto_next()

}

}

 

Skrypt load_game:

 

GML
ini_open('save.ini')

 

global.money=ini_read_real('head','money',900)

global.wave=ini_read_real('head','wave',0)

global.rldlv=ini_read_real('head','rldlv',5)

global.critlv=ini_read_real('head','critlv',5)

global.acclv=ini_read_real('head','acclv',5)

 

global.intro=ini_read_real('head','intro',0)

 

ini_close()

 

Plik save.ini:

 

[head]
wave = 0
money = 5000
rldlv = 3
critlv = 3
acclv = 3
intro = 0

 

Jak widzicie, np. global.money ma przypisaną wartość 5000, a w razie błędu domyślna wartość to 900. I tu jest problem - jak odpalam grę, money wynosi 0 (ale skąd?), a np. rldlv wynosi 1 (a powinno być 3, ewentualnie 5). Wyjaśni mi to ktoś? Ja już siedzę nad tym prawie od rana i nie mam pojęcia o co chodzi :(

Odnośnik do komentarza
Udostępnij na innych stronach

Jak zamiast load_game() przypisuję wartości ręcznie, to jest ok, w dodatku wcześniej sprawdzałem kod całej gry, czy gdzieś nie nadpisuję tych wartości. Czyli błąd leży gdzieś przy wczytywaniu z pliku. Ale w takim razie, skąd się wzięły w ogóle te liczby? Powinien się chociaż default ustawić.

Odnośnik do komentarza
Udostępnij na innych stronach

Jak byś chciał zapisać większą liczbę niż 255 to:

Zapis:

GML
file_bin_write_byte(plik, liczba & 255)

file_bin_write_byte(plik, (liczba >> 8) & 255)

Odczyt:

GML
liczba = file_bin_read_byte(plik);

liczba = liczba | (file_bin_read_byte(plik) << 8);

 

PS: Zasięg to 0 - 65535 (short)

Odnośnik do komentarza
Udostępnij na innych stronach

A czy będzie nieładnie, jeśli zrobiłbym to na zwykłym pliku tekstowym? Są łatwiejsze w obsłudze niż pliki binarne, a tyle by mi wystarczyło.

 

EDIT: Problem jest chyba jednak większy, podejrzewam że na binarnych byłoby tak samo. Mianowicie, zmieniłem system zapisu do ini na zapis do txt. Odpalam grę (jeszcze w gm), wszystko jest ustawione tak jak wpisywałem, jest ok. Money zmieniło się z 5000 na 5400, bo tyle zarobiłem w grze. OK. Kompiluję do exe, włączam - money wynosi 5400, no dobra, zmienię ręcznie plik "save.txt" i ustawiam na 5000 znowu. Odpalam - jest 5400! Gdzie to może się zapisywać? Sprawdziłem wszystkie pliki w folderze, nigdzie nie ma tego 5400. To się w exe wpisało, czy co?

Odnośnik do komentarza
Udostępnij na innych stronach

Już tak miałem wpisane. Całe szczęście da się nad tym zapanować - można po załadowaniu danych z plików zadeklarować je jeszcze raz w grze na te właściwe wartości, uruchomić ją w gm i potem usunąć te linijki, zostawić same skrypty, i skompilować. Nie powinno tak być, ale to zawsze jakiś sposób żeby działało.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Pliki INI w GM:S są zapisywane razem z grą w C:/Users/NazwaUsera/AppData/Local/NazwaGry i tam należy ich szukać. Jak masz je gdzie indziej, to ich nie wczyta, bo GM:S działa w tzw. Sandboxie.

Odnośnik do komentarza
Udostępnij na innych stronach

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ę...