SimianVirus7 Opublikowano 1 Czerwca 2020 Udostępnij Opublikowano 1 Czerwca 2020 Jak rozmyślać nad problemem szyfrowania plików zapisu? i czy w ogóle rozmyślać. Gnysek na gmclanie opisał metode z przekształcaniem tekstu z pomocą ASCII i XOR ale to było w 2005r. W dokumentacji natknąłem się na coś takiego jak "ds_map_secure_save", ktoś miał z tym jakiś bliższy kontakt i mógłby wyjaśnić jaśniej co i jak? edit: zacząłem coś w tym grzebać i po zapisaniu jednego klucza: score; value: 1 wynikiem w saves.dat jest ciąg literek i cyferek. Chyba pasuje. Myślałem też nad zapisami w chmurze ale to chyba będzie przerost formy nad treścią. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 1 Czerwca 2020 Administratorzy Udostępnij Opublikowano 1 Czerwca 2020 Generalnie każde szyfrowanie jest spoko, dopóki ktoś w kodzie gry nie wykryje jakie ono jest (wtedy nawet SHA 512 nie pomoże, jak klucz prywatny znajdą). Wiele razy pisaliśmy w różnych tematach, że ja ktoś się uprze, to znajdzie sposób na obejście gry. Pytanie, czy warto jest poświęcać na to czas? Przecież taki gracz psuje grę głównie sobie, także w singlu nie ma to aż takiego znaczenia, a w grach online najważniejsze dane powinien przetwarzać serwer, żeby gracz nie mógł ich nadpisać łatwo. Threef 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
H2S04 Opublikowano 7 Czerwca 2020 Udostępnij Opublikowano 7 Czerwca 2020 Wróciłem i jak zwykle mam pytanie. Otóż wiem jak się liczy procenty ale nie wiem jak mam to wykorzystać. Jak napisać kod, który daje mi np 100-90% szans, że trafię w głowę, 90-75 % szans, że trafię w tors, 75-45% szans, że trafię w rękę, 45-20% szans, że trafię w nogę i 20-0%, że nie trafię w ogóle. Napisałem coś takiego bez procentów, ale nie działa poprawnie, bo losowanie liczby to dalej losowanie :/ step postaci: if imwalk == true{ // jeżeli idę maxhead = 100; minhead = 90; maxtorso = 90; mintorso = 30; maxarm = 30; minarm = 25; maxleg = 25; minleg = 10; maxmiss = 10; minmiss = 0; } create pocisku: var tt = irandom(1.1); procent = lerp(0,100,tt); step pocisku: if procent > minhead && procent < maxhead{ bodyshot = 0; } else { if procent > mintorso && procent < maxtorso{ bodyshot = 1; } else { if procent > minarm && procent < maxarm{ bodyshot = round(irandom_range(2,3)); } else { if procent > minleg && procent < maxleg{ bodyshot = round(irandom_range(4,5)); } else { if procent > minmiss && procent < maxmiss{ bodyshot = 6; } } } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 8 Czerwca 2020 Udostępnij Opublikowano 8 Czerwca 2020 Ten element jest dla mnie zupełnie nie zrozumiały. Nie możesz zwyczajnie zrobić procent = irandom(100) 11 godzin temu, H2S04 napisał: var tt = irandom(1.1); procent = lerp(0,100,tt); Ogólnie nie wiem w czym masz problem. Nie zadałeś konkretnego pytania. Jedyny potencjalny problem jaki widzę to że gdy twój random trafi dla przykładu idealne 25.0 to nie spełni się żaden warunek bo masz sprawdzanie "<" i ">" a nie "<=" i ">=" A same procenty będzie ci lepiej określać nie przez takie ify a dzieki nadpisywaniu wartości wynikowej: randomize() // upewniamy się że seed będzie losowy i da losowe wyniki procent = irandom(100) //Zawsze domyślnie nie trafisz bodyshot = 6 //Ale jesli procent bedzie dobry to trafisz przynajmniej to if procent > minleg { //wieksze od 10 bodyshot = round(irandom_range(4,5)) } //A jak bedzie lepszy to już to trafisz. if procent > minarm { //wieksze od 25 bodyshot = round(irandom_range(2,3)) //Ten warunek jak się spełni to nadpisze poprzednią zmianę "bodyshot" więc nie musisz się martwić o sprawdzanie Min-max } if procent > mintorso { //wieksze od 30 bodyshot = 1 } if procent > minhead { //wieksze od 90 bodyshot = 0 } Ważne tylko by te sprawdzanie było wg kolejności szans jak dałem w przykładzie. 10, 25, 30, 90 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
H2S04 Opublikowano 8 Czerwca 2020 Udostępnij Opublikowano 8 Czerwca 2020 Dzięki Threef, znowu zrobiłem sobie pod górkę, kombinowaniem, wyjdę z roboty, będę testował ? Pozdrawiam. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
H2S04 Opublikowano 29 Czerwca 2020 Udostępnij Opublikowano 29 Czerwca 2020 Mam taki fajny error. Czemu nie chce mi zmienić wielkości surface? Jak wpiszę liczby 1920 i 1080, odczytuje normalnie i działa, a jak chce odczytać z ini, to nie chce, nawet jak próbuję odczytać ini inną zmienną. OCB? Znalazłem, że multiplikacja ale dalej nie wiem ocb. ___________________________________________ ############################################################################################ FATAL ERROR in action number 1 of Create Event for object o_controller: DoMul :: Execution Error at gml_Script_scr_camera (line 20) - surface_resize(application_surface,view_width*window_scale,view_height*window_scale); ############################################################################################ -------------------------------------------------------------------------------------------- stack frame is gml_Script_scr_camera (line 20) called from - gml_Object_o_controller_Create_0 (line 6) - scr_camera(); Kod Kamery: ini_open("GameOptions.ini"); view_width = ini_read_string("Resolution", "Width", 1920); view_height= ini_read_string("Resolution", "Height", 1080); ini_close(); //// TAK NIE DZIAŁA //view_width = 1920; //// TAK DZIAŁA NORMALNIE //view_height = 1080; window_scale = 3; window_set_size(view_width,view_height); surface_resize(application_surface,view_width*window_scale,view_height*window_scale); if moenter = 3{ // Jak najedzimy na back button if mouse_check_button_pressed(mb_left){ // ini file save if resolution = 1{ // jeżeli wybrana jest 1 rozdzielczość roomwid = 1920; roomhei = 1080; } else { if resolution = 2{ // etc roomwid = 1280; roomhei = 720; } else { if resolution = 3{ // etc roomwid = 1366; roomhei = 768; } else { if resolution = 4{ // itp itd roomwid = 1280; roomhei = 960; } else { if resolution = 5{ roomwid = 1024; roomhei = 768; } else { if resolution = 6{ roomwid = 800; roomhei = 600; } } } } } } ini_open("GameOptions.ini"); //Keys ini_write_string("Keys", "KeyUp", upkey); // nadpisujemy sobie keye ini_write_string("Keys", "KeyDown", downkey); ini_write_string("Keys", "KeyLeft", leftkey); ini_write_string("Keys", "KeyRight", rightkey); ini_write_string("Keys", "KeyDrop", dropkey); ini_write_string("Keys", "KeyUse", usekey); ini_write_string("Keys", "KeyGrenade", grenkey); ini_write_string("Keys", "KeyExpMenu", expmenukey); ini_write_string("Keys", "KeySprint", sprintkey); ini_write_string("Keys", "KeyWalk", walkkey); //Resolution ini_write_string("Resolution", "Width", roomwid); // ustalam szerokośc room (w tym wypadku na resloution 1 czyli 1920x1080) ini_write_string("Resolution", "Height", roomhei); // to samo z wysokością ini_write_string("Resolution", "FullScreen", fullscreen); // i czy gra ma być odpalona w full screen ini_close(); options = false; // wyłączam rysowanie opcji } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 29 Czerwca 2020 Udostępnij Opublikowano 29 Czerwca 2020 Możliwe, że ma to związek z aktualizacją GMS 2.2, mnożenie łańcucha znaków przez liczbę nie działa. Jak zrobisz rzutowanie funkcją real(str) powinno zadziałać, albo odwróć kolejność mnożenia: surface_resize( application_surface, window_scale*view_width, window_scale*view_height ); gnysek i H2S04 1 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
H2S04 Opublikowano 29 Czerwca 2020 Udostępnij Opublikowano 29 Czerwca 2020 Jutro po robocie (po 20) obczaję, jak coś napisze, czy pykło, pozdrówki ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 30 Czerwca 2020 Udostępnij Opublikowano 30 Czerwca 2020 Ja wyraźnie widzę odczytywanie stringa z ini. H2S04 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 30 Czerwca 2020 Administratorzy Udostępnij Opublikowano 30 Czerwca 2020 O ile zgodzę się, że do zapisania liczby czasem ini_write_string jest lepszy (sam tak robię, bo dla liczb całkowitych wtedy nie zapisuje się .00000), to do wczytania musi być ini_read_real (GM sobie świetnie radzi z ich odczytaniem, mimo, że jak zapisuje liczby to dodaje cudzysłów - przy odczycie nie musi go być, to jest pewnie dla zapewnienia kompatybilności). H2S04 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
H2S04 Opublikowano 1 Lipca 2020 Udostępnij Opublikowano 1 Lipca 2020 Gdzieś wydybałem jak gnysek pisał o plikach ini, że lepiej sprawuje się string jak real, dodałem linijkę real() i jest gitara ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 2 Lipca 2020 Udostępnij Opublikowano 2 Lipca 2020 Też wszędzie jak potrzebuję ini to wszystko trzymam jako string. Jest to też łatwiejsze do edycji gdy każda wartość to string. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
H2S04 Opublikowano 5 Lipca 2020 Udostępnij Opublikowano 5 Lipca 2020 Czemu 15*room_speed daje mi 10s zamiast 15, a 30*room_speed 20s ? PS. Napisałem swój zegar ale ciekawi mnie to (gra ustawiona na 60fps) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 6 Lipca 2020 Udostępnij Opublikowano 6 Lipca 2020 Opcje są 3: - Albo źle liczysz - Albo roisz 15*room_speed przed zmianą room_speed - Albo masz lagi w grze i nie masz pełnych 60FPS Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 28 Sierpnia 2020 Udostępnij Opublikowano 28 Sierpnia 2020 Witam, Z racji, że jestem noga z matmy, proszę o pomoc. Mam pasek wytrzymałości na bazie sprite'ów. Zależnie ile punktów wytrzymałości bohater posiada, tyle sprite'a rysuje. Tylko rysuje mi go od góry, a ja na przekór losu chciałbym, aby rysował mi go od dołu. Kolega nie znający się na programowaniu powiedział, że mam napisać kod odwrotnie no coś w tym jest ale nie mogę dojść do ładu. Create: stamina = 0; //ilość wytrzymałości (max 100) Draw: var _h = sprite_get_height(sStamina_bar) + 10; // +10 - bo ramka tyle ma var _w = sprite_get_width(sStamina_bar); // (stamina/max_stamina)*wysokość_sprite'u draw_sprite_part(sStamina_bar, 0, 0, 0, _w, (stamina/100)*_h, 15, room_height/2 - _h/2) // wypełnienie draw_sprite(sStamina_bar, 1, 15, room_height/2 - _h/2); // ramka Wynik:Stamina = 20;Max_stamina = 100; Więc generalnie chciałbym aby rysował wypełnienie od dołu w górę. Jakieś wskazówki? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 29 Sierpnia 2020 Udostępnij Opublikowano 29 Sierpnia 2020 Chyba chodzi ci o to: draw_sprite_part(sStamina_bar, 0, 0, _h -(stamina/100)*_h, _w, _h, 15, room_height/2 - _h/2) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 30 Sierpnia 2020 Udostępnij Opublikowano 30 Sierpnia 2020 Dziwne, bo dodanie tego minusa nie zmieniło działania. Generalnie już nie trzeba, bo się przyzwyczaiłem, ale pamiętam, że często nad tym kminiłem :/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mastodont Opublikowano 2 Września 2020 Udostępnij Opublikowano 2 Września 2020 Pytanko: w jednym obiekcie mam surface wielkości całego roomu. Inne obiekty normalnie się w nim nie wyświetlają, a chciałbym, żeby rysowały się w tym surface. Dlatego obiektom, które chcę rysować w tamtym surface odznaczam "visible", a potem w step daję: surface_set_target(core.target_surface); draw_self(); surface_reset_target(); Czy to normalna metoda czy powinienem to robić inaczej? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 2 Września 2020 Administratorzy Udostępnij Opublikowano 2 Września 2020 1) Surface nie powinien przekraczać wielkości ekranu. 2) pamiętaj, że po surface_set_target rysujesz względem piksela 0,0 tego surface, wiec jak są w grze "views", to trzeba o tyle odjąć obecną pozycję rysowania, żeby było widać 3) a nie potrzebujesz czasem tutaj application_surface, zamiast z każdego obiektu rysowanie na surface włącząć ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mastodont Opublikowano 3 Września 2020 Udostępnij Opublikowano 3 Września 2020 Nie do końca mam pojęcie jak zastosować tutaj application_surface Kombinuję i niewiele wychodzi. Chciałbym na tym surface rysować większość obiektów w grze (poza chociażby interfejsem). Ale tak czy siak natknąłem się na inny problem - przy rysowaniu na surface wartość depth nie ma żadnego znaczenia. Wcześniej stworzony obiekt zawsze rysuje się wyżej, a chciałbym, żeby to było zależne od pozycji Y. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 3 Września 2020 Administratorzy Udostępnij Opublikowano 3 Września 2020 Przykład sortowania obiektów jest wśród oficjalnych tutoriali do GMS2. Jeśli chodzi o GMS1 - no to musisz kombinować, ale rysując na surface trzeba by je dodać do jakiejś listy i rysować wg. Y. application_surface powinno łapać wszystko co jest rysowane w grze (poza gui), więc wydaje się lepsze, bo wtedy nie musisz zmieniać nic w kodzie i depth będzie działał jak trzeba. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mastodont Opublikowano 1 Października 2020 Udostępnij Opublikowano 1 Października 2020 Depth przy rysowaniu application_surface działa jak należy i wydawało się wszystko być ok, problem pojawił się gdzieś indziej. Używam shadera, który po dłuższej chwili na urządzeniu z Androidem zaczyna "lagować". FPS-y nie spadają, natomiast efekt shadera zaczyna jakby klatkować. Czy to normalne na Androidzie? Nigdy wcześniej nie używałem shaderów. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 1 Października 2020 Administratorzy Udostępnij Opublikowano 1 Października 2020 Jeśli FPSy nie spadają, to shader powinien się wykonać co klatkę jeśli kod jest dobrze napisany, gdyż one nie są asynchroniczne - musiała by cała gra zwolnić razem z nim. Może nie czyścisz surface i zostają w nim rzeczy z poprzednich klatek i stąd dziwy efekt? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mastodont Opublikowano 2 Października 2020 Udostępnij Opublikowano 2 Października 2020 Czy korzystając z application_surface też muszę go czyścić? Bo w sumie tylko rysowałem w "draw gui begin" przed "shader_reset();" Ale nawet jakbym stworzył najprostszy surface: surface_set_target(target_surface); draw_sprite(backg,0,x,y) surface_reset_target(); To i tak po chwili zaczyna klatkować. Co ciekawe - sprawdzam i na P9 i na P30 i zaczyna klatkować mniej więcej w tym samym czasie. Więc to chyba nie sprzętowo. Chyba po prostu spróbuję z innym shaderem... Inne pytanie: dlaczego w GM2 potrzebne są takie tutoriale jak poniższy: https://www.youtube.com/watch?v=rcMHwdvEDy0&feature=emb_logo Czym to się różni od zwykłego "depth"? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 2 Października 2020 Administratorzy Udostępnij Opublikowano 2 Października 2020 W GMS2 nie powinno się używać depth, gdyż są layery i wtedy każdy obiekt trafia na wirtualne layery, oraz kłóci się z tym co jest na layerach (bo one już mają narzucony depth). Depth został dla kompatybilności, ale jego status to "deprecated" i w GMS3 zniknie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mastodont Opublikowano 3 Października 2020 Udostępnij Opublikowano 3 Października 2020 Szkoda, "depth=-y" było proste i wygodne, a tak trzeba kombinować. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 5 Października 2020 Administratorzy Udostępnij Opublikowano 5 Października 2020 Niestety, też mam ten problem. Ale przełączanie layerów trwa tak krótko, że w mojej grze teraz zrobiłem po prostu kodem jeden layer na każe 25 pikseli i jakoś to nawet działa - aczkolwiek to się sprawdzi tylko w grach jak stare RPG, gdzie postaci są wyrównywane do siatki. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mastodont Opublikowano 13 Października 2020 Udostępnij Opublikowano 13 Października 2020 Przez nowy super, hiper świetny GM2 straciłem projekt. Straciłem na chwilę prąd podczas pracy (ale pisałem kod i nie zapisywałem nic), a po ponownym włączeniu komputera już nie mogę go załadować. Wyskakuje "this project is an older format and will need to be converted" (xD), a potem "Project load failed". Unable to load" XD Jedyne co widzę, że da się jeszcze zrobić to utworzyć zasoby o tych samych nazwach, a potem przeciągać pliki GML z poprzednich zasobów. W jaki sposób naprawić poprzednią wersję? Gdzie GMS2 robi backupy? Czy przy ogólnej biedzie opcji i tego już nie ma? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 13 Października 2020 Administratorzy Udostępnij Opublikowano 13 Października 2020 Jak na moje, to zaktualizowałeś GMa przy okazji A backupy to się robi samemu, korzystając z gita (poza GMS). Spróbuj też na najnowszej becie, albo wywalając katalog options. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 14 Października 2020 Udostępnij Opublikowano 14 Października 2020 GMS robi backupy samemu, nie mam go teraz na komputerze żeby sprawdzić, ale chyba gdzieś %localappdata% 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ę