Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mensajes - jmbs19

151
no es necesario declararlo directamente como hiciste, por supuesto tambien se puede hacer de esa manera, tambien puedes declaralo al asignarle dentro de la room en el background0, background1... background7, en donde el numero al final de cada background es su index.
152
seria mas o menos lo mismo que en el tema anterior, el de los disparos por rafagas
en el evento create del obj pones esto:
[gml]
t=0;//esta es una variable de temporizador, tambien puede hacerce con alarmas pero para mi es mas comodo asi

tt=15;//o cualquier numero, es el tiempo entre disparo y disparo, esto se mide en "pasos" o steps, pero si quieres que sean segundos o algo asi puedes colocar tt=1*room_speed que seria igual a un segundo
[/gml]

en el evento step coloca esto

[gml]
if t > 0//si te es mayor a 0 entonces le restara 1 al valor de t, esto es lo que cuenta por asi decirlo, es un reloj
t=t-1;
if t==0 //si t es igual a 0 bala se ejecuta el codigo de abajo
{
instance_create(x,y,obj_enemigo);//crea en la posicion x e y el objeto obj_enemigo
t=tt; //le asignara el balor que tenga el temporizador y se creara el objeto
[/gml]

en este caso no se usaria el evento global mouse left ya que tu quieres que se ejecute todo el tiempo, por eso se coloca en el evento step
153
en el evento create del obj pones esto:
[gml]
t=0;//esta es una variable de temporizador, tambien puede hacerce con alarmas pero para mi es mas comodo asi

tt=15;//o cualquier numero, es el tiempo entre disparo y disparo, esto se mide en "pasos" o steps, pero si quieres que sean segundos o algo asi puedes colocar tt=1*room_speed que seria igual a un segundo
numero_balas=100//esta es la variable en la que se guardara el numero de balas, puede ser modificada en cualquier momento
[/gml]

en el evento step coloca esto

[gml]
if t > 0//si te es mayor a 0 entonces le restara 1 al valor de t, esto es lo que cuenta por asi decirlo, es un reloj
t=t-1;
[/gml]

en el evento global mouse left coloca esto
[gml]
if t==0 and numero_balas >0 //si t es igual a 0 bala y el numero de balas es mayor a 0 se ejecuta el codigo de abajo
{
instance_create(x,y,obj_bala);//crea en la posicion x e y el objeto obj_bala
numero_balas = numero_balas-1
t=tt; //le asignara el balor que tenga el temporizador y se creara el objeto
}
[/gml]
este codigo es bastante facil de entender, pero de todas maneras te le deje varias notaciones, bienvenido y espero la pases bien por aqui.
154
Cita de: kostra en Noviembre 21, 2015, 08:43:02 PM
lee losanteriores posts, ya existe la array lo puse como tu has dicho, ya lo dije jejeje
y en el while.. no se cuenta la 23? entonces pondré también <=23 a ver...

error out of range también...

en el for tiene <= 23 y en el white también

Usar do while, creo que no funcionaría porque antes de sumarle al rune, he de verificar también la numero 0!! plis, lee la explicación que doy sobre lo que trato de hacer, en el primer mensaje :B
ok, pero tienes que poner el <=23 solo en el for, no el el while, y el do while comprobaria la posicon 0, la unica diferencia entre el do while y el while seria mas o menos esto

(solo es algo grafico, no es la manera de escribirlo)
while

condicion verdadera entonces ejecuta

do while
ejecuta, la condicion es verdadera, vuelve a ejecutar

y si colocaste <=23 en el while estas volviendo a cometer el error, solo que ahora es cuando cuenta 24, ya que dice "es menor o igual a 23 si, sumale uno, bueno el array[24]==false, espera eso no existe ERROR"
entonces volviste a tener el problema, quitale el <=23 y ponlo <23 en el while.

otra cosa, yo empece con el lenguaje C y se perfectamente que en C se puede hacer i++ para sumarle uno, pero cuando trabaje con game maker 8.1 esto me tiraba error, desde entonces uso i=i+1 o i+=1, no e probado el i++ en el studio pero es mejor curarse en salud.
155
Cita de: kostra en Noviembre 21, 2015, 06:30:35 PM
no entiendo este post :S tú mismo has dicho cómo se hace O.o
creo que se refiere a dos cosas, o no sabia donde poner ese codigo, que seria dentro de un obj controlador, o no sabia que poner dentro del array
156
te dice " array out of range!" porque estas llamando a un array que no existe, me explico:

[gml]
for (i=0;i<23;i++)
{
    global.buffact = false;
}
//aqui estas creando un array con el valor false de la posicion 0 a la 22, por ende hay 23 array contando el 0, pero la ultima posicion es la 22
[/gml]

[gml]
rune = 0;
while (global.buffact[rune] == false and rune < 23)//aqui esta ocurriendo lo siguiente, el while le suma a rune cuando esta en 22 uno y luego comprueba la variable, por lo que pregunta global.buffact[23]==false, y esta variable no existe.
{
    rune++;
};
switch rune
{
    case 0:
        runename = "FEHU";
        break;
    case 1:
        runename = "WUNJO";
        break;
    case 2:
        runename = "TEIWAZ";
        break;
    case 3:
        runename = "URUZ";
        break;
    case 4:
        runename = "THURISAZ";
        break;
    case 5:
        runename = "KENAZ";
        break;
    case 6:
        runename = "BERKANA";
        break;
    case 7:
        runename = "MANNAZ";
        break;
    case 8:
        runename = "ANSUZ";
        break;
    case 9:
        runename = "ISA";
        break;
    case 10:
        runename = "JERA";
        break;
    case 11:
        runename = "INGUZ";
        break;
    case 12:
        runename = "DAGAZ";
        break;
    case 13:
        runename = "ALGIZ";
        break;
    case 14:
        runename = "PERTHRO";
        break;
    case 15:
        runename = "LAGUZ";
        break;
    case 16:
        runename = "RAIDO";
        break;
    case 17:
        runename = "NAUTHIZ";
        break;
    case 18:
        runename = "HAGALAZ";
        break;
    case 19:
        runename = "SOWULO";
        break;
    case 20:
        runename = "EIHWAZ";
        break;
    case 21:
        runename = "EHWAZ";
        break;
    case 22:
        runename = "GEBO";
        break;
    case 23://aqui ocurre lo mismo de arriba el array 23 no existe
        runename = "OTHILA";
        break;
}
[/gml]
asi que si no me equivoco tansolo deberias de hacer lo siguiente
[gml]
for (i=0;i<=23;i++)
{
    global.buffact = false;
}//de esta manera se crearan 24 posiciones, del 0 al 23
[/gml]

ahora esto trae los siguientes problemas, tu comprobacion para el while dice buffet==false and rune <23, la posicion 23 no se evaluara, el problema aqui es tu manera de hacer esta comprobacion, puedes dejarlo asi y olvidarte de la posicion 23 o puedes hacer un do while, primero ejecuta y luego mira la condición, es lo contrario al while, que primero compara y luego ejecuta.

solo una cosa, esta pendiente siempre de que cuando evalues una condicional con un array o uses un valor de un array esa posicion exista.
157
guacusio la fucion mysql_connect del php requiere como minimo para funcionar el lugar donde esta almacenada la base de datos(una url que te la da tu hosting, no es la misma que la de tu pagina), tu usuario, y tu password.

luego se usa mysql_select_db para seleccionar tu base de datos, es decir, el nombre de tu base de datos.

http://php.net/manual/es/function.mysql-connect.php
http://php.net/manual/es/function.mysql-select-db.php

ps:niuweb yo me equivoque, no es async_event es async_load, en los codigos que te pase cambia async_event por async_load.
158
Cita de: NiuWeb en Noviembre 21, 2015, 02:29:59 AM
con URL me refiero al que va en la variable $mysql_server del código PHP...
en esa variable va la url que encuentras donde te dije, cuando le das a mysql te sale una tabla con 3 campos, que son el nombre de la base de datos, el usuario y el hoster o servidor de la base de datos, el hoster o servidor es la url que pondras en esa variable
159
bueno la cuestion es de que url hablas, si hablas de la url de la base de datos que va dentro del php, no, esa url te la da tu hoster en donde te dije, ahora bien, si hablas de la que va dentro del codigo gml tampoco seria esa, la url dentro del gml seria www.tupagina.com/tuphp.php y si usaras la variable GET dentro del php seria www.tupagina.com/tuphp.php?usuario=cualquiercosa&pass=cualquiercosa, si fuera con la variable POST pones nada mas www.tupagina.com/tuphp.php y en la parte de post colocas "usuario=cualquiercosa&pass=cualquiercosa"
160
dale click al primer boton, el que solo dice mysql hay abajo deberia de salirte el nombre de tu base de datos con los datos de usuario, servidor y nombre de base de dato, el pass deberias de saberlo tu
161
Cita de: NiuWeb en Noviembre 21, 2015, 12:09:44 AM
Bueno, pues en parte me ayuda, pero necesito realmente sincronizar mis cuentas del juego con una base de datos para poder ejecutar ese script.
Siendo que en el juego creas tu cuenta y esta se crea en la base de datos

no entiendo si preguntas o afirmas cuando dices
Citarpero necesito realmente sincronizar mis cuentas del juego con una base de datos para poder ejecutar ese script.

si preguntas que si necesitas una base de datos si, si la necesitas, no conosco ninguna manera de almacenar una cuenta con password en un servidor sin usar una base de datos, quisas se podria usar lo que hablabamos en la pregunta de subir archivos a un hosting, pero no se muy bien si seria la mejor manera.

y con respecto a lo de sincronizar la cuenta creada desde el juego seria algo asi

[gml]
//en el create o donde vayas a ejecutar el login
usuario = get_string("usuario","")
pass = get_string("pass","")
http_get(url+"?usuario="+string(usuario)+"&pass="+string(pass))
//en el evento asyncrono
estatus = ds_map_find_value(async_event,"status")
if estatus ==0
{
resultado = ds_map_find_value(async_event,"result")//donde resultado es la respuesta del servidor que por ejemplo sea 1 si todo ocurrio perfectamente y 0 si no
if resultado == 1
{
//lo que sea que quiera que aga el juego cuando se logee correctamente
}
}
[/gml]

que realmente es el mismo que esta en el ejemplo anterior, ya quedaria de tu parte el ponerle que meta el pass dos veces, y que si no son inguales lo vuelva a pedir y cosas asi.

lo que realmente cambiaria es el php

dentro del php, por ejemplo, registro.php
<?php
$usuario 
=$_GET['usuario']
$pass =$_GET['pass']
$mysql_server "url donde esta alojado el servidor sql";
$mysql_username =  "tu usuario";
$mysql_password "tu clave";
$mysql_database "el nombre de la base de datos";
$mysql_table "la tabla en la que esten los datos"
//conectar a base de datos
$con mysql_connect($mysql_server,$mysql_username,$mysql_password) or die('Can not connect to server');//nos conectamos al servidor donde se aloja el sql
mysql_select_db($mysql_database) or die('Can not connect to database');//seleccionamos la base de datos en la que trabajaremos

$result mysql_query("INSERT INTO $mysql_table(`nombre`, `pass`) VALUES ($usuario,$pass)")//insertamos el usuario en la base de datos
$numero_resultados=mysql_num_rows($result);
if (
$numero_resultados==1)
{
//tu script
echo "1";//como respuesta de que todo fue bien
}
else
echo
"0";//si todo fue mal
mysql_close($con);
?>
162
ok, vamos a considerar que ya tienes lista la base de datos y que te programa esta listo

seria algo como esto, en el programa colocas
[gml]
//en el create o donde vayas a ejecutar el login
usuario = get_string("usuario","")
pass = get_string("pass","")
http_get(url+"?usuario="+string(usuario)+"&pass="+string(pass))
//en el evento asyncrono
estatus = ds_map_find_value(async_event,"status")
if estatus ==0
{
resultado = ds_map_find_value(async_event,"result")//donde resultado es la respuesta del servidor que por ejemplo sea 1 si todo ocurrio perfectamente y 0 si no
if resultado == 1
{
//lo que sea que quiera que aga el juego cuando se logee correctamente
}
}
[/gml]

en el php seria lo que ya te puse

<?php
$usuario 
=$_GET['usuario']
$pass =$_GET['pass']
$mysql_server "url donde esta alojado el servidor sql";
$mysql_username =  "tu usuario";
$mysql_password "tu clave";
$mysql_database "el nombre de la base de datos";
$mysql_table "la tabla en la que esten los datos"
//conectar a base de datos
$con mysql_connect($mysql_server,$mysql_username,$mysql_password) or die('Can not connect to server');//nos conectamos al servidor donde se aloja el sql
mysql_select_db($mysql_database) or die('Can not connect to database');//seleccionamos la base de datos en la que trabajaremos

$result mysql_query("select `nombre` from $mysql_table where `nombre`= $usuario and `pass`= $pass ")
$numero_resultados=mysql_num_rows($result);
if (
$numero_resultados==1)
{
//tu script
echo "1";//como respuesta de que todo fue bien
}
else
echo
"0";//si todo fue mal
mysql_close($con);
?>


como recomendacion te diria que entres en el manual de php para que trates de aprender esto, en internet hay muchos codigos que puedes usar como ejemplos, el que te puse arriba en realidad es uno muy simple, no tiene ni encriptacion, ni limpieza de caracteres especiales ni se a escapado las sentencias sql, es mas, si no se escapan las variable que introducira el sql te pueden destruir la base de datos, pero no te preocupes eso se hace con mysql_real_escape_string
163
Cita de: NiuWeb en Noviembre 20, 2015, 10:19:00 PM
Bueno, creo que fue mi culpa, me falto explicarme...xD
No intento crear un sistema multiplayer, no es mi intención ni lo será, lo que realmente intento detrás de todo esto es crear una manera de ejecutar un script PHP desde GMS (ya lo hice), pero que se ejecute sólo si el usuario tiene sesión iniciada, esto para evitar intrusiones de agentes externos (juankers XD)

si el caso es que tu quieres que se ejecute un script en php solo si el usuario esta logeado(a juro tienes que usar sql(soy venezolano y la expresion "a juro"significa si o si)) pues puedes usar algo asi:


<?php
$usuario 
=$_GET['usuario']
$mysql_server "url donde esta alojado el servidor sql";
$mysql_username =  "tu usuario";
$mysql_password "tu clave";
$mysql_database "el nombre de la base de datos";
$mysql_table "la tabla en la que esten los datos"
//conectar a base de datos
$con mysql_connect($mysql_server,$mysql_username,$mysql_password) or die('Can not connect to server');//nos conectamos al servidor donde se aloja el sql
mysql_select_db($mysql_database) or die('Can not connect to database');//seleccionamos la base de datos en la que trabajaremos

$result mysql_query("select `nombre`from $mysql_table where `nombre`= $usuario")
$numero_resultados=mysql_num_rows($result);
if (
$numero_resultados==1)
{
//tu script
}
else
echo
"usuario inexistente";
mysql_close($con);
?>



sin embargo esta no es la unica forma de hacerlo, tambien se puede usar la variable session y que guarde que el usuario se le concedio acceso, pero no se como trabaja esa superglobal con el gamemaker y ademas es menos seguro que hacer una consulta cada vez que se vaya a realizar una accion.
164
no entiendo muy bien tu pregunta, para comenzar la variable $_SESSION es una superglobal array que guarda informacion que puede ser usada, por ejemplo, para almacenar una variable de sesion, ojo esto no significa que sea un loging, esta variable guarda datos en una misma pestaña o explorador en una sola computador, por decirlo asi, en esta variable puedes guardar por ejemplo un nombre, entonces mientras la persona tenga abierta esa pagina y recargue la pagina o navege atravez de ella ese nombre siempre estara guardado, sin embargo en el momento de cerrar el explorador esa variable se pierde, esta variable junto con cookies pueden usarse para por ejemplo, guardar el login de alguien por un periodo de 10 minutos, una hora o dias incluso si se cerro el explorador.


ahora bien ya explicado eso si lo que tratas de decir es un sistema "multiplayer" en base a php y nada mas, no, no se puede, el php es un codigo que es procesado por el servidor y luego te envia el resultado en forma de html, el php no puede de ninguna manera sin otra cosa,digase sql, conectarte a ti a otras personas.
165
Cita de: DarkKRuleR en Noviembre 20, 2015, 01:43:38 PM
Gracias por la info!

Básicamente tengo 21 variables a las cuales quiero dar valor en una sola línea, del tirón, llamando al script, y pasándole como argumentos los 20 valores.

Ahora mismo tengo:

scPerAsignaPoseA( 0, x, 90, 0, 90, 0, x, 270, 0, 270, 0, x, 270, 0, 270, 0 ); scA( 270, 0, 270, 0, x, 270, 0, 270, 0 );

Que es más o menos lo mismo, pero quería hacerlo más bonito y compacto juntándolo en una sola función. Visto que no se puede me quedo con lo anterior que, aunque cutre y con dos llamadas, sigue siendo una sola línea.

no se de que manera esta construido tu script pero puedes hacer algo como esto

[gml]
//al llamar al script
variable[0]="valor"
variable[1]="valor"
variable[2]="valor"
.
.
.
variable[n]="valor"
scPerAsignaPoseA(variable)
//dentro del script
var variable_script = argument0
if variable_script[0]....
if variable_script[1]....
while (variable_script[n] = "cualquier cosa"){...
[/gml]
esta es una manera de transportar un array a otra variable