[Problema] Com file_finds e outros

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

[Problema] Com file_finds e outros

Mensagem por luiz_eldorado em Qui 18 Out 2012, 22:28

Estou tentando criar o ".game Executer", mas algo está dando errado. Antes de tudo, code:
Código:

/*** Simples sistema de carregamento de arquivos ".game" ***/

//Tela de "Loading"
draw_set_color(c_white); draw_set_halign(1); draw_set_valign(1);

screen_redraw(); draw_text(room_width/2,room_height/2,'Waiting user...'); screen_refresh();
//Executar arquivo se for aberto com o programa ("Abrir com...", etc).
//Caso aberto diretamente, perguntar pelo arquivo.
var fname;
fname=parameter_string(1);
if fname="" {
fname=get_open_filename("Game file (*.game)|*.game","");
if fname="" {game_end(); exit;}
}

//Para evitar problemas
if !file_exists(fname) {show_message("The file not exists."); game_end(); exit;}

//Recriar pasta
if !directory_exists(working_directory+"\temp")
{directory_create(working_directory+"\temp");}

screen_redraw(); draw_text(room_width/2,room_height/2,'Unziping...'); screen_refresh();

//Necessário para o VBSZIP (o arquivo tem que ser ".zip")
file_copy(fname,working_directory+'\temp.zip');

//Começo do "VBSZIP" (por Ninja8086)
//Foi modificado um pouco por razões de espaço, e etc.
//E não está em scripts, pois não se pode para este programa.

var Script, ZipFile, ZipDir, VBScript, TempFile;
ZipFile  = working_directory+'\temp.zip';
ZipDir  = working_directory+"\temp";

Script  = file_text_open_write(environment_get_variable('TEMP')+'\gmzip.vbs');
VBScript = '
    Set GMZIP = CreateObject("Shell.Application")
    GMZIP.NameSpace("' + ZipDir + '").CopyHere GMZIP.NameSpace("' + ZipFile + '").Items
';
file_text_write_string(Script, VBScript);
file_text_close(Script);

TempFile = environment_get_variable('TEMP')+'\gmzip.vbs';
execute_program('wscript', TempFile, true);
file_delete(TempFile);

//Fim do "VBSZIP"

//Não preciso mais disto
file_delete(working_directory+'\temp.zip');

//Configurações globais do jogo
screen_redraw(); draw_text(room_width/2,room_height/2,'Loading Global Game Settings');
screen_refresh();

var a;
a=file_text_open_read(working_directory+'\temp\global_game_settings');

var fullscreen,scale,color,sizeable,stayontop,showborder,showicons,cursor,colordepth,w,h,
    frequency,syn,priority;

                    fullscreen=real(string_digits(file_text_read_string(a)));
file_text_readln(a); scale=real(string_digits(file_text_read_string(a)));
file_text_readln(a); color=real(string_digits(file_text_read_string(a)));
file_text_readln(a); sizeable=real(string_digits(file_text_read_string(a)));
file_text_readln(a); stayontop=real(string_digits(file_text_read_string(a)));
file_text_readln(a); showborder=not real(string_digits(file_text_read_string(a)));
file_text_readln(a); showicons=not real(string_digits(file_text_read_string(a)));
file_text_readln(a); cursor=real(string_digits(file_text_read_string(a)))+1;
file_text_readln(a); colordepth=real(string_digits(file_text_read_string(a)));
file_text_readln(a); w=real(string_digits(file_text_read_string(a)));
file_text_readln(a); h=real(string_digits(file_text_read_string(a)));
file_text_readln(a); frequency=real(string_digits(file_text_read_string(a)));
file_text_readln(a); syn=real(string_digits(file_text_read_string(a)));
file_text_readln(a); priority=real(string_digits(file_text_read_string(a)));

file_text_close(a);

window_set_fullscreen(fullscreen); window_set_region_scale(scale,0); window_set_color(color);
window_set_sizeable(sizeable); window_set_stayontop(stayontop);
window_set_showborder(showborder); window_set_showicons(showicons); window_set_cursor(cursor);
display_set_all(w,h,frequency,colordepth); set_synchronization(syn);
set_program_priority(priority);

//Objetos
screen_redraw(); draw_text(room_width/2,room_height/2,'Loading Objects'); screen_refresh();

var p,f,res;
p=working_directory+'\temp\Objects';
for (f=file_find_first(p,fa_directory); f!=''; f=file_find_next()) {
if file_attributes(p+f,fa_directory) {

execute_string('globalvar '+f+';');
res=object_add();
variable_global_set(f,res);
a=file_text_open_read(p+f+'\settings');
object_set_sprite(res,real(file_text_read_string(a))); file_text_readln(a);
object_set_visible(res,real(file_text_read_string(a))); file_text_readln(a);
object_set_solid(res,real(file_text_read_string(a))); file_text_readln(a);
object_set_depth(res,real(file_text_read_string(a))); file_text_readln(a);
object_set_persistent(res,real(file_text_read_string(a))); file_text_readln(a);
object_set_parent(res,real(file_text_read_string(a))); file_text_readln(a);
object_set_mask(res,real(file_text_read_string(a))); file_text_close(a);

p2=p+f;
for (f2=file_find_first(p2,0); f2!=''; f2=file_find_next()) {
if f2!='settings' {
s='';
a=file_text_open_read(p2+f2);
while !file_text_eof(a) {
s+=file_text_read_string(a)+chr(13)+chr(10);
file_text_readln(a);
}
file_text_close(a);
object_event_add(res,string_copy(f2,1,string_pos(' ',f2)),
string_copy(f2,string_pos(' ',f2)+1,string_length(f2)-string_pos(' ',f2)+1),s);
}
}
}
}

//Rooms
screen_redraw(); draw_text(room_width/2,room_height/2,'Loading Rooms'); screen_refresh();

p=working_directory+'\temp\Rooms';
for (f=file_find_first(p,fa_directory); f!=''; f=file_find_next()) {

if file_attributes(p+f,fa_directory) {
show_message('room created!');

execute_string('globalvar '+f+';');
res=room_add();
variable_global_set(f,res);
a=file_text_open_read(p+f+'\settings');
room_set_caption(res,file_text_read_string(a)); file_text_readln(a);
room_set_width(res,real(file_text_read_string(a))); file_text_readln(a);
room_set_height(res,real(file_text_read_string(a))); file_text_readln(a);
room_set_code(res,"room_speed="+file_text_read_string(a)+";"); file_text_readln(a);
room_set_persistent(res,real(file_text_read_string(a)));
file_text_close(a);

a=file_text_open_read(p+f+'\background');
var col, show;
show=real(file_text_read_string(a)); file_text_readln(a);
col=real(file_text_read_string(a)); file_text_readln(a);
room_set_background_color(res,col,show); file_text_close(a);

var xx,yy,oo;
a=file_text_open_read(p+f+'\instances');
while !file_text_eof(a) {
s=file_text_read_string(a)+' '; file_text_readln(a);
xx=real(string_copy(s,1,string_pos(' ',s))); s=string_delete(s,1,string_pos(' ',s)+1);
yy=real(string_copy(s,1,string_pos(' ',s))); s=string_delete(s,1,string_pos(' ',s)+1);
oo=real(string_copy(s,1,string_pos(' ',s)));
room_instance_add(res,xx,yy,oo);
}

//Futuramente terá tiles e backgrounds! Ou não! XD

}
}

if directory_exists(working_directory+"\temp") {
screen_redraw();
draw_text(room_width/2,room_height/2,'Deleting folders...'); screen_refresh();

//Começo do "BatchScript" (por Ninja8086)
//Usado para deletar pastas silenciosamente... mwhuahuahuahua! ¬_¬
//Foi modificado um pouco por razões de espaço, e etc.
var runcmd, runvbs, script, tempdr;
tempdr = environment_get_variable('TEMP');
runcmd = tempdr + '\run.cmd';
runvbs = tempdr + '\run.vbs';

script = file_text_open_write(runcmd);
file_text_write_string(script,'rd /s /q "'+working_directory+'\temp"');
file_text_close(script);

script = file_text_open_write(runvbs);

file_text_write_string(script,'
set cmdprompt = createobject("wscript.shell")
cmdprompt.run "' + runcmd + '"'
);

file_text_write_string(script, ',0');
file_text_write_string(script, ', true');
file_text_close(script);

if file_exists(runcmd) and file_exists(runvbs) {
    execute_program('wscript', '"' + runvbs + '"', true);
    file_delete(runcmd);
    file_delete(runvbs);
}
//Fim do "BatchScript"
}

//Valores resetados, para não mudar o jogo
draw_set_color(0); draw_set_halign(0); draw_set_valign(0);

//"Go Go Go Pb"!
room_goto_next();
Este código é do Creation Code de uma room sem nome e sem fundos (literalmente, sem o "Draw Background Color").
Já nem sei que dorgas eu fiz aí, só sei que ele não está procurando os arquivos corretamente. Ele não está criando rooms porque não está achando alguma coisa, e também acho que não está criando objetos. E o único erro que está dando é no final, que a room seguinte não existe.

Quando executar, ele vai pedir um arquivo .game, tente este:
http://db.tt/mj07sEuO
Você pode abrir com um descompatador .zip (como WinRar e 7Zip).

luiz_eldorado

Ranking : Nota C
Número de Mensagens : 928
Idade : 18
Data de inscrição : 30/07/2011
Notas recebidas : C
Reputação : 47
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 1

http://luizpontes.tk/

Voltar ao Topo Ir em baixo

Re: [Problema] Com file_finds e outros

Mensagem por theguitarmester em Dom 21 Out 2012, 12:51

Luiz_eldorado, Baixei o Aleatorizador e coloquei o script no Creation code de uma GMK nova, tô fazendo os testes para entender.

Tem uma coisa na seu Script que eu vinha buscando(uns tempo), que é a descriptografar a GMK do Game Maker, como funciona por direito isto?

á, quando eu executo-o e acho o jogo, ele não consegue achar o VBSCRIPT e com isto, lógicamente não funciona corretamente.

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

Re: [Problema] Com file_finds e outros

Mensagem por luiz_eldorado em Dom 21 Out 2012, 13:04

theguitarmester escreveu:Tem uma coisa na seu Script que eu vinha buscando(uns tempo), que é a descriptografar a GMK do Game Maker, como funciona por direito isto?
Não, ele não faz isso (é algo impossível para GMK, mas para GM6 talvez seja). Esse arquivo .game fui que criei com o WinRar no formato .zip, depois mudei a extensão.
theguitarmester escreveu:á, quando eu executo-o e acho o jogo, ele não consegue achar o VBSCRIPT e com isto, lógicamente não funciona corretamente.
Só se seu PC não tiver o VBS, o que eu creio que é meio impossível. Todo Windows tem VBS, que SO está usando? Tente, sei lá, "baixar" o VBScript. Qual é o erro exatamente?
Até's

luiz_eldorado

Ranking : Nota C
Número de Mensagens : 928
Idade : 18
Data de inscrição : 30/07/2011
Notas recebidas : C
Reputação : 47
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 1

http://luizpontes.tk/

Voltar ao Topo Ir em baixo

Re: [Problema] Com file_finds e outros

Mensagem por theguitarmester em Dom 21 Out 2012, 13:39

Só se seu PC não tiver o VBS, o que eu creio que é meio impossível. Todo Windows tem VBS,
já tive uns problemas com ele, sei que tenho, mas acho que não tá ativado mais.

que SO está usando?
O que é isso?

Quando arrumar isto, vou ver se consigo arrumar seu programa.

mas para quê serve o vbscript em seu código? ele é substituível? e como funciona esta váriavel, não tinha conhecimento: environment_get_variable


vou tirar a parte do vbscript e ver como vai.

_____________________________________14:05
como isso é algo que me Interessa, vou ver se faço um novo seguindo o seu Script, praticamente Não consegui entender o Seu, me dê explicações como funciona, principalmente aqui, que é onde está o erro, qá que não existe o objeto, e nem criar a room:
Código:
//Objetos
screen_redraw(); draw_text(room_width/2,room_height/2,'Loading Objects'); screen_refresh();
var p,f,res;
p=working_directory+'\temp\Objects';
for (f=file_find_first(p,fa_directory); f!=''; f=file_find_next()) {
if file_attributes(p+f,fa_directory) {
execute_string('globalvar '+f+';');
res=object_add();
variable_global_set ......... ... ... ... ... E todo o Resto

olha o erro que dá:
Código:

___________________________________________
ERROR in
action number 1
of Create Event
for object <undefined>:

File is not opened for reading.

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

Re: [Problema] Com file_finds e outros

Mensagem por luiz_eldorado em Dom 21 Out 2012, 14:52

theguitarmester escreveu:já tive uns problemas com ele, sei que tenho, mas acho que não tá ativado mais.
ENTÃO ATIVE, dorgas.
theguitarmester escreveu:O que é isso?
O Sistema Operacional, a versão do Windows. Mas isso não importa.
theguitarmester escreveu:mas para quê serve o vbscript em seu código? ele é substituível? e como funciona esta váriavel, não tinha conhecimento: environment_get_variable
O VBScript vai extrair os arquivos do ZIP/GAME para uma pasta. Ele poderia ser substituído por uma DLL que fizesse isso, mas não achei nada mais simples para o que eu quero (somente descompactar). Essa função é usada para pegar uma variável do sistema (Aperte Windows (bandeirinha) + R, digite "cmd" depois Enter, digte "set" e verá as variáveis do sistema), no caso, a variável TEMP (pasta temporária do sistema).
theguitarmester escreveu:como isso é algo que me Interessa, vou ver se faço um novo seguindo o seu Script, praticamente Não consegui entender o Seu, me dê explicações como funciona, principalmente aqui, que é onde está o erro, qá que não existe o objeto, e nem criar a room
Esse é o problema, ele não quer achar os arquivos dentro das pastas (é um erro meu, eu sei, mas não sei onde está). Vou explicar o código:

Explicação escreveu:
Este programa vai ler um arquivo .game, que é um .zip com extensão mudada, nele terá o jogo inteiro, por pastas. Você pode abri-lo com o WinRar. Entre os loadings ele mostra uma mensagem do que está fazendo. O que ele faz:

  • Verifica se algum arquivo foi aberto com ele. Se foi, então será ele mesmo à abrir, caso não, ele pergunta sobre o arquivo;
  • Cria uma pasta "temp" no pasta do programa;
  • Copia o arquivo .game para o working_directory mas com a extensão .zip (o VBS só aceita .zip);
  • Cria um arquivo VBS com a instrução de descompactar o arquivo .zip para a pasta "temp" (e executa ele);
  • Deleta o arquivo .zip (já está tudo descompactado);
  • Carrega o arquivo "global_game_settings";
  • Cria os objetos que estão dentro de pastas (aqui, ele não abre nenhum objeto, mesmo tendo);
  • Cria as rooms (mesmo problema), suas instancias, background color e settings;
  • Deleta a pasta "temp" com VBScript e CMD;
  • Vai para a próxima room (que não existe).
Atélá's

luiz_eldorado

Ranking : Nota C
Número de Mensagens : 928
Idade : 18
Data de inscrição : 30/07/2011
Notas recebidas : C
Reputação : 47
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 1

http://luizpontes.tk/

Voltar ao Topo Ir em baixo

Re: [Problema] Com file_finds e outros

Mensagem por Conteúdo patrocinado Hoje à(s) 06:04


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum