#==============================================================================
# ** Item Crafting System
# version 1.01
# created by arev (rmxp.pl), 일부 번역 : 페르 (T.Ignost)
# released 28-12-2009, updated: 25-07-2010
#==============================================================================
# 설치 & 호환성
#
# 'Main' 위에 붙여넣으세요.
# RPG XP 기본 스크립트들과 호환됩니다. (SDK 등 다른 스크립트가 필요 없다는 뜻.)
# 가벼운 편이니 딱히 다른 스크립트들과도 부딫힐 일은 없을거에요.
#
# 사용법
#
# 이 글 아래에 '레시피'라고 쓰인 줄을 보실 수 있을거에요.
# 새 레시피를 만드려면 아래처럼 추가해주세요.
# ['i12', 'i78', 'w3', 'a45', 'a45', 'z', 'i-99']
# i는 아이템을, w는 무기를, a는 갑옷을 뜻합니다.
# 이 레시피에 따른다면 아이템 99번을 만들기 위해
# 12번 아이템, 78번 아이템, 3번 무기 하나,
# 45번 무기 둘이 필요합니다. 최대 6개까지 조합할 수 있습니다.
# 6개 이하로 조합하시려면
# 그 칸에 'z'를 써 넣어주세요.
# 마지막 항목은 레시피로 만들어질 결과물입니다.
#
#
# 조합창으로 이동하시려면
# $scene = Scene_Craft.new 을 이용해주세요.
#
# 항목에 쓴 아이템들의 순서는
# 스크립트 내에서 다시 재배열 되기 때문에 중요하진 않습니다.
#
#
#
# License:
#
# 비상업 목적으로만 이용하실 수 입니다.
# 이 스크립트를 재 배포하실 때는
# 원작자에게 허락을 받아야합니다.
#상업용도로 쓰시려면 아래로 연락해주세요.
# http://www.rmxp.pl or http://www.hbgames.org/forums private message system.
#==============================================================================
RECIPES = [
["i1", "w1", "z", "z", "z", "z", "a-1"],
]
#------------------------------------------------------------------------------
class Window_Craft_Components < Window_Selectable
attr_accessor :data
def initialize
super(0, 64, 320, 224)
self.contents = Bitmap.new(width - 32, height - 32)
self.index = 0
self.active = true
@data = [nil, nil, nil, nil, nil, nil]
@item_max = 6
refresh
end
def item
return @data[self.index]
end
def refresh
self.contents.clear
for i in 0..5
x = 0
y = i * 32
if @data[i] != nil
item = @data[i]
bitmap = RPG::Cache.icon(item.icon_name)
self.contents.blt(4 + x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
self.contents.font.color = normal_color
self.contents.draw_text(x + 32, y, 160, 32, item.name, 0)
else
self.contents.font.color = disabled_color
self.contents.draw_text(4 + x, y, 160, 32, "빈 곳", 0)
end
end
end
def update_cursor_rect
self.cursor_rect.set(0, self.index * 32, 288, 32)
end
def nullify
@data = [nil, nil, nil, nil, nil, nil]
end
def transmutation
temp = []
for i in 0..5
if @data[i] == nil
temp << "0"
else
case @data[i]
when RPG::Item
temp << "i" + @data[i].id
when RPG::Weapon
temp << "w" + @data[i].id
when RPG::Armor
temp << "a" + @data[i].id
end
end
end
temp = temp.sort
return temp
end
end
#------------------------------------------------------------------------------
class Window_Craft_Result < Window_Base
attr_accessor :item
def initialize
super(320,64,320,224)
self.contents = Bitmap.new(width - 32, height - 32)
@item = nil
@item_code = ""
refresh
end
def refresh
self.contents.clear
if @item == nil
self.contents.font.color = normal_color
self.contents.draw_text(4,0,288,32, "우측 글씨", 0)
else
bitmap = RPG::Cache.icon(@item.icon_name)
self.contents.font.color = text_color(6)
self.contents.draw_text(4,0,288,32, "조합 결과", 0)
self.contents.blt(4, 65, bitmap, Rect.new(0, 0, 24, 24))
self.contents.font.color = normal_color
self.contents.draw_text(32, 65, 288, 32, @item.name, 0)
self.contents.font.color = disabled_color
self.contents.draw_text(4,128,288,32, "조합 방법 - Z", 0)
self.contents.draw_text(4,160,288,32, "", 0)
end
end
def make_item(text="")
@item_code = text
if @item_code.include?("-")
temp = @item_code.split("-")
if text.include?("a")
@item = $data_armors[temp[1].to_i]
elsif text.include?("i")
@item = $data_items[temp[1].to_i]
elsif text.include?("w")
@item = $data_weapons[temp[1].to_i]
end
refresh
end
end
def nullify
@item = nil
refresh
end
end
#------------------------------------------------------------------------------
class Window_Craft_Item < Window_Selectable
def initialize
super(0, 288, 640, 192)
@column_max = 2
refresh
self.active = false
self.index = -1
end
def item
return @data[self.index]
end
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@data = []
for i in 1...$data_items.size
if $game_party.item_number(i) > 0
@data.push($data_items[i])
end
end
unless $game_temp.in_battle
for i in 1...$data_weapons.size
if $game_party.weapon_number(i) > 0
@data.push($data_weapons[i])
end
end
for i in 1...$data_armors.size
if $game_party.armor_number(i) > 0
@data.push($data_armors[i])
end
end
end
@data.push(nil)
@item_max = @data.size
self.contents = Bitmap.new(width - 32, row_max * 32)
for i in 0...@item_max-1
draw_item(i)
end
end
def draw_item(index)
item = @data[index]
x = 4 + index % @column_max * 320
y = index / @column_max * 32
case item
when RPG::Item
number = $game_party.item_number(item.id)
when RPG::Weapon
number = $game_party.weapon_number(item.id)
when RPG::Armor
number = $game_party.armor_number(item.id)
end
bitmap = RPG::Cache.icon(item.icon_name)
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
self.contents.font.color = normal_color
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
def update_help
@help_window.set_text(self.item == nil ? "" : self.item.description)
end
def update_cursor_rect
if @index < 0
self.cursor_rect.empty
return
end
row = @index / @column_max
if row < self.top_row
self.top_row = row
end
if row > self.top_row + (self.page_row_max - 1)
self.top_row = row - (self.page_row_max - 1)
end
x = index % @column_max * 320
y = index / @column_max * 32 - self.oy
self.cursor_rect.set(x, y, 288, 32)
end
end
#------------------------------------------------------------------------------
class Scene_Craft
def main
@components = Window_Craft_Components.new
@result = Window_Craft_Result.new
@item_window = Window_Craft_Item.new
@help_window = Window_Help.new
@help_window.set_text("상단 글씨", 1)
Graphics.transition
loop do
Input.update
Graphics.update
update
if $scene != self
break
end
end
Graphics.freeze
@components.dispose
@result.dispose
@item_window.dispose
@help_window.dispose
end
def update
@item_window.update
@components.update
if @components.active
update_comp
return
end
if @item_window.active
update_item
return
end
end
def update_comp
if Input.trigger?(Input::A)
rock_baby
return
end
if Input.trigger?(Input::C)
$game_system.se_play($data_system.decision_se)
@components.active = false
@item_window.active = true
@item_window.index = 0
end
if Input.trigger?(Input::B)
for i in 0..5
item = @components.data[i]
if item != nil
case item
when RPG::Item
$game_party.gain_item(item.id, 1)
when RPG::Weapon
$game_party.gain_weapon(item.id, 1)
when RPG::Armor
$game_party.gain_armor(item.id, 1)
end
end
end
$game_system.se_play($data_system.cancel_se)
$scene = Scene_Map.new
end
end
def update_item
if Input.trigger?(Input::C)
$game_system.se_play($data_system.decision_se)
component = @components.data[@components.index]
if component != nil
case component
when RPG::Item
$game_party.gain_item(component.id, 1)
when RPG::Weapon
$game_party.gain_weapon(component.id, 1)
when RPG::Armor
$game_party.gain_armor(component.id, 1)
end
end
item = @item_window.item
@components.data[@components.index] = item
case item
when RPG::Item
$game_party.lose_item(item.id, 1)
when RPG::Weapon
$game_party.lose_weapon(item.id, 1)
when RPG::Armor
$game_party.lose_armor(item.id, 1)
end
@item_window.refresh
@components.refresh
check_recipes
@item_window.active = false
@item_window.index = -1
@components.active = true
end
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
@item_window.active = false
@item_window.index = -1
@components.active = true
end
end
def check_recipes
things_in_the_pot = []
for i in 0..5
case @components.data[i]
when nil
things_in_the_pot << "z"
when RPG::Item
things_in_the_pot << "i#{@components.data[i].id}"
when RPG::Weapon
things_in_the_pot << "w#{@components.data[i].id}"
when RPG::Armor
things_in_the_pot << "a#{@components.data[i].id}"
end
end
things_in_the_pot = things_in_the_pot.sort
for j in 0...RECIPES.size
temp = RECIPES[j].dup
temp.pop
temp = temp.sort
if things_in_the_pot == temp
@result.make_item(RECIPES[j][6])
return
else
@result.nullify
end
end
end
def rock_baby
case @result.item
when nil
$game_system.se_play($data_system.buzzer_se)
when RPG::Item
$game_party.gain_item(@result.item.id, 1)
finalize_crafting
when RPG::Weapon
$game_party.gain_weapon(@result.item.id, 1)
finalize_crafting
when RPG::Armor
$game_party.gain_armor(@result.item.id, 1)
finalize_crafting
end
end
def finalize_crafting
$game_system.se_play($data_system.save_se)
@components.nullify
@components.refresh
@item_window.refresh
@result.nullify
end
end