Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

[RMXP] LM² - Elaboración

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [RMXP] LM² - Elaboración

Mensaje por AsFzKakarotto el 2018-05-07, 08:09

Como su nombre lo dice se trata de un sistema para elaborar Artículos ya sea Objetos, Armas o Armaduras con un máximo de
4 Materiales necesarios que se pueden ir variando en diferentes tipos.
La diferencia que nos puede dar este sistema, es que posee Niveles en los cuales nos permitirá crear artículos con dificultades.
Mientras menos nivel se tenga, menos tolerante será a la hora de crear un artículo, haciendo que gastemos material en balde por no tener la experiencia suficiente.



Instrucciones:
El sistema lo he traducido prácticamente con todo lo necesario pero de igual forma les dejo lo fundamental:

Buscar en Scene_Title:
$game_player        = Game_Player.new
Añada abajo esta clave:
$game_craft         = Game_Craft.new

Buscar en Scene_Save:
Marshal.dump($game_player, file)
Añada abajo esta clave:
Marshal.dump($game_craft, file)

Buscar en Scene_Load:
$game_player        = Marshal.load(file)
Añada abajo esta clave:
$game_craft         = Marshal.load(file)

Para llamar el Menú de Crafting, usar el siguiente llamado de script:
$scene = Scene_Crafting.new

Configuración de Recetas

RECIPE[id] = [dif , [tipo, it_id, it_qty],[mat_tipo, mat_id, mat_qty],...]

id = Id de receta, contando apartir del cero
dif = Dificultad de receta, 0 = fácil, 1 = médio, 2 = difícil
tipo: El tipo de artículo a ser generado [0 objetos, 1 armas, 2 armaduras].
it_id: Id del artículo a generar de la base de datos.
it_qty: Cantidad del artículo a ser generado.
mat_tipo: Tipo de artículo como requisito [0 objetos, 1 armas, 2 armaduras].
mat_id: Id del artículo en la base de datos usado como requisito.
mat_qty: Cantidad necesaria para crear.

Script:
Código:
#===============================================================================
# LM² - Crafting
# Creado por LeonMM
# Traducción al Castellano por: AsFzKakarotto
#===============================================================================
module LMM_Craft
#===============================================================================
# Instalación:
#------------------------------------------------------------------------------
# Buscar en Scene_Title:
# $game_player        = Game_Player.new
# Añada abajo esta clave:
# $game_craft         = Game_Craft.new
#------------------------------------------------------------------------------
# Buscar en Scene_Save:
# Marshal.dump($game_player, file)
# Añada abajo esta clave:
# Marshal.dump($game_craft, file)
#------------------------------------------------------------------------------
# Buscar en Scene_Load:
# $game_player        = Marshal.load(file)
# Añada abajo esta clave:
# $game_craft         = Marshal.load(file)
#------------------------------------------------------------------------------
# Para llamar el Menú de Crafting, usar el siguiente llamado de script:
# $scene = Scene_Crafting.new
#------------------------------------------------------------------------------
# Cantidad de recetas visibles en la pantalla / Máx 8.
  RECIPE_VIEW = 8
# CANTIDAD DE RECETAS (Si añades una nueva y no aparece, incrementar esto)
  RECIPE_Q = 9
#------------------------------------------------------------------------------
# Configuración de Recetas

# RECIPE[id] = [dif , [tipo, it_id, it_qty],[mat_tipo, mat_id, mat_qty],...]

# id = Id de receta, contando apartir del cero
# dif = Dificultad de receta, 0 = fácil, 1 = médio, 2 = difícil
# tipo: El tipo de artículo a ser generado [0 objetos, 1 armas, 2 armaduras].
# it_id: Id del artículo a generar de la base de datos.
# it_qty: Cantidad del artículo a ser generado.
# mat_tipo: Tipo de artículo como requisito [0 objetos, 1 armas, 2 armaduras].
# mat_id: Id del artículo en la base de datos usado como requisito.
# mat_qty: Cantidad necesaria para crear.
#
# Máximo de 4 artículos pueden ser usados como requisito.
#------------------------------------------------------------------------------

  RECIPES = []
  RECIPES[0] = [1, [1, 4, 3], [0, 3, 2], [1, 1, 7]]              
  RECIPES[1] = [0, [0, 1, 1], [0, 13, 2]]
  RECIPES[4] = [2, [0, 10, 1], [0, 13, 2], [0, 12, 2], [0, 11, 1]]
  RECIPES[8] = [0, [0, 7, 1], [0, 3, 2], [0, 4, 2], [0, 5, 2], [0, 6, 2]]

#------------------------------------------------------------------------------
  # Para modificar la fuente de textos de la ventana de aplicaciones.
  REQ_FONT = "Franklin Gothic Medium"
  REQ_SIZE = 19
  # Para modificar el nombre de la imagen para las recetas
  # (Al lado del nombre debe ir la id de número de las recetas: 0,1...)
  REC_TERM = "Recipe_"
  # Las Imagenes deben estar dentro de la carpera Window_Craft, y
  # dicha carpeta dentro de la Carpeta Pictures de su proyecto.
  # Modificar los términos de Dificuldad en la Receta.
  DIF_TERM = ["Fácil", "Médio", "Difícil"]
  # Nivel máximo de Crafting
  MAX_LEVEL = 10
  # Base para el cálculo de la experiencia necesaria
  BASE_EXP = 25
  # Taza de éxito para cada nivel y dificultad
  # (Cantidad para la Dificuldad = Nivel Máximo + 1)
  ACC_RATE = []
  ACC_RATE[0] = [30,35,40,45,50,65,75,80,85,95,100]
  ACC_RATE[1] = [20,25,30,35,45,50,65,70,80,90,100]
  ACC_RATE[2] = [5,15,20,25,30,35,45,55,65,75,85]
  # Exp ganada con Errores.
  EXP_ERRO = 5
  # Exp ganada con Aciertos.
  EXP_ACERTO = [10, 15, 20]
  # Para activar alguna receta, debe de usar el siguiente llamado de script:
  #  $game_craft.recipes[id] = true
  # id = id de la receta
  # (Para desactivar alguna receta, basta con cambiar true por false)
end

# No editar empezando desde aquí sin conocimientos previos.

class Game_Craft  
  attr_accessor :recipes
  attr_accessor :level
  attr_accessor :exp
  attr_accessor :next_exp
  def initialize
    @recipes = []
    for i in 0..LMM_Craft::RECIPE_Q - 1
      @recipes.push(false)
    end  
    @level = 0
    @exp = 0
    @exp_list = Array.new(LMM_Craft::MAX_LEVEL+1)
    make_exp_list
    @next_exp = @exp_list[@level+1]
  end  
  def make_exp_list
    @maxexp = 0
    @exp_list[0] = 0
    @exp_list[1] = LMM_Craft::BASE_EXP
    for i in 2..LMM_Craft::MAX_LEVEL
      if i == LMM_Craft::MAX_LEVEL
        @exp_list[i] = 0
      else
        @exp_list[i] = LMM_Craft::BASE_EXP + @exp_list[i-1] + @exp_list[i-2]
      end
      @maxexp += @exp_list[i]
    end
  end
  def add_exp(exp)
    @exp += exp
    if @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0
      @level += 1
      @next_exp = @exp_list[@level+1]
      @exp = 0
    end  
  end  
end  

class Scene_Crafting
  include LMM_Craft
  def main
    @fundo = Spriteset_Map.new
    @black = Sprite.new
    @black.bitmap = Bitmap.new(640, 480)
    @black.bitmap.fill_rect(Rect.new(0,0,640,480), Color.new(0,0,0,75))
    @black.z = 15
    opt = []
    for i in 0..RECIPE_Q - 1
      opt.push("")
    end  
    @command_window = Window_Command.new(192, opt )
    @command_window.index = 0
    @command_window.visible = false
    @BG = Sprite.new
    @BG.bitmap = RPG::Cache.picture("Window_Craft/Base_window")
    @BG.z = 16    
    @Sel = Sprite.new
    @Sel.bitmap = RPG::Cache.picture("Window_Craft/Marker")
    @Sel.x = 16
    @Sel.y = 55 + (@command_window.index * 39)
    @Sel.z = 17
    @LVL = Sprite.new
    @LVL.bitmap = Bitmap.new(20,25)
    @LVL.x = 62; @LVL.y = 377; @LVL.z = 18
    @LVL.bitmap.font.name = REQ_FONT
    @LVL.bitmap.font.size = REQ_SIZE
    @LVL.bitmap.font.color = Color.new(0, 0, 0, 255)  
    @LVL.bitmap.clear
    @LVL.bitmap.draw_text(0, 0, 20, 25, $game_craft.level.to_s,1)
    @TEXT = Sprite.new
    @TEXT.bitmap = Bitmap.new(198,25)
    @TEXT.x = 362; @TEXT.y = 377; @TEXT.z = 18
    @TEXT.bitmap.font.name = REQ_FONT
    @TEXT.bitmap.font.size = REQ_SIZE
    @TEXT.bitmap.font.color = Color.new(0, 0, 0, 255)  
    @TEXT.bitmap.clear
    @TEXT.bitmap.draw_text(0, 0, 198, 25, "Esperando...",1)
    @LVLBAR = Sprite.new
    @LVLBAR.bitmap = Bitmap.new(202,9)
    @LVLBAR.x = 83; @LVLBAR.y = 385; @LVLBAR.z = 18
    @LVLBARIMG = RPG::Cache.picture("Window_Craft/Exp_Bar")
    @LVLBARRECT = Rect.new(0,0, @LVLBARIMG.width * $game_craft.exp / $game_craft.next_exp, @LVLBARIMG.height)
    @LVLBAR.bitmap.clear
    @LVLBAR.bitmap.blt(0,0, @LVLBARIMG, @LVLBARRECT)
    @RequireWin = Require_Win.new
    @Confirm = Sprite.new
    if $game_craft.recipes[@command_window.index] == true
      if check_ing
        @Confirm.bitmap = RPG::Cache.picture("Window_Craft/ConfirmOn")
      else
        @Confirm.bitmap = RPG::Cache.picture("Window_Craft/ConfirmOff")
      end  
    else
      @Confirm.bitmap = RPG::Cache.picture("Window_Craft/ConfirmNoR")
    end  
    @Confirm.x = 371
    @Confirm.y = 294
    @Confirm.z = 17
    @Recipes = [Sprite.new,Sprite.new,Sprite.new,Sprite.new,Sprite.new,Sprite.new,Sprite.new,Sprite.new]
    for i in 0 .. RECIPE_VIEW - 1
      if $game_craft.recipes[i] == true
        @Recipes[i].bitmap = RPG::Cache.picture("Window_Craft/"+REC_TERM+(i).to_s)
      else
        @Recipes[i].bitmap = RPG::Cache.picture("Window_Craft/Norecipe")
      end
        @Recipes[i].x = 22
        @Recipes[i].y = 61 + (i * 39)
        @Recipes[i].z = 17
    end
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @command_window.dispose
    @fundo.dispose
    @black.dispose
    @BG.dispose
    @Sel.dispose
    @LVL.dispose
    @TEXT.dispose
    @LVLBAR.dispose
    @RequireWin.dispose
    @Confirm.dispose
    for i in 0 .. @Recipes.size - 1
      @Recipes[i].dispose
    end  
    if $scene.is_a?(Scene_Title)
      Graphics.transition
      Graphics.freeze
    end
  end
  
  def update
    @fundo.update
    @black.update
    @BG.update
    @command_window.update
    @RequireWin.update
    if @command_window.index >= RECIPE_VIEW
      @cmw_in = RECIPE_VIEW - 1
      for i in 0 .. RECIPE_VIEW - 1
        if $game_craft.recipes[@command_window.index - (RECIPE_VIEW - 1) + i] == true
          @Recipes[i].bitmap = RPG::Cache.picture("Window_Craft/"+REC_TERM+(@command_window.index - (RECIPE_VIEW - 1) + i).to_s)
        else
          @Recipes[i].bitmap = RPG::Cache.picture("Window_Craft/Norecipe")
        end
      end      
    else
      @cmw_in = @command_window.index
      for i in 0 .. RECIPE_VIEW - 1
        if $game_craft.recipes[i] == true
          @Recipes[i].bitmap = RPG::Cache.picture("Window_Craft/"+REC_TERM+(i).to_s)
        else
          @Recipes[i].bitmap = RPG::Cache.picture("Window_Craft/Norecipe")
        end
      end        
    end  
    @Sel.y = 55 + (@cmw_in * 39)
    if $game_craft.recipes[@command_window.index] == true
      @RequireWin.rec_id(RECIPES[@command_window.index])
      if check_ing
        update_command
        @Confirm.bitmap = RPG::Cache.picture("Window_Craft/ConfirmOn")
      else
        @Confirm.bitmap = RPG::Cache.picture("Window_Craft/ConfirmOff")
      end  
    else
      @RequireWin.rec_id(nil)
      @Confirm.bitmap = RPG::Cache.picture("Window_Craft/ConfirmNoR")
    end    
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      #Altere aqui caso deseje retornar em outra cena.
      $scene = Scene_Map.new
      return
    end
  end
  def update_command
    if Input.trigger?(Input::C)
      $game_system.se_play($data_system.equip_se)
      @try = rand(100) + 1
      if(@try <= ACC_RATE[RECIPES[@command_window.index][0]][$game_craft.level])
        case RECIPES[@command_window.index][1][0]
          when 0
            $game_party.gain_item(RECIPES[@command_window.index][1][1], RECIPES[@command_window.index][1][2])
          when 1
            $game_party.gain_weapon(RECIPES[@command_window.index][1][1], RECIPES[@command_window.index][1][2])
          when 2
            $game_party.gain_armor(RECIPES[@command_window.index][1][1], RECIPES[@command_window.index][1][2])
        end
        $game_craft.add_exp(EXP_ACERTO[RECIPES[@command_window.index][0]])
        @TEXT.bitmap.font.color = Color.new(0, 150, 0, 255)  
        @TEXT.bitmap.clear
        @TEXT.bitmap.draw_text(0, 0, 198, 25, "¡¡Artículo Creado!!",1)        
      else
        $game_craft.add_exp(EXP_ERRO)
        @TEXT.bitmap.font.color = Color.new(255, 0, 0, 255)  
        @TEXT.bitmap.clear
        @TEXT.bitmap.draw_text(0, 0, 198, 25, "¡¡Falló en Crear!!",1)
      end  
      for i in 2...RECIPES[@command_window.index].size
        case RECIPES[@command_window.index][i][0]
          when 0
            $game_party.lose_item(RECIPES[@command_window.index][i][1], RECIPES[@command_window.index][i][2])                      
          when 1
            $game_party.lose_weapon(RECIPES[@command_window.index][i][1], RECIPES[@command_window.index][i][2])
          when 2
            $game_party.lose_armor(RECIPES[@command_window.index][i][1], RECIPES[@command_window.index][i][2])
        end
      end
      @LVLBARRECT = Rect.new(0,0, @LVLBARIMG.width * $game_craft.exp / $game_craft.next_exp, @LVLBARIMG.height)
      @LVLBAR.bitmap.clear
      @LVLBAR.bitmap.blt(0,0, @LVLBARIMG, @LVLBARRECT)
      @LVL.bitmap.clear
      @LVL.bitmap.draw_text(0, 0, 20, 25, $game_craft.level.to_s,1)
    end
  end
  def check_ing
    for i in 2..RECIPES[@command_window.index].size-1
      case RECIPES[@command_window.index][i][0]
      when 0
        unless $game_party.item_number(RECIPES[@command_window.index][i][1]) >= RECIPES[@command_window.index][i][2]
          return false
        end  
      when 1
        unless $game_party.weapon_number(RECIPES[@command_window.index][i][1]) >= RECIPES[@command_window.index][i][2]
          return false
        end        
      when 2
        unless $game_party.armor_number(RECIPES[@command_window.index][i][1]) >= RECIPES[@command_window.index][i][2]
          return false
        end        
      end      
    end
    return true
  end
end

class Require_Win < Sprite
  include LMM_Craft
  def initialize
    super
    self.bitmap = Bitmap.new(268,253)
    self.x = 329;self.y = 38;self.z = 18
    @rec_id = nil
    self.bitmap.font.name = REQ_FONT
    self.bitmap.font.size = REQ_SIZE
    self.bitmap.font.color = Color.new(0, 0, 0, 255)    
    update
  end  
  def rec_id(id)
    @rec_id = id
  end  
  def update
    super
    self.bitmap.clear
    if @rec_id != nil
      for i in 2..@rec_id.size-1
        case @rec_id[i][0]
        when 0
          maticon = RPG::Cache.icon($data_items[@rec_id[i][1]].icon_name)
          self.bitmap.blt(6, 97 + ((i - 2) * 42), maticon, Rect.new(0, 0, 24, 24), 255)          
          text = $data_items[@rec_id[i][1]].name
          self.bitmap.draw_text(39, 99 + ((i - 2) * 42), 154, 20, text,0)          
          text2 = "#{@rec_id[i][2].to_s} / #{$game_party.item_number(@rec_id[i][1])}"
          self.bitmap.draw_text(190, 99 + ((i - 2) * 42), 76, 20, text2,1)          
        when 1
          maticon = RPG::Cache.icon($data_weapons[@rec_id[i][1]].icon_name)
          self.bitmap.blt(6, 97 + ((i - 2) * 42), maticon, Rect.new(0, 0, 24, 24), 255)          
          text = $data_weapons[@rec_id[i][1]].name
          self.bitmap.draw_text(39, 99 + ((i - 2) * 42), 154, 20, text,0)          
          text2 = "#{@rec_id[i][2].to_s} / #{$game_party.weapon_number(@rec_id[i][1])}"
          self.bitmap.draw_text(190, 99 + ((i - 2) * 42), 76, 20, text2,1)            
        when 2
          maticon = RPG::Cache.icon($data_armors[@rec_id[i][1]].icon_name)
          self.bitmap.blt(6, 97 + ((i - 2) * 42), maticon, Rect.new(0, 0, 24, 24), 255)          
          text = $data_armors[@rec_id[i][1]].name
          self.bitmap.draw_text(39, 99 + ((i - 2) * 42), 154, 20, text,0)          
          text2 = "#{@rec_id[i][2].to_s} / #{$game_party.armor_number(@rec_id[i][1])}"
          self.bitmap.draw_text(190, 99+ ((i - 2) * 42), 76, 20, text2,1)            
        end
      end
      case @rec_id[1][0]
      when 0  
        resulticon = RPG::Cache.icon($data_items[@rec_id[1][1]].icon_name)
        self.bitmap.blt(13, 11, resulticon, Rect.new(0, 0, 24, 24), 255)
        desc = $data_items[@rec_id[1][1]].name
      when 1
        resulticon = RPG::Cache.icon($data_weapons[@rec_id[1][1]].icon_name)
        self.bitmap.blt(13, 11, resulticon, Rect.new(0, 0, 24, 24), 255)
        desc = $data_weapons[@rec_id[1][1]].name        
      when 2        
        resulticon = RPG::Cache.icon($data_armors[@rec_id[1][1]].icon_name)
        self.bitmap.blt(13, 11, resulticon, Rect.new(0, 0, 24, 24), 255)
        desc = $data_armors[@rec_id[1][1]].name      
      end            
      self.bitmap.draw_text(51, 12, 214,16, desc + (" X "+ @rec_id[1][2].to_s) + (" | " + DIF_TERM[@rec_id[0]]) + (" | " +ACC_RATE[@rec_id[0]][$game_craft.level].to_s + "%"),1)    
    end
  end
end

Imágenes Necesarias + Demostración:

http://share.cherrytree.at/showfile-31202/lm²___crafting.zip
avatar
AsFzKakarotto
Soñador
Soñador

0/3

Créditos 320

Gracias : 70

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] LM² - Elaboración

Mensaje por Súper Mega Iskachu 2000 el 2018-05-07, 12:51

O muchas gracias AsFzKakarotto justo lo que necesitaba te lo agradezco mucho de verdad.
avatar
Súper Mega Iskachu 2000
Iniciado
Iniciado

0/3

Créditos 49

Gracias : 7

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] LM² - Elaboración

Mensaje por xXIsrael0499Xx el 2018-05-07, 15:26

Se ve bastante interesante, ademas me gusta la interfaz "Simple pero util". Una pregunta ya que solo es una traduccion tuyo, ¿Sabes si el autor original pide creditos? Es solo para asegurar y no se vayan a comenter liadas.

Aunque claro que por tu parte mereces tus respetivos agradecimientos.

Saludos.
avatar
xXIsrael0499Xx
Veterano
Veterano

0/3

Créditos 2043

Gracias : 113

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] LM² - Elaboración

Mensaje por AsFzKakarotto el 2018-05-07, 16:45

Pues si, está bien mencionar los créditos de hecho en el sitio de su creador no se habla mucho de ellos, solo para el diseñador de las imágenes quien es Sworgui, con respecto al creador quien es LeonMM (Puesto en el Script) no menciona nada de los créditos hacia su propia creación, aunque por mi parte todo pequeño aporte de alguien debe ser al menos mencionado en cada proyecto ¿no?. Saludos y me alegro que les haya interesado.
avatar
AsFzKakarotto
Soñador
Soñador

0/3

Créditos 320

Gracias : 70

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] LM² - Elaboración

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.