VX 스크립트

아이템
2008.03.08 23:02

KGC]아이템 합성

조회 수 5123 추천 수 0 댓글 29
Atachment
첨부 '1'

원본: 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



ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ


아방스 님! 확인 해주세요!!(....)

Comment '29'
  • ?
    후저비 2008.03.09 08:46

    어케해야그거(합성샾)나옴?

  • ?
    찌나 2008.03.09 09:16

    글의 제일 위쪽 인조이제펜의 링크를 눌려서 해석을 읽어보세요.
    합성 샵이 아니라 '메뉴'의 '아이템'에서 합성하기가 추가 된 것으로 알아요. ^ ^

  • ?
    찌나 2008.03.09 09:18
    헛;; 정정 합니다;;
    '합성 샵'이 맞네요. 거기에 대한 적용은 역시 npc에 스크립트로 연결 해야 겠지요.
  • ?
    ぁ... 2008.03.09 17:01

    한번 해봐야 겟네요 ㅎ ,, 감사합니다~

  • ?
    라희2 2008.03.13 20:03

    음... 실행한번 해봐야 알겠군;

  • ?
    ABCDEGF 2008.03.25 21:59

    컥 감사합니다.

  • profile
    NewSet 2008.03.28 21:33
    되는지..
  • ?
    유리 2008.04.08 21:25
    ㅎㅎ 감사합니다`
  • ?
    시아 2008.04.24 14:16

    이거 스크립트에디터에 등록하고 어케써야대나요;;;

  • ?
    ㅇㅇㅇㅇ2 2008.08.24 11:54
    2번스위치on하고 상점여는거라는..
  • ?
    비상 2008.05.09 23:08

    갑자기 설명서 링크에 안들어가진다?;;;;;머지;;

  • ?
    엘시아 2008.05.16 01:48
    감사합니다!!
    근데..헉!! 할게 많네요..
  • ?
    RPG고수 2008.06.12 19:29
    오 잘되네요 ^^ 정보 감사합니다
  • ?
    ♡사랑낭자♡ 2008.06.14 20:26
    어떻게하는지 잘 모르겟군요...
  • ?
    zerobm 2008.08.05 22:36
    이거 어떻게해야하는지.. 자세히설명좀 ㄷㄷ
  • ?
    enlwnrqkrwnr 2008.08.07 08:25
    전 위에서 16번쨰에 있는 숫자의 스위치를on시켜야 한다고 생각
  • ?
    enlwnrqkrwnr 2008.08.07 08:59
    설명이 없으면 이글이 있어도 소용이..(사용을 못하니까)
  • ?
    r.k.c(rpg king chobo) 2008.08.17 15:07

    필요하겠네요.

  • ?
    ㅇㅇㅇㅇ2 2008.09.21 15:52
    필요 없는건데
  • profile
    아방스 2008.08.27 15:41

    원본 게시물쪽으로 가셔서 읽어보시면 작동가능 하실거에요 ^^

  • ?
    아방스마니아 2008.08.28 19:08
    스크립트를 올리셨으면 제대로 사용 방법을 적으셨어야죠
    레서피는 또 어떻게 구한답니까? --
    재료모아놔도 레서피를 어떻게구할지몰라서 뭣도못함
  • ?
    KSG 2008.10.25 14:21
    감사합니다
  • profile
    카와이 2009.01.13 13:56
    복잡하다// 이벤트로만들면 될텐뎁
  • ?
    1000℃ 복숭아 2010.01.25 23:13

    141번째줄에 오류가나요ㅠㅠ;

  • profile
    star211 2010.01.26 11:47

    RECIPE_ITEM[8] = [0, "I:2", "I:4", "I:7"] << 이부분은

    아이템 8번을 만들때 들어가는 아이템은

    아이템 2번 1개 아이템 4번 1개 아이템 7번 1개

    이런뜻같음

  • ?
    KOREA♬♪ 2010.03.07 20:04

    이거.... 강좌가면 합성샵해서 강좌있지않나요?

  • ?
    1+1=田 2010.10.15 18:17

    일단 감사합니다

  • profile
    이탱구 2011.01.15 10:59

    아항 이걸로 요리를...

  • ?
    자연산잉여 2014.05.15 11:17
    이거 사용법 드뎌 알아넴요
    맨위 해당하는 스위치ON시키고 상점처리하면 됨
    몇분동한 고민한 결과물

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 3 습작 2012.12.24 5398
» 아이템 KGC]아이템 합성 29 file 찌나 2008.03.08 5123
536 아이템 편리한 디자인의 아이템메뉴 30 file RPGbooster 2008.10.11 5098
535 움직이는커서 11 file RPGbooster 2008.10.08 5090
534 맵/타일 Final Fantasy IV 모든 완성된맵 47 RPGbooster 2008.10.11 5086
533 전투 돌아가는 전투 메뉴 시스템 33 아방스 2008.08.29 5083
532 전투 새로운 전투돌입효과 29 file RPGbooster 2008.10.08 5076
531 메뉴 rpg 만들기 vx 정보창에 조금더 자세한 정보가 나오게 하는 스크립트 28 아방스 2008.01.25 5076
530 기타 몬스터 리얼한 효과 27 file 사람이라면? 2010.08.16 5074
529 메뉴 확장 스테이터스 화면 - KGC 23 file 카르와푸딩의아틀리에 2009.08.19 5057
528 온라인 RPGVX 3D스크립트 11 file 고자몬 2011.07.10 5049
527 메시지 메시지를 빠르게 넘겨주는 스크립트 3 타카나시 소라 2012.07.23 5038
526 전투 VX SRPG3d(한글번역) 8 file 아이미르 2011.10.15 5032
525 이동 및 탈것 피티원이 따라다니는 스크립트 38 file 아방스 2009.02.05 5024
524 타이틀/게임오버 Rafidelis KaHh Box 타이틀화면 20 카르와푸딩의아틀리에 2009.08.23 5004
523 메시지 얼굴표시 9 허걱 2009.09.23 5001
522 깔끔한 링메뉴 45 file RPGbooster 2008.10.08 5000
521 전투 VX 사이드 뷰 전투 (2003 방식) 16 드로드맨 2008.02.24 4996
520 타이틀/게임오버 타이틀 로고 26 file RPGbooster 2008.10.08 4950
519 메뉴 스테이터스 화면 개조 - 커스텀 버전 13 file 훈덕 2009.06.15 4932
518 전투 [vx] ATB 시스템. 10 만들어보자꾸나 2008.07.05 4925
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 32 Next
/ 32