Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.
Conectarse

Recuperar mi contraseña

Temas importantes
----------------------------------------
Páginas con recursos RPG Maker
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Afiliados
Estadísticas
Tenemos 3766 miembros registrados.
El último usuario registrado es stranger2525.

Nuestros miembros han publicado un total de 85800 mensajes en 12217 argumentos.

[XP] DFS Equip Restrictions

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [XP] DFS Equip Restrictions

Mensaje por Wecoc el 2017-10-22, 23:00

Éste script permite añadir restricciones que impidan equipar algo en cierto caso.
Afecta a la ventana de equipo, si un equipo no es equipable no puede seleccionarse en la ventana de equipo, así de fácil.

Screen:

Las restricciones se definen al iniciar partida y se pueden editar a medio juego tanto como se quiera, y un mismo equipamento puede tener múltiples restricciones.
Para que eso sea posible el script requiere el Data File Save.

Script

Código:
#==============================================================================
# ** [XP] DFS Equip Restrictions v1.0
#------------------------------------------------------------------------------
# Autor: Wecoc (no requiere créditos)
# ATENCIÓN! Requiere el script Data File Save
#==============================================================================

#--------------------------------------------------------------------------
# * Crear variable de restricciones de equipo
#--------------------------------------------------------------------------
for Klass in [RPG::Weapon, RPG::Armor]
  class Klass
    define_method(:equip_restrictions) { @equip_restrictions = [] }
  end
end
#--------------------------------------------------------------------------
# * Definir nueva restricción a un equipo
#--------------------------------------------------------------------------
def set_equip_restriction(equip, restriction)
  equip.equip_restrictions.push(restriction)
end
#--------------------------------------------------------------------------
# * Vaciar todas las restricciones de un equipo
#--------------------------------------------------------------------------
def clear_equip_restrictions(equip)
  equip.equip_restrictions.clear
end

#==============================================================================
# ** Scene_Title
#==============================================================================

class Scene_Title
  alias define_equip_rest_start command_new_game unless $@
  def command_new_game
    define_equip_rest_start
    #------------------------------------------------------------------------
    # Definir aquí las restricciones por defecto de los equipos
    # Ejemplo: set_equip_restriction($data_weapons[1], "self.level >= 10")
    
    
    #------------------------------------------------------------------------
  end
end

class Window_EquipItem < Window_Selectable
  #--------------------------------------------------------------------------
  # * Draw Item
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    x = 4 + index % 2 * (288 + 32)
    y = index / 2 * 32
    case item
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
    when RPG::Armor
      number = $game_party.armor_number(item.id)
    end
    disabled = false
    if item != nil && item.equip_restrictions.size > 0
      if item != nil && item.equip_restrictions.size > 0
        for r in item.equip_restrictions
          disabled |= (@actor.instance_eval(r) == false)
        end
      end
    end
    if disabled == false
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
    self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  end
end

#==============================================================================
# ** Scene_Equip
#==============================================================================

class Scene_Equip
  #--------------------------------------------------------------------------
  # * Update Item
  #--------------------------------------------------------------------------
  alias update_item_equip_rest update_item
  def update_item
    if Input.trigger?(Input::C)
      item = @item_window.item
      disabled = false
      if item != nil && item.equip_restrictions.size > 0
        for r in item.equip_restrictions
          disabled |= (@actor.instance_eval(r) == false)
        end
        if disabled
          $game_system.se_play($data_system.buzzer_se)
          return
        end
      end
    end
    update_item_equip_rest
  end
end

Ponedlo encima de main. No requiere créditos.

Instrucciones

Para definir una restricción hay que usar un método concreto.
Se puede usar en el espacio del script de la línea 40 para que esa restricción sea la que tiene por defecto el arma o protector (aquí se definen todas las restricciones por defecto que se quieran). El mismo método también se puede llamar del mismo modo desde Llamar script.

set_equip_restriction(equip, restriction)
Ejemplo: set_equip_restriction($data_weapons[1], "self.level >= 10")
Eso significa que el arma de ID 1 solo puede usarse si el que quiere usarla tiene nivel 10 o superior.

Para limpiar todas las restricciones de un determinado equipo debes usar:
clear_equip_restrictions(equip)

Para quitar una restricción concreta puedes usar algo así:
$data_weapons[ID].equip_restrictions.delete(restriction)
$data_armors[ID].equip_restrictions.delete(restriction)

Nótese que si al cumplirse la restricción el personaje ya tiene equipado ese equipo, seguirá teniendolo equipado igual. Para desequiparlo automáticamente hay que comprobar esa restricción a mano donde sea necesario (donde pueda haber cambios en esa restricción concreta).

Posibles restricciones

En las restricciones puedes poner cualquier cosa, pero pondré algunos ejemplos.
Cambiad lo que está en mayúscula por la variable que corresponda.

Restricción por clase

Código: "self.class_id == ID"
Podrías hacer que desde la base de datos todos los equipos fueran equipables por todas las clases y luego definir desde el script una restricción de clase en todos.
Eso haría que en esa ventana pudieras ver todo el equipo pero solo activado el que puedes equipar realmente.

Restricción por skill

Código: "self.skills.include?(ID)"
Solo es equipable si el personaje conoce cierta skill.

Restricción por nivel

Código: "self.level >= NIVEL"
Solo es equipable si el personaje tiene cierto nivel o superior.

Restricción por estado

Código: "self.state?(ID)"
Solo podrá equiparlo si tiene cierto estado.

Código: "self.state?(ID) == false"
Solo podrá equiparlo si NO tiene cierto estado.

Restricción por party

Código: "$game_party.actors.include?($game_actors[ID])"
Solo podrá equiparlo si cierto actor está en la party.

Restricción por inventario

Código: "$game_party.item_number(ID) > 0"
Solo podrá equiparlo si la party tiene cierto item.

Restricción por interruptor

Código: "$game_switches[ID] == true"
Solo puede equiparlo si un interruptor está activo

Esto es todo, espero que os sea de utilidad :)


Última edición por Wecoc el 2017-10-22, 23:41, editado 1 vez
avatar
Wecoc
Administrador
Administrador



Créditos 9371

Gracias : 517

Volver arriba Ir abajo

RPG Maker XP Re: [XP] DFS Equip Restrictions

Mensaje por xXIsrael0499Xx el 2017-10-22, 23:09

Mmmmm.... interesante, muy interesante, oh por dios se me acaba de ocurrir algo que de seguro no voy hacer, así que bueno gracias por el script y aparte los tutos que estas subiendo, así no llenamos el post de puras preguntas de como usar el script y matas 2 pájaros de un tiro xDDD.
avatar
xXIsrael0499Xx
Principiante
Principiante

0/3

Créditos 1095

Gracias : 56

Volver arriba Ir abajo

RPG Maker XP Re: [XP] DFS Equip Restrictions

Mensaje por Wecoc el 2017-10-24, 15:53

xXIsraelF100DXx escribió:oh por dios se me acaba de ocurrir algo que de seguro no voy hacer
Si es una idea interesante podrías al menos decir qué es xDD Bueno igualmente gracias por comentar.

Wecoc escribió:Nótese que si al cumplirse la restricción el personaje ya tiene equipado ese equipo, seguirá teniendolo equipado igual. Para desequiparlo automáticamente hay que comprobar esa restricción a mano donde sea necesario

Voy a poner ejemplos prácticos de uso de script para que se vea eso en acción.

________________________

- Equipo enlazado. Solo puedes equipar B si tienes equipado A. Al desequipar A se desequipa B.

El ejemplo de equipo que usaré para esta muestra es el siguiente:

A - [Accesorio] Amuleto relámpago. Te da el poder astral necesario para levantar el martillo de Thor. (ID: 10)
B - [Arma] Martillo de Thor (ID: 20)

1) Al principio del script se define la restricción a B de que tienes que tener equipado A.

set_equip_restriction($data_weapons[20], "self.armor4_id == 10")

2) Luego tienes que aplicar una comprobación al cambiar el equipo.

Para hacerlo hay que usar de base un script que se encuentra aquí:
Add-Ons de la Base de Datos usando scripts cortos
Concretamente el último, el del apartado ¿Cómo modifico algo especial al cambiar el equipamento?
Siguiendo el esquema de la última parte del script hay que añadirle esto:

Código:
if old_armor4 == 10 and new_armor4 != 10 # Si desequipas el amuleto
  if @weapon_id == 20 # Si tienes el arma equipada
    safe_equip(0, 0) # La ranura 0 (Armas), desequiparla
  end
end

La primera línea corresponde a A y la segunda a B.

Este caso es complicado porque el modo en el que se efectúan los equipos en XP tiene varios problemas, por eso se necesita ese segundo script. Muchas veces no será necesario todo eso.

- Equipo multiranura. Un equipo ocupa más de una ranura a la vez.

Similar al caso anterior, tenemos 2 equipos, la diferencia es que ahora al equipar uno de los dos se equipa automáticamente el otro y lo mismo al desequipar. Ejemplo pensado para equipos que tienen varias partes inseparables en uno, y cada parte corresponde a una ranura.

A - [Arma] Arma ancestral. Tiene una cinta atada que otorga poder mágico. (ID: 10)
B - [Accesorio] Cinta del arma ancestral. (ID: 20)

El script de comprobación de equipo de antes quedaría algo así, bastante similar a antes:

Código:
# Equipar amuleto al equipar arma
if new_weapon == 10 and old_weapon != 10
  safe_equip(4, 20)
end
# Desequipar amuleto al desequipar arma
if old_weapon == 10 and new_weapon != 10
  safe_equip(4, 0)
end

¿Pero qué ocurre si intentamos equipar el amuleto?
Hay dos modos de aplicarlo. El primero es que ocurra lo mismo pero al revés, es decir, al equipar el amuleto automáticamente se equipe el arma.
En este caso por lo tanto NO SE NECESITA el script de restricciones en realidad, a no ser que se les quiera añadir además alguna condición extra.
Sería cuestión de hacer lo mismo otra vez en el script de equipo.

Código:
# Equipar arma al equipar amuleto
if new_armor4 == 20 and old_armor4 != 20
  safe_equip(0, 10)
end
# Desequipar arma al desequipar amuleto
if old_armor4 == 20 and new_armor4 != 20
  safe_equip(0, 0)
end

Alternativamente, de modo más interesante, se puede hacer que el amuleto no pueda equiparse directamente NUNCA.
En este caso sí tendrá una restricción del script, una restricción que simplemente nunca se cumplirá.

set_equip_restriction($data_armors[20], "false")

________________________

Partiendo de los dos ejemplos puestos podéis hacer otras opciones similares, por ejemplo un equipo que no permita equipar ciertos protectores (y se desequipen directamente al equiparlo) y ese tipo de cosas.
avatar
Wecoc
Administrador
Administrador



Créditos 9371

Gracias : 517

Volver arriba Ir abajo

RPG Maker XP Re: [XP] DFS Equip Restrictions

Mensaje por xXIsrael0499Xx el 2017-10-27, 12:10

Wecoc escribió:Si es una idea interesante podrías al menos decir qué es xDD

xDDD, bueno no es una idea asi scriptera, bien chachi, si no mas bien se me ocurrieron cosas donde se pueden usar este script, por ejemplo, lo que se me ocurrio fue 2 cosas:

1) Añadir durabilidad a las armas, equipo, ect, para que cuando se rompan es decir se acabe la durabilidad, pues por ende no se puedan equipar, y para hacer mas bonita la cosa, que luego de una batalla salga una especie de interfaz que diga el porcentaje de cuanto bajo la durabilidad del arma,etc (Si es que es por porcentaje), y que a la par se puede expandir esa interfaz, para que diga la EXP ganada y todas esas weas.

2) Pues esto es mas sencillo, simplemente se me ocurrio una escena donde el jugador en la historia pase algo y no pueda usar X objeto, o X arma, entonces en un mapa o en mapas especificos no se pueda equipar el arma, por que se yo "La tierra es sagrada, asi que no puedes portar armas, en la mano" o algo asi bien loco.

Pero bueno como no es la gran cosa no lo comente por eso XD, y de seguro que ya hay algo parecido por alli, pero bueno me importa un comino si alguien ya lo invento y si alguien ya lo invento pues...pasame el link, asi que bueno alejandonos un poquito del tema, muchas gracias por seguir explicando como se usa el script y las diferentes formas de usarlo y eso.
avatar
xXIsrael0499Xx
Principiante
Principiante

0/3

Créditos 1095

Gracias : 56

Volver arriba Ir abajo

RPG Maker XP Re: [XP] DFS Equip Restrictions

Mensaje por Wecoc el 2017-10-27, 15:48

1) Añadir durabilidad a las armas, equipo, ect, para que cuando se rompan es decir se acabe la durabilidad, pues por ende no se puedan equipar, y para hacer mas bonita la cosa, que luego de una batalla salga una especie de interfaz que diga el porcentaje de cuanto bajo la durabilidad del arma,etc (Si es que es por porcentaje), y que a la par se puede expandir esa interfaz, para que diga la EXP ganada y todas esas weas.

Puesto que al tener varias armas de mismo ID cada una debería igualmente tener una durabilidad distinta, lo que dices no puede hacerse con el sistema normal del RPG maker ni con este script. Para aplicar esa idea habría que usar el IGOS.

2) Pues esto es mas sencillo, simplemente se me ocurrio una escena donde el jugador en la historia pase algo y no pueda usar X objeto, o X arma, entonces en un mapa o en mapas especificos no se pueda equipar el arma, por que se yo "La tierra es sagrada, asi que no puedes portar armas, en la mano" o algo asi bien loco.

Sep, eso es factible. Recomiendo si se hace algo así hacer un pequeño engine al transportarse en ese mapa que compruebe si el equipo es uno de los prohibidos y lo quite en ese caso. En principio no es un engine complicado.
avatar
Wecoc
Administrador
Administrador



Créditos 9371

Gracias : 517

Volver arriba Ir abajo

RPG Maker XP Re: [XP] DFS Equip Restrictions

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


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