设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1323|回复: 6
打印 上一主题 下一主题

这个脚本怎么呼出?

 关闭 [复制链接]

Lv3.寻梦者

贝鲁耶的依叶森林
持镰的苍色水野

梦石
2
星屑
659
在线时间
563 小时
注册时间
2007-4-8
帖子
1304

第4届短篇游戏比赛季军短篇八RM组亚军

跳转到指定楼层
1
发表于 2008-3-27 07:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ アイテム合成 - KGC_ComposeItem ◆ VX ◆
  3. #_/    ◇ Last update : 2008/01/25 ◇
  4. #_/----------------------------------------------------------------------------
  5. #_/  複数のアイテムを合成し、新たなアイテムを作り出す機能を作成します。
  6. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

  7. #==============================================================================
  8. # ★ カスタマイズ項目 - Customize ★
  9. #==============================================================================

  10. module KGC
  11. module ComposeItem
  12.   # ◆ 合成画面呼び出しフラグを表すスイッチ番号
  13.   #  このスイッチを ON にすると、通常のショップの代わりに合成屋が開きます。
  14.   COMPOSE_CALL_SWITCH = 2

  15.   # ◆ 合成レシピ
  16.   #  ≪費用, "タイプ:ID,個数", ...≫
  17.   #  【 費用 】合成費用
  18.   #  【タイプ】合成素材の種類 (I..アイテム  W..武器  A..防具)
  19.   #  【  ID  】合成素材のID (↑と対応)
  20.   #  【 個数 】合成素材の必要数
  21.   #  "タイプ:ID,個数" はいくつでも指定できます。
  22.   #  個数を省略して "タイプ:ID" と書いた場合、個数は 1 扱いとなります。
  23.   #  個数を 0 にした場合、1 個以上持っていれば何度でも合成できます。
  24.   #  レシピ配列は、添字がアイテム・武器・防具IDに対応しています。
  25.   RECIPE_ITEM   = []  # アイテム
  26.   RECIPE_WEAPON = []  # 武器
  27.   RECIPE_ARMOR  = []  # 防具
  28.   # ここから下に、合成レシピを定義。
  29.   #  <設定例>
  30.   #  アイテムID:8 の合成レシピ
  31.   #  アイテムID 2, 4, 7 を 1 個ずつ消費。無料。
  32.   RECIPE_ITEM[8] = [0, "I:2", "I:4", "I:7"]
  33.   #  武器ID:16 の合成レシピ
  34.   #  武器ID:10 を 1個、アイテムID:16 を 2 個消費。800 G。
  35.   RECIPE_WEAPON[2] = [100, "W:2", "I:1,2"]

  36.   # ◆ 合成コマンド名
  37.   #  "購入する" コマンドの位置に表示されます。
  38.   #  ※ 他のコマンド名は [Vocab] で変更可能。
  39.   VOCAB_COMPOSE_ITEM = "合成する"
  40.   # ◆ 合成アイテム情報切り替えボタン
  41.   #  「素材リスト <--> 能力値変化(装備品のみ)」を切り替えるボタン。
  42.   #  使用しない場合は nil を指定。
  43.   SWITCH_INFO_BUTTON = Input::X

  44.   # ◆ 必要素材リストをコンパクトにする
  45.   #  素材数が多い場合は true にしてください。
  46.   COMPACT_MATERIAL_LIST = true
  47.   # ◆ コマンドウィンドウを表示しない
  48.   #  XP 版と同様のスタイルになります。
  49.   HIDE_COMMAND_WINDOW   = false
  50.   # ◆ 所持金ウィンドウを表示しない
  51.   #  HIDE_COMMAND_WINDOW が false のときは常に表示します。
  52.   HIDE_GOLD_WINDOW      = false
  53.   # ◆ 合成費用が 0 の場合、費用を表示しない
  54.   HIDE_ZERO_COST        = true

  55.   # ◆ 費用・素材不足のレシピを表示しない
  56.   #  一度でも合成したことがあるものは常に表示されます。
  57.   HIDE_SHORTAGE_RECIPE     = false
  58.   # ◆ 合成したことがないレシピのアイテム名を隠す
  59.   MASK_UNKNOWN_RECIPE_NAME = true
  60.   # ◆ 合成したことがないレシピに表示する名前
  61.   #  1文字だけ指定すると、アイテム名と同じ長さに拡張されます。
  62.   UNKNOWN_NAME_MASK        = "?"
  63.   # ◆ 合成したことがないレシピのヘルプを隠す
  64.   HIDE_UNKNOWN_RECIPE_HELP = true
  65.   # ◆ 合成したことがないレシピに表示するヘルプ
  66.   UNKNOWN_RECIPE_HELP      = "合成したことがありません"
  67. end
  68. end

  69. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  70. $imported = {} if $imported == nil
  71. $imported["ComposeItem"] = true

  72. module KGC::ComposeItem
  73.   # 正規表現を定義
  74.   module Regexp
  75.     # レシピ
  76.     RECIPE = /([IWA])[ ]*:[ ]*(\d+)([ ]*,[ ]*\d+)?/i
  77.   end
  78. end

  79. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  80. #==============================================================================
  81. # ■ Vocab
  82. #==============================================================================

  83. module Vocab
  84.   # 合成画面
  85.   ComposeItem = KGC::ComposeItem::VOCAB_COMPOSE_ITEM
  86. end

  87. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  88. #==============================================================================
  89. # ■ RPG::BaseItem
  90. #==============================================================================

  91. class RPG::BaseItem
  92.   #--------------------------------------------------------------------------
  93.   # ○ クラス変数
  94.   #--------------------------------------------------------------------------
  95.   @@__masked_name =
  96.     KGC::ComposeItem::UNKNOWN_NAME_MASK  # マスク名
  97.   @@__expand_masked_name = false         # マスク名拡張表示フラグ

  98.   if @@__masked_name != nil
  99.     @@__expand_masked_name = (@@__masked_name.scan(/./).size == 1)
  100.   end
  101.   #--------------------------------------------------------------------------
  102.   # ○ アイテム合成のキャッシュ生成
  103.   #--------------------------------------------------------------------------
  104.   def create_compose_item_cache
  105.     @__compose_cost = 0
  106.     @__compose_materials = []

  107.     # レシピ取得
  108.     recipe = nil
  109.     case self
  110.     when RPG::Item    # アイテム
  111.       recipe = KGC::ComposeItem::RECIPE_ITEM[self.id]
  112.     when RPG::Weapon  # 武器
  113.       recipe = KGC::ComposeItem::RECIPE_WEAPON[self.id]
  114.     when RPG::Armor   # 防具
  115.       recipe = KGC::ComposeItem::RECIPE_ARMOR[self.id]
  116.     end
  117.     return if recipe == nil
  118.     recipe = recipe.dup

  119.     @__compose_cost = recipe.shift
  120.     # 素材リストを作成
  121.     recipe.each { |r|
  122.       if r =~ KGC::ComposeItem::Regexp::RECIPE
  123.         material = Game_ComposeMaterial.new
  124.         material.kind = $1.upcase                    # 素材の種類を取得
  125.         material.id = $2.to_i                        # 素材の ID を取得
  126.         if $3 != nil
  127.           material.number = [$3[/\d+/].to_i, 0].max  # 必要数を取得
  128.         end
  129.         @__compose_materials << material
  130.       end
  131.     }
  132.   end
  133.   #--------------------------------------------------------------------------
  134.   # ○ マスク名
  135.   #--------------------------------------------------------------------------
  136.   def masked_name
  137.     if KGC::ComposeItem::MASK_UNKNOWN_RECIPE_NAME
  138.       if @@__expand_masked_name
  139.         # マスク名を拡張して表示
  140.         return @@__masked_name * self.name.scan(/./).size
  141.       else
  142.         return @@__masked_name
  143.       end
  144.     else
  145.       return self.name
  146.     end
  147.   end
  148.   #--------------------------------------------------------------------------
  149.   # ○ 合成用費用
  150.   #--------------------------------------------------------------------------
  151.   def compose_cost
  152.     create_compose_item_cache if @__compose_cost == nil
  153.     return @__compose_cost
  154.   end
  155.   #--------------------------------------------------------------------------
  156.   # ○ 合成用素材リスト
  157.   #--------------------------------------------------------------------------
  158.   def compose_materials
  159.     create_compose_item_cache if @__compose_materials == nil
  160.     return @__compose_materials
  161.   end
  162.   #--------------------------------------------------------------------------
  163.   # ○ 合成アイテムか
  164.   #--------------------------------------------------------------------------
  165.   def is_compose?
  166.     return !compose_materials.empty?
  167.   end
  168. end

  169. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  170. #==============================================================================
  171. # ■ Game_Party
  172. #==============================================================================

  173. class Game_Party < Game_Unit
  174.   #--------------------------------------------------------------------------
  175.   # ○ 合成済みフラグをクリア
  176.   #--------------------------------------------------------------------------
  177.   def clear_composed_flag
  178.     @item_composed = {}
  179.     @weapon_composed = {}
  180.     @armor_composed = {}
  181.   end
  182.   #--------------------------------------------------------------------------
  183.   # ○ アイテムの合成済みフラグを設定
  184.   #     item : アイテム
  185.   #     flag : true..合成済み  false..未合成
  186.   #--------------------------------------------------------------------------
  187.   def set_item_composed(item, flag = true)
  188.     return false unless item.is_a?(RPG::BaseItem)  # アイテム以外
  189.     return false unless item.is_compose?           # 合成アイテム以外

  190.     # 合成済みフラグを格納するハッシュを作成
  191.     clear_composed_flag if @item_composed == nil

  192.     # 合成済みフラグをセット
  193.     case item
  194.     when RPG::Item    # アイテム
  195.       @item_composed[item.id] = flag
  196.     when RPG::Weapon  # 武器
  197.       @weapon_composed[item.id] = flag
  198.     when RPG::Armor   # 防具
  199.       @armor_composed[item.id] = flag
  200.     end
  201.   end
  202.   #--------------------------------------------------------------------------
  203.   # ○ アイテムの合成済み判定
  204.   #     item : アイテム
  205.   #--------------------------------------------------------------------------
  206.   def item_composed?(item)
  207.     return false unless item.is_a?(RPG::BaseItem)  # アイテム以外
  208.     return false unless item.is_compose?           # 合成アイテム以外

  209.     # 合成済みフラグを格納するハッシュを作成
  210.     clear_composed_flag if @item_composed == nil

  211.     # 合成済み判定
  212.     case item
  213.     when RPG::Item    # アイテム
  214.       return @item_composed[item.id]
  215.     when RPG::Weapon  # 武器
  216.       return @weapon_composed[item.id]
  217.     when RPG::Armor   # 防具
  218.       return @armor_composed[item.id]
  219.     end
  220.     return false
  221.   end
  222.   #--------------------------------------------------------------------------
  223.   # ○ アイテムの合成可能判定
  224.   #     item : アイテム
  225.   #--------------------------------------------------------------------------
  226.   def item_can_compose?(item)
  227.     return false unless item.is_a?(RPG::BaseItem)  # アイテム以外は不可
  228.     return false unless item.is_compose?           # 合成アイテム以外は不可

  229.     return false if gold < item.compose_cost       # 資金不足なら不可

  230.     item.compose_materials.each { |material|
  231.       num = item_number(material.item)
  232.       # 素材不足なら不可
  233.       return false if num < material.number || num == 0
  234.     }
  235.     return true
  236.   end
  237.   #--------------------------------------------------------------------------
  238.   # ○ アイテムの合成可能数を取得
  239.   #     item : アイテム
  240.   #--------------------------------------------------------------------------
  241.   def number_of_composable(item)
  242.     return 0 unless item.is_a?(RPG::BaseItem)  # アイテム以外
  243.     return 0 unless item.is_compose?           # 合成アイテム以外

  244.     number = ($imported["LimitBreak"] ? item.number_limit : 99)
  245.     if item.compose_cost > 0
  246.       number = [number, gold / item.compose_cost].min
  247.     end
  248.     # 素材数判定
  249.     item.compose_materials.each { |material|
  250.       next if material.number == 0  # 必要数 0 は無視
  251.       n = item_number(material.item) / material.number
  252.       number = [number, n].min
  253.     }
  254.     return number
  255.   end
  256. end

  257. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  258. #==============================================================================
  259. # □ Game_ComposeMaterial
  260. #------------------------------------------------------------------------------
  261. #   合成素材の情報を格納するクラスです。
  262. #==============================================================================

  263. class Game_ComposeMaterial
  264.   #--------------------------------------------------------------------------
  265.   # ○ 公開インスタンス変数
  266.   #--------------------------------------------------------------------------
  267.   attr_accessor :kind                     # アイテムの種類 (/[IWA]/)
  268.   attr_accessor :id                       # アイテムの ID
  269.   attr_accessor :number                   # 必要数
  270.   #--------------------------------------------------------------------------
  271.   # ○ オブジェクト初期化
  272.   #--------------------------------------------------------------------------
  273.   def initialize
  274.     @kind = "I"
  275.     @id = 0
  276.     @number = 1
  277.   end
  278.   #--------------------------------------------------------------------------
  279.   # ○ アイテム取得
  280.   #--------------------------------------------------------------------------
  281.   def item
  282.     case @kind
  283.     when "I"  # アイテム
  284.       return $data_items[@id]
  285.     when "W"  # 武器
  286.       return $data_weapons[@id]
  287.     when "A"  # 防具
  288.       return $data_armors[@id]
  289.     else
  290.       return nil
  291.     end
  292.   end
  293. end

  294. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  295. #==============================================================================
  296. # ■ Window_Base
  297. #==============================================================================

  298. class Window_Base < Window
  299.   #--------------------------------------------------------------------------
  300.   # ○ 合成アイテム名の描画
  301.   #     item    : アイテム (スキル、武器、防具でも可)
  302.   #     x       : 描画先 X 座標
  303.   #     y       : 描画先 Y 座標
  304.   #     enabled : 有効フラグ。false のとき半透明で描画
  305.   #--------------------------------------------------------------------------
  306.   def draw_compose_item_name(item, x, y, enabled = true)
  307.     return if item == nil

  308.     draw_icon(item.icon_index, x, y, enabled)
  309.     self.contents.font.color = normal_color
  310.     self.contents.font.color.alpha = enabled ? 255 : 128
  311.     self.contents.draw_text(x + 24, y, 172, WLH,
  312.       $game_party.item_composed?(item) ? item.name : item.masked_name)
  313.   end
  314. end
  315.   
  316. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  317. #==============================================================================
  318. # □ Window_ComposeNumber
  319. #------------------------------------------------------------------------------
  320. #   合成画面で、合成するアイテムの個数を入力するウィンドウです。
  321. #==============================================================================

  322. class Window_ComposeNumber < Window_ShopNumber
  323.   #--------------------------------------------------------------------------
  324.   # ● リフレッシュ
  325.   #--------------------------------------------------------------------------
  326.   def refresh
  327.     y = 96
  328.     self.contents.clear
  329.     draw_compose_item_name(@item, 0, y)
  330.     self.contents.font.color = normal_color
  331.     self.contents.draw_text(212, y, 20, WLH, "×")
  332.     self.contents.draw_text(248, y, 20, WLH, @number, 2)
  333.     self.cursor_rect.set(244, y, 28, WLH)
  334.     if !KGC::ComposeItem::HIDE_ZERO_COST || @price > 0
  335.       draw_currency_value(@price * @number, 4, y + WLH * 2, 264)
  336.     end
  337.   end
  338. end

  339. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  340. #==============================================================================
  341. # □ Window_ComposeItem
  342. #------------------------------------------------------------------------------
  343. #   合成画面で、合成できる商品の一覧を表示するウィンドウです。
  344. #==============================================================================

  345. class Window_ComposeItem < Window_ShopBuy
  346.   #--------------------------------------------------------------------------
  347.   # ● リフレッシュ
  348.   #--------------------------------------------------------------------------
  349.   def refresh
  350.     @data = []
  351.     for goods_item in @shop_goods
  352.       case goods_item[0]
  353.       when 0
  354.         item = $data_items[goods_item[1]]
  355.       when 1
  356.         item = $data_weapons[goods_item[1]]
  357.       when 2
  358.         item = $data_armors[goods_item[1]]
  359.       end
  360.       # 合成アイテムのみ追加
  361.       @data.push(item) if include?(item)
  362.     end
  363.     @item_max = @data.size
  364.     create_contents
  365.     for i in 0...@item_max
  366.       draw_item(i)
  367.     end
  368.   end
  369.   #--------------------------------------------------------------------------
  370.   # ○ アイテムをリストに含めるかどうか
  371.   #     item : アイテム
  372.   #--------------------------------------------------------------------------
  373.   def include?(item)
  374.     return false if item == nil                # アイテムが nil なら含めない
  375.     return false unless item.is_compose?       # 合成アイテムでなければ含めない
  376.     if KGC::ComposeItem::HIDE_SHORTAGE_RECIPE  # 費用・素材不足を隠す場合
  377.       if !$game_party.item_composed?(item) && !enable?(item)
  378.         return false  # 未合成かつ合成不可なら含めない
  379.       end
  380.     end

  381.     return true
  382.   end
  383.   #--------------------------------------------------------------------------
  384.   # ○ アイテムを許可状態で表示するかどうか
  385.   #     item : アイテム
  386.   #--------------------------------------------------------------------------
  387.   def enable?(item)
  388.     return $game_party.item_can_compose?(item)
  389.   end
  390.   #--------------------------------------------------------------------------
  391.   # ● 項目の描画
  392.   #     index : 項目番号
  393.   #--------------------------------------------------------------------------
  394.   def draw_item(index)
  395.     item = @data[index]
  396.     number = $game_party.item_number(item)
  397.     limit = ($imported["LimitBreak"] ? item.number_limit : 99)
  398.     rect = item_rect(index)
  399.     self.contents.clear_rect(rect)
  400.     draw_compose_item_name(item, rect.x, rect.y, enable?(item))
  401.     # 費用を描画
  402.     if !KGC::ComposeItem::HIDE_ZERO_COST || item.compose_cost > 0
  403.       rect.width -= 4
  404.       self.contents.draw_text(rect, item.compose_cost, 2)
  405.     end
  406.   end

  407.   if KGC::ComposeItem::HIDE_UNKNOWN_RECIPE_HELP
  408.   #--------------------------------------------------------------------------
  409.   # ● ヘルプテキスト更新
  410.   #--------------------------------------------------------------------------
  411.   def update_help
  412.     item = (index >= 0 ? @data[index] : nil)
  413.     if item == nil || $game_party.item_composed?(item)
  414.       # アイテムが nil か、合成済みなら [Window_ShopBuy] に任せる
  415.       super
  416.     else
  417.       @help_window.set_text(KGC::ComposeItem::UNKNOWN_RECIPE_HELP)
  418.     end
  419.   end
  420.   end
  421. end

  422. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  423. #==============================================================================
  424. # □ Window_ComposeStatus
  425. #------------------------------------------------------------------------------
  426. #  合成画面で、素材の所持数や必要数を表示するウィンドウです。
  427. #==============================================================================

  428. class Window_ComposeStatus < Window_ShopStatus
  429.   #--------------------------------------------------------------------------
  430.   # ○ 表示モード
  431.   #--------------------------------------------------------------------------
  432.   MODE_MATERIAL = 0  # 素材リスト
  433.   MODE_STATUS   = 1  # パーティのステータス
  434.   #--------------------------------------------------------------------------
  435.   # ● オブジェクト初期化
  436.   #     x : ウィンドウの X 座標
  437.   #     y : ウィンドウの Y 座標
  438.   #--------------------------------------------------------------------------
  439.   def initialize(x, y)
  440.     @mode = MODE_MATERIAL
  441.     super(x, y)
  442.   end
  443.   #--------------------------------------------------------------------------
  444.   # ○ モード変更
  445.   #--------------------------------------------------------------------------
  446.   def change_mode
  447.     case @mode
  448.     when MODE_MATERIAL
  449.       @mode = MODE_STATUS
  450.     when MODE_STATUS
  451.       @mode = MODE_MATERIAL
  452.     end
  453.     self.oy = 0
  454.     refresh
  455.   end
  456.   #--------------------------------------------------------------------------
  457.   # ● ウィンドウ内容の作成
  458.   #--------------------------------------------------------------------------
  459.   def create_contents
  460.     if @mode == MODE_STATUS
  461.       super
  462.       return
  463.     end

  464.     self.contents.dispose
  465.     ch = height - 32
  466.     if @item != nil
  467.       mag = (KGC::ComposeItem::COMPACT_MATERIAL_LIST ? 1 : 2)
  468.       ch = [ch, WLH * (mag + @item.compose_materials.size * mag)].max
  469.     end
  470.     self.contents = Bitmap.new(width - 32, ch)
  471.   end
  472.   #--------------------------------------------------------------------------
  473.   # ● リフレッシュ
  474.   #--------------------------------------------------------------------------
  475.   def refresh
  476.     create_contents
  477.     self.contents.font.size = Font.default_size
  478.     case @mode
  479.     when MODE_MATERIAL
  480.       draw_material_list
  481.     when MODE_STATUS
  482.       super
  483.     end
  484.   end
  485.   #--------------------------------------------------------------------------
  486.   # ○ 素材リストを描画
  487.   #--------------------------------------------------------------------------
  488.   def draw_material_list
  489.     return if @item == nil
  490.     number = $game_party.item_number(@item)
  491.     self.contents.font.color = system_color
  492.     self.contents.draw_text(4, 0, 200, WLH, Vocab::Possession)
  493.     self.contents.font.color = normal_color
  494.     self.contents.draw_text(4, 0, 200, WLH, number, 2)
  495.     self.contents.font.size = 16 if KGC::ComposeItem::COMPACT_MATERIAL_LIST
  496.     mag = (KGC::ComposeItem::COMPACT_MATERIAL_LIST ? 1 : 2)
  497.     @item.compose_materials.each_with_index { |material, i|
  498.       y = WLH * (mag + i * mag)
  499.       draw_material_info(0, y, material)
  500.     }
  501.   end
  502.   #--------------------------------------------------------------------------
  503.   # ○ 素材情報を描画
  504.   #--------------------------------------------------------------------------
  505.   def draw_material_info(x, y, material)
  506.     m_item = material.item
  507.     return if m_item == nil
  508.     number = $game_party.item_number(m_item)
  509.     enabled = (number > 0 && number >= material.number)
  510.     draw_item_name(m_item, x, y, enabled)
  511.     if KGC::ComposeItem::COMPACT_MATERIAL_LIST
  512.       m_number = (material.number == 0 ? "-" : sprintf("%d", material.number))
  513.       self.contents.draw_text(x, y, width - 32, WLH,
  514.         sprintf("%s/%d", m_number, number), 2)
  515.     else
  516.       m_number = (material.number == 0 ? "-" : sprintf("%2d", material.number))
  517.       self.contents.draw_text(x, y + WLH, width - 32, WLH,
  518.         sprintf("%2s/%2d", m_number, number), 2)
  519.     end
  520.   end
  521. end

  522. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  523. #==============================================================================
  524. # ■ Scene_Map
  525. #==============================================================================

  526. class Scene_Map < Scene_Base
  527.   #--------------------------------------------------------------------------
  528.   # ● ショップ画面への切り替え
  529.   #--------------------------------------------------------------------------
  530.   alias call_shop_KGC_ComposeItem call_shop
  531.   def call_shop
  532.     # 合成画面を呼び出した場合
  533.     if $game_switches[KGC::ComposeItem::COMPOSE_CALL_SWITCH]
  534.       # 合成画面に移行
  535.       $game_temp.next_scene = nil
  536.       $game_switches[KGC::ComposeItem::COMPOSE_CALL_SWITCH] = false
  537.       $scene = Scene_ComposeItem.new
  538.     else
  539.       call_shop_KGC_ComposeItem
  540.     end
  541.   end
  542. end

  543. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  544. #==============================================================================
  545. # □ Scene_ComposeItem
  546. #------------------------------------------------------------------------------
  547. #  合成画面の処理を行うクラスです。
  548. #==============================================================================

  549. class Scene_ComposeItem < Scene_Shop
  550.   #--------------------------------------------------------------------------
  551.   # ● 開始処理
  552.   #--------------------------------------------------------------------------
  553.   def start
  554.     super
  555.     # コマンドウィンドウ非表示
  556.     if KGC::ComposeItem::HIDE_COMMAND_WINDOW
  557.       @command_window.visible = false
  558.       @gold_window.y = Graphics.height - @gold_window.height
  559.       @gold_window.z = @status_window.z + 100
  560.       @gold_window.visible = !KGC::ComposeItem::HIDE_GOLD_WINDOW

  561.       @dummy_window.y = @command_window.y
  562.       @dummy_window.height += @command_window.height
  563.     end

  564.     # [Scene_Shop] 再利用のため、合成リストに @buy_window を使用
  565.     @buy_window.dispose
  566.     @buy_window = Window_ComposeItem.new(0, @dummy_window.y)
  567.     @buy_window.height = @dummy_window.height
  568.     @buy_window.active = false
  569.     @buy_window.visible = false
  570.     @buy_window.help_window = @help_window

  571.     # その他のウィンドウを再構成
  572.     @number_window.dispose
  573.     @number_window = Window_ComposeNumber.new(0, @buy_window.y)
  574.     @number_window.height = @buy_window.height
  575.     @number_window.create_contents
  576.     @number_window.active = false
  577.     @number_window.visible = false

  578.     @status_window.dispose
  579.     @status_window = Window_ComposeStatus.new(@buy_window.width, @buy_window.y)
  580.     @status_window.height = @buy_window.height
  581.     @status_window.create_contents
  582.     @status_window.visible = false

  583.     # コマンドウィンドウ非表示の場合、合成ウィンドウに切り替え
  584.     if KGC::ComposeItem::HIDE_COMMAND_WINDOW
  585.       @command_window.active = false
  586.       @dummy_window.visible = false
  587.       @buy_window.active = true
  588.       @buy_window.visible = true
  589.       @buy_window.update_help
  590.       @status_window.visible = true
  591.       @status_window.item = @buy_window.item
  592.     end
  593.   end
  594.   #--------------------------------------------------------------------------
  595.   # ● コマンドウィンドウの作成
  596.   #--------------------------------------------------------------------------
  597.   def create_command_window
  598.     s1 = Vocab::ComposeItem
  599.     s2 = Vocab::ShopSell
  600.     s3 = Vocab::ShopCancel
  601.     @command_window = Window_Command.new(384, [s1, s2, s3], 3)
  602.     @command_window.y = 56
  603.     if $game_temp.shop_purchase_only
  604.       @command_window.draw_item(1, false)
  605.     end
  606.   end
  607.   #--------------------------------------------------------------------------
  608.   # ● フレーム更新
  609.   #--------------------------------------------------------------------------
  610.   def update
  611.     super
  612.     if KGC::ComposeItem::SWITCH_INFO_BUTTON != nil &&
  613.         Input.trigger?(KGC::ComposeItem::SWITCH_INFO_BUTTON)
  614.       Sound.play_cursor
  615.       @status_window.change_mode
  616.     end
  617.   end
  618.   #--------------------------------------------------------------------------
  619.   # ● 購入アイテム選択の更新
  620.   #--------------------------------------------------------------------------
  621.   def update_buy_selection
  622.     # コマンドウィンドウ非表示で B ボタンが押された場合
  623.     if KGC::ComposeItem::HIDE_COMMAND_WINDOW && Input.trigger?(Input::B)
  624.       Sound.play_cancel
  625.       $scene = Scene_Map.new
  626.       return
  627.     end

  628.     @status_window.item = @buy_window.item
  629.     if Input.trigger?(Input::C)
  630.       @item = @buy_window.item
  631.       # アイテムが無効なら選択不可
  632.       if @item == nil
  633.         Sound.play_buzzer
  634.         return
  635.       end

  636.       # 合成不可能 or 限界数まで所持している場合は選択不可
  637.       number = $game_party.item_number(@item)
  638.       limit = ($imported["LimitBreak"] ? @item.number_limit : 99)
  639.       if !$game_party.item_can_compose?(@item) || number == limit
  640.         Sound.play_buzzer
  641.         return
  642.       end

  643.       # 個数入力に切り替え
  644.       Sound.play_decision
  645.       max = $game_party.number_of_composable(@item)
  646.       max = [max, limit - number].min
  647.       @buy_window.active = false
  648.       @buy_window.visible = false
  649.       @number_window.set(@item, max, @item.compose_cost)
  650.       @number_window.active = true
  651.       @number_window.visible = true
  652.       return
  653.     end

  654.     super
  655.   end
  656.   #--------------------------------------------------------------------------
  657.   # ● 個数入力の決定
  658.   #--------------------------------------------------------------------------
  659.   def decide_number_input
  660.     if @command_window.index != 0  # 「合成する」以外
  661.       super
  662.       return
  663.     end

  664.     Sound.play_shop
  665.     @number_window.active = false
  666.     @number_window.visible = false
  667.     # 合成処理
  668.     operation_compose
  669.     @gold_window.refresh
  670.     @buy_window.refresh
  671.     @status_window.refresh
  672.     @buy_window.active = true
  673.     @buy_window.visible = true
  674.   end
  675.   #--------------------------------------------------------------------------
  676.   # ○ 合成の処理
  677.   #--------------------------------------------------------------------------
  678.   def operation_compose
  679.     $game_party.lose_gold(@number_window.number * @item.compose_cost)
  680.     $game_party.gain_item(@item, @number_window.number)
  681.     # 素材を減らす
  682.     @item.compose_materials.each { |material|
  683.       $game_party.lose_item(material.item,
  684.         material.number * @number_window.number)
  685.     }
  686.     # 合成済みにする
  687.     $game_party.set_item_composed(@item)
  688.   end
  689. end
复制代码

这个要怎么呼出来?
还有,第43行和第72行的紫色文字是什么意思?
水野的主页><
头像来自于游戏《龙背上的骑兵3》主角——Zero

Lv2.观梦者

天仙

梦石
0
星屑
620
在线时间
184 小时
注册时间
2008-4-15
帖子
5023

贵宾

2
发表于 2008-3-27 08:12:34 | 只看该作者
呼叫方式:
$scene = Scene_ComposeItem.new

紫色文字是字符串,可以自己修改
用翻译引擎翻译一下就好了
系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
VA脚本开工中...
偷窃脚本1.0 - 已完成
回复 支持 反对

使用道具 举报

Lv3.寻梦者

贝鲁耶的依叶森林
持镰的苍色水野

梦石
2
星屑
659
在线时间
563 小时
注册时间
2007-4-8
帖子
1304

第4届短篇游戏比赛季军短篇八RM组亚军

3
 楼主| 发表于 2008-3-27 08:17:09 | 只看该作者
变成这样……
水野的主页><
头像来自于游戏《龙背上的骑兵3》主角——Zero
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
289
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

4
发表于 2008-3-27 20:46:28 | 只看该作者
嘛,我这里有个我翻译的脚本,

  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ 物品合成 - KGC_ComposeItem ◆ VX ◆
  3. #_/    ◇ Last update : 2008/01/25 ◇
  4. #_/----------------------------------------------------------------------------
  5. #_/                     可制作合成物品。
  6. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

  7. #==============================================================================
  8. # ★ 定做項目 - Customize ★
  9. #==============================================================================

  10. module KGC
  11. module ComposeItem
  12.   # ◆ 将合成画面调用的开关号码
  13.   #  把这个开关设定为 ON 的话,可代替通常的店铺并使用合成功能。
  14.   COMPOSE_CALL_SWITCH = 13

  15.   # ◆ 合成物素材设定,通常格式:
  16.   #  ≪费用,"物品类型:ID,个数",... ≫
  17.   #  【 费用 】合成物品所需的费用
  18.   #  【 物品种类 】合成素材的种类  (I..物品  W..武器  A..防具)
  19.   #  【  ID  】合成素材的ID (↑要与以上相对应)
  20.   #  【 个数 】合成物品所需素材的数目
  21.   #  "物品种类:ID,個数" 。多个的时候也可以这样设定。
  22.   #  可省略数目。写成 "物品类型:ID" 。如果没写的话,将用默认设定个数为1。
  23.   #  如果把个数设定为0的话,持有1个以上时也可以合成,但是合成成功的话,将
  24.   #不会扣除所设定的物品。
  25.   #  按一下设定的排列,添加的顺序与物品・武器・防具的ID相对应。
  26.   RECIPE_ITEM   = []  # 物品
  27.   RECIPE_WEAPON = []  # 武器
  28.   RECIPE_ARMOR  = []  # 防具
  29.   # 从这里开始,自定义合成公式(找不到好的词)。
  30.   #  <例如>
  31.   #  物品ID为8的合成公式
  32.   #  物品ID 2, 4, 7 各消耗1个,免费合成。
  33.   RECIPE_ITEM[8] = [0, "I:2", "I:4", "I:7"]
  34.   #  武器ID:16 的合成公式
  35.   #  武器ID:10 消耗1个、物品ID:16 消耗 2 个,合成费用800 G。
  36.   RECIPE_WEAPON[16] = [800, "W:10", "I:16,2"]
  37.   RECIPE_WEAPON[1] = [0,"I:1,2"]

  38.   # ◆ 合成指令名
  39.   #  可替代普通商店的购买指令。
  40.   #  ※ 想要修改指令名字的话,可在下面的[Vocab]后做修改。
  41.   VOCAB_COMPOSE_ITEM = "合成"
  42.   # ◆ 合成物品的信息转换按键
  43.   #  「所需材料 <=转换=> 角色能力值変化(为装备品时)」信息变换按键。
  44.   #  不使用的时候,请设定成 nil。
  45.   SWITCH_INFO_BUTTON = Input::X

  46.   # ◆ 必要设定
  47.   #  当合成的材料为较多数时,请设定成 true。(其实就是合成素材的行距与字的大小)
  48.   COMPACT_MATERIAL_LIST = true
  49.   # ◆ 不显示命令窗口。
  50.   #  这与XP是相似的。
  51.   HIDE_COMMAND_WINDOW   = true
  52.   # ◆ 不显示所持金钱数
  53.   HIDE_GOLD_WINDOW      = false
  54.   # ◆ 当合成费用是0时, 不显示费用。
  55.   HIDE_ZERO_COST        = true

  56.   # ◆ 不表示费用与素材不足的合成列表。
  57.   #  之前合成过的物品的显名表示。
  58.   HIDE_SHORTAGE_RECIPE     = false
  59.   # ◆ 没有合成的物品隐藏物品名字, true为隐藏。
  60.   MASK_UNKNOWN_RECIPE_NAME = true
  61.   # ◆ 没有合成过的物品在列表上的表示方法
  62.   #  以下设定隐藏名,当物品名字为多个时,按以下设定扩展名字。
  63.   UNKNOWN_NAME_MASK        = "?"
  64.   # ◆ 没有合成过的物品,隐藏帮助信息。
  65.   HIDE_UNKNOWN_RECIPE_HELP = true
  66.   # ◆ 没有合成过在物品在列表上的帮助 信息。
  67.   UNKNOWN_RECIPE_HELP      = "合成列表"
  68. end
  69. end

  70. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  71. $imported = {} if $imported == nil
  72. $imported["ComposeItem"] = true

  73. module KGC::ComposeItem
  74.   # 定义正则表达式
  75.   module Regexp
  76.     # 合成列表
  77.     RECIPE = /([IWA])[ ]*:[ ]*(\d+)([ ]*,[ ]*\d+)?/i
  78.   end
  79. end

  80. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  81. #==============================================================================
  82. # ■ Vocab
  83. #==============================================================================

  84. module Vocab
  85.   # 合成画面
  86.   ComposeItem = KGC::ComposeItem::VOCAB_COMPOSE_ITEM
  87. end

  88. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  89. #==============================================================================
  90. # ■ RPG::BaseItem
  91. #==============================================================================

  92. class RPG::BaseItem
  93.   #--------------------------------------------------------------------------
  94.   # ○ 变量
  95.   #--------------------------------------------------------------------------
  96.   @@__masked_name =
  97.     KGC::ComposeItem::UNKNOWN_NAME_MASK  # 隐藏名
  98.   @@__expand_masked_name = false         # 隐藏名的扩展表示

  99.   if @@__masked_name != nil
  100.     @@__expand_masked_name = (@@__masked_name.scan(/./).size == 1)
  101.   end
  102.   #--------------------------------------------------------------------------
  103.   # ○ 物品合成费用
  104.   #--------------------------------------------------------------------------
  105.   def create_compose_item_cache
  106.     @__compose_cost = 0
  107.     @__compose_materials = []

  108.     # 合成列表取得
  109.     recipe = nil
  110.     case self
  111.     when RPG::Item    # 物品
  112.       recipe = KGC::ComposeItem::RECIPE_ITEM[self.id]
  113.     when RPG::Weapon  # 武器
  114.       recipe = KGC::ComposeItem::RECIPE_WEAPON[self.id]
  115.     when RPG::Armor   # 防具
  116.       recipe = KGC::ComposeItem::RECIPE_ARMOR[self.id]
  117.     end
  118.     return if recipe == nil
  119.     recipe = recipe.dup

  120.     @__compose_cost = recipe.shift
  121.     # 合成材料名单
  122.     recipe.each { |r|
  123.       if r =~ KGC::ComposeItem::Regexp::RECIPE
  124.         material = Game_ComposeMaterial.new
  125.         material.kind = $1.upcase                    # 取得材料的种类
  126.         material.id = $2.to_i                        # 取得材料的ID
  127.         if $3 != nil
  128.           material.number = [$3[/\d+/].to_i, 0].max  # 取得必要合成个数
  129.         end
  130.         @__compose_materials << material
  131.       end
  132.     }
  133.   end
  134.   #--------------------------------------------------------------------------
  135.   # ○ 隐藏名
  136.   #--------------------------------------------------------------------------
  137.   def masked_name
  138.     if KGC::ComposeItem::MASK_UNKNOWN_RECIPE_NAME
  139.       if @@__expand_masked_name
  140.         # 隐藏名的扩展表示
  141.         return @@__masked_name * self.name.scan(/./).size
  142.       else
  143.         return @@__masked_name
  144.       end
  145.     else
  146.       return self.name
  147.     end
  148.   end
  149.   #--------------------------------------------------------------------------
  150.   # ○ 合成费用
  151.   #--------------------------------------------------------------------------
  152.   def compose_cost
  153.     create_compose_item_cache if @__compose_cost == nil
  154.     return @__compose_cost
  155.   end
  156.   #--------------------------------------------------------------------------
  157.   # ○ 合成用材料名单
  158.   #--------------------------------------------------------------------------
  159.   def compose_materials
  160.     create_compose_item_cache if @__compose_materials == nil
  161.     return @__compose_materials
  162.   end
  163.   #--------------------------------------------------------------------------
  164.   # ○ 合成列表
  165.   #--------------------------------------------------------------------------
  166.   def is_compose?
  167.     return !compose_materials.empty?
  168.   end
  169. end

  170. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  171. #==============================================================================
  172. # ■ Game_Party
  173. #==============================================================================

  174. class Game_Party < Game_Unit
  175.   #--------------------------------------------------------------------------
  176.   # ○ 合成済みフラグをクリア
  177.   #--------------------------------------------------------------------------
  178.   def clear_composed_flag
  179.     @item_composed = {}
  180.     @weapon_composed = {}
  181.     @armor_composed = {}
  182.   end
  183.   #--------------------------------------------------------------------------
  184.   # ○ アイテムの合成済みフラグを設定
  185.   #     item : アイテム
  186.   #     flag : true..合成済み  false..未合成
  187.   #--------------------------------------------------------------------------
  188.   def set_item_composed(item, flag = true)
  189.     return false unless item.is_a?(RPG::BaseItem)  # アイテム以外
  190.     return false unless item.is_compose?           # 合成アイテム以外

  191.     # 合成済みフラグを格納するハッシュを作成
  192.     clear_composed_flag if @item_composed == nil

  193.     # 合成済みフラグをセット
  194.     case item
  195.     when RPG::Item    # アイテム
  196.       @item_composed[item.id] = flag
  197.     when RPG::Weapon  # 武器
  198.       @weapon_composed[item.id] = flag
  199.     when RPG::Armor   # 防具
  200.       @armor_composed[item.id] = flag
  201.     end
  202.   end
  203.   #--------------------------------------------------------------------------
  204.   # ○ アイテムの合成済み判定
  205.   #     item : アイテム
  206.   #--------------------------------------------------------------------------
  207.   def item_composed?(item)
  208.     return false unless item.is_a?(RPG::BaseItem)  # アイテム以外
  209.     return false unless item.is_compose?           # 合成アイテム以外

  210.     # 合成済みフラグを格納するハッシュを作成
  211.     clear_composed_flag if @item_composed == nil

  212.     # 合成済み判定
  213.     case item
  214.     when RPG::Item    # アイテム
  215.       return @item_composed[item.id]
  216.     when RPG::Weapon  # 武器
  217.       return @weapon_composed[item.id]
  218.     when RPG::Armor   # 防具
  219.       return @armor_composed[item.id]
  220.     end
  221.     return false
  222.   end
  223.   #--------------------------------------------------------------------------
  224.   # ○ アイテムの合成可能判定
  225.   #     item : アイテム
  226.   #--------------------------------------------------------------------------
  227.   def item_can_compose?(item)
  228.     return false unless item.is_a?(RPG::BaseItem)  # アイテム以外は不可
  229.     return false unless item.is_compose?           # 合成アイテム以外は不可

  230.     return false if gold < item.compose_cost       # 資金不足なら不可

  231.     item.compose_materials.each { |material|
  232.       num = item_number(material.item)
  233.       # 素材不足なら不可
  234.       return false if num < material.number || num == 0
  235.     }
  236.     return true
  237.   end
  238.   #--------------------------------------------------------------------------
  239.   # ○ アイテムの合成可能数を取得
  240.   #     item : アイテム
  241.   #--------------------------------------------------------------------------
  242.   def number_of_composable(item)
  243.     return 0 unless item.is_a?(RPG::BaseItem)  # アイテム以外
  244.     return 0 unless item.is_compose?           # 合成アイテム以外

  245.     number = ($imported["LimitBreak"] ? item.number_limit : 99)
  246.     if item.compose_cost > 0
  247.       number = [number, gold / item.compose_cost].min
  248.     end
  249.     # 素材数判定
  250.     item.compose_materials.each { |material|
  251.       next if material.number == 0  # 必要数 0 は無視
  252.       n = item_number(material.item) / material.number
  253.       number = [number, n].min
  254.     }
  255.     return number
  256.   end
  257. end

  258. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  259. #==============================================================================
  260. # □ Game_ComposeMaterial
  261. #------------------------------------------------------------------------------
  262. #   合成素材の情報を格納するクラスです。
  263. #==============================================================================

  264. class Game_ComposeMaterial
  265.   #--------------------------------------------------------------------------
  266.   # ○ 公開インスタンス変数
  267.   #--------------------------------------------------------------------------
  268.   attr_accessor :kind                     # アイテムの種類 (/[IWA]/)
  269.   attr_accessor :id                       # アイテムの ID
  270.   attr_accessor :number                   # 必要数
  271.   #--------------------------------------------------------------------------
  272.   # ○ オブジェクト初期化
  273.   #--------------------------------------------------------------------------
  274.   def initialize
  275.     @kind = "I"
  276.     @id = 0
  277.     @number = 1
  278.   end
  279.   #--------------------------------------------------------------------------
  280.   # ○ アイテム取得
  281.   #--------------------------------------------------------------------------
  282.   def item
  283.     case @kind
  284.     when "I"  # アイテム
  285.       return $data_items[@id]
  286.     when "W"  # 武器
  287.       return $data_weapons[@id]
  288.     when "A"  # 防具
  289.       return $data_armors[@id]
  290.     else
  291.       return nil
  292.     end
  293.   end
  294. end

  295. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  296. #==============================================================================
  297. # ■ Window_Base
  298. #==============================================================================

  299. class Window_Base < Window
  300.   #--------------------------------------------------------------------------
  301.   # ○ 合成アイテム名の描画
  302.   #     item    : アイテム (スキル、武器、防具でも可)
  303.   #     x       : 描画先 X 座標
  304.   #     y       : 描画先 Y 座標
  305.   #     enabled : 有効フラグ。false のとき半透明で描画
  306.   #--------------------------------------------------------------------------
  307.   def draw_compose_item_name(item, x, y, enabled = true)
  308.     return if item == nil

  309.     draw_icon(item.icon_index, x, y, enabled)
  310.     self.contents.font.color = normal_color
  311.     self.contents.font.color.alpha = enabled ? 255 : 128
  312.     self.contents.draw_text(x + 24, y, 172, WLH,
  313.       $game_party.item_composed?(item) ? item.name : item.masked_name)
  314.   end
  315. end
  316.   
  317. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  318. #==============================================================================
  319. # □ Window_ComposeNumber
  320. #------------------------------------------------------------------------------
  321. #   合成画面で、合成するアイテムの個数を入力するウィンドウです。
  322. #==============================================================================

  323. class Window_ComposeNumber < Window_ShopNumber
  324.   #--------------------------------------------------------------------------
  325.   # ● リフレッシュ
  326.   #--------------------------------------------------------------------------
  327.   def refresh
  328.     y = 96
  329.     self.contents.clear
  330.     draw_compose_item_name(@item, 0, y)
  331.     self.contents.font.color = normal_color
  332.     self.contents.draw_text(212, y, 20, WLH, "×")
  333.     self.contents.draw_text(248, y, 20, WLH, @number, 2)
  334.     self.cursor_rect.set(244, y, 28, WLH)
  335.     if !KGC::ComposeItem::HIDE_ZERO_COST || @price > 0
  336.       draw_currency_value(@price * @number, 4, y + WLH * 2, 264)
  337.     end
  338.   end
  339. end

  340. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  341. #==============================================================================
  342. # □ Window_ComposeItem
  343. #------------------------------------------------------------------------------
  344. #   合成画面で、合成できる商品の一覧を表示するウィンドウです。
  345. #==============================================================================

  346. class Window_ComposeItem < Window_ShopBuy
  347.   #--------------------------------------------------------------------------
  348.   # ● リフレッシュ
  349.   #--------------------------------------------------------------------------
  350.   def refresh
  351.     @data = []
  352.     for goods_item in @shop_goods
  353.       case goods_item[0]
  354.       when 0
  355.         item = $data_items[goods_item[1]]
  356.       when 1
  357.         item = $data_weapons[goods_item[1]]
  358.       when 2
  359.         item = $data_armors[goods_item[1]]
  360.       end
  361.       # 合成アイテムのみ追加
  362.       @data.push(item) if include?(item)
  363.     end
  364.     @item_max = @data.size
  365.     create_contents
  366.     for i in 0...@item_max
  367.       draw_item(i)
  368.     end
  369.   end
  370.   #--------------------------------------------------------------------------
  371.   # ○ アイテムをリストに含めるかどうか
  372.   #     item : アイテム
  373.   #--------------------------------------------------------------------------
  374.   def include?(item)
  375.     return false if item == nil                # アイテムが nil なら含めない
  376.     return false unless item.is_compose?       # 合成アイテムでなければ含めない
  377.     if KGC::ComposeItem::HIDE_SHORTAGE_RECIPE  # 費用・素材不足を隠す場合
  378.       if !$game_party.item_composed?(item) && !enable?(item)
  379.         return false  # 未合成かつ合成不可なら含めない
  380.       end
  381.     end

  382.     return true
  383.   end
  384.   #--------------------------------------------------------------------------
  385.   # ○ アイテムを許可状態で表示するかどうか
  386.   #     item : アイテム
  387.   #--------------------------------------------------------------------------
  388.   def enable?(item)
  389.     return $game_party.item_can_compose?(item)
  390.   end
  391.   #--------------------------------------------------------------------------
  392.   # ● 項目の描画
  393.   #     index : 項目番号
  394.   #--------------------------------------------------------------------------
  395.   def draw_item(index)
  396.     item = @data[index]
  397.     number = $game_party.item_number(item)
  398.     limit = ($imported["LimitBreak"] ? item.number_limit : 99)
  399.     rect = item_rect(index)
  400.     self.contents.clear_rect(rect)
  401.     draw_compose_item_name(item, rect.x, rect.y, enable?(item))
  402.     # 費用を描画
  403.     if !KGC::ComposeItem::HIDE_ZERO_COST || item.compose_cost > 0
  404.       rect.width -= 4
  405.       self.contents.draw_text(rect, item.compose_cost, 2)
  406.     end
  407.   end

  408.   if KGC::ComposeItem::HIDE_UNKNOWN_RECIPE_HELP
  409.   #--------------------------------------------------------------------------
  410.   # ● ヘルプテキスト更新
  411.   #--------------------------------------------------------------------------
  412.   def update_help
  413.     item = (index >= 0 ? @data[index] : nil)
  414.     if item == nil || $game_party.item_composed?(item)
  415.       # アイテムが nil か、合成済みなら [Window_ShopBuy] に任せる
  416.       super
  417.     else
  418.       @help_window.set_text(KGC::ComposeItem::UNKNOWN_RECIPE_HELP)
  419.     end
  420.   end
  421.   end
  422. end

  423. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  424. #==============================================================================
  425. # □ Window_ComposeStatus
  426. #------------------------------------------------------------------------------
  427. #  合成画面で、素材の所持数や必要数を表示するウィンドウです。
  428. #==============================================================================

  429. class Window_ComposeStatus < Window_ShopStatus
  430.   #--------------------------------------------------------------------------
  431.   # ○ 表示モード
  432.   #--------------------------------------------------------------------------
  433.   MODE_MATERIAL = 0  # 素材リスト
  434.   MODE_STATUS   = 1  # パーティのステータス
  435.   #--------------------------------------------------------------------------
  436.   # ● オブジェクト初期化
  437.   #     x : ウィンドウの X 座標
  438.   #     y : ウィンドウの Y 座標
  439.   #--------------------------------------------------------------------------
  440.   def initialize(x, y)
  441.     @mode = MODE_MATERIAL
  442.     super(x, y)
  443.   end
  444.   #--------------------------------------------------------------------------
  445.   # ○ モード変更
  446.   #--------------------------------------------------------------------------
  447.   def change_mode
  448.     case @mode
  449.     when MODE_MATERIAL
  450.       @mode = MODE_STATUS
  451.     when MODE_STATUS
  452.       @mode = MODE_MATERIAL
  453.     end
  454.     self.oy = 0
  455.     refresh
  456.   end
  457.   #--------------------------------------------------------------------------
  458.   # ● ウィンドウ内容の作成
  459.   #--------------------------------------------------------------------------
  460.   def create_contents
  461.     if @mode == MODE_STATUS
  462.       super
  463.       return
  464.     end

  465.     self.contents.dispose
  466.     ch = height - 32
  467.     if @item != nil
  468.       mag = (KGC::ComposeItem::COMPACT_MATERIAL_LIST ? 1 : 2)
  469.       ch = [ch, WLH * (mag + @item.compose_materials.size * mag)].max
  470.     end
  471.     self.contents = Bitmap.new(width - 32, ch)
  472.   end
  473.   #--------------------------------------------------------------------------
  474.   # ● リフレッシュ
  475.   #--------------------------------------------------------------------------
  476.   def refresh
  477.     create_contents
  478.     self.contents.font.size = Font.default_size
  479.     case @mode
  480.     when MODE_MATERIAL
  481.       draw_material_list
  482.     when MODE_STATUS
  483.       super
  484.     end
  485.   end
  486.   #--------------------------------------------------------------------------
  487.   # ○ 素材リストを描画
  488.   #--------------------------------------------------------------------------
  489.   def draw_material_list
  490.     return if @item == nil
  491.     number = $game_party.item_number(@item)
  492.     self.contents.font.color = system_color
  493.     self.contents.draw_text(4, 0, 200, WLH, Vocab::Possession)
  494.     self.contents.font.color = normal_color
  495.     self.contents.draw_text(4, 0, 200, WLH, number, 2)
  496.     self.contents.font.size = 16 if KGC::ComposeItem::COMPACT_MATERIAL_LIST
  497.     mag = (KGC::ComposeItem::COMPACT_MATERIAL_LIST ? 1 : 2)
  498.     @item.compose_materials.each_with_index { |material, i|
  499.       y = WLH * (mag + i * mag)
  500.       draw_material_info(0, y, material)
  501.     }
  502.   end
  503.   #--------------------------------------------------------------------------
  504.   # ○ 素材情報を描画
  505.   #--------------------------------------------------------------------------
  506.   def draw_material_info(x, y, material)
  507.     m_item = material.item
  508.     return if m_item == nil
  509.     number = $game_party.item_number(m_item)
  510.     enabled = (number > 0 && number >= material.number)
  511.     draw_item_name(m_item, x, y, enabled)
  512.     if KGC::ComposeItem::COMPACT_MATERIAL_LIST
  513.       m_number = (material.number == 0 ? "-" : sprintf("%d", material.number))
  514.       self.contents.draw_text(x, y, width - 32, WLH,
  515.         sprintf("%s/%d", m_number, number), 2)
  516.     else
  517.       m_number = (material.number == 0 ? "-" : sprintf("%2d", material.number))
  518.       self.contents.draw_text(x, y + WLH, width - 32, WLH,
  519.         sprintf("%2s/%2d", m_number, number), 2)
  520.     end
  521.   end
  522. end

  523. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  524. #==============================================================================
  525. # ■ Scene_Map
  526. #==============================================================================

  527. class Scene_Map < Scene_Base
  528.   #--------------------------------------------------------------------------
  529.   # ● ショップ画面への切り替え
  530.   #--------------------------------------------------------------------------
  531.   alias call_shop_KGC_ComposeItem call_shop
  532.   def call_shop
  533.     # 合成画面を呼び出した場合
  534.     if $game_switches[KGC::ComposeItem::COMPOSE_CALL_SWITCH]
  535.       # 合成画面に移行
  536.       $game_temp.next_scene = nil
  537.       $game_switches[KGC::ComposeItem::COMPOSE_CALL_SWITCH] = false
  538.       $scene = Scene_ComposeItem.new
  539.     else
  540.       call_shop_KGC_ComposeItem
  541.     end
  542.   end
  543. end

  544. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  545. #==============================================================================
  546. # □ Scene_ComposeItem
  547. #------------------------------------------------------------------------------
  548. #  合成画面の処理を行うクラスです。
  549. #==============================================================================

  550. class Scene_ComposeItem < Scene_Shop
  551.   #--------------------------------------------------------------------------
  552.   # ● 開始処理
  553.   #--------------------------------------------------------------------------
  554.   def start
  555.     super
  556.     # コマンドウィンドウ非表示
  557.     if KGC::ComposeItem::HIDE_COMMAND_WINDOW
  558.       @command_window.visible = false
  559.       @gold_window.y = Graphics.height - @gold_window.height
  560.       @gold_window.z = @status_window.z + 100
  561.       @gold_window.visible = !KGC::ComposeItem::HIDE_GOLD_WINDOW

  562.       @dummy_window.y = @command_window.y

  563.       @dummy_window.height += @command_window.height
  564.     end

  565.     # [Scene_Shop] 再利用のため、合成リストに @buy_window を使用
  566.     @buy_window.dispose
  567.     @buy_window = Window_ComposeItem.new(0, @dummy_window.y)
  568.     @buy_window.height = @dummy_window.height
  569.     @buy_window.active = false
  570.     @buy_window.visible = false
  571.     @buy_window.help_window = @help_window

  572.     # その他のウィンドウを再構成
  573.     @number_window.dispose
  574.     @number_window = Window_ComposeNumber.new(0, @buy_window.y)
  575.     @number_window.height = @buy_window.height
  576.     @number_window.create_contents
  577.     @number_window.active = false
  578.     @number_window.visible = false

  579.     @status_window.dispose
  580.     @status_window = Window_ComposeStatus.new(@buy_window.width, @buy_window.y)
  581.     @status_window.height = @buy_window.height
  582.     @status_window.create_contents
  583.     @status_window.visible = false

  584.     # コマンドウィンドウ非表示の場合、合成ウィンドウに切り替え
  585.     if KGC::ComposeItem::HIDE_COMMAND_WINDOW
  586.       @command_window.active = false
  587.       @dummy_window.visible = false
  588.       @buy_window.active = true
  589.       @buy_window.visible = true
  590.       @buy_window.update_help
  591.       @status_window.visible = true
  592.       @status_window.item = @buy_window.item
  593.     end
  594.   end
  595.   #--------------------------------------------------------------------------
  596.   # ● コマンドウィンドウの作成
  597.   #--------------------------------------------------------------------------
  598.   def create_command_window
  599.     s1 = Vocab::ComposeItem
  600.     s2 = Vocab::ShopSell
  601.     s3 = Vocab::ShopCancel
  602.     @command_window = Window_Command.new(384, [s1, s2, s3], 3)
  603.     @command_window.y = 56
  604.     if $game_temp.shop_purchase_only
  605.       @command_window.draw_item(1, false)
  606.     end
  607.   end
  608.   #--------------------------------------------------------------------------
  609.   # ● フレーム更新
  610.   #--------------------------------------------------------------------------
  611.   def update
  612.     super
  613.     if KGC::ComposeItem::SWITCH_INFO_BUTTON != nil &&
  614.         Input.trigger?(KGC::ComposeItem::SWITCH_INFO_BUTTON)
  615.       Sound.play_cursor
  616.       @status_window.change_mode
  617.     end
  618.   end
  619.   #--------------------------------------------------------------------------
  620.   # ● 購入アイテム選択の更新
  621.   #--------------------------------------------------------------------------
  622.   def update_buy_selection
  623.     # コマンドウィンドウ非表示で B ボタンが押された場合
  624.     if KGC::ComposeItem::HIDE_COMMAND_WINDOW && Input.trigger?(Input::B)
  625.       Sound.play_cancel
  626.       $scene = Scene_Map.new
  627.       return
  628.     end

  629.     @status_window.item = @buy_window.item
  630.     if Input.trigger?(Input::C)
  631.       @item = @buy_window.item
  632.       # アイテムが無効なら選択不可
  633.       if @item == nil
  634.         Sound.play_buzzer
  635.         return
  636.       end

  637.       # 合成不可能 or 限界数まで所持している場合は選択不可
  638.       number = $game_party.item_number(@item)
  639.       limit = ($imported["LimitBreak"] ? @item.number_limit : 99)
  640.       if !$game_party.item_can_compose?(@item) || number == limit
  641.         Sound.play_buzzer
  642.         return
  643.       end

  644.       # 個数入力に切り替え
  645.       Sound.play_decision
  646.       max = $game_party.number_of_composable(@item)
  647.       max = [max, limit - number].min
  648.       @buy_window.active = false
  649.       @buy_window.visible = false
  650.       @number_window.set(@item, max, @item.compose_cost)
  651.       @number_window.active = true
  652.       @number_window.visible = true
  653.       return
  654.     end

  655.     super
  656.   end
  657.   #--------------------------------------------------------------------------
  658.   # ● 個数入力の決定
  659.   #--------------------------------------------------------------------------
  660.   def decide_number_input
  661.     if @command_window.index != 0  # 「合成する」以外
  662.       super
  663.       return
  664.     end

  665.     Sound.play_shop
  666.     @number_window.active = false
  667.     @number_window.visible = false
  668.     # 合成処理
  669.     operation_compose
  670.     @gold_window.refresh
  671.     @buy_window.refresh
  672.     @status_window.refresh
  673.     @buy_window.active = true
  674.     @buy_window.visible = true
  675.   end
  676.   #--------------------------------------------------------------------------
  677.   # ○ 合成の処理
  678.   #--------------------------------------------------------------------------
  679.   def operation_compose
  680.     $game_party.lose_gold(@number_window.number * @item.compose_cost)
  681.     $game_party.gain_item(@item, @number_window.number)
  682.     # 素材を減らす
  683.     @item.compose_materials.each { |material|
  684.       $game_party.lose_item(material.item,
  685.         material.number * @number_window.number)
  686.     }
  687.     # 合成済みにする
  688.     $game_party.set_item_composed(@item)
  689.   end
  690. end
复制代码

主要部份已经翻译好了,LZ看看吧。
系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~

《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

Lv3.寻梦者

贝鲁耶的依叶森林
持镰的苍色水野

梦石
2
星屑
659
在线时间
563 小时
注册时间
2007-4-8
帖子
1304

第4届短篇游戏比赛季军短篇八RM组亚军

5
 楼主| 发表于 2008-3-28 04:53:30 | 只看该作者
MS那个问题还是会出现,不过先谢谢了
水野的主页><
头像来自于游戏《龙背上的骑兵3》主角——Zero
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
289
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

6
发表于 2008-3-28 04:55:15 | 只看该作者
以下引用水野·迪尔于2008-3-27 20:53:30的发言:
<br><script language="javascript">
<!--
strCont="MS那个问题还是会出现,不过先谢谢了";
document.write(ubb.spbShowTopic(strCont,1));
//-->
</script>MS那个问题还是会出现,不过先谢谢了

嘛,我都是没出现过这种情况。

《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

Lv3.寻梦者

贝鲁耶的依叶森林
持镰的苍色水野

梦石
2
星屑
659
在线时间
563 小时
注册时间
2007-4-8
帖子
1304

第4届短篇游戏比赛季军短篇八RM组亚军

7
 楼主| 发表于 2008-3-28 04:56:20 | 只看该作者
估计……是脚本冲突……
水野的主页><
头像来自于游戏《龙背上的骑兵3》主角——Zero
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-24 01:06

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表