赞 | 0 |
VIP | 2 |
好人卡 | 0 |
积分 | 1 |
经验 | 5741 |
最后登录 | 2017-10-29 |
在线时间 | 61 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 63
- 在线时间
- 61 小时
- 注册时间
- 2008-3-9
- 帖子
- 71
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
谁帮我译一下这个脚本(贯穿1、2楼)
- #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
- #_/ ◆ アイテム合成 - KGC_ComposeItem ◆ VX ◆
- #_/ ◇ Last update : 2008/08/01 ◇
- #_/----------------------------------------------------------------------------
- #_/ 複数のアイテムを合成し、新たなアイテムを作り出す機能を作成します。
- #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
- #==============================================================================
- # ★ カスタマイズ項目 - Customize ★
- #==============================================================================
- module KGC
- module ComposeItem
- # ◆ 合成画面呼び出しフラグを表すスイッチ番号
- # このスイッチを ON にすると、通常のショップの代わりに合成屋が開きます。
- COMPOSE_CALL_SWITCH = 2
- # ◆ 合成レシピ
- # ≪費用, "タイプ:ID,個数", ...≫
- # 【 費用 】合成費用
- # 【タイプ】合成素材の種類 (I..アイテム W..武器 A..防具)
- # 【 ID 】合成素材のID (↑と対応)
- # 【 個数 】合成素材の必要数
- # "タイプ:ID,個数" はいくつでも指定できます。
- # 個数を省略して "タイプ:ID" と書いた場合、個数は 1 扱いとなります。
- # 個数を 0 にした場合、1 個以上持っていれば何度でも合成できます。
- # レシピ配列は、添字がアイテム・武器・防具IDに対応しています。
- RECIPE_ITEM = [] # アイテム
- RECIPE_WEAPON = [] # 武器
- RECIPE_ARMOR = [] # 防具
- # ここから下に、合成レシピを定義。
- # <設定例>
- # アイテムID:8 の合成レシピ
- # アイテムID 2, 4, 7 を 1 個ずつ消費。無料。
- RECIPE_ITEM[8] = [0, "I:2", "I:4", "I:7"]
- # 武器ID:16 の合成レシピ
- # 武器ID:10 を 1 個、アイテムID:16 を 2 個消費。800 G。
- RECIPE_WEAPON[16] = [800, "W:10", "I:16,2"]
- # ◆ 合成コマンド名
- # "購入する" コマンドの位置に表示されます。
- # ※ 他のコマンド名は [Vocab] で変更可能。
- VOCAB_COMPOSE_ITEM = "合成する"
- # ◆ 合成アイテム情報切り替えボタン
- # 「素材リスト <--> 能力値変化(装備品のみ)」を切り替えるボタン。
- # 使用しない場合は nil を指定。
- SWITCH_INFO_BUTTON = Input::X
- # ◆ 必要素材リストをコンパクトにする
- # 素材数が多い場合は true にしてください。
- COMPACT_MATERIAL_LIST = true
- # ◆ コマンドウィンドウを表示しない
- # true : XP 版と同様のスタイル
- # false : VX 仕様
- HIDE_COMMAND_WINDOW = false
- # ◆ 所持金ウィンドウを表示しない
- # HIDE_COMMAND_WINDOW が false のときは常に表示します。
- HIDE_GOLD_WINDOW = false
- # ◆ 合成費用が 0 の場合、費用を表示しない
- HIDE_ZERO_COST = true
- # ◆ 合成済みのレシピは常に表示する
- # true : 一度でも合成したことがあれば常にリストに表示
- # false : 合成したことがあっても↓の条件に従う
- SHOW_COMPOSED_RECIPE = true
- # ◆ 合成費用不足のレシピを隠す
- # true : 費用不足ならリストに表示しない
- # false : 費用不足でも表示
- HIDE_SHORTAGE_COST = false
- # ◆ 合成素材不足のレシピを隠す
- # true : 素材不足ならリストに表示しない
- # false : 素材不足でも表示
- HIDE_SHORTAGE_MATERIAL = true
- # ◆ 判明 or 解禁していないレシピは合成不可
- # true : 判明 or 解禁するまで合成不可
- # false : 素材さえあれば合成可能
- NEED_RECIPE_OPEN_OR_CLEAR = true
- # ◆ 合成したことがないレシピのアイテム名を隠す
- MASK_UNKNOWN_RECIPE_NAME = true
- # ◆ 合成したことがないレシピに表示する名前
- # 1文字だけ指定すると、アイテム名と同じ文字数に拡張されます。
- UNKNOWN_NAME_MASK = "?"
- # ◆ 合成したことがないレシピのヘルプを隠す
- HIDE_UNKNOWN_RECIPE_HELP = true
- # ◆ 合成したことがないレシピに表示するヘルプ
- UNKNOWN_RECIPE_HELP = "合成したことがありません。"
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- $imported = {} if $imported == nil
- $imported["ComposeItem"] = true
- module KGC::ComposeItem
- module Regexp
- # レシピ
- RECIPE = /([IWA])\s*:\s*(\d+)(\s*,\s*\d+)?/i
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # □ KGC::Commands
- #==============================================================================
- module KGC
- module Commands
- module_function
- #--------------------------------------------------------------------------
- # ○ レシピ判明フラグを設定
- # type : レシピのタイプ (0..アイテム 1..武器 2..防具)
- # id : アイテムの ID
- # enabled : true..判明 false..未判明
- #--------------------------------------------------------------------------
- def set_recipe_cleared(type, id, enabled = true)
- item = nil
- case type
- when 0, :item # アイテム
- item = $data_items[id]
- when 1, :weapon # 武器
- item = $data_weapons[id]
- when 2, :armor # 防具
- item = $data_armors[id]
- end
- $game_party.set_recipe_cleared(item, enabled) if item != nil
- end
- #--------------------------------------------------------------------------
- # ○ レシピ解禁フラグを設定
- # type : レシピのタイプ (0..アイテム 1..武器 2..防具)
- # id : アイテムの ID
- # enabled : true..解禁 false..未解禁
- #--------------------------------------------------------------------------
- def set_recipe_opened(type, id, enabled = true)
- item = nil
- case type
- when 0, :item # アイテム
- item = $data_items[id]
- when 1, :weapon # 武器
- item = $data_weapons[id]
- when 2, :armor # 防具
- item = $data_armors[id]
- end
- $game_party.set_recipe_opened(item, enabled) if item != nil
- end
- end
- end
- class Game_Interpreter
- include KGC::Commands
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Vocab
- #==============================================================================
- module Vocab
- # 合成画面
- ComposeItem = KGC::ComposeItem::VOCAB_COMPOSE_ITEM
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ RPG::BaseItem
- #==============================================================================
- class RPG::BaseItem
- #--------------------------------------------------------------------------
- # ○ クラス変数
- #--------------------------------------------------------------------------
- @@__masked_name =
- KGC::ComposeItem::UNKNOWN_NAME_MASK # マスク名
- @@__expand_masked_name = false # マスク名拡張表示フラグ
- if @@__masked_name != nil
- @@__expand_masked_name = (@@__masked_name.scan(/./).size == 1)
- end
- #--------------------------------------------------------------------------
- # ○ アイテム合成のキャッシュ生成
- #--------------------------------------------------------------------------
- def create_compose_item_cache
- @__compose_cost = 0
- @__compose_materials = []
- # レシピ取得
- recipe = nil
- case self
- when RPG::Item # アイテム
- recipe = KGC::ComposeItem::RECIPE_ITEM[self.id]
- when RPG::Weapon # 武器
- recipe = KGC::ComposeItem::RECIPE_WEAPON[self.id]
- when RPG::Armor # 防具
- recipe = KGC::ComposeItem::RECIPE_ARMOR[self.id]
- end
- return if recipe == nil
- recipe = recipe.dup
- @__compose_cost = recipe.shift
- # 素材リストを作成
- recipe.each { |r|
- if r =~ KGC::ComposeItem::Regexp::RECIPE
- material = Game_ComposeMaterial.new
- material.kind = $1.upcase # 素材の種類を取得
- material.id = $2.to_i # 素材の ID を取得
- if $3 != nil
- material.number = [$3[/\d+/].to_i, 0].max # 必要数を取得
- end
- @__compose_materials << material
- end
- }
- end
- #--------------------------------------------------------------------------
- # ○ マスク名
- #--------------------------------------------------------------------------
- def masked_name
- if KGC::ComposeItem::MASK_UNKNOWN_RECIPE_NAME
- if @@__expand_masked_name
- # マスク名を拡張して表示
- return @@__masked_name * self.name.scan(/./).size
- else
- return @@__masked_name
- end
- else
- return self.name
- end
- end
- #--------------------------------------------------------------------------
- # ○ 合成用費用
- #--------------------------------------------------------------------------
- def compose_cost
- create_compose_item_cache if @__compose_cost == nil
- return @__compose_cost
- end
- #--------------------------------------------------------------------------
- # ○ 合成用素材リスト
- #--------------------------------------------------------------------------
- def compose_materials
- create_compose_item_cache if @__compose_materials == nil
- return @__compose_materials
- end
- #--------------------------------------------------------------------------
- # ○ 合成アイテムか
- #--------------------------------------------------------------------------
- def is_compose?
- return !compose_materials.empty?
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Game_Party
- #==============================================================================
- class Game_Party < Game_Unit
- #--------------------------------------------------------------------------
- # ○ 合成済みフラグをクリア
- #--------------------------------------------------------------------------
- def clear_composed_flag
- @item_composed = {}
- @weapon_composed = {}
- @armor_composed = {}
- end
- #--------------------------------------------------------------------------
- # ○ レシピ判明フラグをクリア
- #--------------------------------------------------------------------------
- def clear_recipe_cleared_flag
- @item_recipe_cleared = {}
- @weapon_recipe_cleared = {}
- @armor_recipe_cleared = {}
- end
- #--------------------------------------------------------------------------
- # ○ レシピ解禁フラグをクリア
- #--------------------------------------------------------------------------
- def clear_recipe_opened_flag
- @item_recipe_opened = {}
- @weapon_recipe_opened = {}
- @armor_recipe_opened = {}
- end
- #--------------------------------------------------------------------------
- # ○ アイテムの合成済みフラグを設定
- # item : アイテム
- # flag : true..合成済み false..未合成
- #--------------------------------------------------------------------------
- def set_item_composed(item, flag = true)
- return false unless item.is_a?(RPG::BaseItem) # アイテム以外
- return false unless item.is_compose? # 合成アイテム以外
- # 合成済みフラグを格納するハッシュを作成
- clear_composed_flag if @item_composed == nil
- # 合成済みフラグをセット
- case item
- when RPG::Item # アイテム
- @item_composed[item.id] = flag
- when RPG::Weapon # 武器
- @weapon_composed[item.id] = flag
- when RPG::Armor # 防具
- @armor_composed[item.id] = flag
- end
- end
- #--------------------------------------------------------------------------
- # ○ アイテムの合成済み判定
- # item : アイテム
- #--------------------------------------------------------------------------
- def item_composed?(item)
- return false unless item.is_a?(RPG::BaseItem) # アイテム以外
- return false unless item.is_compose? # 合成アイテム以外
- # 合成済みフラグを格納するハッシュを作成
- clear_composed_flag if @item_composed == nil
- # 合成済み判定
- case item
- when RPG::Item # アイテム
- return @item_composed[item.id]
- when RPG::Weapon # 武器
- return @weapon_composed[item.id]
- when RPG::Armor # 防具
- return @armor_composed[item.id]
- end
- return false
- end
- #--------------------------------------------------------------------------
- # ○ アイテムの合成済みフラグを設定
- # item : アイテム
- # flag : true..合成済み false..未合成
- #--------------------------------------------------------------------------
- def set_item_composed(item, flag = true)
- return false unless item.is_a?(RPG::BaseItem) # アイテム以外
- return false unless item.is_compose? # 合成アイテム以外
- # 合成済みフラグを格納するハッシュを作成
- clear_composed_flag if @item_composed == nil
- # 合成済みフラグをセット
- case item
- when RPG::Item # アイテム
- @item_composed[item.id] = flag
- when RPG::Weapon # 武器
- @weapon_composed[item.id] = flag
- when RPG::Armor # 防具
- @armor_composed[item.id] = flag
- end
- end
- #--------------------------------------------------------------------------
- # ○ レシピ判明判定
- # item : アイテム
- #--------------------------------------------------------------------------
- def recipe_cleared?(item)
- return false unless item.is_a?(RPG::BaseItem) # アイテム以外
- return false unless item.is_compose? # 合成アイテム以外
- # 判明フラグを格納するハッシュを作成
- clear_recipe_cleared_flag if @item_recipe_cleared == nil
- # 判定
- case item
- when RPG::Item # アイテム
- return @item_recipe_cleared[item.id]
- when RPG::Weapon # 武器
- return @weapon_recipe_cleared[item.id]
- when RPG::Armor # 防具
- return @armor_recipe_cleared[item.id]
- end
- return false
- end
- #--------------------------------------------------------------------------
- # ○ アイテムの判明フラグを設定
- # item : アイテム
- # flag : true..判明 false..未判明
- #--------------------------------------------------------------------------
- def set_recipe_cleared(item, flag = true)
- return false unless item.is_a?(RPG::BaseItem) # アイテム以外
- return false unless item.is_compose? # 合成アイテム以外
- # 判明フラグを格納するハッシュを作成
- clear_recipe_cleared_flag if @item_recipe_cleared == nil
- # 判明フラグをセット
- case item
- when RPG::Item # アイテム
- @item_recipe_cleared[item.id] = flag
- when RPG::Weapon # 武器
- @weapon_recipe_cleared[item.id] = flag
- when RPG::Armor # 防具
- @armor_recipe_cleared[item.id] = flag
- end
- end
- #--------------------------------------------------------------------------
- # ○ レシピ解禁判定
- # item : アイテム
- #--------------------------------------------------------------------------
- def recipe_opened?(item)
- return false unless item.is_a?(RPG::BaseItem) # アイテム以外
- return false unless item.is_compose? # 合成アイテム以外
- # 解禁フラグを格納するハッシュを作成
- clear_recipe_opened_flag if @item_recipe_opened == nil
- # 判定
- case item
- when RPG::Item # アイテム
- return @item_recipe_opened[item.id]
- when RPG::Weapon # 武器
- return @weapon_recipe_opened[item.id]
- when RPG::Armor # 防具
- return @armor_recipe_opened[item.id]
- end
- return false
- end
- #--------------------------------------------------------------------------
- # ○ アイテムの解禁フラグを設定
- # item : アイテム
- # flag : true..解禁 false..未解禁
- #--------------------------------------------------------------------------
- def set_recipe_opened(item, flag = true)
- return false unless item.is_a?(RPG::BaseItem) # アイテム以外
- return false unless item.is_compose? # 合成アイテム以外
- # 解禁フラグを格納するハッシュを作成
- clear_recipe_opened_flag if @item_recipe_opened == nil
- # 解禁フラグをセット
- case item
- when RPG::Item # アイテム
- @item_recipe_opened[item.id] = flag
- when RPG::Weapon # 武器
- @weapon_recipe_opened[item.id] = flag
- when RPG::Armor # 防具
- @armor_recipe_opened[item.id] = flag
- end
- end
- #--------------------------------------------------------------------------
- # ○ アイテムの合成可能判定
- # item : アイテム
- #--------------------------------------------------------------------------
- def item_can_compose?(item)
- return false unless item_compose_cost_satisfy?(item)
- return false unless item_compose_material_satisfy?(item)
- return true
- end
- #--------------------------------------------------------------------------
- # ○ 合成アイテムの資金充足判定
- # item : アイテム
- #--------------------------------------------------------------------------
- def item_compose_cost_satisfy?(item)
- return false unless item.is_a?(RPG::BaseItem) # アイテム以外
- return false unless item.is_compose? # 合成アイテム以外
- return (gold >= item.compose_cost)
- end
- #--------------------------------------------------------------------------
- # ○ 合成アイテムの素材充足判定
- # item : アイテム
- #--------------------------------------------------------------------------
- def item_compose_material_satisfy?(item)
- return false unless item.is_a?(RPG::BaseItem) # アイテム以外
- return false unless item.is_compose? # 合成アイテム以外
- item.compose_materials.each { |material|
- num = item_number(material.item)
- return false if num < material.number || num == 0 # 素材不足
- }
- return true
- end
- #--------------------------------------------------------------------------
- # ○ アイテムの合成可能数を取得
- # item : アイテム
- #--------------------------------------------------------------------------
- def number_of_composable(item)
- return 0 unless item.is_a?(RPG::BaseItem) # アイテム以外
- return 0 unless item.is_compose? # 合成アイテム以外
- number = ($imported["LimitBreak"] ? item.number_limit : 99)
- if item.compose_cost > 0
- number = [number, gold / item.compose_cost].min
- end
- # 素材数判定
- item.compose_materials.each { |material|
- next if material.number == 0 # 必要数 0 は無視
- n = item_number(material.item) / material.number
- number = [number, n].min
- }
- return number
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # □ Game_ComposeMaterial
- #------------------------------------------------------------------------------
- # 合成素材の情報を格納するクラスです。
- #==============================================================================
- class Game_ComposeMaterial
- #--------------------------------------------------------------------------
- # ○ 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_accessor :kind # アイテムの種類 (/[IWA]/)
- attr_accessor :id # アイテムの ID
- attr_accessor :number # 必要数
- #--------------------------------------------------------------------------
- # ○ オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize
- @kind = "I"
- @id = 0
- @number = 1
- end
- #--------------------------------------------------------------------------
- # ○ アイテム取得
- #--------------------------------------------------------------------------
- def item
- case @kind
- when "I" # アイテム
- return $data_items[@id]
- when "W" # 武器
- return $data_weapons[@id]
- when "A" # 防具
- return $data_armors[@id]
- else
- return nil
- end
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Window_Base
- #==============================================================================
- class Window_Base < Window
- #--------------------------------------------------------------------------
- # ○ 合成アイテム名の描画
- # item : アイテム (スキル、武器、防具でも可)
- # x : 描画先 X 座標
- # y : 描画先 Y 座標
- # enabled : 有効フラグ。false のとき半透明で描画
- #--------------------------------------------------------------------------
- def draw_compose_item_name(item, x, y, enabled = true)
- return if item == nil
- draw_icon(item.icon_index, x, y, enabled)
- self.contents.font.color = normal_color
- self.contents.font.color.alpha = enabled ? 255 : 128
- masked = !$game_party.item_composed?(item) &&
- !$game_party.recipe_cleared?(item)
- self.contents.draw_text(x + 24, y, 172, WLH,
- masked ? item.masked_name : item.name)
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # □ Window_ComposeNumber
- #------------------------------------------------------------------------------
- # 合成画面で、合成するアイテムの個数を入力するウィンドウです。
- #==============================================================================
- class Window_ComposeNumber < Window_ShopNumber
- #--------------------------------------------------------------------------
- # ○ 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_accessor :sell_flag # 売却フラグ
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- # x : ウィンドウの X 座標
- # y : ウィンドウの Y 座標
- #--------------------------------------------------------------------------
- alias initialize_KGC_ComposeItem initialize unless $@
- def initialize(x, y)
- @sell_flag = false
- initialize_KGC_ComposeItem(x, y)
- end
- #--------------------------------------------------------------------------
- # ● リフレッシュ
- #--------------------------------------------------------------------------
- def refresh
- y = 96
- self.contents.clear
- if @sell_flag
- draw_item_name(@item, 0, y)
- else
- draw_compose_item_name(@item, 0, y)
- end
- self.contents.font.color = normal_color
- self.contents.draw_text(212, y, 20, WLH, "×")
- self.contents.draw_text(248, y, 20, WLH, @number, 2)
- self.cursor_rect.set(244, y, 28, WLH)
- if !KGC::ComposeItem::HIDE_ZERO_COST || @price > 0
- draw_currency_value(@price * @number, 4, y + WLH * 2, 264)
- end
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # □ Window_ComposeItem
- #------------------------------------------------------------------------------
- # 合成画面で、合成できる商品の一覧を表示するウィンドウです。
- #==============================================================================
- class Window_ComposeItem < Window_ShopBuy
- #--------------------------------------------------------------------------
- # ● リフレッシュ
- #--------------------------------------------------------------------------
- def refresh
- @data = []
- for goods_item in @shop_goods
- case goods_item[0]
- when 0
- item = $data_items[goods_item[1]]
- when 1
- item = $data_weapons[goods_item[1]]
- when 2
- item = $data_armors[goods_item[1]]
- end
- # 合成アイテムのみ追加
- @data.push(item) if include?(item)
- end
- @item_max = @data.size
- create_contents
- for i in 0...@item_max
- draw_item(i)
- end
- end
复制代码 版务信息:本贴由楼主自主结贴~ |
|