¡Bienvenido a Universo Maker!
¿Es esta la primera vez que visitas el foro? Si es así te recomendamos que te registres para tener completo acceso a todas las áreas y secciones del foro, así también podrás participar activamente en la comunidad. Si ya tienes una cuenta, conectate cuanto antes.
Iniciar Sesión Registrarme

No estás conectado. Conéctate o registrate

Ver el tema anterior Ver el tema siguiente Ir abajo Mensaje [Página 1 de 1.]

#1 [RM2k/3] Sistema de manejo de personajes el Lun Abr 25, 2011 3:52 am

orochii

avatar
SISTEMA DE MANEJO DE PERSONAJES
Dificultad: ¿Supongo que avanzado .-.?
Conocimientos necesarios: Variables, switches, condicionales, uso de "variables puntero", y claro, estar familiarizado con el flujo de un evento.
Número de variables necesarias: 6
Número de interruptores necesarios: El número de héroes en la base de datos.



Hola, quizá podría haberle puesto engine, pero pensé que necesitaba algunas funciones más (y que también pueden ser usadas para otras cosas). Esto es un sistema hecho a punta de engines. Lo hice para Ragnarökr, y claro, lo seguiré usando xD.
Las funciones del engine son varias, y reemplaza algunos comandos de evento, cambiándolos por eventos comunes que son llamados en su lugar.

Comenzaremos por las "utilidades", necesarias para el resto del sistema.

Añadir Personaje
Verifica si hay espacio en la partida, si no la hay, manda al personaje a la "banca" (activa su interruptor de "banca" correspondiente).
X: Variable que recibe el id del héroe a añadir.
Uso: Cambias la variable que escogiste (donde están las "x" pones una variable, y la rotulas bien, para que no se pierda bajo ninguna circunstancia x'D). Esta variable recibirá el número de héroe en el que se aplicará la función de "añadir personaje", y así se llevará un "registro" de los héroes en la partida, lo que posibilita otros engines.
Notas: Necesitas reemplazar TODO cambio de grupo donde se añadan héroes por ésta función.

Código:
<>Condiciones y efectos [1hero] es 0
  <>Operación de variable [1hero] poner [x]
  <>Cambiar grupo [x] añadir
  <>Operación de variable [x] sumar 400 #offset*
  <>Operación de interruptor [Referencia por variable[x]] OFF
  <>
:Excepción
  <>Condiciones y efectos [2hero] es 0
    <>Operación de variable [2hero] poner [x]
    <>Cambiar grupo [x] añadir
    <>Operación de variable [x] sumar 400 #offset*
    <>Operación de interruptor [Referencia por variable[x]] OFF
    <>
  :Excepción
    <>Condiciones y efectos [3hero] es 0
      <>Operación de variable [3hero] poner [x]
      <>Cambiar grupo [x] añadir
      <>Operación de variable [x] sumar 400 #offset*
      <>Operación de interruptor [Referencia por variable[x]] OFF
      <>
    :Excepción
      <>Condiciones y efectos [4hero] es 0
        <>Operación de variable [4hero] poner [x]
        <>Cambiar grupo [x] añadir
        <>Operación de variable [x] sumar 400 #offset*
        <>Operación de interruptor [Referencia por variable[x]] OFF
        <>
      :Excepción
        <>Operación de variable [x] sumar 400 #offset*
        <>Operación de interruptor [Referencia por variable[x]] ON
        <>
      :Fin
      <>
    :Fin
    <>
  :Fin
  <>
:Fin
<>
Remover personaje
Verifica en qué campo está el héroe que se quiere remover. Dependiendo de ésto, re acomoda el resto de campos del "registro" (variables con los números de héroe en cada campo de la partida), y ejecuta finalmente la operación de remover al héroe, y finalmente activa su interruptor de banca. Son necesarias dos llamadas a ésta función para hacer salir COMPLETAMENTE al actor de la partida (del grupo y la banca).
Uso: Igual que el caso anterior, la misma variable es cambiada por el ID del personaje y se llama la función.
Notas: Necesitas reemplazar TODO cambio de grupo donde se remuevan héroes por ésta función.

Código:
<>Condiciones y efectos [1hero] es [x] igual
  <>Operación de variable [1hero] poner [2hero]
  <>Operación de variable [2hero] poner [3hero]
  <>Operación de variable [3hero] poner [4hero]
  <>Operación de variable [4hero] poner 0
  <>Cambiar grupo [x] Remover
  <>Operación de variable [x] sumar 400 #offset*
  <>Operación de interruptor [Referencia por variable[x]] ON
  <>
:Excepción
  <>Condiciones y efectos [2hero] es [x] igual
    <>Operación de variable [2hero] poner [3hero]
    <>Operación de variable [3hero] poner [4hero]
    <>Operación de variable [4hero] poner 0
    <>Cambiar grupo [x] Remover
    <>Operación de variable [x] sumar 400 #offset*
    <>Operación de interruptor [Referencia por variable[x]] ON
    <>
  :Excepción
    <>Condiciones y efectos [3hero] es [x] igual
      <>Operación de variable [3hero] poner [4hero]
      <>Operación de variable [4hero] poner 0
      <>Cambiar grupo [x] Remover
      <>Operación de variable [x] sumar 400 #offset*
      <>Operación de interruptor [Referencia por variable[x]] ON
      <>
    :Excepción
      <>Condiciones y efectos [4hero] es [x] igual
        <>Operación de variable [4hero] poner 0
        <>Cambiar grupo [x] añadir
        <>Operación de variable [x] sumar 400 #offset*
        <>Operación de interruptor [Referencia por variable[x]] OFF
        <>
      :Excepción
        <>Operación de variable [x] sumar 400 #offset*
        <>Operación de interruptor [Referencia por variable[x]] OFF
        <>
      :Fin
      <>
    :Fin
    <>
  :Fin
  <>
:Fin
<>

OPCIONAL (puede aligerar engines como los de cambio de personaje)
Hero_Refresh
Remueve TODOS los personajes y añade uno por uno los indicados por las variables.
Uso: Simplemente se llama a la función. Si las variables 1~4hero tienen 0 como valor, el grupo quedará vacío.

Código:
<>Operación de variable [HeroRefresher] Poner 0
<>Etiqueta 1
<>Operación de variable [HeroRefresher] Sumar 1
<>Cambio de grupo [HeroRefresher] Remover
<>Condiciones y efectos [HeroRefresher] es 55 o menor #sustituir por cantidad de héroes en BD
  <>Saltar a etiqueta 1
:Fin
<>Condiciones y efectos [1hero] distinto a 0
  <>Cambio de grupo [1hero] Añadir
:Fin
<>Condiciones y efectos [2hero] distinto a 0
  <>Cambio de grupo [2hero] Añadir
:Fin
<>Condiciones y efectos [3hero] distinto a 0
  <>Cambio de grupo [3hero] Añadir
:Fin
<>Condiciones y efectos [4hero] distinto a 0
  <>Cambio de grupo [4hero] Añadir
:Fin

GLOSARIO:

x: La variable que es usada como "operador" o parámetro para las "funciones" como añadir/remover personajes.

bhero: Significa Backup Hero. Es una variable temporal que aparecerá más adelante en otras funciones.

1hero~4hero: Variables que guardan las IDs de los personajes del grupo.

offset*: Este offset es una cuestión bastante complicada, y MUY importante de explicar.
El engine, como podrán haber visto, nombra algo llamado "banca". La idea de ésto es que la banca consista en interruptores designados a cada personaje. Estos interruptores significarían si un personaje está disponible o no, sin estar dentro de la partida. Son pensados para ser usados junto a un engine de cambio de partidas, al estilo de los Final Fantasy de PSX.
El offset entonces, es el número de interruptor donde comienzan estos interruptores menos uno (por ejemplo, Chimpandolfo, el héroe 1, tiene como interruptor el 4521. El valor offset* sería 4521-1=4520, pero claro, CON RESPECTO a la heroína 666, Alerina Matriciana, el interruptor sería 4520+666=5186, en tal caso sería 5186-1? NO, sería 5186-666).

Les dejaré esas de tarea xD, mañana les muestro cosas para las que pueden servirles, en RM2k3 claro xD. Ya me cansé de transcribir x'D.

Cualquier duda me dicen, porque no sé si he logrado aclararlo todo -_-U,
Orochii Zouveleki

PD.: Lo que me falta de presentarles es mi engine de "rotar héroes" (correrlos un espacio sea para delante o detrás), y uno extra que sería el de cambio de grupo, por engines y con interfaz distinta y personalizable.

#2 Re: [RM2k/3] Sistema de manejo de personajes el Lun Abr 25, 2011 1:09 pm

D.A.C.

avatar
¡Muy buen engine Orochii! Así demuestras que a pesar de que el RM2k/3 no tiene scripts, se puede lograr prácticamente cualquier cosa mediante sus engines. Una 'demo' no iría nada mal para terminar de rematar el tema. [+20 Makedas]
Por cierto, ¿en caso de mover un personaje a la 'banca' y añadirlo de nuevo después, se conservaría el equipamiento?




Si quieres verlo, haz click aquí.

#3 Re: [RM2k/3] Sistema de manejo de personajes el Lun Abr 25, 2011 5:33 pm

orochii

avatar
Si. La banca es sólo un conjunto de interruptores que serían usados después para saber si el personaje está disponible en, por ejemplo, un sistema de cambio de grupo. Ópalo Sonriente.
==
Ahí va la primer utilidad para las funciones anteriores. Respecto al demo, lo prepararé en cuanto termine de postear (y hacer en el caso del menú de cambio de grupo) los sistemas básicos.
He esperado al menos un post para... evaluar interés. Igual, si duraba más de uno o dos días (lo más) habría posteado igual, porque la idea es compartirlos y colaborar con el aprendizaje de aquellos quienes puedan agarrar algo útil de mi x'D.

ROTACIÓN DE PERSONAJES
Nivel: ¿Intermedio? x'D.

  • Requiere que las "funciones" de añadir/remover estén en uso (lo más importante es que se vaya llevando el "registro" de los miembros del grupo y su posición actual).
  • También es necesaria la última, la HeroRefresh.


Explicación breve del engine: Lo que hará es simplemente reacomodar los valores guardados, y luego usará la "función" Hero_Refresh. Tan sencillo como eso x'D. Claro, eso sucedería al ser presionada una tecla.
Es aconsejable que la activación por tecla sea "incorporada" dentro de otro proceso paralelo que estén usando previamente, para no sobrecargar de procesos al maker. En caso de que no haya otro, pues si, no queda otra xD.


Usaremos la variable "backup_hero" para respaldar uno de los campos de la partida guardados en las variables y así "rotar" los héroes. También haré unos esquemitas en Paint en caso que les ayude a ubicarse Ópalo Guiño.

http://img708.imageshack.us/img708/9199/frontrotation.png
Código:
Son simples cambios de variables xD. En este ejemplo, haré lo que me motivó a empezar este post :).
<>Asignar teclas [var x] (teclas numéricas: 10-19)
<>Condiciones y efectos [var x] igual a 17 #Tecla 7 del teclado numérico
  <>Operaciones de variable [bhero] Poner [4hero]
  <>Operaciones de variable [4hero] Poner [3hero]
  <>Operaciones de variable [3hero] Poner [2hero]
  <>Operaciones de variable [2hero] Poner [1hero]
  <>Operaciones de variable [1hero] Poner [bhero]
  <>Llamar evento común [HeroRefresh]
  <>
:Fin
<>
http://img857.imageshack.us/img857/6757/rearrotation.png
Código:

Recuerden no llamar más de una vez el asignar teclas por evento. Si no lo habías llamado antes en ese evento común...
<>Asignar teclas [var x] (teclas numéricas: 10-19)
==

<>Condiciones y efectos [var x] igual a 19 #Tecla 9 del teclado numérico
  <>Operaciones de variable [bhero] Poner [1hero]
  <>Operaciones de variable [1hero] Poner [2hero]
  <>Operaciones de variable [2hero] Poner [3hero]
  <>Operaciones de variable [3hero] Poner [4hero]
  <>Operaciones de variable [4hero] Poner [bhero]
  <>Llamar evento común [HeroRefresh]
  <>
:Fin
<>
Nota: Me confundí como quince minutos cuando HICE los esquemas x'D, pero ya ahora los ví y me di cuenta que era tan sencillo D':. x'DDD, me hice tormenta en vaso de agua como dirían popularmente x'D.

Makeen mucho y no dejen de enginear mis queridos amigos y amigas del maker,
Orochii Zouveleki

PD.: El menú de cambio es un SMP, entonces es por ello que me entra pereza xd. No tiene nada complicado xD.

Contenido patrocinado


Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

Permisos de este foro:
No puedes responder a temas en este foro.