Septiembre 20, 2018, 02:31:03 AM Ultima modificación: Septiembre 20, 2018, 04:59:26 AM por HKaichim
Hola amigos :D como estan el dia de hoy?
Bueno a lo que he venido, como lo dice el titulo necesito una ayudita con los Stats ya que soy muy noob en esto de la programación, he estado creando Stats basicos:
//Controles de nivel

globalvar Lv;
Lv = 1;

globalvar MaxLv;
MaxLv = 100;

globalvar Exp;
Exp = 0;

globalvar MaxExp;
MaxExp = 120;

//Controles de Stats

globalvar Ps;
Ps = 100;

globalvar Atq;
Atq = 83;

globalvar Def;
Def = 30;

globalvar Energ;
Energ = 80;

globalvar DefMag;
DefMag = 32;

globalvar Vel;
Vel = 90


Pero debo crear distintos para cada PJ y no se como se hace para que dos personajes continuen con el mismo STATS, Ejemplo "Personaje RPG" Stats fuera del combate "Personaje Combate" Los mismo Stats que conserva el RPG y diseversa y si hay alguna mejor forma de crear Stats mejor :v

#1 Septiembre 20, 2018, 02:58:10 AM Ultima modificación: Septiembre 20, 2018, 02:59:55 AM por BssString
Hola HKaichim

Si estás declarando las variables como globales, entonces ya estás conservándolos por el resto del juego, cualquier objeto en cualquier room podrá acceder a esa información y modificarla, así que puedes leer el mismo stat tanto dentro como fuera de combate.

Para crear stats pienso que una mejor alternativa es utilizar Arrays (que también se pueden crear de forma global).
Un array puede contener datos de texto como numéricos.
ejemplo:
globalvar stats;
stats[0] = "HKaichim" //El nombre del personaje
stats[1] = 100 //El hp
stats[2] = 15 //El ataque
stats[3] = 10 //La defensa
stats[4] = "rayo magico" //alguna habilidad que posea el personaje
stats[5] = "nada" //Una segunda habilidad (en este caso no la ha aprendido xD)

etc.

Puedes crear un array de 2 dimensiones para crear (en la misma variable) los stats de todos tus personajes.
Si pretendes guardar tus stats en algún archivo del dispositivo para que estén disponibles cuando el jugador inicie nuevamente el juego (lo que ocurre típicamente en los RPG, que no son juegos que te acabas en un día), entonces lo más fácil es utilizar DS LIST o DS GRID por sus funciones "write" y "read" con las que fácilmente puedes convertirlas a texto, guardarlas y leerlas.

Saludos

Cita de: BssString en Septiembre 20, 2018, 02:58:10 AM
Hola HKaichim

Si estás declarando las variables como globales, entonces ya estás conservándolos por el resto del juego, cualquier objeto en cualquier room podrá acceder a esa información y modificarla, así que puedes leer el mismo stat tanto dentro como fuera de combate.

Para crear stats pienso que una mejor alternativa es utilizar Arrays (que también se pueden crear de forma global).
Un array puede contener datos de texto como numéricos.
ejemplo:
globalvar stats;
stats[0] = "HKaichim" //El nombre del personaje
stats[1] = 100 //El hp
stats[2] = 15 //El ataque
stats[3] = 10 //La defensa
stats[4] = "rayo magico" //alguna habilidad que posea el personaje
stats[5] = "nada" //Una segunda habilidad (en este caso no la ha aprendido xD)

etc.

Puedes crear un array de 2 dimensiones para crear (en la misma variable) los stats de todos tus personajes.
Si pretendes guardar tus stats en algún archivo del dispositivo para que estén disponibles cuando el jugador inicie nuevamente el juego (lo que ocurre típicamente en los RPG, que no son juegos que te acabas en un día), entonces lo más fácil es utilizar DS LIST o DS GRID por sus funciones "write" y "read" con las que fácilmente puedes convertirlas a texto, guardarlas y leerlas.

Saludos
BssString Muchas gracias por su explicación y tiempo, pero me preguntaba si me puede dar una explicación sobre los "write y "red" y todo eso que me decir, es que generalmente yo no sabria realmente como armalos "Si no es tanta molestia claro"

#3 Septiembre 20, 2018, 04:17:34 AM Ultima modificación: Septiembre 20, 2018, 04:31:45 AM por BssString
Hola HKaichim

Yo te sugiero utilizar DS GRID, aunque puedes utilizar cualquier otro tipo de DS o incluso arrays o variables como sean de tu agrado.
No sé si eres un experto en Game Maker o recién estás empezando, así que empezaré explicando cómo funcionan las DS Grid.
Una DS GRID es como una hoja de excel, puedes almacenar información en forma de tabla. Esta "tabla" se guarda en el caché de Game Maker y puedes acceder mediante el ID que te entrega Game Maker cada vez que creas una tabla.
En teoría las DS GRIDs son "globales", cualquier objeto en cualquier room puede acceder a la información mientras la DS GRID exista en la memoria, el problema es la variable con la que accedes, si pierdes esa variable (destruyendo el objeto que la tenía o cambiando de room por ejemplo), la información sigue existiendo pero ya no podrás acceder a ella.

Las funciones principales son:
ds_grid_create(columnas,filas): Esta función crea la grid y retorna su ID, así que debes guardarla en una variable
ds_grid_set(grid,x,y,valor): Esta función te permite asignarle valores a una celda de la GRID.
ds_grid_get(grid,x,y): Esta función lee el valor que tiene una celda.

Como ejemplo, voy a crear una DS GRID de 4x2 para almacenar 4 stats: HP, nombre, ataque, defensa. para dos personajes.
globalvar stats; //Crea una variable global llamada "stats"
stats = ds_grid_create(4,2) //Crea la grid y guarda su ID en la variable global
//Crea los stats del primer personaje
ds_grid_set(stats,0,0,100) //hp personaje1
ds_grid_set(stats,1,0,"HKaichim") //nombre
ds_grid_set(stats,2,0,25) //ataque
ds_grid_set(stats,3,0,15) //defensa

ds_grid_set(stats,0,1,90) //hp personaje 2
ds_grid_set(stats,1,1,"BssString") //nombre
ds_grid_set(stats,2,1,15) //ataque
ds_grid_set(stats,3,1,30) //defensa


Eso creará la siguiente información:




filaHPnombreataquedefensa
0100"HKaichim"2515
190"BssString"1530

Game Maker Studio implementó los "accessors" que es una manera rápida de acceder a la información almacenada en Arrays, Lists, entre otros. Para el caso de las grids, su accessor es el signo "#", puedes usar la siguiente notación, tanto para leer info, como para escribir info:
CitarID_DE_LA_GRID[# x,y] <- notación de las GRIDS
Ejemplos:
my_hp = stats[# 0,0] <- Lee la grid "stats", el dato de la celda x=0;y=0
stats[# 0,0] = 120 <- Ahora a esa celda le asigna valor 120

Finalmente las GRIDs entregan la posibilidad de convertir la información de grid a string y de string a grid con sus funciones "ds_grid_write" y "ds_grid_read".
string = ds_grid_write(stats) //Esta función convierte la grid "STATS" en una cadena de texto NO LEGIBLE para el ser humano y lo almacena en la variable "string".
Esa cadena de texto generada puede ser almacenada en un archivo de forma local e incluso enviada vía Networking hacia otro juego conectado.

Ejemplo de guardado
ini_open("data.ini") //Abre (o crea) el archivo "data.ini"
ini_write_string("save","save1",string) //Busca (o crea) la sección "save" y la llave "save1" para guardar la string que creamos antes
ini_close() //Cierra el archivo


Para cargar la partida y leer nuevamente tus variables.
stats = ds_grid_create(4,2) //Crea una nueva grid (debe existir antes de cargar)
ini_open("data.ini") //Lee el archivo donde guardamos la info
var string = ini_read_string("save","save1","") //Lee la información guardada (lee "" si no había nada) y lo guarda en la variable string
ds_grid_read(stats,string) //A la grid que acabamos de crear, le carga la info de la variable "string"
ini_close() //Cierra el archivo

Y listo, tu grid ya tiene cargada de nuevo la información que tenía antes, cuando guardamos el archivo.

Debes recordar que las ds_grid deben ser eliminadas del cache cuando ya no sean necesarias, ejemplo, al finalizar la ejecución del juego o cuando vuelves al menú principal para evitar que en muchos reinicios, el juego se quede sin memoria disponible.
La función es:
ds_grid_destroy(grid_id)

Espero que haya quedado bien explicado

Saludos