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

Project1

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

[已经过期] 求这个脚本的用法

[复制链接]

Lv1.梦旅人

梦石
0
星屑
49
在线时间
3 小时
注册时间
2012-5-4
帖子
284
跳转到指定楼层
1
发表于 2012-6-27 20:21:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ パラメータ振り分け2 - KGC_DistributeParameter2 ◆ VX ◆
  3. #_/    ◇ Last update : 2009/09/26 ◇
  4. #_/----------------------------------------------------------------------------
  5. #_/  パラメータ振り分け機能を作成します。
  6. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

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

  10. module KGC
  11. module DistributeParameter
  12.   # ◆ パラメータ振り分け箇所
  13.   #  振り分け箇所および増加量を
  14.   #   {
  15.   #     :key        => キー,
  16.   #     :name       => "名称",
  17.   #     :limit      => 回数上限,
  18.   #     :cost       => [消費 RP, 消費 RP 補正],
  19.   #     :パラメータ => [上昇量, 上昇量補正],
  20.   #     # 以降、パラメータを必要なだけ記述
  21.   #   },
  22.   #  という書式で追加。
  23.   #  振り分け画面では、追加した順に表示。
  24.   #  「キー」には、他の箇所と被らない名称を指定。
  25.   #  (内部で振り分け箇所を特定するために使用。数値、文字列など何でもOK)
  26.   #  「回数上限」以外は小数でもOK。
  27.   #  「回数上限」を 0 にすると回数無制限。
  28.   #  「消費 RP 補正」と「上昇量補正」は省略可。省略時は 0。
  29.   GAIN_PARAMETER = [
  30.     {
  31.       :key   => :health,
  32.       :name  => "體力",
  33.       :limit => 90,
  34.       :cost  => [ 1, 0.4],
  35.       :maxhp => [30, 2],
  36.       :def   => [ 1, 0.25],
  37.     },
  38.     {
  39.       :key   => :magic,
  40.       :name  => "魔力",
  41.       :limit => 90,
  42.       :cost  => [1, 0.4],
  43.       :maxmp => [5, 0.5],
  44.       :spi   => [2, 0.5],
  45.     },
  46.     {
  47.       :key   => :pow,
  48.       :name  => "力量",
  49.       :limit => 90,
  50.       :cost  => [1, 0.4],
  51.       :atk   => [2, 0.5],
  52.       :def   => [1, 0.25],
  53.     },
  54.     {
  55.       :key   => :dex,
  56.       :name  => "速度",
  57.       :limit => 90,
  58.       :cost  => [1, 0.4],
  59.       :agi   => [2, 0.5],
  60.       :hit   => [0.5],
  61.       :eva   => [0.5],
  62.     },
  63.     {
  64.       :key   => :hit,
  65.       :name  => "命中率",
  66.       :limit => 90,
  67.       :cost  => [1, 0.5],
  68.       :hit   => [1],
  69.     },
  70.     {
  71.       :key   => :eva,
  72.       :name  => "回避率",
  73.       :limit => 90,
  74.       :cost  => [1, 0.5],
  75.       :eva   => [1],
  76.     },
  77.     {
  78.       :key   => :crt,
  79.       :name  => "致命一擊",
  80.       :limit => 90,
  81.       :cost  => [1, 0.7],
  82.       :cri   => [1],
  83.     },
  84.     {
  85.       :key         => :chant,
  86.       :name        => "詠唱速度",
  87.       :limit       => 90,
  88.       :cost        => [1, 0.5],
  89.       :skill_speed => [1],
  90.     },
  91.     {
  92.       :key        => :item,
  93.       :name       => "道具速度",
  94.       :limit      => 90,
  95.       :cost       => [1, 0.5],
  96.       :item_speed => [1],
  97.     },
  98.     {
  99.       :key   => :odds,
  100.       :name  => "行動",
  101.       :limit => 90,
  102.       :cost  => [1],
  103.       :odds  => [1],
  104.     }
  105.   ]  # ← この ] は消さないこと!

  106.   # ◆ アクター固有のパラメータ増加量
  107.   PERSONAL_GAIN_PARAMETER = []
  108.   #  ここから下に、アクターごとの振り分け時の増加量を
  109.   #   PERSONAL_GAIN_PARAMETER[アクター ID] = [ 振り分け箇所 ]
  110.   #  という書式で指定。
  111.   #  「振り分け箇所」は GAIN_PARAMETER と同様の書式。
  112.   #  キーが GAIN_PARAMETER と同じ場合、GAIN_PARAMETER に上書き。
  113.   #  指定しなかったパラメータ/アクターは GAIN_PARAMETER を使用。
  114.   #
  115.   # <例> アクター1の "体力" を個別に指定。
  116.   PERSONAL_GAIN_PARAMETER[1] = [
  117.     {
  118.       :key   => :health,
  119.       :name  => "体力",
  120.       :limit => 30,
  121.       :cost  => [ 1, 0.4],
  122.       :maxhp => [50, 3],
  123.       :def   => [ 1, 0.3],
  124.     },
  125.   ]

  126.   # ◆ 職業固有のパラメータ増加量
  127.   CLASS_GAIN_PARAMETER = []
  128.   #  ここから下に、職業ごとの振り分け時の増加量を
  129.   #   CLASS_GAIN_PARAMETER[職業 ID] = [ 振り分け箇所 ]
  130.   #  という書式で指定。
  131.   #  その他はアクター固有の設定と同様。
  132.   #  (優先度は  職業 > アクター > デフォルト)

  133.   # ◆ RP (Reinforce Point) の名称
  134.   VOCAB_RP   = "RP"
  135.   # ◆ RP の名称 (略)
  136.   VOCAB_RP_A = "R"

  137.   # ◆ MaxRP 計算式
  138.   #   level .. レベル
  139.   #  結果が小数になってもOK(自動で整数に変換)。
  140.   MAXRP_EXP = "(level ** 0.25 + 2.0) * level"

  141.   # ◆ パラメータ名
  142.   #  ≪拡張装備画面≫ と併用した場合、下に導入した方を優先。
  143.   VOCAB_PARAM = {
  144.     :hit         => "命中率",        # 命中率
  145.     :eva         => "回避率",        # 回避率
  146.     :cri         => "致命一擊",  # クリティカル率
  147.     :skill_speed => "詠唱速度",      # スキル速度補正
  148.     :item_speed  => "道具速度",  # アイテム速度補正
  149.     :odds        => "行動",  # 狙われやすさ
  150.   }  # ← この } は消さないこと!

  151.   # ◆ 振り分け回数が無制限のときは /--- (上限表記) を隠す
  152.   #  true  : 回数のみ表示
  153.   #  false : 回数/--- と表示
  154.   HIDE_MAX_COUNT_INFINITE  = false

  155.   # ◆ 振り分けゲージの色
  156.   #  数値  : \C[n] と同じ色。
  157.   #  Color : 指定した色。 ( Color.new(255, 128, 128) など )
  158.   GAUGE_START_COLOR = 28  # 開始色
  159.   GAUGE_END_COLOR   = 29  # 終了色

  160.   # ◆ 振り分けゲージに汎用ゲージを使用する
  161.   #  ≪汎用ゲージ描画≫ 導入時のみ有効。
  162.   ENABLE_GENERIC_GAUGE = true
  163.   # ◆ 振り分けゲージ設定
  164.   #  画像は "Graphics/System" から読み込む。
  165.   GAUGE_IMAGE  = "GaugeDist"  # 画像
  166.   GAUGE_OFFSET = [-23, -2]    # 位置補正 [x, y]
  167.   GAUGE_LENGTH = -4           # 長さ補正
  168.   GAUGE_SLOPE  = 30           # 傾き (-89 ~ 89)

  169.   # ◆ 振り分け終了時の確認コマンド
  170.   CONFIRM_COMMANDS = [
  171.     "確定",  # 振り分け確定
  172.     "中止",  # 振り分け中止
  173.     "取消",  # 振り分けを続ける
  174.   ]  # ← この ] は消さないこと!

  175.   # ◆ 確認コマンドのヘルプ
  176.   CONFIRM_COMMAND_HELP = [
  177.     "配點好了確定。",  # 振り分け確定
  178.     "配點中止回去。",  # 振り分け中止
  179.     "配點重新分配。",  # 振り分けを続ける
  180.   ]  # ← この ] は消さないこと!

  181.   # ◆ 振り分け終了時の確認コマンドの幅
  182.   CONFIRM_WIDTH = 96

  183.   # ◆ メニュー画面に「パラメータ振り分け」コマンドを追加する
  184.   #  追加する場所は、メニューコマンドの最下部です。
  185.   #  他の部分に追加したければ、≪カスタムメニューコマンド≫ をご利用ください。
  186.   USE_MENU_DISTRIBUTE_PARAMETER_COMMAND = true
  187.   # ◆ メニュー画面の「パラメータ振り分け」コマンドの名称
  188.   VOCAB_MENU_DISTRIBUTE_PARAMETER       = "點數分配"

  189.   # ◆ 振り分け解除を許可
  190.   #  true  : 振り分け確定後もパラメータを下げ、RP を取り戻せる。
  191.   #  false : 一度確定したら下げられない。
  192.   ENABLE_REVERSE_DISTRIBUTE = true
  193. end
  194. end

  195. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  196. $imported = {} if $imported == nil
  197. $imported["DistributeParameter"] = true


  198. module KGC::DistributeParameter
  199.   # 振り分け対象パラメータ
  200.   PARAMS = [:maxhp, :maxmp, :atk, :def, :spi, :agi, :hit, :eva, :cri,
  201.     :skill_speed, :item_speed, :odds]

  202.   # パラメータ増加量構造体
  203.   GainInfo  = Struct.new(:key, :name, :limit, :cost, :cost_rev, :params)
  204.   ParamInfo = Struct.new(:value, :value_rev)

  205.   # 振り分け情報構造体
  206.   DistInfo = Struct.new(:count, :hp, :mp)

  207.   #--------------------------------------------------------------------------
  208.   # ○ パラメータ増加量を構造体化
  209.   #--------------------------------------------------------------------------
  210.   def self.create_gain_param_structs(target)
  211.     result = []
  212.     target.each { |v|
  213.       info = GainInfo.new
  214.       info.key      = v[:key]
  215.       info.name     = v[:name]
  216.       info.limit    = v[:limit]
  217.       info.cost     = v[:cost][0]
  218.       info.cost_rev = (v[:cost][1] == nil ? 0 : v[:cost][1])
  219.       info.params   = {}

  220.       PARAMS.each { |param|
  221.         next unless v.has_key?(param)
  222.         pinfo = ParamInfo.new
  223.         pinfo.value     = v[param][0]
  224.         pinfo.value_rev = (v[param][1] == nil ? 0 : v[param][1])
  225.         info.params[param] = pinfo
  226.       }
  227.       result << info
  228.     }
  229.     return result
  230.   end
  231.   #--------------------------------------------------------------------------
  232.   # ○ パラメータ増加量を構造体化 (固有増加量用)
  233.   #--------------------------------------------------------------------------
  234.   def self.create_gain_param_structs_for_personal(target)
  235.     result = []
  236.     target.each { |list|
  237.       next if list == nil
  238.       result << create_gain_param_structs(list)
  239.     }
  240.     return result
  241.   end
  242.   #--------------------------------------------------------------------------
  243.   # ○ パラメータ増加量を併合
  244.   #--------------------------------------------------------------------------
  245.   def self.merge(list1, list2)
  246.     result = list1.clone
  247.     list2.each { |info2|
  248.       overwrite = false
  249.       list1.each_with_index { |info1, i|
  250.         if info1.key == info2.key
  251.           result[i] = info2
  252.           overwrite = true
  253.           break
  254.         end
  255.       }
  256.       result << info2 unless overwrite
  257.     }
  258.     return result
  259.   end

  260.   # パラメータ増加量を構造体化
  261.   GAIN_PARAMS = create_gain_param_structs(GAIN_PARAMETER)
  262.   PERSONAL_GAIN_PARAMS =
  263.     create_gain_param_structs_for_personal(PERSONAL_GAIN_PARAMETER)
  264.   CLASS_GAIN_PARAMS =
  265.     create_gain_param_structs_for_personal(CLASS_GAIN_PARAMETER)
  266. end

  267. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  268. #==============================================================================
  269. # ■ Vocab
  270. #==============================================================================

  271. module Vocab
  272.   # 命中率
  273.   def self.hit
  274.     return KGC::DistributeParameter::VOCAB_PARAM[:hit]
  275.   end

  276.   # 回避率
  277.   def self.eva
  278.     return KGC::DistributeParameter::VOCAB_PARAM[:eva]
  279.   end

  280.   # クリティカル率
  281.   def self.cri
  282.     return KGC::DistributeParameter::VOCAB_PARAM[:cri]
  283.   end

  284.   # スキル速度補正
  285.   def self.skill_speed
  286.     return KGC::DistributeParameter::VOCAB_PARAM[:skill_speed]
  287.   end

  288.   # アイテム速度補正
  289.   def self.item_speed
  290.     return KGC::DistributeParameter::VOCAB_PARAM[:item_speed]
  291.   end

  292.   # 狙われやすさ
  293.   def self.odds
  294.     return KGC::DistributeParameter::VOCAB_PARAM[:odds]
  295.   end

  296.   # RP
  297.   def self.rp
  298.     return KGC::DistributeParameter::VOCAB_RP
  299.   end

  300.   # RP (略)
  301.   def self.rp_a
  302.     return KGC::DistributeParameter::VOCAB_RP_A
  303.   end

  304.   # パラメータ振り分け
  305.   def self.distribute_parameter
  306.     return KGC::DistributeParameter::VOCAB_MENU_DISTRIBUTE_PARAMETER
  307.   end
  308. end

  309. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  310. #==============================================================================
  311. # □ KGC::Commands
  312. #==============================================================================

  313. module KGC
  314. module Commands
  315.   module_function
  316.   #--------------------------------------------------------------------------
  317.   # ○ パラメータ振り分けに関する値をチェック
  318.   #--------------------------------------------------------------------------
  319.   def check_distribution_values
  320.     (1...$data_actors.size).each { |i|
  321.       actor = $game_actors[i]
  322.       actor.check_distribution_values
  323.       actor.restore_distribution_values
  324.     }
  325.   end
  326.   #--------------------------------------------------------------------------
  327.   # ○ RP の増減
  328.   #     actor_id : アクター ID
  329.   #     value    : 増減量
  330.   #--------------------------------------------------------------------------
  331.   def gain_rp(actor_id, value)
  332.     actor = $game_actors[actor_id]
  333.     return if actor == nil
  334.     actor.gain_rp(value)
  335.   end
  336.   #--------------------------------------------------------------------------
  337.   # ○ 振り分け回数をリセット
  338.   #     actor_id : アクター ID
  339.   #--------------------------------------------------------------------------
  340.   def reset_distributed_count(actor_id)
  341.     actor = $game_actors[actor_id]
  342.     return if actor == nil
  343.     actor.clear_distribution_values
  344.     actor.restore_distribution_values
  345.   end
  346.   #--------------------------------------------------------------------------
  347.   # ○ パラメータ振り分け画面の呼び出し
  348.   #     actor_index : アクターインデックス
  349.   #--------------------------------------------------------------------------
  350.   def call_distribute_parameter(actor_index = 0)
  351.     return if $game_temp.in_battle
  352.     $game_temp.next_scene = :distribute_parameter
  353.     $game_temp.next_scene_actor_index = actor_index
  354.   end
  355. end
  356. end

  357. class Game_Interpreter
  358.   include KGC::Commands
  359. end

  360. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  361. #==============================================================================
  362. # ■ Game_Battler
  363. #==============================================================================

  364. class Game_Battler
  365.   #--------------------------------------------------------------------------
  366.   # ● 能力値に加算する値をクリア
  367.   #--------------------------------------------------------------------------
  368.   alias clear_extra_values_KGC_DistributeParameter clear_extra_values
  369.   def clear_extra_values
  370.     clear_extra_values_KGC_DistributeParameter

  371.     clear_distribution_values
  372.     calc_distribution_values
  373.   end
  374.   #--------------------------------------------------------------------------
  375.   # ○ パラメータ振り分けに関する値をクリア
  376.   #--------------------------------------------------------------------------
  377.   def clear_distribution_values
  378.     @distributed_count = {}
  379.     KGC::DistributeParameter::PARAMS.each { |param|
  380.       @distributed_count[param] = 0
  381.     }
  382.   end
  383.   #--------------------------------------------------------------------------
  384.   # ○ パラメータ振り分けに関する値をチェック
  385.   #--------------------------------------------------------------------------
  386.   def check_distribution_values
  387.     last_distributed_count = @distributed_count

  388.     clear_distribution_values

  389.     @distributed_count = last_distributed_count if last_distributed_count != nil
  390.   end
  391.   #--------------------------------------------------------------------------
  392.   # ○ 各種修正値を計算
  393.   #--------------------------------------------------------------------------
  394.   def calc_distribution_values
  395.     # 継承先で定義
  396.   end
  397.   #--------------------------------------------------------------------------
  398.   # ○ 振り分けによる上昇値を取得
  399.   #     param : パラメータの Symbol
  400.   #--------------------------------------------------------------------------
  401.   def distributed_param(param)
  402.     return 0
  403.   end
  404.   #--------------------------------------------------------------------------
  405.   # ○ 振り分けに関する情報を取得
  406.   #--------------------------------------------------------------------------
  407.   def distribution_info
  408.     info = KGC::DistributeParameter::DistInfo.new
  409.     info.count = @distributed_count.clone
  410.     info.hp    = self.hp
  411.     info.mp    = self.mp
  412.     return info
  413.   end
  414.   #--------------------------------------------------------------------------
  415.   # ○ 振り分けに関する情報を設定
  416.   #--------------------------------------------------------------------------
  417.   def set_distribution_info(info)
  418.     return unless info.is_a?(KGC::DistributeParameter::DistInfo)

  419.     @distributed_count = info.count
  420.     calc_distribution_values
  421.     self.hp = info.hp
  422.     self.mp = info.mp
  423.   end
  424. end

  425. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  426. #==============================================================================
  427. # ■ Game_BattleAction
  428. #==============================================================================

  429. class Game_BattleAction
  430.   #--------------------------------------------------------------------------
  431.   # ● 行動スピードの決定
  432.   #--------------------------------------------------------------------------
  433.   alias make_speed_KGC_DistributeParameter make_speed
  434.   def make_speed
  435.     make_speed_KGC_DistributeParameter

  436.     if skill? && skill.speed < 0
  437.       n = [battler.distributed_param(:skill_speed), skill.speed].min
  438.       @speed -= n
  439.     end
  440.     if item? && item.speed < 0
  441.       n = [battler.distributed_param(:item_speed), item.speed].min
  442.       @speed -= n
  443.     end
  444.   end
  445. end

  446. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  447. #==============================================================================
  448. # ■ Game_Actor
  449. #==============================================================================

  450. class Game_Actor < Game_Battler
  451.   #--------------------------------------------------------------------------
  452.   # ○ クラス変数
  453.   #--------------------------------------------------------------------------
  454.   @@__distribute_gain_params = {}
  455.   #--------------------------------------------------------------------------
  456.   # ● オブジェクト初期化
  457.   #     actor_id : アクター ID
  458.   #--------------------------------------------------------------------------
  459.   alias initialize_KGC_DistributeParameter initialize
  460.   def initialize(actor_id)
  461.     @actor_id = actor_id
  462.     @class_id = $data_actors[actor_id].class_id

  463.     initialize_KGC_DistributeParameter(actor_id)
  464.   end
  465.   #--------------------------------------------------------------------------
  466.   # ○ パラメータ増加量一覧を取得
  467.   #--------------------------------------------------------------------------
  468.   def gain_parameter_list
  469.     key = "#{self.id}_#{self.class_id}"
  470.     unless @@__distribute_gain_params.has_key?(key)
  471.       result = KGC::DistributeParameter::GAIN_PARAMS
  472.       # アクター固有
  473.       list = KGC::DistributeParameter::PERSONAL_GAIN_PARAMS[self.id]
  474.       result = KGC::DistributeParameter.merge(result, list) if list != nil
  475.       # 職業固有
  476.       list = KGC::DistributeParameter::CLASS_GAIN_PARAMS[self.class_id]
  477.       result = KGC::DistributeParameter.merge(result, list) if list != nil

  478.       @@__distribute_gain_params[key] = result
  479.     end

  480.     return @@__distribute_gain_params[key]
  481.   end
  482.   #--------------------------------------------------------------------------
  483.   # ○ パラメータ増加量を取得
  484.   #     key : 振り分けキー
  485.   #--------------------------------------------------------------------------
  486.   def gain_parameter(key)
  487.     return gain_parameter_list.find { |v| v.key == key }
  488.   end
  489.   #--------------------------------------------------------------------------
  490.   # ○ 各種修正値を計算
  491.   #--------------------------------------------------------------------------
  492.   def calc_distribution_values
  493.     @rp_cost = 0
  494.     @distributed_param = {}
  495.     KGC::DistributeParameter::PARAMS.each { |param|
  496.       @distributed_param[param] = 0
  497.     }

  498.     gain_parameter_list.each { |gain|
  499.       next if gain == nil
  500.       cost = 0
  501.       distributed_count(gain.key).times { |i|
  502.         cost += Integer(gain.cost + gain.cost_rev * i)
  503.         gain.params.each { |param, v|
  504.           @distributed_param[param] += v.value + v.value_rev * i
  505.         }
  506.       }
  507.       @rp_cost += [cost, 0].max
  508.     }

  509.     KGC::DistributeParameter::PARAMS.each { |param|
  510.       @distributed_param[param] = Integer(@distributed_param[param])
  511.     }
  512.   end
  513.   #--------------------------------------------------------------------------
  514.   # ○ 各種修正値を修復
  515.   #--------------------------------------------------------------------------
  516.   def restore_distribution_values
  517.     calc_distribution_values
  518.     self.hp = self.hp
  519.     self.mp = self.mp
  520.   end
  521.   #--------------------------------------------------------------------------
  522.   # ○ 振り分けによる上昇値を取得
  523.   #     param : パラメータの Symbol
  524.   #--------------------------------------------------------------------------
  525.   def distributed_param(param)
  526.     return 0 if @distributed_param == nil
  527.     return 0 if @distributed_param[param] == nil
  528.     return @distributed_param[param]
  529.   end
  530.   #--------------------------------------------------------------------------
  531.   # ● 基本 MaxHP の取得
  532.   #--------------------------------------------------------------------------
  533.   alias base_maxhp_KGC_DistributeParameter base_maxhp
  534.   def base_maxhp
  535.     n = base_maxhp_KGC_DistributeParameter + distributed_param(:maxhp)
  536.     return n
  537.   end
  538.   #--------------------------------------------------------------------------
  539.   # ● 基本 MaxMP の取得
  540.   #--------------------------------------------------------------------------
  541.   alias base_maxmp_KGC_DistributeParameter base_maxmp
  542.   def base_maxmp
  543.     n = base_maxmp_KGC_DistributeParameter + distributed_param(:maxmp)
  544.     return n
  545.   end
  546.   #--------------------------------------------------------------------------
  547.   # ● 基本攻撃力の取得
  548.   #--------------------------------------------------------------------------
  549.   alias base_atk_KGC_DistributeParameter base_atk
  550.   def base_atk
  551.     n = base_atk_KGC_DistributeParameter + distributed_param(:atk)
  552.     return n
  553.   end
  554.   #--------------------------------------------------------------------------
  555.   # ● 基本防御力の取得
  556.   #--------------------------------------------------------------------------
  557.   alias base_def_KGC_DistributeParameter base_def
  558.   def base_def
  559.     n = base_def_KGC_DistributeParameter + distributed_param(:def)
  560.     return n
  561.   end
  562.   #--------------------------------------------------------------------------
  563.   # ● 基本精神力の取得
  564.   #--------------------------------------------------------------------------
  565.   alias base_spi_KGC_DistributeParameter base_spi
  566.   def base_spi
  567.     n = base_spi_KGC_DistributeParameter + distributed_param(:spi)
  568.     return n
  569.   end
  570.   #--------------------------------------------------------------------------
  571.   # ● 基本敏捷性の取得
  572.   #--------------------------------------------------------------------------
  573.   alias base_agi_KGC_DistributeParameter base_agi
  574.   def base_agi
  575.     n = base_agi_KGC_DistributeParameter + distributed_param(:agi)
  576.     return n
  577.   end
  578.   #--------------------------------------------------------------------------
  579.   # ● 命中率の取得
  580.   #--------------------------------------------------------------------------
  581.   alias hit_KGC_DistributeParameter hit
  582.   def hit
  583.     n = hit_KGC_DistributeParameter + distributed_param(:hit)
  584.     return n
  585.   end
  586.   #--------------------------------------------------------------------------
  587.   # ● 回避率の取得
  588.   #--------------------------------------------------------------------------
  589.   alias eva_KGC_DistributeParameter eva
  590.   def eva
  591.     n = eva_KGC_DistributeParameter + distributed_param(:eva)
  592.     return n
  593.   end
  594.   #--------------------------------------------------------------------------
  595.   # ● クリティカル率の取得
  596.   #--------------------------------------------------------------------------
  597.   alias cri_KGC_DistributeParameter cri
  598.   def cri
  599.     n = cri_KGC_DistributeParameter + distributed_param(:cri)
  600.     return n
  601.   end
  602.   #--------------------------------------------------------------------------
  603.   # ● 狙われやすさの取得
  604.   #--------------------------------------------------------------------------
  605.   alias odds_KGC_DistributeParameter odds
  606.   def odds
  607.     n = odds_KGC_DistributeParameter + distributed_param(:odds)
  608.     return n
  609.   end
  610.   #--------------------------------------------------------------------------
  611.   # ○ MaxRP の取得
  612.   #--------------------------------------------------------------------------
  613.   def maxrp
  614.     n = Integer(eval(KGC::DistributeParameter::MAXRP_EXP))
  615.     return [n + maxrp_plus, 0].max
  616.   end
  617.   #--------------------------------------------------------------------------
  618.   # ○ MaxRP 補正値の取得
  619.   #--------------------------------------------------------------------------
  620.   def maxrp_plus
  621.     @maxrp_plus = 0 if @maxrp_plus == nil
  622.     return @maxrp_plus
  623.   end
  624.   #--------------------------------------------------------------------------
  625.   # ○ RP の取得
  626.   #--------------------------------------------------------------------------
  627.   def rp
  628.     return [maxrp - @rp_cost, 0].max
  629.   end
  630.   #--------------------------------------------------------------------------
  631.   # ○ 振り分け回数の取得
  632.   #     param : 振り分け先パラメータ (キー)
  633.   #--------------------------------------------------------------------------
  634.   def distributed_count(param)
  635.     clear_distribution_values     if @distributed_count == nil
  636.     @distributed_count[param] = 0 if @distributed_count[param] == nil
  637.     return @distributed_count[param]
  638.   end
  639.   #--------------------------------------------------------------------------
  640.   # ○ RP の増減
  641.   #     value : 増減量
  642.   #--------------------------------------------------------------------------
  643.   def gain_rp(value)
  644.     @maxrp_plus = maxrp_plus + value
  645.   end
  646.   #--------------------------------------------------------------------------
  647.   # ○ 振り分け回数の増減
  648.   #     param : 振り分け先パラメータ (キー)
  649.   #     value : 増減量
  650.   #--------------------------------------------------------------------------
  651.   def gain_distributed_count(param, value = 1)
  652.     n = distributed_count(param)
  653.     @distributed_count[param] += value if n.is_a?(Integer)
  654.   end
  655.   #--------------------------------------------------------------------------
  656.   # ○ RP 振り分けによる成長効果適用
  657.   #     param   : 振り分け先パラメータ (キー)
  658.   #     reverse : 逆加算のときは true
  659.   #--------------------------------------------------------------------------
  660.   def rp_growth_effect(param, reverse = false)
  661.     gain = gain_parameter(param)
  662.     return if gain == nil  # 無効なパラメータ

  663.     if reverse
  664.       return if distributed_count(param) == 0  # 逆加算不可
  665.     else
  666.       return unless can_distribute?(param)
  667.     end

  668.     gain_distributed_count(param, reverse ? -1 : 1)
  669.     restore_distribution_values
  670.   end
  671.   #--------------------------------------------------------------------------
  672.   # ○ パラメータ振り分け可否判定
  673.   #     param : 振り分け先パラメータ (キー)
  674.   #--------------------------------------------------------------------------
  675.   def can_distribute?(param)
  676.     gain = gain_parameter(param)
  677.     return false if gain == nil                        # 無効なパラメータ
  678.     return false if self.rp < distribute_cost(param)   # RP 不足
  679.     if gain.limit > 0
  680.       return false if gain.limit <= distributed_count(param)  # 回数上限
  681.     end

  682.     return true
  683.   end
  684.   #--------------------------------------------------------------------------
  685.   # ○ パラメータ振り分けコスト計算
  686.   #     param : 振り分け先パラメータ (キー)
  687.   #--------------------------------------------------------------------------
  688.   def distribute_cost(param)
  689.     gain = gain_parameter(param)
  690.     return 0 if gain == nil  # 無効なパラメータ

  691.     n = gain.cost
  692.     count = distributed_count(param)
  693.     count = [count, gain.limit - 1].min if gain.limit > 0
  694.     n += gain.cost_rev * count
  695.     return [Integer(n), 0].max
  696.   end
  697.   #--------------------------------------------------------------------------
  698.   # ○ パラメータ振り分け後の増加量計算
  699.   #     param : 振り分け先パラメータ (キー)
  700.   #     amt   : 振り分け数
  701.   #--------------------------------------------------------------------------
  702.   def distribute_gain(param, amt = 1)
  703.     gain = gain_parameter(param)
  704.     # 無効なパラメータ
  705.     return 0 if gain == nil

  706.     result = {}
  707.     KGC::DistributeParameter::PARAMS.each { |par|
  708.       result[par] = distributed_param(par)
  709.     }
  710.     # 振り分け不可
  711.     if amt > 0
  712.       return result if gain.limit > 0 && gain.limit == distributed_count(param)
  713.     else
  714.       return result if distributed_count(param) + amt < 0
  715.     end

  716.     last_hp = self.hp
  717.     last_mp = self.mp
  718.     last_count = distributed_count(param)
  719.     rp_growth_effect(param)
  720.     KGC::DistributeParameter::PARAMS.each { |par|
  721.       result[par] = distributed_param(par) if gain.params.include?(par)
  722.     }
  723.     rp_growth_effect(param, true) if last_count < distributed_count(param)
  724.     self.hp = last_hp
  725.     self.mp = last_mp

  726.     return result
  727.   end
  728. end

  729. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  730. #==============================================================================
  731. # ■ Window_Base
  732. #==============================================================================

  733. class Window_Base < Window
  734.   #--------------------------------------------------------------------------
  735.   # ○ RP の文字色を取得
  736.   #     actor : アクター
  737.   #--------------------------------------------------------------------------
  738.   def rp_color(actor)
  739.     return (actor.rp == 0 ? knockout_color : normal_color)
  740.   end
  741.   #--------------------------------------------------------------------------
  742.   # ○ 振り分けゲージの色 1 の取得
  743.   #--------------------------------------------------------------------------
  744.   def distribute_gauge_color1
  745.     color = KGC::DistributeParameter::GAUGE_START_COLOR
  746.     return (color.is_a?(Integer) ? text_color(color) : color)
  747.   end
  748.   #--------------------------------------------------------------------------
  749.   # ○ 振り分けゲージの色 2 の取得
  750.   #--------------------------------------------------------------------------
  751.   def distribute_gauge_color2
  752.     color = KGC::DistributeParameter::GAUGE_END_COLOR
  753.     return (color.is_a?(Integer) ? text_color(color) : color)
  754.   end
  755.   #--------------------------------------------------------------------------
  756.   # ○ RP の描画
  757.   #     actor : アクター
  758.   #     x     : 描画先 X 座標
  759.   #     y     : 描画先 Y 座標
  760.   #     width : 幅
  761.   #--------------------------------------------------------------------------
  762.   def draw_actor_rp(actor, x, y, width = 120)
  763.     self.contents.font.color = system_color
  764.     self.contents.draw_text(x, y, 40, WLH, Vocab::rp_a)
  765.     self.contents.font.color = rp_color(actor)
  766.     xr = x + width
  767.     if width < 120
  768.       self.contents.draw_text(xr - 40, y, 40, WLH, actor.rp, 2)
  769.     else
  770.       self.contents.draw_text(xr - 90, y, 40, WLH, actor.rp, 2)
  771.       self.contents.font.color = normal_color
  772.       self.contents.draw_text(xr - 50, y, 10, WLH, "/", 2)
  773.       self.contents.draw_text(xr - 40, y, 40, WLH, actor.maxrp, 2)
  774.     end
  775.     self.contents.font.color = normal_color
  776.   end
  777.   #--------------------------------------------------------------------------
  778.   # ○ 振り分けゲージの描画
  779.   #     actor : アクター
  780.   #     param : パラメータ
  781.   #     x     : 描画先 X 座標
  782.   #     y     : 描画先 Y 座標
  783.   #     width : 幅
  784.   #--------------------------------------------------------------------------
  785.   def draw_actor_distribute_gauge(actor, param, x, y, width = 120)
  786.     gain = actor.gain_parameter(param)
  787.     return if gain == nil || gain.limit <= 0

  788.     if KGC::DistributeParameter::ENABLE_GENERIC_GAUGE &&
  789.         $imported["GenericGauge"]
  790.       # 汎用ゲージ
  791.       draw_gauge(KGC::DistributeParameter::GAUGE_IMAGE,
  792.         x, y, width, actor.distributed_count(param), gain.limit,
  793.         KGC::DistributeParameter::GAUGE_OFFSET,
  794.         KGC::DistributeParameter::GAUGE_LENGTH,
  795.         KGC::DistributeParameter::GAUGE_SLOPE)
  796.     else
  797.       # デフォルトゲージ
  798.       gw = width * actor.distributed_count(param) / gain.limit
  799.       gc1 = distribute_gauge_color1
  800.       gc2 = distribute_gauge_color2
  801.       self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
  802.       self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
  803.     end
  804.   end
  805. end

  806. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  807. #==============================================================================
  808. # ■ Window_Command
  809. #==============================================================================

  810. class Window_Command < Window_Selectable
  811.   unless method_defined?(:add_command)
  812.   #--------------------------------------------------------------------------
  813.   # ○ コマンドを追加
  814.   #    追加した位置を返す
  815.   #--------------------------------------------------------------------------
  816.   def add_command(command)
  817.     @commands << command
  818.     @item_max = @commands.size
  819.     item_index = @item_max - 1
  820.     refresh_command
  821.     draw_item(item_index)
  822.     return item_index
  823.   end
  824.   #--------------------------------------------------------------------------
  825.   # ○ コマンドをリフレッシュ
  826.   #--------------------------------------------------------------------------
  827.   def refresh_command
  828.     buf = self.contents.clone
  829.     self.height = [self.height, row_max * WLH + 32].max
  830.     create_contents
  831.     self.contents.blt(0, 0, buf, buf.rect)
  832.     buf.dispose
  833.   end
  834.   #--------------------------------------------------------------------------
  835.   # ○ コマンドを挿入
  836.   #--------------------------------------------------------------------------
  837.   def insert_command(index, command)
  838.     @commands.insert(index, command)
  839.     @item_max = @commands.size
  840.     refresh_command
  841.     refresh
  842.   end
  843.   #--------------------------------------------------------------------------
  844.   # ○ コマンドを削除
  845.   #--------------------------------------------------------------------------
  846.   def remove_command(command)
  847.     @commands.delete(command)
  848.     @item_max = @commands.size
  849.     refresh
  850.   end
  851.   end
  852. end

  853. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  854. #==============================================================================
  855. # □ Window_DistributeParameterActor
  856. #------------------------------------------------------------------------------
  857. #   振り分け画面で、アクターの情報を表示するウィンドウです。
  858. #==============================================================================

  859. class Window_DistributeParameterActor < Window_Base
  860.   #--------------------------------------------------------------------------
  861.   # ● オブジェクト初期化
  862.   #     x     : ウィンドウの X 座標
  863.   #     y     : ウィンドウの Y 座標
  864.   #     actor : アクター
  865.   #--------------------------------------------------------------------------
  866.   def initialize(x, y, actor)
  867.     super(x, y, Graphics.width, WLH + 32)
  868.     @actor = actor
  869.     refresh
  870.   end
  871.   #--------------------------------------------------------------------------
  872.   # ● リフレッシュ
  873.   #--------------------------------------------------------------------------
  874.   def refresh
  875.     self.contents.clear
  876.     draw_actor_name(@actor, 4, 0)
  877.     draw_actor_level(@actor, 140, 0)
  878.     draw_actor_rp(@actor, 240, 0)
  879.   end
  880. end

  881. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  882. #==============================================================================
  883. # □ Window_DistributeParameterList
  884. #------------------------------------------------------------------------------
  885. #   振り分け画面で、成長させるパラメータを選択するウィンドウです。
  886. #==============================================================================

  887. class Window_DistributeParameterList < Window_Selectable
  888.   #--------------------------------------------------------------------------
  889.   # ● オブジェクト初期化
  890.   #     actor : アクター
  891.   #--------------------------------------------------------------------------
  892.   def initialize(actor)
  893.     off_h = WLH + 32
  894.     super(0, off_h, 286, Graphics.height - off_h)
  895.     @actor = actor
  896.     refresh
  897.     self.index = 0
  898.   end
  899.   #--------------------------------------------------------------------------
  900.   # ○ 選択中のパラメータの Symbol を取得
  901.   #--------------------------------------------------------------------------
  902.   def parameter_key
  903.     return @data[self.index]
  904.   end
  905.   #--------------------------------------------------------------------------
  906.   # ● 1 ページに表示できる行数の取得
  907.   #--------------------------------------------------------------------------
  908.   def page_row_max
  909.     return super - 1
  910.   end
  911.   #--------------------------------------------------------------------------
  912.   # ● 項目を描画する矩形の取得
  913.   #     index : 項目番号
  914.   #--------------------------------------------------------------------------
  915.   def item_rect(index)
  916.     rect = super(index)
  917.     rect.y += WLH
  918.     return rect
  919.   end
  920.   #--------------------------------------------------------------------------
  921.   # ● カーソルを 1 ページ後ろに移動
  922.   #--------------------------------------------------------------------------
  923.   def cursor_pagedown
  924.     return if Input.repeat?(Input::R)
  925.     super
  926.   end
  927.   #--------------------------------------------------------------------------
  928.   # ● カーソルを 1 ページ前に移動
  929.   #--------------------------------------------------------------------------
  930.   def cursor_pageup
  931.     return if Input.repeat?(Input::L)
  932.     super
  933.   end
  934.   #--------------------------------------------------------------------------
  935.   # ● リフレッシュ
  936.   #--------------------------------------------------------------------------
  937.   def refresh
  938.     @gain_list = @actor.gain_parameter_list
  939.     @data = []
  940.     @gain_list.each { |gain| @data << gain.key }
  941.     @item_max = @data.size + 1
  942.     create_contents
  943.     @item_max -= 1
  944.     draw_caption
  945.     @item_max.times { |i| draw_item(i, @actor.can_distribute?(@data[i])) }
  946.   end
  947.   #--------------------------------------------------------------------------
  948.   # ○ 見出しの描画
  949.   #--------------------------------------------------------------------------
  950.   def draw_caption
  951.     self.contents.font.color = system_color
  952.     self.contents.draw_text(  4, 0, 96, WLH, "點數分配")
  953.     self.contents.draw_text(120, 0, 40, WLH, Vocab.rp, 2)
  954.     self.contents.draw_text(170, 0, 80, WLH, "回数", 2)
  955.     self.contents.font.color = normal_color
  956.   end
  957.   #--------------------------------------------------------------------------
  958.   # ○ 項目の描画
  959.   #     index   : 項目番号
  960.   #     enabled : 有効フラグ
  961.   #--------------------------------------------------------------------------
  962.   def draw_item(index, enabled = true)
  963.     rect = item_rect(index)
  964.     self.contents.clear_rect(rect)
  965.     item = @data[index]
  966.     if item != nil
  967.       draw_parameter(rect.x, rect.y, @data[index], enabled)
  968.     end
  969.   end
  970.   #--------------------------------------------------------------------------
  971.   # ○ 能力値の描画
  972.   #     x       : 描画先 X 座標
  973.   #     y       : 描画先 Y 座標
  974.   #     param   : 振り分け先
  975.   #     enabled : 有効フラグ
  976.   #--------------------------------------------------------------------------
  977.   def draw_parameter(x, y, param, enabled)
  978.     gain = @gain_list.find { |v| v.key == param }
  979.     return if gain == nil

  980.     self.contents.font.color = normal_color
  981.     self.contents.font.color.alpha = enabled ? 255 : 128
  982.     self.contents.draw_text(x + 4, y, 96, WLH, gain.name)

  983.     value = @actor.distribute_cost(param)
  984.     self.contents.draw_text(x + 120, y, 40, WLH, value, 2)
  985.     if gain.limit > 0
  986.       value = sprintf("%3d/%3d", @actor.distributed_count(param), gain.limit)
  987.     else
  988.       value = sprintf("%3d%s", @actor.distributed_count(param),
  989.         KGC::DistributeParameter::HIDE_MAX_COUNT_INFINITE ? "" : "/---")
  990.     end
  991.     draw_actor_distribute_gauge(@actor, param, x + 170, y, 80)
  992.     self.contents.draw_text(x + 170, y, 80, WLH, value, 2)
  993.     self.contents.font.color = normal_color
  994.   end
  995. end

  996. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  997. #==============================================================================
  998. # □ Window_DistributeParameterStatus
  999. #------------------------------------------------------------------------------
  1000. #   振り分け画面で、アクターのステータスを表示するウィンドウです。
  1001. #==============================================================================

  1002. class Window_DistributeParameterStatus < Window_Base
  1003.   #--------------------------------------------------------------------------
  1004.   # ● オブジェクト初期化
  1005.   #     actor : アクター
  1006.   #--------------------------------------------------------------------------
  1007.   def initialize(actor)
  1008.     dx = 286
  1009.     off_h = WLH + 32
  1010.     super(dx, off_h, Graphics.width - dx, Graphics.height - off_h)
  1011.     @actor = actor
  1012.     refresh(actor.gain_parameter_list[0].key)
  1013.   end
  1014.   #--------------------------------------------------------------------------
  1015.   # ● リフレッシュ
  1016.   #--------------------------------------------------------------------------
  1017.   def refresh(param = nil)
  1018.     @distribute_gain = nil
  1019.     if param != nil
  1020.       @distribute_gain = @actor.distribute_gain(param)
  1021.     end

  1022.     self.contents.clear
  1023.     self.contents.font.color = system_color
  1024.     self.contents.draw_text(0, 0, width - 32, WLH, "點數分配變化", 1)
  1025.     self.contents.font.color = normal_color
  1026.     dy = WLH
  1027.     KGC::DistributeParameter::PARAMS.each { |param|
  1028.       draw_parameter(0, dy, param)
  1029.       dy += WLH
  1030.     }
  1031.   end
  1032.   #--------------------------------------------------------------------------
  1033.   # ○ 能力値の描画
  1034.   #     x    : 描画先 X 座標
  1035.   #     y    : 描画先 Y 座標
  1036.   #     type : 能力値の種類
  1037.   #--------------------------------------------------------------------------
  1038.   def draw_parameter(x, y, type)
  1039.     case type
  1040.     when :maxhp
  1041.       name  = Vocab.hp
  1042.       value = @actor.maxhp
  1043.     when :maxmp
  1044.       name  = Vocab.mp
  1045.       value = @actor.maxmp
  1046.     when :atk
  1047.       name  = Vocab.atk
  1048.       value = @actor.atk
  1049.     when :def
  1050.       name  = Vocab.def
  1051.       value = @actor.def
  1052.     when :spi
  1053.       name  = Vocab.spi
  1054.       value = @actor.spi
  1055.     when :agi
  1056.       name  = Vocab.agi
  1057.       value = @actor.agi
  1058.     when :hit
  1059.       name  = Vocab.hit
  1060.       value = @actor.hit
  1061.     when :eva
  1062.       name  = Vocab.eva
  1063.       value = @actor.eva
  1064.     when :cri
  1065.       name  = Vocab.cri
  1066.       value = @actor.cri
  1067.     when :skill_speed
  1068.       name  = Vocab.skill_speed
  1069.       value = @actor.distributed_param(type)
  1070.     when :item_speed
  1071.       name  = Vocab.item_speed
  1072.       value = @actor.distributed_param(type)
  1073.     when :odds
  1074.       name  = Vocab.odds
  1075.       value = @actor.odds
  1076.     else
  1077.       return
  1078.     end
  1079.     self.contents.font.color = system_color
  1080.     self.contents.draw_text(x + 4, y, 96, WLH, name)
  1081.     self.contents.font.color = normal_color
  1082.     self.contents.draw_text(x + 106, y, 48, WLH, value, 2)
  1083.    
  1084.     return if @distribute_gain == nil

  1085.     self.contents.draw_text(x + 154, y, 16, WLH, "→", 1)

  1086.     curr = @actor.distributed_param(type)
  1087.     gain = @distribute_gain[type]
  1088.     self.contents.font.color = (gain > curr ? text_color(3) :
  1089.       gain < curr ? text_color(2) : normal_color)
  1090.     self.contents.draw_text(x + 174, y, 48, WLH, value + (gain - curr), 2)

  1091.     self.contents.font.color = normal_color
  1092.   end
  1093. end

  1094. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  1095. #==============================================================================
  1096. # ■ Scene_Map
  1097. #==============================================================================

  1098. class Scene_Map < Scene_Base
  1099.   #--------------------------------------------------------------------------
  1100.   # ● 画面切り替えの実行
  1101.   #--------------------------------------------------------------------------
  1102.   alias update_scene_change_KGC_DistributeParameter update_scene_change
  1103.   def update_scene_change
  1104.     return if $game_player.moving?    # プレイヤーの移動中?

  1105.     if $game_temp.next_scene == :distribute_parameter
  1106.       call_distribute_parameter
  1107.       return
  1108.     end

  1109.     update_scene_change_KGC_DistributeParameter
  1110.   end
  1111.   #--------------------------------------------------------------------------
  1112.   # ○ パラメータ振り分け画面への切り替え
  1113.   #--------------------------------------------------------------------------
  1114.   def call_distribute_parameter
  1115.     $game_temp.next_scene = nil
  1116.     $scene = Scene_DistributeParameter.new(
  1117.       $game_temp.next_scene_actor_index,
  1118.       0,
  1119.       Scene_DistributeParameter::HOST_MAP)
  1120.   end
  1121. end

  1122. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  1123. #==============================================================================
  1124. # ■ Scene_Menu
  1125. #==============================================================================

  1126. class Scene_Menu < Scene_Base
  1127.   if KGC::DistributeParameter::USE_MENU_DISTRIBUTE_PARAMETER_COMMAND
  1128.   #--------------------------------------------------------------------------
  1129.   # ● コマンドウィンドウの作成
  1130.   #--------------------------------------------------------------------------
  1131.   alias create_command_window_KGC_DistributeParameter create_command_window
  1132.   def create_command_window
  1133.     create_command_window_KGC_DistributeParameter

  1134.     return if $imported["CustomMenuCommand"]

  1135.     @__command_distribute_parameter_index =
  1136.       @command_window.add_command(Vocab.distribute_parameter)
  1137.     if @command_window.oy > 0
  1138.       @command_window.oy -= Window_Base::WLH
  1139.     end
  1140.     @command_window.index = @menu_index
  1141.   end
  1142.   end
  1143.   #--------------------------------------------------------------------------
  1144.   # ● コマンド選択の更新
  1145.   #--------------------------------------------------------------------------
  1146.   alias update_command_selection_KGC_DistributeParameter update_command_selection
  1147.   def update_command_selection
  1148.     call_distribute_parameter_flag = false
  1149.     if Input.trigger?(Input::C)
  1150.       case @command_window.index
  1151.       when @__command_distribute_parameter_index  # パラメータ振り分け
  1152.         call_distribute_parameter_flag = true
  1153.       end
  1154.     end

  1155.     # パラメータ振り分け画面に移行
  1156.     if call_distribute_parameter_flag
  1157.       if $game_party.members.size == 0
  1158.         Sound.play_buzzer
  1159.         return
  1160.       end
  1161.       Sound.play_decision
  1162.       start_actor_selection
  1163.       return
  1164.     end

  1165.     update_command_selection_KGC_DistributeParameter
  1166.   end
  1167.   #--------------------------------------------------------------------------
  1168.   # ● アクター選択の更新
  1169.   #--------------------------------------------------------------------------
  1170.   alias update_actor_selection_KGC_DistributeParameter update_actor_selection
  1171.   def update_actor_selection
  1172.     if Input.trigger?(Input::C)
  1173.       $game_party.last_actor_index = @status_window.index
  1174.       Sound.play_decision
  1175.       case @command_window.index
  1176.       when @__command_distribute_parameter_index  # パラメータ振り分け
  1177.         $scene = Scene_DistributeParameter.new(
  1178.           @status_window.index,
  1179.           @__command_distribute_parameter_index,
  1180.           Scene_DistributeParameter::HOST_MENU)
  1181.         return
  1182.       end
  1183.     end

  1184.     update_actor_selection_KGC_DistributeParameter
  1185.   end
  1186. end

  1187. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  1188. #==============================================================================
  1189. # □ Scene_DistributeParameter
  1190. #------------------------------------------------------------------------------
  1191. #   パラメータ振り分け画面の処理を行うクラスです。
  1192. #==============================================================================

  1193. class Scene_DistributeParameter < Scene_Base
  1194.   #--------------------------------------------------------------------------
  1195.   # ○ 定数
  1196.   #--------------------------------------------------------------------------
  1197.   HOST_MENU   = 0  # 呼び出し元 : メニュー
  1198.   HOST_MAP    = 1  # 呼び出し元 : マップ
  1199.   #--------------------------------------------------------------------------
  1200.   # ● オブジェクト初期化
  1201.   #     actor_index : アクターインデックス
  1202.   #     menu_index  : コマンドのカーソル初期位置
  1203.   #     host_scene  : 呼び出し元 (0..メニュー  1..マップ)
  1204.   #--------------------------------------------------------------------------
  1205.   def initialize(actor_index = 0, menu_index = 0, host_scene = HOST_MENU)
  1206.     @actor_index = actor_index
  1207.     @menu_index  = menu_index
  1208.     @host_scene  = host_scene
  1209.   end
  1210.   #--------------------------------------------------------------------------
  1211.   # ● 開始処理
  1212.   #--------------------------------------------------------------------------
  1213.   def start
  1214.     super
  1215.     create_menu_background

  1216.     @actor     = $game_party.members[@actor_index]
  1217.     @prev_info = @actor.distribution_info
  1218.     create_windows
  1219.   end
  1220.   #--------------------------------------------------------------------------
  1221.   # ○ ウィンドウ作成
  1222.   #--------------------------------------------------------------------------
  1223.   def create_windows
  1224.     @actor_window     = Window_DistributeParameterActor.new(0, 0, @actor)
  1225.     @parameter_window = Window_DistributeParameterList.new(@actor)
  1226.     @status_window    = Window_DistributeParameterStatus.new(@actor)

  1227.     @confirm_help_window   = Window_Help.new
  1228.     @confirm_help_window.z = @status_window.z + 100
  1229.     @confirm_help_window.openness = 0

  1230.     @confirm_window = Window_Command.new(
  1231.       KGC::DistributeParameter::CONFIRM_WIDTH,
  1232.       KGC::DistributeParameter::CONFIRM_COMMANDS)
  1233.     @confirm_window.x = (Graphics.width  - @confirm_window.width)  / 2
  1234.     @confirm_window.y = (Graphics.height - @confirm_window.height) / 2
  1235.     @confirm_window.z = @confirm_help_window.z
  1236.     @confirm_window.active   = false
  1237.     @confirm_window.openness = 0
  1238.   end
  1239.   #--------------------------------------------------------------------------
  1240.   # ● 終了処理
  1241.   #--------------------------------------------------------------------------
  1242.   def terminate
  1243.     super
  1244.     dispose_menu_background
  1245.     @actor_window.dispose
  1246.     @parameter_window.dispose
  1247.     @status_window.dispose
  1248.     @confirm_help_window.dispose
  1249.     @confirm_window.dispose
  1250.   end
  1251.   #--------------------------------------------------------------------------
  1252.   # ○ 元の画面へ戻る
  1253.   #--------------------------------------------------------------------------
  1254.   def return_scene
  1255.     case @host_scene
  1256.     when HOST_MENU
  1257.       $scene = Scene_Menu.new(@menu_index)
  1258.     when HOST_MAP
  1259.       $scene = Scene_Map.new
  1260.     end
  1261.   end
  1262.   #--------------------------------------------------------------------------
  1263.   # ● フレーム更新
  1264.   #--------------------------------------------------------------------------
  1265.   def update
  1266.     super
  1267.     update_menu_background
  1268.     update_window
  1269.     if @parameter_window.active
  1270.       update_parameter_list
  1271.     elsif @confirm_window.active
  1272.       update_confirm_command
  1273.     end
  1274.   end
  1275.   #--------------------------------------------------------------------------
  1276.   # ○ ウィンドウ更新
  1277.   #--------------------------------------------------------------------------
  1278.   def update_window
  1279.     @actor_window.update
  1280.     @parameter_window.update
  1281.     @status_window.update
  1282.     @confirm_help_window.update
  1283.     @confirm_window.update
  1284.   end
  1285.   #--------------------------------------------------------------------------
  1286.   # ○ ウィンドウ再描画
  1287.   #--------------------------------------------------------------------------
  1288.   def refresh_window
  1289.     @actor_window.refresh
  1290.     @parameter_window.refresh
  1291.     @status_window.refresh(@parameter_window.parameter_key)
  1292.     Graphics.frame_reset
  1293.   end
  1294.   #--------------------------------------------------------------------------
  1295.   # ○ 次のアクターの画面に切り替え
  1296.   #--------------------------------------------------------------------------
  1297.   def next_actor
  1298.     @actor_index += 1
  1299.     @actor_index %= $game_party.members.size
  1300.     $scene = Scene_DistributeParameter.new(@actor_index,
  1301.       @menu_index, @host_scene)
  1302.   end
  1303.   #--------------------------------------------------------------------------
  1304.   # ○ 前のアクターの画面に切り替え
  1305.   #--------------------------------------------------------------------------
  1306.   def prev_actor
  1307.     @actor_index += $game_party.members.size - 1
  1308.     @actor_index %= $game_party.members.size
  1309.     $scene = Scene_DistributeParameter.new(@actor_index,
  1310.       @menu_index, @host_scene)
  1311.   end
  1312.   #--------------------------------------------------------------------------
  1313.   # ○ フレーム更新 (パラメータウィンドウがアクティブの場合)
  1314.   #--------------------------------------------------------------------------
  1315.   def update_parameter_list
  1316.     if @last_index != @parameter_window.index
  1317.       @status_window.refresh(@parameter_window.parameter_key)
  1318.       @last_index = @parameter_window.index
  1319.     end

  1320.     if Input.trigger?(Input::B)
  1321.       Sound.play_cancel
  1322.       activate_confirm_window
  1323.     elsif Input.trigger?(Input::C)
  1324.       Sound.play_decision
  1325.       activate_confirm_window
  1326.     elsif Input.repeat?(Input::RIGHT)
  1327.       # 加算
  1328.       param = @parameter_window.parameter_key
  1329.       unless @actor.can_distribute?(param)
  1330.         Sound.play_buzzer
  1331.         return
  1332.       end
  1333.       Sound.play_cursor
  1334.       @actor.rp_growth_effect(param)
  1335.       refresh_window
  1336.     elsif Input.repeat?(Input::LEFT)
  1337.       # 減算
  1338.       param = @parameter_window.parameter_key
  1339.       unless reversible?(param)
  1340.         Sound.play_buzzer
  1341.         return
  1342.       end
  1343.       Sound.play_cursor
  1344.       @actor.rp_growth_effect(param, true)
  1345.       refresh_window
  1346.     elsif Input.trigger?(Input::R)
  1347.       Sound.play_cursor
  1348.       next_actor
  1349.     elsif Input.trigger?(Input::L)
  1350.       Sound.play_cursor
  1351.       prev_actor
  1352.     end
  1353.   end
  1354.   #--------------------------------------------------------------------------
  1355.   # ○ 減算可否判定
  1356.   #     param : 対象パラメータ
  1357.   #--------------------------------------------------------------------------
  1358.   def reversible?(param)
  1359.     return false if @actor.distributed_count(param) == 0
  1360.     return true  if KGC::DistributeParameter::ENABLE_REVERSE_DISTRIBUTE

  1361.     base = @prev_info.count[param]
  1362.     return ( base < @actor.distributed_count(param) )
  1363.   end
  1364.   #--------------------------------------------------------------------------
  1365.   # ○ 確認ウィンドウに切り替え
  1366.   #--------------------------------------------------------------------------
  1367.   def activate_confirm_window
  1368.     @last_index = -1
  1369.     @status_window.refresh
  1370.     @confirm_window.index  = 0
  1371.     @confirm_window.active = true
  1372.     @confirm_window.open
  1373.     @confirm_help_window.open
  1374.     @parameter_window.active = false
  1375.     @last_confirm_index = -1
  1376.   end
  1377.   #--------------------------------------------------------------------------
  1378.   # ○ フレーム更新 (確認ウィンドウがアクティブの場合)
  1379.   #--------------------------------------------------------------------------
  1380.   def update_confirm_command
  1381.     if @last_confirm_index != @confirm_window.index
  1382.       @confirm_help_window.set_text(
  1383.         KGC::DistributeParameter::CONFIRM_COMMAND_HELP[@confirm_window.index])
  1384.       @last_confirm_index = @confirm_window.index
  1385.     end

  1386.     if Input.trigger?(Input::B)
  1387.       Sound.play_cancel
  1388.       # パラメータウィンドウに切り替え
  1389.       @confirm_window.active = false
  1390.       @confirm_window.close
  1391.       @confirm_help_window.close
  1392.       @parameter_window.active = true
  1393.     elsif Input.trigger?(Input::C)
  1394.       Sound.play_decision
  1395.       case @confirm_window.index
  1396.       when 0  # 確定
  1397.         return_scene
  1398.       when 1  # 中止
  1399.         @actor.set_distribution_info(@prev_info)
  1400.         return_scene
  1401.       when 2  # キャンセル
  1402.         # パラメータウィンドウに切り替え
  1403.         @confirm_window.active = false
  1404.         @confirm_window.close
  1405.         @confirm_help_window.close
  1406.         @parameter_window.active = true
  1407.       end
  1408.     end
  1409.   end
  1410. end

  1411. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  1412. #==============================================================================
  1413. # ■ Scene_File
  1414. #==============================================================================

  1415. class Scene_File < Scene_Base
  1416.   #--------------------------------------------------------------------------
  1417.   # ● セーブデータの読み込み
  1418.   #     file : 読み込み用ファイルオブジェクト (オープン済み)
  1419.   #--------------------------------------------------------------------------
  1420.   alias read_save_data_KGC_DistributeParameter read_save_data
  1421.   def read_save_data(file)
  1422.     read_save_data_KGC_DistributeParameter(file)

  1423.     KGC::Commands.check_distribution_values
  1424.     Graphics.frame_reset
  1425.   end
  1426. end
复制代码

Lv3.寻梦者

梦石
0
星屑
1409
在线时间
962 小时
注册时间
2012-4-30
帖子
1475

开拓者

2
发表于 2012-6-27 21:46:33 | 只看该作者
$scene = Scene_DistributeParameter.new
  1. #--------------------------------------------------------------------------
  2.   # ● アクター選択の更新
  3.   #--------------------------------------------------------------------------
  4.   alias update_actor_selection_KGC_DistributeParameter update_actor_selection
  5.   def update_actor_selection
  6.     if Input.trigger?(Input::C)
  7.       $game_party.last_actor_index = @status_window.index
  8.       Sound.play_decision
  9.       case @command_window.index
  10.       when @__command_distribute_parameter_index  # パラメータ振り分け
  11.         $scene = Scene_DistributeParameter.new(
  12.           @status_window.index,
  13.           @__command_distribute_parameter_index,
  14.           Scene_DistributeParameter::HOST_MENU)
  15.         return
  16.       end
  17.     end

  18.     update_actor_selection_KGC_DistributeParameter
  19.   end
复制代码
这段还是自己研究一下吧

点评

能解释一下这段吗  发表于 2012-6-28 18:34
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
55 小时
注册时间
2012-7-1
帖子
36
3
发表于 2012-7-2 12:04:18 | 只看该作者
如果这个脚步不是日文的话我可能可以帮助到你~{:2_270:}

评分

参与人数 1星屑 -40 收起 理由
Luciffer -40 如果你不这么回复的话这就不是一个水帖.

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-24 09:20

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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