V Fighter Opublikowano 20 Stycznia 2018 Udostępnij Opublikowano 20 Stycznia 2018 Witam. W wielu grach typu klikacze, jest coś takiego, że kiedy na przykład nie gramy, a wejdziemy do gry po jakimś czasie, gra daje nam jakiś bonus w zależności od tego, jak długo nas nie było. Z tym, że zwykłe zapisywanie daty przy wyjściu z gry i porównywanie zapisu z aktualną przy ponownym starcie jest nienajlepszym rozwiązaniem, bo gracz może wyjść z gry i zmienić datę w systemie, a gdy wejdzie, otrzyma bonus, na który powinien czekać. Mam nadzieję, że dobrze to opisałem. I pytanie brzmi, jak mogę tego dokonać? Jak zabezpieczyć grę przed takimi oszustwami? Gra potrzebuje swojego niezależnego od systemu zegara. Dodam tak od razu, że gra jest offline. Dziękuję za przeczytanie i czekam niecierpliwie na pomoc kogoś doświadczonego Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 20 Stycznia 2018 Udostępnij Opublikowano 20 Stycznia 2018 Prędzej czy później będzie chciał z powrotem zmienić datę na rzeczywistą więc gra może cofnięcie czasu wykryć i ukarać gracza? O taki luźny pomysł Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
V Fighter Opublikowano 20 Stycznia 2018 Autor Udostępnij Opublikowano 20 Stycznia 2018 Hmm. Pomysł niesamowicie prosty i całkiem dobry. Jednak to taka prowizorka trochę :/. Ale jak to robią gry tego typu. Już nieraz próbowałem to obejść na Androidzie. Wyłączałem grę, dla pewności Internet, Dane Komórkowe, Wi Fi... Zmieniałem godzinę o +1h, ale gdy odpaliłem grę, nic się w niej nie zmieniło. Nawet próbowałem z restartem telefonu, bo podejrzewałem, że gra utworzyła sobie jakiś mini serwer na telefonie, dzięki czemu serwer niezależnie liczy czas, a gra go sprawdza. Jednak taki serwer najwidoczniej jest jakoś dobrze ukryty przed zamykaniem procesów i nie mam pojęcia, bo to już kosmiczne domysły, ale musi działać nawet, jeśli telefon jest wyłączony. Wiele gier tak przetestowałem i wszystkie mają taki mechanizm, To trochę tak, jakby korzystały z wbudowanego zegara w urządzeniu. Tak samo, jak w PC na płycie głównej też jest zegar (taki mały srebrny walcowy element podobny do kondensatora prawdopodobnie), dzięki któremu jeśli mamy kompa bez neta, a go ponownie odpalimy, to godzina jest aktualizowana. Więc już nie wiem, aktualnie jestem głupi i prosiłbym, żeby mnie ktoś jakoś oświecił w tym temacie. I am Lord, masz dobry pomysł, ale to tymczasowa alternatywa dla tego, czego szukam. Na Marketplace'ie się tego nie znajdzie, na Google po angielsku się tego też nie znajdzie, nie wiem, jak oni to robią, a rozwiązanie jest pewnie banalnie proste... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 20 Stycznia 2018 Udostępnij Opublikowano 20 Stycznia 2018 Może taka gra ma swój własny timer w ukrytym procesie który zawsze jest włączony. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
V Fighter Opublikowano 20 Stycznia 2018 Autor Udostępnij Opublikowano 20 Stycznia 2018 No właśnie, ale jak taki timer stworzyć :/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 20 Stycznia 2018 Udostępnij Opublikowano 20 Stycznia 2018 W takim Idle Kingdoms widzę że gra po prostu sprawdza czy skok czasowy nie był większy od całej doby. Jak był to prosi o połączenie się z internetem w celu synchronizacji. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
V Fighter Opublikowano 20 Stycznia 2018 Autor Udostępnij Opublikowano 20 Stycznia 2018 Ale jednak prosi o połączenie z netem. A jest też sporo takich gier offline. Na razie nie mogę przytoczyć przykładu, ale jak będę miał możliwość, to wrzucę tu kilka. A jak sprawa wyglądałaby, gdybym chciał pozyskać przez moją grę czas z jakiegoś serwera? Jakiegokolwiek nawet. Mógłbym zobaczyć jakiś prosty kod? Prawdę mówiąc zawsze odstraszało mnie programowanie gierek online, bo nigdy mi się to nie udawało Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
V Fighter Opublikowano 21 Stycznia 2018 Autor Udostępnij Opublikowano 21 Stycznia 2018 Dowiedziałem się dziś, że można w jakiś sposób pobrać znacznik czasowy GPS (Android), który jest zegarem niezależnym od ustawienia zegara systemowego. No ale co z tego, jak nie wiem, jak te dane pobrać. Chyba DLLkę będzie trzeba do tego zrobić, czy coś w ten deseń. Ale to tak, jak z Księżycem. Wiem, że można na nim wylądować, ale za cholerę nie wiem, jak wystartować xd. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 22 Stycznia 2018 Administratorzy Udostępnij Opublikowano 22 Stycznia 2018 Jeśli to gra na androida, to ja bym po prostu raz na sekundę zapisywał w pliku INI obecny czas, a potem jak odpalasz grę odczytywał ten czas, odejmował od obecnego i wykonał skrypt dodający zasoby na podstawie czasu np.: GOLD = floor(sekundy/120); // 1 złoto co 2 sekundy WOOD = floor(sekundy/240); // 1 drewno co 4 sekundy Argument, że można zhackować jest słaby, bo nawet jakbyś przes sieć przesyłał czas, to można zhackować request np. przepuszczając go przez PC który udaje router (udostępnianie internetu). Uzjel 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Uzjel Opublikowano 22 Stycznia 2018 Udostępnij Opublikowano 22 Stycznia 2018 Wniosek jest taki, że jak ktoś będzie chciał zhackować, to i tak zhackuje. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 22 Stycznia 2018 Udostępnij Opublikowano 22 Stycznia 2018 Ale podstawowe zabezpieczenie powinno być. Uzjel 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 22 Stycznia 2018 Administratorzy Udostępnij Opublikowano 22 Stycznia 2018 ja bym zapisał poza czasem, jego hash + jakaś sól np. md5('tajne' + string(time)); a potem przy odczycie porównał, to dopiero dekompilacja źródła by pomogła obejść takie coś jak ktoś podmieni czas, to policzymy mu 0 sekund. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 22 Stycznia 2018 Udostępnij Opublikowano 22 Stycznia 2018 Wystarczy zapytanie do serwera o czas. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ignatus Opublikowano 22 Stycznia 2018 Udostępnij Opublikowano 22 Stycznia 2018 Threef:"Wystarczy zapytanie do serwera o czas." ^ Autor:"Dodam tak od razu, że gra jest offline." Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
V Fighter Opublikowano 22 Stycznia 2018 Autor Udostępnij Opublikowano 22 Stycznia 2018 Jeśli pozyskanie czasu z serwera jest proste, to ja poproszę o jakiś kod, jak to pobrać. Bo z tym offline to chyba jest jakaś tajemnica ogromna, strzeżona jak granice "płaskiej Ziemi" według płaskoziemców xd. Serio, jak pobrać datę z serwera? Zawsze to komuś pomoże, kto tu zerknie. Takie alternatywne rozwiązanie problemu . gnysek, co to da? Przecież jeśli zdekodujesz zapisany czas na przykład przy ponownym odpaleniu gry, to jeśli będziesz chciał porównać czas, to tylko z systemowym. A systemowy jest modyfikowalny. Równie dobrze można ostatni czas zapisać po prostu w INI. Chyba, że nie zrozumiałem Twojej idei, bo w pracy przysypiam czytając to xd Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 23 Stycznia 2018 Administratorzy Udostępnij Opublikowano 23 Stycznia 2018 14 godzin temu, Threef napisał: Wystarczy zapytanie do serwera o czas. Puszczasz request przez PC, ustawiasz przekierowanie domeny na 127.0.0.1 w pliku hosts, robisz skrypt php który zwraca inny czas - oszukane. Tak samo jak przy zmianie zegara w telefonie. A czas z serwera pobierasz tak, że robisz skrypt PHP który go zwraca - nie pamiętam czy GMS potrafi czytać czas unixowy, wtedy wystarczy "echo time();". Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 23 Stycznia 2018 Udostępnij Opublikowano 23 Stycznia 2018 5 godzin temu, gnysek napisał: Puszczasz request przez PC, ustawiasz przekierowanie domeny na 127.0.0.1 w pliku hosts, robisz skrypt php który zwraca inny czas - oszukane. Chyba że pobierasz więcej danych niż sam unix time, albo jeszcze szyfrujesz jakimś banalnym sposobem. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
V Fighter Opublikowano 23 Stycznia 2018 Autor Udostępnij Opublikowano 23 Stycznia 2018 A powie mi ktoś, jak to zrobić jak zielonemu? Bo z GM:S'em działam już sporo, ale nigdy nie udało mi się zrobić czegokolwiek online Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 23 Stycznia 2018 Udostępnij Opublikowano 23 Stycznia 2018 Możesz to zrobić na wiele sposóbów. Po swojemu to potrzebujesz server z PHP na którym wrzucisz plik czas.php a w nim to co podał gnysek. Później twoja gra odpytuje ten plik na twoim serwerze przy pomocy funkcji http_get(). Drugie rozwiązanie to odpytywanie jakiegoś publicznego API takie jak to http://api.geonames.org/timezoneJSON?formatted=true&lat=47.01&lng=10.2&username=demo&style=full Zwraca ci ono informacje jako JSON. Możesz je odczytać przy pomocy funkcji json_encode() która zamienia te dane w ds_map który potem możesz odczytać. Wszystkie przykłady są w dokumentacji przy każdej z tych funkcji. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 23 Stycznia 2018 Udostępnij Opublikowano 23 Stycznia 2018 json_decode() i opcja z tamtym API jest lepsza, poniewaz nie zamieniasz gotowej opony na drewniane kolo Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 24 Stycznia 2018 Administratorzy Udostępnij Opublikowano 24 Stycznia 2018 ja bym zrobił tak, że w kodzie PHP dajesz: <?php $key = 'azs123123'; echo json_encode(array('time'=>time(), 'hash' => md5(time() . $key)); a po stronie GMa, jak odbierasz dane: //result to ds_mapa już po json_decode var time = result[? "time"]; var hash = result[? "hash"]; var key = "azs123123"; var check = md5( time + key); if (check == hash) { // czas z serwera jest niesfałszowany } Tak długo, jak ktoś nie znajdzie klucza w skompilowanej grze, tak długo system jest bezpieczny (bo hash z serwera będzie trudny do odczytania nawet z tablic tęczowych). Threef 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
V Fighter Opublikowano 29 Stycznia 2018 Autor Udostępnij Opublikowano 29 Stycznia 2018 Okej. Dopiero teraz mogę na poważnie zasiąść przed kompem, bo wolne. Wszystko obczaję i dam znać, jak bardzo głupi jestem w tym temacie za kilka dni xd, bo jeszcze kilka innych projektów robię 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ę