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

Project1

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

[已经解决] 关于undefined method 'collect' for nil:NilClass

[复制链接]

Lv1.梦旅人

梦石
0
星屑
66
在线时间
434 小时
注册时间
2006-5-25
帖子
201
跳转到指定楼层
1
发表于 2013-10-5 01:04:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 xmheart 于 2013-10-6 01:07 编辑

添加了RGSSスクリプト倉庫的併用化ベーススクリプトC之后出现这个错误,在Game_Actor第173行,
  1.   def equips
  2.     @equips.collect {|item| item.object }
  3.   end
复制代码
我搜索一下引起冲突的併用化ベーススクリプトC中关于'collect'这个字,没找到相关字,但在这个脚本中找到一个关于@equips的语句
  1.   alias k_skillmemorize_before_change_equip change_equip
  2.   def change_equip(slot_id, item)
  3.     cheack_obj = @equips[slot_id].object.clone if @equips[slot_id] && @equips[slot_id].object
  4.     k_skillmemorize_before_change_equip(slot_id, item)
  5.     refresh
  6.     #追加装備のスキル削除処理
  7.     auto_state_adder_ex(cheack_obj) if KURE::BaseScript::C_AUTO_STATE_ADDER == 1
  8.   end
复制代码
不知道是不是这个东西产生影响呢?而且我全局搜索都没看到定义collect的语句,但是却看到很多XX.collect的语法,为什么又会出现NoMethodError呢?

Lv3.寻梦者

唯一的信徒

梦石
0
星屑
1665
在线时间
1357 小时
注册时间
2013-1-29
帖子
1637
2
发表于 2013-10-5 09:29:25 | 只看该作者
说白了就是找不到@equips这个变量

一个估计不行的方法:
把那个@equips.collect {|item| item.object } 替换成@equips.collect {|item| item.object } if @equips

点评

尝试按这个方法弄,不行,变成另外一个错误,我想还是要解决这个问题  发表于 2013-10-5 13:03
『我只是一个正在潜心修炼的渣乐师罢了』
Dear Time\(^o^)/~


假如上面的图片挂了的话麻烦各位去发个帖 @ 一下 orzFly 让他修复 deartime
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3846
在线时间
1966 小时
注册时间
2013-1-3
帖子
9536
3
发表于 2013-10-5 09:31:54 | 只看该作者
找不到equips变量,应该是与其他脚本冲突所导致…

点评

证实是脚本冲突了。。。正在解决  发表于 2013-10-5 13:04
《宿愿·寻剑篇》正式版已经发布!快去看看!点击进入论坛发布贴
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

百合控

梦石
0
星屑
6643
在线时间
1275 小时
注册时间
2013-8-21
帖子
3657

开拓者

4
发表于 2013-10-5 10:41:22 | 只看该作者
运行时,系统发现@equips这个变量不存在,然后就创建了一个@equips,可是新创建的变量是空值(Nil)
空值自然没有什么方法collect,导致错误
这种问题应该是脚本冲突【同3楼
二楼的做法治标不治本……但是我也不知道怎么治本……
萌新瑟瑟发抖
看到我请叫我去干活
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
66
在线时间
434 小时
注册时间
2006-5-25
帖子
201
5
 楼主| 发表于 2013-10-5 13:16:00 | 只看该作者
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ パラメータ振り分け - KMS_DistributeParameter ◆ VXAce ◆
  3. #_/    ◇ Last update : 2012/08/05 (TOMY@Kamesoft) ◇
  4. #_/----------------------------------------------------------------------------
  5. #_/  パラメータ振り分け機能を作成します。
  6. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

  7. #==============================================================================
  8. # ★ 設定項目 - BEGIN Setting ★
  9. #==============================================================================

  10. module KMS_DistributeParameter
  11.   # ◆ パラメータ振り分け箇所
  12.   #  振り分け箇所および増加量を
  13.   #   {
  14.   #     :key        => キー,
  15.   #     :name       => "名称",
  16.   #     :limit      => 回数上限,
  17.   #     :cost       => [消費 RP, 消費 RP 補正],
  18.   #     :パラメータ => [上昇量, 上昇量補正],
  19.   #     # 以降、パラメータを必要なだけ記述
  20.   #   },
  21.   #  という書式で追加。
  22.   #  振り分け画面では、追加した順に表示。
  23.   #  「キー」には、他の箇所と被らない名称を指定。
  24.   #  (内部で振り分け箇所を特定するために使用。数値、文字列など何でもOK)
  25.   #  「回数上限」以外は小数でもOK。
  26.   #  「回数上限」を 0 にすると回数無制限。
  27.   #  「消費 RP 補正」と「上昇量補正」は省略可。省略時は 0。
  28.   GAIN_PARAMETER = [
  29.     {
  30.       :key   => :str,
  31.       :name  => "力量(STR)",
  32.       :limit => 30,
  33.       :cost  => [ 1, 0.4],
  34.       :mhp   => [30, 2],
  35.       :def   => [ 1, 0.25],
  36.     },
  37.     {
  38.       :key   => :agi,
  39.       :name  => "敏捷(AGI)",
  40.       :limit => 30,
  41.       :cost  => [1, 0.4],
  42.       :mmp   => [5, 0.5],
  43.       :mat   => [2, 0.5],
  44.     },
  45.     {
  46.       :key   => :vit,
  47.       :name  => "体质(VIT)",
  48.       :limit => 30,
  49.       :cost  => [1, 0.4],
  50.       :atk   => [2, 0.5],
  51.       :def   => [1, 0.25],
  52.       :str   => [1, 0.25],
  53.     },
  54.     {
  55.       :key   => :int,
  56.       :name  => "智力(INT)",
  57.       :limit => 30,
  58.       :cost  => [1, 0.4],
  59.       :agi   => [2, 0.5],
  60.       :luk   => [0.005],
  61.       :eva   => [0.005],
  62.     },
  63.     {
  64.       :key   => :dex,
  65.       :name  => "灵巧(DEX)",
  66.       :limit => 20,
  67.       :cost  => [1, 0.5],
  68.       :luk   => [1]
  69.     },
  70.     {
  71.       :key   => :luk,
  72.       :name  => "幸运(LUK)",
  73.       :limit => 20,
  74.       :cost  => [1, 0.5],
  75.       :luk   => [0.01],
  76.     }
  77.   ]  # ← この ] は消さないこと!

  78.   # ◆ アクター固有のパラメータ増加量
  79.   PERSONAL_GAIN_PARAMETER = []
  80.   #  ここから下に、アクターごとの振り分け時の増加量を
  81.   #   PERSONAL_GAIN_PARAMETER[アクター ID] = [ 振り分け箇所 ]
  82.   #  という書式で指定。
  83.   #  「振り分け箇所」は GAIN_PARAMETER と同様の書式。
  84.   #  キーが GAIN_PARAMETER と同じ場合、GAIN_PARAMETER に上書き。
  85.   #  指定しなかったパラメータ/アクターは GAIN_PARAMETER を使用。
  86.   #
  87.   # <例> アクター1の "体力" を個別に指定。
  88.   #PERSONAL_GAIN_PARAMETER[1] = [
  89.   #  {
  90.   #    :key   => :str,
  91.   #    :name  => "力量",
  92.   #    :limit => 30,
  93.   #    :cost  => [ 1, 0.4],
  94.   #    :mhp   => [50, 3],
  95.   #    :def   => [ 1, 0.3],
  96.   #  },
  97.   #]
  98.   #
  99.   # ◆ 職業固有のパラメータ増加量
  100.   CLASS_GAIN_PARAMETER = []
  101.   #  ここから下に、職業ごとの振り分け時の増加量を
  102.   #   CLASS_GAIN_PARAMETER[職業 ID] = [ 振り分け箇所 ]
  103.   #  という書式で指定。
  104.   #  その他はアクター固有の設定と同様。
  105.   #  (優先度は  職業 > アクター > デフォルト)

  106.   # ◆ RP (振り分け用ポイント) の名称
  107.   VOCAB_RP   = "RP"
  108.   # ◆ RP の名称 (略)
  109.   VOCAB_RP_A = "R"

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

  114.   # ◆ パラメータ名
  115.   #  ≪拡張装備画面≫ と併用した場合、下に導入した方を優先。
  116.   VOCAB_PARAM = {
  117.     :hit         => "命中率",        # 命中率
  118.     :eva         => "回避率",        # 回避率
  119.     :cri         => "暴击率",        # クリティカル率
  120.     :tgr         => "狙われやすさ",  # 狙われやすさ
  121.   }  # ← この } は消さないこと!

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

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

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

  140.   # ◆ 振り分け終了時の確認コマンド
  141.   CONFIRM_COMMANDS = [
  142.     " 振り分け確定",  # 振り分け確定
  143.     " 振り分け中止",  # 振り分け中止
  144.     " 振り分けを続ける",  # 振り分けを続ける
  145.   ]  # ← この ] は消さないこと!

  146.   # ◆ 確認コマンドのヘルプ
  147.   CONFIRM_COMMAND_HELP = [
  148.     "振り分け操作を確定します。",        # 振り分け確定
  149.     "今回の振り分け操作を破棄します。",   # 振り分け中止
  150.     "振り分けを続けます。",              # 振り分けを続ける
  151.   ]  # ← この ] は消さないこと!

  152.   # ◆ 振り分け終了時の確認コマンドの幅
  153.   CONFIRM_WIDTH = 150

  154.   # ◆ メニュー画面に「パラメータ振り分け」コマンドを追加する
  155.   #  追加する場所は、メニューコマンドの最下部です。
  156.   #  他の部分に追加したい場合は、≪カスタムメニューコマンド≫ をご利用ください。
  157.   USE_MENU_DISTRIBUTE_PARAMETER_COMMAND = true
  158.   # ◆ メニュー画面の「パラメータ振り分け」コマンドの名称
  159.   VOCAB_MENU_DISTRIBUTE_PARAMETER       = "属性点分配"

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

  165. #==============================================================================
  166. # ☆ 設定ここまで - END Setting ☆
  167. #==============================================================================

  168. $kms_imported = {} if $kms_imported == nil
  169. $kms_imported["DistributeParameter"] = true

  170. module KMS_DistributeParameter
  171.   # 振り分け対象パラメータ
  172.   PARAMS = [:mhp, :mmp, :atk, :def, :mat, :mdf, :str, :agi, :vit, :int, :dex, :luk,
  173.     :hit, :eva, :cri]
  174.   PARAMS |= [:hit, :eva, :cri, :cev, :mev, :mrf, :cnt, :hrg, :mrg, :trg]
  175.   PARAMS |= [:tgr, :grd, :rec, :pha, :mcr, :tcr, :pdr, :mdr, :fdr, :exr]

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

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

  181.   #--------------------------------------------------------------------------
  182.   # ○ パラメータ増加量を構造体化
  183.   #--------------------------------------------------------------------------
  184.   def self.create_gain_param_structs(target)
  185.     result = []
  186.     target.each { |v|
  187.       info = GainInfo.new
  188.       info.key      = v[:key]
  189.       info.name     = v[:name]
  190.       info.limit    = v[:limit]
  191.       info.cost     = v[:cost][0]
  192.       info.cost_rev = (v[:cost][1] == nil ? 0 : v[:cost][1])
  193.       info.params   = {}

  194.       PARAMS.each { |param|
  195.         next unless v.has_key?(param)
  196.         pinfo = ParamInfo.new
  197.         pinfo.value     = v[param][0]
  198.         pinfo.value_rev = (v[param][1] == nil ? 0 : v[param][1])
  199.         info.params[param] = pinfo
  200.       }
  201.       result << info
  202.     }
  203.     return result
  204.   end
  205.   #--------------------------------------------------------------------------
  206.   # ○ パラメータ増加量を構造体化 (固有増加量用)
  207.   #--------------------------------------------------------------------------
  208.   def self.create_gain_param_structs_for_personal(target)
  209.     result = []
  210.     target.each { |list|
  211.       next if list == nil
  212.       result << create_gain_param_structs(list)
  213.     }
  214.     return result
  215.   end
  216.   #--------------------------------------------------------------------------
  217.   # ○ パラメータ増加量を併合
  218.   #--------------------------------------------------------------------------
  219.   def self.merge(list1, list2)
  220.     result = list1.clone
  221.     list2.each { |info2|
  222.       overwrite = false
  223.       list1.each_with_index { |info1, i|
  224.         if info1.key == info2.key
  225.           result[i] = info2
  226.           overwrite = true
  227.           break
  228.         end
  229.       }
  230.       result << info2 unless overwrite
  231.     }
  232.     return result
  233.   end

  234.   # パラメータ増加量を構造体化
  235.   GAIN_PARAMS = create_gain_param_structs(GAIN_PARAMETER)
  236.   PERSONAL_GAIN_PARAMS =
  237.     create_gain_param_structs_for_personal(PERSONAL_GAIN_PARAMETER)
  238.   CLASS_GAIN_PARAMS =
  239.     create_gain_param_structs_for_personal(CLASS_GAIN_PARAMETER)
  240. end

  241. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  242. #==============================================================================
  243. # ■ Vocab
  244. #==============================================================================

  245. module Vocab
  246.   # 命中率
  247.   def self.hit
  248.     return KMS_DistributeParameter::VOCAB_PARAM[:hit]
  249.   end

  250.   # 回避率
  251.   def self.eva
  252.     return KMS_DistributeParameter::VOCAB_PARAM[:eva]
  253.   end

  254.   # クリティカル率
  255.   def self.cri
  256.     return KMS_DistributeParameter::VOCAB_PARAM[:cri]
  257.   end

  258.   # 狙われやすさ
  259.   def self.tgr
  260.     return KMS_DistributeParameter::VOCAB_PARAM[:tgr]
  261.   end

  262.   # RP
  263.   def self.rp
  264.     return KMS_DistributeParameter::VOCAB_RP
  265.   end

  266.   # RP (略)
  267.   def self.rp_a
  268.     return KMS_DistributeParameter::VOCAB_RP_A
  269.   end

  270.   # パラメータ振り分け
  271.   def self.distribute_parameter
  272.     return KMS_DistributeParameter::VOCAB_MENU_DISTRIBUTE_PARAMETER
  273.   end
  274. end

  275. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  276. #==============================================================================
  277. # ■ DataManager
  278. #==============================================================================

  279. module DataManager
  280.   module_function
  281.   #--------------------------------------------------------------------------
  282.   # ● セーブ内容の展開
  283.   #--------------------------------------------------------------------------
  284.   class << DataManager
  285.     unless method_defined?(:extract_save_contents_KMS_DistributeParameter)
  286.       alias extract_save_contents_KMS_DistributeParameter extract_save_contents
  287.     end
  288.   end
  289.   def extract_save_contents(contents)
  290.     extract_save_contents_KMS_DistributeParameter(contents)

  291.     KMS_Commands.check_distribution_values
  292.     Graphics.frame_reset
  293.   end
  294. end

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

  296. #==============================================================================
  297. # □ KMS_Commands
  298. #==============================================================================

  299. module KMS_Commands
  300.   module_function
  301.   #--------------------------------------------------------------------------
  302.   # ○ パラメータ振り分けに関する値をチェック
  303.   #--------------------------------------------------------------------------
  304.   def check_distribution_values
  305.     (1...$data_actors.size).each { |i|
  306.       actor = $game_actors[i]
  307.       actor.check_distribution_values
  308.       actor.restore_distribution_values
  309.     }
  310.   end
  311.   #--------------------------------------------------------------------------
  312.   # ○ RP の増減
  313.   #     actor_id : アクター ID
  314.   #     value    : 増減量
  315.   #--------------------------------------------------------------------------
  316.   def gain_rp(actor_id, value)
  317.     actor = $game_actors[actor_id]
  318.     return if actor == nil
  319.     actor.gain_rp(value)
  320.   end
  321.   #--------------------------------------------------------------------------
  322.   # ○ 振り分けの実行
  323.   #     actor_id : アクター ID
  324.   #     key      : 対象パラメータのキー
  325.   #     num      : 振り分け回数
  326.   #--------------------------------------------------------------------------
  327.   def distribute_param_actor(actor_id, key, num = 1)
  328.     actor = $game_actors[actor_id]
  329.     return if actor == nil

  330.     # 逆加算判定
  331.     reverse = false
  332.     if num < 0
  333.       reverse = true
  334.       num = num.abs
  335.     end

  336.     # 適用
  337.     num.times { |i| actor.rp_growth_effect(key, reverse) }
  338.   end
  339.   #--------------------------------------------------------------------------
  340.   # ○ 振り分け回数をリセット
  341.   #     actor_id : アクター ID
  342.   #--------------------------------------------------------------------------
  343.   def reset_distributed_count(actor_id)
  344.     actor = $game_actors[actor_id]
  345.     return if actor == nil
  346.     actor.clear_distribution_values
  347.     actor.restore_distribution_values
  348.   end
  349.   #--------------------------------------------------------------------------
  350.   # ○ パラメータ振り分け画面の呼び出し
  351.   #     actor_index : アクターインデックス
  352.   #--------------------------------------------------------------------------
  353.   def call_distribute_parameter(actor_index = 0)
  354.     return if $game_party.in_battle
  355.     $game_temp.call_distribute_parameter = true
  356.     $game_party.menu_actor = $game_party.members[actor_index]
  357.   end
  358. end

  359. class Game_Interpreter
  360.   include KMS_Commands
  361. end

  362. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  363. #==============================================================================
  364. # ■ Game_Temp
  365. #==============================================================================

  366. class Game_Temp
  367.   #--------------------------------------------------------------------------
  368.   # ● 公開インスタンス変数
  369.   #--------------------------------------------------------------------------
  370.   attr_accessor :call_distribute_parameter  # 振り分け画面呼び出しフラグ
  371.   attr_accessor :menu_actor_index           # 各種メニュー画面用のアクター index
  372.   #--------------------------------------------------------------------------
  373.   # ● オブジェクト初期化
  374.   #--------------------------------------------------------------------------
  375.   alias initialize_KMS_DistributeParameter initialize
  376.   def initialize
  377.     initialize_KMS_DistributeParameter

  378.     @call_distribute_parameter = false
  379.     @menu_actor_index = 0
  380.   end
  381. end

  382. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  383. #==============================================================================
  384. # ■ Game_BattlerBase
  385. #==============================================================================

  386. class Game_BattlerBase
  387.   #--------------------------------------------------------------------------
  388.   # ● 能力値に加算する値をクリア
  389.   #--------------------------------------------------------------------------
  390.   alias clear_param_plus_KMS_DistributeParameter clear_param_plus
  391.   def clear_param_plus
  392.     clear_param_plus_KMS_DistributeParameter

  393.     clear_distribution_values
  394.     calc_distribution_values
  395.   end
  396.   #--------------------------------------------------------------------------
  397.   # ○ パラメータ振り分けに関する値をクリア
  398.   #--------------------------------------------------------------------------
  399.   def clear_distribution_values
  400.     @distributed_count = {}
  401.     KMS_DistributeParameter::PARAMS.each { |param|
  402.       @distributed_count[param] = 0
  403.     }
  404.   end
  405.   #--------------------------------------------------------------------------
  406.   # ○ パラメータ振り分けに関する値をチェック
  407.   #--------------------------------------------------------------------------
  408.   def check_distribution_values
  409.     last_distributed_count = @distributed_count

  410.     clear_distribution_values

  411.     @distributed_count = last_distributed_count if last_distributed_count != nil
  412.   end
  413.   #--------------------------------------------------------------------------
  414.   # ○ 各種修正値を計算
  415.   #--------------------------------------------------------------------------
  416.   def calc_distribution_values
  417.     # 継承先で定義
  418.   end
  419.   #--------------------------------------------------------------------------
  420.   # ○ 振り分けによる上昇値を取得
  421.   #     param : パラメータの Symbol
  422.   #--------------------------------------------------------------------------
  423.   def distributed_param(param)
  424.     return 0
  425.   end
  426.   #--------------------------------------------------------------------------
  427.   # ○ 振り分けに関する情報を取得
  428.   #--------------------------------------------------------------------------
  429.   def distribution_info
  430.     info = KMS_DistributeParameter::DistInfo.new
  431.     info.count = @distributed_count.clone
  432.     info.hp    = self.hp
  433.     info.mp    = self.mp
  434.     return info
  435.   end
  436.   #--------------------------------------------------------------------------
  437.   # ○ 振り分けに関する情報を設定
  438.   #--------------------------------------------------------------------------
  439.   def set_distribution_info(info)
  440.     return unless info.is_a?(KMS_DistributeParameter::DistInfo)

  441.     @distributed_count = info.count
  442.     calc_distribution_values
  443.     self.hp = info.hp
  444.     self.mp = info.mp
  445.   end
  446. end

  447. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  448. #==============================================================================
  449. # ■ Game_Actor
  450. #==============================================================================

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

  464.     initialize_KMS_DistributeParameter(actor_id)
  465.   end
  466.   #--------------------------------------------------------------------------
  467.   # ○ パラメータ増加量一覧を取得
  468.   #--------------------------------------------------------------------------
  469.   def gain_parameter_list
  470.     key = "#{@actor_id}_#{@class_id}"
  471.     unless @@__distribute_gain_params.has_key?(key)
  472.       result = KMS_DistributeParameter::GAIN_PARAMS

  473.       # アクター固有
  474.       list   = KMS_DistributeParameter::PERSONAL_GAIN_PARAMS[@actor_id]
  475.       result = KMS_DistributeParameter.merge(result, list) if list != nil

  476.       # 職業固有
  477.       list   = KMS_DistributeParameter::CLASS_GAIN_PARAMS[@class_id]
  478.       result = KMS_DistributeParameter.merge(result, list) if list != nil

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

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

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

  510.     KMS_DistributeParameter::PARAMS.each { |param|
  511.       @distributed_param[param] = @distributed_param[param]
  512.     }
  513.   end
  514.   #--------------------------------------------------------------------------
  515.   # ○ 各種修正値を修復
  516.   #--------------------------------------------------------------------------
  517.   def restore_distribution_values
  518.     calc_distribution_values
  519.     self.hp = self.hp
  520.     self.mp = self.mp
  521.   end
  522.   #--------------------------------------------------------------------------
  523.   # ○ 振り分けによる上昇値を取得
  524.   #     param : パラメータの Symbol
  525.   #--------------------------------------------------------------------------
  526.   def distributed_param(param)
  527.     return 0 if @distributed_param == nil
  528.     return 0 if @distributed_param[param] == nil
  529.     return @distributed_param[param]
  530.   end
  531.   PARAM_SYMBOL  = [:mhp, :mmp, :atk, :def, :mat, :mdf, :str, :agi, :vit, :int, :dex, :luk]
  532.   XPARAM_SYMBOL = [:hit, :eva, :cri, :cev, :mev, :mrf, :cnt, :hrg, :mrg, :trg]
  533.   SPARAM_SYMBOL = [:tgr, :grd, :rec, :pha, :mcr, :tcr, :pdr, :mdr, :fdr, :exr]
  534.   #--------------------------------------------------------------------------
  535.   # ● 通常能力値の基本値取得
  536.   #--------------------------------------------------------------------------
  537.   alias param_base_KMS_DistributeParameter param_base
  538.   def param_base(param_id)
  539.     n = param_base_KMS_DistributeParameter(param_id)
  540.     if PARAM_SYMBOL[param_id] != nil
  541.       n += distributed_param(PARAM_SYMBOL[param_id])
  542.     end

  543.     return Integer(n)
  544.   end
  545.   #--------------------------------------------------------------------------
  546.   # ● 命中率の取得
  547.   #--------------------------------------------------------------------------
  548.   alias hit_KMS_DistributeParameter hit
  549.   def hit
  550.     n = hit_KMS_DistributeParameter + distributed_param(:hit)
  551.     return n
  552.   end
  553.   #--------------------------------------------------------------------------
  554.   # ● 回避率の取得
  555.   #--------------------------------------------------------------------------
  556.   alias eva_KMS_DistributeParameter eva
  557.   def eva
  558.     n = eva_KMS_DistributeParameter + distributed_param(:eva)
  559.     return n
  560.   end
  561.   #--------------------------------------------------------------------------
  562.   # ● クリティカル率の取得
  563.   #--------------------------------------------------------------------------
  564.   alias cri_KMS_DistributeParameter cri
  565.   def cri
  566.     n = cri_KMS_DistributeParameter + distributed_param(:cri)
  567.     return n
  568.   end
  569.   #--------------------------------------------------------------------------
  570.   # ● 狙われ率の取得
  571.   #--------------------------------------------------------------------------
  572.   alias tgr_KMS_DistributeParameter tgr
  573.   def tgr
  574.     n = tgr_KMS_DistributeParameter + distributed_param(:tgr)
  575.     return n
  576.   end
  577.   #--------------------------------------------------------------------------
  578.   # ○ MaxRP の取得
  579.   #--------------------------------------------------------------------------
  580.   def mrp
  581.     n = Integer(eval(KMS_DistributeParameter::MAXRP_EXP))
  582.     return [n + mrp_plus, 0].max
  583.   end
  584.   #--------------------------------------------------------------------------
  585.   # ○ MaxRP 補正値の取得
  586.   #--------------------------------------------------------------------------
  587.   def mrp_plus
  588.     @mrp_plus = 0 if @mrp_plus == nil
  589.     return @mrp_plus
  590.   end
  591.   #--------------------------------------------------------------------------
  592.   # ○ RP の取得
  593.   #--------------------------------------------------------------------------
  594.   def rp
  595.     return [mrp - @rp_cost, 0].max
  596.   end
  597.   #--------------------------------------------------------------------------
  598.   # ○ 振り分け回数の取得
  599.   #     param : 振り分け先パラメータ (キー)
  600.   #--------------------------------------------------------------------------
  601.   def distributed_count(param)
  602.     clear_distribution_values     if @distributed_count == nil
  603.     @distributed_count[param] = 0 if @distributed_count[param] == nil
  604.     return @distributed_count[param]
  605.   end
  606.   #--------------------------------------------------------------------------
  607.   # ○ RP の増減
  608.   #     value : 増減量
  609.   #--------------------------------------------------------------------------
  610.   def gain_rp(value)
  611.     @mrp_plus = mrp_plus + value
  612.   end
  613.   #--------------------------------------------------------------------------
  614.   # ○ 振り分け回数の増減
  615.   #     param : 振り分け先パラメータ (キー)
  616.   #     value : 増減量
  617.   #--------------------------------------------------------------------------
  618.   def gain_distributed_count(param, value = 1)
  619.     n = distributed_count(param)
  620.     @distributed_count[param] += value if n.is_a?(Integer)
  621.   end
  622.   #--------------------------------------------------------------------------
  623.   # ○ RP 振り分けによる成長効果適用
  624.   #     param   : 振り分け先パラメータ (キー)
  625.   #     reverse : 逆加算のときは true
  626.   #--------------------------------------------------------------------------
  627.   def rp_growth_effect(param, reverse = false)
  628.     gain = gain_parameter(param)
  629.     return if gain == nil  # 無効なパラメータ

  630.     if reverse
  631.       return if distributed_count(param) == 0  # 逆加算不可
  632.     else
  633.       return unless can_distribute?(param)
  634.     end

  635.     gain_distributed_count(param, reverse ? -1 : 1)
  636.     restore_distribution_values
  637.   end
  638.   #--------------------------------------------------------------------------
  639.   # ○ パラメータ振り分け可否判定
  640.   #     param : 振り分け先パラメータ (キー)
  641.   #--------------------------------------------------------------------------
  642.   def can_distribute?(param)
  643.     gain = gain_parameter(param)
  644.     return false if gain == nil                        # 無効なパラメータ
  645.     return false if self.rp < distribute_cost(param)   # RP 不足
  646.     if gain.limit > 0
  647.       return false if gain.limit <= distributed_count(param)  # 回数上限
  648.     end

  649.     return true
  650.   end
  651.   #--------------------------------------------------------------------------
  652.   # ○ パラメータ振り分けコスト計算
  653.   #     param : 振り分け先パラメータ (キー)
  654.   #--------------------------------------------------------------------------
  655.   def distribute_cost(param)
  656.     gain = gain_parameter(param)
  657.     return 0 if gain == nil  # 無効なパラメータ

  658.     n = gain.cost
  659.     count = distributed_count(param)
  660.     count = [count, gain.limit - 1].min if gain.limit > 0
  661.     n += gain.cost_rev * count
  662.     return [Integer(n), 0].max
  663.   end
  664.   #--------------------------------------------------------------------------
  665.   # ○ パラメータ振り分け後の増加量計算
  666.   #     param : 振り分け先パラメータ (キー)
  667.   #     amt   : 振り分け数
  668.   #--------------------------------------------------------------------------
  669.   def distribute_gain(param, amt = 1)
  670.     gain = gain_parameter(param)

  671.     # 無効なパラメータ
  672.     return 0 if gain == nil

  673.     result = {}
  674.     KMS_DistributeParameter::PARAMS.each { |par|
  675.       result[par] = distributed_param(par)
  676.     }

  677.     # 振り分け不可
  678.     if amt > 0
  679.       return result if gain.limit > 0 && gain.limit == distributed_count(param)
  680.     else
  681.       return result if distributed_count(param) + amt < 0
  682.     end

  683.     last_hp = self.hp
  684.     last_mp = self.mp
  685.     last_count = distributed_count(param)
  686.     rp_growth_effect(param)
  687.     KMS_DistributeParameter::PARAMS.each { |par|
  688.       result[par] = distributed_param(par) if gain.params.include?(par)
  689.     }
  690.     rp_growth_effect(param, true) if last_count < distributed_count(param)
  691.     self.hp = last_hp
  692.     self.mp = last_mp

  693.     return result
  694.   end
  695. end

  696. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  697. #==============================================================================
  698. # ■ Window_Base
  699. #==============================================================================

  700. class Window_Base < Window
  701.   #--------------------------------------------------------------------------
  702.   # ○ RP の文字色を取得
  703.   #     actor : アクター
  704.   #--------------------------------------------------------------------------
  705.   def rp_color(actor)
  706.     return (actor.rp == 0 ? knockout_color : normal_color)
  707.   end
  708.   #--------------------------------------------------------------------------
  709.   # ○ 振り分けゲージの色 1 の取得
  710.   #--------------------------------------------------------------------------
  711.   def distribute_gauge_color1
  712.     color = KMS_DistributeParameter::GAUGE_START_COLOR
  713.     return (color.is_a?(Integer) ? text_color(color) : color)
  714.   end
  715.   #--------------------------------------------------------------------------
  716.   # ○ 振り分けゲージの色 2 の取得
  717.   #--------------------------------------------------------------------------
  718.   def distribute_gauge_color2
  719.     color = KMS_DistributeParameter::GAUGE_END_COLOR
  720.     return (color.is_a?(Integer) ? text_color(color) : color)
  721.   end
  722.   #--------------------------------------------------------------------------
  723.   # ○ RP の描画
  724.   #     actor : アクター
  725.   #     x     : 描画先 X 座標
  726.   #     y     : 描画先 Y 座標
  727.   #     width : 幅
  728.   #--------------------------------------------------------------------------
  729.   def draw_actor_rp(actor, x, y, width = 124)
  730.     change_color(system_color)
  731.     draw_text(x, y, 30, line_height, Vocab::rp_a)
  732.     draw_current_and_max_values(x, y, width, actor.rp, actor.mrp,
  733.       rp_color(actor), normal_color)
  734.     change_color(normal_color)
  735.   end
  736.   #--------------------------------------------------------------------------
  737.   # ○ 振り分けゲージの描画
  738.   #     actor : アクター
  739.   #     param : パラメータ
  740.   #     x     : 描画先 X 座標
  741.   #     y     : 描画先 Y 座標
  742.   #     width : 幅
  743.   #--------------------------------------------------------------------------
  744.   def draw_actor_distribute_gauge(actor, param, x, y, width = 124)
  745.     gain = actor.gain_parameter(param)
  746.     return if gain == nil || gain.limit <= 0

  747.     rate = actor.distributed_count(param) * 1.0 / gain.limit
  748.     if $kms_imported["GenericGauge"] &&
  749.         KMS_DistributeParameter::ENABLE_GENERIC_GAUGE
  750.       # 汎用ゲージ
  751.       draw_generic_gauge(KMS_DistributeParameter::GAUGE_IMAGE,
  752.         x, y, width, rate,
  753.         KMS_DistributeParameter::GAUGE_OFFSET,
  754.         KMS_DistributeParameter::GAUGE_LENGTH,
  755.         KMS_DistributeParameter::GAUGE_SLOPE)
  756.     else
  757.       # デフォルトゲージ
  758.       gc1  = distribute_gauge_color1
  759.       gc2  = distribute_gauge_color2
  760.       draw_gauge(x, y, width, rate, gc1, gc2)
  761.     end
  762.   end
  763. end

  764. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  765. #==============================================================================
  766. # ■ Window_MenuCommand
  767. #==============================================================================

  768. class Window_MenuCommand < Window_Command
  769.   if KMS_DistributeParameter::USE_MENU_DISTRIBUTE_PARAMETER_COMMAND &&
  770.       !$kms_imported["CustomMenuCommand"]
  771.     #--------------------------------------------------------------------------
  772.     # ● コマンドリストの作成
  773.     #--------------------------------------------------------------------------
  774.     alias make_command_list_KMS_DistributeParameter make_command_list
  775.     def make_command_list
  776.       make_command_list_KMS_DistributeParameter

  777.       add_distribute_parameter_command
  778.     end
  779.   end
  780.   #--------------------------------------------------------------------------
  781.   # ○ 振り分けコマンドをリストに追加
  782.   #--------------------------------------------------------------------------
  783.   def add_distribute_parameter_command
  784.     add_command(Vocab::distribute_parameter,
  785.       :distribute_parameter,
  786.       distribute_parameter_enabled)
  787.   end
  788.   #--------------------------------------------------------------------------
  789.   # ○ パラメータ振り分けの有効状態を取得
  790.   #--------------------------------------------------------------------------
  791.   def distribute_parameter_enabled
  792.     return true
  793.   end
  794. end

  795. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  796. #==============================================================================
  797. # □ Window_DistributeParameterActor
  798. #------------------------------------------------------------------------------
  799. #   振り分け画面で、アクターの情報を表示するウィンドウです。
  800. #==============================================================================

  801. class Window_DistributeParameterActor < Window_Base
  802.   #--------------------------------------------------------------------------
  803.   # ○ 公開インスタンス変数
  804.   #--------------------------------------------------------------------------
  805.   attr_accessor :actor
  806.   #--------------------------------------------------------------------------
  807.   # ● オブジェクト初期化
  808.   #     x     : ウィンドウの X 座標
  809.   #     y     : ウィンドウの Y 座標
  810.   #     actor : アクター
  811.   #--------------------------------------------------------------------------
  812.   def initialize(x, y, actor)
  813.     super(x, y, Graphics.width, line_height + 32)
  814.     [url=home.php?mod=space&uid=95897]@actor[/url] = actor
  815.     refresh
  816.   end
  817.   #--------------------------------------------------------------------------
  818.   # ● リフレッシュ
  819.   #--------------------------------------------------------------------------
  820.   def refresh
  821.     contents.clear
  822.     draw_actor_name(@actor, 4, 0)
  823.     draw_actor_level(@actor, 140, 0)
  824.     draw_actor_rp(@actor, 240, 0)
  825.   end
  826. end

  827. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  828. #==============================================================================
  829. # □ Window_DistributeParameterList
  830. #------------------------------------------------------------------------------
  831. #   振り分け画面で、成長させるパラメータを選択するウィンドウです。
  832. #==============================================================================

  833. class Window_DistributeParameterList < Window_Selectable
  834.   #--------------------------------------------------------------------------
  835.   # ○ 公開インスタンス変数
  836.   #--------------------------------------------------------------------------
  837.   attr_accessor :actor
  838.   #--------------------------------------------------------------------------
  839.   # ● オブジェクト初期化
  840.   #     actor : アクター
  841.   #--------------------------------------------------------------------------
  842.   def initialize(actor)
  843.     off_h = line_height + 32
  844.     super(0, off_h, 286, Graphics.height - off_h)
  845.     @actor = actor
  846.     refresh
  847.     self.index = 0
  848.   end
  849.   #--------------------------------------------------------------------------
  850.   # ○ 選択中のパラメータの Symbol を取得
  851.   #--------------------------------------------------------------------------
  852.   def parameter_key
  853.     return @data[self.index]
  854.   end
  855.   #--------------------------------------------------------------------------
  856.   # ● 項目数の取得
  857.   #--------------------------------------------------------------------------
  858.   def item_max
  859.     return @data == nil ? 0 : @data.size
  860.   end
  861.   #--------------------------------------------------------------------------
  862.   # ● 1 ページに表示できる行数の取得
  863.   #--------------------------------------------------------------------------
  864.   def page_row_max
  865.     return super - 1
  866.   end
  867.   #--------------------------------------------------------------------------
  868.   # ● 項目を描画する矩形の取得
  869.   #     index : 項目番号
  870.   #--------------------------------------------------------------------------
  871.   def item_rect(index)
  872.     rect = super(index)
  873.     rect.y += line_height
  874.     return rect
  875.   end
  876.   #--------------------------------------------------------------------------
  877.   # ● カーソルを 1 ページ後ろに移動
  878.   #--------------------------------------------------------------------------
  879.   def cursor_pagedown
  880.     return if Input.repeat?(Input::R)
  881.     super
  882.   end
  883.   #--------------------------------------------------------------------------
  884.   # ● カーソルを 1 ページ前に移動
  885.   #--------------------------------------------------------------------------
  886.   def cursor_pageup
  887.     return if Input.repeat?(Input::L)
  888.     super
  889.   end
  890.   #--------------------------------------------------------------------------
  891.   # ● リフレッシュ
  892.   #--------------------------------------------------------------------------
  893.   def refresh
  894.     @gain_list = @actor.gain_parameter_list
  895.     @data = []
  896.     @gain_list.each { |gain| @data << gain.key }
  897.     @item_max = @data.size + 1
  898.     create_contents
  899.     @item_max -= 1
  900.     draw_caption
  901.     @item_max.times { |i| draw_item(i, @actor.can_distribute?(@data[i])) }
  902.   end
  903.   #--------------------------------------------------------------------------
  904.   # ○ 見出しの描画
  905.   #--------------------------------------------------------------------------
  906.   def draw_caption
  907.     change_color(system_color)
  908.     draw_text(  4, 0, 96, line_height, "パラメータ")
  909.     draw_text(120, 0, 40, line_height, Vocab.rp, 2)
  910.     draw_text(170, 0, 80, line_height, "回数", 2)
  911.     change_color(normal_color)
  912.   end
  913.   #--------------------------------------------------------------------------
  914.   # ○ 項目の描画
  915.   #     index   : 項目番号
  916.   #     enabled : 有効フラグ
  917.   #--------------------------------------------------------------------------
  918.   def draw_item(index, enabled = true)
  919.     rect = item_rect(index)
  920.     contents.clear_rect(rect)
  921.     item = @data[index]
  922.     if item != nil
  923.       draw_parameter(rect.x, rect.y, @data[index], enabled)
  924.     end
  925.   end
  926.   #--------------------------------------------------------------------------
  927.   # ○ 能力値の描画
  928.   #     x       : 描画先 X 座標
  929.   #     y       : 描画先 Y 座標
  930.   #     param   : 振り分け先
  931.   #     enabled : 有効フラグ
  932.   #--------------------------------------------------------------------------
  933.   def draw_parameter(x, y, param, enabled)
  934.     gain = @gain_list.find { |v| v.key == param }
  935.     return if gain == nil

  936.     change_color(normal_color)
  937.     contents.font.color.alpha = enabled ? 255 : 128
  938.     draw_text(x + 4, y, 96, line_height, gain.name)

  939.     # コスト描画
  940.     value = @actor.distribute_cost(param)
  941.     draw_text(x + 120, y, 40, line_height, value, 2)

  942.     # 振り分け回数描画
  943.     if gain.limit > 0
  944.       value = sprintf("%3d/%3d", @actor.distributed_count(param), gain.limit)
  945.     else
  946.       value = sprintf("%3d%s", @actor.distributed_count(param),
  947.         KMS_DistributeParameter::HIDE_MAX_COUNT_INFINITE ? "" : "/---")
  948.     end
  949.     draw_actor_distribute_gauge(@actor, param, x + 170, y, 80)
  950.     draw_text(x + 170, y, 80, line_height, value, 2)

  951.     change_color(normal_color)
  952.   end
  953.   #--------------------------------------------------------------------------
  954.   # ● 決定やキャンセルなどのハンドリング処理
  955.   #--------------------------------------------------------------------------
  956.   def process_handling
  957.     super
  958.     call_handler(:increase) if handle?(:increase) && Input.repeat?(:RIGHT)
  959.     call_handler(:decrease) if handle?(:decrease) && Input.repeat?(:LEFT)
  960.     call_handler(:up)       if handle?(:up)       && Input.repeat?(:UP)
  961.     call_handler(:down)     if handle?(:down)     && Input.repeat?(:DOWN)
  962.   end
  963. end

  964. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  965. #==============================================================================
  966. # □ Window_DistributeParameterStatus
  967. #------------------------------------------------------------------------------
  968. #   振り分け画面で、アクターのステータスを表示するウィンドウです。
  969. #==============================================================================

  970. class Window_DistributeParameterStatus < Window_Base
  971.   #--------------------------------------------------------------------------
  972.   # ○ 公開インスタンス変数
  973.   #--------------------------------------------------------------------------
  974.   attr_accessor :actor
  975.   #--------------------------------------------------------------------------
  976.   # ● オブジェクト初期化
  977.   #     actor : アクター
  978.   #--------------------------------------------------------------------------
  979.   def initialize(actor)
  980.     dx = 286
  981.     off_h = line_height + 32
  982.     super(dx, off_h, Graphics.width - dx, Graphics.height - off_h)
  983.     @actor = actor
  984.     refresh(actor.gain_parameter_list[0].key)
  985.   end
  986.   #--------------------------------------------------------------------------
  987.   # ● リフレッシュ
  988.   #--------------------------------------------------------------------------
  989.   def refresh(param = nil)
  990.     @distribute_gain = nil
  991.     if param != nil
  992.       @distribute_gain = @actor.distribute_gain(param)
  993.     end

  994.     contents.clear
  995. #    change_color(system_color)
  996. #    draw_text(0, 0, width - 32, line_height, "パラメータ変化", 1)
  997. #    change_color(normal_color)
  998. #
  999. #    dy = line_height
  1000.     dy = 0
  1001.     KMS_DistributeParameter::PARAMS.each { |param|
  1002.       draw_parameter(0, dy, param)
  1003.       dy += line_height
  1004.     }
  1005.   end
  1006.   #--------------------------------------------------------------------------
  1007.   # ○ 能力値の描画
  1008.   #     x    : 描画先 X 座標
  1009.   #     y    : 描画先 Y 座標
  1010.   #     type : 能力値の種類
  1011.   #--------------------------------------------------------------------------
  1012.   def draw_parameter(x, y, type)
  1013.     is_float = false

  1014.     case type
  1015.     when :mhp
  1016.       name  = "最大HP(MAXHP)"
  1017.       value = @actor.mhp
  1018.     when :mmp
  1019.       name  = "最大SP(MAXSP)"
  1020.       value = @actor.mmp
  1021.     when :atk
  1022.       name  = Vocab.param(2)
  1023.       value = @actor.atk
  1024.     when :def
  1025.       name  = Vocab.param(3)
  1026.       value = @actor.def
  1027.     when :mat
  1028.       name  = Vocab.param(4) + ")"
  1029.       value = @actor.mat
  1030.     when :mdf
  1031.       name  = Vocab.param(5) + ")"
  1032.       value = @actor.mdf
  1033.     when :agi
  1034.       name  = Vocab.param(6)
  1035.       value = @actor.agi
  1036.     when :luk
  1037.       name  = Vocab.param(7)
  1038.       value = @actor.luk
  1039.     when :str
  1040.       name  = STR::NAME + "(STR)"
  1041.       value = @actor.str
  1042.     when :vit
  1043.       name  = VIT::NAME + "(VIT)"
  1044.       value = @actor.vit
  1045.     when :int
  1046.       name  = INT::NAME + "(INT)"
  1047.       value = @actor.int
  1048.     when :dex
  1049.       name  = DEX::NAME + "(DEX)"
  1050.       value = @actor.dex
  1051.     when :hit
  1052.       name  = Vocab.hit
  1053.       value = @actor.hit
  1054.       is_float = true
  1055.     when :eva
  1056.       name  = Vocab.eva
  1057.       value = @actor.eva
  1058.       is_float = true
  1059.     when :cri
  1060.       name  = Vocab.cri
  1061.       value = @actor.cri
  1062.       is_float = true
  1063.     when :tgr
  1064.       name  = Vocab.tgr
  1065.       value = @actor.tgr
  1066.       is_float = true
  1067.     else
  1068.       return
  1069.     end

  1070.     # パラメータ名
  1071.     change_color(system_color)
  1072.     draw_text(x + 4, y, 160, line_height, name)
  1073.     change_color(normal_color)
  1074.     draw_text(x + 170, y, 58, line_height, convert_value(value, is_float), 2)

  1075.     return if @distribute_gain == nil

  1076.     # パラメータ変化
  1077.     draw_text(x + 230, y, 24, line_height, "→", 1)

  1078.     curr = @actor.distributed_param(type)
  1079.     gain = @distribute_gain[type]
  1080.     change_color(gain > curr ? text_color(3) : gain < curr ?
  1081.         text_color(2) : normal_color)
  1082.     new_value = value + (gain - curr)
  1083.     draw_text(x + 258, y, 58, line_height, convert_value(new_value, is_float), 2)

  1084.     change_color(normal_color)
  1085.   end
  1086.   def convert_value(value, is_float)
  1087.     if is_float
  1088.       return sprintf("%.2f", value)
  1089.     else
  1090.       return value.to_i.to_s
  1091.     end
  1092.   end
  1093. end

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

  1095. #==============================================================================
  1096. # □ Window_DistributeParameterConfirm
  1097. #------------------------------------------------------------------------------
  1098. #   振り分け画面で、振り分けの確定/中止を選択するウィンドウです。
  1099. #==============================================================================

  1100. class Window_DistributeParameterConfirm < Window_Command
  1101.   #--------------------------------------------------------------------------
  1102.   # ● ウィンドウ幅の取得
  1103.   #--------------------------------------------------------------------------
  1104.   def window_width
  1105.     return KMS_DistributeParameter::CONFIRM_WIDTH
  1106.   end
  1107.   #--------------------------------------------------------------------------
  1108.   # ● コマンドリストの作成
  1109.   #--------------------------------------------------------------------------
  1110.   def make_command_list
  1111.     super
  1112.     add_command(KMS_DistributeParameter::CONFIRM_COMMANDS[0], :decide)
  1113.     add_command(KMS_DistributeParameter::CONFIRM_COMMANDS[1], :stop)
  1114.     add_command(KMS_DistributeParameter::CONFIRM_COMMANDS[2], :cancel)
  1115.   end
  1116.   #--------------------------------------------------------------------------
  1117.   # ● ヘルプテキスト更新
  1118.   #--------------------------------------------------------------------------
  1119.   def update_help
  1120.     text = index >= 0 ? KMS_DistributeParameter::CONFIRM_COMMAND_HELP[index] : nil
  1121.     @help_window.set_text(text)
  1122.   end
  1123. end

  1124. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  1125. #==============================================================================
  1126. # ■ Scene_Map
  1127. #==============================================================================

  1128. class Scene_Map < Scene_Base
  1129.   #--------------------------------------------------------------------------
  1130.   # ● シーン遷移に関連する更新
  1131.   #--------------------------------------------------------------------------
  1132.   alias update_scene_KMS_DistributeParameter update_scene
  1133.   def update_scene
  1134.     update_scene_KMS_DistributeParameter

  1135.     update_call_distribute_parameter unless scene_changing?
  1136.   end
  1137.   #--------------------------------------------------------------------------
  1138.   # ○ パラメータ振り分け画面呼び出し判定
  1139.   #--------------------------------------------------------------------------
  1140.   def update_call_distribute_parameter
  1141.     if $game_temp.call_distribute_parameter && !$game_player.moving?
  1142.       $game_temp.call_distribute_parameter = false
  1143.       call_distribute_parameter
  1144.     end
  1145.   end
  1146.   #--------------------------------------------------------------------------
  1147.   # ○ パラメータ振り分け画面への切り替え
  1148.   #--------------------------------------------------------------------------
  1149.   def call_distribute_parameter
  1150.     SceneManager.call(Scene_DistributeParameter)
  1151.   end
  1152. end

  1153. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  1154. #==============================================================================
  1155. # ■ Scene_Menu
  1156. #==============================================================================

  1157. class Scene_Menu < Scene_MenuBase
  1158.   #--------------------------------------------------------------------------
  1159.   # ● コマンドウィンドウの作成
  1160.   #--------------------------------------------------------------------------
  1161.   alias create_command_window_KMS_DistributeParameter create_command_window
  1162.   def create_command_window
  1163.     create_command_window_KMS_DistributeParameter

  1164.     @command_window.set_handler(:distribute_parameter, method(:command_personal))
  1165.   end
  1166.   #--------------------------------------------------------------------------
  1167.   # ○ コマンド [パラメータ振り分け]
  1168.   #--------------------------------------------------------------------------
  1169.   def command_distribute_parameter
  1170.     SceneManager.call(Scene_DistributeParameter)
  1171.   end
  1172.   #--------------------------------------------------------------------------
  1173.   # ● 個人コマンド[決定]
  1174.   #--------------------------------------------------------------------------
  1175.   alias on_personal_ok_KMS_DistributeParameter on_personal_ok
  1176.   def on_personal_ok
  1177.     on_personal_ok_KMS_DistributeParameter

  1178.     if @command_window.current_symbol == :distribute_parameter
  1179.       command_distribute_parameter
  1180.     end
  1181.   end
  1182. end

  1183. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  1184. #==============================================================================
  1185. # □ Scene_DistributeParameter
  1186. #------------------------------------------------------------------------------
  1187. #   パラメータ振り分け画面の処理を行うクラスです。
  1188. #==============================================================================

  1189. class Scene_DistributeParameter < Scene_MenuBase
  1190.   #--------------------------------------------------------------------------
  1191.   # ● 開始処理
  1192.   #--------------------------------------------------------------------------
  1193.   def start
  1194.     super
  1195.     @prev_actor = @actor
  1196.     @prev_info  = @actor.distribution_info
  1197.     create_help_window
  1198.     create_actor_window
  1199.     create_parameter_window
  1200.     create_status_window
  1201.     create_confirm_window
  1202.   end
  1203.   #--------------------------------------------------------------------------
  1204.   # ○ アクターウィンドウ作成
  1205.   #--------------------------------------------------------------------------
  1206.   def create_actor_window
  1207.     @actor_window = Window_DistributeParameterActor.new(0, 0, @actor)
  1208.     @actor_window.viewport = @viewport
  1209.   end
  1210.   #--------------------------------------------------------------------------
  1211.   # ○ パラメータリストウィンドウ作成
  1212.   #--------------------------------------------------------------------------
  1213.   def create_parameter_window
  1214.     @parameter_window = Window_DistributeParameterList.new(@actor)
  1215.     @parameter_window.viewport = @viewport
  1216.     @parameter_window.activate
  1217.     @parameter_window.set_handler(:ok,       method(:on_parameter_ok))
  1218.     @parameter_window.set_handler(:cancel,   method(:on_parameter_cancel))
  1219.     @parameter_window.set_handler(:increase, method(:on_parameter_increase))
  1220.     @parameter_window.set_handler(:decrease, method(:on_parameter_decrease))
  1221.     @parameter_window.set_handler(:down,     method(:update_status))
  1222.     @parameter_window.set_handler(:up,       method(:update_status))
  1223.     @parameter_window.set_handler(:pagedown, method(:next_actor))
  1224.     @parameter_window.set_handler(:pageup,   method(:prev_actor))
  1225.   end
  1226.   #--------------------------------------------------------------------------
  1227.   # ○ 振り分けステータスウィンドウ作成
  1228.   #--------------------------------------------------------------------------
  1229.   def create_status_window
  1230.     @status_window = Window_DistributeParameterStatus.new(@actor)
  1231.     @status_window.viewport = @viewport

  1232.     @help_window.z = @status_window.z + 100
  1233.     @help_window.openness = 0
  1234.   end
  1235.   #--------------------------------------------------------------------------
  1236.   # ○ 確認ウィンドウ作成
  1237.   #--------------------------------------------------------------------------
  1238.   def create_confirm_window
  1239.     @confirm_window = Window_DistributeParameterConfirm.new(0, 0)
  1240.     @confirm_window.x = (Graphics.width  - @confirm_window.width)  / 2
  1241.     @confirm_window.y = (Graphics.height - @confirm_window.height) / 2
  1242.     @confirm_window.z = @help_window.z
  1243.     @confirm_window.viewport    = @viewport
  1244.     @confirm_window.help_window = @help_window
  1245.     @confirm_window.openness    = 0
  1246.     @confirm_window.deactivate
  1247.     @confirm_window.set_handler(:decide, method(:on_confirm_decide))
  1248.     @confirm_window.set_handler(:stop,   method(:on_confirm_stop))
  1249.     @confirm_window.set_handler(:cancel, method(:on_confirm_cancel))
  1250.   end
  1251.   #--------------------------------------------------------------------------
  1252.   # ○ ウィンドウ再描画
  1253.   #--------------------------------------------------------------------------
  1254.   def refresh_window
  1255.     @actor_window.refresh
  1256.     @parameter_window.refresh
  1257.     @status_window.refresh(@parameter_window.parameter_key)
  1258.     Graphics.frame_reset
  1259.   end
  1260.   #--------------------------------------------------------------------------
  1261.   # ○ パラメータ選択 [決定]
  1262.   #--------------------------------------------------------------------------
  1263.   def on_parameter_ok
  1264.     command_confirm
  1265.   end
  1266.   #--------------------------------------------------------------------------
  1267.   # ○ パラメータ選択 [キャンセル]
  1268.   #--------------------------------------------------------------------------
  1269.   def on_parameter_cancel
  1270.     command_confirm
  1271.   end
  1272.   #--------------------------------------------------------------------------
  1273.   # ○ パラメータ選択 [加算]
  1274.   #--------------------------------------------------------------------------
  1275.   def on_parameter_increase
  1276.     param = @parameter_window.parameter_key
  1277.     unless @actor.can_distribute?(param)
  1278.       Sound.play_buzzer
  1279.       return
  1280.     end
  1281.     Sound.play_cursor
  1282.     @actor.rp_growth_effect(param)
  1283.     refresh_window
  1284.   end
  1285.   #--------------------------------------------------------------------------
  1286.   # ○ パラメータ選択 [減算]
  1287.   #--------------------------------------------------------------------------
  1288.   def on_parameter_decrease
  1289.     param = @parameter_window.parameter_key
  1290.     unless reversible?(param)
  1291.       Sound.play_buzzer
  1292.       return
  1293.     end
  1294.     Sound.play_cursor
  1295.     @actor.rp_growth_effect(param, true)
  1296.     refresh_window
  1297.   end
  1298.   #--------------------------------------------------------------------------
  1299.   # ○ ステータス更新
  1300.   #--------------------------------------------------------------------------
  1301.   def update_status
  1302.     @status_window.refresh(@parameter_window.parameter_key)
  1303.   end
  1304.   #--------------------------------------------------------------------------
  1305.   # ○ 減算可否判定
  1306.   #     param : 対象パラメータ
  1307.   #--------------------------------------------------------------------------
  1308.   def reversible?(param)
  1309.     return false if @actor.distributed_count(param) == 0
  1310.     return true  if KMS_DistributeParameter::ENABLE_REVERSE_DISTRIBUTE

  1311.     # 前回より減らなければ OK
  1312.     base = @prev_info.count[param]
  1313.     return ( base < @actor.distributed_count(param) )
  1314.   end
  1315.   #--------------------------------------------------------------------------
  1316.   # ○ パラメータウィンドウに切り替え
  1317.   #--------------------------------------------------------------------------
  1318.   def command_parameter
  1319.     @confirm_window.deactivate
  1320.     @confirm_window.close
  1321.     @help_window.close
  1322.     @parameter_window.activate
  1323.   end
  1324.   #--------------------------------------------------------------------------
  1325.   # ○ 確認ウィンドウに切り替え
  1326.   #--------------------------------------------------------------------------
  1327.   def command_confirm
  1328.     @status_window.refresh
  1329.     @confirm_window.index  = 0
  1330.     @confirm_window.activate
  1331.     @confirm_window.open
  1332.     @help_window.open
  1333.     @parameter_window.deactivate
  1334.   end
  1335.   #--------------------------------------------------------------------------
  1336.   # ○ 確認 [確定]
  1337.   #--------------------------------------------------------------------------
  1338.   def on_confirm_decide
  1339.     return_scene
  1340.   end
  1341.   #--------------------------------------------------------------------------
  1342.   # ○ 確認 [中止]
  1343.   #--------------------------------------------------------------------------
  1344.   def on_confirm_stop
  1345.     @actor.set_distribution_info(@prev_info)
  1346.     return_scene
  1347.   end
  1348.   #--------------------------------------------------------------------------
  1349.   # ○ 確認 [キャンセル]
  1350.   #--------------------------------------------------------------------------
  1351.   def on_confirm_cancel
  1352.     command_parameter
  1353.   end
  1354.   #--------------------------------------------------------------------------
  1355.   # ● アクターの切り替え
  1356.   #--------------------------------------------------------------------------
  1357.   def on_actor_change
  1358.     @prev_actor.set_distribution_info(@prev_info)
  1359.     @prev_info  = @actor.distribution_info
  1360.     @prev_actor = @actor

  1361.     @actor_window.actor     = @actor
  1362.     @parameter_window.actor = @actor
  1363.     @status_window.actor    = @actor
  1364.     @parameter_window.activate
  1365.     refresh_window
  1366.   end
  1367. end
复制代码
这个是其中一个脚本,我把这个脚本剔除的话,@equips.collect {|item| item.object }就没有错误了,但是在上面那个属性分配的脚本中,我没找到有关于equips的字眼啊。不知道怎么回事
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
3482
在线时间
69 小时
注册时间
2013-4-27
帖子
3
6
发表于 2013-10-5 23:48:34 | 只看该作者
你是不是制作途中加入这个脚本?
试试看开新游戏后会不会报错
如果不会就可以用,
原理是   旧的存档没有这个值,所以跳错
开新游戏就没有这个问题

如果照样报错,就...放弃吧...(喂

点评

确实是新开游戏也会出错,已经放弃了,哎  发表于 2013-10-6 01:06
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 10:33

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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