Emudesc en Facebook!RSS

Retroceder   Foros de Emudesc > Crea tus propios juegos > RPG Maker

Tema Cerrado
 
Herramientas
  #111  
Antiguo 30-abr-2009, 18:43
Avatar de hinaro
Aficionado
 
Fecha de Ingreso: septiembre-2007
Mensajes: 103
hinaro se está dando a conocer
Icon13 Re: ~Base De Datos de Script de EMD~

aki un script para VX.

-Nombre Del Script: Minijuego Snake
-Version Del Script: 1.0
-Rpg Maker: VX
-Creditos: Zeriab

-Introducion: Es el minijuego de la serpiente (Snake) para el maker. El objetivo es conseguir el mayor numero posible de puntos. Esto se debera usar mas que nada para cargar entre pantallas, precisamente como minijuego. La serpiente no crecera de tamaño.
-ScreenShot:
[SPOILER][/SPOILER]

-Script:
[SPOILER]
Código:
#==============================================================================
# ** Snake Look-alike on Loading Script
#------------------------------------------------------------------------------
# Zeriab
# v 1.0
# 28-09-2006
#==============================================================================

class Scene_SLOLS
 # The variable the number of dots collected will be stored
 Cheese_Variable = 25
 # The size of the margin in pixels
 Margin = 10
 # The thickness of the border in pixels
 Border_Thickness = 3
 
 #--------------------------------------------------------------------------
 # * Object Initialization
 #--------------------------------------------------------------------------
 def initialize(scene=Scene_Map.new)
   @next_scene = scene
 end
 
 #--------------------------------------------------------------------------
 # * Main Processing
 #--------------------------------------------------------------------------
 def main
   # Creates Bar Window (Loading bar)
   @bar_window = Window_SLOLS_Bar.new
   # Creates Info Window
   @info_window = Window_SLOLS_Info.new(Margin, Border_Thickness, Cheese_Variable)
   # Creates Game Window
   @game_window = Window_SLOLS_Game.new(Margin, Border_Thickness, Cheese_Variable)
   # Execute transition
   Graphics.transition
   # Scene Objects
   @scene_objects = [@bar_window, @info_window, @game_window]
   # Main loop
   loop do
     # Sleeps a short while to let the other thread work.
     sleep(0.01)
     # Update game screen
     Graphics.update
     # Update input information
     Input.update
     ## Frame update
     update
     # Abort loop if screen is changed
     break if $scene != self
   end
   # Prepare for transition
   Graphics.freeze
   # Dispose Scene Objects
   @scene_objects.each { |x| x.dispose }
 end
 
 #--------------------------------------------------------------------------
 # * Frame Update
 #--------------------------------------------------------------------------
 def update
     # Updates Scene Objects
     @scene_objects.each { |x| x.update }
     # If B or C Button Is Pressed
     if Input.trigger?(Input::B) || Input.trigger?(Input::C)
       # If the loading thread is finished (not alive)
       if !$loader.is_a?(Thread) || !$loader.alive?
         # Play Decision SE
         $game_system.se_play($data_system.decision_se)
         # Switch to map screen
         $scene = @next_scene
         return
       else
         # Play Buzzer SE
         $game_system.se_play($data_system.buzzer_se)
         return
       end
     end
 end
end

#==============================================================================
# ** Window_SLOLS_Info
#==============================================================================


class Window_SLOLS_Info
 # Instructions
 Instructs = [
               'Navigate using the','arrow keys.',
               'Collect green dots.',
               'This is done by','going into them.',
               'A sound will play','when the loading','is finished',
               '','Enter to continue'
            ]
 
 #--------------------------------------------------------------------------
 # * Object Initialization
 #--------------------------------------------------------------------------
 def initialize(margin, border_thickness, cheese_variable)
   # The name of the arrow images
   @arrow_file_names = ["Down_Arrow.png", "Left_Arrow.png",
                        "Right_Arrow.png", "Up_Arrow.png"]
   # The arrow images
   @arrow_images = []
   for i in 0..3
     # Makes sure that the program keeps running if one or more of the files
     # given don't exists. (read: wrong filename or missing file)
     begin
       # Reads the bitmap
       bitmap = Bitmap.new('Graphics\\Pictures\\'+@arrow_file_names[i])
     rescue Exception => ex
       # Creates a blank 32x32 bitmap if the reading fails
       bitmap = Bitmap.new(32,32)
       # Prints the exception if in Debug mode.
       if $DEBUG
         p ex
       end
     end
     # Pushes the resulting bitmap into the array
     @arrow_images.push(bitmap)
   end
   
   # The margin and border thickness
   @margin = margin
   @border_thickness = border_thickness
   @cheese_variable = cheese_variable
   
   # Height with border excluding margin
   @height = 416-@margin
   
   # The instructions Sprite
   @instru = Sprite.new(Viewport.new(480 + @border_thickness,
                       48 + @border_thickness,
                       159 - @margin - @border_thickness*2,
                       282 - @margin*4 + 4))
   @instru.bitmap = Bitmap.new(159 - @margin - @border_thickness*2,
                              282 - @margin*4 + 4)
   @instru.bitmap.font.color = Color.new(225, 225, 225, 255)
   @instru.bitmap.font.size = 20
   
   
   # The main Sprite
   @contents = Sprite.new(Viewport.new(480, 0, 160, @height))
   @contents.bitmap = Bitmap.new(160, @height)
   @contents.bitmap.font.color = Color.new(225, 225, 225, 255)
   @contents.bitmap.font.size = 22
   refresh
 end
 
 #--------------------------------------------------------------------------
 # * Refresh
 #--------------------------------------------------------------------------
 def refresh
   # Simplifying the variables used
   border = @border_thickness
   spacing = @margin + border
   
   # Removes any old contents, garbage and so on.
   @contents.bitmap.clear
   # Draws the white block used for the border of the score
   @contents.bitmap.fill_rect(0,@margin,159-@margin,22+border*2,
                               Color.new(225, 225, 225, 255))
   # Draws the white block used for the border of the instructions
   @contents.bitmap.fill_rect(0,48,159-@margin,282+border*2-@margin*4+4,
                               Color.new(225, 225, 225, 255))
   # Draws a black block on the white block creating the border.
   @contents.bitmap.fill_rect(border, 48+border,159-spacing-border,
                              282-@margin*4+4, Color.new(0, 0, 0, 0))
   
   # Draws the left arrow
   @contents.bitmap.blt(0,373-@margin,@arrow_images[1],Rect.new(0,0,43,43))
   # Draws the down arrow
   @contents.bitmap.blt(43+@margin,373-@margin,@arrow_images[0],
                        Rect.new(0,0,43,43))
   # Draws the right arrow
   @contents.bitmap.blt(43*2+@margin*2,373-@margin,@arrow_images[2],
                        Rect.new(0,0,43,43))
   # Draws the up arrow
   @contents.bitmap.blt(43+@margin,330-@margin*2,@arrow_images[3],
                        Rect.new(0,0,43,43))
   
   # Draws the text 'Instructions:'
   @contents.bitmap.draw_text(border, 48, 150-border*2, 22, 'Instructions',1)
   
   # Draws the intructions
   for i in 0...Instructs.size
     # Gets the string
     str = Instructs[i]
     # Draws the string
     @instru.bitmap.draw_text(2, 22*(i+1), 150-border*2, 20, str,1)
   end
 end

 #--------------------------------------------------------------------------
 # * Update
 #--------------------------------------------------------------------------
 def update
   # Simplifying the variables used
   border = @border_thickness
   spacing = @margin + border
   # Updates the sprite
   @contents.update
   # Removes old contents
   @contents.bitmap.fill_rect(border, spacing, 159-spacing-border, 22,
                              Color.new(0, 0, 0, 0))
   # Draws the amount of dots collected
   @contents.bitmap.draw_text(border, spacing, 153-spacing, 22,
                              $game_variables[@cheese_variable].to_s, 2)
   # Draws the text 'Dots:'
   @contents.bitmap.draw_text(border+2, spacing, 157-spacing, 22, 'Dots:')
 end
 
 #--------------------------------------------------------------------------
 # * Dispose
 #--------------------------------------------------------------------------
 def dispose
   @contents.bitmap.dispose
   @contents.dispose
 end
end

#==============================================================================
# ** Window_SLOLS_Game
#==============================================================================

class Window_SLOLS_Game
 #Player Settings
 Size = 5
 Default_Speed = 3
 Trail_Length = 19
 
 #Cheese Settings
 Cheese_Size = 3
 Cheese_Colors = [Color.new(10,200,20,255)]
 Max_Cheese_Amount = 200
 
 #--------------------------------------------------------------------------
 # * Object Initialization
 #--------------------------------------------------------------------------
 def initialize(margin, border_thickness, cheese_variable)
   # The margin and border thickness
   @margin = margin
   @border_thickness = border_thickness
   @cheese_variable = cheese_variable
   
   # Width of the playing field
   @width = 480-(@margin*2) - (@border_thickness*2)
   # Height of the playing field
   @height = 416-(@margin*2) - (@border_thickness*2)
   
   # Player info
   @player_x = 200
   @player_y = 208
   @player_trail = []
   @player_dir = 6   #2 - up, 4 - left, 6 - right, 8 - down
   @speed = Default_Speed
   
   # The cheese array
   @cheese = []
   @cheese.push(make_cheese)
   # The amount of cheese caught during this season.
   @cheese_amount = 0
   
   # Create the Sprite for viewing the border
   @border = Sprite.new(Viewport.new(@margin, @margin, 480-@margin, 416-@margin))
   @border.bitmap = Bitmap.new(480-(@margin*2),416-(@margin*2))
   
   # Creates the main Sprite
   @contents = Sprite.new(Viewport.new(@margin + @border_thickness,
                               @margin + @border_thickness, @width, @height))
   @contents.bitmap = Bitmap.new(@width,@height)
   # Refreshes
   refresh
   # Updates
   update
 end
 
 #--------------------------------------------------------------------------
 # * Make Cheese
 # ---------------------
 # Generates a pointer to a place where a cheese will be at least 3 pixels
 # away from the player
 #--------------------------------------------------------------------------
 def make_cheese
   result = []
   # Total size. (Sum of player size and cheese size)
   size = Size + Cheese_Size
   
   loop do
     # Generating the x and y coordinates
     x = rand(@width - (size + 5)*2)
     y = rand(@height - (size + 5)*2)
     
     # Adjusts the x and y coordinates so the cheese will not be
     # placed in the player
     if x > @width / 2 - (size + 5)
       x += 2*(Size + 5)
     end
     if y > @height / 2 - (size + 5)
       y += 2*(Size + 5)
     end
     
     # Makes sure that no cheese exists in that exact same place
     # Does not consider the size of the cheese.
     if !@cheese.include?([x,y])
       result = [x,y]
       break
     end
   end
   
   return result
 end
 
 #--------------------------------------------------------------------------
 # * Check Player
 # --------------------
 # Checks if the player have caught a cheese. (Is touching one)
 # Returns the indices of the cheese in an array
 #--------------------------------------------------------------------------
 def check_player
   result = []
   # Checks every cheese
   for i in 0...@cheese.size
     # Distance in the x-plane
     d = (@cheese[i][0] - @player_x).abs
     # Distance in the y-plane
     d_y = (@cheese[i][1] - @player_y).abs
     # Makes 'd' contain the largest distance
     if d < d_y
       d = d_y
     end
     
     # If the largest distance is less than the size of the player and the
     # cheese the player must be touching the cheese.
     if d < (Size + Cheese_Size - 1)
       result.push(i)
     end
   end
   return result
 end
 
 #--------------------------------------------------------------------------
 # * Draw Cheese
 #     i     : The index on the cheese
 #     color : The color wanted for the cheese
 # --------------------
 # Draws the designated cheese with the given color
 #--------------------------------------------------------------------------
 def draw_cheese(i, color)
   cheese = @cheese[i]
   size = Cheese_Size
   # Draws the cheese
   @contents.bitmap.fill_rect(cheese[0]-(size-1),cheese[1]-(size-1),
                           (size*2)-1, (size*2)-1, color)
 end
 
 #--------------------------------------------------------------------------
 # * Delete Cheese
 #     i : The index on the cheese
 # --------------------
 # Deletes the cheese by first drawing it black and then removing the cheese
 # from @cheese.
 #--------------------------------------------------------------------------
 def delete_cheese(i)
   draw_cheese(i, Color.new(0,0,0,0))
   @cheese.delete_at(i)
 end
 
 #--------------------------------------------------------------------------
 # * Refresh
 #--------------------------------------------------------------------------
 def refresh
   @border.bitmap.clear
   # Draws a white block
   @border.bitmap.fill_rect(0,0,480-@margin, 416-@margin,Color.new(225, 225, 225, 255))
   # Draws a smaller black block to give the border
   @border.bitmap.fill_rect(@border_thickness, @border_thickness,
                 @width, @height, Color.new(0, 0, 0, 0))
 end

 #--------------------------------------------------------------------------
 # * Update
 #--------------------------------------------------------------------------
 def update
   @contents.update

   # Checks if the player gets any cheese
   array = check_player
   if array.size > 0
     # Removes all the cheese
     for i in array
       # Cheese counters
       $game_variables[@cheese_variable] += 1
       @cheese_amount += 1
       # Deletes the old cheese
       delete_cheese(i)
       # Creates a new one
       @cheese.push(make_cheese)
       
       # Might create another one
       if @cheese.size < Max_Cheese_Amount
         # Creates an extra cheese if enough cheese have been caught
         if @cheese_amount > @cheese.size * @cheese.size + 1
           # Creates a new one
           @cheese.push(make_cheese)
         end
       end
     end
   end
   
   # Draws the cheese
   for i in 0...@cheese.size
     draw_cheese(i, Color.new(10,200,20,255))
   end
   
   # Makes sure the trail isn't too short
   while @player_trail.size < Trail_Length
     # Adds the player positions into the trail
     @player_trail.push([@player_x,@player_y])
   end
   
   coords = @player_trail.shift
   # Draws the trail
   @contents.bitmap.fill_rect(coords[0]-(Size-1),coords[1]-(Size-1),
                         (Size*2)-1, (Size*2)-1, Color.new(0,0,0,255))
   #Calculates the steps per shade
   step = 200 / (Trail_Length)
   for i in 0...Trail_Length-1
     # Calculations
     coords = @player_trail[i]
     s = step*(Trail_Length-i)
     # Draws the trail
     @contents.bitmap.fill_rect(coords[0]-(Size-1),coords[1]-(Size-1),
                         (Size*2)-1, (Size*2)-1, Color.new(200-s,200-s,100-(s/2),255))
   end
                         
   # Draws the player
   @contents.bitmap.fill_rect(@player_x-(Size-1),@player_y-(Size-1),
                           (Size*2)-1, (Size*2)-1, Color.new(200,200,100,255))
   
   # If UP Is Pressed
   if Input.trigger?(Input::UP)
     @player_dir = 8 unless @player_dir == 2
   end
   # If DOWN Is Pressed
   if Input.trigger?(Input::DOWN)
     @player_dir = 2 unless @player_dir == 8
   end
   # If LEFT Is Pressed
   if Input.trigger?(Input::LEFT)
     @player_dir = 4 unless @player_dir == 6
   end
   # If RIGHT Is Pressed
   if Input.trigger?(Input::RIGHT)
     @player_dir = 6 unless @player_dir == 4
   end
   
   # Moves the player accordingly to the directions
   case @player_dir
   when 8  # Down
     @player_y -= @speed
   when 2  # Up
     @player_y += @speed
   when 4  # Left
     @player_x -= @speed
   when 6  # Right
     @player_x += @speed
   end
   # Warping the player
   @player_x = (@player_x) % @width
   @player_y = (@player_y) % @height
 end
 
 #--------------------------------------------------------------------------
 # * Dispose
 #--------------------------------------------------------------------------
 def dispose
   @contents.bitmap.dispose
   @contents.dispose
 end
end

#==============================================================================
# ** Window_SLOLS_Bar
#==============================================================================

class Window_SLOLS_Bar
 #--------------------------------------------------------------------------
 # * Object Initialization
 #--------------------------------------------------------------------------
 def initialize
   @contents = Sprite.new(Viewport.new(0, 416, 640, 64))
   @contents.bitmap = Bitmap.new(640, 64)
   @left_block = Sprite.new(Viewport.new(540-48, 424, 48, 48))
   @left_block.bitmap = Bitmap.new(64, 64)
   @right_block = Sprite.new(Viewport.new(100, 424, 48, 48))
   @right_block.bitmap = Bitmap.new(640, 64)
   @blocks = [@left_block, @right_block]
   @bar = Sprite.new(Viewport.new(270, 446, 100, 4))
   @bar.bitmap = Bitmap.new(200, 4)
   @bar_f = Sprite.new(Viewport.new(270, 446, 100, 4))
   @bar_f.bitmap = Bitmap.new(100, 4)
   @bar_fx = 0
   
   # The sprites used
   @sprites = [@contents,@bar,@bar_f]
   
   refresh
 end
 
 #--------------------------------------------------------------------------
 # * Refresh
 #--------------------------------------------------------------------------
 def refresh
   @contents.bitmap.clear
   bar_color = Color.new(225,225,225,255)
   fin_color = Color.new(255,255,0,0)
   @bar.bitmap.fill_rect(0,0,25,4,bar_color)
   @bar.bitmap.fill_rect(50,0,25,4,bar_color)
   @bar.bitmap.fill_rect(100,0,25,4,bar_color)
   @bar.bitmap.fill_rect(150,0,25,4,bar_color)
   @bar_f.bitmap.fill_rect(0,0,100,4,fin_color)
   @blocks.each {|x| x.bitmap.fill_rect(0,0,64,64,fin_color)}
 end

 #--------------------------------------------------------------------------
 # * Update
 #--------------------------------------------------------------------------
 def update
   @bar.ox -= 1
   @bar.ox = @bar.ox % 100
   @bar.update
   if @bar_fx == 0 && (!$loader.is_a?(Thread) || !$loader.alive?)
     @bar_fx = 1
     @count = 3
     $game_system.se_play($data_system.load_se)
   end
   if @bar_fx > 0 && @bar_fx < 255
     @bar_fx += @count
     @bar_f.bitmap.fill_rect(0,0,100,4,Color.new(255,255,0,@bar_fx))
     @blocks.each {|x| x.bitmap.fill_rect(0,0,48,48,Color.new(255,255,0,@bar_fx))}
     case @bar_fx
     when 10..20
       @count = 50
     when 180..230
       @count = 5
     end
   end
 end
 
 #--------------------------------------------------------------------------
 # * Dispose
 #--------------------------------------------------------------------------
 def dispose
   @sprites.each { |x| x.bitmap.dispose}
   @sprites.each { |x| x.dispose}
 end
end
[/SPOILER]

-Instrucciones:
Para jugar a la Serpiente, llama script de este modo:
$scene = Scene_SLOLS.new

o
$scene = Scene_SLOLS.new(Scene_Map.new)

Usa en llamar script:
$scene = Scene_SLOLS.new(Scene_Map.new)
cambiando Scene_Map.new por la sintaxis que llama a la siguiente escena para ir a ella.

Última edición por hinaro fecha: 07-may-2009 a las 16:30.
  #112  
Antiguo 05-may-2009, 17:57
Avatar de hinaro
Aficionado
 
Fecha de Ingreso: septiembre-2007
Mensajes: 103
hinaro se está dando a conocer
Predeterminado Re: ~Base De Datos de Script de EMD~

Cita:
2º Mulitipostear

Se considerará multipostear escribir 2 o más mensajes de corrido en el mismo post. En el caso de que en algún tema se hayan redactado 2 mensajes de corrido, (dependiendo del tiempo entre ambos mensajes), o si tienes algo que aportar, pero por alguna razón no puedes editar el último mensaje, este mismo no se considerará como multipost.
gracias a =rthefire@= ahora se que puedo hacer multipost solo cuando estoy aportando algo y aki esta mi aporte:

-Nombre Del Script: ARTBS - Sistema de Juego al estilo Diablo y MU
-Version Del Script: ??? no se.
-Rpg Maker: XP

-Introducion: Una serie de scripts que forman un ótima base para juegos estilo MMORPG'S.
-Caracteristicas: Sistema de Batalla ABS, con movimento teclado y mouse, sistema de creado de personages super avanzado, tambien es posible pausar el juego.
-Demo: aki esta la demo (el script esta aki dentro ovio xD)
Info:
Tamaño: 79,583 KB
Tipo de Archivo: ZIP
Sitio Hosting: 4Shared

-ScreenShot:
[SPOILER][/SPOILER]
-Script: dentro de la demo.
-Instrucciones: Descarga el DEMO, y a empezar personalizar el juego. Para editar las imágenes utilizadas en el motor y abra la carpeta Imágenes Retratos y cambiar las imágenes que están allí, a su gusto.
-Compatiblidad: no se si es compatible con otros script asi que tendran que revisar.
-Creditos: Samo

Última edición por hinaro fecha: 07-may-2009 a las 16:17.
  #113  
Antiguo 06-may-2009, 21:24
Avatar de mikecj12
Newbie
 
Fecha de Ingreso: mayo-2008
Ubicación: costa rica/heredia/belen
Mensajes: 19
mikecj12 se está dando a conocer
Predeterminado Re: ~Base De Datos de Script de EMD~

diego_max5 bien echo me sirven bn espero sigas aportando de tus grandes ideas
  #114  
Antiguo 07-may-2009, 16:16
Avatar de hinaro
Aficionado
 
Fecha de Ingreso: septiembre-2007
Mensajes: 103
hinaro se está dando a conocer
Predeterminado Re: ~Base De Datos de Script de EMD~

aki otro aporte de un buen script que econtre en una pag bien rara xD.

-Nombre Del Script: Shooting System
-Rpg Maker: XP
-Creditos: Nechi

-Introducion: Una demo bien interesante con varios scripts para hacer un fan game resident evil, pero esta con algunos bugs estaños si algun scripter puede arreglar selo agradeseria!
-Caracteristicas: aver es para que puedas crear juegos de pistolas o sea estilo resident evil
-Demo: Media Fire y Megaupload
-Teclas:
Z = mira + C = Atira
S = segura faca + C = Ataca

-ScreenShot:
[SPOILER][/SPOILER]
-Script: Dentro de la demo estan los script nesesarios.
-Instrucciones: no creo que las nesesiten esta todo en la demo si les sale un error es por el bugg que les dije que tenia en una aprte y no se como se arregla xD.

Última edición por hinaro fecha: 20-may-2009 a las 03:50.
  #115  
Antiguo 10-may-2009, 03:07
Avatar de legolas13
Newbie
 
Fecha de Ingreso: junio-2008
Mensajes: 35
legolas13 se está dando a conocer
Predeterminado Re: ~Base De Datos de Script de EMD~

Chicos, encontre un script q es para rpgmaker vx q sirve para poner habilidades a el equipamiento como el ff ix!
el problema es q esta en japones... el script es del famoso KGC y quiero saber si alguno lo tiene pero en ingles aunq sea...
gracias!
  #116  
Antiguo 10-may-2009, 03:47
Avatar de hinaro
Aficionado
 
Fecha de Ingreso: septiembre-2007
Mensajes: 103
hinaro se está dando a conocer
Predeterminado Re: ~Base De Datos de Script de EMD~

mm mañana lo buscare si lo encuentro edito y te lo pongo (espero encontrarlo xD)

__________________________________________________ _________________________________
Edit: aki esta el script (que creo q es el que buscabas xD) esta en portugues espero que sirva =.

-Nombre Del Script: KGC_SkillCPSystem VX
-Rpg Maker: VX
-Creditos: Traducido por WesdrasLink echo por KGC xD.

-Descripcion:
Es un sistema de PC que son puntos que se pueden equipar a sus habilidades y también crea una barra de herramientas de PC y también otra opción en el menú principal! (espero que se aya entendido xD).
-Demo: no hay T_T.
-Script:
[SPOILER]
Código:
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/    KGC_SkillCPSystem VX 
#_/    Last update : 2008/02/17
#_/----------------------------------------------------------------------------
#  Tradução por WesdrasLink
#==============================================================================
#  Customize 
#==============================================================================

module KGC
module SkillCPSystem
  # Aqui defina a quantidade de Habilidades que podem ser equipadas
  MAX_SKILLS = 9
  # CP
  VOCAB_CP   = "CP"
  # Nome da barra de CP
  VOCAB_CP_A = "CP"
  # Amostrar Barra de CP no Status ?
  SHOW_STATUS_CP = true

  # Quanto vale CP para uma Habilidade ?
  
  DEFAULT_CP_COST = 1
  # CP Máximo
  CP_MAX = 15
  # CP Mínimo
  CP_MIN = 0
  # Defina aqui com quantos CP o heroi vai comçar e quanto vai aumentar quando
  #passar de nível
  CP_CALC_EXP = "level * 3.6"

  # ? ??????????
  #  true ???????????????????????
  DISABLE_IN_BATTLETEST  = true
  # ? ?????????????
  SHOW_UNUSABLE_SKILL    = true
  # ? ?? CP 0 ?????????????????
  USABLE_COST_ZERO_SKILL = true
  # ? ???????????????????
  #  «???????» ????????
  PASSIVE_NEED_TO_SET    = true

  # ? CP ???????
  #  ??  : \C[n] ?????
  #  Color : ?????? ( Color.new(255, 128, 128) ?? )
  GAUGE_START_COLOR = 13
  # ? CP ???????
  GAUGE_END_COLOR   = 5

  # ? ???????????????????????
  #  ???????????????????????
  #  ?????????????«????????????» ?????????
  USE_MENU_SET_SKILL_COMMAND = true
  # ? ?????????????????????
  VOCAB_MENU_SET_SKILL       = "Skill"
  # ? ???????????
  BLANK_TEXT   = "-  Vazio  -"
  # ? ??????????
  RELEASE_TEXT = "( Nada )"
end
end

#???????????????????????????????????????

$imported = {} if $imported == nil
$imported["SkillCPSystem"] = true

module KGC::SkillCPSystem
  # ????
  module Regexp
    # ???
    module Skill
      # ?? CP
      CP_COST = /<CP[ ]*(\d+)>/i
    end
  end
end

#???????????????????????????????????????

#==============================================================================
# ? KGC::Commands
#==============================================================================

module KGC::Commands
  module_function
  #--------------------------------------------------------------------------
  # ? ?? CP ???
  #     actor_id : ???? ID
  #     own_cp   : ?? CP
  #--------------------------------------------------------------------------
  def set_own_cp(actor_id, own_cp)
    $game_actors[actor_id].own_cp = own_cp
  end
  #--------------------------------------------------------------------------
  # ? ???????????
  #     actor_id : ???? ID
  #     value    : ?????
  #--------------------------------------------------------------------------
  def set_battle_skill_max(actor_id, value = -1)
    $game_actors[actor_id].battle_skill_max = value
  end
  #--------------------------------------------------------------------------
  # ? ??????
  #     actor_id : ???? ID
  #     index    : ????
  #     skill_id : ??????? ID (nil ???)
  #--------------------------------------------------------------------------
  def set_battle_skill(actor_id, index, skill_id = nil)
    actor = $game_actors[actor_id]
    if skill_id.is_a?(Integer)
      # ??
      skill = $data_skills[skill_id]
      return unless actor.battle_skill_settable?(index, skill)  # ?????

      actor.set_battle_skill(index, skill)
      actor.restore_battle_skill
    else
      # ??
      actor.remove_battle_skill(index)
    end
  end
  #--------------------------------------------------------------------------
  # ? ????????
  #     actor_id : ???? ID
  #     skill_id : ??????? ID
  #--------------------------------------------------------------------------
  def add_battle_skill(actor_id, skill_id)
    actor = $game_actors[actor_id]
    skill = $data_skills[skill_id]
    skills = actor.battle_skill_ids
    return if skills.include?(skill_id)  # ????
    return if actor.cp < skill.cp_cost   # CP ??

    actor.battle_skill_max.times { |i|
      # ????????
      if skills[i] == nil && 
        actor.set_battle_skill(i, skill)
        break
      end
    }
    actor.restore_battle_skill
  end
  #--------------------------------------------------------------------------
  # ? ???????
  #     actor_id : ???? ID
  #--------------------------------------------------------------------------
  def clear_battle_skill(actor_id)
    $game_actors[actor_id].clear_battle_skill
  end
  #--------------------------------------------------------------------------
  # ? ????????????
  #     actor_index : ??????????
  #--------------------------------------------------------------------------
  def call_set_battle_skill(actor_index = 0)
    return if $game_temp.in_battle
    $game_temp.next_scene = :set_battle_skill
    $game_temp.next_scene_actor_index = actor_index
  end
end

class Game_Interpreter
  include KGC::Commands
end

#???????????????????????????????????????

#==============================================================================
# ¦ Vocab
#==============================================================================

module Vocab
  # CP
  def self.cp
    return KGC::SkillCPSystem::VOCAB_CP
  end

  # CP (?)
  def self.cp_a
    return KGC::SkillCPSystem::VOCAB_CP_A
  end

  # ?????
  def self.set_battle_skill
    return KGC::SkillCPSystem::VOCAB_MENU_SET_SKILL
  end
end

#???????????????????????????????????????

#==============================================================================
# ¦ RPG::Skill
#==============================================================================

class RPG::Skill < RPG::UsableItem
  #--------------------------------------------------------------------------
  # ? ???CP??????????
  #--------------------------------------------------------------------------
  def create_skill_cp_system_cache
    @__cp_cost = KGC::SkillCPSystem::DEFAULT_CP_COST

    self.note.split(/[\r\n]+/).each { |line|
      case line
      when KGC::SkillCPSystem::Regexp::Skill::CP_COST
        # ?? CP
        @__cp_cost = $1.to_i
      end
    }
  end
  #--------------------------------------------------------------------------
  # ? ?? CP
  #--------------------------------------------------------------------------
  def cp_cost
    create_skill_cp_system_cache if @__cp_cost == nil
    return @__cp_cost
  end
end

#???????????????????????????????????????

#==============================================================================
# ¦ Game_Battler
#==============================================================================

class Game_Battler
  #--------------------------------------------------------------------------
  # ? ?????????????
  #     skill : ???
  #--------------------------------------------------------------------------
  def battle_skill_set?(skill)
    return true
  end
end

#???????????????????????????????????????

#==============================================================================
# ¦ Game_Actor
#==============================================================================

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ? ??????????
  #--------------------------------------------------------------------------
  attr_writer   :own_cp                   # ?? CP
  #--------------------------------------------------------------------------
  # ? ??????
  #     actor_id : ???? ID
  #--------------------------------------------------------------------------
  alias setup_KGC_SkillCPSystem setup
  def setup(actor_id)
    setup_KGC_SkillCPSystem(actor_id)

    @battle_skills = []
    @own_cp = 0
    @battle_skill_max = -1
  end
  #--------------------------------------------------------------------------
  # ? MaxCP ??
  #--------------------------------------------------------------------------
  def maxcp
    n = Integer(eval(KGC::SkillCPSystem::CP_CALC_EXP))
    return [[n + own_cp, cp_limit].min, KGC::SkillCPSystem::CP_MIN].max
  end
  #--------------------------------------------------------------------------
  # ? CP ??
  #--------------------------------------------------------------------------
  def cp
    n = 0
    battle_skills.compact.each { |skill| n += skill.cp_cost }
    return [maxcp - n, 0].max
  end
  #--------------------------------------------------------------------------
  # ? CP ????
  #--------------------------------------------------------------------------
  def cp_limit
    return KGC::SkillCPSystem::CP_MAX
  end
  #--------------------------------------------------------------------------
  # ? ?? CP ??
  #--------------------------------------------------------------------------
  def own_cp
    @own_cp = 0 if @own_cp == nil
    return @own_cp
  end
  #--------------------------------------------------------------------------
  # ? ?????
  #--------------------------------------------------------------------------
  alias skills_KGC_SkillCPSystem skills
  def skills
    result = skills_KGC_SkillCPSystem

    # ??????????
    if skill_cp_restrict?
      result.each_with_index { |skill, i|
        # ?? CP > 0 ???????
        if !KGC::SkillCPSystem::USABLE_COST_ZERO_SKILL || skill.cp_cost > 0
          result[i] = nil
        end
        # ??????????
        if $imported["PassiveSkill"] && KGC::SkillCPSystem::PASSIVE_NEED_TO_SET
          result[i] = nil if skill.passive
        end
      }
      result.compact!
      # ????????
      result |= battle_skills
      result.sort! { |a, b| a.id <=> b.id }
    end

    return result
  end
  #--------------------------------------------------------------------------
  # ? ?????????
  #--------------------------------------------------------------------------
  def skill_cp_restrict?
    if $game_temp.in_battle
      # ???????????????????????
      return true unless $BTEST && KGC::SkillCPSystem::DISABLE_IN_BATTLETEST
    end

    return false
  end
  #--------------------------------------------------------------------------
  # ? ??????
  #--------------------------------------------------------------------------
  def all_skills
    # ???????????
    last_in_battle = $game_temp.in_battle
    $game_temp.in_battle = false

    result = skills_KGC_SkillCPSystem
    if $imported["EquipLearnSkill"]
      result |= (equipment_skills | full_ap_skills)
      result.sort! { |a, b| a.id <=> b.id }
    end

    # ?????????
    $game_temp.in_battle = last_in_battle

    return result
  end
  #--------------------------------------------------------------------------
  # ? ??????????
  #--------------------------------------------------------------------------
  def battle_skill_max
    @battle_skill_max = -1 if @battle_skill_max == nil
    if @battle_skill_max < 0
      return KGC::SkillCPSystem::MAX_SKILLS
    else
      return @battle_skill_max
    end
  end
  #--------------------------------------------------------------------------
  # ? ??????????
  #--------------------------------------------------------------------------
  def battle_skill_max=(value)
    @battle_skill_max = value
    if @battle_skills == nil
      @battle_skills = []
    else
      @battle_skills = @battle_skills[0...value]
    end
    restore_passive_rev if $imported["PassiveSkill"]
  end
  #--------------------------------------------------------------------------
  # ? ?????? ID ??
  #--------------------------------------------------------------------------
  def battle_skill_ids
    @battle_skills = [] if @battle_skills == nil
    return @battle_skills
  end
  #--------------------------------------------------------------------------
  # ? ????????
  #--------------------------------------------------------------------------
  def battle_skills
    result = []
    battle_skill_ids.each { |i|
      next if i == nil           # ?????????
      result << $data_skills[i]
    }
    return result
  end
  #--------------------------------------------------------------------------
  # ? ????????
  #     index : ??
  #     skill : ???
  #--------------------------------------------------------------------------
  def set_battle_skill(index, skill)
    return unless skill.is_a?(RPG::Skill)  # ?????
    return if cp < skill.cp_cost           # CP ??

    @battle_skills[index] = skill.id
    restore_passive_rev if $imported["PassiveSkill"]
  end
  #--------------------------------------------------------------------------
  # ? ????????
  #     index : ??
  #--------------------------------------------------------------------------
  def remove_battle_skill(index)
    @battle_skills[index] = nil
    restore_passive_rev if $imported["PassiveSkill"]
  end
  #--------------------------------------------------------------------------
  # ? ?????????
  #--------------------------------------------------------------------------
  def clear_battle_skill
    @battle_skills = []
    restore_passive_rev if $imported["PassiveSkill"]
  end
  #--------------------------------------------------------------------------
  # ? ?????????????
  #     index : ??
  #     skill : ???
  #--------------------------------------------------------------------------
  def battle_skill_settable?(index, skill)
    return false if battle_skill_max <= index  # ???
    return true  if skill == nil               # nil ?????? OK

    return false if battle_skill_ids.include?(skill.id)  # ?????

    curr_skill = battle_skills[index]
    offset = (curr_skill != nil ? curr_skill.cp_cost : 0)
    return false if self.cp < (skill.cp_cost - offset)  # CP ??

    return true
  end
  #--------------------------------------------------------------------------
  # ? ?????????
  #--------------------------------------------------------------------------
  def restore_battle_skill
    result = battle_skill_ids.clone
    usable_skills = all_skills

    result.each_with_index { |n, i|
      next if n == nil
      # ?????????
      if (usable_skills.find { |s| s.id == n }) == nil
        result[i] = nil
      end
    }
    @battle_skills = result
  end
  #--------------------------------------------------------------------------
  # ? ????? (?????????)
  #     equip_type : ???? (0..4)
  #     item       : ?? or ?? (nil ??????)
  #     test       : ?????? (???????????????????)
  #--------------------------------------------------------------------------
  alias change_equip_KGC_SkillCPSystem change_equip
  def change_equip(equip_type, item, test = false)
    change_equip_KGC_SkillCPSystem(equip_type, item, test)

    unless test
      restore_battle_skill
      restore_passive_rev if $imported["PassiveSkill"]
    end
  end
  #--------------------------------------------------------------------------
  # ? ?????
  #     item : ?????? or ??
  #    ??/???????????????????????
  #--------------------------------------------------------------------------
  alias discard_equip_KGC_SkillCPSystem discard_equip
  def discard_equip(item)
    discard_equip_KGC_SkillCPSystem(item)

    restore_battle_skill
    restore_passive_rev if $imported["PassiveSkill"]
  end
  #--------------------------------------------------------------------------
  # ? ??????
  #     exp  : ??????
  #     show : ???????????
  #--------------------------------------------------------------------------
  alias change_exp_KGC_SkillCPSystem change_exp
  def change_exp(exp, show)
    # ????????????????????????????
    last_in_battle = $game_temp.in_battle
    $game_temp.in_battle = false

    change_exp_KGC_SkillCPSystem(exp, show)

    $game_temp.in_battle = last_in_battle
  end
  #--------------------------------------------------------------------------
  # ? ???????
  #     skill_id : ??? ID
  #--------------------------------------------------------------------------
  alias forget_skill_KGC_SkillCPSystem forget_skill
  def forget_skill(skill_id)
    # ?????????????????
    battle_skill_ids.each_with_index { |s, i|
      remove_battle_skill(i) if s == skill_id
    }

    forget_skill_KGC_SkillCPSystem(skill_id)
  end
  #--------------------------------------------------------------------------
  # ? ?????????????
  #     skill : ???
  #--------------------------------------------------------------------------
  def battle_skill_set?(skill)
    return false unless skill.is_a?(RPG::Skill)  # ?????

    return battle_skill_ids.include?(skill.id)
  end
end

#???????????????????????????????????????

#==============================================================================
# ¦ Window_Base
#==============================================================================

class Window_Base < Window
  #--------------------------------------------------------------------------
  # ? CP ???????
  #     actor : ????
  #--------------------------------------------------------------------------
  def cp_color(actor)
    return knockout_color if actor.maxcp > 0 && actor.cp == 0
    return normal_color
  end
  #--------------------------------------------------------------------------
  # ? CP ????? 1 ???
  #--------------------------------------------------------------------------
  def cp_gauge_color1
    color = KGC::SkillCPSystem::GAUGE_START_COLOR
    return (color.is_a?(Integer) ? text_color(color) : color)
  end
  #--------------------------------------------------------------------------
  # ? CP ????? 2 ???
  #--------------------------------------------------------------------------
  def cp_gauge_color2
    color = KGC::SkillCPSystem::GAUGE_END_COLOR
    return (color.is_a?(Integer) ? text_color(color) : color)
  end
  #--------------------------------------------------------------------------
  # ? CP ???
  #     actor : ????
  #     x     : ??? X ??
  #     y     : ??? Y ??
  #     width : ?
  #--------------------------------------------------------------------------
  def draw_actor_cp(actor, x, y, width = 120)
    draw_actor_cp_gauge(actor, x, y, width)
    self.contents.font.color = system_color
    self.contents.draw_text(x, y, 30, WLH, Vocab::cp_a)
    self.contents.font.color = cp_color(actor)
    xr = x + width
    if width < 120
      self.contents.draw_text(xr - 40, y, 40, WLH, actor.cp, 2)
    else
      self.contents.draw_text(xr - 90, y, 40, WLH, actor.cp, 2)
      self.contents.font.color = normal_color
      self.contents.draw_text(xr - 50, y, 10, WLH, "/", 2)
      self.contents.draw_text(xr - 40, y, 40, WLH, actor.maxcp, 2)
    end
    self.contents.font.color = normal_color
  end
  #--------------------------------------------------------------------------
  # ? CP ??????
  #     actor : ????
  #     x     : ??? X ??
  #     y     : ??? Y ??
  #     width : ?
  #--------------------------------------------------------------------------
  def draw_actor_cp_gauge(actor, x, y, width = 120)
    gw = width * actor.cp / [actor.maxcp, 1].max
    gc1 = cp_gauge_color1
    gc2 = cp_gauge_color2
    self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
    self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
  end
end

#???????????????????????????????????????

#==============================================================================
# ¦ Window_Command
#==============================================================================

class Window_Command < Window_Selectable
  unless method_defined?(:add_command)
  #--------------------------------------------------------------------------
  # ? ???????
  #    ?????????
  #--------------------------------------------------------------------------
  def add_command(command)
    @commands << command
    @item_max = @commands.size
    item_index = @item_max - 1
    refresh_command
    draw_item(item_index)
    return item_index
  end
  #--------------------------------------------------------------------------
  # ? ???????????
  #--------------------------------------------------------------------------
  def refresh_command
    buf = self.contents.clone
    self.height = [self.height, row_max * WLH + 32].max
    create_contents
    self.contents.blt(0, 0, buf, buf.rect)
    buf.dispose
  end
  #--------------------------------------------------------------------------
  # ? ???????
  #--------------------------------------------------------------------------
  def insert_command(index, command)
    @commands.insert(index, command)
    @item_max = @commands.size
    refresh_command
    refresh
  end
  #--------------------------------------------------------------------------
  # ? ???????
  #--------------------------------------------------------------------------
  def remove_command(command)
    @commands.delete(command)
    @item_max = @commands.size
    refresh
  end
  end
end

#???????????????????????????????????????

#==============================================================================
# ¦ Window_Status
#==============================================================================

if KGC::SkillCPSystem::SHOW_STATUS_CP
class Window_Status < Window_Base
  #--------------------------------------------------------------------------
  # ? ???????
  #     x : ??? X ??
  #     y : ??? Y ??
  #--------------------------------------------------------------------------
  alias draw_basic_info_KGC_SkillCPSystem draw_basic_info
  def draw_basic_info(x, y)
    draw_basic_info_KGC_SkillCPSystem(x, y)

    draw_actor_cp(@actor, x, y + WLH * 4)
  end
end
end

#???????????????????????????????????????

#==============================================================================
# ? Window_BattleSkillStatus
#------------------------------------------------------------------------------
#   ?????????????????????????????????
#==============================================================================

class Window_BattleSkillStatus < Window_Base
  #--------------------------------------------------------------------------
  # ? ?????????
  #     x     : ?????? X ??
  #     y     : ?????? Y ??
  #     actor : ????
  #--------------------------------------------------------------------------
  def initialize(x, y, actor)
    super(x, y, Graphics.width, WLH + 32)
    @actor = actor
    refresh
  end
  #--------------------------------------------------------------------------
  # ? ??????
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    draw_actor_name(@actor, 4, 0)
    draw_actor_level(@actor, 140, 0)
    draw_actor_cp(@actor, 240, 0)
  end
end

#???????????????????????????????????????

#==============================================================================
# ? Window_BattleSkillSlot
#------------------------------------------------------------------------------
#   ??????????????????????????????????
#==============================================================================

class Window_BattleSkillSlot < Window_Selectable
  #--------------------------------------------------------------------------
  # ? ?????????
  #     x      : ?????? X ??
  #     y      : ?????? Y ??
  #     width  : ???????
  #     height : ????????
  #     actor  : ????
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height, actor)
    super(x, y, width, height)
    @actor = actor
    self.index = 0
    self.active = false
    refresh
  end
  #--------------------------------------------------------------------------
  # ? ??????
  #--------------------------------------------------------------------------
  def skill
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # ? ??????
  #--------------------------------------------------------------------------
  def refresh
    @data = []
    skill_ids = @actor.battle_skill_ids
    @actor.battle_skill_max.times { |i|
      if skill_ids[i] != nil
        @data << $data_skills[skill_ids[i]]
      else
        @data << nil
      end
    }
    @item_max = @data.size
    create_contents
    @item_max.times { |i| draw_item(i) }
  end
  #--------------------------------------------------------------------------
  # ? ?????
  #     index : ????
  #--------------------------------------------------------------------------
  def draw_item(index)
    rect = item_rect(index)
    self.contents.clear_rect(rect)
    skill = @data[index]
    if skill != nil
      rect.width -= 4
      draw_item_name(skill, rect.x, rect.y)
      self.contents.draw_text(rect, skill.cp_cost, 2)
    else
      self.contents.draw_text(rect, KGC::SkillCPSystem::BLANK_TEXT, 1)
    end
  end
  #--------------------------------------------------------------------------
  # ? ??????
  #--------------------------------------------------------------------------
  def update
    super
    return unless self.active

    if Input.repeat?(Input::RIGHT)
      cursor_pagedown
    elsif Input.repeat?(Input::LEFT)
      cursor_pageup
    end
  end
  #--------------------------------------------------------------------------
  # ? ?????????
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(skill == nil ? "" : skill.description)
  end
end

#???????????????????????????????????????

#==============================================================================
# ? Window_BattleSkillList
#------------------------------------------------------------------------------
#   ???????????????????????????????????
#==============================================================================

class Window_BattleSkillList < Window_Selectable
  #--------------------------------------------------------------------------
  # ? ??????????
  #--------------------------------------------------------------------------
  attr_accessor :slot_index               # ??????
  #--------------------------------------------------------------------------
  # ? ?????????
  #     x      : ?????? X ??
  #     y      : ?????? Y ??
  #     width  : ???????
  #     height : ????????
  #     actor  : ????
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height, actor)
    super(x, y, width, height)
    @actor = actor
    @slot_index = 0
    self.index = 0
    self.active = false
    refresh
  end
  #--------------------------------------------------------------------------
  # ? ??????
  #--------------------------------------------------------------------------
  def skill
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # ? ??????
  #--------------------------------------------------------------------------
  def refresh
    @data = [nil]
    # ?????????????
    @actor.all_skills.each { |skill|
      @data.push(skill) if selectable?(skill)
    }

    @item_max = @data.size
    create_contents
    @item_max.times { |i| draw_item(i) }
  end
  #--------------------------------------------------------------------------
  # ? ?????????
  #     skill : ???
  #--------------------------------------------------------------------------
  def selectable?(skill)
    return false if skill == nil

    # ?? CP 0 ???????????
    if KGC::SkillCPSystem::USABLE_COST_ZERO_SKILL && skill.cp_cost == 0
      return false
    end
    # ??????????OK
    return true if skill.battle_ok?
    # ??????????????
    if KGC::SkillCPSystem::SHOW_UNUSABLE_SKILL && skill.occasion == 3
      return true
    end

    return false
  end
  #--------------------------------------------------------------------------
  # ? ?????
  #     index : ????
  #--------------------------------------------------------------------------
  def draw_item(index)
    rect = item_rect(index)
    self.contents.clear_rect(rect)
    skill = @data[index]
    if skill != nil
      rect.width -= 4
      enabled = @actor.battle_skill_settable?(@slot_index, skill)
      draw_item_name(skill, rect.x, rect.y, enabled)
      self.contents.draw_text(rect, skill.cp_cost, 2)
    else
      self.contents.draw_text(rect, KGC::SkillCPSystem::RELEASE_TEXT, 1)
    end
  end
  #--------------------------------------------------------------------------
  # ? ??????
  #--------------------------------------------------------------------------
  def update
    super
    return unless self.active

    if Input.repeat?(Input::RIGHT)
      cursor_pagedown
    elsif Input.repeat?(Input::LEFT)
      cursor_pageup
    end
  end
  #--------------------------------------------------------------------------
  # ? ?????????
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(skill == nil ? "" : skill.description)
  end
end

#???????????????????????????????????????

#==============================================================================
# ¦ Scene_Map
#==============================================================================

class Scene_Map < Scene_Base
  #--------------------------------------------------------------------------
  # ? ?????????
  #--------------------------------------------------------------------------
  alias update_scene_change_KGC_SkillCPSystem update_scene_change
  def update_scene_change
    return if $game_player.moving?    # ??????????

    if $game_temp.next_scene == :set_battle_skill
      call_set_battle_skill
      return
    end

    update_scene_change_KGC_SkillCPSystem
  end
  #--------------------------------------------------------------------------
  # ? ?????????????
  #--------------------------------------------------------------------------
  def call_set_battle_skill
    $game_temp.next_scene = nil
    $scene = Scene_SetBattleSkill.new(
      $game_temp.next_scene_actor_index,
      0,
      Scene_SetBattleSkill::HOST_MAP)
  end
end

#???????????????????????????????????????

#==============================================================================
# ¦ Scene_Menu
#==============================================================================

class Scene_Menu < Scene_Base
  if KGC::SkillCPSystem::USE_MENU_SET_SKILL_COMMAND
  #--------------------------------------------------------------------------
  # ? ????????????
  #--------------------------------------------------------------------------
  alias create_command_window_KGC_SkillCPSystem create_command_window
  def create_command_window
    create_command_window_KGC_SkillCPSystem

    return if $imported["CustomMenuCommand"]

    @__command_set_battle_skill_index =
      @command_window.add_command(Vocab.set_battle_skill)
    if @command_window.oy > 0
      @command_window.oy -= Window_Base::WLH
    end
    @command_window.index = @menu_index
  end
  end
  #--------------------------------------------------------------------------
  # ? ?????????
  #--------------------------------------------------------------------------
  alias update_command_selection_KGC_SkillCPSystem update_command_selection
  def update_command_selection
    call_set_battle_skill_flag = false
    if Input.trigger?(Input::C)
      case @command_window.index
      when @__command_set_battle_skill_index  # ?????
        call_set_battle_skill_flag = true
      end
    end

    # ??????????
    if call_set_battle_skill_flag
      if $game_party.members.size == 0
        Sound.play_buzzer
        return
      end
      Sound.play_decision
      start_actor_selection
      return
    end

    update_command_selection_KGC_SkillCPSystem
  end
  #--------------------------------------------------------------------------
  # ? ?????????
  #--------------------------------------------------------------------------
  alias update_actor_selection_KGC_SkillCPSystem update_actor_selection
  def update_actor_selection
    if Input.trigger?(Input::C)
      $game_party.last_actor_index = @status_window.index
      Sound.play_decision
      case @command_window.index
      when @__command_set_battle_skill_index  # ?????
        $scene = Scene_SetBattleSkill.new(
          @status_window.index,
          @__command_set_battle_skill_index,
          Scene_SetBattleSkill::HOST_MENU)
        return
      end
    end

    update_actor_selection_KGC_SkillCPSystem
  end
end

#???????????????????????????????????????

#==============================================================================
# ? Scene_SetBattleSkill
#------------------------------------------------------------------------------
#   ?????????????????????
#==============================================================================

class Scene_SetBattleSkill < Scene_Base
  #--------------------------------------------------------------------------
  # ? ??
  #--------------------------------------------------------------------------
  HOST_MENU   = 0  # ????? : ????
  HOST_MAP    = 1  # ????? : ???
  #--------------------------------------------------------------------------
  # ? ?????????
  #     actor_index : ??????????
  #     menu_index  : ?????????????
  #     host_scene  : ????? (0..????  1..???)
  #--------------------------------------------------------------------------
  def initialize(actor_index = 0, menu_index = 0, host_scene = HOST_MENU)
    @actor_index = actor_index
    @menu_index = menu_index
    @host_scene = host_scene
  end
  #--------------------------------------------------------------------------
  # ? ????
  #--------------------------------------------------------------------------
  def start
    super
    create_menu_background

    @actor = $game_party.members[@actor_index]
    create_windows
  end
  #--------------------------------------------------------------------------
  # ? ???????
  #--------------------------------------------------------------------------
  def create_windows
    @help_window = Window_Help.new
    if $imported["HelpExtension"]
      @help_window.row_max = KGC::HelpExtension::ROW_MAX
    end

    dy = @help_window.height
    @status_window = Window_BattleSkillStatus.new(0, dy, @actor)

    dy += @status_window.height
    @slot_window = Window_BattleSkillSlot.new(
      0,
      dy,
      Graphics.width / 2,
      Graphics.height - dy,
      @actor)
    @slot_window.help_window = @help_window
    @slot_window.active = true

    @list_window = Window_BattleSkillList.new(
      Graphics.width - @slot_window.width,
      dy,
      Graphics.width - @slot_window.width,
      Graphics.height - dy,
      @actor)
    @list_window.help_window = @help_window
  end
  #--------------------------------------------------------------------------
  # ? ????
  #--------------------------------------------------------------------------
  def terminate
    super
    dispose_menu_background
    @help_window.dispose
    @status_window.dispose
    @slot_window.dispose
    @list_window.dispose
  end
  #--------------------------------------------------------------------------
  # ? ???????
  #--------------------------------------------------------------------------
  def return_scene
    case @host_scene
    when HOST_MENU
      $scene = Scene_Menu.new(@menu_index)
    when HOST_MAP
      $scene = Scene_Map.new
    end
  end
  #--------------------------------------------------------------------------
  # ? ??????
  #--------------------------------------------------------------------------
  def update
    super
    update_menu_background
    update_window
    if @slot_window.active
      update_slot
    elsif @list_window.active
      update_list
    end
  end
  #--------------------------------------------------------------------------
  # ? ???????
  #--------------------------------------------------------------------------
  def update_window
    @help_window.update
    @status_window.update
    @slot_window.update
    @list_window.update
  end
  #--------------------------------------------------------------------------
  # ? ????????
  #--------------------------------------------------------------------------
  def refresh_window
    @status_window.refresh
    @slot_window.refresh
    @list_window.refresh
  end
  #--------------------------------------------------------------------------
  # ? ??????????????
  #--------------------------------------------------------------------------
  def next_actor
    @actor_index += 1
    @actor_index %= $game_party.members.size
    $scene = Scene_SetBattleSkill.new(@actor_index, @menu_index, @host_scene)
  end
  #--------------------------------------------------------------------------
  # ? ??????????????
  #--------------------------------------------------------------------------
  def prev_actor
    @actor_index += $game_party.members.size - 1
    @actor_index %= $game_party.members.size
    $scene = Scene_SetBattleSkill.new(@actor_index, @menu_index, @host_scene)
  end
  #--------------------------------------------------------------------------
  # ? ?????? (??????????????????)
  #--------------------------------------------------------------------------
  def update_slot
    # ???????????
    if @last_slot_index != @slot_window.index
      @list_window.slot_index = @slot_window.index
      @list_window.refresh
      @last_slot_index = @slot_window.index
    end

    if Input.trigger?(Input::A)
      Sound.play_decision
      # ????????????
      @actor.remove_battle_skill(@slot_window.index)
      refresh_window
    elsif Input.trigger?(Input::B)
      Sound.play_cancel
      return_scene
    elsif Input.trigger?(Input::C)
      Sound.play_decision
      # ?????????????
      @slot_window.active = false
      @list_window.active = true
    elsif Input.trigger?(Input::R)
      Sound.play_cursor
      next_actor
    elsif Input.trigger?(Input::L)
      Sound.play_cursor
      prev_actor
    end
  end
  #--------------------------------------------------------------------------
  # ? ?????? (?????????????????)
  #--------------------------------------------------------------------------
  def update_list
    if Input.trigger?(Input::B)
      Sound.play_cancel
      # ??????????????
      @slot_window.active = true
      @list_window.active = false
    elsif Input.trigger?(Input::C)
      skill = @list_window.skill
      # ?????????
      unless @actor.battle_skill_settable?(@slot_window.index, skill)
        Sound.play_buzzer
        return
      end
      Sound.play_decision
      set_skill(@slot_window.index, skill)
      # ??????????????
      @slot_window.active = true
      @list_window.active = false
    end
  end
  #--------------------------------------------------------------------------
  # ? ?????
  #     index : ??????
  #     skill : ???????
  #--------------------------------------------------------------------------
  def set_skill(index, skill)
    @actor.remove_battle_skill(index)
    if skill != nil
      @actor.set_battle_skill(index, skill)
    end
    refresh_window
  end
end
[/SPOILER]
-Instrucciones: personalizar la secuencia de comandos solo mire el script instruciones en las líneas 13 a 30
-Screen:
[SPOILER][/SPOILER]
Pd: no encontre el script que me pediste abajo

Última edición por hinaro fecha: 10-may-2009 a las 19:06.
  #117  
Antiguo 10-may-2009, 04:33
Avatar de legolas13
Newbie
 
Fecha de Ingreso: junio-2008
Mensajes: 35
legolas13 se está dando a conocer
Predeterminado Re: ~Base De Datos de Script de EMD~

Buenisimo gracias!!!
ix es 9 xD...
Tmb hay un script de orfebre, q tmb estaba en el ff9, q basicamente es hacer nuevos objetos con algunos q tengas en el inventario...
Si encuentras por favor tmb lo necesito
Saludos!
  #118  
Antiguo 12-may-2009, 21:55
Avatar de Alkimista_Zieg
Pro User
 
Fecha de Ingreso: octubre-2006
Ubicación: En los Cuarteles del Clan Uchiha [Jefazo]
Mensajes: 944
Alkimista_Zieg se está dando a conocer
Predeterminado Re: ~Base De Datos de Script de EMD~

actualizado el primer post ^^ lo siento por al demora xP
  #119  
Antiguo 12-may-2009, 23:15
Avatar de legolas13
Newbie
 
Fecha de Ingreso: junio-2008
Mensajes: 35
legolas13 se está dando a conocer
Predeterminado Re: ~Base De Datos de Script de EMD~

Gracias x el script! voy a ver si me sirve....
Aca pongo un script de orfere q encontre... creo q esta en japones o algo... si lo pueden traducir o alguien sabe como usarlo agradeceria q me digan...

-Nombre Del Script: Orfebreria

-Version Del Script: ???

-Rpg Maker:
Vx (rggs2)

-Introduccion: Supuestamente seria como el sistema de orfebreria del ff9...

-Script:

[SPOILER]#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/ ◆ アイテム合成 - KGC_ComposeItem ◆ VX ◆
#_/ ◇ Last update : 2008/11/02 ◇
#_/----------------------------------------------------------------------------
#_/ 複数のアイテムを合成し、新たなアイテムを作り出す機能を作成します。
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

#================================================= =============================
# ★ カスタマイズ項目 - Customize ★
#================================================= =============================

module KGC
module ComposeItem
# ◆ 合成画面呼び出しフラグを表すスイッチ番号
# このスイッチを ON にすると、通常のショップの代わりに合成屋が開きます。
COMPOSE_CALL_SWITCH = 2

# ◆ 合成レシピ
# [費用, "タイプ:ID,個数", ...]
# 【 費用 】合成費用
# 【タイプ】合成素材の種類 (I..アイテム W..武器 A..防具)
# 【 ID 】合成素材のID (↑と対応)
# 【 個数 】合成素材の必要数
# "タイプ:ID,個数" はいくつでも指定できます。
# 個数を省略して "タイプ:ID" と書いた場合、個数は 1 扱いとなります。
# 個数を 0 にした場合、1 個以上持っていれば何度でも合成できます。
# レシピ配列は、添字がアイテム・武器・防具IDに対応しています。
RECIPE_ITEM = [] # アイテム
RECIPE_WEAPON = [] # 武器
RECIPE_ARMOR = [] # 防具
# ここから下に合成レシピを定義。
# <設定例>
# アイテムID:8 の合成レシピ
# アイテムID 2, 4, 7 を 1 個ずつ消費。無料。
RECIPE_ITEM[8] = [0, "I:2", "I:4", "I:7"]
# 武器ID:16 の合成レシピ
# 武器ID:10 を 1 個、アイテムID:16 を 2 個消費。800 G。
RECIPE_WEAPON[16] = [800, "W:10", "I:16,2"]
# 防具ID:29 の合成レシピ
# 防具ID:25 を 1 個、アイテムID:8 を 3 個消費。2000 G。
RECIPE_ARMOR[29] = [2000, "A:25", "I:8,3"]

# ◆ 合成コマンド名
# "購入する" コマンドの位置に表示されます。
# ※ 他のコマンド名は [Vocab] で変更可能。
VOCAB_COMPOSE_ITEM = "合成する"
# ◆ 合成アイテム情報切り替えボタン
# 「素材リスト <--> 能力値変化(装備品のみ)」を切り替えるボタン。
# 使用しない場合は nil を指定。
SWITCH_INFO_BUTTON = Input::X

# ◆ 必要素材リストをコンパクトにする
# 素材数が多い場合は true にしてください。
COMPACT_MATERIAL_LIST = true
# ◆ コマンドウィンドウを表示しない
# true : XP 版と同様のスタイル
# false : VX 仕様
HIDE_COMMAND_WINDOW = false
# ◆ 所持金ウィンドウを表示しない
# true : 消える
# false : 表示
# HIDE_COMMAND_WINDOW が false のときは、常に false 扱いとなります。
HIDE_GOLD_WINDOW = false
# ◆ 合成費用が 0 の場合、費用を表示しない
# true : 表示しない
# false : 0 と表示
HIDE_ZERO_COST = true

# ◆ 合成済みのレシピは常に表示する
# true : 一度でも合成したことがあれば常にリストに表示
# false : 合成したことがあっても↓の条件に従う
SHOW_COMPOSED_RECIPE = true
# ◆ 合成費用不足のレシピを隠す
# true : 費用不足ならリストに表示しない
# false : 費用不足でも表示
HIDE_SHORTAGE_COST = false
# ◆ 合成素材不足のレシピを隠す
# true : 素材不足ならリストに表示しない
# false : 素材不足でも表示
HIDE_SHORTAGE_MATERIAL = true
# ◆ 「判明・解禁・存在」機能を使用する
# true : 判明・解禁・存在するまで表示しない
# false : 素材さえあれば合成可能
# true の場合、仕様上強制的に
# HIDE_SHORTAGE_COST = false
# HIDE_SHORTAGE_MATERIAL = false
# という扱いになります。
NEED_RECIPE_EXIST = true

# ◆ 合成したことがないレシピのアイテム名を隠す
MASK_UNKNOWN_RECIPE_NAME = true
# ◆ 合成したことがないレシピに表示する名前
# 1文字だけ指定すると、アイテム名と同じ文字数に拡張されます。
UNKNOWN_NAME_MASK = "?"
# ◆ 合成したことがないレシピのヘルプを隠す
HIDE_UNKNOWN_RECIPE_HELP = true
# ◆ 合成したことがないレシピに表示するヘルプ
UNKNOWN_RECIPE_HELP = "合成したことがありません。"
# ◆ 判明・解禁していないレシピの素材を隠す
# NEED_RECIPE_EXIST = false の場合、常に false 扱いとなります。
HIDE_UNKNOWN_RECIPE_MATERIAL = true
# ◆ 素材を隠す場合の表示文字列
UNKNOWN_RECIPE_MATERIAL = "????????"
end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

$imported = {} if $imported == nil
$imported["ComposeItem"] = true

module KGC::ComposeItem
unless NEED_RECIPE_EXIST
HIDE_UNKNOWN_RECIPE_MATERIAL = false
end

module Regexp
# レシピ
RECIPE = /([IWA])\s*:\s*(\d+)(\s*,\s*\d+)?/i
end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#================================================= =============================
# □ KGC::Commands
#================================================= =============================

module KGC
module Commands
module_function
#--------------------------------------------------------------------------
# ○ レシピ判明フラグを設定
# type : レシピのタイプ (0..アイテム 1..武器 2..防具)
# id : アイテムの ID
# enabled : true..判明 false..未判明
#--------------------------------------------------------------------------
def set_recipe_cleared(type, id, enabled = true)
item = nil
case type
when 0, :item # アイテム
item = $data_items[id]
when 1, :weapon # 武器
item = $data_weapons[id]
when 2, :armor # 防具
item = $data_armors[id]
end

$game_party.set_recipe_cleared(item, enabled) if item != nil
end
#--------------------------------------------------------------------------
# ○ レシピ解禁フラグを設定
# type : レシピのタイプ (0..アイテム 1..武器 2..防具)
# id : アイテムの ID
# enabled : true..解禁 false..未解禁
#--------------------------------------------------------------------------
def set_recipe_opened(type, id, enabled = true)
item = nil
case type
when 0, :item # アイテム
item = $data_items[id]
when 1, :weapon # 武器
item = $data_weapons[id]
when 2, :armor # 防具
item = $data_armors[id]
end

$game_party.set_recipe_opened(item, enabled) if item != nil
end
#--------------------------------------------------------------------------
# ○ レシピ存在フラグを設定
# type : レシピのタイプ (0..アイテム 1..武器 2..防具)
# id : アイテムの ID
# enabled : true or false
#--------------------------------------------------------------------------
def set_recipe_exist(type, id, enabled = true)
item = nil
case type
when 0, :item # アイテム
item = $data_items[id]
when 1, :weapon # 武器
item = $data_weapons[id]
when 2, :armor # 防具
item = $data_armors[id]
end

$game_party.set_recipe_exist(item, enabled) if item != nil
end
end
end

class Game_Interpreter
include KGC::Commands
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#================================================= =============================
# ■ Vocab
#================================================= =============================

module Vocab
# 合成画面
ComposeItem = KGC::ComposeItem::VOCAB_COMPOSE_ITEM
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#================================================= =============================
# ■ RPG::BaseItem
#================================================= =============================

class RPG::BaseItem
#--------------------------------------------------------------------------
# ○ クラス変数
#--------------------------------------------------------------------------
@@__masked_name =
KGC::ComposeItem::UNKNOWN_NAME_MASK # マスク名
@@__expand_masked_name = false # マスク名拡張表示フラグ

if @@__masked_name != nil
@@__expand_masked_name = (@@__masked_name.scan(/./).size == 1)
end
#--------------------------------------------------------------------------
# ○ アイテム合成のキャッシュ生成
#--------------------------------------------------------------------------
def create_compose_item_cache
@__compose_cost = 0
@__compose_materials = []

# レシピ取得
recipe = nil
case self
when RPG::Item # アイテム
recipe = KGC::ComposeItem::RECIPE_ITEM[self.id]
when RPG::Weapon # 武器
recipe = KGC::ComposeItem::RECIPE_WEAPON[self.id]
when RPG::Armor # 防具
recipe = KGC::ComposeItem::RECIPE_ARMOR[self.id]
end
return if recipe == nil
recipe = recipe.dup

@__compose_cost = recipe.shift
# 素材リストを作成
recipe.each { |r|
if r =~ KGC::ComposeItem::Regexp::RECIPE
material = Game_ComposeMaterial.new
material.kind = $1.upcase # 素材の種類を取得
material.id = $2.to_i # 素材の ID を取得
if $3 != nil
material.number = [$3[/\d+/].to_i, 0].max # 必要数を取得
end
@__compose_materials << material
end
}
end
#--------------------------------------------------------------------------
# ○ マスク名
#--------------------------------------------------------------------------
def masked_name
if @@__expand_masked_name
# マスク名を拡張して表示
return @@__masked_name * self.name.scan(/./).size
else
return @@__masked_name
end
end
#--------------------------------------------------------------------------
# ○ 合成用費用
#--------------------------------------------------------------------------
def compose_cost
create_compose_item_cache if @__compose_cost == nil
return @__compose_cost
end
#--------------------------------------------------------------------------
# ○ 合成用素材リスト
#--------------------------------------------------------------------------
def compose_materials
create_compose_item_cache if @__compose_materials == nil
return @__compose_materials
end
#--------------------------------------------------------------------------
# ○ 合成アイテムか
#--------------------------------------------------------------------------
def is_compose?
return !compose_materials.empty?
end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#================================================= =============================
# ■ Game_Party
#================================================= =============================

class Game_Party < Game_Unit
#--------------------------------------------------------------------------
# ○ 合成済みフラグをクリア
#--------------------------------------------------------------------------
def clear_composed_flag
@item_composed = {}
@weapon_composed = {}
@armor_composed = {}
end
#--------------------------------------------------------------------------
# ○ レシピ判明フラグをクリア
#--------------------------------------------------------------------------
def clear_recipe_cleared_flag
@item_recipe_cleared = {}
@weapon_recipe_cleared = {}
@armor_recipe_cleared = {}
end
#--------------------------------------------------------------------------
# ○ レシピ解禁フラグをクリア
#--------------------------------------------------------------------------
def clear_recipe_opened_flag
@item_recipe_opened = {}
@weapon_recipe_opened = {}
@armor_recipe_opened = {}
end
#--------------------------------------------------------------------------
# ○ レシピ存在フラグをクリア
#--------------------------------------------------------------------------
def clear_recipe_exist_flag
@item_recipe_exist = {}
@weapon_recipe_exist = {}
@armor_recipe_exist = {}
end
#--------------------------------------------------------------------------
# ○ アイテムの合成済みフラグを設定
# item : アイテム
# flag : true..合成済み false..未合成
#--------------------------------------------------------------------------
def set_item_composed(item, flag = true)
return false unless item.is_a?(RPG::BaseItem) # アイテム以外
return false unless item.is_compose? # 合成アイテム以外

# 合成済みフラグを格納するハッシュを作成
clear_composed_flag if @item_composed == nil

# 合成済みフラグをセット
case item
when RPG::Item # アイテム
@item_composed[item.id] = flag
when RPG::Weapon # 武器
@weapon_composed[item.id] = flag
when RPG::Armor # 防具
@armor_composed[item.id] = flag
end
end
#--------------------------------------------------------------------------
# ○ アイテムの合成済み判定
# item : アイテム
#--------------------------------------------------------------------------
def item_composed?(item)
return false unless item.is_a?(RPG::BaseItem) # アイテム以外
return false unless item.is_compose? # 合成アイテム以外

# 合成済みフラグを格納するハッシュを作成
clear_composed_flag if @item_composed == nil

# 合成済み判定
case item
when RPG::Item # アイテム
return @item_composed[item.id]
when RPG::Weapon # 武器
return @weapon_composed[item.id]
when RPG::Armor # 防具
return @armor_composed[item.id]
end
return false
end
#--------------------------------------------------------------------------
# ○ アイテムの合成済みフラグを設定
# item : アイテム
# flag : true..合成済み false..未合成
#--------------------------------------------------------------------------
def set_item_composed(item, flag = true)
return false unless item.is_a?(RPG::BaseItem) # アイテム以外
return false unless item.is_compose? # 合成アイテム以外

# 合成済みフラグを格納するハッシュを作成
clear_composed_flag if @item_composed == nil

# 合成済みフラグをセット
case item
when RPG::Item # アイテム
@item_composed[item.id] = flag
when RPG::Weapon # 武器
@weapon_composed[item.id] = flag
when RPG::Armor # 防具
@armor_composed[item.id] = flag
end
end
#--------------------------------------------------------------------------
# ○ レシピ判明判定
# item : アイテム
#--------------------------------------------------------------------------
def recipe_cleared?(item)
return false unless item.is_a?(RPG::BaseItem) # アイテム以外
return false unless item.is_compose? # 合成アイテム以外

# 判明フラグを格納するハッシュを作成
clear_recipe_cleared_flag if @item_recipe_cleared == nil

# 判定
case item
when RPG::Item # アイテム
return @item_recipe_cleared[item.id]
when RPG::Weapon # 武器
return @weapon_recipe_cleared[item.id]
when RPG::Armor # 防具
return @armor_recipe_cleared[item.id]
end
return false
end
#--------------------------------------------------------------------------
# ○ アイテムの判明フラグを設定
# item : アイテム
# flag : true..判明 false..未判明
#--------------------------------------------------------------------------
def set_recipe_cleared(item, flag = true)
return false unless item.is_a?(RPG::BaseItem) # アイテム以外
return false unless item.is_compose? # 合成アイテム以外

# 判明フラグを格納するハッシュを作成
clear_recipe_cleared_flag if @item_recipe_cleared == nil

# 判明フラグをセット
case item
when RPG::Item # アイテム
@item_recipe_cleared[item.id] = flag
when RPG::Weapon # 武器
@weapon_recipe_cleared[item.id] = flag
when RPG::Armor # 防具
@armor_recipe_cleared[item.id] = flag
end
end
#--------------------------------------------------------------------------
# ○ レシピ解禁判定
# item : アイテム
#--------------------------------------------------------------------------
def recipe_opened?(item)
return false unless item.is_a?(RPG::BaseItem) # アイテム以外
return false unless item.is_compose? # 合成アイテム以外

# 解禁フラグを格納するハッシュを作成
clear_recipe_opened_flag if @item_recipe_opened == nil

# 判定
case item
when RPG::Item # アイテム
return @item_recipe_opened[item.id]
when RPG::Weapon # 武器
return @weapon_recipe_opened[item.id]
when RPG::Armor # 防具
return @armor_recipe_opened[item.id]
end
return false
end
#--------------------------------------------------------------------------
# ○ アイテムの解禁フラグを設定
# item : アイテム
# flag : true..解禁 false..未解禁
#--------------------------------------------------------------------------
def set_recipe_opened(item, flag = true)
return false unless item.is_a?(RPG::BaseItem) # アイテム以外
return false unless item.is_compose? # 合成アイテム以外

# 解禁フラグを格納するハッシュを作成
clear_recipe_opened_flag if @item_recipe_opened == nil

# 解禁フラグをセット
case item
when RPG::Item # アイテム
@item_recipe_opened[item.id] = flag
when RPG::Weapon # 武器
@weapon_recipe_opened[item.id] = flag
when RPG::Armor # 防具
@armor_recipe_opened[item.id] = flag
end
end
#--------------------------------------------------------------------------
# ○ レシピ存在判定
# item : アイテム
#--------------------------------------------------------------------------
def recipe_exist?(item)
return false unless item.is_a?(RPG::BaseItem) # アイテム以外
return false unless item.is_compose? # 合成アイテム以外

# 存在フラグを格納するハッシュを作成
clear_recipe_exist_flag if @item_recipe_exist == nil

# 判定
case item
when RPG::Item # アイテム
return @item_recipe_exist[item.id]
when RPG::Weapon # 武器
return @weapon_recipe_exist[item.id]
when RPG::Armor # 防具
return @armor_recipe_exist[item.id]
end
return false
end
#--------------------------------------------------------------------------
# ○ アイテムの存在フラグを設定
# item : アイテム
# flag : true..存在 false..存在しない
#--------------------------------------------------------------------------
def set_recipe_exist(item, flag = true)
return false unless item.is_a?(RPG::BaseItem) # アイテム以外
return false unless item.is_compose? # 合成アイテム以外

# 存在フラグを格納するハッシュを作成
clear_recipe_exist_flag if @item_recipe_exist == nil

# 存在フラグをセット
case item
when RPG::Item # アイテム
@item_recipe_exist[item.id] = flag
when RPG::Weapon # 武器
@weapon_recipe_exist[item.id] = flag
when RPG::Armor # 防具
@armor_recipe_exist[item.id] = flag
end
end
#--------------------------------------------------------------------------
# ○ アイテム名マスク判定
# item : アイテム
#--------------------------------------------------------------------------
def item_name_mask?(item)
return false unless KGC::ComposeItem::MASK_UNKNOWN_RECIPE_NAME
return false if item_composed?(item) # 合成済み
return false if recipe_cleared?(item) # 判明済み

return true
end
#--------------------------------------------------------------------------
# ○ 素材非表示判定
# item : アイテム
#--------------------------------------------------------------------------
def item_compose_material_mask?(item)
return false unless KGC::ComposeItem::HIDE_UNKNOWN_RECIPE_MATERIAL
return false if item_composed?(item) # 合成済み
return false if recipe_cleared?(item) # 判明済み
return false if recipe_opened?(item) # 解禁済み

return true
end
#--------------------------------------------------------------------------
# ○ アイテムの合成可能判定
# item : アイテム
#--------------------------------------------------------------------------
def item_can_compose?(item)
return false unless item_compose_cost_satisfy?(item)
return false unless item_compose_material_satisfy?(item)

return true
end
#--------------------------------------------------------------------------
# ○ 合成アイテムの資金充足判定
# item : アイテム
#--------------------------------------------------------------------------
def item_compose_cost_satisfy?(item)
return false unless item.is_a?(RPG::BaseItem) # アイテム以外
return false unless item.is_compose? # 合成アイテム以外

return (gold >= item.compose_cost)
end
#--------------------------------------------------------------------------
# ○ 合成アイテムの素材充足判定
# item : アイテム
#--------------------------------------------------------------------------
def item_compose_material_satisfy?(item)
return false unless item.is_a?(RPG::BaseItem) # アイテム以外
return false unless item.is_compose? # 合成アイテム以外

item.compose_materials.each { |material|
num = item_number(material.item)
return false if num < material.number || num == 0 # 素材不足
}
return true
end
#--------------------------------------------------------------------------
# ○ アイテムの合成可能数を取得
# item : アイテム
#--------------------------------------------------------------------------
def number_of_composable(item)
return 0 unless item.is_a?(RPG::BaseItem) # アイテム以外
return 0 unless item.is_compose? # 合成アイテム以外

number = ($imported["LimitBreak"] ? item.number_limit : 99)
if item.compose_cost > 0
number = [number, gold / item.compose_cost].min
end
# 素材数判定
item.compose_materials.each { |material|
next if material.number == 0 # 必要数 0 は無視
n = item_number(material.item) / material.number
number = [number, n].min
}
return number
end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#================================================= =============================
# □ Game_ComposeMaterial
#------------------------------------------------------------------------------
# 合成素材の情報を格納するクラスです。
#================================================= =============================

class Game_ComposeMaterial
#--------------------------------------------------------------------------
# ○ 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :kind # アイテムの種類 (/[IWA]/)
attr_accessor :id # アイテムの ID
attr_accessor :number # 必要数
#--------------------------------------------------------------------------
# ○ オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
@kind = "I"
@id = 0
@number = 1
end
#--------------------------------------------------------------------------
# ○ アイテム取得
#--------------------------------------------------------------------------
def item
case @kind
when "I" # アイテム
return $data_items[@id]
when "W" # 武器
return $data_weapons[@id]
when "A" # 防具
return $data_armors[@id]
else
return nil
end
end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#================================================= =============================
# ■ Window_Base
#================================================= =============================

class Window_Base < Window
#--------------------------------------------------------------------------
# ○ マスク済みアイテム名の描画
# item : アイテム (スキル、武器、防具でも可)
# x : 描画先 X 座標
# y : 描画先 Y 座標
# enabled : 有効フラグ。false のとき半透明で描画
#--------------------------------------------------------------------------
def draw_masked_item_name(item, x, y, enabled = true)
return if item == nil

draw_icon(item.icon_index, x, y, enabled)
self.contents.font.color = normal_color
self.contents.font.color.alpha = enabled ? 255 : 128
self.contents.draw_text(x + 24, y, 172, WLH, item.masked_name)
end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#================================================= =============================
# □ Window_ComposeNumber
#------------------------------------------------------------------------------
# 合成画面で、合成するアイテムの個数を入力するウィンドウです。
#================================================= =============================

class Window_ComposeNumber < Window_ShopNumber
#--------------------------------------------------------------------------
# ○ 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :sell_flag # 売却フラグ
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# x : ウィンドウの X 座標
# y : ウィンドウの Y 座標
#--------------------------------------------------------------------------
alias initialize_KGC_ComposeItem initialize unless $@
def initialize(x, y)
@sell_flag = false

initialize_KGC_ComposeItem(x, y)
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
y = 96
self.contents.clear
if @sell_flag || !$game_party.item_name_mask?(@item)
draw_item_name(@item, 0, y)
else
draw_masked_item_name(@item, 0, y)
end
self.contents.font.color = normal_color
self.contents.draw_text(212, y, 20, WLH, "×")
self.contents.draw_text(248, y, 20, WLH, @number, 2)
self.cursor_rect.set(244, y, 28, WLH)
if !KGC::ComposeItem::HIDE_ZERO_COST || @price > 0
draw_currency_value(@price * @number, 4, y + WLH * 2, 264)
end
end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#================================================= =============================
# □ Window_ComposeItem
#------------------------------------------------------------------------------
# 合成画面で、合成できる商品の一覧を表示するウィンドウです。
#================================================= =============================

class Window_ComposeItem < Window_ShopBuy
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
@data = []
for goods_item in @shop_goods
case goods_item[0]
when 0
item = $data_items[goods_item[1]]
when 1
item = $data_weapons[goods_item[1]]
when 2
item = $data_armors[goods_item[1]]
end
# 合成アイテムのみ追加
@data.push(item) if include?(item)
end
@item_max = @data.size
create_contents
for i in 0...@item_max
draw_item(i)
end
end
#--------------------------------------------------------------------------
# ○ アイテムをリストに含めるかどうか
# item : アイテム
#--------------------------------------------------------------------------
def include?(item)
return false if item == nil # アイテムが nil なら含めない
return false unless item.is_compose? # 合成アイテム以外は含めない

# 合成済みなら表示
if KGC::ComposeItem::SHOW_COMPOSED_RECIPE
return true if $game_party.item_composed?(item)
end
# 判明 or 解禁 or 存在済みなら表示
exist_flag = $game_party.recipe_cleared?(item) ||
$game_party.recipe_opened?(item) || $game_party.recipe_exist?(item)
if KGC::ComposeItem::NEED_RECIPE_EXIST && exist_flag
return true
end
# 費用不足なら隠す
if KGC::ComposeItem::HIDE_SHORTAGE_COST
return false unless $game_party.item_compose_cost_satisfy?(item)
end
# 素材不足なら隠す
if KGC::ComposeItem::HIDE_SHORTAGE_MATERIAL
return false unless $game_party.item_compose_material_satisfy?(item)
end

if KGC::ComposeItem::NEED_RECIPE_EXIST
# 判明 or 解禁 or 存在していない
return false unless exist_flag
end

return true
end
#--------------------------------------------------------------------------
# ○ アイテムを許可状態で表示するかどうか
# item : アイテム
#--------------------------------------------------------------------------
def enable?(item)
return $game_party.item_can_compose?(item)
end
#--------------------------------------------------------------------------
# ● 項目の描画
# index : 項目番号
#--------------------------------------------------------------------------
def draw_item(index)
item = @data[index]
number = $game_party.item_number(item)
limit = ($imported["LimitBreak"] ? item.number_limit : 99)
rect = item_rect(index)
self.contents.clear_rect(rect)
if $game_party.item_name_mask?(item)
draw_masked_item_name(item, rect.x, rect.y, enable?(item))
else
draw_item_name(item, rect.x, rect.y, enable?(item))
end
# 費用を描画
if !KGC::ComposeItem::HIDE_ZERO_COST || item.compose_cost > 0
rect.width -= 4
self.contents.draw_text(rect, item.compose_cost, 2)
end
end

if KGC::ComposeItem::HIDE_UNKNOWN_RECIPE_HELP
#--------------------------------------------------------------------------
# ● ヘルプテキスト更新
#--------------------------------------------------------------------------
def update_help
item = (index >= 0 ? @data[index] : nil)
if item == nil || !$game_party.item_name_mask?(item)
# アイテムが nil or マスクなしなら [Window_ShopBuy] に任せる
super
else
@help_window.set_text(KGC::ComposeItem::UNKNOWN_RE CIPE_HELP)
end
end
end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#================================================= =============================
# □ Window_ComposeStatus
#------------------------------------------------------------------------------
#  合成画面で、素材の所持数や必要数を表示するウィンドウです。
#================================================= =============================

class Window_ComposeStatus < Window_ShopStatus
#--------------------------------------------------------------------------
# ○ 表示モード
#--------------------------------------------------------------------------
MODE_MATERIAL = 0 # 素材リスト
MODE_STATUS = 1 # パーティのステータス
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# x : ウィンドウの X 座標
# y : ウィンドウの Y 座標
#--------------------------------------------------------------------------
def initialize(x, y)
@mode = MODE_MATERIAL
super(x, y)
end
#--------------------------------------------------------------------------
# ○ モード変更
#--------------------------------------------------------------------------
def change_mode
case @mode
when MODE_MATERIAL
@mode = MODE_STATUS
when MODE_STATUS
@mode = MODE_MATERIAL
end
self.oy = 0
refresh
end
#--------------------------------------------------------------------------
# ● ウィンドウ内容の作成
#--------------------------------------------------------------------------
def create_contents
if @mode == MODE_STATUS
super
return
end

self.contents.dispose
ch = height - 32
if @item != nil
mag = (KGC::ComposeItem::COMPACT_MATERIAL_LIST ? 1 : 2)
ch = [ch, WLH * (mag + @item.compose_materials.size * mag)].max
end
self.contents = Bitmap.new(width - 32, ch)
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
create_contents
self.contents.font.size = Font.default_size
case @mode
when MODE_MATERIAL
draw_material_list
when MODE_STATUS
super
end
end
#--------------------------------------------------------------------------
# ○ 素材リストを描画
#--------------------------------------------------------------------------
def draw_material_list
return if @item == nil

number = $game_party.item_number(@item)
self.contents.font.color = system_color
self.contents.draw_text(4, 0, 200, WLH, Vocab::Possession)
self.contents.font.color = normal_color
self.contents.draw_text(4, 0, 200, WLH, number, 2)

# 不明な素材を隠す
if $game_party.item_compose_material_mask?(@item)
self.contents.draw_text(4, WLH * 2, 200, WLH,
KGC::ComposeItem::UNKNOWN_RECIPE_MATERIAL, 1)
return
end

self.contents.font.size = 16 if KGC::ComposeItem::COMPACT_MATERIAL_LIST
mag = (KGC::ComposeItem::COMPACT_MATERIAL_LIST ? 1 : 2)
@item.compose_materials.each_with_index { |material, i|
y = WLH * (mag + i * mag)
draw_material_info(0, y, material)
}
end
#--------------------------------------------------------------------------
# ○ 素材情報を描画
#--------------------------------------------------------------------------
def draw_material_info(x, y, material)
m_item = material.item
return if m_item == nil
number = $game_party.item_number(m_item)
enabled = (number > 0 && number >= material.number)
draw_item_name(m_item, x, y, enabled)
if KGC::ComposeItem::COMPACT_MATERIAL_LIST
m_number = (material.number == 0 ? "-" : sprintf("%d", material.number))
self.contents.draw_text(x, y, width - 32, WLH,
sprintf("%s/%d", m_number, number), 2)
else
m_number = (material.number == 0 ? "-" : sprintf("%2d", material.number))
self.contents.draw_text(x, y + WLH, width - 32, WLH,
sprintf("%2s/%2d", m_number, number), 2)
end
end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#================================================= =============================
# ■ Scene_Map
#================================================= =============================

class Scene_Map < Scene_Base
#--------------------------------------------------------------------------
# ● ショップ画面への切り替え
#--------------------------------------------------------------------------
alias call_shop_KGC_ComposeItem call_shop
def call_shop
# 合成画面を呼び出した場合
if $game_switches[KGC::ComposeItem::COMPOSE_CALL_SWITCH]
# 合成画面に移行
$game_temp.next_scene = nil
$game_switches[KGC::ComposeItem::COMPOSE_CALL_SWITCH] = false
$scene = Scene_ComposeItem.new
else
call_shop_KGC_ComposeItem
end
end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#================================================= =============================
# □ Scene_ComposeItem
#------------------------------------------------------------------------------
#  合成画面の処理を行うクラスです。(Scene_Shop を流用)
#================================================= =============================

class Scene_ComposeItem < Scene_Shop
#--------------------------------------------------------------------------
# ● 開始処理
#--------------------------------------------------------------------------
def start
super
# コマンドウィンドウ非表示
if KGC::ComposeItem::HIDE_COMMAND_WINDOW
@command_window.visible = false
@gold_window.y = Graphics.height - @gold_window.height
@gold_window.z = @status_window.z + 100
@gold_window.visible = !KGC::ComposeItem::HIDE_GOLD_WINDOW

@dummy_window.y = @command_window.y
@dummy_window.height += @command_window.height
end

# [Scene_Shop] 再利用のため、合成リストに @buy_window を使用
@buy_window.dispose
@buy_window = Window_ComposeItem.new(0, @dummy_window.y)
@buy_window.height = @dummy_window.height
@buy_window.active = false
@buy_window.visible = false
@buy_window.help_window = @help_window

# その他のウィンドウを再構成
@number_window.dispose
@number_window = Window_ComposeNumber.new(0, @buy_window.y)
@number_window.height = @buy_window.height
@number_window.create_contents
@number_window.active = false
@number_window.visible = false

@status_window.dispose
@status_window = Window_ComposeStatus.new(@buy_window.width, @buy_window.y)
@status_window.height = @buy_window.height
@status_window.create_contents
@status_window.visible = false

# コマンドウィンドウ非表示の場合、合成ウィンドウに切り替え
if KGC::ComposeItem::HIDE_COMMAND_WINDOW
@command_window.active = false
@dummy_window.visible = false
@buy_window.active = true
@buy_window.visible = true
@buy_window.update_help
@status_window.visible = true
@status_window.item = @buy_window.item
end
end
#--------------------------------------------------------------------------
# ● コマンドウィンドウの作成
#--------------------------------------------------------------------------
def create_command_window
s1 = Vocab::ComposeItem
s2 = Vocab::ShopSell
s3 = Vocab::ShopCancel
@command_window = Window_Command.new(384, [s1, s2, s3], 3)
@command_window.y = 56
if $game_temp.shop_purchase_only
@command_window.draw_item(1, false)
end
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
if KGC::ComposeItem::SWITCH_INFO_BUTTON != nil &&
Input.trigger?(KGC::ComposeItem::SWITCH_INFO_BUTTO N)
Sound.play_cursor
@status_window.change_mode
end
end
#--------------------------------------------------------------------------
# ● 購入アイテム選択の更新
#--------------------------------------------------------------------------
def update_buy_selection
@number_window.sell_flag = false

# コマンドウィンドウ非表示で B ボタンが押された場合
if KGC::ComposeItem::HIDE_COMMAND_WINDOW && Input.trigger?(Input::B)
Sound.play_cancel
$scene = Scene_Map.new
return
end

@status_window.item = @buy_window.item
if Input.trigger?(Input::C)
@item = @buy_window.item
# アイテムが無効なら選択不可
if @item == nil
Sound.play_buzzer
return
end

# 合成不可能 or 限界数まで所持している場合は選択不可
number = $game_party.item_number(@item)
limit = ($imported["LimitBreak"] ? @item.number_limit : 99)
if !$game_party.item_can_compose?(@item) || number == limit
Sound.play_buzzer
return
end

# 個数入力に切り替え
Sound.play_decision
max = $game_party.number_of_composable(@item)
max = [max, limit - number].min
@buy_window.active = false
@buy_window.visible = false
@number_window.set(@item, max, @item.compose_cost)
@number_window.active = true
@number_window.visible = true
return
end

super
end
#--------------------------------------------------------------------------
# ● 売却アイテム選択の更新
#--------------------------------------------------------------------------
def update_sell_selection
@number_window.sell_flag = true
super
end
#--------------------------------------------------------------------------
# ● 個数入力の決定
#--------------------------------------------------------------------------
def decide_number_input
if @command_window.index != 0 # 「合成する」以外
super
return
end

Sound.play_shop
@number_window.active = false
@number_window.visible = false
# 合成処理
operation_compose
@gold_window.refresh
@buy_window.refresh
@status_window.refresh
@buy_window.active = true
@buy_window.visible = true
end
#--------------------------------------------------------------------------
# ○ 合成の処理
#--------------------------------------------------------------------------
def operation_compose
$game_party.lose_gold(@number_window.number * @item.compose_cost)
$game_party.gain_item(@item, @number_window.number)
# 素材を減らす
@item.compose_materials.each { |material|
$game_party.lose_item(material.item,
material.number * @number_window.number)
}
# 合成済みにする
$game_party.set_item_composed(@item)
end
end[/SPOILER]

No puse screenshots xq no encontre...
  #120  
Antiguo 13-may-2009, 02:41
Avatar de frankyhiro
Advanced Newbie
 
Fecha de Ingreso: enero-2009
Mensajes: 58
frankyhiro se está dando a conocer
Predeterminado Re: ~Base De Datos de Script de EMD~

a alguien podria publicarme un scrips para que un evento salga soloamente 1 ves en todo el juego para el rpg
maker XP porfa y si es posible tanbien para el VX
Tema Cerrado



Temas Similares para: ~Base De Datos de Script de EMD~
Tema Autor Foro Respuestas Último mensaje
Aplicación Base de datos de .ISOS Áldaron Playstation 15 21-jul-2008 19:05
Mi firma a base de paint Miguel_ Exposición de diseños 3 11-jul-2008 00:10
Data Base Error(pag Emd) Espartan94 Ayuda 11 03-jun-2008 21:57
Gestion de Base de Datos con *FileMaker* sawyer3000 Descargas directas 0 02-nov-2007 13:26


La franja horaria es GMT +1. La hora actual es: 17:47.


Powered by vBulletin®


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93