Matthew Opublikowano 10 Stycznia 2009 Udostępnij Opublikowano 10 Stycznia 2009 W moim projekcie jeden skrypt będzie dosyć długi, więc chciałbym go jakoś wczytywać z zewnątrz i żeby był edytowalny. Any ideas? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 10 Stycznia 2009 Administratorzy Udostępnij Opublikowano 10 Stycznia 2009 execute_file(fname,arg0,arg1,...) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 10 Stycznia 2009 Udostępnij Opublikowano 10 Stycznia 2009 btw. bedziesz musial sie zabezpieczyc wtedy tez przed mozliwoscia wyciagniecia reszty skryptow, bo wtedy wystarczy dac jedna linijke do pobierania zawartosci skryptu, przeleciec je wszystkie i zapisywac do pliku, a chyba tego nie chcesz. Zrezygnuj z execute_file i najpierw pobierasz zawartosc funkcji z pliku do stringa, za pomoca string_replace_all() zamieniasz wszystkie substringi "script_get_text" na jakas nazwe pustej funkcji "void" (po prostu stworz taki script o nazwie "void" i niech bedzie pusty, to gm nie wypluje zadnego bledu). wynik zapisujesz do innego stringa, a tam zapomoca string_replace_all() wszystkie "argument0" itp. zamieniasz na odpowiednie im wartosci argumentow podawanych do funkcji. ten wynik w ostatecznosci zapisujesz do jeszcze innego stringa i aby wywolac te funkcje wystarczy execute_string() i voila! - masz gotowa funkcje zewnetrzna odporna na gml-injection (hehe, tak to mozna nazwac? xD). jak chcesz moge zrobic Ci przyklad tego :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Matthew Opublikowano 10 Stycznia 2009 Autor Udostępnij Opublikowano 10 Stycznia 2009 jak chcesz moge zrobic Ci przyklad tego Eee... poproszę :) @gnysek: Pamięciożerne. Chcę skrypt załadować do gry i żeby później nie trzeba było go drugi raz wczytywać. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 10 Stycznia 2009 Administratorzy Udostępnij Opublikowano 10 Stycznia 2009 to wczytaj tekst z pliku i execute_string(); jak ci execute_file nie pasi Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 10 Stycznia 2009 Udostępnij Opublikowano 10 Stycznia 2009 @Matt: wlasnie Ci przyklad robie, za chwileczke bedzie gotowy :) EDIT: Prosze, oto specjalnie dla Ciebie napisany silniczek do wykonywania funkcji z pliku, chroniacy przed "gml-injection" ze sie tak wyraze :P SafeScript Loader Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Matthew Opublikowano 10 Stycznia 2009 Autor Udostępnij Opublikowano 10 Stycznia 2009 thx, oblukam go później, bo na tym kompie nie mam gma :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Snake Opublikowano 10 Stycznia 2009 Udostępnij Opublikowano 10 Stycznia 2009 btw. bedziesz musial sie zabezpieczyc wtedy tez przed mozliwoscia wyciagniecia reszty skryptow, bo wtedy wystarczy dac jedna linijke do pobierania zawartosci skryptu, przeleciec je wszystkie i zapisywac do pliku, a chyba tego nie chcesz. Zrezygnuj z execute_file i najpierw pobierasz zawartosc funkcji z pliku do stringa, za pomoca string_replace_all() zamieniasz wszystkie substringi "script_get_text" na jakas nazwe pustej funkcji "void" (po prostu stworz taki script o nazwie "void" i niech bedzie pusty, to gm nie wypluje zadnego bledu). wynik zapisujesz do innego stringa, a tam zapomoca string_replace_all() wszystkie "argument0" itp. zamieniasz na odpowiednie im wartosci argumentow podawanych do funkcji. ten wynik w ostatecznosci zapisujesz do jeszcze innego stringa i aby wywolac te funkcje wystarczy execute_string() i voila! - masz gotowa funkcje zewnetrzna odporna na gml-injection (hehe, tak to mozna nazwac? xD). jak chcesz moge zrobic Ci przyklad tego :) Prosze, oto specjalnie dla Ciebie napisany silniczek do wykonywania funkcji z pliku, chroniacy przed "gml-injection" ze sie tak wyraze :P SafeScript Loader Eee, wcale nie chroni przed "GML injection" - wystarczy wkleić do pliku gml np. taki kod: GML var script, executeMe; executeMe = "script_get_" + "text( safescript_void );"; script = execute_string( executeMe ); show_message( script ); Musiałbyś dodać więcej checków do tego :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 10 Stycznia 2009 Udostępnij Opublikowano 10 Stycznia 2009 eh, zes wyskoczyl :P na malo-bystrych gm-hackerow to wystarczylo, a Ty zepsules zabawe ;P racja, potrzeba wiecej warunkow, ale zeby to dzialalo zawsze trzeba najlepiej zrobic taki jakby parser a to by zdecydowanie wydluzylo czas ladowania skryptu :/ EDIT: Heh, jednak nie potrzeba pisać czaso-żernego parsera :) Poprawiona wersja, teraz chroni przed resztą kombinacji :) Link: SafeScript Loader Teraz sprobuj to obejsc Snake :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Snake Opublikowano 10 Stycznia 2009 Udostępnij Opublikowano 10 Stycznia 2009 Nie chroni. Dodaj do pliku gml: GML var executeMe; executeMe = "show_message( script_" + "get_text( safescript_void ) );"; object_event_add( 0, ev_user0, 0, executeMe ); event_perform_object( 0, ev_user0, 0 ); ;p Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 10 Stycznia 2009 Udostępnij Opublikowano 10 Stycznia 2009 eh, czekaj, i na to sie znajdzie sposob ;P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Matthew Opublikowano 10 Stycznia 2009 Autor Udostępnij Opublikowano 10 Stycznia 2009 Whoops... Zapomniałem, że nie mam wersji pro. A w przykładzie używane są mapy, więc nie zadziała mi :) E: Część kodu jest taka sama jak w moim skrypcie (while !(..._eof)). Zapisałem to co wczytałem do zmiennej i wykonywałem za pomocą execute_string(), ale jest niewydajne i mam czarny ekranik. E2: Spróbowałem za pomocą object_event_add i event_perform_object. Czarny ekranik ;/ 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ę