Project1

标题: 【关于升级加点脚本的问题】 [打印本页]

作者: hq1107    时间: 2022-12-19 23:42
标题: 【关于升级加点脚本的问题】
问一下各位大佬,我使用了升级加点的脚本。并且按照其脚本设置了不同职业的不同加点参数。
(默认一升级点加4点atk,骑士1升级点可以加3点atk,法师1升级点可以加2atk)
但是使用中,无论什么选择什么职业 都会使用默认的加点数值比例。
RUBY 代码复制
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ パラメータ振り分け - KMS_DistributeParameter ◆ VXAce ◆
  3. #_/    ◇ Last update : 2012/08/05 (TOMY@Kamesoft) ◇
  4. #_/----------------------------------------------------------------------------
  5. #_/  パラメータ振り分け機能を作成します。
  6. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  7.  
  8. #==============================================================================
  9. # ★ 設定項目 - BEGIN Setting ★
  10. #==============================================================================
  11.  
  12. module KMS_DistributeParameter
  13. #◆参数分配部位
  14.  
  15. #分配部位及增加量
  16. # {
  17. #:key=>键,
  18. #:name=>“名称”,
  19. #:limit=>上限次数,
  20. #:cost=>“消费RP,消费RP修正”,
  21. #:参数=>[上升量,上升量修正],
  22. ##或更高版本的参数
  23. # },
  24. #格式添加。
  25. #在分配画面中,按添加的顺序显示。
  26. #“键”指定不与其他部位覆盖的名称。
  27. #(用于确定内部的分配位置。数字、字符串等都可以)
  28. #除“次数上限”以外,小数也可以。
  29. #“次数上限”为0时,次数无限制。
  30. #可省略“消耗RP修正”和“上升量修正”。省略时为0。
  31.   GAIN_PARAMETER = [
  32.   {
  33.       :key   => :health,
  34.       :name  => "体力",
  35.       :limit => 100,
  36.       :cost  => [ 1, 0.1],
  37.       :mhp   => [30, 0.3],
  38.     },
  39.     {
  40.       :key   => :magic,
  41.       :name  => "魔力",
  42.       :limit => 100,
  43.       :cost  => [1, 0.05],
  44.       :mat   => [2, 0.05],
  45.     },
  46.     {
  47.       :key   => :pow,
  48.       :name  => "力量",
  49.       :limit => 100,
  50.       :cost  => [1, 0.1],
  51.       :atk   => [4, 0.1],
  52.       :mhp   => [10, 1]
  53.     },
  54.     {
  55.       :key   => :dex,
  56.       :name  => "防御",
  57.       :limit => 100,
  58.       :cost  => [1, 0.1],
  59.       :mdf   => [2, 0.5],
  60.       :def   => [2, 0.5],
  61.       :eva   => [0.001],
  62.     },
  63.     {
  64.       :key   => :SPD,
  65.       :name  => "敏捷",
  66.       :limit => 100,
  67.       :cost  => [1, 0.05],
  68.       :agi   => [2, 0.2],
  69.       :mdf   => [1, 0.1],
  70.       :eva   => [0.001],
  71.     },
  72.     {
  73.       :key   => :luk,
  74.       :name  => "幸运",
  75.       :limit => 20,
  76.       :cost  => [1],
  77.       :luk   => [1]
  78.     },
  79.     {
  80.       :key   => :hit,
  81.       :name  => "命中率",
  82.       :limit => 20,
  83.       :cost  => [1, 0.5],
  84.       :hit   => [0.01],
  85.     },
  86.     {
  87.       :key   => :eva,
  88.       :name  => "回避率",
  89.       :limit => 10,
  90.       :cost  => [1, 0.5],
  91.       :eva   => [0.01],
  92.     },
  93.     {
  94.       :key   => :crt,
  95.       :name  => "暴击率",
  96.       :limit => 10,
  97.       :cost  => [1, 0.7],
  98.       :cri   => [0.01],
  99.     },
  100.     {
  101.       :key         => :chant,
  102.       :name        => "詠唱速度",
  103.       :limit       => 0,
  104.       :cost        => [1],
  105.       :skill_speed => [1],
  106.     },
  107.     {
  108.       :key        => :item,
  109.       :name       => "物品使用速度",
  110.       :limit      => 0,
  111.       :cost       => [1],
  112.       :item_speed => [1],
  113.     },
  114.  
  115.   ]  # ← この ] は消さないこと!
  116.  
  117.   # ◆ アクター固有のパラメータ増加量
  118.   PERSONAL_GAIN_PARAMETER = []
  119.   #  ここから下に、アクターごとの振り分け時の増加量を
  120.   #   PERSONAL_GAIN_PARAMETER[アクター ID] = [ 振り分け箇所 ]
  121.   #  という書式で指定。
  122.   #  「振り分け箇所」は GAIN_PARAMETER と同様の書式。
  123.   #  キーが GAIN_PARAMETER と同じ場合、GAIN_PARAMETER に上書き。
  124.   #  指定しなかったパラメータ/アクターは GAIN_PARAMETER を使用。
  125.   #
  126.   # <例> アクター1の "体力" を個別に指定。
  127.   PERSONAL_GAIN_PARAMETER[1] = [
  128.     {
  129.       :key   => :health,
  130.       :name  => "体力",
  131.       :limit => 30,
  132.       :cost  => [ 1, 0.4],
  133.       :mhp   => [50, 3],
  134.       :def   => [ 1, 0.3],
  135.     },
  136.   ]
  137.   # ◆ 職業固有のパラメータ増加量
  138.    CLASS_GAIN_PARAMETER = []
  139.   #  ここから下に、職業ごとの振り分け時の増加量を
  140.   #   CLASS_GAIN_PARAMETER[職業 ID] = [ 振り分け箇所 ]
  141.   #  という書式で指定。
  142.   #  その他はアクター固有の設定と同様。
  143.   #  (優先度は  職業 > アクター > デフォルト)
  144.  
  145.   CLASS_GAIN_PARAMETER[3] = [
  146.    {
  147.       :key   => :health,
  148.       :name  => "体力",
  149.       :limit => 150,
  150.       :cost  => [ 1, 0.1],
  151.       :mhp   => [30, 0.3],
  152.     },
  153.     {
  154.       :key   => :magic,
  155.       :name  => "魔力",
  156.       :limit => 30,
  157.       :cost  => [1, 0.05],
  158.       :mat   => [2, 0.05],
  159.     },
  160.     {
  161.       :key   => :pow,
  162.       :name  => "力量",
  163.       :limit => 150,
  164.       :cost  => [1, 0.1],
  165.       :atk   => [3, 0.1],
  166.       :mhp   => [10, 1]
  167.     },
  168.     {
  169.       :key   => :dex,
  170.       :name  => "防御",
  171.       :limit => 150,
  172.       :cost  => [1, 0.1],
  173.       :mdf   => [2, 0.5],
  174.       :def   => [2, 0.5],
  175.       :eva   => [0.001],
  176.     },
  177.     {
  178.       :key   => :SPD,
  179.       :name  => "敏捷",
  180.       :limit => 60,
  181.       :cost  => [1, 0.05],
  182.       :agi   => [2, 0.2],
  183.       :mdf   => [1, 0.1],
  184.       :eva   => [0.001],
  185.     },
  186.     {
  187.       :key   => :luk,
  188.       :name  => "幸运",
  189.       :limit => 30,
  190.       :cost  => [1],
  191.       :luk   => [1]
  192.     },
  193.     {
  194.       :key   => :hit,
  195.       :name  => "命中率",
  196.       :limit => 30,
  197.       :cost  => [1, 0.5],
  198.       :hit   => [0.01],
  199.     },
  200.     {
  201.       :key   => :eva,
  202.       :name  => "回避率",
  203.       :limit => 0,
  204.       :cost  => [1, 0.5],
  205.       :eva   => [0.01],
  206.     },
  207.     {
  208.       :key   => :crt,
  209.       :name  => "暴击率",
  210.       :limit => 10,
  211.       :cost  => [1, 0.7],
  212.       :cri   => [0.01],
  213.     },
  214.     {
  215.       :key         => :chant,
  216.       :name        => "詠唱速度",
  217.       :limit       => 0,
  218.       :cost        => [1],
  219.       :skill_speed => [1],
  220.     },
  221.     {
  222.       :key        => :item,
  223.       :name       => "物品使用速度",
  224.       :limit      => 0,
  225.       :cost       => [1],
  226.       :item_speed => [1],
  227.     },
  228. ]
  229.   CLASS_GAIN_PARAMETER[4] = [
  230. {
  231.       :key   => :health,
  232.       :name  => "体力",
  233.       :limit => 60,
  234.       :cost  => [ 1, 0.1],
  235.       :mhp   => [50, 0.5],
  236.     },
  237.     {
  238.       :key   => :magic,
  239.       :name  => "魔力",
  240.       :limit => 20,
  241.       :cost  => [1, 0.05],
  242.       :mat   => [2, 0.05],
  243.     },
  244.     {
  245.       :key   => :pow,
  246.       :name  => "力量",
  247.       :limit => 100,
  248.       :cost  => [1, 0.1],
  249.       :atk   => [2, 0.1],
  250.       :mhp   => [10, 1]
  251.     },
  252.     {
  253.       :key   => :dex,
  254.       :name  => "防御",
  255.       :limit => 60,
  256.       :cost  => [1, 0.1],
  257.       :mdf   => [2, 0.5],
  258.       :def   => [2, 0.5],
  259.       :eva   => [0.001],
  260.     },
  261.     {
  262.       :key   => :SPD,
  263.       :name  => "敏捷",
  264.       :limit => 230,
  265.       :cost  => [1, 0.05],
  266.       :agi   => [2, 0.2],
  267.       :mdf   => [1, 0.1],
  268.       :eva   => [0.001],
  269.     },
  270.     {
  271.       :key   => :luk,
  272.       :name  => "幸运",
  273.       :limit => 40,
  274.       :cost  => [1],
  275.       :luk   => [1]
  276.     },
  277.     {
  278.       :key   => :hit,
  279.       :name  => "命中率",
  280.       :limit => 40,
  281.       :cost  => [1, 0.5],
  282.       :hit   => [0.01],
  283.     },
  284.     {
  285.       :key   => :eva,
  286.       :name  => "回避率",
  287.       :limit => 30,
  288.       :cost  => [1, 0.5],
  289.       :eva   => [0.01],
  290.     },
  291.     {
  292.       :key   => :crt,
  293.       :name  => "暴击率",
  294.       :limit => 30,
  295.       :cost  => [1, 0.7],
  296.       :cri   => [0.01],
  297.     },
  298.     {
  299.       :key         => :chant,
  300.       :name        => "詠唱速度",
  301.       :limit       => 0,
  302.       :cost        => [1],
  303.       :skill_speed => [1],
  304.     },
  305.     {
  306.       :key        => :item,
  307.       :name       => "物品使用速度",
  308.       :limit      => 0,
  309.       :cost       => [1],
  310.       :item_speed => [1],
  311.     },
  312. ]
  313.   CLASS_GAIN_PARAMETER[5] = [
  314. {
  315.       :key   => :health,
  316.       :name  => "体力",
  317.       :limit => 100,
  318.       :cost  => [ 1, 0.1],
  319.       :mhp   => [30, 0.3],
  320.     },
  321.     {
  322.       :key   => :magic,
  323.       :name  => "魔力",
  324.       :limit => 100,
  325.       :cost  => [1, 0.05],
  326.       :mat   => [2, 0.05],
  327.     },
  328.     {
  329.       :key   => :pow,
  330.       :name  => "力量",
  331.       :limit => 100,
  332.       :cost  => [1, 0.1],
  333.       :atk   => [2, 0.1],
  334.       :mhp   => [10, 1]
  335.     },
  336.     {
  337.       :key   => :dex,
  338.       :name  => "防御",
  339.       :limit => 100,
  340.       :cost  => [1, 0.1],
  341.       :mdf   => [2, 0.5],
  342.       :def   => [2, 0.5],
  343.       :eva   => [0.001],
  344.     },
  345.     {
  346.       :key   => :SPD,
  347.       :name  => "敏捷",
  348.       :limit => 100,
  349.       :cost  => [1, 0.05],
  350.       :agi   => [2, 0.2],
  351.       :mdf   => [1, 0.1],
  352.       :eva   => [0.001],
  353.     },
  354.     {
  355.       :key   => :luk,
  356.       :name  => "幸运",
  357.       :limit => 20,
  358.       :cost  => [1],
  359.       :luk   => [1]
  360.     },
  361.     {
  362.       :key   => :hit,
  363.       :name  => "命中率",
  364.       :limit => 20,
  365.       :cost  => [1, 0.5],
  366.       :hit   => [0.01],
  367.     },
  368.     {
  369.       :key   => :eva,
  370.       :name  => "回避率",
  371.       :limit => 10,
  372.       :cost  => [1, 0.5],
  373.       :eva   => [0.01],
  374.     },
  375.     {
  376.       :key   => :crt,
  377.       :name  => "暴击率",
  378.       :limit => 10,
  379.       :cost  => [1, 0.7],
  380.       :cri   => [0.01],
  381.     },
  382.     {
  383.       :key         => :chant,
  384.       :name        => "詠唱速度",
  385.       :limit       => 0,
  386.       :cost        => [1],
  387.       :skill_speed => [1],
  388.     },
  389.     {
  390.       :key        => :item,
  391.       :name       => "物品使用速度",
  392.       :limit      => 0,
  393.       :cost       => [1],
  394.       :item_speed => [1],
  395.     },
  396. ]
  397.   # ◆ RP (振り分け用ポイント) の名称
  398.   VOCAB_RP   = "RP"
  399.   # ◆ RP の名称 (略)
  400.   VOCAB_RP_A = "灵魂"
  401.  
  402.   # ◆ MaxRP 計算式
  403.   #   level .. レベル
  404.   #  結果が小数になってもOK(自動で整数に変換)。
  405.   MAXRP_EXP =  "5 * level"
  406.  
  407.   # ◆ パラメータ名
  408.   #  ?拡張装備画面? と併用した場合、下に導入した方を優先。
  409.   VOCAB_PARAM = {
  410.     :hit         => "命中率",        # 命中率
  411.     :eva         => "回避率",        # 回避率
  412.     :cri         => "暴击率",  # クリティカル率
  413.     :skill_speed => "詠唱速度修正",      # スキル速度補正
  414.     :item_speed  => "物品使用速度修正",  # アイテム速度補正
  415.   }  # ← この } は消さないこと!
  416.  
  417.   # ◆ 振り分け回数が無制限のときは /--- (上限表記) を隠す
  418.   #  true  : 回数のみ表示
  419.   #  false : 回数/--- と表示
  420.   HIDE_MAX_COUNT_INFINITE  = false
  421.  
  422.   # ◆ 振り分けゲージの色
  423.   #  数値  : \C[n] と同じ色。
  424.   #  Color : 指定した色。 ( Color.new(255, 128, 128) など )
  425.   GAUGE_START_COLOR = 28  # 開始色
  426.   GAUGE_END_COLOR   = 29  # 終了色
  427.  
  428.   # ◆ 振り分けゲージに汎用ゲージを使用する
  429.   #  ?汎用ゲージ描画? 導入時のみ有効。
  430.   ENABLE_GENERIC_GAUGE = true
  431.   # ◆ 振り分け汎用ゲージ設定
  432.   #  画像は "Graphics/System" から読み込む。
  433.   GAUGE_IMAGE  = "GaugeDist"  # 画像
  434.   GAUGE_OFFSET = [-23, -2]    # 位置補正 [x, y]
  435.   GAUGE_LENGTH = -4           # 長さ補正
  436.   GAUGE_SLOPE  = 30           # 傾き (-89 ~ 89)
  437.  
  438.   # ◆ 振り分け終了時の確認コマンド
  439.   CONFIRM_COMMANDS = [
  440.     " 确定",  # 振り分け確定
  441.     " 中止",  # 振り分け中止
  442.     " 取消",  # 振り分けを続ける
  443.   ]  # ← この ] は消さないこと!
  444.  
  445.   # ◆ 確認コマンドのヘルプ
  446.   CONFIRM_COMMAND_HELP = [
  447.     "加点确认",        # 振り分け確定
  448.     "取消加点",  # 振り分け中止
  449.     "继续加点",              # 振り分けを続ける
  450.   ]  # ← この ] は消さないこと!
  451.  
  452.   # ◆ 振り分け終了時の確認コマンドの幅
  453.   CONFIRM_WIDTH = 110
  454.  
  455.   # ◆ メニュー画面に「パラメータ振り分け」コマンドを追加する
  456.   #  追加する場所は、メニューコマンドの最下部です。
  457.   #  他の部分に追加したい場合は、?カスタムメニューコマンド? をご利用ください。
  458.   USE_MENU_DISTRIBUTE_PARAMETER_COMMAND = true
  459.   # ◆ メニュー画面の「パラメータ振り分け」コマンドの名称
  460.   VOCAB_MENU_DISTRIBUTE_PARAMETER       = "灵魂集束"
  461.  
  462.   # ◆ 振り分け解除を許可
  463.   #  true  : 振り分け確定後もパラメータを下げ、RP を取り戻せる。
  464.   #  false : 一度確定したら下げられない。
  465.   ENABLE_REVERSE_DISTRIBUTE = true
  466. end
  467.  
  468. #==============================================================================
  469. # ☆ 設定ここまで - END Setting ☆
  470. #==============================================================================
  471.  
  472. $kms_imported = {} if $kms_imported == nil
  473. $kms_imported["DistributeParameter"] = true
  474.  
  475.  
  476. module KMS_DistributeParameter
  477.   # 振り分け対象パラメータ
  478.   PARAMS = [:mhp, :mmp, :atk, :def, :mat, :mdf, :agi, :luk,
  479.     :hit, :eva, :cri, :skill_speed, :item_speed, :tgr]
  480.   PARAMS |= [:hit, :eva, :cri, :cev, :mev, :mrf, :cnt, :hrg, :mrg, :trg]
  481.   PARAMS |= [:tgr, :grd, :rec, :pha, :mcr, :tcr, :pdr, :mdr, :fdr, :exr]
  482.  
  483.   # パラメータ増加量構造体
  484.   GainInfo  = Struct.new(:key, :name, :limit, :cost, :cost_rev, :params)
  485.   ParamInfo = Struct.new(:value, :value_rev)
  486.  
  487.   # 振り分け情報構造体
  488.   DistInfo = Struct.new(:count, :hp, :mp)
  489.  
  490.   #--------------------------------------------------------------------------
  491.   # ○ パラメータ増加量を構造体化
  492.   #--------------------------------------------------------------------------
  493.   def self.create_gain_param_structs(target)
  494.     result = []
  495.     target.each { |v|
  496.       info = GainInfo.new
  497.       info.key      = v[:key]
  498.       info.name     = v[:name]
  499.       info.limit    = v[:limit]
  500.       info.cost     = v[:cost][0]
  501.       info.cost_rev = (v[:cost][1] == nil ? 0 : v[:cost][1])
  502.       info.params   = {}
  503.  
  504.       PARAMS.each { |param|
  505.         next unless v.has_key?(param)
  506.         pinfo = ParamInfo.new
  507.         pinfo.value     = v[param][0]
  508.         pinfo.value_rev = (v[param][1] == nil ? 0 : v[param][1])
  509.         info.params[param] = pinfo
  510.       }
  511.       result << info
  512.     }
  513.     return result
  514.   end
  515.   #--------------------------------------------------------------------------
  516.   # ○ パラメータ増加量を構造体化 (固有増加量用)
  517.   #--------------------------------------------------------------------------
  518.   def self.create_gain_param_structs_for_personal(target)
  519.     result = []
  520.     target.each { |list|
  521.       next if list == nil
  522.       result << create_gain_param_structs(list)
  523.     }
  524.     return result
  525.   end
  526.   #--------------------------------------------------------------------------
  527.   # ○ パラメータ増加量を併合
  528.   #--------------------------------------------------------------------------
  529.   def self.merge(list1, list2)
  530.     result = list1.clone
  531.     list2.each { |info2|
  532.       overwrite = false
  533.       list1.each_with_index { |info1, i|
  534.         if info1.key == info2.key
  535.           result[i] = info2
  536.           overwrite = true
  537.           break
  538.         end
  539.       }
  540.       result << info2 unless overwrite
  541.     }
  542.     return result
  543.   end
  544.  
  545.   # パラメータ増加量を構造体化
  546.   GAIN_PARAMS = create_gain_param_structs(GAIN_PARAMETER)
  547.   PERSONAL_GAIN_PARAMS =
  548.     create_gain_param_structs_for_personal(PERSONAL_GAIN_PARAMETER)
  549.   CLASS_GAIN_PARAMS =
  550.     create_gain_param_structs_for_personal(CLASS_GAIN_PARAMETER)
  551. end
  552.  
  553. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  554.  
  555. #==============================================================================
  556. # ■ Vocab
  557. #==============================================================================
  558.  
  559. module Vocab
  560.   # 命中率
  561.   def self.hit
  562.     return KMS_DistributeParameter::VOCAB_PARAM[:hit]
  563.   end
  564.  
  565.   # 回避率
  566.   def self.eva
  567.     return KMS_DistributeParameter::VOCAB_PARAM[:eva]
  568.   end
  569.  
  570.   # クリティカル率
  571.   def self.cri
  572.     return KMS_DistributeParameter::VOCAB_PARAM[:cri]
  573.   end
  574.  
  575.   # スキル速度補正
  576.   def self.skill_speed
  577.     return KMS_DistributeParameter::VOCAB_PARAM[:skill_speed]
  578.   end
  579.  
  580.   # アイテム速度補正
  581.   def self.item_speed
  582.     return KMS_DistributeParameter::VOCAB_PARAM[:item_speed]
  583.   end
  584.  
  585.   # 狙われやすさ
  586.   def self.tgr
  587.     return KMS_DistributeParameter::VOCAB_PARAM[:tgr]
  588.   end
  589.  
  590.   # RP
  591.   def self.rp
  592.     return KMS_DistributeParameter::VOCAB_RP
  593.   end
  594.  
  595.   # RP (略)
  596.   def self.rp_a
  597.     return KMS_DistributeParameter::VOCAB_RP_A
  598.   end
  599.  
  600.   # パラメータ振り分け
  601.   def self.distribute_parameter
  602.     return KMS_DistributeParameter::VOCAB_MENU_DISTRIBUTE_PARAMETER
  603.   end
  604. end
  605.  
  606. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  607.  
  608. #==============================================================================
  609. # ■ DataManager
  610. #==============================================================================
  611.  
  612. module DataManager
  613.   module_function
  614.   #--------------------------------------------------------------------------
  615.   # ● セーブ内容の展開
  616.   #--------------------------------------------------------------------------
  617.   class << DataManager
  618.     unless method_defined?(:extract_save_contents_KMS_DistributeParameter)
  619.       alias extract_save_contents_KMS_DistributeParameter extract_save_contents
  620.     end
  621.   end
  622.   def extract_save_contents(contents)
  623.     extract_save_contents_KMS_DistributeParameter(contents)
  624.  
  625.     KMS_Commands.check_distribution_values
  626.     Graphics.frame_reset
  627.   end
  628. end
  629.  
  630. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  631.  
  632. #==============================================================================
  633. # □ KMS_Commands
  634. #==============================================================================
  635.  
  636. module KMS_Commands
  637.   module_function
  638.   #--------------------------------------------------------------------------
  639.   # ○ パラメータ振り分けに関する値をチェック
  640.   #--------------------------------------------------------------------------
  641.   def check_distribution_values
  642.     (1...$data_actors.size).each { |i|
  643.       actor = $game_actors[i]
  644.       actor.check_distribution_values
  645.       actor.restore_distribution_values
  646.     }
  647.   end
  648.   #--------------------------------------------------------------------------
  649.   # ○ RP の増減
  650.   #     actor_id : アクター ID
  651.   #     value    : 増減量
  652.   #--------------------------------------------------------------------------
  653.   def gain_rp(actor_id, value)
  654.     actor = $game_actors[actor_id]
  655.     return if actor == nil
  656.     actor.gain_rp(value)
  657.   end
  658.   #--------------------------------------------------------------------------
  659.   # ○ 振り分けの実行
  660.   #     actor_id : アクター ID
  661.   #     key      : 対象パラメータのキー
  662.   #     num      : 振り分け回数
  663.   #--------------------------------------------------------------------------
  664.   def distribute_param_actor(actor_id, key, num = 1)
  665.     actor = $game_actors[actor_id]
  666.     return if actor == nil
  667.  
  668.     # 逆加算判定
  669.     reverse = false
  670.     if num < 0
  671.       reverse = true
  672.       num = num.abs
  673.     end
  674.  
  675.     # 適用
  676.     num.times { |i| actor.rp_growth_effect(key, reverse) }
  677.   end
  678.   #--------------------------------------------------------------------------
  679.   # ○ 振り分け回数をリセット
  680.   #     actor_id : アクター ID
  681.   #--------------------------------------------------------------------------
  682.   def reset_distributed_count(actor_id)
  683.     actor = $game_actors[actor_id]
  684.     return if actor == nil
  685.     actor.clear_distribution_values
  686.     actor.restore_distribution_values
  687.   end
  688.   #--------------------------------------------------------------------------
  689.   # ○ パラメータ振り分け画面の呼び出し
  690.   #     actor_index : アクターインデックス
  691.   #--------------------------------------------------------------------------
  692.   def call_distribute_parameter(actor_index = 0)
  693.     return if $game_party.in_battle
  694.     $game_temp.call_distribute_parameter = true
  695.     $game_party.menu_actor = $game_party.members[actor_index]
  696.   end
  697. end
  698.  
  699. class Game_Interpreter
  700.   include KMS_Commands
  701. end
  702.  
  703. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  704.  
  705. #==============================================================================
  706. # ■ Game_Temp
  707. #==============================================================================
  708.  
  709. class Game_Temp
  710.   #--------------------------------------------------------------------------
  711.   # ● 公開インスタンス変数
  712.   #--------------------------------------------------------------------------
  713.   attr_accessor :call_distribute_parameter  # 振り分け画面呼び出しフラグ
  714.   attr_accessor :menu_actor_index           # 各種メニュー画面用のアクター index
  715.   #--------------------------------------------------------------------------
  716.   # ● オブジェクト初期化
  717.   #--------------------------------------------------------------------------
  718.   alias initialize_KMS_DistributeParameter initialize
  719.   def initialize
  720.     initialize_KMS_DistributeParameter
  721.  
  722.     @call_distribute_parameter = false
  723.     @menu_actor_index = 0
  724.   end
  725. end
  726.  
  727. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  728.  
  729. #==============================================================================
  730. # ■ Game_BattlerBase
  731. #==============================================================================
  732.  
  733. class Game_BattlerBase
  734.   #--------------------------------------------------------------------------
  735.   # ● 能力値に加算する値をクリア
  736.   #--------------------------------------------------------------------------
  737.   alias clear_param_plus_KMS_DistributeParameter clear_param_plus
  738.   def clear_param_plus
  739.     clear_param_plus_KMS_DistributeParameter
  740.  
  741.     clear_distribution_values
  742.     calc_distribution_values
  743.   end
  744.   #--------------------------------------------------------------------------
  745.   # ○ パラメータ振り分けに関する値をクリア
  746.   #--------------------------------------------------------------------------
  747.   def clear_distribution_values
  748.     @distributed_count = {}
  749.     KMS_DistributeParameter::PARAMS.each { |param|
  750.       @distributed_count[param] = 0
  751.     }
  752.   end
  753.   #--------------------------------------------------------------------------
  754.   # ○ パラメータ振り分けに関する値をチェック
  755.   #--------------------------------------------------------------------------
  756.   def check_distribution_values
  757.     last_distributed_count = @distributed_count
  758.  
  759.     clear_distribution_values
  760.  
  761.     @distributed_count = last_distributed_count if last_distributed_count != nil
  762.   end
  763.   #--------------------------------------------------------------------------
  764.   # ○ 各種修正値を計算
  765.   #--------------------------------------------------------------------------
  766.   def calc_distribution_values
  767.     # 継承先で定義
  768.   end
  769.   #--------------------------------------------------------------------------
  770.   # ○ 振り分けによる上昇値を取得
  771.   #     param : パラメータの Symbol
  772.   #--------------------------------------------------------------------------
  773.   def distributed_param(param)
  774.     return 0
  775.   end
  776.   #--------------------------------------------------------------------------
  777.   # ○ 振り分けに関する情報を取得
  778.   #--------------------------------------------------------------------------
  779.   def distribution_info
  780.     info = KMS_DistributeParameter::DistInfo.new
  781.     info.count = @distributed_count.clone
  782.     info.hp    = self.hp
  783.     info.mp    = self.mp
  784.     return info
  785.   end
  786.   #--------------------------------------------------------------------------
  787.   # ○ 振り分けに関する情報を設定
  788.   #--------------------------------------------------------------------------
  789.   def set_distribution_info(info)
  790.     return unless info.is_a?(KMS_DistributeParameter::DistInfo)
  791.  
  792.     @distributed_count = info.count
  793.     calc_distribution_values
  794.     self.hp = info.hp
  795.     self.mp = info.mp
  796.   end
  797. end
  798.  
  799. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  800.  
  801. #==============================================================================
  802. # ■ Game_Action
  803. #==============================================================================
  804.  
  805. class Game_Action
  806.   #--------------------------------------------------------------------------
  807.   # ● 行動速度の計算
  808.   #--------------------------------------------------------------------------
  809.   alias speed_KMS_DistributeParameter speed
  810.   def speed
  811.     speed = speed_KMS_DistributeParameter
  812.     return speed if attack?
  813.  
  814.     if item.is_a?(RPG::Skill) && item.speed < 0
  815.       n = [subject.distributed_param(:skill_speed), item.speed.abs].min
  816.       speed += n
  817.     elsif item.is_a?(RPG::Item) && item.speed < 0
  818.       n = [subject.distributed_param(:item_speed), item.speed.abs].min
  819.       speed += n
  820.     end
  821.  
  822.     return speed
  823.   end
  824. end
  825.  
  826. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  827.  
  828. #==============================================================================
  829. # ■ Game_Actor
  830. #==============================================================================
  831.  
  832. class Game_Actor < Game_Battler
  833.   #--------------------------------------------------------------------------
  834.   # ○ クラス変数
  835.   #--------------------------------------------------------------------------
  836.   @@__distribute_gain_params = {}
  837.   #--------------------------------------------------------------------------
  838.   # ● オブジェクト初期化
  839.   #     actor_id : アクター ID
  840.   #--------------------------------------------------------------------------
  841.   alias initialize_KMS_DistributeParameter initialize
  842.   def initialize(actor_id)
  843.     @actor_id = actor_id
  844.     @class_id = actor.class_id
  845.  
  846.     initialize_KMS_DistributeParameter(actor_id)
  847.   end
  848.   #--------------------------------------------------------------------------
  849.   # ○ パラメータ増加量一覧を取得
  850.   #--------------------------------------------------------------------------
  851.   def gain_parameter_list
  852.     key = "#{@actor_id}_#{@class_id}"
  853.     unless @@__distribute_gain_params.has_key?(key)
  854.       result = KMS_DistributeParameter::GAIN_PARAMS
  855.  
  856.       # アクター固有
  857.       list   = KMS_DistributeParameter::PERSONAL_GAIN_PARAMS[@actor_id]
  858.       result = KMS_DistributeParameter.merge(result, list) if list != nil
  859.  
  860.       # 職業固有
  861.       list   = KMS_DistributeParameter::CLASS_GAIN_PARAMS[@class_id]
  862.       result = KMS_DistributeParameter.merge(result, list) if list != nil
  863.  
  864.       @@__distribute_gain_params[key] = result
  865.     end
  866.  
  867.     return @@__distribute_gain_params[key]
  868.   end
  869.   #--------------------------------------------------------------------------
  870.   # ○ パラメータ増加量を取得
  871.   #     key : 振り分けキー
  872.   #--------------------------------------------------------------------------
  873.   def gain_parameter(key)
  874.     return gain_parameter_list.find { |v| v.key == key }
  875.   end
  876.   #--------------------------------------------------------------------------
  877.   # ○ 各種修正値を計算
  878.   #--------------------------------------------------------------------------
  879.   def calc_distribution_values
  880.     @rp_cost = 0
  881.     @distributed_param = {}
  882.     KMS_DistributeParameter::PARAMS.each { |param|
  883.       @distributed_param[param] = 0
  884.     }
  885.  
  886.     gain_parameter_list.each { |gain|
  887.       next if gain == nil
  888.       cost = 0
  889.       distributed_count(gain.key).times { |i|
  890.         cost += Integer(gain.cost + gain.cost_rev * i)
  891.         gain.params.each { |param, v|
  892.           @distributed_param[param] += v.value + v.value_rev * i
  893.         }
  894.       }
  895.       @rp_cost += [cost, 0].max
  896.     }
  897.  
  898.     KMS_DistributeParameter::PARAMS.each { |param|
  899.       @distributed_param[param] = @distributed_param[param]
  900.     }
  901.   end
  902.   #--------------------------------------------------------------------------
  903.   # ○ 各種修正値を修復
  904.   #--------------------------------------------------------------------------
  905.   def restore_distribution_values
  906.     calc_distribution_values
  907.     self.hp = self.hp
  908.     self.mp = self.mp
  909.   end
  910.   #--------------------------------------------------------------------------
  911.   # ○ 振り分けによる上昇値を取得
  912.   #     param : パラメータの Symbol
  913.   #--------------------------------------------------------------------------
  914.   def distributed_param(param)
  915.     return 0 if @distributed_param == nil
  916.     return 0 if @distributed_param[param] == nil
  917.     return @distributed_param[param]
  918.   end
  919.   PARAM_SYMBOL  = [:mhp, :mmp, :atk, :def, :mat, :mdf, :agi, :luk]
  920.   XPARAM_SYMBOL = [:hit, :eva, :cri, :cev, :mev, :mrf, :cnt, :hrg, :mrg, :trg]
  921.   SPARAM_SYMBOL = [:tgr, :grd, :rec, :pha, :mcr, :tcr, :pdr, :mdr, :fdr, :exr]
  922.   #--------------------------------------------------------------------------
  923.   # ● 通常能力値の基本値取得
  924.   #--------------------------------------------------------------------------
  925.   alias param_base_KMS_DistributeParameter param_base
  926.   def param_base(param_id)
  927.     n = param_base_KMS_DistributeParameter(param_id)
  928.     if PARAM_SYMBOL[param_id] != nil
  929.       n += distributed_param(PARAM_SYMBOL[param_id])
  930.     end
  931.  
  932.     return Integer(n)
  933.   end
  934.   #--------------------------------------------------------------------------
  935.   # ● 命中率の取得
  936.   #--------------------------------------------------------------------------
  937.   alias hit_KMS_DistributeParameter hit
  938.   def hit
  939.     n = hit_KMS_DistributeParameter + distributed_param(:hit)
  940.     return n
  941.   end
  942.   #--------------------------------------------------------------------------
  943.   # ● 回避率の取得
  944.   #--------------------------------------------------------------------------
  945.   alias eva_KMS_DistributeParameter eva
  946.   def eva
  947.     n = eva_KMS_DistributeParameter + distributed_param(:eva)
  948.     return n
  949.   end
  950.   #--------------------------------------------------------------------------
  951.   # ● クリティカル率の取得
  952.   #--------------------------------------------------------------------------
  953.   alias cri_KMS_DistributeParameter cri
  954.   def cri
  955.     n = cri_KMS_DistributeParameter + distributed_param(:cri)
  956.     return n
  957.   end
  958.   #--------------------------------------------------------------------------
  959.   # ● 狙われ率の取得
  960.   #--------------------------------------------------------------------------
  961.   alias tgr_KMS_DistributeParameter tgr
  962.   def tgr
  963.     n = tgr_KMS_DistributeParameter + distributed_param(:tgr)
  964.     return n
  965.   end
  966.   #--------------------------------------------------------------------------
  967.   # ○ MaxRP の取得
  968.   #--------------------------------------------------------------------------
  969.   def mrp
  970.     n = Integer(eval(KMS_DistributeParameter::MAXRP_EXP))
  971.     return [n + mrp_plus, 0].max
  972.   end
  973.   #--------------------------------------------------------------------------
  974.   # ○ MaxRP 補正値の取得
  975.   #--------------------------------------------------------------------------
  976.   def mrp_plus
  977.     @mrp_plus = 0 if @mrp_plus == nil
  978.     return @mrp_plus
  979.   end
  980.   #--------------------------------------------------------------------------
  981.   # ○ RP の取得
  982.   #--------------------------------------------------------------------------
  983.   def rp
  984.     return [mrp - @rp_cost, 0].max
  985.   end
  986.   #--------------------------------------------------------------------------
  987.   # ○ 振り分け回数の取得
  988.   #     param : 振り分け先パラメータ (キー)
  989.   #--------------------------------------------------------------------------
  990.   def distributed_count(param)
  991.     clear_distribution_values     if @distributed_count == nil
  992.     @distributed_count[param] = 0 if @distributed_count[param] == nil
  993.     return @distributed_count[param]
  994.   end
  995.   #--------------------------------------------------------------------------
  996.   # ○ RP の増減
  997.   #     value : 増減量
  998.   #--------------------------------------------------------------------------
  999.   def gain_rp(value)
  1000.     @mrp_plus = mrp_plus + value
  1001.   end
  1002.   #--------------------------------------------------------------------------
  1003.   # ○ 振り分け回数の増減
  1004.   #     param : 振り分け先パラメータ (キー)
  1005.   #     value : 増減量
  1006.   #--------------------------------------------------------------------------
  1007.   def gain_distributed_count(param, value = 1)
  1008.     n = distributed_count(param)
  1009.     @distributed_count[param] += value if n.is_a?(Integer)
  1010.   end
  1011.   #--------------------------------------------------------------------------
  1012.   # ○ RP 振り分けによる成長効果適用
  1013.   #     param   : 振り分け先パラメータ (キー)
  1014.   #     reverse : 逆加算のときは true
  1015.   #--------------------------------------------------------------------------
  1016.   def rp_growth_effect(param, reverse = false)
  1017.     gain = gain_parameter(param)
  1018.     return if gain == nil  # 無効なパラメータ
  1019.  
  1020.     if reverse
  1021.       return if distributed_count(param) == 0  # 逆加算不可
  1022.     else
  1023.       return unless can_distribute?(param)
  1024.     end
  1025.  
  1026.     gain_distributed_count(param, reverse ? -1 : 1)
  1027.     restore_distribution_values
  1028.   end
  1029.   #--------------------------------------------------------------------------
  1030.   # ○ パラメータ振り分け可否判定
  1031.   #     param : 振り分け先パラメータ (キー)
  1032.   #--------------------------------------------------------------------------
  1033.   def can_distribute?(param)
  1034.     gain = gain_parameter(param)
  1035.     return false if gain == nil                        # 無効なパラメータ
  1036.     return false if self.rp < distribute_cost(param)   # RP 不足
  1037.     if gain.limit > 0
  1038.       return false if gain.limit <= distributed_count(param)  # 回数上限
  1039.     end
  1040.  
  1041.     return true
  1042.   end
  1043.   #--------------------------------------------------------------------------
  1044.   # ○ パラメータ振り分けコスト計算
  1045.   #     param : 振り分け先パラメータ (キー)
  1046.   #--------------------------------------------------------------------------
  1047.   def distribute_cost(param)
  1048.     gain = gain_parameter(param)
  1049.     return 0 if gain == nil  # 無効なパラメータ
  1050.  
  1051.     n = gain.cost
  1052.     count = distributed_count(param)
  1053.     count = [count, gain.limit - 1].min if gain.limit > 0
  1054.     n += gain.cost_rev * count
  1055.     return [Integer(n), 0].max
  1056.   end
  1057.   #--------------------------------------------------------------------------
  1058.   # ○ パラメータ振り分け後の増加量計算
  1059.   #     param : 振り分け先パラメータ (キー)
  1060.   #     amt   : 振り分け数
  1061.   #--------------------------------------------------------------------------
  1062.   def distribute_gain(param, amt = 1)
  1063.     gain = gain_parameter(param)
  1064.  
  1065.     # 無効なパラメータ
  1066.     return 0 if gain == nil
  1067.  
  1068.     result = {}
  1069.     KMS_DistributeParameter::PARAMS.each { |par|
  1070.       result[par] = distributed_param(par)
  1071.     }
  1072.  
  1073.     # 振り分け不可
  1074.     if amt > 0
  1075.       return result if gain.limit > 0 && gain.limit == distributed_count(param)
  1076.     else
  1077.       return result if distributed_count(param) + amt < 0
  1078.     end
  1079.  
  1080.     last_hp = self.hp
  1081.     last_mp = self.mp
  1082.     last_count = distributed_count(param)
  1083.     rp_growth_effect(param)
  1084.     KMS_DistributeParameter::PARAMS.each { |par|
  1085.       result[par] = distributed_param(par) if gain.params.include?(par)
  1086.     }
  1087.     rp_growth_effect(param, true) if last_count < distributed_count(param)
  1088.     self.hp = last_hp
  1089.     self.mp = last_mp
  1090.  
  1091.     return result
  1092.   end
  1093. end
  1094.  
  1095. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  1096.  
  1097. #==============================================================================
  1098. # ■ Window_Base
  1099. #==============================================================================
  1100.  
  1101. class Window_Base < Window
  1102.   #--------------------------------------------------------------------------
  1103.   # ○ RP の文字色を取得
  1104.   #     actor : アクター
  1105.   #--------------------------------------------------------------------------
  1106.   def rp_color(actor)
  1107.     return (actor.rp == 0 ? knockout_color : normal_color)
  1108.   end
  1109.   #--------------------------------------------------------------------------
  1110.   # ○ 振り分けゲージの色 1 の取得
  1111.   #--------------------------------------------------------------------------
  1112.   def distribute_gauge_color1
  1113.     color = KMS_DistributeParameter::GAUGE_START_COLOR
  1114.     return (color.is_a?(Integer) ? text_color(color) : color)
  1115.   end
  1116.   #--------------------------------------------------------------------------
  1117.   # ○ 振り分けゲージの色 2 の取得
  1118.   #--------------------------------------------------------------------------
  1119.   def distribute_gauge_color2
  1120.     color = KMS_DistributeParameter::GAUGE_END_COLOR
  1121.     return (color.is_a?(Integer) ? text_color(color) : color)
  1122.   end
  1123.   #--------------------------------------------------------------------------
  1124.   # ○ RP の描画
  1125.   #     actor : アクター
  1126.   #     x     : 描画先 X 座標
  1127.   #     y     : 描画先 Y 座標
  1128.   #     width : 幅
  1129.   #--------------------------------------------------------------------------
  1130.   def draw_actor_rp(actor, x, y, width = 124)
  1131.     change_color(system_color)
  1132.     draw_text(x, y, 30, line_height, Vocab::rp_a)
  1133.     draw_current_and_max_values(x, y, width, actor.rp, actor.mrp,
  1134.       rp_color(actor), normal_color)
  1135.     change_color(normal_color)
  1136.   end
  1137.   #--------------------------------------------------------------------------
  1138.   # ○ 振り分けゲージの描画
  1139.   #     actor : アクター
  1140.   #     param : パラメータ
  1141.   #     x     : 描画先 X 座標
  1142.   #     y     : 描画先 Y 座標
  1143.   #     width : 幅
  1144.   #--------------------------------------------------------------------------
  1145.   def draw_actor_distribute_gauge(actor, param, x, y, width = 124)
  1146.     gain = actor.gain_parameter(param)
  1147.     return if gain == nil || gain.limit <= 0
  1148.  
  1149.     rate = actor.distributed_count(param) * 1.0 / gain.limit
  1150.     if $kms_imported["GenericGauge"] &&
  1151.         KMS_DistributeParameter::ENABLE_GENERIC_GAUGE
  1152.       # 汎用ゲージ
  1153.       draw_generic_gauge(KMS_DistributeParameter::GAUGE_IMAGE,
  1154.         x, y, width, rate,
  1155.         KMS_DistributeParameter::GAUGE_OFFSET,
  1156.         KMS_DistributeParameter::GAUGE_LENGTH,
  1157.         KMS_DistributeParameter::GAUGE_SLOPE)
  1158.     else
  1159.       # デフォルトゲージ
  1160.       gc1  = distribute_gauge_color1
  1161.       gc2  = distribute_gauge_color2
  1162.       draw_gauge(x, y, width, rate, gc1, gc2)
  1163.     end
  1164.   end
  1165. end
  1166.  
  1167. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  1168.  
  1169. #==============================================================================
  1170. # ■ Window_MenuCommand
  1171. #==============================================================================
  1172.  
  1173. class Window_MenuCommand < Window_Command
  1174.   if KMS_DistributeParameter::USE_MENU_DISTRIBUTE_PARAMETER_COMMAND &&
  1175.       !$kms_imported["CustomMenuCommand"]
  1176.     #--------------------------------------------------------------------------
  1177.     # ● コマンドリストの作成
  1178.     #--------------------------------------------------------------------------
  1179.     alias make_command_list_KMS_DistributeParameter make_command_list
  1180.     def make_command_list
  1181.       make_command_list_KMS_DistributeParameter
  1182.  
  1183.       add_distribute_parameter_command
  1184.     end
  1185.   end
  1186.   #--------------------------------------------------------------------------
  1187.   # ○ 振り分けコマンドをリストに追加
  1188.   #--------------------------------------------------------------------------
  1189.   def add_distribute_parameter_command
  1190.     add_command(Vocab::distribute_parameter,
  1191.       :distribute_parameter,
  1192.       distribute_parameter_enabled)
  1193.   end
  1194.   #--------------------------------------------------------------------------
  1195.   # ○ パラメータ振り分けの有効状態を取得
  1196.   #--------------------------------------------------------------------------
  1197.   def distribute_parameter_enabled
  1198.     return true
  1199.   end
  1200. end
  1201.  
  1202. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  1203.  
  1204. #==============================================================================
  1205. # □ Window_DistributeParameterActor
  1206. #------------------------------------------------------------------------------
  1207. #   振り分け画面で、アクターの情報を表示するウィンドウです。
  1208. #==============================================================================
  1209.  
  1210. class Window_DistributeParameterActor < Window_Base
  1211.   #--------------------------------------------------------------------------
  1212.   # ○ 公開インスタンス変数
  1213.   #--------------------------------------------------------------------------
  1214.   attr_accessor :actor
  1215.   #--------------------------------------------------------------------------
  1216.   # ● オブジェクト初期化
  1217.   #     x     : ウィンドウの X 座標
  1218.   #     y     : ウィンドウの Y 座標
  1219.   #     actor : アクター
  1220.   #--------------------------------------------------------------------------
  1221.   def initialize(x, y, actor)
  1222.     super(x, y, Graphics.width, line_height + 32)
  1223.     @actor = actor
  1224.     refresh
  1225.   end
  1226.   #--------------------------------------------------------------------------
  1227.   # ● リフレッシュ
  1228.   #--------------------------------------------------------------------------
  1229.   def refresh
  1230.     contents.clear
  1231.     draw_actor_name(@actor, 4, 0)
  1232.     draw_actor_level(@actor, 140, 0)
  1233.     draw_actor_rp(@actor, 240, 0)
  1234.   end
  1235. end
  1236.  
  1237. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  1238.  
  1239. #==============================================================================
  1240. # □ Window_DistributeParameterList
  1241. #------------------------------------------------------------------------------
  1242. #   振り分け画面で、成長させるパラメータを選択するウィンドウです。
  1243. #==============================================================================
  1244.  
  1245. class Window_DistributeParameterList < Window_Selectable
  1246.   #--------------------------------------------------------------------------
  1247.   # ○ 公開インスタンス変数
  1248.   #--------------------------------------------------------------------------
  1249.   attr_accessor :actor
  1250.   #--------------------------------------------------------------------------
  1251.   # ● オブジェクト初期化
  1252.   #     actor : アクター
  1253.   #--------------------------------------------------------------------------
  1254.   def initialize(actor)
  1255.     off_h = line_height + 32
  1256.     super(0, off_h, 286, Graphics.height - off_h)
  1257.     @actor = actor
  1258.     refresh
  1259.     self.index = 0
  1260.   end
  1261.   #--------------------------------------------------------------------------
  1262.   # ○ 選択中のパラメータの Symbol を取得
  1263.   #--------------------------------------------------------------------------
  1264.   def parameter_key
  1265.     return @data[self.index]
  1266.   end
  1267.   #--------------------------------------------------------------------------
  1268.   # ● 項目数の取得
  1269.   #--------------------------------------------------------------------------
  1270.   def item_max
  1271.     return @data == nil ? 0 : @data.size
  1272.   end
  1273.   #--------------------------------------------------------------------------
  1274.   # ● 1 ページに表示できる行数の取得
  1275.   #--------------------------------------------------------------------------
  1276.   def page_row_max
  1277.     return super - 1
  1278.   end
  1279.   #--------------------------------------------------------------------------
  1280.   # ● 項目を描画する矩形の取得
  1281.   #     index : 項目番号
  1282.   #--------------------------------------------------------------------------
  1283.   def item_rect(index)
  1284.     rect = super(index)
  1285.     rect.y += line_height
  1286.     return rect
  1287.   end
  1288.   #--------------------------------------------------------------------------
  1289.   # ● カーソルを 1 ページ後ろに移動
  1290.   #--------------------------------------------------------------------------
  1291.   def cursor_pagedown
  1292.     return if Input.repeat?(Input::R)
  1293.     super
  1294.   end
  1295.   #--------------------------------------------------------------------------
  1296.   # ● カーソルを 1 ページ前に移動
  1297.   #--------------------------------------------------------------------------
  1298.   def cursor_pageup
  1299.     return if Input.repeat?(Input::L)
  1300.     super
  1301.   end
  1302.   #--------------------------------------------------------------------------
  1303.   # ● リフレッシュ
  1304.   #--------------------------------------------------------------------------
  1305.   def refresh
  1306.     @gain_list = @actor.gain_parameter_list
  1307.     @data = []
  1308.     @gain_list.each { |gain| @data << gain.key }
  1309.     @item_max = @data.size + 1
  1310.     create_contents
  1311.     @item_max -= 1
  1312.     draw_caption
  1313.     @item_max.times { |i| draw_item(i, @actor.can_distribute?(@data[i])) }
  1314.   end
  1315.   #--------------------------------------------------------------------------
  1316.   # ○ 見出しの描画
  1317.   #--------------------------------------------------------------------------
  1318.   def draw_caption
  1319.     change_color(system_color)
  1320.     draw_text(  4, 0, 96, line_height, "属性")
  1321.     draw_text(120, 0, 40, line_height, "所需点数", 2)
  1322.     draw_text(170, 0, 80, line_height, "限界", 2)
  1323.     change_color(normal_color)
  1324.   end
  1325.   #--------------------------------------------------------------------------
  1326.   # ○ 項目の描画
  1327.   #     index   : 項目番号
  1328.   #     enabled : 有効フラグ
  1329.   #--------------------------------------------------------------------------
  1330.   def draw_item(index, enabled = true)
  1331.     rect = item_rect(index)
  1332.     contents.clear_rect(rect)
  1333.     item = @data[index]
  1334.     if item != nil
  1335.       draw_parameter(rect.x, rect.y, @data[index], enabled)
  1336.     end
  1337.   end
  1338.   #--------------------------------------------------------------------------
  1339.   # ○ 能力値の描画
  1340.   #     x       : 描画先 X 座標
  1341.   #     y       : 描画先 Y 座標
  1342.   #     param   : 振り分け先
  1343.   #     enabled : 有効フラグ
  1344.   #--------------------------------------------------------------------------
  1345.   def draw_parameter(x, y, param, enabled)
  1346.     gain = @gain_list.find { |v| v.key == param }
  1347.     return if gain == nil
  1348.  
  1349.     change_color(normal_color)
  1350.     contents.font.color.alpha = enabled ? 255 : 128
  1351.     draw_text(x + 4, y, 96, line_height, gain.name)
  1352.  
  1353.     # コスト描画
  1354.     value = @actor.distribute_cost(param)
  1355.     draw_text(x + 120, y, 40, line_height, value, 2)
  1356.  
  1357.     # 振り分け回数描画
  1358.     if gain.limit > 0
  1359.       value = sprintf("%3d/%3d", @actor.distributed_count(param), gain.limit)
  1360.     else
  1361.       value = sprintf("%3d%s", @actor.distributed_count(param),
  1362.         KMS_DistributeParameter::HIDE_MAX_COUNT_INFINITE ? "" : "/---")
  1363.     end
  1364.     draw_actor_distribute_gauge(@actor, param, x + 170, y, 80)
  1365.     draw_text(x + 170, y, 80, line_height, value, 2)
  1366.  
  1367.     change_color(normal_color)
  1368.   end
  1369.   #--------------------------------------------------------------------------
  1370.   # ● 決定やキャンセルなどのハンドリング処理
  1371.   #--------------------------------------------------------------------------
  1372.   def process_handling
  1373.     super
  1374.     call_handler(:increase) if handle?(:increase) && Input.repeat?(:RIGHT)
  1375.     call_handler(:decrease) if handle?(:decrease) && Input.repeat?(:LEFT)
  1376.     call_handler(:up)       if handle?(:up)       && Input.repeat?(:UP)
  1377.     call_handler(:down)     if handle?(:down)     && Input.repeat?(:DOWN)
  1378.   end
  1379. end
  1380.  
  1381. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  1382.  
  1383. #==============================================================================
  1384. # □ Window_DistributeParameterStatus
  1385. #------------------------------------------------------------------------------
  1386. #   振り分け画面で、アクターのステータスを表示するウィンドウです。
  1387. #==============================================================================
  1388.  
  1389. class Window_DistributeParameterStatus < Window_Base
  1390.   #--------------------------------------------------------------------------
  1391.   # ○ 公開インスタンス変数
  1392.   #--------------------------------------------------------------------------
  1393.   attr_accessor :actor
  1394.   #--------------------------------------------------------------------------
  1395.   # ● オブジェクト初期化
  1396.   #     actor : アクター
  1397.   #--------------------------------------------------------------------------
  1398.   def initialize(actor)
  1399.     dx = 286
  1400.     off_h = line_height + 32
  1401.     super(dx, off_h, Graphics.width - dx, Graphics.height - off_h)
  1402.     @actor = actor
  1403.     refresh(actor.gain_parameter_list[0].key)
  1404.   end
  1405.   #--------------------------------------------------------------------------
  1406.   # ● リフレッシュ
  1407.   #--------------------------------------------------------------------------
  1408.   def refresh(param = nil)
  1409.     @distribute_gain = nil
  1410.     if param != nil
  1411.       @distribute_gain = @actor.distribute_gain(param)
  1412.     end
  1413.  
  1414.     contents.clear
  1415. #    change_color(system_color)
  1416. #    draw_text(0, 0, width - 32, line_height, "パラメータ変化", 1)
  1417. #    change_color(normal_color)
  1418. #
  1419. #    dy = line_height
  1420.     dy = 0
  1421.     KMS_DistributeParameter::PARAMS.each { |param|
  1422.       draw_parameter(0, dy, param)
  1423.       dy += line_height
  1424.     }
  1425.   end
  1426.   #--------------------------------------------------------------------------
  1427.   # ○ 能力値の描画
  1428.   #     x    : 描画先 X 座標
  1429.   #     y    : 描画先 Y 座標
  1430.   #     type : 能力値の種類
  1431.   #--------------------------------------------------------------------------
  1432.   def draw_parameter(x, y, type)
  1433.     is_float = false
  1434.  
  1435.     case type
  1436.     when :mhp
  1437.       name  = Vocab.hp
  1438.       value = @actor.mhp
  1439.     when :mmp
  1440.       name  = Vocab.mp
  1441.       value = @actor.mmp
  1442.     when :atk
  1443.       name  = Vocab.param(2)
  1444.       value = @actor.atk
  1445.     when :def
  1446.       name  = Vocab.param(3)
  1447.       value = @actor.def
  1448.     when :mat
  1449.       name  = Vocab.param(4)
  1450.       value = @actor.mat
  1451.     when :mdf
  1452.       name  = Vocab.param(5)
  1453.       value = @actor.mdf
  1454.     when :agi
  1455.       name  = Vocab.param(6)
  1456.       value = @actor.agi
  1457.     when :luk
  1458.       name  = Vocab.param(7)
  1459.       value = @actor.luk
  1460.     when :hit
  1461.       name  = Vocab.hit
  1462.       value = @actor.hit
  1463.       is_float = true
  1464.     when :eva
  1465.       name  = Vocab.eva
  1466.       value = @actor.eva
  1467.       is_float = true
  1468.     when :cri
  1469.       name  = Vocab.cri
  1470.       value = @actor.cri
  1471.       is_float = true
  1472.     when :skill_speed
  1473.       name  = Vocab.skill_speed
  1474.       value = @actor.distributed_param(type)
  1475.     when :item_speed
  1476.       name  = Vocab.item_speed
  1477.       value = @actor.distributed_param(type)
  1478.     when :tgr
  1479.       name  = Vocab.tgr
  1480.       value = @actor.tgr
  1481.       is_float = true
  1482.     else
  1483.       return
  1484.     end
  1485.  
  1486.     # パラメータ名
  1487.     change_color(system_color)
  1488.     draw_text(x + 4, y, 96, line_height, name)
  1489.     change_color(normal_color)
  1490.     draw_text(x + 106, y, 48, line_height, convert_value(value, is_float), 2)
  1491.  
  1492.     return if @distribute_gain == nil
  1493.  
  1494.     # パラメータ変化
  1495.     draw_text(x + 154, y, 16, line_height, "→", 1)
  1496.  
  1497.     curr = @actor.distributed_param(type)
  1498.     gain = @distribute_gain[type]
  1499.     change_color(gain > curr ? text_color(3) : gain < curr ?
  1500.         text_color(2) : normal_color)
  1501.     new_value = value + (gain - curr)
  1502.     draw_text(x + 174, y, 48, line_height, convert_value(new_value, is_float), 2)
  1503.  
  1504.     change_color(normal_color)
  1505.   end
  1506.   def convert_value(value, is_float)
  1507.     if is_float
  1508.       return sprintf("%.2f", value)
  1509.     else
  1510.       return value.to_i.to_s
  1511.     end
  1512.   end
  1513. end
  1514.  
  1515. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  1516.  
  1517. #==============================================================================
  1518. # □ Window_DistributeParameterConfirm
  1519. #------------------------------------------------------------------------------
  1520. #   振り分け画面で、振り分けの確定/中止を選択するウィンドウです。
  1521. #==============================================================================
  1522.  
  1523. class Window_DistributeParameterConfirm < Window_Command
  1524.   #--------------------------------------------------------------------------
  1525.   # ● ウィンドウ幅の取得
  1526.   #--------------------------------------------------------------------------
  1527.   def window_width
  1528.     return KMS_DistributeParameter::CONFIRM_WIDTH
  1529.   end
  1530.   #--------------------------------------------------------------------------
  1531.   # ● コマンドリストの作成
  1532.   #--------------------------------------------------------------------------
  1533.   def make_command_list
  1534.     super
  1535.     add_command(KMS_DistributeParameter::CONFIRM_COMMANDS[0], :decide)
  1536.     add_command(KMS_DistributeParameter::CONFIRM_COMMANDS[1], :stop)
  1537.     add_command(KMS_DistributeParameter::CONFIRM_COMMANDS[2], :cancel)
  1538.   end
  1539.   #--------------------------------------------------------------------------
  1540.   # ● ヘルプテキスト更新
  1541.   #--------------------------------------------------------------------------
  1542.   def update_help
  1543.     text = index >= 0 ? KMS_DistributeParameter::CONFIRM_COMMAND_HELP[index] : nil
  1544.     @help_window.set_text(text)
  1545.   end
  1546. end
  1547.  
  1548. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  1549.  
  1550. #==============================================================================
  1551. # ■ Scene_Map
  1552. #==============================================================================
  1553.  
  1554. class Scene_Map < Scene_Base
  1555.   #--------------------------------------------------------------------------
  1556.   # ● シーン遷移に関連する更新
  1557.   #--------------------------------------------------------------------------
  1558.   alias update_scene_KMS_DistributeParameter update_scene
  1559.   def update_scene
  1560.     update_scene_KMS_DistributeParameter
  1561.  
  1562.     update_call_distribute_parameter unless scene_changing?
  1563.   end
  1564.   #--------------------------------------------------------------------------
  1565.   # ○ パラメータ振り分け画面呼び出し判定
  1566.   #--------------------------------------------------------------------------
  1567.   def update_call_distribute_parameter
  1568.     if $game_temp.call_distribute_parameter && !$game_player.moving?
  1569.       $game_temp.call_distribute_parameter = false
  1570.       call_distribute_parameter
  1571.     end
  1572.   end
  1573.   #--------------------------------------------------------------------------
  1574.   # ○ パラメータ振り分け画面への切り替え
  1575.   #--------------------------------------------------------------------------
  1576.   def call_distribute_parameter
  1577.     SceneManager.call(Scene_DistributeParameter)
  1578.   end
  1579. end
  1580.  
  1581. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  1582.  
  1583. #==============================================================================
  1584. # ■ Scene_Menu
  1585. #==============================================================================
  1586.  
  1587. class Scene_Menu < Scene_MenuBase
  1588.   #--------------------------------------------------------------------------
  1589.   # ● コマンドウィンドウの作成
  1590.   #--------------------------------------------------------------------------
  1591.   alias create_command_window_KMS_DistributeParameter create_command_window
  1592.   def create_command_window
  1593.     create_command_window_KMS_DistributeParameter
  1594.  
  1595.     @command_window.set_handler(:distribute_parameter, method(:command_personal))
  1596.   end
  1597.   #--------------------------------------------------------------------------
  1598.   # ○ コマンド [パラメータ振り分け]
  1599.   #--------------------------------------------------------------------------
  1600.   def command_distribute_parameter
  1601.     SceneManager.call(Scene_DistributeParameter)
  1602.   end
  1603.   #--------------------------------------------------------------------------
  1604.   # ● 個人コマンド[決定]
  1605.   #--------------------------------------------------------------------------
  1606.   alias on_personal_ok_KMS_DistributeParameter on_personal_ok
  1607.   def on_personal_ok
  1608.     on_personal_ok_KMS_DistributeParameter
  1609.  
  1610.     if @command_window.current_symbol == :distribute_parameter
  1611.       command_distribute_parameter
  1612.     end
  1613.   end
  1614. end
  1615.  
  1616. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  1617.  
  1618. #==============================================================================
  1619. # □ Scene_DistributeParameter
  1620. #------------------------------------------------------------------------------
  1621. #   パラメータ振り分け画面の処理を行うクラスです。
  1622. #==============================================================================
  1623.  
  1624. class Scene_DistributeParameter < Scene_MenuBase
  1625.   #--------------------------------------------------------------------------
  1626.   # ● 開始処理
  1627.   #--------------------------------------------------------------------------
  1628.   def start
  1629.     super
  1630.     @prev_actor = @actor
  1631.     @prev_info  = @actor.distribution_info
  1632.     create_help_window
  1633.     create_actor_window
  1634.     create_parameter_window
  1635.     create_status_window
  1636.     create_confirm_window
  1637.   end
  1638.   #--------------------------------------------------------------------------
  1639.   # ○ アクターウィンドウ作成
  1640.   #--------------------------------------------------------------------------
  1641.   def create_actor_window
  1642.     @actor_window = Window_DistributeParameterActor.new(0, 0, @actor)
  1643.     @actor_window.viewport = @viewport
  1644.   end
  1645.   #--------------------------------------------------------------------------
  1646.   # ○ パラメータリストウィンドウ作成
  1647.   #--------------------------------------------------------------------------
  1648.   def create_parameter_window
  1649.     @parameter_window = Window_DistributeParameterList.new(@actor)
  1650.     @parameter_window.viewport = @viewport
  1651.     @parameter_window.activate
  1652.     @parameter_window.set_handler(:ok,       method(:on_parameter_ok))
  1653.     @parameter_window.set_handler(:cancel,   method(:on_parameter_cancel))
  1654.     @parameter_window.set_handler(:increase, method(:on_parameter_increase))
  1655.     @parameter_window.set_handler(:decrease, method(:on_parameter_decrease))
  1656.     @parameter_window.set_handler(:down,     method(:update_status))
  1657.     @parameter_window.set_handler(:up,       method(:update_status))
  1658.     @parameter_window.set_handler(:pagedown, method(:next_actor))
  1659.     @parameter_window.set_handler(:pageup,   method(:prev_actor))
  1660.   end
  1661.   #--------------------------------------------------------------------------
  1662.   # ○ 振り分けステータスウィンドウ作成
  1663.   #--------------------------------------------------------------------------
  1664.   def create_status_window
  1665.     @status_window = Window_DistributeParameterStatus.new(@actor)
  1666.     @status_window.viewport = @viewport
  1667.  
  1668.     @help_window.z = @status_window.z + 100
  1669.     @help_window.openness = 0
  1670.   end
  1671.   #--------------------------------------------------------------------------
  1672.   # ○ 確認ウィンドウ作成
  1673.   #--------------------------------------------------------------------------
  1674.   def create_confirm_window
  1675.     @confirm_window = Window_DistributeParameterConfirm.new(0, 0)
  1676.     @confirm_window.x = (Graphics.width  - @confirm_window.width)  / 2
  1677.     @confirm_window.y = (Graphics.height - @confirm_window.height) / 2
  1678.     @confirm_window.z = @help_window.z
  1679.     @confirm_window.viewport    = @viewport
  1680.     @confirm_window.help_window = @help_window
  1681.     @confirm_window.openness    = 0
  1682.     @confirm_window.deactivate
  1683.     @confirm_window.set_handler(:decide, method(:on_confirm_decide))
  1684.     @confirm_window.set_handler(:stop,   method(:on_confirm_stop))
  1685.     @confirm_window.set_handler(:cancel, method(:on_confirm_cancel))
  1686.   end
  1687.   #--------------------------------------------------------------------------
  1688.   # ○ ウィンドウ再描画
  1689.   #--------------------------------------------------------------------------
  1690.   def refresh_window
  1691.     @actor_window.refresh
  1692.     @parameter_window.refresh
  1693.     @status_window.refresh(@parameter_window.parameter_key)
  1694.     Graphics.frame_reset
  1695.   end
  1696.   #--------------------------------------------------------------------------
  1697.   # ○ パラメータ選択 [決定]
  1698.   #--------------------------------------------------------------------------
  1699.   def on_parameter_ok
  1700.     command_confirm
  1701.   end
  1702.   #--------------------------------------------------------------------------
  1703.   # ○ パラメータ選択 [キャンセル]
  1704.   #--------------------------------------------------------------------------
  1705.   def on_parameter_cancel
  1706.     command_confirm
  1707.   end
  1708.   #--------------------------------------------------------------------------
  1709.   # ○ パラメータ選択 [加算]
  1710.   #--------------------------------------------------------------------------
  1711.   def on_parameter_increase
  1712.     param = @parameter_window.parameter_key
  1713.     unless @actor.can_distribute?(param)
  1714.       Sound.play_buzzer
  1715.       return
  1716.     end
  1717.     Sound.play_cursor
  1718.     @actor.rp_growth_effect(param)
  1719.     refresh_window
  1720.   end
  1721.   #--------------------------------------------------------------------------
  1722.   # ○ パラメータ選択 [減算]
  1723.   #--------------------------------------------------------------------------
  1724.   def on_parameter_decrease
  1725.     param = @parameter_window.parameter_key
  1726.     unless reversible?(param)
  1727.       Sound.play_buzzer
  1728.       return
  1729.     end
  1730.     Sound.play_cursor
  1731.     @actor.rp_growth_effect(param, true)
  1732.     refresh_window
  1733.   end
  1734.   #--------------------------------------------------------------------------
  1735.   # ○ ステータス更新
  1736.   #--------------------------------------------------------------------------
  1737.   def update_status
  1738.     @status_window.refresh(@parameter_window.parameter_key)
  1739.   end
  1740.   #--------------------------------------------------------------------------
  1741.   # ○ 減算可否判定
  1742.   #     param : 対象パラメータ
  1743.   #--------------------------------------------------------------------------
  1744.   def reversible?(param)
  1745.     return false if @actor.distributed_count(param) == 0
  1746.     return true  if KMS_DistributeParameter::ENABLE_REVERSE_DISTRIBUTE
  1747.  
  1748.     # 前回より減らなければ OK
  1749.     base = @prev_info.count[param]
  1750.     return ( base < @actor.distributed_count(param) )
  1751.   end
  1752.   #--------------------------------------------------------------------------
  1753.   # ○ パラメータウィンドウに切り替え
  1754.   #--------------------------------------------------------------------------
  1755.   def command_parameter
  1756.     @confirm_window.deactivate
  1757.     @confirm_window.close
  1758.     @help_window.close
  1759.     @parameter_window.activate
  1760.   end
  1761.   #--------------------------------------------------------------------------
  1762.   # ○ 確認ウィンドウに切り替え
  1763.   #--------------------------------------------------------------------------
  1764.   def command_confirm
  1765.     @status_window.refresh
  1766.     @confirm_window.index  = 0
  1767.     @confirm_window.activate
  1768.     @confirm_window.open
  1769.     @help_window.open
  1770.     @parameter_window.deactivate
  1771.   end
  1772.   #--------------------------------------------------------------------------
  1773.   # ○ 確認 [確定]
  1774.   #--------------------------------------------------------------------------
  1775.   def on_confirm_decide
  1776.     return_scene
  1777.   end
  1778.   #--------------------------------------------------------------------------
  1779.   # ○ 確認 [中止]
  1780.   #--------------------------------------------------------------------------
  1781.   def on_confirm_stop
  1782.     @actor.set_distribution_info(@prev_info)
  1783.     return_scene
  1784.   end
  1785.   #--------------------------------------------------------------------------
  1786.   # ○ 確認 [キャンセル]
  1787.   #--------------------------------------------------------------------------
  1788.   def on_confirm_cancel
  1789.     command_parameter
  1790.   end
  1791.   #--------------------------------------------------------------------------
  1792.   # ● アクターの切り替え
  1793.   #--------------------------------------------------------------------------
  1794.   def on_actor_change
  1795.     @prev_actor.set_distribution_info(@prev_info)
  1796.     @prev_info  = @actor.distribution_info
  1797.     @prev_actor = @actor
  1798.  
  1799.     @actor_window.actor     = @actor
  1800.     @parameter_window.actor = @actor
  1801.     @status_window.actor    = @actor
  1802.     @parameter_window.activate
  1803.     refresh_window
  1804.   end
  1805. end

作者: alexncf125    时间: 2022-12-20 11:39
本帖最后由 alexncf125 于 2022-12-20 11:41 编辑

126~127行中间插入PERSONAL_GAIN_PARAMETER = Array.new($data_actors.size, [])
137~138行中间插入CLASS_GAIN_PARAMETER = Array.new($data_classes.size, [])





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