Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.
Conectarse

Recuperar mi contraseña

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

Nuestros miembros han publicado un total de 84767 mensajes en 12064 argumentos.

[XP] Script cavar

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [XP] Script cavar

Mensaje por teivko el 2017-01-31, 20:03

Bueno, como os dije en el post donde os pedia ayuda, al final consegui arreglarlo y he limpiado el codigo de variables que no eran necesarias o metodos que ya no hacian nada.

Las instrucciones para su uso son las siguientes:


  • Descargar el siguiente character y llamarlo shovel.png, si no tiene ese nombre dara problemas.


  • En la base de datos, en el apartado sistema, crear un atributo llamado PALA

  • En la base de datos, en el apartado armamento, crear un arma que se llame como querais, pero que tenga el atributo que os he dicho anteriormente.

  • Por diversos motivos, de los scripts que uso, este script necesita que un switch este activo, una de dos, o lo activais o eliminais la linea donde se hace (linea 88) if $game_switches[SwCavar]

  • Ahora mismo hay dos tipos de terrenos donde se puede cavar, el 2 y 3, estos indices estan al principio del script asi que podeis cambiarlos. Cualquier terreno con este tag, podra ser excavado.

  • Una vez hecho todo esto, equipáis el arma pala, y al darle a la tecla Z excavareis (esta tecla tambien es configurable al principio del script).


ADVERTENCIA

Este Script utiliza los cuatro primeros tiles del tileset para poner el hoyo, y los diferentes iconos de los tesoros que pueden encontrarse, por lo que deberas modificar el tileset para que funcione, o en el script, al principio del todo, cambiarle los valores a dichos indices
IHole = 384
IItem = 385
IWeapon = 386
IArmor = 387

Y eso es todo, espero que os sirva, y si no, pues lo siento XD.

Código:
# Original: Falcao script Pala version beta tester 0.1
# Modificado por Teivko
#Con esta modificacion se arregla el error de los iconos,
#ya que anteriormente cuando el mapa era mayor que el que viene por defecto
#al movernos por el mapa, los iconos de los items y los hoyos se movian.
#Ahora los graficos son tiles que cambian.

#Sugerencia, en el mapa dejar encima del terreno donde poder cavar
#la capa 1 y 2 libres, de otra forma cualquier elemento que haya,
#al cavar se sustituira por el hoyo en la capa 1, y un item en la capa 2


module FalcaoShovel

Terrain_tag1 = 2

# Primer terreno para cavar
# A = Tipo de tesoro
# B = ID de tesoro en base de datos
#
# Entre los tipos de tesoros estan los siguientes
# 1 = Item
# 2 = Weapon
# 3 = Armaduras
#
Ground_1 = {

 1=> [6, 7, 12, 11, 9, 12, 17, 14, 2, 8, 16],
 2=> [4,10,16,9],
 3=> []

}



Terrain_tag2 = 3

Ground_2 = {

 1=> [10,16],
 2=> [2,5],
 3=> [3,6,9,2,10]

}

##Con TECLA_CAVAR se indica la tecla que pulsaremos al cavar
TECLA_CAVAR = Input::A
#SwCavar indica el switch que debe estar activo para poder cavar
SwCavar = 483

#Estos indices corresponden con los del tileset, en este caso son los
#cuatro primeros sin contar los autotiles
IHole = 384
IItem = 385
IWeapon = 386
IArmor = 387

# Nota: Si no se quiere incluir un tipo de tesoro dejarlo vacio, ejemplo
# 3=> [] tesoro tipo 3 Armaduras no sera tomado en cuenta


end

class Pala
  include FalcaoShovel
  attr_accessor :holes
  attr_accessor :items
  attr_accessor :shovel_diging
  attr_accessor :sprites
  
  def initialize
    @coordenadas = []
    @holes = []
    @items = []
    @player = $game_player
    @shovel_diging = 0
  end
  
  def update
    update_pala
    update_tresure
    update_shovel_diging
  end
  
  def update_pala
    @sprites = $set_holesprite
    actor = $game_party.actors[0]
    if $game_switches[SwCavar]      #Si esta habilitada el switch de cavar
      return if @player.moving?
      return unless $data_weapons[actor.weapon_id].element_set.include?(
      $data_system.elements.index("PALA"))
      if Input.press?TECLA_CAVAR
        get_variables
        @shovel_diging = 15
        case $game_map.terrain_tag(@look_x,@look_y)
        when 0
          return
        when Terrain_tag1
          @tierra = Terrain_tag1
          @from_terrain = true
        when Terrain_tag2
          @tierra = Terrain_tag2
          @from_terrain = true
        end
      end
    end
  end
  
  def update_shovel_diging
    if @shovel_diging > 0
      @shovel_diging -= 1
      if @shovel_diging == 1
        @from_terrain ? check_coordenadas(@tierra) : same_place
        @shovel_diging = 0
      end
    end
  end
  
  def check_coordenadas(terrain)
    @terrain = terrain
    get_variables
    x = @look_x
    y = @look_y
    c = x , y
    if @coordenadas.include?(c)
      same_place
    end
    unless @coordenadas.include?(c)
      @coordenadas.push(c)
      create_hole(x, y)
      Audio.se_play("Audio/Se/016-Jump02")
    end
  end
  
  def create_hole(x,y)
    @sprites.hole_sprites.push(Sprite_Oyo.new(@sprites.viewport1,x, y))
    case rand(4) #was 6
    when 3
      check_terrain(x,y)
    end
    @from_terrain = false
  end
  
  # iterate terrains
  def check_terrain(x,y)
    kind = []
    ground_type = {}
    case @terrain
    when Terrain_tag1
      ground_type = Ground_1
    when Terrain_tag2
      ground_type = Ground_2
    end
 
    ground_type.each do |type, value|
      unless value.empty?
        kind.push(type)
      end
    end
    treasure_type = kind[rand(kind.size)]
    ground_type.each do |type, value|
      if type == treasure_type
        id = value[rand(value.size)]
        show_treasure(x, y, id, treasure_type)
      end
    end
  end
  
  def show_treasure(x,y,id,treasure)
    dir = @player.direction
    @sprites.item_sprites.push(Sprite_Item.new(@sprites.viewport1, id, dir, treasure, x, y))
  end
  
  
  def same_place
    Audio.se_play("Audio/Se/032-Switch01")
  end
  
  # actualizar tesoros
  def update_tresure
    for sprite in @sprites.item_sprites
      sx = sprite.item_x
      sy = sprite.item_y
      px = @player.x
      py = @player.y
  
      tesoro = sx, sy
      player = px, py      
      if tesoro == player
        ganar_tesoro(sprite)
      end
    end
  end
  
  def ganar_tesoro(tesoro)
    case tesoro.treasure
    when 1
      item = tesoro.treasure_type(tesoro.treasure)
      $game_party.gain_item(item.id, 1)
    when 2
      weapon = tesoro.treasure_type(tesoro.treasure)
      $game_party.gain_weapon(weapon.id, 1)
    when 3
      armor = tesoro.treasure_type(tesoro.treasure)
      $game_party.gain_armor(armor.id, 1)
    end
    @sprites.item_sprites.delete(tesoro)
    tesoro.eliminar
    tesoro.dispose    
    Audio.se_play("Audio/Se/056-Right02")
  end
  
  def get_variables
 case @player.direction
 when 2 #Mirando hacia abajo
 @look_x = @player.x;       @look_y = @player.y + 1
 when 4 #Mirando hacia izquierda
 @look_x = @player.x - 1;   @look_y = @player.y
 when 6 #Mirando hacia derecha
 @look_x = @player.x + 1;   @look_y = @player.y
 when 8 #Mirando hacia arriba
 @look_x = @player.x;       @look_y = @player.y - 1
    end
  end
end

class Spriteset_Map
  attr_accessor   :hole_sprites
  attr_accessor   :item_sprites
  attr_accessor   :viewport1
  alias falcosprites_shovel_ini initialize
  def initialize
    falcosprites_shovel_ini
    @plugin2 = true
    
    @shovel_sprites = []
    @shovel_sprites.push(Sprite_Shovel.new(@viewport1, $game_player))
    
    if $game_temp.transition_processing
      $pala               = Pala.new
    end
    
    @hole_sprites = []
    for h in $pala.holes
      x = h.hole_x
      y = h.hole_y
      @hole_sprites.push(Sprite_Oyo.new(@viewport1, x, y))
    end
    
    @item_sprites = []
    for i in $pala.items
      x = i.item_x
      y = i.item_y
      item = i.item_id
      dir = i.direction
      treasure = i.treasure
      @item_sprites.push(Sprite_Item.new(@viewport1, item, dir,treasure, x, y))
    end
    
  end

  alias falcosprites_shovel_dispose dispose
  def dispose
    $pala.holes = @hole_sprites
    $pala.items = @item_sprites
    falcosprites_shovel_dispose
    for hole in @hole_sprites
      hole.dispose
    end
    for item in @item_sprites
      item.dispose
    end
    for shovel in @shovel_sprites
      shovel.dispose
      @plugin2 = false
    end
  end
  
  alias falcosprites_shovel_update update
  def update
    falcosprites_shovel_update
    if @plugin2
      for shovel in @shovel_sprites
        shovel.update
      end
    end
  end
end

#--------------------------------------------------------------------------
# * Sprite caña. Falcao easy system.
#--------------------------------------------------------------------------
class Sprite_Oyo < RPG::Sprite
  attr_accessor :hole_x
  attr_accessor :hole_y
  def initialize(viewport, x, y)
    super(viewport)
    @hole_x = x
    @hole_y = y
    create_hole
  end
  
  def mierda_log
    log = ["Falcao script log: Please import Fish_rod to character folder",
    "Por favor Importe el grafico Fish_Rod a la carpeta character"]; p log
  end
  
  def create_hole
    $game_map.data[@hole_x, @hole_y, 1] = IHole
  end
end  
 
class Sprite_Item < RPG::Sprite
  attr_accessor :item_x
  attr_accessor :item_y
  attr_accessor :item_id
  attr_accessor :direction
  attr_accessor :treasure
  
  def initialize(viewport, itemid, dir, type, x, y)
    super(viewport)
    @item_id = itemid
    @item_x = x
    @item_y = y
    @direction = dir
    @treasure = type
    create_item
  end
  
  def create_item
    case @treasure
    when 1
      $game_map.data[@item_x, @item_y, 2] = IItem
    when 2
      $game_map.data[@item_x, @item_y, 2] = IWeapon
    when 3
      $game_map.data[@item_x, @item_y, 2] = IArmor
    end
  end
  
  def eliminar
    $game_map.data[@item_x, @item_y, 2] = 0
  end
  
  def treasure_type(kind)
    case kind
    when 1
      return $data_items[@item_id]
    when 2
      return $data_weapons[@item_id]
    when 3
      return $data_armors[@item_id]
    end
  end
  
  def create_icon #Para hacer el icono al mostrar que se ha conseguido dicho icono
    item = treasure_type(@treasure)
    icon = RPG::Cache.icon(item.icon_name) rescue nil
    w = self.bitmap.width
    h = self.bitmap.height
    self.bitmap.blt(0, 0, icon, Rect.new(0, 0, w, h), 255) rescue nil
  end

end

#--------------------------------------------------------------------------
# * Sprite pala. Falcao easy system.
#--------------------------------------------------------------------------
class Sprite_Shovel < RPG::Sprite
  attr_accessor :character                
  def initialize(viewport, character = nil)
    super(viewport)
    @character = character
    create_bitmap
    update
  end
  
  def mierda_log
    log = ["Falcao script log: Please import shovel to character folder",
    "Por favor Importe el grafico shovel a la carpeta character"]; p log
  end
  
  def update
    super
    update_src_rect
    update_direction
  end
  
  def create_bitmap
    self.bitmap = RPG::Cache.character("shovel",0) rescue mierda_log
    @cw = bitmap.width / 4
    @ch = bitmap.height / 4
    self.ox = @cw / 2
    self.oy = @ch
    self.visible = false
  end
  
  def update_src_rect
    sx = @character.pattern * @cw
    sy = (@character.direction - 2) / 2 * @ch
    self.src_rect.set(sx, sy, @cw, @ch)
    $pala.shovel_diging > 0 ? self.visible = true : self.visible = false
  end
  
  def update_direction
    self.x = @character.screen_x
    self.y = @character.screen_y
    self.z = @character.screen_z(@ch)
    self.opacity = @character.opacity
    self.blend_type = @character.blend_type
    self.bush_depth = @character.bush_depth
  end
end

class Scene_Map
  alias falcaoshovel_update update
  def update
    $set_holesprite = @spriteset
    falcaoshovel_update
    $pala.update
  end
end  

#--------------------------------------------------------------------------
# * Plugins Game_Character. Make game player Stop. Pure alias method
#--------------------------------------------------------------------------
class Game_Character
  alias falcao14move_down move_down
  def move_down(turn_enabled = true)
    return if $pala.shovel_diging > 0 && self.is_a?(Game_Player)
    falcao14move_down(turn_enabled = true)
  end
  alias falcao14move_left move_left
  def move_left(turn_enabled = true)
    return if $pala.shovel_diging > 0 && self.is_a?(Game_Player)
    falcao14move_left(turn_enabled = true)
  end
  alias falcao14move_right move_right
  def move_right(turn_enabled = true)
    return if $pala.shovel_diging > 0 && self.is_a?(Game_Player)
    falcao14move_right(turn_enabled = true)
  end
  alias falcao14move_up move_up
  def move_up(turn_enabled = true)
    return if $pala.shovel_diging > 0 && self.is_a?(Game_Player)
    falcao14move_up(turn_enabled = true)
  end
end


class Scene_Load
  alias falcao_remake_pala on_decision  
  def on_decision(filename)
    falcao_remake_pala(filename)
    $pala               = Pala.new
  end
end

class Scene_Title
  alias falcao_pala13 command_new_game
  def command_new_game
    falcao_pala13
    $pala               = Pala.new
  end
end
avatar
teivko
Iniciado
Iniciado

0/3

Créditos 45

Gracias : 3

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Script cavar

Mensaje por Producciones The Golden el 2017-02-01, 15:37

Falcao hace maravillas... aunque es cierto que se puede hacer por engine, solo que habría que hacer un apartado en el mapa para hacer tantos eventos como tile "excavables" hayan en el mapa XD.
Gracias por compartir la versión arreglada, servirá de mucho.
avatar
Producciones The Golden
Veterano
Veterano

0/3

Créditos 639

Gracias : 60

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Script cavar

Mensaje por teivko el 2017-02-07, 21:34

Bueno, he mejorado el código limpiándolo de variables inútiles, he modificado las clases ya que sobretodo la de los hoyos y los items ya no es de Bitmap, y en general lo he dejado bastante mejor estructurado que antes.

Ademas, he añadido un nuevo factor , la suerte, con esta se pueden obtener 6 tipos de calidades de los objetos, con cierta probabilidad de aparecer.

Basura - 20% probabilidad
Objeto normal - 40% probabilidad
Objeto Poco comun - 20% probabilidad
Objeto Raro - 10% probabilidad
Objeto Epico - 7% probabilidad
Objeto legendario - 3% probabilidad

También he hecho, que sea mas probable encontrar items, que armas o armaduras, dándoles también una probabilidad:

Item - 80% de probabilidad
Arma - 10% de probabilidad
Armadura - 10% de probabilidad

Dando como resultado 12 zonas (Tablas hash) en las que incorporar objetos que creamos que entran dentro de la categoría que elijamos.

Por ultimo, y aunque es una chorrada, he añadido una pequeña ventana con el objeto que hayamos encontrado al cavar. Con el Script de Falcao se mostraba en la pantalla el icono de este, y como yo ahora utilizo un tile, he decidido que salga una ventana,la cual desaparece a los 2 segundos (hay una variable en el modulo para configurar este tiempo) con el icono y el nombre del objeto que hayamos encontrado.

Código:
#############################################################################
#############################################################################
#                        MODULO TEIVKO PALA
#############################################################################
#############################################################################

module TeivkoPala

#####################################################################################
# Suerte : Probabilidad de que te toque un objeto raro o uno normal
    # 0 - Basura - 20% probabilidad
 # 1 - Objeto normal - 40% probabilidad
 # 2 - Objeto Poco comun - 20% probabilidad
 # 3 - Objeto Raro - 10% probabilidad
 # 4 - Objeto Epico - 7% probabilidad
 # 5 - Objeto legendario - 3% probabilidad
 
#####################################################################################
# TIPOS DE TESOROS
###################
# 1 - Item - 80% de probabilidad
#   2 - Arma - 10% de probabilidad
#   3 - Armadura - 10% de probabilidad
######################################################################################
#
######################################################################################
# TIPOS DE TERRENOS
###################
Terrain_tag1 = 1
Terrain_tag2 = 2
#####################################################################################

####################################################################################
##    ZONAS DEPENDIENDO DE LA SUERTE O EL TIPO DE TERRENO
####################################################################################
########     TIPO DE TERRENO 1 CON SUERTE 0 A 5
Zona_0 = {1=> [1], 2=> [1], 3=> [1]} #Suerte 0
Zona_1 = {1=> [2], 2=> [2], 3=> [2]} #Suerte 1
Zona_2 = {1=> [3], 2=> [3], 3=> [3]} #Suerte 2
Zona_3 = {1=> [4], 2=> [4], 3=> [4]} #Suerte 3
Zona_4 = {1=> [5], 2=> [5], 3=> [5]} #Suerte 4
Zona_5 = {1=> [6], 2=> [6], 3=> [6]} #Suerte 5
########     TIPO DE TERRENO 2 CON SUERTE 0 A 5
Zona_6 = {1=> [1], 2=> [1], 3=> [1]} #Suerte 0
Zona_7 = {1=> [2], 2=> [2], 3=> [2]} #Suerte 1
Zona_8 = {1=> [3], 2=> [3], 3=> [3]} #Suerte 2
Zona_9 = {1=> [4], 2=> [4], 3=> [4]} #Suerte 3
Zona_10 = {1=> [5], 2=> [5], 3=> [5]} #Suerte 4
Zona_11 = {1=> [6], 2=> [6], 3=> [6]} #Suerte 5


##Con TECLA_CAVAR se indica la tecla que pulsaremos al cavar
TECLA_CAVAR = Input::A

#SwCavar indica el switch que debe estar activo para poder cavar
SwCavar = 483

#Estos indices corresponden con los del tileset, en este caso son los
#cuatro primeros sin contar los autotiles
IHole = 384
IItem = 385
IWeapon = 386
IArmor = 387

# Nota: Si no se quiere incluir un tipo de tesoro dejarlo vacio, ejemplo
# 3=> [] tesoro tipo 3 Armaduras no sera tomado en cuenta

RewardTime_Shovel = 2

end


#############################################################################
#############################################################################
#                        CLASE PALA
#############################################################################
#############################################################################
class Pala
  include TeivkoPala
  attr_accessor :dbHoles
  attr_accessor :dbTreasures
  attr_accessor :shovel_diging
  attr_accessor :treasureGain  
  
  def initialize
    @dbHoles = []
    @dbTreasures = []
    @player = $game_player
    @shovel_diging = 0
 @treasureGain = nil
  end
  
  def update
    get_position
    update_pala
    update_tresure
    update_shovel_diging
  end
  
  def update_pala
    actor = $game_party.actors[0]
    if $game_switches[SwCavar]      #Si esta habilitada el switch de cavar
      return if @player.moving?
      return unless $data_weapons[actor.weapon_id].element_set.include?(
      $data_system.elements.index("PALA"))
      if Input.press?TECLA_CAVAR        
        @shovel_diging = 15
        case $game_map.terrain_tag(@look_x,@look_y)
        when 0
          return
        when Terrain_tag1
          @tierra = Terrain_tag1
          @from_terrain = true
        when Terrain_tag2
          @tierra = Terrain_tag2
          @from_terrain = true
        end
      end
    end
  end
  
  # actualizar tesoros
  def update_tresure
  #Vamos a comprobar si el jugador esta en la casilla donde ha aparecido un tesoro
 pos_player = @player.x, @player.y
 for treasure in @dbTreasures
  pos_treasure = treasure.item_x, treasure.item_y          
      if pos_treasure == pos_player
        gain_treasure(treasure)
      end
 end
  end
  
  def update_shovel_diging
    if @shovel_diging > 0
      @shovel_diging -= 1
      if @shovel_diging == 1
        @from_terrain ? check_coordenadas(@tierra) : rep_samePlace
        @shovel_diging = 0
      end
    end
  end
  
  def check_coordenadas(terrain)
    @terrain = terrain
    pos_player = @look_x , @look_y
    existHole = false
 
    for hole in @dbHoles
      pos_hole = hole.x, hole.y    
        if pos_hole == pos_player
          existHole = true
        end
    end
 
    if existHole
      rep_samePlace
    else
      rep_newHole
      create_hole(@look_x, @look_y)
    end    
  end
  
  def create_hole(x,y)          
    @dbHoles.push(Hole.new(x,y))
    # Buscamos en el terreno si hay algun tesoro
    case rand(4)
    when 3
      check_terrain(x,y)
    end
    @from_terrain = false
  end

  def check_terrain(x,y)
 #################################################
 # Explicacion de lo que significa factor
 # Factor es una variable que sumada a la suerte determinara cual es
 # la zona de objeto desde la cual vamos a generar el tesoro
 # Asi pues, si el terreno es el primero, y tenemos suerte 2, la zona sera la segunda
 # Pero si el terreno es el segundo, con la misma suerte, la zona sera la octava
 ##################################################
 factor = 0
 case @terrain
    when Terrain_tag1 then factor = 0
    when Terrain_tag2 then factor = 6
  end
 # tSuerte es la probabilidad de que nos toque un objeto de pesima calidad o epica
 tSuerte = gen_suerte()
 # tTesoro es la probabilidad de que nos toque un item, arma o armadura
 tTesoro = gen_tipoTesoro()
 
 numZona = tSuerte + factor
 zona = set_zone(numZona)
 
 zona.each do |tipo, idsTesoros|
    if tipo == tTesoro
 # De todos los ids que tiene de los objetos ese tipo, obtiene uno random
      id = idsTesoros[rand(idsTesoros.size)]
      set_treasure(id,tTesoro,x,y)
    end
  end
 
  end
  
  def gen_suerte  
 pSuerte = rand(100)
 case pSuerte
 when 0..20 then return 0
 when 20..60 then return 1
 when 60..80 then return 2
 when 80..90 then return 3
 when 90..97 then return 4
 when 97..100 then return 5
 end
  end
  
  def gen_tipoTesoro
   pTipo_tesoro = rand(100)
    case pTipo_tesoro
      when 0..80 then return 1
      when 80..90 then return 2
      when 90..100 then return 3
 end
  end
  
  def set_zone(nZona)
 case nZona
 when 0 then return Zona_0
 when 1 then return Zona_1
 when 2 then return Zona_2
 when 3 then return Zona_3
 when 4 then return Zona_4
 when 5 then return Zona_5
 when 6 then return Zona_6
 when 7 then return Zona_7
 when 8 then return Zona_8
 when 9 then return Zona_9
 when 10 then return Zona_10
 when 11 then return Zona_11
 end
  end
  
  def set_treasure(id,type,x,y)
 @dbTreasures.push(Treasure.new(id,type,x,y))
  end
  
  def gain_treasure(treasure)
    case treasure.type
  when 1
        $game_party.gain_item(treasure.item_id, 1)
      when 2
        $game_party.gain_weapon(treasure.item_id, 1)
      when 3
        $game_party.gain_armor(treasure.item_id, 1)
    end
    #Mostramos la ventana de que ha ganado X objeto
    @treasureGain = treasure
    $game_player.show_reward_shovel = true
    ###############################################
    @dbTreasures.delete(treasure)
    rep_gainTreasure
    treasure.eliminar
  end
  
  def get_position
    case @player.direction
      when 2 #Mirando hacia abajo
        @look_x = @player.x;       @look_y = @player.y + 1
      when 4 #Mirando hacia izquierda
        @look_x = @player.x - 1;   @look_y = @player.y
      when 6 #Mirando hacia derecha
        @look_x = @player.x + 1;   @look_y = @player.y
      when 8 #Mirando hacia arriba
        @look_x = @player.x;       @look_y = @player.y - 1
    end
  end  
  
  def rep_newHole
 Audio.se_play("Audio/Se/016-Jump02")
  end
  
  def rep_samePlace
    Audio.se_play("Audio/Se/032-Switch01")
  end
  
  def rep_gainTreasure
 Audio.se_play("Audio/Se/056-Right02")  
  end
  
end
#############################################################################
#############################################################################
#                        CLASE HOYO
#############################################################################
#############################################################################
class Hole
  attr_accessor :x
  attr_accessor :y
  include TeivkoPala
  def initialize(x, y)
    @x = x
    @y = y
    create_hole
  end
  
  def mierda_log
    log = ["Please import Fish_rod to character folder",
    "Por favor Importe el grafico Fish_Rod a la carpeta character"]; p log
  end
  
  def create_hole
    $game_map.data[@x, @y, 1] = IHole
  end
end
#############################################################################
#############################################################################
#                        CLASE TESORO
#############################################################################
#############################################################################
class Treasure
  include TeivkoPala
  attr_accessor :item_x
  attr_accessor :item_y
  attr_accessor :item_id
  attr_accessor :type
  
  def initialize(itemid, type, x, y)
    @item_id = itemid
    @item_x = x
    @item_y = y
    @type = type
 create_item
  end
  
  def eliminar
    $game_map.data[@item_x, @item_y, 2] = 0
  end
  
  def create_item
    case @type
    when 1
      $game_map.data[@item_x, @item_y, 2] = IItem
    when 2
      $game_map.data[@item_x, @item_y, 2] = IWeapon
    when 3
      $game_map.data[@item_x, @item_y, 2] = IArmor
    end
  end
  
  def get_treasure
    case @type
    when 1
      return $data_items[@item_id]
    when 2
      return $data_weapons[@item_id]
    when 3
      return $data_armors[@item_id]
    end
  end

end
#############################################################################
#############################################################################
#                        SPRITE PALA
#############################################################################
#############################################################################
class Sprite_Shovel < RPG::Sprite
  attr_accessor :character                
  def initialize(viewport, character = nil)
    super(viewport)
    @character = character
    create_bitmap
    update
  end
  
  def mierda_log
    log = ["Please import shovel to character folder",
    "Por favor Importe el grafico shovel a la carpeta character"]; p log
  end
  
  def update
    super
    update_src_rect
    update_direction
  end
  
  def create_bitmap
    self.bitmap = RPG::Cache.character("shovel",0) rescue mierda_log
    @cw = bitmap.width / 4
    @ch = bitmap.height / 4
    self.ox = @cw / 2
    self.oy = @ch
    self.visible = false
  end
  
  def update_src_rect
    sx = @character.pattern * @cw
    sy = (@character.direction - 2) / 2 * @ch
    self.src_rect.set(sx, sy, @cw, @ch)
    $pala.shovel_diging > 0 ? self.visible = true : self.visible = false
  end
  
  def update_direction
    self.x = @character.screen_x
    self.y = @character.screen_y
    self.z = @character.screen_z(@ch)
    self.opacity = @character.opacity
    self.blend_type = @character.blend_type
    self.bush_depth = @character.bush_depth
  end
end
#############################################################################
#############################################################################
#                        SPIRITESET MAP
#############################################################################
#############################################################################
class Spriteset_Map
  attr_accessor   :viewport1
  alias falcosprites_shovel_ini initialize
  def initialize    
    @plugin2 = true
    
    @shovel_sprites = []
    @shovel_sprites.push(Sprite_Shovel.new(@viewport1, $game_player))
    
    if $game_temp.transition_processing
      $pala               = Pala.new
    end
    falcosprites_shovel_ini
  end

  alias falcosprites_shovel_dispose dispose
  def dispose
    for shovel in @shovel_sprites
      shovel.dispose
      @plugin2 = false
    end
    falcosprites_shovel_dispose
  end
  
  alias falcosprites_shovel_update update
  def update
    falcosprites_shovel_update
    if @plugin2
      for shovel in @shovel_sprites
        shovel.update
      end
    end
  end
end
#############################################################################
#############################################################################
#                        SCENE MAP
#############################################################################
#############################################################################
class Scene_Map
  include TeivkoPala
  alias teivko_shovel_main main
  def main    
    @wRecompensaShovel = WRecompensa_Shovel.new
    @wRecompensaShovel.x = 225
    @wRecompensaShovel.y = 200
    @wRecompensaShovel.visible = false
    teivko_shovel_main
    @wRecompensaShovel.dispose
  end

  alias teivko_shovel_update update
  def update
    teivko_shovel_update  
    $pala.update
    update_recompensa
  end
  
  def update_recompensa
    if $game_player.show_reward_shovel
      @wRecompensaShovel.refresh
      @wRecompensaShovel.visible = true
      $game_player.reward_time_shovel += 1
  # Si han pasado 40 frames x 2 -> 40 frames = 1 segundo
      if $game_player.reward_time_shovel == 40 * RewardTime_Shovel
        @wRecompensaShovel.visible = false
        $game_player.reward_time_shovel = 0
        $game_player.show_reward_shovel = false
        #Reseteo el id y el tipo del tesoro
        $pala.treasureGain = nil
      end
    end
  end
end


#############################################################################
#############################################################################
#                        GAME CHARACTER
#############################################################################
#############################################################################
class Game_Character
  alias falcao14move_down move_down
  def move_down(turn_enabled = true)
    return if $pala.shovel_diging > 0 && self.is_a?(Game_Player)
    falcao14move_down(turn_enabled = true)
  end
  alias falcao14move_left move_left
  def move_left(turn_enabled = true)
    return if $pala.shovel_diging > 0 && self.is_a?(Game_Player)
    falcao14move_left(turn_enabled = true)
  end
  alias falcao14move_right move_right
  def move_right(turn_enabled = true)
    return if $pala.shovel_diging > 0 && self.is_a?(Game_Player)
    falcao14move_right(turn_enabled = true)
  end
  alias falcao14move_up move_up
  def move_up(turn_enabled = true)
    return if $pala.shovel_diging > 0 && self.is_a?(Game_Player)
    falcao14move_up(turn_enabled = true)
  end
end
#############################################################################
#############################################################################
#                        GAME PLAYER
#############################################################################
#############################################################################
class Game_Player < Game_Character
  attr_accessor :show_reward_shovel
  attr_accessor :reward_time_shovel
  
  alias teivko_shovel_ini initialize
  def initialize
    teivko_shovel_ini
    @show_reward_shovel = false
    @reward_time_shovel = 0
  end
  
  def update_force
    if @show_reward_shovel
      @reward_time_shovel += 1
    end
  end
end

#############################################################################
#############################################################################
#                        VENTANA DE RECOMPENSA
#############################################################################
#############################################################################
class WRecompensa_Shovel < Window_Base
  def initialize
    super(0, 0, 200, 120)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.opacity = 190
    refresh
  end
  
  def refresh
    self.contents.clear
    self.contents.font.size = 18
    self.contents.font.name = "Georgia"
    draw_items
  end
  
  def draw_items
    @treasure = $pala.treasureGain
    if @treasure != nil
      self.bitmap.blt(0, 0, icon, Rect.new(0, 0, w, h), 255) rescue nil
      item = @treasure.get_treasure
      icon = RPG::Cache.icon(item.icon_name) rescue nil
      self.contents.draw_text(0, 15, 608, 50,item.name)
      self.contents.blt(55, 60, icon, Rect.new(0, 0, 24, 24), 255) rescue nil
      self.contents.draw_text(0, -15, 608, 50,'Has conseguido')
    end
  end

end
#############################################################################
#############################################################################
#                           LOAD
#############################################################################
#############################################################################
class Scene_Load
  alias teivko_load_pala on_decision  
  def on_decision(filename)
    teivko_load_pala(filename)
    $pala               = Pala.new
  end
end

#############################################################################
#############################################################################
#                        NEW GAME
#############################################################################
#############################################################################
class Scene_Title
  alias teivko__new_pala command_new_game
  def command_new_game
    teivko__new_pala
    $pala               = Pala.new
  end
end


Última edición por teivko el 2017-02-12, 12:07, editado 1 vez
avatar
teivko
Iniciado
Iniciado

0/3

Créditos 45

Gracias : 3

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Script cavar

Mensaje por teivko el 2017-02-10, 19:26

He vuelto hacerle algunas mejoras. En este caso le he añadido un sistema de niveles que mejora con el uso de la pala. También le he añadido la posibilidad de fallar al cavar y un sonido acorde. Por ultimo, le he añadido una animación cuando sube de nivel, a continuación os pongo el vídeo donde se ve. Mi idea para el tema de los niveles es hacer que en X zonas no se pueda cavar a no ser que tengas el nivel indicado.



La experiencia que se gana dependiendo de la accion es la siguiente:

###################
# EXPERIENCIA DEPENDIENDO DE SI SOLO SE CAVA, SE OBTIENE UN TESORO, O SE OBTIENE TESORO DE ALTA CALIDAD
#Tipos de acciones:
# 1-Cavar
# 2-Conseguir encontrar algo
# 3-Encontrar algo de calidad raro
# 4-Encontrar algo de calidad epica
# 5-Encontrar algo de calidad legendaria

#El calculo de la experiencia ganada se hace con la base por el nivel que se tenga
XPCavar = 2 #Experiencia base por tipo 1
XPGainTreasure = 10 #Experiencia base por tipo 2
XPSuerte3 = 15 #Experiencia base por tipo 3
XPSuerte4 = 20 #Experiencia base por tipo 4
XPSuerte5 = 30 #Experiencia base por tipo 5


Y aqui el codigo:
Código:
#############################################################################
#############################################################################
#                        MODULO TEIVKO PALA
#############################################################################
#############################################################################

module TeivkoPala

#####################################################################################
# Suerte : Probabilidad de que te toque un objeto raro o uno normal
    # 0 - Basura -             20% probabilidad
   # 1 - Objeto normal -       40% probabilidad
   # 2 - Objeto Poco comun -    20% probabilidad
   # 3 - Objeto Raro -       10% probabilidad
   # 4 - Objeto Epico -       7% probabilidad
   # 5 - Objeto legendario -    3% probabilidad
   
#####################################################################################
# TIPOS DE TESOROS
###################
#   1 - Item - 80% de probabilidad
#  2 - Arma - 10% de probabilidad
#  3 - Armadura - 10% de probabilidad
######################################################################################
#
######################################################################################
# TIPOS DE TERRENOS
###################
Terrain_tag1 = 1
Terrain_tag2 = 2
#####################################################################################

####################################################################################
##          ZONAS DEPENDIENDO DE LA SUERTE O EL TIPO DE TERRENO
####################################################################################
########       TIPO DE TERRENO 1 CON SUERTE 0 A 5
Zona_0 = {1=> [1], 2=> [1], 3=> [1]}    #Suerte 0
Zona_1 = {1=> [2], 2=> [2], 3=> [2]}    #Suerte 1
Zona_2 = {1=> [3], 2=> [3], 3=> [3]}    #Suerte 2
Zona_3 = {1=> [4], 2=> [4], 3=> [4]}    #Suerte 3
Zona_4 = {1=> [5], 2=> [5], 3=> [5]}    #Suerte 4
Zona_5 = {1=> [6], 2=> [6], 3=> [6]}    #Suerte 5
########       TIPO DE TERRENO 2 CON SUERTE 0 A 5
Zona_6 = {1=> [1], 2=> [1], 3=> [1]}    #Suerte 0
Zona_7 = {1=> [2], 2=> [2], 3=> [2]}    #Suerte 1
Zona_8 = {1=> [3], 2=> [3], 3=> [3]}    #Suerte 2
Zona_9 = {1=> [4], 2=> [4], 3=> [4]}    #Suerte 3
Zona_10 = {1=> [5], 2=> [5], 3=> [5]}    #Suerte 4
Zona_11 = {1=> [6], 2=> [6], 3=> [6]}    #Suerte 5

################################################################################
# NIVEL HABILIDAD CAVAR
################################################################################

###################
# EXPERIENCIA DEPENDIENDO DE SI SOLO SE CAVA, SE OBTIENE UN TESORO, O SE OBTIENE TESORO DE ALTA CALIDAD
#Tipos de acciones:
# 1-Intentar Cavar
# 2-Conseguir encontrar algo
# 3-Encontrar algo de calidad raro
# 4-Encontrar algo de calidad epica
# 5-Encontrar algo de calidad legendaria

#El calculo de la experiencia ganada se hace con la base por el nivel que se tenga
XPCavar = 2        #Experiencia base por tipo 1
XPGainTreasure = 10 #Experiencia base por tipo 2
XPSuerte3 = 15      #Experiencia base por tipo 3
XPSuerte4 = 20      #Experiencia base por tipo 4
XPSuerte5 = 30      #Experiencia base por tipo 5



# VALORES PARA LA FUNCION CRECIENTE DE LA EXPERIENCIA
#Esto significa que la formula sera ExpAnterior + 100 x (NivelCavar ^ 3)
XPBase = 100
XPFacPot = 3

##Con TECLA_CAVAR se indica la tecla que pulsaremos al cavar
TECLA_CAVAR = Input::A

#SwCavar indica el switch que debe estar activo para poder cavar
SwCavar = 483

#Estos indices corresponden con los del tileset, en este caso son los
#cuatro primeros sin contar los autotiles
IHole = 384
IItem = 385
IWeapon = 386
IArmor = 387

# Nota: Si no se quiere incluir un tipo de tesoro dejarlo vacio, ejemplo
# 3=> [] tesoro tipo 3 Armaduras no sera tomado en cuenta

RewardTime_Shovel = 2

#######################################################
IDAnim = 333

SoundFail = "Audio/Se/shovel-thwack-1"
SoundGainTreasure = "Audio/Se/056-Right02"
SoundSameHole = "Audio/Se/032-Switch01"
SoundCreateHole = "Audio/Se/016-Jump02"

end


#############################################################################
#############################################################################
#                        CLASE PALA
#############################################################################
#############################################################################
class Pala
  include TeivkoPala
  attr_accessor :dbHoles
  attr_accessor :dbTreasures
  attr_accessor :shovel_diging
  attr_accessor :treasureGain
  attr_accessor :level
 
  attr_accessor :showAnimation
 
  def initialize
    @dbHoles = []
    @dbTreasures = []
    @player = $game_player
    @shovel_diging = 0
    @treasureGain = nil
    @level = Level.new   
    @showAnimation = false
  end
 
  def update
    get_position
    update_pala
    update_tresure
    update_shovel_diging
  end
 
  def update_pala
    actor = $game_party.actors[0]
    if $game_switches[SwCavar]      #Si esta habilitada el switch de cavar
      return if @player.moving?
      return unless $data_weapons[actor.weapon_id].element_set.include?(
      $data_system.elements.index("PALA"))
      if Input.press?TECLA_CAVAR       
        @shovel_diging = 15
        case $game_map.terrain_tag(@look_x,@look_y)
        when 0
          return
        when Terrain_tag1
          @tierra = Terrain_tag1
          @from_terrain = true
        when Terrain_tag2
          @tierra = Terrain_tag2
          @from_terrain = true
        end
      end
    end
  end
 
  # actualizar tesoros
  def update_tresure
  #Vamos a comprobar si el jugador esta en la casilla donde ha aparecido un tesoro
   pos_player = @player.x, @player.y
   for treasure in @dbTreasures
     pos_treasure = treasure.item_x, treasure.item_y            
      if pos_treasure == pos_player
        @level.increment_exp(2)
        gain_treasure(treasure)
      end
   end
  end
 
  def update_shovel_diging
    if @shovel_diging > 0
      @shovel_diging -= 1
      if @shovel_diging == 1
        @from_terrain ? check_coordenadas(@tierra) : rep_samePlace
        @shovel_diging = 0
      end
    end
  end
 
  def check_coordenadas(terrain)
    @terrain = terrain
    pos_player = @look_x , @look_y
    existHole = false
   
    case rand(10)
      when 1..3
        rep_fail
        return 0
    end
   
    for hole in @dbHoles
      pos_hole = hole.x, hole.y   
        if pos_hole == pos_player   
          existHole = true
        end
    end
   
    if existHole
      rep_samePlace
    else     
      rep_newHole
      @level.increment_exp(1)
      create_hole(@look_x, @look_y)
    end
  end
 
  def create_hole(x,y)         
    @dbHoles.push(Hole.new(x,y))
    # Buscamos en el terreno si hay algun tesoro
    case rand(4)
    when 3
      check_terrain(x,y)
    end
    @from_terrain = false
  end

  def check_terrain(x,y)
   #################################################
   #   Explicacion de lo que significa factor
   # Factor es una variable que sumada a la suerte determinara cual es
   # la zona de objeto desde la cual vamos a generar el tesoro
   # Asi pues, si el terreno es el primero, y tenemos suerte 2, la zona sera la segunda
   # Pero si el terreno es el segundo, con la misma suerte, la zona sera la octava
   ##################################################
   factor = 0
   case @terrain
    when Terrain_tag1   then factor = 0
    when Terrain_tag2   then factor = 6
  end   
   # tSuerte es la probabilidad de que nos toque un objeto de pesima calidad o epica
   tSuerte = gen_suerte()
   # tTesoro es la probabilidad de que nos toque un item, arma o armadura
   tTesoro = gen_tipoTesoro()
   
   numZona = tSuerte + factor
   zona = set_zone(numZona)
   
   zona.each do |tipo, idsTesoros|
    if tipo == tTesoro
      # De todos los ids que tiene de los objetos ese tipo, obtiene uno random
      id = idsTesoros[rand(idsTesoros.size)]
      set_treasure(id,tTesoro,x,y,tSuerte)
    end
  end
   
  end
 
  def gen_suerte     
   pSuerte = rand(100)   
   case pSuerte
      when 0..20   then return 0
      when 20..60 then return 1
      when 60..80 then return 2
      when 80..90 then return 3
      when 90..97 then return 4
      when 97..100 then return 5
   end
  end
 
  def gen_tipoTesoro
     pTipo_tesoro = rand(100)
    case pTipo_tesoro
      when 0..80   then return 1
      when 80..90 then return 2
      when 90..100 then return 3
   end
  end
 
  def set_zone(nZona)
   case nZona
      when 0   then return Zona_0
      when 1   then return Zona_1
      when 2   then return Zona_2
      when 3   then return Zona_3
      when 4   then return Zona_4
      when 5   then return Zona_5
      when 6   then return Zona_6
      when 7   then return Zona_7
      when 8   then return Zona_8
      when 9   then return Zona_9
      when 10   then return Zona_10
      when 11   then return Zona_11
   end
  end
 
  def set_treasure(id,type,x,y,tSuerte)
   @dbTreasures.push(Treasure.new(id,type,x,y,tSuerte))
  end
 
  def gain_treasure(treasure)
    case treasure.type
     when 1
        $game_party.gain_item(treasure.item_id, 1)
      when 2
        $game_party.gain_weapon(treasure.item_id, 1)
      when 3
        $game_party.gain_armor(treasure.item_id, 1)
    end
    #Mostramos la ventana de que ha ganado X objeto
    @treasureGain = treasure   
    $game_player.show_reward_shovel = true
    ##############################################
    # Añadimos la experiencia si la calidad del objeto es rara, epica o legendaria
    ###############################################
    case @treasureGain.quality
      when 3 
        @level.increment_exp(@treasureGain.quality)
      when 4 
        @level.increment_exp(@treasureGain.quality)
      when 5 
        @level.increment_exp(@treasureGain.quality)
    end
    ###############################################
    @dbTreasures.delete(treasure)
    rep_gainTreasure
    treasure.eliminar
  end
 
  def get_position
    case @player.direction
      when 2 #Mirando hacia abajo
        @look_x = @player.x;      @look_y = @player.y + 1
      when 4 #Mirando hacia izquierda
        @look_x = @player.x - 1;  @look_y = @player.y
      when 6 #Mirando hacia derecha
        @look_x = @player.x + 1;  @look_y = @player.y
      when 8 #Mirando hacia arriba
        @look_x = @player.x;      @look_y = @player.y - 1
    end
  end
 
  def rep_fail
    Audio.se_play(SoundFail)
  end
 
  def rep_newHole
    Audio.se_play(SoundCreateHole)
  end
 
  def rep_samePlace
    Audio.se_play(SoundSameHole)
  end
 
  def rep_gainTreasure
    Audio.se_play(SoundGainTreasure) 
  end 
end
#############################################################################
#############################################################################
#                        CLASE EXPERIENCIA
#############################################################################
#############################################################################
class Level
 
  attr_accessor :level
  attr_accessor :exp_actual
  attr_accessor :exp_nextlvl
  include TeivkoPala
 
  def initialize
    @level = 1
    @exp_actual = 0
    @exp_nextlvl = 0
    calculate_expNextLevel
  end
 
  def calculate_expNextLevel
    @exp_nextlvl += XPBase * (@level**XPFacPot)
  end
 
  def increment_exp(type)
    case type
      when 1
        @exp_actual += XPCavar * @level
      when 2
        @exp_actual += XPGainTreasure * @level
      when 3
        @exp_actual += XPSuerte3 * @level
      when 4
        @exp_actual += XPSuerte4 * @level
      when 5
        @exp_actual += XPSuerte5 * @level 
    end
    check_exp 
  end
 
  def check_exp
    if @exp_actual >= @exp_nextlvl
      @level += 1
      @exp_actual = 0
      calculate_expNextLevel
      #$game_switches[9] = true
      $pala.showAnimation = true
    end
  end
 
  def informate
    print 'Level: '+@level.to_s+' Exp: '+@exp_actual.to_s+' Next: '+@exp_nextlvl.to_s
  end
 
end




#############################################################################
#############################################################################
#                        CLASE HOYO
#############################################################################
#############################################################################
class Hole
  attr_accessor :x
  attr_accessor :y
  include TeivkoPala
  def initialize(x, y)
    @x = x
    @y = y
    create_hole
  end
 
  def mierda_log
    log = ["Please import Fish_rod to character folder",
    "Por favor Importe el grafico Fish_Rod a la carpeta character"]; p log
  end
 
  def create_hole
    $game_map.data[@x, @y, 1] = IHole
  end
end
#############################################################################
#############################################################################
#                        CLASE TESORO
#############################################################################
#############################################################################
class Treasure
  include TeivkoPala
  attr_accessor :item_x
  attr_accessor :item_y
  attr_accessor :item_id
  attr_accessor :type
  attr_accessor :quality
 
  def initialize(itemid, type, x, y, q)
    @item_id = itemid
    @item_x = x
    @item_y = y
    @type = type
    @quality = q
    create_item
  end
 
  def eliminar
    $game_map.data[@item_x, @item_y, 2] = 0
  end
 
  def create_item
    case @type
      when 1
        $game_map.data[@item_x, @item_y, 2] = IItem
      when 2
        $game_map.data[@item_x, @item_y, 2] = IWeapon
      when 3
        $game_map.data[@item_x, @item_y, 2] = IArmor
    end
  end
 
  def get_treasure
    case @type
    when 1
      return $data_items[@item_id]
    when 2
      return $data_weapons[@item_id]
    when 3
      return $data_armors[@item_id]
    end
  end

end
#############################################################################
#############################################################################
#                        SPRITE PALA
#############################################################################
#############################################################################
class Sprite_Shovel < RPG::Sprite
  include TeivkoPala
  attr_accessor :character 
  def initialize(viewport, character = nil)
    super(viewport)
    @character = character
    create_bitmap
    update
  end
 
  def mierda_log
    log = ["Please import shovel to character folder",
    "Por favor Importe el grafico shovel a la carpeta character"]; p log
  end
 
  def update
    super
    update_src_rect
    update_direction
    update_anim
  end
 
  def create_bitmap
    self.bitmap = RPG::Cache.character("shovel",0) rescue mierda_log
    @cw = bitmap.width / 4
    @ch = bitmap.height / 4
    self.ox = @cw / 2
    self.oy = @ch
    self.visible = false
  end
 
  def update_src_rect
    sx = @character.pattern * @cw
    sy = (@character.direction - 2) / 2 * @ch
    self.src_rect.set(sx, sy, @cw, @ch)
    $pala.shovel_diging > 0 ? self.visible = true : self.visible = false
  end
 
  def update_direction
    self.x = @character.screen_x
    self.y = @character.screen_y
    self.z = @character.screen_z(@ch)
    self.opacity = @character.opacity
    self.blend_type = @character.blend_type
    self.bush_depth = @character.bush_depth
  end
 
  def update_anim
    if $pala.showAnimation and !$game_player.show_reward_shovel
      @character.animation_id = IDAnim
      $pala.showAnimation = false
    end
   
  end
end
#############################################################################
#############################################################################
#                        SPIRITESET MAP
#############################################################################
#############################################################################
class Spriteset_Map
  attr_accessor  :viewport1
  alias falcosprites_shovel_ini initialize
  def initialize   
    @plugin2 = true
   
    @shovel_sprites = []
    @shovel_sprites.push(Sprite_Shovel.new(@viewport1, $game_player))
   
    if $game_temp.transition_processing
      $pala              = Pala.new
    end
    falcosprites_shovel_ini
  end

  alias falcosprites_shovel_dispose dispose
  def dispose
    for shovel in @shovel_sprites
      shovel.dispose
      @plugin2 = false
    end
    falcosprites_shovel_dispose
  end
 
  alias falcosprites_shovel_update update
  def update
    falcosprites_shovel_update
    if @plugin2
      for shovel in @shovel_sprites
        shovel.update
      end
    end
  end
end
#############################################################################
#############################################################################
#                        SCENE MAP
#############################################################################
#############################################################################
class Scene_Map
  include TeivkoPala
  alias teivko_shovel_main main
  def main   
    @wRecompensaShovel = WRecompensa_Shovel.new
    @wRecompensaShovel.x = 225
    @wRecompensaShovel.y = 200
    @wRecompensaShovel.visible = false
    teivko_shovel_main
    @wRecompensaShovel.dispose
  end

  alias teivko_shovel_update update
  def update
    teivko_shovel_update 
    $pala.update
    update_recompensa
  end
 
  def update_recompensa
    if $game_player.show_reward_shovel
      @wRecompensaShovel.refresh
      @wRecompensaShovel.visible = true
      $game_player.reward_time_shovel += 1
     # Si han pasado 40 frames x 2 -> 40 frames = 1 segundo
      if $game_player.reward_time_shovel == 40 * RewardTime_Shovel
        @wRecompensaShovel.visible = false
        $game_player.reward_time_shovel = 0
        $game_player.show_reward_shovel = false
        #Reseteo el id y el tipo del tesoro
        $pala.treasureGain = nil
      end
    end
  end
end


#############################################################################
#############################################################################
#                        GAME CHARACTER
#############################################################################
#############################################################################
class Game_Character
  alias falcao14move_down move_down
  def move_down(turn_enabled = true)
    return if $pala.shovel_diging > 0 && self.is_a?(Game_Player)
    falcao14move_down(turn_enabled = true)
  end
  alias falcao14move_left move_left
  def move_left(turn_enabled = true)
    return if $pala.shovel_diging > 0 && self.is_a?(Game_Player)
    falcao14move_left(turn_enabled = true)
  end
  alias falcao14move_right move_right
  def move_right(turn_enabled = true)
    return if $pala.shovel_diging > 0 && self.is_a?(Game_Player)
    falcao14move_right(turn_enabled = true)
  end
  alias falcao14move_up move_up
  def move_up(turn_enabled = true)
    return if $pala.shovel_diging > 0 && self.is_a?(Game_Player)
    falcao14move_up(turn_enabled = true)
  end
end
#############################################################################
#############################################################################
#                        GAME PLAYER
#############################################################################
#############################################################################
class Game_Player < Game_Character
  attr_accessor :show_reward_shovel
  attr_accessor :reward_time_shovel
 
  alias teivko_shovel_ini initialize
  def initialize
    teivko_shovel_ini
    @show_reward_shovel = false
    @reward_time_shovel = 0
  end
 
  def update_force
    if @show_reward_shovel
      @reward_time_shovel += 1
    end
  end
end

#############################################################################
#############################################################################
#                        VENTANA DE RECOMPENSA
#############################################################################
#############################################################################
class WRecompensa_Shovel < Window_Base
  def initialize
    super(0, 0, 200, 120)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.opacity = 190
    refresh
  end
 
  def refresh
    self.contents.clear
    self.contents.font.size = 18
    self.contents.font.name = "Georgia"
    draw_items
  end
 
  def draw_items
    @treasure = $pala.treasureGain
    if @treasure != nil
      self.bitmap.blt(0, 0, icon, Rect.new(0, 0, w, h), 255) rescue nil
      item = @treasure.get_treasure
      icon = RPG::Cache.icon(item.icon_name) rescue nil
      self.contents.draw_text(0, 15, 608, 50,item.name)
      self.contents.blt(55, 60, icon, Rect.new(0, 0, 24, 24), 255) rescue nil
      self.contents.draw_text(0, -15, 608, 50,'Has conseguido')
    end
  end

end
#############################################################################
#############################################################################
#                          LOAD
#############################################################################
#############################################################################
class Scene_Load
  alias teivko_load_pala on_decision 
  def on_decision(filename)
    teivko_load_pala(filename)
    $pala              = Pala.new
  end
end

#############################################################################
#############################################################################
#                        NEW GAME
#############################################################################
#############################################################################
class Scene_Title
  alias teivko__new_pala command_new_game
  def command_new_game
    teivko__new_pala
    $pala              = Pala.new
  end
end

Todas las opciones como los sonidos, la experiencia que se gana, el id de la animacion al subir de nivel, todo eso esta en el modulo para que lo personalicéis.
avatar
teivko
Iniciado
Iniciado

0/3

Créditos 45

Gracias : 3

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Script cavar

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


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