Project1

标题: 帮忙译脚本~ [打印本页]

作者: 宇凌风    时间: 2008-8-31 04:56
标题: 帮忙译脚本~
谁帮我译一下这个脚本(贯穿1、2楼)
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ アイテム合成 - KGC_ComposeItem ◆ VX ◆
  3. #_/    ◇ Last update : 2008/08/01 ◇
  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[16] = [800, "W:10", "I:16,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.   #  true  : XP 版と同様のスタイル
  49.   #  false : VX 仕様
  50.   HIDE_COMMAND_WINDOW   = false
  51.   # ◆ 所持金ウィンドウを表示しない
  52.   #  HIDE_COMMAND_WINDOW が false のときは常に表示します。
  53.   HIDE_GOLD_WINDOW      = false
  54.   # ◆ 合成費用が 0 の場合、費用を表示しない
  55.   HIDE_ZERO_COST        = true

  56.   # ◆ 合成済みのレシピは常に表示する
  57.   #  true  : 一度でも合成したことがあれば常にリストに表示
  58.   #  false : 合成したことがあっても↓の条件に従う
  59.   SHOW_COMPOSED_RECIPE      = true
  60.   # ◆ 合成費用不足のレシピを隠す
  61.   #  true  : 費用不足ならリストに表示しない
  62.   #  false : 費用不足でも表示
  63.   HIDE_SHORTAGE_COST        = false
  64.   # ◆ 合成素材不足のレシピを隠す
  65.   #  true  : 素材不足ならリストに表示しない
  66.   #  false : 素材不足でも表示
  67.   HIDE_SHORTAGE_MATERIAL    = true
  68.   # ◆ 判明 or 解禁していないレシピは合成不可
  69.   #  true  : 判明 or 解禁するまで合成不可
  70.   #  false : 素材さえあれば合成可能
  71.   NEED_RECIPE_OPEN_OR_CLEAR = true

  72.   # ◆ 合成したことがないレシピのアイテム名を隠す
  73.   MASK_UNKNOWN_RECIPE_NAME = true
  74.   # ◆ 合成したことがないレシピに表示する名前
  75.   #  1文字だけ指定すると、アイテム名と同じ文字数に拡張されます。
  76.   UNKNOWN_NAME_MASK        = "?"
  77.   # ◆ 合成したことがないレシピのヘルプを隠す
  78.   HIDE_UNKNOWN_RECIPE_HELP = true
  79.   # ◆ 合成したことがないレシピに表示するヘルプ
  80.   UNKNOWN_RECIPE_HELP      = "合成したことがありません。"
  81. end
  82. end

  83. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  84. $imported = {} if $imported == nil
  85. $imported["ComposeItem"] = true

  86. module KGC::ComposeItem
  87.   module Regexp
  88.     # レシピ
  89.     RECIPE = /([IWA])\s*:\s*(\d+)(\s*,\s*\d+)?/i
  90.   end
  91. end

  92. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  93. #==============================================================================
  94. # □ KGC::Commands
  95. #==============================================================================

  96. module KGC
  97. module Commands
  98.   module_function
  99.   #--------------------------------------------------------------------------
  100.   # ○ レシピ判明フラグを設定
  101.   #     type    : レシピのタイプ (0..アイテム  1..武器  2..防具)
  102.   #     id      : アイテムの ID
  103.   #     enabled : true..判明  false..未判明
  104.   #--------------------------------------------------------------------------
  105.   def set_recipe_cleared(type, id, enabled = true)
  106.     item = nil
  107.     case type
  108.     when 0, :item    # アイテム
  109.       item = $data_items[id]
  110.     when 1, :weapon  # 武器
  111.       item = $data_weapons[id]
  112.     when 2, :armor   # 防具
  113.       item = $data_armors[id]
  114.     end

  115.     $game_party.set_recipe_cleared(item, enabled) if item != nil
  116.   end
  117.   #--------------------------------------------------------------------------
  118.   # ○ レシピ解禁フラグを設定
  119.   #     type    : レシピのタイプ (0..アイテム  1..武器  2..防具)
  120.   #     id      : アイテムの ID
  121.   #     enabled : true..解禁  false..未解禁
  122.   #--------------------------------------------------------------------------
  123.   def set_recipe_opened(type, id, enabled = true)
  124.     item = nil
  125.     case type
  126.     when 0, :item    # アイテム
  127.       item = $data_items[id]
  128.     when 1, :weapon  # 武器
  129.       item = $data_weapons[id]
  130.     when 2, :armor   # 防具
  131.       item = $data_armors[id]
  132.     end

  133.     $game_party.set_recipe_opened(item, enabled) if item != nil
  134.   end
  135. end
  136. end

  137. class Game_Interpreter
  138.   include KGC::Commands
  139. end

  140. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  141. #==============================================================================
  142. # ■ Vocab
  143. #==============================================================================

  144. module Vocab
  145.   # 合成画面
  146.   ComposeItem = KGC::ComposeItem::VOCAB_COMPOSE_ITEM
  147. end

  148. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  149. #==============================================================================
  150. # ■ RPG::BaseItem
  151. #==============================================================================

  152. class RPG::BaseItem
  153.   #--------------------------------------------------------------------------
  154.   # ○ クラス変数
  155.   #--------------------------------------------------------------------------
  156.   @@__masked_name =
  157.     KGC::ComposeItem::UNKNOWN_NAME_MASK  # マスク名
  158.   @@__expand_masked_name = false         # マスク名拡張表示フラグ

  159.   if @@__masked_name != nil
  160.     @@__expand_masked_name = (@@__masked_name.scan(/./).size == 1)
  161.   end
  162.   #--------------------------------------------------------------------------
  163.   # ○ アイテム合成のキャッシュ生成
  164.   #--------------------------------------------------------------------------
  165.   def create_compose_item_cache
  166.     @__compose_cost = 0
  167.     @__compose_materials = []

  168.     # レシピ取得
  169.     recipe = nil
  170.     case self
  171.     when RPG::Item    # アイテム
  172.       recipe = KGC::ComposeItem::RECIPE_ITEM[self.id]
  173.     when RPG::Weapon  # 武器
  174.       recipe = KGC::ComposeItem::RECIPE_WEAPON[self.id]
  175.     when RPG::Armor   # 防具
  176.       recipe = KGC::ComposeItem::RECIPE_ARMOR[self.id]
  177.     end
  178.     return if recipe == nil
  179.     recipe = recipe.dup

  180.     @__compose_cost = recipe.shift
  181.     # 素材リストを作成
  182.     recipe.each { |r|
  183.       if r =~ KGC::ComposeItem::Regexp::RECIPE
  184.         material = Game_ComposeMaterial.new
  185.         material.kind = $1.upcase                    # 素材の種類を取得
  186.         material.id = $2.to_i                        # 素材の ID を取得
  187.         if $3 != nil
  188.           material.number = [$3[/\d+/].to_i, 0].max  # 必要数を取得
  189.         end
  190.         @__compose_materials << material
  191.       end
  192.     }
  193.   end
  194.   #--------------------------------------------------------------------------
  195.   # ○ マスク名
  196.   #--------------------------------------------------------------------------
  197.   def masked_name
  198.     if KGC::ComposeItem::MASK_UNKNOWN_RECIPE_NAME
  199.       if @@__expand_masked_name
  200.         # マスク名を拡張して表示
  201.         return @@__masked_name * self.name.scan(/./).size
  202.       else
  203.         return @@__masked_name
  204.       end
  205.     else
  206.       return self.name
  207.     end
  208.   end
  209.   #--------------------------------------------------------------------------
  210.   # ○ 合成用費用
  211.   #--------------------------------------------------------------------------
  212.   def compose_cost
  213.     create_compose_item_cache if @__compose_cost == nil
  214.     return @__compose_cost
  215.   end
  216.   #--------------------------------------------------------------------------
  217.   # ○ 合成用素材リスト
  218.   #--------------------------------------------------------------------------
  219.   def compose_materials
  220.     create_compose_item_cache if @__compose_materials == nil
  221.     return @__compose_materials
  222.   end
  223.   #--------------------------------------------------------------------------
  224.   # ○ 合成アイテムか
  225.   #--------------------------------------------------------------------------
  226.   def is_compose?
  227.     return !compose_materials.empty?
  228.   end
  229. end

  230. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  231. #==============================================================================
  232. # ■ Game_Party
  233. #==============================================================================

  234. class Game_Party < Game_Unit
  235.   #--------------------------------------------------------------------------
  236.   # ○ 合成済みフラグをクリア
  237.   #--------------------------------------------------------------------------
  238.   def clear_composed_flag
  239.     @item_composed = {}
  240.     @weapon_composed = {}
  241.     @armor_composed = {}
  242.   end
  243.   #--------------------------------------------------------------------------
  244.   # ○ レシピ判明フラグをクリア
  245.   #--------------------------------------------------------------------------
  246.   def clear_recipe_cleared_flag
  247.     @item_recipe_cleared = {}
  248.     @weapon_recipe_cleared = {}
  249.     @armor_recipe_cleared = {}
  250.   end
  251.   #--------------------------------------------------------------------------
  252.   # ○ レシピ解禁フラグをクリア
  253.   #--------------------------------------------------------------------------
  254.   def clear_recipe_opened_flag
  255.     @item_recipe_opened = {}
  256.     @weapon_recipe_opened = {}
  257.     @armor_recipe_opened = {}
  258.   end
  259.   #--------------------------------------------------------------------------
  260.   # ○ アイテムの合成済みフラグを設定
  261.   #     item : アイテム
  262.   #     flag : true..合成済み  false..未合成
  263.   #--------------------------------------------------------------------------
  264.   def set_item_composed(item, flag = true)
  265.     return false unless item.is_a?(RPG::BaseItem)  # アイテム以外
  266.     return false unless item.is_compose?           # 合成アイテム以外

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

  269.     # 合成済みフラグをセット
  270.     case item
  271.     when RPG::Item    # アイテム
  272.       @item_composed[item.id] = flag
  273.     when RPG::Weapon  # 武器
  274.       @weapon_composed[item.id] = flag
  275.     when RPG::Armor   # 防具
  276.       @armor_composed[item.id] = flag
  277.     end
  278.   end
  279.   #--------------------------------------------------------------------------
  280.   # ○ アイテムの合成済み判定
  281.   #     item : アイテム
  282.   #--------------------------------------------------------------------------
  283.   def item_composed?(item)
  284.     return false unless item.is_a?(RPG::BaseItem)  # アイテム以外
  285.     return false unless item.is_compose?           # 合成アイテム以外

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

  288.     # 合成済み判定
  289.     case item
  290.     when RPG::Item    # アイテム
  291.       return @item_composed[item.id]
  292.     when RPG::Weapon  # 武器
  293.       return @weapon_composed[item.id]
  294.     when RPG::Armor   # 防具
  295.       return @armor_composed[item.id]
  296.     end
  297.     return false
  298.   end
  299.   #--------------------------------------------------------------------------
  300.   # ○ アイテムの合成済みフラグを設定
  301.   #     item : アイテム
  302.   #     flag : true..合成済み  false..未合成
  303.   #--------------------------------------------------------------------------
  304.   def set_item_composed(item, flag = true)
  305.     return false unless item.is_a?(RPG::BaseItem)  # アイテム以外
  306.     return false unless item.is_compose?           # 合成アイテム以外

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

  309.     # 合成済みフラグをセット
  310.     case item
  311.     when RPG::Item    # アイテム
  312.       @item_composed[item.id] = flag
  313.     when RPG::Weapon  # 武器
  314.       @weapon_composed[item.id] = flag
  315.     when RPG::Armor   # 防具
  316.       @armor_composed[item.id] = flag
  317.     end
  318.   end
  319.   #--------------------------------------------------------------------------
  320.   # ○ レシピ判明判定
  321.   #     item : アイテム
  322.   #--------------------------------------------------------------------------
  323.   def recipe_cleared?(item)
  324.     return false unless item.is_a?(RPG::BaseItem)  # アイテム以外
  325.     return false unless item.is_compose?           # 合成アイテム以外

  326.     # 判明フラグを格納するハッシュを作成
  327.     clear_recipe_cleared_flag if @item_recipe_cleared == nil

  328.     # 判定
  329.     case item
  330.     when RPG::Item    # アイテム
  331.       return @item_recipe_cleared[item.id]
  332.     when RPG::Weapon  # 武器
  333.       return @weapon_recipe_cleared[item.id]
  334.     when RPG::Armor   # 防具
  335.       return @armor_recipe_cleared[item.id]
  336.     end
  337.     return false
  338.   end
  339.   #--------------------------------------------------------------------------
  340.   # ○ アイテムの判明フラグを設定
  341.   #     item : アイテム
  342.   #     flag : true..判明  false..未判明
  343.   #--------------------------------------------------------------------------
  344.   def set_recipe_cleared(item, flag = true)
  345.     return false unless item.is_a?(RPG::BaseItem)  # アイテム以外
  346.     return false unless item.is_compose?           # 合成アイテム以外

  347.     # 判明フラグを格納するハッシュを作成
  348.     clear_recipe_cleared_flag if @item_recipe_cleared == nil

  349.     # 判明フラグをセット
  350.     case item
  351.     when RPG::Item    # アイテム
  352.       @item_recipe_cleared[item.id] = flag
  353.     when RPG::Weapon  # 武器
  354.       @weapon_recipe_cleared[item.id] = flag
  355.     when RPG::Armor   # 防具
  356.       @armor_recipe_cleared[item.id] = flag
  357.     end
  358.   end
  359.   #--------------------------------------------------------------------------
  360.   # ○ レシピ解禁判定
  361.   #     item : アイテム
  362.   #--------------------------------------------------------------------------
  363.   def recipe_opened?(item)
  364.     return false unless item.is_a?(RPG::BaseItem)  # アイテム以外
  365.     return false unless item.is_compose?           # 合成アイテム以外

  366.     # 解禁フラグを格納するハッシュを作成
  367.     clear_recipe_opened_flag if @item_recipe_opened == nil

  368.     # 判定
  369.     case item
  370.     when RPG::Item    # アイテム
  371.       return @item_recipe_opened[item.id]
  372.     when RPG::Weapon  # 武器
  373.       return @weapon_recipe_opened[item.id]
  374.     when RPG::Armor   # 防具
  375.       return @armor_recipe_opened[item.id]
  376.     end
  377.     return false
  378.   end
  379.   #--------------------------------------------------------------------------
  380.   # ○ アイテムの解禁フラグを設定
  381.   #     item : アイテム
  382.   #     flag : true..解禁  false..未解禁
  383.   #--------------------------------------------------------------------------
  384.   def set_recipe_opened(item, flag = true)
  385.     return false unless item.is_a?(RPG::BaseItem)  # アイテム以外
  386.     return false unless item.is_compose?           # 合成アイテム以外

  387.     # 解禁フラグを格納するハッシュを作成
  388.     clear_recipe_opened_flag if @item_recipe_opened == nil

  389.     # 解禁フラグをセット
  390.     case item
  391.     when RPG::Item    # アイテム
  392.       @item_recipe_opened[item.id] = flag
  393.     when RPG::Weapon  # 武器
  394.       @weapon_recipe_opened[item.id] = flag
  395.     when RPG::Armor   # 防具
  396.       @armor_recipe_opened[item.id] = flag
  397.     end
  398.   end
  399.   #--------------------------------------------------------------------------
  400.   # ○ アイテムの合成可能判定
  401.   #     item : アイテム
  402.   #--------------------------------------------------------------------------
  403.   def item_can_compose?(item)
  404.     return false unless item_compose_cost_satisfy?(item)
  405.     return false unless item_compose_material_satisfy?(item)

  406.     return true
  407.   end
  408.   #--------------------------------------------------------------------------
  409.   # ○ 合成アイテムの資金充足判定
  410.   #     item : アイテム
  411.   #--------------------------------------------------------------------------
  412.   def item_compose_cost_satisfy?(item)
  413.     return false unless item.is_a?(RPG::BaseItem)  # アイテム以外
  414.     return false unless item.is_compose?           # 合成アイテム以外

  415.     return (gold >= item.compose_cost)
  416.   end
  417.   #--------------------------------------------------------------------------
  418.   # ○ 合成アイテムの素材充足判定
  419.   #     item : アイテム
  420.   #--------------------------------------------------------------------------
  421.   def item_compose_material_satisfy?(item)
  422.     return false unless item.is_a?(RPG::BaseItem)  # アイテム以外
  423.     return false unless item.is_compose?           # 合成アイテム以外

  424.     item.compose_materials.each { |material|
  425.       num = item_number(material.item)
  426.       return false if num < material.number || num == 0  # 素材不足
  427.     }
  428.     return true
  429.   end
  430.   #--------------------------------------------------------------------------
  431.   # ○ アイテムの合成可能数を取得
  432.   #     item : アイテム
  433.   #--------------------------------------------------------------------------
  434.   def number_of_composable(item)
  435.     return 0 unless item.is_a?(RPG::BaseItem)  # アイテム以外
  436.     return 0 unless item.is_compose?           # 合成アイテム以外

  437.     number = ($imported["LimitBreak"] ? item.number_limit : 99)
  438.     if item.compose_cost > 0
  439.       number = [number, gold / item.compose_cost].min
  440.     end
  441.     # 素材数判定
  442.     item.compose_materials.each { |material|
  443.       next if material.number == 0  # 必要数 0 は無視
  444.       n = item_number(material.item) / material.number
  445.       number = [number, n].min
  446.     }
  447.     return number
  448.   end
  449. end

  450. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  451. #==============================================================================
  452. # □ Game_ComposeMaterial
  453. #------------------------------------------------------------------------------
  454. #   合成素材の情報を格納するクラスです。
  455. #==============================================================================

  456. class Game_ComposeMaterial
  457.   #--------------------------------------------------------------------------
  458.   # ○ 公開インスタンス変数
  459.   #--------------------------------------------------------------------------
  460.   attr_accessor :kind                     # アイテムの種類 (/[IWA]/)
  461.   attr_accessor :id                       # アイテムの ID
  462.   attr_accessor :number                   # 必要数
  463.   #--------------------------------------------------------------------------
  464.   # ○ オブジェクト初期化
  465.   #--------------------------------------------------------------------------
  466.   def initialize
  467.     @kind = "I"
  468.     @id = 0
  469.     @number = 1
  470.   end
  471.   #--------------------------------------------------------------------------
  472.   # ○ アイテム取得
  473.   #--------------------------------------------------------------------------
  474.   def item
  475.     case @kind
  476.     when "I"  # アイテム
  477.       return $data_items[@id]
  478.     when "W"  # 武器
  479.       return $data_weapons[@id]
  480.     when "A"  # 防具
  481.       return $data_armors[@id]
  482.     else
  483.       return nil
  484.     end
  485.   end
  486. end

  487. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  488. #==============================================================================
  489. # ■ Window_Base
  490. #==============================================================================

  491. class Window_Base < Window
  492.   #--------------------------------------------------------------------------
  493.   # ○ 合成アイテム名の描画
  494.   #     item    : アイテム (スキル、武器、防具でも可)
  495.   #     x       : 描画先 X 座標
  496.   #     y       : 描画先 Y 座標
  497.   #     enabled : 有効フラグ。false のとき半透明で描画
  498.   #--------------------------------------------------------------------------
  499.   def draw_compose_item_name(item, x, y, enabled = true)
  500.     return if item == nil

  501.     draw_icon(item.icon_index, x, y, enabled)
  502.     self.contents.font.color = normal_color
  503.     self.contents.font.color.alpha = enabled ? 255 : 128
  504.     masked = !$game_party.item_composed?(item) &&
  505.       !$game_party.recipe_cleared?(item)
  506.     self.contents.draw_text(x + 24, y, 172, WLH,
  507.       masked ? item.masked_name : item.name)
  508.   end
  509. end

  510. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  511. #==============================================================================
  512. # □ Window_ComposeNumber
  513. #------------------------------------------------------------------------------
  514. #   合成画面で、合成するアイテムの個数を入力するウィンドウです。
  515. #==============================================================================

  516. class Window_ComposeNumber < Window_ShopNumber
  517.   #--------------------------------------------------------------------------
  518.   # ○ 公開インスタンス変数
  519.   #--------------------------------------------------------------------------
  520.   attr_accessor :sell_flag                # 売却フラグ
  521.   #--------------------------------------------------------------------------
  522.   # ● オブジェクト初期化
  523.   #     x : ウィンドウの X 座標
  524.   #     y : ウィンドウの Y 座標
  525.   #--------------------------------------------------------------------------
  526.   alias initialize_KGC_ComposeItem initialize unless $@
  527.   def initialize(x, y)
  528.     @sell_flag = false

  529.     initialize_KGC_ComposeItem(x, y)
  530.   end
  531.   #--------------------------------------------------------------------------
  532.   # ● リフレッシュ
  533.   #--------------------------------------------------------------------------
  534.   def refresh
  535.     y = 96
  536.     self.contents.clear
  537.     if @sell_flag
  538.       draw_item_name(@item, 0, y)
  539.     else
  540.       draw_compose_item_name(@item, 0, y)
  541.     end
  542.     self.contents.font.color = normal_color
  543.     self.contents.draw_text(212, y, 20, WLH, "×")
  544.     self.contents.draw_text(248, y, 20, WLH, @number, 2)
  545.     self.cursor_rect.set(244, y, 28, WLH)
  546.     if !KGC::ComposeItem::HIDE_ZERO_COST || @price > 0
  547.       draw_currency_value(@price * @number, 4, y + WLH * 2, 264)
  548.     end
  549.   end
  550. end

  551. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  552. #==============================================================================
  553. # □ Window_ComposeItem
  554. #------------------------------------------------------------------------------
  555. #   合成画面で、合成できる商品の一覧を表示するウィンドウです。
  556. #==============================================================================

  557. class Window_ComposeItem < Window_ShopBuy
  558.   #--------------------------------------------------------------------------
  559.   # ● リフレッシュ
  560.   #--------------------------------------------------------------------------
  561.   def refresh
  562.     @data = []
  563.     for goods_item in @shop_goods
  564.       case goods_item[0]
  565.       when 0
  566.         item = $data_items[goods_item[1]]
  567.       when 1
  568.         item = $data_weapons[goods_item[1]]
  569.       when 2
  570.         item = $data_armors[goods_item[1]]
  571.       end
  572.       # 合成アイテムのみ追加
  573.       @data.push(item) if include?(item)
  574.     end
  575.     @item_max = @data.size
  576.     create_contents
  577.     for i in 0...@item_max
  578.       draw_item(i)
  579.     end
  580.   end

复制代码
[LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: 宇凌风    时间: 2008-8-31 04:56
还有,继续
  1.   #--------------------------------------------------------------------------
  2.   # ○ アイテムをリストに含めるかどうか
  3.   #     item : アイテム
  4.   #--------------------------------------------------------------------------
  5.   def include?(item)
  6.     return false if item == nil           # アイテムが nil なら含めない
  7.     return false unless item.is_compose?  # 合成アイテム以外は含めない

  8.     # 合成済みなら表示
  9.     if KGC::ComposeItem::SHOW_COMPOSED_RECIPE
  10.       return true if $game_party.item_composed?(item)
  11.     end
  12.     # 判明 or 解禁済みなら表示
  13.     if $game_party.recipe_cleared?(item) || $game_party.recipe_opened?(item)
  14.       return true
  15.     end
  16.     # 費用不足なら隠す
  17.     if KGC::ComposeItem::HIDE_SHORTAGE_COST
  18.       return false unless $game_party.item_compose_cost_satisfy?(item)
  19.     end
  20.     # 素材不足なら隠す
  21.     if KGC::ComposeItem::HIDE_SHORTAGE_MATERIAL
  22.       return false unless $game_party.item_compose_material_satisfy?(item)
  23.     end

  24.     if KGC::ComposeItem::NEED_RECIPE_OPEN_OR_CLEAR
  25.       # 判明 or 解禁していない
  26.       unless $game_party.recipe_cleared?(item) ||
  27.           $game_party.recipe_opened?(item)
  28.         return false
  29.       end
  30.     end

  31.     return true
  32.   end
  33.   #--------------------------------------------------------------------------
  34.   # ○ アイテムを許可状態で表示するかどうか
  35.   #     item : アイテム
  36.   #--------------------------------------------------------------------------
  37.   def enable?(item)
  38.     return $game_party.item_can_compose?(item)
  39.   end
  40.   #--------------------------------------------------------------------------
  41.   # ● 項目の描画
  42.   #     index : 項目番号
  43.   #--------------------------------------------------------------------------
  44.   def draw_item(index)
  45.     item = @data[index]
  46.     number = $game_party.item_number(item)
  47.     limit = ($imported["LimitBreak"] ? item.number_limit : 99)
  48.     rect = item_rect(index)
  49.     self.contents.clear_rect(rect)
  50.     draw_compose_item_name(item, rect.x, rect.y, enable?(item))
  51.     # 費用を描画
  52.     if !KGC::ComposeItem::HIDE_ZERO_COST || item.compose_cost > 0
  53.       rect.width -= 4
  54.       self.contents.draw_text(rect, item.compose_cost, 2)
  55.     end
  56.   end

  57.   if KGC::ComposeItem::HIDE_UNKNOWN_RECIPE_HELP
  58.   #--------------------------------------------------------------------------
  59.   # ● ヘルプテキスト更新
  60.   #--------------------------------------------------------------------------
  61.   def update_help
  62.     item = (index >= 0 ? @data[index] : nil)
  63.     if item == nil || $game_party.item_composed?(item) ||
  64.         $game_party.recipe_cleared?(item)
  65.       # アイテムが nil or 合成済み or 判明済みなら [Window_ShopBuy] に任せる
  66.       super
  67.     else
  68.       @help_window.set_text(KGC::ComposeItem::UNKNOWN_RECIPE_HELP)
  69.     end
  70.   end
  71.   end
  72. end

  73. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  74. #==============================================================================
  75. # □ Window_ComposeStatus
  76. #------------------------------------------------------------------------------
  77. #  合成画面で、素材の所持数や必要数を表示するウィンドウです。
  78. #==============================================================================

  79. class Window_ComposeStatus < Window_ShopStatus
  80.   #--------------------------------------------------------------------------
  81.   # ○ 表示モード
  82.   #--------------------------------------------------------------------------
  83.   MODE_MATERIAL = 0  # 素材リスト
  84.   MODE_STATUS   = 1  # パーティのステータス
  85.   #--------------------------------------------------------------------------
  86.   # ● オブジェクト初期化
  87.   #     x : ウィンドウの X 座標
  88.   #     y : ウィンドウの Y 座標
  89.   #--------------------------------------------------------------------------
  90.   def initialize(x, y)
  91.     @mode = MODE_MATERIAL
  92.     super(x, y)
  93.   end
  94.   #--------------------------------------------------------------------------
  95.   # ○ モード変更
  96.   #--------------------------------------------------------------------------
  97.   def change_mode
  98.     case @mode
  99.     when MODE_MATERIAL
  100.       @mode = MODE_STATUS
  101.     when MODE_STATUS
  102.       @mode = MODE_MATERIAL
  103.     end
  104.     self.oy = 0
  105.     refresh
  106.   end
  107.   #--------------------------------------------------------------------------
  108.   # ● ウィンドウ内容の作成
  109.   #--------------------------------------------------------------------------
  110.   def create_contents
  111.     if @mode == MODE_STATUS
  112.       super
  113.       return
  114.     end

  115.     self.contents.dispose
  116.     ch = height - 32
  117.     if @item != nil
  118.       mag = (KGC::ComposeItem::COMPACT_MATERIAL_LIST ? 1 : 2)
  119.       ch = [ch, WLH * (mag + @item.compose_materials.size * mag)].max
  120.     end
  121.     self.contents = Bitmap.new(width - 32, ch)
  122.   end
  123.   #--------------------------------------------------------------------------
  124.   # ● リフレッシュ
  125.   #--------------------------------------------------------------------------
  126.   def refresh
  127.     create_contents
  128.     self.contents.font.size = Font.default_size
  129.     case @mode
  130.     when MODE_MATERIAL
  131.       draw_material_list
  132.     when MODE_STATUS
  133.       super
  134.     end
  135.   end
  136.   #--------------------------------------------------------------------------
  137.   # ○ 素材リストを描画
  138.   #--------------------------------------------------------------------------
  139.   def draw_material_list
  140.     return if @item == nil
  141.     number = $game_party.item_number(@item)
  142.     self.contents.font.color = system_color
  143.     self.contents.draw_text(4, 0, 200, WLH, Vocab::Possession)
  144.     self.contents.font.color = normal_color
  145.     self.contents.draw_text(4, 0, 200, WLH, number, 2)
  146.     self.contents.font.size = 16 if KGC::ComposeItem::COMPACT_MATERIAL_LIST
  147.     mag = (KGC::ComposeItem::COMPACT_MATERIAL_LIST ? 1 : 2)
  148.     @item.compose_materials.each_with_index { |material, i|
  149.       y = WLH * (mag + i * mag)
  150.       draw_material_info(0, y, material)
  151.     }
  152.   end
  153.   #--------------------------------------------------------------------------
  154.   # ○ 素材情報を描画
  155.   #--------------------------------------------------------------------------
  156.   def draw_material_info(x, y, material)
  157.     m_item = material.item
  158.     return if m_item == nil
  159.     number = $game_party.item_number(m_item)
  160.     enabled = (number > 0 && number >= material.number)
  161.     draw_item_name(m_item, x, y, enabled)
  162.     if KGC::ComposeItem::COMPACT_MATERIAL_LIST
  163.       m_number = (material.number == 0 ? "-" : sprintf("%d", material.number))
  164.       self.contents.draw_text(x, y, width - 32, WLH,
  165.         sprintf("%s/%d", m_number, number), 2)
  166.     else
  167.       m_number = (material.number == 0 ? "-" : sprintf("%2d", material.number))
  168.       self.contents.draw_text(x, y + WLH, width - 32, WLH,
  169.         sprintf("%2s/%2d", m_number, number), 2)
  170.     end
  171.   end
  172. end

  173. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  174. #==============================================================================
  175. # ■ Scene_Map
  176. #==============================================================================

  177. class Scene_Map < Scene_Base
  178.   #--------------------------------------------------------------------------
  179.   # ● ショップ画面への切り替え
  180.   #--------------------------------------------------------------------------
  181.   alias call_shop_KGC_ComposeItem call_shop
  182.   def call_shop
  183.     # 合成画面を呼び出した場合
  184.     if $game_switches[KGC::ComposeItem::COMPOSE_CALL_SWITCH]
  185.       # 合成画面に移行
  186.       $game_temp.next_scene = nil
  187.       $game_switches[KGC::ComposeItem::COMPOSE_CALL_SWITCH] = false
  188.       $scene = Scene_ComposeItem.new
  189.     else
  190.       call_shop_KGC_ComposeItem
  191.     end
  192.   end
  193. end

  194. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  195. #==============================================================================
  196. # □ Scene_ComposeItem
  197. #------------------------------------------------------------------------------
  198. #  合成画面の処理を行うクラスです。
  199. #==============================================================================

  200. class Scene_ComposeItem < Scene_Shop
  201.   #--------------------------------------------------------------------------
  202.   # ● 開始処理
  203.   #--------------------------------------------------------------------------
  204.   def start
  205.     super
  206.     # コマンドウィンドウ非表示
  207.     if KGC::ComposeItem::HIDE_COMMAND_WINDOW
  208.       @command_window.visible = false
  209.       @gold_window.y = Graphics.height - @gold_window.height
  210.       @gold_window.z = @status_window.z + 100
  211.       @gold_window.visible = !KGC::ComposeItem::HIDE_GOLD_WINDOW

  212.       @dummy_window.y = @command_window.y
  213.       @dummy_window.height += @command_window.height
  214.     end

  215.     # [Scene_Shop] 再利用のため、合成リストに @buy_window を使用
  216.     @buy_window.dispose
  217.     @buy_window = Window_ComposeItem.new(0, @dummy_window.y)
  218.     @buy_window.height = @dummy_window.height
  219.     @buy_window.active = false
  220.     @buy_window.visible = false
  221.     @buy_window.help_window = @help_window

  222.     # その他のウィンドウを再構成
  223.     @number_window.dispose
  224.     @number_window = Window_ComposeNumber.new(0, @buy_window.y)
  225.     @number_window.height = @buy_window.height
  226.     @number_window.create_contents
  227.     @number_window.active = false
  228.     @number_window.visible = false

  229.     @status_window.dispose
  230.     @status_window = Window_ComposeStatus.new(@buy_window.width, @buy_window.y)
  231.     @status_window.height = @buy_window.height
  232.     @status_window.create_contents
  233.     @status_window.visible = false

  234.     # コマンドウィンドウ非表示の場合、合成ウィンドウに切り替え
  235.     if KGC::ComposeItem::HIDE_COMMAND_WINDOW
  236.       @command_window.active = false
  237.       @dummy_window.visible = false
  238.       @buy_window.active = true
  239.       @buy_window.visible = true
  240.       @buy_window.update_help
  241.       @status_window.visible = true
  242.       @status_window.item = @buy_window.item
  243.     end
  244.   end
  245.   #--------------------------------------------------------------------------
  246.   # ● コマンドウィンドウの作成
  247.   #--------------------------------------------------------------------------
  248.   def create_command_window
  249.     s1 = Vocab::ComposeItem
  250.     s2 = Vocab::ShopSell
  251.     s3 = Vocab::ShopCancel
  252.     @command_window = Window_Command.new(384, [s1, s2, s3], 3)
  253.     @command_window.y = 56
  254.     if $game_temp.shop_purchase_only
  255.       @command_window.draw_item(1, false)
  256.     end
  257.   end
  258.   #--------------------------------------------------------------------------
  259.   # ● フレーム更新
  260.   #--------------------------------------------------------------------------
  261.   def update
  262.     super
  263.     if KGC::ComposeItem::SWITCH_INFO_BUTTON != nil &&
  264.         Input.trigger?(KGC::ComposeItem::SWITCH_INFO_BUTTON)
  265.       Sound.play_cursor
  266.       @status_window.change_mode
  267.     end
  268.   end
  269.   #--------------------------------------------------------------------------
  270.   # ● 購入アイテム選択の更新
  271.   #--------------------------------------------------------------------------
  272.   def update_buy_selection
  273.     @number_window.sell_flag = false

  274.     # コマンドウィンドウ非表示で B ボタンが押された場合
  275.     if KGC::ComposeItem::HIDE_COMMAND_WINDOW && Input.trigger?(Input::B)
  276.       Sound.play_cancel
  277.       $scene = Scene_Map.new
  278.       return
  279.     end

  280.     @status_window.item = @buy_window.item
  281.     if Input.trigger?(Input::C)
  282.       @item = @buy_window.item
  283.       # アイテムが無効なら選択不可
  284.       if @item == nil
  285.         Sound.play_buzzer
  286.         return
  287.       end

  288.       # 合成不可能 or 限界数まで所持している場合は選択不可
  289.       number = $game_party.item_number(@item)
  290.       limit = ($imported["LimitBreak"] ? @item.number_limit : 99)
  291.       if !$game_party.item_can_compose?(@item) || number == limit
  292.         Sound.play_buzzer
  293.         return
  294.       end

  295.       # 個数入力に切り替え
  296.       Sound.play_decision
  297.       max = $game_party.number_of_composable(@item)
  298.       max = [max, limit - number].min
  299.       @buy_window.active = false
  300.       @buy_window.visible = false
  301.       @number_window.set(@item, max, @item.compose_cost)
  302.       @number_window.active = true
  303.       @number_window.visible = true
  304.       return
  305.     end

  306.     super
  307.   end
  308.   #--------------------------------------------------------------------------
  309.   # ● 売却アイテム選択の更新
  310.   #--------------------------------------------------------------------------
  311.   def update_sell_selection
  312.     @number_window.sell_flag = true
  313.     super
  314.   end
  315.   #--------------------------------------------------------------------------
  316.   # ● 個数入力の決定
  317.   #--------------------------------------------------------------------------
  318.   def decide_number_input
  319.     if @command_window.index != 0  # 「合成する」以外
  320.       super
  321.       return
  322.     end

  323.     Sound.play_shop
  324.     @number_window.active = false
  325.     @number_window.visible = false
  326.     # 合成処理
  327.     operation_compose
  328.     @gold_window.refresh
  329.     @buy_window.refresh
  330.     @status_window.refresh
  331.     @buy_window.active = true
  332.     @buy_window.visible = true
  333.   end
  334.   #--------------------------------------------------------------------------
  335.   # ○ 合成の処理
  336.   #--------------------------------------------------------------------------
  337.   def operation_compose
  338.     $game_party.lose_gold(@number_window.number * @item.compose_cost)
  339.     $game_party.gain_item(@item, @number_window.number)
  340.     # 素材を減らす
  341.     @item.compose_materials.each { |material|
  342.       $game_party.lose_item(material.item,
  343.         material.number * @number_window.number)
  344.     }
  345.     # 合成済みにする
  346.     $game_party.set_item_composed(@item)
  347.   end
  348. end
复制代码

作者: 龙轩    时间: 2008-8-31 21:07
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1