원본: http://f44.aaa.livedoor.jp/~ytomy/tkool/rpgtech/php/tech.php?tool=VX&cat=tech_vx/item&tech=compose_item
인조이재팬 : http://j2k.naver.com/j2k.php/korean/f44.aaa.livedoor.jp/~ytomy/tkool/rpgtech/php/tech.php?tool=VX&cat=tech_vx/item&tech=compose_item
야아, 이 스크립트를 보았을때 감동 해버렸습니다...= =;
먹히는지는 해보질 않았으니 검수가 필요합니다. ^ ^
이미지에 보시면 [합성하기]에 선택 되어있는데요.
합성 할 아이템은 엘릭서[좌] 재료는 하이포션 매직..넘어갈께요[우]
번역기로 보는 창에서 잘 설명 되어 있습니다.
이미 만들어본 레시피에 대해서는 하얀색 글이 뜨고 만들어보지 않은 것에 대한 재료는
옆의 글 처럼 "가지고 있지 않음(? 맞나;;)"으로 뜨게 된다고 설명 되어있네요.
npc를 통해서 레시피의 재료를 알아간다던지일까요? 가지고 있으면 목록에 나타나는지는 역시 의문..^ ^;
+스크립트+
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/ ◆ 아이템 합성 - KGC_ComposeItem ◆ VX ◆
#_/ ◇ Last update : 2008/01/25 ◇
#_/----------------------------------------------------------------------------
#_/ 복수의 아이템을 합성해, 새로운 아이템을 만들어 내는 기능을 작성합니다.
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#==============================================================================
# ★ 커스터마이즈 항목 - 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"]
# ◆ 합성 커멘드명
# "구입한다" 커멘드의 위치에 표시됩니다.
# ※ 다른 커멘드명은 [Vocab] 그리고 변경 가능.
VOCAB_COMPOSE_ITEM = "합성한다"
# ◆ 합성 아이템 정보 변환 버튼
# 「소재 리스트 < --> 능력치 변화(장비품만)」(을)를 바꾸는 버튼.
# 사용하지 않는 경우는 nil (을)를 지정.
SWITCH_INFO_BUTTON = Input::X
# ◆ 필요 소재 리스트를 컴팩트하게 한다
# 소재수가 많은 경우는 true (으)로 해 주세요.
COMPACT_MATERIAL_LIST = true
# ◆ 커멘드 윈도우를 표시하지 않는다
# XP 판과 같은 스타일이 됩니다.
HIDE_COMMAND_WINDOW = false
# ◆ 소지금 윈도우를 표시하지 않는다
# HIDE_COMMAND_WINDOW 하지만 false 때는 항상 표시합니다.
HIDE_GOLD_WINDOW = false
# ◆ 합성 비용이 0 의 경우, 비용을 표시하지 않는다
HIDE_ZERO_COST = true
# ◆ 비용·소재 부족의 레시피를 표시하지 않는다
# 한 번이라도 합성했던 적이 있는 것은 항상 표시됩니다.
HIDE_SHORTAGE_RECIPE = false
# ◆ 합성했던 적이 없는 레시피의 아이템명을 숨긴다
MASK_UNKNOWN_RECIPE_NAME = true
# ◆ 합성했던 적이 없는 레시피에 표시하는 이름
# 1 문자만 지정하면, 아이템명으로 같은 길이에 확장됩니다.
UNKNOWN_NAME_MASK = "?"
# ◆ 합성했던 적이 없는 레시피의 헬프를 숨긴다
HIDE_UNKNOWN_RECIPE_HELP = true
# ◆ 합성했던 적이 없는 레시피에 표시하는 헬프
UNKNOWN_RECIPE_HELP = "합성했던 적이 없습니다"
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
$imported = {} if $imported == nil
$imported["ComposeItem"] = true
module KGC::ComposeItem
# 정규 표현을 정의
module Regexp
# 레시피
RECIPE = /([IWA])[ ]*:[ ]*(d+)([ ]*,[ ]*d+)?/i
end
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 KGC::ComposeItem::MASK_UNKNOWN_RECIPE_NAME
if @@__expand_masked_name
# 마스크명을 확장해 표시
return @@__masked_name * self.name.scan(/./).size
else
return @@__masked_name
end
else
return self.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
#--------------------------------------------------------------------------
# ○ 아이템의 합성이 끝난 플래그를 설정
# 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 : 아이템
#--------------------------------------------------------------------------
def item_can_compose?(item)
return false unless item.is_a?(RPG::BaseItem) # 아이템 이외는 불가
return false unless item.is_compose? # 합성 아이템 이외는 불가
return false if gold < item.compose_cost # 자금부족이라면 불가
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_compose_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,
$game_party.item_composed?(item) ? item.name : item.masked_name)
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# □ Window_ComposeNumber
#------------------------------------------------------------------------------
# 합성 화면에서, 합성하는 아이템의 개수를 입력하는 윈도우입니다.
#==============================================================================
class Window_ComposeNumber < Window_ShopNumber
#--------------------------------------------------------------------------
# ● 리프레쉬
#--------------------------------------------------------------------------
def refresh
y = 96
self.contents.clear
draw_compose_item_name(@item, 0, y)
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::HIDE_SHORTAGE_RECIPE # 비용·소재 부족을 숨기는 경우
if !$game_party.item_composed?(item) && !enable?(item)
return false # 미합성 한편 합성 불가라면 포함하지 않는다
end
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)
draw_compose_item_name(item, rect.x, rect.y, enable?(item))
# 비용을 묘화
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_composed?(item)
# 아이템이 nil 인가, 합성이 끝난 상태라면 [Window_ShopBuy] 에 맡긴다
super
else
@help_window.set_text(KGC::ComposeItem::UNKNOWN_RECIPE_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)
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
#------------------------------------------------------------------------------
# 합성 화면의 처리를 실시하는 클래스입니다.
#==============================================================================
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_BUTTON)
Sound.play_cursor
@status_window.change_mode
end
end
#--------------------------------------------------------------------------
# ● 구입 아이템 선택의 갱신
#--------------------------------------------------------------------------
def update_buy_selection
# 커멘드 윈도우비표시로 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 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
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
아방스 님! 확인 해주세요!!(....)