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

No estás conectado. Conéctate o registrate

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

#1 [XP] Dynamic Gardening v.1.1 el Jue Mar 22, 2012 4:18 pm

youkai

avatar
Hola, este es mi primer post en UM, asi que aqui les va.
Este es un script de siembra algo parecido al Harvest Moon, la forma de usarlo viene dentro del script, que por cierto, tuve que traducirlo yo, por lo menos lo principal. xD
Código:
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
# Dynamic Gardening
# Author: ForeverZer0
# Date: 4.14.2010
# Version: v.1.1
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
#                          VERSION HISTORY
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
#  -> v.1.1  (4.15.2010)
#    - Improved coding
#    - No longer uses game variables, events use self-switches instead
#    - Added ability to create different graphics for every plant, without
#      having to use more event pages
#    - Much less tedious setting up multiple events and changing the every
#      condition variable.
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
#
# Explanation:
#
#  This is a system that will allow the player to plant seeds that will grow
#  into plants over time, which will give the player an item when they are
#  "picked". In principal, it is almost exactly the same as Legend of Mana's
#  system. Different seed combinations will result in different produce.  Each
#  plant will have its own growth timer that will keep track of its progress.
#
# Features:
#
#  - Totally configurable growth rates, results, and graphics for every plant.
#  - Can use arrays of items for each result, so the final item is not
#    neccessarily the same every time.
#  - Each plant timer is independent, and its progress is saved with the game.
#  - Easy setup, which simply requires an event to use a script call to
#    initiate event.
#
# Instructions:

#  - Poner debajo de Debug y sobre Main
#  - Para prepar un evento necesitas un total de 5 paginas. la primera pagina no debe
#    tener ninguna condicion, y las proximas paginas seran los interruptores locales = A,
#    B, C, y D en orden.
#  - Todos los detonantes de inicio de las paginas deben ser 'Pulsar Aceptar'
#  - En la primera pagina solo por este codigo por "Llamar Script":
#
#                $scene = Scene_Garden(*ID_DE_ESTE_EVENTO*)
#
#  - Las otras paginas deben tener este codigo:
#
#                $scene = Scene_Harvest(*ID_DE_ESTE_EVENTO*)
#
#  - Las paginas 2-4 deben tener sus respectivos graficos segun el crecimiento
#    de la planta.
#  - Para que el cambio de grafico funcione, debes poner un comentario en el tope
#    de la pagina 5 que diga 'Final Stage'. (sin comillas)
#  - Un vez hecho esto, puedes copiar y pegar el evento tanto como quieras.
#    Solo tienes que cambiar el ID del evento en los codigos de script.
#  - Las plantas se pueden recojer antes de terminar su crecimiento pero no daran
#    nada.
#  - Si no queres que te ponga de nuevo la escena de siembra siempre
#    despues de cosechar, usa este codigo en la primera pagina en lugar del cotidiano:
#
#                  if !$game_temp.message_window_showing
#                  $scene = Scene_Garden(*THIS_EVENTS_ID*)
#                  end
#
#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
#  CONFIGURACION
#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

  SEED_IDS = [33, 34, 35, 36, 37, 38, 39, 40]
  # IDs de los items que son semillas en la base de datos. Agregalos en el array
  # en orden de valor\rareza que tengan en el juego
 
  FINAL_ITEM_GRAPHICS = true
  # Si es true usara diferentes graficos en la etapa final, dependiendo del item
  # que se va a recibir. Debes poner el comentario 'Final Stage'
  # en la ultima pagina y configurar los graficos.
 
  HARVEST_SE = '056-Right02'
  # Esta es la musica que se reproducira al cosechar la planta y
  # recibir el item.
 
module Zer0_CFG
 
  # Define el tiempo de crecimiento aqui. (se usara la suma de las dos semillas usadas)
  def self.growth_rates(seed)
    case seed
    # when ID_SEMILLA then return SEGUNDOS
    when 33 then return 10
    when 34 then return 12
    when 35 then return 15
    when 36 then return 20
    when 37 then return 23
    when 38 then return 25
    when 39 then return 30
    when 40 then return 35
    end
  end
 
#-------------------------------------------------------------------------------
# Define el resultado final de las semillas. Un item al azar sera dado segun el array
# como resultado final.

# A cada semilla se le da un valor que va de cero a el maximo de valores que tiene el
# array, y ambos valores son sumados para calcular el resultado final que se pone
# en el siguiente array como resultado. es por esto que es importante ordenar las
# semillas en SEED_IDS segun su valor\rareza.
#
#  EJ. Usas la primera semilla y la ultima que se encuentran en SEED_IDS,
#      y hay un total de 8 semillas en el array...
#
#      PRIMERA_SEMILLA = 0
#      ULTIMA_SEMILLA = 7        0 + 7 = RESULTADO
#
# Poniendo varias veces el mismo numero en el array, incrementas las
# posibilidades de obtener como resultado ese item.
#-------------------------------------------------------------------------------

  def self.produce(seed)
    case seed
    when 0 then return [41, 42]      # Solo si son las dos primeras semillas juntas
    when 1 then return [42, 43]
    when 2 then return [43, 44]
    when 3 then return [44, 45]
    when 4 then return [45, 46]
    when 5 then return [46, 47]
    when 6 then return [47, 48]   
    when 7 then return [48, 49]
    when 8 then return [49, 50]
    when 9 then return [50, 51]
    when 10 then return [51, 52]
    when 11 then return [52, 53]
    when 12 then return [53, 54]
    when 13 then return [54, 55]
    when 14 then return [56]        # Solo si son las ultimas semillas juntas
    end
  end
 
#-------------------------------------------------------------------------------
#  Define el grafico para cada planta segun lo que produzca. Si no usas esto
#  no es necesario hacer nada, y se usara el grafico de la pagina final del
#  evento.
#
#  when ITEM_ID then ['FILENAME', X, Y]
#
#  ITEM_ID = El ID del item en la base de datos.
#  FILENAME = El nombre del grafico a usarse(se ponen en ...\Characters)
#  X = La coordenada x exacta del grafico segun el charset (1 - 4)
#  Y = La coordenada y exacta del grafico segun el charset (1 - 4)
#
#          ← X →            Ex.  Si el grafico a usarse esta en el borde inferior
#        1  2  3  4                izquierdo:  X = 1    Y = 4
#      ┌──┬──┬──┬──┐                   
#    1 │  │  │  │  │
#      ├──┼──┼──┼──┤
#  ↑  2 │  │  │  │  │
#  Y    ├──┼──┼──┼──┤      <------ Copienlo a un txt para que se entienda
#  ↓  3 │  │  │  │  │
#      ├──┼──┼──┼──┤
#    4 │  │  │  │  │
#      └──┴──┴──┴──┘
#-------------------------------------------------------------------------------

  def self.final_graphic(item)
    case item 
    when 41 then return ['Garden Plants', 1, 4]
    when 42 then return ['Garden Plants', 2, 4]
    when 43 then return ['Garden Plants', 3, 4]
    when 44 then return ['Garden Plants', 4, 4]
    when 45 then return ['Garden Plants', 1, 2]
    when 46 then return ['Garden Plants', 2, 2] 
    when 47 then return ['Garden Plants', 3, 2]
    when 48 then return ['Garden Plants', 4, 2]
    when 49 then return ['Garden Plants', 1, 3]
    when 50 then return ['Garden Plants', 2, 3]
    when 51 then return ['Garden Plants', 3, 3]
    when 52 then return ['Garden Plants', 4, 3]
    when 53 then return ['Garden Plants', 1, 1]
    when 54 then return ['Garden Plants', 2, 1]
    when 55 then return ['Garden Plants', 3, 1]
    when 56 then return ['Garden Plants', 4, 1]
    end
  end
 
#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
#  FIN DE LA CONFIGURACION
#:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
  def self.start_growing(seed1, seed2, event)
    s1 = self.growth_rates(seed1)
    s2 = self.growth_rates(seed2)
    rate = ((s1 + s2) / 2) * 40
    p1 = SEED_IDS.index(seed1)
    p2 = SEED_IDS.index(seed2)
    stage1 = (rate / 10) * 2
    stage2 = (rate / 10) * 3
    stage3 = (rate / 10) * 5
    items = self.produce(p1 + p2)
    result = items[rand(items.size)]
    map = $game_map.map_id
    data = [0, stage1, stage2, stage3, result, map, event]
    $game_system.plant_growth.push(data)
  end
end

#-------------------------------------------------------------------------------
# * Game_System
#-------------------------------------------------------------------------------

class Game_System
 
  attr_accessor :plant_growth
 
  alias zer0_plant_timers_init initialize
  def initialize
    zer0_plant_timers_init
    @plant_growth = []
  end
 
  alias zer0_plant_timers_upd update
  def update
    zer0_plant_timers_upd
    unless @plant_growth.empty?
      if $scene.is_a?(Scene_Map) || $scene.is_a?(Scene_Battle)
        update_plant_timers
      end
    end
  end
 
  def update_plant_timers
    @plant_growth.compact!
    @plant_growth.each_index {|i|
      if @plant_growth[i][0] == 0
        if @plant_growth[i][1] > 0
          @plant_growth[i][1] = @plant_growth[i][1] - 1
          if @plant_growth[i][1] == 0
            key = [@plant_growth[i][5], @plant_growth[i][6], 'B']
            $game_self_switches[key] = true
            $game_map.refresh
          end
        end
        if @plant_growth[i][1] == 0 && @plant_growth[i][2] > 0
          @plant_growth[i][2] = @plant_growth[i][2] - 1
          if @plant_growth[i][2] == 0
            key = [@plant_growth[i][5], @plant_growth[i][6], 'C']
            $game_self_switches[key] = true
            $game_map.refresh
          end
        end
        if @plant_growth[i][2] == 0 && @plant_growth[i][3] > 0
          @plant_growth[i][3] = @plant_growth[i][3] - 1
          if @plant_growth[i][3] == 0
            key = [@plant_growth[i][5], @plant_growth[i][6], 'D']
            $game_self_switches[key] = true
            @plant_growth[i][0] = @plant_growth[i][4]
            $game_map.refresh
          end
        end
      end
    }
  end
end

#-------------------------------------------------------------------------------
# * Window_Seed
#-------------------------------------------------------------------------------

class Window_Seed < Window_Selectable
 
  def initialize
    super(160, 304, 320, 160)
    @column_max, self.index = 1, 0
    refresh
  end

  def item
    return @seeds[self.index]
  end

  def refresh 
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @seeds = []
    SEED_IDS.each_index {|i|
      if $game_party.item_number(SEED_IDS[i]) > 0
        @seeds.push($data_items[SEED_IDS[i]])
      end
    }
    @item_max = @seeds.size
    if @item_max > 0
      self.contents = Bitmap.new(width - 32, row_max * 32)
      (0...@item_max).each {|i| draw_item(i)}
    end
  end

  def draw_item(index)
    item = @seeds[index]
    number = $game_party.item_number(item.id)
    x = 4 + index % 1 * (288 + 32)
    y = index * 32
    rect = Rect.new(x, y, self.width / @column_max - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    self.contents.draw_text(x + 240, y, 16, 32, ':', 1)
    self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  end
end

#-------------------------------------------------------------------------------
# * Scene_Garden
#-------------------------------------------------------------------------------

class Scene_Garden
 
  def initialize(event_id)
    @event_id = event_id
    @seed1 = @seed2 = nil
  end
 
  def main
    $game_system.se_play($data_system.decision_se)
    @map = Spriteset_Map.new
    @seed_window = Window_Seed.new
    @confirm_window = Window_Command.new(128, ['Yes', 'No'])
    @confirm_window.x, @confirm_window.y = 496, 336
    @confirm_window.active = @confirm_window.visible = false
    @help_window = Window_Help.new
    Graphics.transition
    loop {Graphics.update; Input.update; update; break if $scene != self}
    [@map, @seed_window, @confirm_window, @help_window].each {|w| w.dispose}
  end
 
  def update
    @seed_window.active == true ? update_seed : update_confirm
    update_help
    [@map, @seed_window, @confirm_window, @help_window].each {|w| w.update}
  end
 
  def update_seed 
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new if @seed1 == nil
      if @seed1 != nil
        $game_party.gain_item(@seed1.id, 1)
        @seed_window.refresh
        @seed1 = nil
      end
    end
    if Input.trigger?(Input::C)
      if @seed1 == nil
        $game_system.se_play($data_system.decision_se)
        @seed1 = @seed_window.item
        $game_party.lose_item(@seed1.id, 1)
      else
        $game_system.se_play($data_system.decision_se)
        @seed2 = @seed_window.item
        $game_party.lose_item(@seed2.id, 1)
        @seed_window.active = false
        @confirm_window.active = @confirm_window.visible = true
      end
      @seed_window.refresh
    end
  end
 
  def update_confirm
    if Input.trigger?(Input::C)
      if @confirm_window.index == 0
        $game_system.se_play($data_system.decision_se)
        $game_self_switches[[$game_map.map_id, @event_id, 'A']] = true
        $game_map.refresh
        Zer0_CFG.start_growing(@seed1.id, @seed2.id, @event_id)
        $scene = Scene_Map.new
      else
        $game_system.se_play($data_system.cancel_se)
        $game_party.gain_item(@seed1.id, 1)
        $game_party.gain_item(@seed2.id, 1)
        @seed_window.refresh
        @seed1 = @seed2 = nil
        @confirm_window.active = @confirm_window.visible = false
        @seed_window.active = true
      end
    end
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $game_party.gain_item(@seed1.id, 1)
      $game_party.gain_item(@seed2.id, 1)
      @seed_window.refresh
      @seed1 = @seed2 = nil
      @confirm_window.active = @confirm_window.visible = false
      @seed_window.active = true
    end
  end
 
  def update_help
    if @seed1 == nil && @seed2 == nil
      @help_window.set_text('Choose which seeds you would like to use.')
    elsif @seed2 == nil
      @help_window.set_text(@seed1.name + ' + ')
    else
      text = ('Use these seeds?  (' + @seed1.name + ' + ' +  @seed2.name + ')')
      @help_window.set_text(text)
    end
  end
end   

#-------------------------------------------------------------------------------
# * Scene_Harvest
#-------------------------------------------------------------------------------

class Scene_Harvest
 
  def initialize(event_id)
    @event_id = event_id
  end
 
  def main
    $game_system.se_play($data_system.decision_se)
    @map = Spriteset_Map.new
    @pick_window = Window_Command.new(128, ['Yes', 'No'])
    @pick_window.x, @pick_window.y = 256, 336
    @help_window = Window_Help.new
    @value = 0
    $game_system.plant_growth.each_index {|i|
      if $game_system.plant_growth[i][5] == $game_map.map_id &&
        $game_system.plant_growth[i][6] == @event_id
        @value = $game_system.plant_growth[i][0]
      end
    }
    if @value > 0
      @help_window.set_text('Would you like to harvest this plant?')
    else
      text = 'Nothing is growing yet on this plant.  Harvest it anyway?'
      @help_window.set_text(text)
    end
    Graphics.transition
    loop {Graphics.update; Input.update; update; break if $scene != self}
    [@map, @help_window, @pick_window].each {|w| w.dispose}
  end
 
  def update
    [@map, @help_window, @pick_window].each {|w| w.update}
    if Input.trigger?(Input::C)
      if @pick_window.index == 0
        if @value > 0
          $game_party.gain_item(@value, 1)
          item = $data_items[@value].name
          Audio.se_play('Audio/SE/' + HARVEST_SE, 80, 100)
          $game_temp.message_text = ('You received a ' + item + '!')
        else
          $game_system.se_play($data_system.buzzer_se)
        end
        $game_system.plant_growth.each_index {|i|
          if $game_system.plant_growth[i][5] == $game_map.map_id &&
            $game_system.plant_growth[i][6] == @event_id
            $game_system.plant_growth[i] = nil
          end
        }
        ['A', 'B', 'C', 'D'].each {|self_sw|
          $game_self_switches[[$game_map.map_id, @event_id, self_sw]] = false}
        $game_map.refresh
      else
        $game_system.se_play($data_system.cancel_se)
        $scene = Scene_Map.new
      end
      $scene = Scene_Map.new
    elsif Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new
    end
  end
end

#-------------------------------------------------------------------------------
# * Sprite_Character
#-------------------------------------------------------------------------------

class Sprite_Character < RPG::Sprite
 
  # This uses a little more coding than needed just to work, but it ensures that
  # this update method will only run if it is absolutely neccessary.
 
  alias zer0_gardening_plant_graphic_upd update
  def update
    if FINAL_ITEM_GRAPHICS
      self.bitmap = RPG::Cache.character(@character.character_name,
        @character.character_hue)
      zer0_gardening_plant_graphic_upd
      if final_stage?(character.id)
        @data = []
        id = character.id
        $game_system.plant_growth.each_index {|i|
          if $game_system.plant_growth[i] != nil &&
            $game_system.plant_growth[i][6] == character.id
            @data[id] = Zer0_CFG.final_graphic($game_system.plant_growth[i][0])
          end
        }
        if @data[character.id] != nil
          self.bitmap =  RPG::Cache.character(@data[id][0],
            @character.character_hue)
          width = self.bitmap.width / 4
          height = self.bitmap.height / 4
          x_index = width * (@data[id][1] - 1)
          y_index = height * (@data[id][2] - 1)
          self.src_rect.set(x_index, y_index, width, height)
          self.ox = width / 2
          self.oy = height
        end
      end
    end
  end
 
  def final_stage?(id)
    return false unless @character.is_a?(Game_Event)
    return false unless $game_self_switches[[$game_map.map_id, id, 'D']]
    return false if $game_system.plant_growth.empty?
    return false if @character.list == nil
    return false if character.list[0].code != 108
    return false if character.list[0].parameters != ['Final Stage']
    return true
  end
end 
Espero que lo disfruten y que les sea util. Salu2
¥oukai.

#2 Re: [XP] Dynamic Gardening v.1.1 el Jue Mar 22, 2012 4:29 pm

Razor

avatar
¿Quien no se ha buscado un sistema de jardín parecido al del Harvest Moon?
Vaya pues me parece excelente y traduciste lo esencial, las instrucciones.

Gracias por el aporte.
+25 Makedas

Un Saludo
Out~





Todos mis aportes por Mediafire tienen contraseña, esa es: www.universomaker.net
Esto es para evitar plagio, asegúrense de copiar y pegar la contraseña.

#3 Re: [XP] Dynamic Gardening v.1.1 el Jue Mar 22, 2012 7:23 pm

youkai

avatar
grax por las makeadas... mis 25 primeras... me dan ganas de llorar.
Bueno poco a poco voy a ir posteando gran parte de mi arsenal de cosas que tengo en mi PC sobre RPGMXP(1.20GB!), y casi todo son scripts

#4 Re: [XP] Dynamic Gardening v.1.1 el Vie Jun 01, 2012 12:49 pm

Eagle

avatar
Guay vereé si es mas rentable esto o en engine y luego tee comento.

Contenido patrocinado


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

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