module FARM_PARAMS
SEED = 21
end
FARMING_OBTAINED_STRING = '"Obtained \\\i[#{item.icon_index}] #{item.name} x#{amount}."'
FARMING_GATHERFAIL_STRING = "Failed to gather resource."
FARMING_LOWLEVEL_STRING = '"Level #{node_data[:level]} required."'
FARMING_TOOLREQ_STRING = '"Tool \\\i[#{item.icon_index}] #{item.name} required."'
Plant = {
#turnip
1 => {:item => [:item,17,[1,4]],
:level => 1,
:timer => 1, #in-game hours until grown
:base_chance => 75,
:max_chance => 100,
:chance_mod => 5,
:graphic => ["$Turnip",0],
:sound => ["Jump1",75,1,3]},
:persist => "false",
}
class Game_Event
alias farm_update update
alias gather_start start
alias farm_init setup_page
def setup_page(*args)
farm_init(*args)
@@empty_plot = true
@@days_to_grow = 0
@@hours_until_full = 0
@@plant_id = 0
end
def event_timer(rate)
if farm_data != nil
@@hours_until_full += rate if @@hours_until_full < farm_data[:timer].to_i
return farm_data[:timer].to_i - @@hours_until_full
else
return 0
end
end
def farmland
@event.name.include?("Farmland")
end
def farm_data
Plant[@@plant_id]
end
def start
farmland ? farm_start : gather_start
end
def grown
if event_timer(0) <= 0 && empty_plot == false
return true
else
return false
end
end
def anim_stages
if farm_data != nil
if @@days_to_grow < farm_data[:timer].to_i / 4
@@days_to_grow = 0
if @@dir < 8
@@dir += 2
end
@direction = dir
end
end
end
def farm_start
if @@empty_plot == true
$game_message.add("What would I like to plant?")
$game_message.item_choice_variable_id = FARM_PARAMS::SEED
item = $data_items[$game_variables[FARM_PARAMS::SEED]]
tag, id = item.note =~ "/^<(seed) (\n)>"/i ? [true, $1.to_i] : [nil, nil] #item.note returns an error of note on nil value.
if tag
@@plant_id = id
else
$game_message.add("This item isn't a seed")
@@plant_id = 0
end
if @@plant_id != 0
return no_tool if !carrying_tool?
return no_level if farm_data[:level] > $game_party.highest_level
#persist = farm_data[:persist].to_s == 'true' ? true : false
graphic = farm_data[:graphic]
@character_name = graphic[0]
@character_index = graphic[1]
@@days_to_grow = 0
@@dir = 8
@direction = dir
end
end
if grown
$game_party.gathering = true
if gather_success
item_d = farm_data[:item]
item = $data_items[item_d[1]] if item_d[0] == :item
item = $data_weapons[item_d[1]] if item_d[0] == :weapon
item = $data_armors[item_d[1]] if item_d[0] == :armor
msgbox("Invalid item category") unless item
amount = rand(item_d[2][1] - item_d[2][0]) + item_d[2][0]
$game_party.gain_item(item,amount)
$game_message.add(eval(FARMING_OBTAINED_STRING))
end
if farm_data[:sound]
farm_data[:sound][2].times do |i|
Audio.se_play("Audio/SE/" + farm_data[:sound][0],farm_data[:sound][1])
node_data[:sound][3].times do |i|
Graphics.update
SceneManager.scene.update
end
end
end
$game_party.gathering = false
end
end
def carrying_tool?
if plant_id != nil
item_d = farm_data[:tool]
return true if item_d.nil?
item = $data_items[item_d[1]] if item_d[0] == :item
item = $data_weapons[item_d[1]] if item_d[0] == :weapon
item = $data_armors[item_d[1]] if item_d[0] == :armor
return $game_party.has_item?(item)
end
end
def unerase
@erased = false
refresh
end
def erased?; @erased == true; end
def event_id; @id; end
def no_level
$game_message.add(eval(FARMING_LOWLEVEL_STRING))
end
def no_tool
if plant_id != nil
item_d = farm_data[:tool]
item = $data_items[item_d[1]] if item_d[0] == :item
item = $data_weapons[item_d[1]] if item_d[0] == :weapon
item = $data_armors[item_d[1]] if item_d[0] == :armor
$game_message.add(eval(FARMING_TOOLREQ_STRING))
end
end
def gather_success
if plant_id != nil
empty_plot = true
chance = farm_data[:base_chance]
chance += farm_data[:chance_mod] * ($game_party.highest_level - farm_data[:level])
chance = [chance,farm_data[:max_chance]].min
if rand(100) < chance
return true
else
$game_message.add(FARMING_GATHERFAIL_STRING)
return false
end
end
end
end
class Game_Map
alias farm_set setup_events
alias farm_up update_events
def setup_events
farm_set
@events.each_value do |event|
next unless event.farmland
event.erase if event.event_timer(0) > 0
end
end
def update_events
farm_up
@events.each_value do |event|
next unless event.farmland && event.erased?
event.unerase if event.event_timer(0) == 0
end
end
end