Skocz do zawartości

Temat zbiorczy na drobnostki


Chell

Rekomendowane odpowiedzi

1 godzinę temu, SimianVirus7 napisał:

:o a ja myślałem, że dodanie () po nazwie skryptu definiuje go jako void. Dlatego jeśli chciałem aby mi zwrócił int'a to napisałem go bez nawiasów.

Dzięki za odpowiedź, tego potrzebowałem kilka razy ale zawsze jakoś sobie radziłem na około

 

 

Bo bez nawiasów zwraca Ci inta, ale jest to identyfikator skryptu. Czasami użyteczne jak masz skrypt i jego ID przypisujesz do zmiennej. Wtedy możesz wywoływać ten skrypt funkcją script_execute. Np.

var skrypt = scr_arrow_can_hit; // nie ma tutaj nawiasów
script_execute(skrypt, parametr1, parametr2);

 

Odnośnik do komentarza
Udostępnij na innych stronach

image.png.4476630cac8a14c3b10c87bdac5735e9.png

 

Robię turową strategię na kilku graczy, w każdej bazie można rekrutować jednostki (na obrazku zrekrutowana jednostka).

Chcę, żeby pod tą symboliczną reprezentacją jednostki wyświetlana była liczba żołnierzy trzymana w lokalnej zmiennej number:

draw_text(Jednostka.x+20,Jednostka.y+20,Jednostka.number);

Moje pytanie: jak zrobić, żeby obiekt rysujący te liczby loopował wszystkie instancje Jednostki i rysował liczbę pod każdą z nich?

Odnośnik do komentarza
Udostępnij na innych stronach

  • 3 tygodnie później...

Hej, sprawa dotyczy GMS1.4999. Jak sprawić , aby przy otwarciu kodu, okno było scrollowane do tego momentu, w którym ostatnio było zamknięte?  Mam dość długi kod, zmieniam coś w środku,  a następnie  zamykam aby zatwierdzić zmiany i odpalam projekt. Potem otwieram kod ponownie, żeby coś zmienić i okno jest 'scrollnięte' znowu na samą górę, i muszę przekopywać się przez setki linijek kodu, żeby znaleźć interesujący mnie fragment, nad którym ostatnio siedziałem. Doprawdza mnie do szewskiej pasji, napewno jest jakiś prosty sposób aby temu zapobiec, proszę o porady.

 

Z góry dziękuję

nowy_user!

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Nie musisz zamykać okna - jak odpalasz projekt to i tak się on zapisuje. Ba, nawet jak masz otwarte okno i klikniesz zapisz (skrót czy ikona), to też sie zapisze to co masz otwarte. Generalnie, to chyba nawet nie da się poza ctrl+z anulować zmian ;) to się w gms 1.2 albo 1.3 pojawiło.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 4 tygodnie później...

Hej, mam pytanko, czy wie ktoś jaki jest GMLowy odpowiednik kliknięcia w przycisk 'Maksymalizuj' w oknie? Chodzi mi o ten przycisk:

 

image.png.c43dca4fe97fb451f29e67fe1af44188.png

 

Ten przycisk sprawia, że okno się rozszerza , przy uwzględnieniu paska zadań.  Okno jest więc prawie na całym ekranie, ale jest dopasowane do naszego paska zadań, niezależnie od tego, czy pasek jest na dole, czy z boku. Niestety, GMLowska funkcja window_set_fullscreen sprawia, że okno maksymalizuje się totalnie, wchodzi w stan full screen, i pasek zadań nie jest widoczny. 

 

Próbowałem funkcji window_set_size   i display_get_width/height , ale niestety efekt nie jest taki sam jak przy kliknięciu przycisku 'Maksymalizuj'

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 3 tygodnie później...
  • 2 tygodnie później...

Hej, mam pytanie, chciałbym zapisać sobie pewne statsy do pliku txt, z możliwością wyboru folderu, gdzie plik zostanie zapisany. Używam następującego kodu:

 

var _file;
_file = get_save_filename("project|*.txt", "");
if _file != ""
   {
    file_text_open_write(_file)
    file_text_write_string(_file, _savedane);
    file_text_close(_file);
   }
}

Program jednak crashuje z informacją: 

Cytuj

File not opened for writing.
 at gml_Script_scr_save (line 171) -     file_text_write_string(_file, _savedane);

  Nie rozumiem, zrobiłem wszystko tak jak jest przedstawione w manualu... czy o czymś zapomniałem?

Pozdrawiam,

nowy

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

@nowy_user Chyba nie wszystko jak w manualu, bo ja tam widzę jak do zapisywania w pliku używają zmiennej którą zwraca file_text_open_write, a Ty używasz tej od get_save_filename...

 

var _path, _file;

_path = get_save_filename("project|*.txt", "");
if (_path != "") {
    _file = file_text_open_write(_path);
    file_text_write_string(_file, _savedane);
    file_text_close(_file);
   }
}

Jedna funkcja zwraca ścieżkę, druga id pliku.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 3 tygodnie później...

Hej, mam pytanie, czy ktoś wie jak wyliczyć dokładną różnicę dni pomiędzy dwoma dniami ( tak żeby nie wskazywało jakichś głupot, gdy porównamy daty z dwóch różnych miesięcy lub dwóch różnych lat) w GM studio?

 

Tworzę system, który ma za zadanie automatycznie zablokować dostęp do mojego programu po 14 dniach ( system trial )  i nie wiem do końca jak to zaimplementować . GM studio ma funkcję date_compare_daytime , ale to zwraca nam tylko informację, czy dana data jest wcześniejsza, czy późniejsza, bez dokładnego określenia różnicy dni pomiędzy nimi.

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

gm:s posiada jeszcze current_day i current_month. Myślę, że sczytanie daty do zmiennych przy pierwszym uruchomieniu i później sprawdzanie czy minęło 14 dni, jest jakimś rozwiązaniem :P Tylko, że jeśli chcesz ominąć spryt użytkowników, musiałbyś sczytywać datę z internetu, bo tak lokalnie mogą sobie zmienić

Odnośnik do komentarza
Udostępnij na innych stronach

To akurat nie jest problem, mam w bazie datę rejestracji , i datę ostatniego logowania, więc mam te dwie daty. Problem w tym, że chcę porównać czy różnica w dniach pomiędzy dwoma datami to 14 dni.  Ja wymyśliłem taki skrypt:

 

var day1, month1, year1, day2, month2, year2;

day1=25; month1=11;  year1=2019; day2=3; month2=12; year2=2019;

var difference;

difference =  ( day2+ceil((month2*30.5))+(year2*365) )  -  (day1+ceil((month1*30.5)) + (year1*365)  )

Teoretycznie działa, nie jest to super dokładny sposób i czasami, gdy daty są z różnych miesięcy albo lat to skrypt myli się o jeden dzień, ale na razie chyba mi to wystarczy. Gdyby ktoś miał lepszy pomysł to może napisać, w innym wypadku będę korzystał z tego, co sam wykombinowałem.

 

EDIT

 

O rany, pogrzebałem w dokumentacji i znalazłem funkcję: date_day_span(date1, date2);

Problem uznaję zatem za rozwiązany :)

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

Hej, czy serwer może narzucić mi limit długości stringa Json, który mogę wczytać z bazy MySQL? Mam problem, że gdy string Json jest dość długi, ale nie jakoś bardzo, (zawiera 13 500 znaków) to mogę go bez problemu zapisać do bazy MySQL, ale wczytać już nie bardzo. Przy krótszych string’ach działa bez zarzutu. Zastanawiam się, czy problem leży w moim kodzie w GM, czy jednak to serwer i jego ustawienia za to odpowiadają. Czy ktoś ma jakieś wskazówki?

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Rozumiem, że ten JSON jest czytany z mysql przez PHP ? Czy zatem jak wejdziesz z przeglądarki jest ok? Jeśli tak, no to GM ma limit. Jeśli nie, to winy bym szukał w PHP i pewnie będzie trzeba podzielić go jakoś.

Odnośnik do komentarza
Udostępnij na innych stronach

20 minut temu, gnysek napisał:

Rozumiem, że ten JSON jest czytany z mysql przez PHP ? Czy zatem jak wejdziesz z przeglądarki jest ok? Jeśli tak, no to GM ma limit. Jeśli nie, to winy bym szukał w PHP i pewnie będzie trzeba podzielić go jakoś.

Dokładnie tak, JSON jest czytany z mysql przez PHP i mogę sobię go przejrzeć z poziomu przeglądarki w MyPhpAdmin. Co ciekawe, jeśli ustawię sobie w alarmie, aby ponowić próbę pobrania JSONA ( w przypadku gdy się nie uda za pierwszym razem) , i alarm ustawię np. na 60 stepów, no to co sekundę będzie próbować pobrać Jsona , ale nawet i po 20 powtórzeniach mu się nie uda, jeśli JSON jest długi. Natomiast... co jest mega dziwne.... jesli ustawię alarm na 1 step to dzieje się coś totalnie nieprzewidywalnego, ponieważ pierwsza próba pobrania JSONA jest nieudana ( to jest jeszcze zgodne z przewidywaniami ), ale.... następna jest już ok i pobiera JSONa nawet jeśli jest bardzo długi !  Czasami potrzebuje kilku prób, ale max 5-10 nawet przy bardzo długiej zmiennej... Dziwne jest to, że jak alarm ustawiam na np 60 stepów, to nawet i po kilkudziesięciu próbach nie wczytuje tego JSONa... a przy alarmie ustawionym na 1 step, max kilka prób... nie potrafię tego wytłumaczyć logicznie, ale muszę to zrozumieć, bo to rozwiązanie, które udało mi się wykombinować na chybił trafił zdaje się zbyt niestabilne, i nie chcę żadnych fakapów w przyszłości - zwłaszcza, że będę moją apkę sprzedawać.

 

Czy ktoś ma jakikolwiek pomysł, dlaczego takie dziwne rzeczy się dzieją? 

Odnośnik do komentarza
Udostępnij na innych stronach

Ten skrypt wygląda następująco:

 

<?php
header("Access-Control-Allow-Origin: *");

// Get config variables
require_once 'include/Config.php';
// Get Database functions
require_once 'include/DB_Functions.php';
$db = new DB_Functions();
 
// json response array
$response = array("error" => FALSE);

if (isset($_POST['unique_id']) && isset($_POST['save_code']) && isset($_POST['slot'])) 
{
    // receiving the post params
    $unique_id = $_POST['unique_id'];
    $save_code = $_POST['save_code'];
	$slot = $_POST['slot'];
	
	// Get user
	$info=$db->getUserByUserIdAndSaveCode($unique_id,$save_code);
	$user=$info[0];
	switch ($slot)
	{
		case 1:
			// Check if all went ok
			if ($info[1]==""){
				// All ok
				$error_info="";
				$response["load_data"] = $user["save001"];
			}else{
				// Error
				$error_info=$info[1];
			}			
			break;
		case 2:
			// Check if all went ok
			if ($info[1]==""){
				// All ok
				$error_info="";
				$response["load_data"] = $user["save002"];
			}else{
				// Error
				$error_info=$info[1];
			}	
			break;
		case 3:
			// Check if all went ok
			if ($info[1]==""){
				// All ok
				$error_info="";
				$response["load_data"] = $user["save003"];
			}else{
				// Error
				$error_info=$info[1];
			}	
			break;

		case 4:
			// Check if all went ok
			if ($info[1]==""){
				// All ok
				$error_info="";
				$response["load_data"] = $user["save004"];
			}else{
				// Error
				$error_info=$info[1];
			}	
			break;

		case 5:
			// Check if all went ok
			if ($info[1]==""){
				// All ok
				$error_info="";
				$response["load_data"] = $user["save005"];
			}else{
				// Error
				$error_info=$info[1];
			}	
			break;


		default:
			$error_info = $slot . " saves slot don't exists!";
	}
	if ($error_info=="")
	{
		$response["error"] = FALSE;
	}
	else
	{
		$response["error"] = TRUE;
		$response["error_msg"] = $error_info;
	}
	
    echo json_encode($response);
} 
else 
{
	if (isset($_POST['share_code']) && isset($_POST['slot'])) 
	{
		// receiving the post params
		$share_code = $_POST['share_code'];
		$slot = $_POST['slot'];
		
		// Get user
		$info=$db->getUserByShareCode($share_code);
		$user=$info[0];
		switch ($slot)
		{
			case 1:
				// Check if all went ok
				if ($info[1]==""){
					// All ok
					$error_info="";
					$response["load_data"] = $user["share001"];
				}else{
					// Error
					$error_info=$info[1];
				}			
				break;
			case 2:
				// Check if all went ok
				if ($info[1]==""){
					// All ok
					$error_info="";
					$response["load_data"] = $user["share002"];
				}else{
					// Error
					$error_info=$info[1];
				}	
				break;
			default:
				$error_info = $slot . " save slot don't exists!";
		}
		if ($error_info=="")
		{
			$response["error"] = FALSE;
		}
		else
		{
			$response["error"] = TRUE;
			$response["error_msg"] = $error_info;
		}
		
		echo json_encode($response);
	} 
	else
	{	
		if (isset($_POST['unique_id']) && isset($_POST['save_code']) && isset($_POST['row'])) 
		{
			// receiving the post params
			$unique_id = $_POST['unique_id'];
			$save_code = $_POST['save_code'];
			$row = $_POST['row'];
			
			// Check if allow public
			if (GLOBAL_PUBLIC_1==FALSE)
			{
				// Get user
				$info=$db->getUserByUserIdAndSaveCode($unique_id,$save_code);
				$user=$info[0];
				// Check if all went ok
				if ($info[1]=="")
				{	
					$all_ok=TRUE;
				}	
				else
				{
					$all_ok=FALSE;
				}
			}
			else
			{
				// Don't need user
				$all_ok=TRUE;
			}

			// Check if all went ok
			if ($all_ok){
				// All ok
				$error_info=$db->loadVar($row);
				$new_value=$error_info["value"];
				$error_info=$error_info["error"];				
				$response["value"] = $new_value;
			}else{
				// Error
				$error_info=$info[1];
			}			

			if ($error_info=="")
			{
				$response["error"] = FALSE;
			}
			else
			{
				$response["error"] = TRUE;
				$response["error_msg"] = $error_info;
			}
			
			echo json_encode($response);
		}
		else
		{	
			if (isset($_POST['row'])) 
			{
				// receiving the post params
				$row = $_POST['row'];

				$error_info=$db->loadPublic($row);
				$new_value=$error_info["value"];
				$error_info=$error_info["error"];				
				$response["value"] = $new_value;		

				if ($error_info=="")
				{
					$response["error"] = FALSE;
				}
				else
				{
					$response["error"] = TRUE;
					$response["error_msg"] = $error_info;
				}
				
				echo json_encode($response);
			} 
			else
			{
				// required post params is missing
				$response["error"] = TRUE;
				$response["error_msg"] = "Required parameters are missing!";
				echo json_encode($response);
			}
		}		
	}
}
?>

 

Odnośnik do komentarza
Udostępnij na innych stronach

A zrób requesta Postmanem i upewnij się, czy Ci ten skrypt zwraca całość tekstu i go nie ucina, to wtedy będzie ewidentnie gdzieś problem po stronie GMa.

 

Raczej ten kod 

echo json_encode($response);

Nie powinien powodować ucinania znaków, ale możesz na wszelki wypadek sprawdzić to funkcją json_last_error_msg.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Wciaż nie wiem, czy w przeglądarce widzisz to co chciałbyś otrzymać, czyli pełen JSON :) Od tego trzeba zacząć, jak nawet przeglądarka pokaże obcięty tekst, to winą będzie skrypt. Jak nie obcina, no to winny jest GM. Może jest jakiś timeout ?

Odnośnik do komentarza
Udostępnij na innych stronach

1 minutę temu, Konrad-GM napisał:

A zrób requesta Postmanem i upewnij się, czy Ci ten skrypt zwraca całość tekstu i go nie ucina, to wtedy będzie ewidentnie gdzieś problem po stronie GMa.

 

Raczej ten kod 


echo json_encode($response);

Nie powinien powodować ucinania znaków, ale możesz na wszelki wypadek sprawdzić to funkcją json_last_error_msg.

Ale mi nie ucina znaków, po prostu gdy JSON jest za długi to nie wczytuje go wcale a w debug message mam:http:// *adres strony www */load.php?: Load Failed! RESULT: undefined

 

JSON zapisuje się poprawnie, problem jest z wczytaniem.

Odnośnik do komentarza
Udostępnij na innych stronach

To może znajdź, na którym etapie występuje u Ciebie ten problem, potem staraj się go naprawić. 

BTW. Zapisujesz tekst w bazie, musisz się upewnić, że format JSONa też jest poprawny.

 

Edit. Albo timeout dostajesz od serwera, albo za mało pamięci masz przypisane do Nginxa/Apache i też przerywa połączenie. Sprawdź to Postmanem albo w przeglądarce (musisz formularz POST stworzyć, albo przerób skrypt na GETy), czy to samo dostajesz.

Odnośnik do komentarza
Udostępnij na innych stronach

Ok postaram się to ogarnąć, najdziwniejsze jest to, że jak próbuję forsować wczytanie danych ( gdy się nie uda to ustawiam alarm[0] na 1 step który ponawia próbę i tak w kółko ) to zaledwnie po kilku próbach wczytuje tego Jsona, nawet jeśli jest on kilkukrotnie dłuższy.  Jeśli alarm[0] ustawię na 30 lub 60 stepów, to wtedy nawet po 20 próbach ma problem z wczytaniem tego Jsona , to jest bardzi dziwne ...

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Dlatego musisz wiedzieć czy serwer w przelądarce też zwraca tego jsona, czy może to strona .php się wywala randomowo z braku pamięci. Skoro nie masz pojęcia, czy adres który odpytujesz prawidłowo zwraca dane to jak chcesz szukać błędu? Może GM wcale nie ma błędu?

 

Napisz osobny skrypt pod innym adresem który tylko daje to echo i na nim sprawdź na razie.

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