mapas externos, quests, batalhas e banco de dados

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

mapas externos, quests, batalhas e banco de dados

Mensagem por Isaque Onix em Ter 11 Set 2012, 09:17

Olá amigos do gmk (sei q vcs devem estar pensando ' De Novo...' rs) gostaria de saber se voces podem me ajudar com isso:

1,2: como fazer mapas externos, no meu projeto, pretendo fazer atualizações então pretendo deixar os mapas, as quests e as lojas em arquivos externos, alguem pode me dar uma ideia de como isso funciona?

3: batalhas... sei como fazer as batalhas em si, mais não sei guardar com quem estou lutando. quero fazer mais ou menos tipo a do AQWorlds (aq.com) quem estiver na sala e acertou o monstro recebe os 'pontos'.

4: o mais difícil, meu PC é uma merda 'Desculpem a expressão' então não posso deixar o banco de dados nele. auguem conhece um tutorial que ensine a fazer um banco de dados de outra forma?

Grato desde já.

Isaque Onix

Número de Mensagens : 1597
Idade : 23
Data de inscrição : 15/08/2010
Reputação : 147
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://spyreserver.16mb.com

Voltar ao Topo Ir em baixo

Re: mapas externos, quests, batalhas e banco de dados

Mensagem por saim em Ter 11 Set 2012, 10:13

1,2: Como tudo, tem muitas formas. Uma que eu gosto é usar arquivos de texto ou .ini. Você cria um programinha à parte, com o propósito de exportar o mapa pra ser reimportado pelo jogo. Nesse programinha, você define quais objetos poderão ser importados pro mapa, em que alinhamento eles estarão (se é que haverá um alinhamento), etc. Daí, coloca um evento especial, onde um controlador sai pegando tudo quanto é objeto e gravando seus nomes e suas coordenadas no arquivo. Em cada linha, uma coordenada em x, uma coordenada em y e um nome de objeto. No jogo mesmo, você cria uma rotina pra importar esses dados.

Enquanto escrevia, percebi que isso pode ser feito com uma ds_grid, também. As data structures têm rotinas pra transformá-las em texto criptografado, sem que você se preocupe com isso.

4: Olha, se o problema é espaço, não tem muito com o que se preocupar. Esses arquivos são muito pequenos. Agora, se você está com medo de dar pau e perder tudo, o lance é fazer back-ups. Pendrives, sites de armazenamento, CDs, etc. Se seu computador é tão ruim, ele deve ser velho. Talvez ele até tenha uma entrada pra disquetes...

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: mapas externos, quests, batalhas e banco de dados

Mensagem por Isaque Onix em Ter 11 Set 2012, 10:33

haha, num e espaço naum, meu pc desfaz todos arquivos e pastas transformando em (.atl) que eu nem sei oque é

e esse programinha, tem algum tutorial? :/
obrigado Smile

Isaque Onix

Número de Mensagens : 1597
Idade : 23
Data de inscrição : 15/08/2010
Reputação : 147
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://spyreserver.16mb.com

Voltar ao Topo Ir em baixo

Re: mapas externos, quests, batalhas e banco de dados

Mensagem por saim em Ter 11 Set 2012, 11:00

Diz na google ".atl" que é uma extensão associada ao "assembler", que não conheço. Estranho mesmo, o comportamento da sua máquina. Na minha terra, em casos como esse, a gente usa um método muito sutil chamado "formatar a máquina". Os resultados variam.

Quanto ao tutorial, propriamente dito, não tenho um... principalmente porque acredito que pra cada função, um programa diferente se faz necessário, ou seja, você mesmo tem que criar seu programa com base naquilo que quer como resultado.
De qualquer forma, não acho realmente necessário um tutorial. Se você sabe lidar com arquivos externos (abrir, ler e interpretar as informações), o resto é só trabalho braçal.
Nesse programa, você precisa mesmo é saber como enfiar os objetos no mapa. Isso pode ser feito via mouse ou teclado, aleatoriamente, alinhado a uma grid, rotacionado, com variáveis diferentes pra cada objeto...
Eu posso te ajudar a criar seu programa, mas ter algo assim, uma receita pra ser seguida, acho que não vai ser fácil encontrar.
Hm... será que dá pra fazer uma engine assim, mais genérica?

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: mapas externos, quests, batalhas e banco de dados

Mensagem por Isaque Onix em Ter 11 Set 2012, 11:50

bom eu não sou muito bom com arquivos externos n mesmo depois de ler seu tuto sobre eles a um tempinho atraz :/ mais agradeceria muito se vc me ajudasse Smile

[edit]
e sobre o 'formatar' eu não tenho paciencia e nem o cd do windows aki :/
e eu achava q '.atl' era de atalho

Isaque Onix

Número de Mensagens : 1597
Idade : 23
Data de inscrição : 15/08/2010
Reputação : 147
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://spyreserver.16mb.com

Voltar ao Topo Ir em baixo

Re: mapas externos, quests, batalhas e banco de dados

Mensagem por saim em Ter 11 Set 2012, 13:15

Eu não tenho um tutorial sobre arquivos externos... Tenho um tutorial que usa eles (o game genérico), mas não que ensine a usá-los.
Como eu disse, não tem muito mistério, basta colocar no arquivo as informações que você quer que sejam carregadas. Pra te ajudar, eu preciso saber quais as restrições você quer impor ao seu mapa (se é que quer por alguma) e que informações precisam ser passadas (se é só nome de objeto e coordenada, se ainda tem mais alguma coisa).

Como o programa que vai passar as informações pro game é só pra uso seu, ele não precisa de uma interface bonita nem de jogabilidade muito trabalhada, fica mole fazer.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: mapas externos, quests, batalhas e banco de dados

Mensagem por Isaque Onix em Ter 11 Set 2012, 13:45

bom, eu gostaria de fazer o seguinte: armazenar todos os tiles(como sprites) em um unico arquivo, no caso ao fazer o mapa deveria definir o depth, image_index, e solid.
tem como?

Isaque Onix

Número de Mensagens : 1597
Idade : 23
Data de inscrição : 15/08/2010
Reputação : 147
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://spyreserver.16mb.com

Voltar ao Topo Ir em baixo

Re: mapas externos, quests, batalhas e banco de dados

Mensagem por saim em Ter 11 Set 2012, 14:54

Espere... você quer um mapa de objetos ou uma background de tiles?
É que os tiles não têm essas propriedades. Da forma que você descreve, parece que você quer mesmo é gerar uma única imagem de fundo, pra ser usada como background. Aí, a abordagem seria diferente.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: mapas externos, quests, batalhas e banco de dados

Mensagem por Isaque Onix em Ter 11 Set 2012, 18:11

com objetos, desculpe se me expressei mal, mais é que algumas partes do mapa devem parar o player...

Isaque Onix

Número de Mensagens : 1597
Idade : 23
Data de inscrição : 15/08/2010
Reputação : 147
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://spyreserver.16mb.com

Voltar ao Topo Ir em baixo

Re: mapas externos, quests, batalhas e banco de dados

Mensagem por moisesBR em Ter 11 Set 2012, 23:22

Background colizion... Eu tentei. É canseira! Fiz e o game ficou pesado tinha que usar um backgound como sprite no tamanho da roome só com as linhas e bugs!!!!!

Melhor mesmo é objetos invisíveis.

moisesBR

Número de Mensagens : 873
Idade : 40
Data de inscrição : 24/10/2009
Reputação : 14
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

http://inprovise.blogspot.com/

Voltar ao Topo Ir em baixo

Re: mapas externos, quests, batalhas e banco de dados

Mensagem por Isaque Onix em Qua 12 Set 2012, 05:02

Sad tava achando q seria uma boa... vlw a dica


[edit]
mais mesmo assim, da pra fazer o tal programa? não sou muito bom em tilesets em codigos, so consigo trabalhar com eles diretamente na room :/

Isaque Onix

Número de Mensagens : 1597
Idade : 23
Data de inscrição : 15/08/2010
Reputação : 147
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://spyreserver.16mb.com

Voltar ao Topo Ir em baixo

Re: mapas externos, quests, batalhas e banco de dados

Mensagem por saim em Qua 12 Set 2012, 09:33

Bom, agora eu já me perdi quanto ao que você quer, efetivamente... vou tentar te direcionar pra opção de inserir objetos na posição correta, se não for isso, a gente adapta depois. Me parece a opção mais simples.

Bom, faça um programa com todos os objetos que você quer que sejam importados, só que sem ação nenhuma (pra garantir que eles não se movam durante o decorrer do programa). O que importa mesmo é que eles tenham a mesma sprite e o mesmo nome dos objetos do jogo. Ah, se eles puderem ser childs de um objeto só, facilita muito! Não precisa fazer isso no jogo, só no programa de exportar mapas. Vou chamar esse parent de todos de "objMapaParent".
Adicione um objeto chamado... deixa ver... "objGravaMapa". Nesse objeto, você coloca um evento, digamos, "apertar enter" ou "apertar espaço" ou sei lá. Um evento que você saiba como chamar.

Agora, nesse evento, você coloca os códigos pra gravar no arquivo externo as informações do mapa. Vou usar uma ds_grid, porque eu acho mais fácil, mas você pode usar arquivos de texto ou .ini ou sequencias de ds_lists, pode fazer do jeito que achar melhor. Deixa eu dar um exemplo do que eu estou pensando pro evento:
Código:

var gridMapa, i, STRING, ARQUIVO;
gridMapa = ds_grid_create(3, instance_number(objMapaParent)); // 3 colunas, tantas linhas quantas instâncias
i = 0;
with(objMapaParent){
   ds_grid_set(gridMapa, 0, i, x); //coloca a coordenada "x" na primeira coluna
   ds_grid_set(gridMapa, 1, i, y); //coloca a coordenada "y" na segunda coluna
   ds_grid_set(gridMapa, 2, i, object_get_name(id)); // coloca o nome na terceira coluna
   i += 1; // passa pra próxima linha
   }
STRING = ds_grid_write(gridMapa); // grava a ds_grid numa string
ARQUIVO = file_text_open_write("mapa.map"); //cria um arquivo (de texto) e abre ele pra escrever
file_text_write_string(ARQUIVO, STRING); // escreve a ds_grid no arquivo de texto
file_text_close(ARQUIVO); //fecha o arquivo
ds_grid_destroy(gridMapa); //elimina a ds_grid, que não é mais útil

Pronto, você já tem um arquivo com o mapa que desenhou usando o editor de fases do game maker. Se você abrir o arquivo (usando o bloco de notas do windows mesmo), vai ver um monte de números sem sentido. Eu suponho que seja alguma rotina de criptografia que o game maker use, pra não ser possível editar diretamente o conteúdo do arquivo. Pra ser sincero, nunca me preocupei muito com o significado desse texto, contanto que a grid seja passada pra string sem perda de conteúdo.

Mas você ainda precisa IMPORTAR esse mapa no jogo, certo? Pra isso, agora no jogo, você vai criar um novo objeto pra importar o mapa. Na room que ele precisa importar o mapa, você vai colocar só ele. E no create dele, vai colocar uma rotina que abre o arquivo, cria os objetos e, por fim, se auto-destrói. Uma sugestão de rotina:
Código:

var ARQUIVO, STRING;
ARQUIVO = file_text_open_read("mapa.map"); // abre o arquivo já salvo
STRING = file_text_read_string(ARQUIVO); // lê a única linha do arquivo e salva ela numa variável
file_text_close(ARQUIVO); // fecha o arquivo, não precisamos mais dele

var gridMapa, xx, yy, nome;
gridMapa = ds_grid_create(0, 0); // cria uma grid de tamanho nulo
ds_grid_read(gridMapa, STRING); // lê a string, transformando-a de volta numa grid e redimensionando a grid
for(i = 0; i < ds_grid_height(gridMapa); i += 1){
   xx = ds_grid_get(gridMapa, 0, i); // recupera a coordenada X
   yy = ds_grid_get(gridMapa, 1, i); // recupera a coordenada Y
   nome = ds_grid_get(gridMapa, 2, i); // recupera o nome
   instance_create(xx, yy, nome);
   }
ds_grid_destroy(gridMapa); //elimina a ds_grid, que não é mais útil

Ainda não tenho muita certeza é se usar o nome como uma string (obtida em "object_get_name") poderia dar problema...
Mas mesmo que der, sempre tem soluções. Você pode, por exemplo, criar uma array global de objetos nos dois programas e gravar o índice da array, e não o nome do objeto, na grid.

Enfim, é só uma idéia. Eu fiz um teste aqui, gravando o índice do objeto ao invés do nome, e funcionou numa boa, mas ter o mesmo índice de objetos nos dois programas é muito difícil. Enfim, a engine de exportar as informações está aí, agora é dar um jeito de interpretar essas informações.

Edit: mudei um pouco o código, pra usar essa idéia das arrays de objetos. Fica assim:
Spoiler:
gravação do mapa escreveu:create
Código:
indice[objMapaParent] = 0;
indice[objSegundo] = 1;
// e por aí vai. Todos eles são childs do mesmo objeto "objMapaParent"
Evento de gravação
Código:
var gridMapa, i, STRING, ARQUIVO;
gridMapa = ds_grid_create(3, instance_number(objMapaParent)); // 3 colunas, tantas linhas quantas instâncias
i = 0;
with(objMapaParent){
   ds_grid_set(gridMapa, 0, i, x); //coloca a coordenada "x" na primeira coluna
   ds_grid_set(gridMapa, 1, i, y); //coloca a coordenada "y" na segunda coluna
   ds_grid_set(gridMapa, 2, i, other . indice[object_index]); // coloca o nome na terceira coluna
   i += 1; // passa pra próxima linha
   }
STRING = ds_grid_write(gridMapa); // grava a ds_grid numa string
ARQUIVO = file_text_open_write("mapa.map"); //cria um arquivo (de texto) e abre ele pra escrever
file_text_write_string(ARQUIVO, STRING); // escreve a ds_grid no arquivo de texto
file_text_close(ARQUIVO); //fecha o arquivo
ds_grid_destroy(gridMapa); //elimina a ds_grid, que não é mais útil
leitura do mapa escreveu:create
Código:
objeto[0] = objMapaParent;
objeto[1] = objSegundo;
// etc. Tem que indexar da mesma forma que fez no outro arquivo, só alterando a posição das arrays. Se precisar, eu entro um pouco mais a fundo nessa parte.
evento de carregar o mapa (pode ser uma segunda parte do create)
Código:
var ARQUIVO, STRING;
ARQUIVO = file_text_open_read("mapa.map"); // abre o arquivo já salvo
STRING = file_text_read_string(ARQUIVO); // lê a única linha do arquivo e salva ela numa variável
file_text_close(ARQUIVO); // fecha o arquivo, não precisamos mais dele

var gridMapa, xx, yy, nome;
gridMapa = ds_grid_create(0, 0); // cria uma grid de tamanho nulo
ds_grid_read(gridMapa, STRING); // lê a string, transformando-a de volta numa grid e redimensionando a grid
for(i = 0; i < ds_grid_height(gridMapa); i += 1){
   xx = ds_grid_get(gridMapa, 0, i); // recupera a coordenada X
   yy = ds_grid_get(gridMapa, 1, i); // recupera a coordenada Y
   indice = ds_grid_get(gridMapa, 2, i); // recupera o nome
   instance_create(xx, yy, objeto[indice]);
   }
ds_grid_destroy(gridMapa); //elimina a ds_grid, que não é mais útil
e pode ser util colocar um instance_destroy() no final do carregamento, mas aí fica a seu critério


Última edição por saim em Qui 13 Set 2012, 08:50, editado 2 vez(es)

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: mapas externos, quests, batalhas e banco de dados

Mensagem por Jiraya em Qua 12 Set 2012, 10:01

eu estou usando o seguinte código para salvar minhas rooms em um arquivo de texto

Código:

var buff,count,List;count=0;buff="";List=ds_list_create();
for(i=0;i<1024;i+=1;)
{t=10000000+i;
if(tile_exists(t)){
count+=1;bg=tile_get_background(t);
if(ds_list_find_index(List,bg)==-1)ds_list_add(List,bg);
buff+=string(bg)+" "+string(tile_get_left(t))+" "+string(tile_get_top(t))+" "+string(tile_get_width(t))+" "+string(tile_get_height(t))+" "+string(tile_get_x(t))+" "+string(tile_get_y(t))+" "+string(tile_get_depth(t))+"
";}}
buff=string(count)+"
"+buff;
buff2=string(ds_list_size(List))+"
";
for(i=ds_list_size(List);i;i-=1;)
{fname=filename_change_ext(argument0,"")+"_TILE"+string(i)+".png";name=filename_name(fname);
buff2+=name+"
"+room_caption+" "+string(room_width)+" "+string(room_height)+" "+string(view_wview)+" "+string(view_hview)+" "+string(view_wport)+" "+string(view_hport)+" "+string(background_color)+" "+string(background_index)+"
";background_save(ds_list_find_value(List,i),fname);};
ds_list_destroy(List);
buff=buff2+buff;
buff2="";
buff+=string(instance_count)+"
";
for(i=0;i<instance_count;i+=1;)
{o=instance_find(all,i);
if(o.object_index==System)continue;
buff+=string(o.object_index)+" "+string(o.x)+" "+string(o.y)+"
";};
file_open_write(argument0);
file_write_string(buff);
file_close();

e para carregar eu uso
Código:

if(!file_exists(argument0))return(0);
file_open_read(argument0);
chunk[0]=file_read_real();file_readln();
sizei=0;
buff[sizei]="";
repeat(chunk[0])
{
buff[sizei]=background_add(file_read_string(),0,0)file_readln();
sizei+=1;
}

match(file_read_string());file_readln();
room_caption=array[0];room_set_width(room,real(array[1]));room_set_height(room,real(array[2]));
view_wview=real(array[3]);view_hview=real(array[4]);view_wport=real(array[5]);view_hport=real(array[6]);
background_color=real(array[7]);background_index=array[8];

chunk[1]=file_read_real();file_readln();
INT=0;
repeat chunk[1]
{
match(file_read_string());file_readln();
tile_add(buff[real(array[0])],real(array[1]),real(array[2]),real(array[3]),real(array[4]),real(array[5]),real(array[6]),real(array[7]))
}
chunk[2]=file_read_real();file_readln();
repeat chunk[2]
{
match(file_read_string(),1);file_readln();
instance_create(real(array[1]),real(array[2]),real(array[0]));
}
file_close();

e uso esse pequeno script para fazer uma espécie de split na string
Código:

var c,m,mbuff,msize;mbuff="";msize=0;argument0+="  ";
for(m=1;m<string_length(argument0);m+=1;)
{c=string_char_at(argument0,m);
if(c!=" ")mbuff+=c;else{array[msize]=mbuff;mbuff="";msize+=1;}
}
return(msize);

monto a room normalmente, depois executo o primeiro código, e apago a room do game maker, então eu apenas carro ela depois.


Jiraya

Ranking : Nota A
Número de Mensagens : 1134
Data de inscrição : 20/03/2010
Notas recebidas : A+A
Reputação : 108
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

https://www.facebook.com/seito.washiro.7

Voltar ao Topo Ir em baixo

Re: mapas externos, quests, batalhas e banco de dados

Mensagem por kadini em Qua 12 Set 2012, 10:32

isso é estramamente interessante não sabia que dava para fazer no GM.

Uma duvia eu querio um jogo e depois quero atualizar os mapas basta fazer este sistema para atualizar, e deponibilizar o ficheiro de texto para download, mas no jogo ele tinha de ter um sistema para adicionar mapas automaticamente, com uma fase respetiva, isso é possivel??

EDIT:

seria muito interessante criarem uma engine ou um tutorial sobre isto, pois penso que poucos sabem fazer isso....


kadini

Número de Mensagens : 192
Idade : 20
Data de inscrição : 02/03/2012
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: mapas externos, quests, batalhas e banco de dados

Mensagem por Isaque Onix em Qua 12 Set 2012, 11:05

ok, vou tentar aqui e de noite eu aviso oque deu Smile obrigado ae


[edit]
Sain, fiz exatamente oque vc disse e deu serto só tenho q adaptar no jogo...

jiraya, desculpe não ter respondido mais sedo, mais meu irmão tava enchendo o saco e tive q sair as pressas... mais será que você poderia explicar o codigo? coloquei num script e acusou um erro, mais são tantas funções que nem sabia oque fazer XD

ps: se tiverem respostas pras outras por favor ajudem

Isaque Onix

Número de Mensagens : 1597
Idade : 23
Data de inscrição : 15/08/2010
Reputação : 147
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://spyreserver.16mb.com

Voltar ao Topo Ir em baixo

Re: mapas externos, quests, batalhas e banco de dados

Mensagem por saim em Qui 13 Set 2012, 12:01

Verdade, Jiraya. Por um lado, parece que você escreveu da sua cabeça, já que algumas funções estão erradas (file_read_real ao invés de file_text_read_real, por exemplo), por outro existem funções que parecem ser scripts seus (o "match" não foi encontrado no manual), ou seja, você teria copiado esses códigos de uma engine funcional.
Tem uma terceira hipótese. Trata-se de um código funcional, mas não em gml.

Em todas as hipóteses, eu gostaria de ver os códigos comentados. Por favor.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: mapas externos, quests, batalhas e banco de dados

Mensagem por Jiraya em Qui 13 Set 2012, 12:31

desculpe-me pelo descuido

crie um script com o seguinte nome
room_save
e coloque isso la
Código:

var buff,count,List;count=0;buff="";List=ds_list_create();
for(i=0;i<1024;i+=1;)//procura por todas tiles num raio de 1k
{t=10000000+i;//como todas tiles tem o id padrão 10000000 então qualquer valor acima refere-se a uma tile
if(tile_exists(t)){//se a tile existir
//registra ela no buff...
count+=1;bg=tile_get_background(t);
if(ds_list_find_index(List,bg)==-1)ds_list_add(List,bg);
buff+=string(bg)+" "+string(tile_get_left(t))+" "+string(tile_get_top(t))+" "+string(tile_get_width(t))+" "+string(tile_get_height(t))+" "+string(tile_get_x(t))+" "+string(tile_get_y(t))+" "+string(tile_get_depth(t))+"
";}}
buff=string(count)+"
"+buff;
buff2=string(ds_list_size(List))+"
";
//cria a lista de backgrounds usados nas tiles
for(i=ds_list_size(List);i;i-=1;)
{fname=filename_change_ext(argument0,"")+"_TILE"+string(i)+".png";name=filename_name(fname);
buff2+=name+"
"+room_caption+" "+string(room_width)+" "+string(room_height)+" "+string(view_wview)+" "+string(view_hview)+" "+string(view_wport)+" "+string(view_hport)+" "+string(background_color)+" "+string(background_index)+"
";background_save(ds_list_find_value(List,i),fname);};
ds_list_destroy(List);
buff=buff2+buff;
buff2="";
buff+=string(instance_count)+"
";
//e por ultimo os objetos
for(i=0;i<instance_count;i+=1;)
{o=instance_find(all,i);
buff+=string(o.object_index)+" "+string(o.x)+" "+string(o.y)+"
";};
file_open_write(argument0);
file_write_string(buff);
file_close();

crie um script chamado "match", funcionará como um split de js
coloque isso la
Código:

var c,m,mbuff,msize;mbuff="";msize=0;argument0+="  ";
for(m=1;m<string_length(argument0);m+=1;)
{c=string_char_at(argument0,m);
if(c!=" ")mbuff+=c;else{array[msize]=mbuff;mbuff="";msize+=1;}
}
return(msize);

e para carregar
crie um script chamado "load_room"
e coloque isso la
Código:

if(!file_exists(argument0))return(0);
file_open_read(argument0);
chunk[0]=file_read_real();file_readln();//lê a primeira informação como numero de recursos utilizados
sizei=0;
buff[sizei]="";
repeat(chunk[0])
{
buff[sizei]=background_add(file_read_string(),0,0)file_readln();//então add os backgrounds
sizei+=1;
}
//separa os valores da string em partes e armazena numa "array" interna
match(file_read_string());file_readln();
//atualiza as propriedades da room
room_caption=array[0];room_set_width(room,real(array[1]));room_set_height(room,real(array[2]));
view_wview=real(array[3]);view_hview=real(array[4]);view_wport=real(array[5]);view_hport=real(array[6]);
background_color=real(array[7]);background_index=array[8];

chunk[1]=file_read_real();file_readln();//lê o numero de tiles
INT=0;
repeat chunk[1]
{
//separa as informações sobre as coordenadas da tile em uma array
match(file_read_string());file_readln();
tile_add(buff[real(array[0])],real(array[1]),real(array[2]),real(array[3]),real(array[4]),real(array[5]),real(array[6]),real(array[7]))
}
chunk[2]=file_read_real();file_readln();//le o numero de objetos
repeat chunk[2]
{
match(file_read_string(),1);file_readln();//separa as informações numa array
instance_create(real(array[1]),real(array[2]),real(array[0]));
}
file_close();


para usar é bem simples
monte sua room normalmente, depois que estiver pronta, add esse código no creation code da room
save_room("mapa.txt");

e então execute
quando o arquivo de texto for criado
crie outra room sem absolutamente nada
e coloque apenas o seguinte código no creation code dela
load_room("mapa.txt");


Última edição por Jiraya em Dom 16 Set 2012, 17:39, editado 1 vez(es)

Jiraya

Ranking : Nota A
Número de Mensagens : 1134
Data de inscrição : 20/03/2010
Notas recebidas : A+A
Reputação : 108
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

https://www.facebook.com/seito.washiro.7

Voltar ao Topo Ir em baixo

Re: mapas externos, quests, batalhas e banco de dados

Mensagem por luiz_eldorado em Qui 13 Set 2012, 19:06

OBS:
saim escreveu:Por um lado, parece que você escreveu da sua cabeça, já que algumas funções estão erradas (file_read_real ao invés de file_text_read_real, por exemplo)
Na verdade estas funções existem sim, só que estão ocultas (foi o próprio Jiraya que disse). Que eu me lembre, elas são mais rápidas, porém menos seguras. Mas acho que só não deletaram por questão de compatibilidade.

luiz_eldorado

Ranking : Nota C
Número de Mensagens : 928
Idade : 17
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: mapas externos, quests, batalhas e banco de dados

Mensagem por saim em Sex 14 Set 2012, 08:34

Agora eu estou QUASE entendendo os scripts... Ainda preciso testar pra ver o resultado (e aprender a usar tiles. Acredita que nunca usei tiles?).

Quanto às funções... sério? Não sabia disso. O que quer dizer "menos seguras"? Quer dizer que elas seriam aceitas (sem funcionar adequadamente) em outros tipos de arquivo, por exemplo?

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: mapas externos, quests, batalhas e banco de dados

Mensagem por kadini em Sab 15 Set 2012, 13:20

tentei executar o script do jiraya mas dá o erro que não reconhece a variavel System, alguem testou???

kadini

Número de Mensagens : 192
Idade : 20
Data de inscrição : 02/03/2012
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: mapas externos, quests, batalhas e banco de dados

Mensagem por Kapoty em Sab 15 Set 2012, 13:40

kadini escreveu:tentei executar o script do jiraya mas dá o erro que não reconhece a variavel System, alguem testou???

Comigo deu a mesma coisa.

Kapoty

Ranking : Nota B
Número de Mensagens : 635
Data de inscrição : 05/11/2011
Notas recebidas : E + D + C + B + D +B + A
Reputação : 22
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

Voltar ao Topo Ir em baixo

Re: mapas externos, quests, batalhas e banco de dados

Mensagem por kadini em Dom 16 Set 2012, 15:44

jiraya saim não conseguem concertar o codigo??, pois eu estava a presisar de um codigo para estudar e testar... pois a olhar para ele o que se aprende esquesse-se e com a pratica é mais rapido, desde já obrigado

kadini

Número de Mensagens : 192
Idade : 20
Data de inscrição : 02/03/2012
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: mapas externos, quests, batalhas e banco de dados

Mensagem por Jiraya em Dom 16 Set 2012, 17:40

desculpe, havia me esquecido, era só apagar aquela linha, pode testar agora...

Jiraya

Ranking : Nota A
Número de Mensagens : 1134
Data de inscrição : 20/03/2010
Notas recebidas : A+A
Reputação : 108
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

https://www.facebook.com/seito.washiro.7

Voltar ao Topo Ir em baixo

Re: mapas externos, quests, batalhas e banco de dados

Mensagem por kadini em Seg 17 Set 2012, 13:06

bem jiraya, o save está a funcionar mas o load não dá o seguinte erro:

EXECUTION ERROR in creation code of room nivel2
In script load_room:
Error in code at line 14:
room_caption=array[0];room_set_width(room,real(array[1]));room_set_height(room,real(array[2]));
^
at position 49: Unknown variable array or array index out of bounds


desde já obridado

EDIT: resolvido... reparei que o codigo tinha uma função para as tiles e eu não estava a utilizar tiles por isso pus tiles e testei, e funciona muito obrigado...

kadini

Número de Mensagens : 192
Idade : 20
Data de inscrição : 02/03/2012
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: mapas externos, quests, batalhas e banco de dados

Mensagem por Trimaster em Ter 18 Set 2012, 14:36

grandes scripts jiraya... brutal, uma duvida é possivel uzar isso para adicionar nives num jogo de android e ifhone???, criarei um topico na parte de GMS..

Trimaster

Número de Mensagens : 36
Data de inscrição : 01/09/2012
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: mapas externos, quests, batalhas e banco de dados

Mensagem por Conteúdo patrocinado Hoje à(s) 08:35


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