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

Project1

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

[已经过期] 关于多职业脚本出错

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2084
在线时间
664 小时
注册时间
2014-2-15
帖子
81
跳转到指定楼层
1
发表于 2016-9-23 20:05:11 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 资深萝莉控 于 2016-9-23 20:08 编辑

使用的多职业脚本72行发生no method error,为什么?还有该怎么设定副职业@tseyik
  1. #==============================================================================
  2. #  ■マルチクラス for RGSS3 Ver0.80-α
  3. # □作成者 kure
  4. #==============================================================================
  5. $kure_integrate_script = {} if $kure_integrate_script == nil
  6. $kure_integrate_script[:multiclass] = 100
  7. p "マルチクラス"

  8. module KURE
  9.   module MultiClass
  10.   #初期設定(変更しない事)------------------------------------------------------
  11.   CLASS_SETTING = []
  12.    
  13.   #基本職の反映設定------------------------------------------------------------
  14.     #BASE_CLASS = [項目1,項目2]
  15.     #項目1 → パラメータ反映率(割合で設定)
  16.     #項目2 → スキル習得を反映するか (1=反映する, 0=反映しない)
  17.     BASE_CLASS = [1, 1]
  18.   
  19.   #拡張職の反映設定------------------------------------------------------------
  20.     #CLASS_SETTING[ID] = [項目1,項目2,項目3,]
  21.     #項目1 → パラメータ反映率    (割合で設定)
  22.     #項目2 → 特徴を反映するか    (1=反映する, 0=反映しない)
  23.     #項目3 → スキル習得を反映するか (1=反映する, 0=反映しない)
  24.     #項目4 → 経験値獲得率の補正   (割合で設定)
  25.   
  26.     CLASS_SETTING[0] = [0.5, 1, 1, 0.4]
  27.     CLASS_SETTING[1] = [1, 1, 1, 1]
  28.     CLASS_SETTING[2] = [1, 1, 1, 1]
  29.   
  30.   #表示設定
  31.     #基本職の職名を表示するか(0=表示しない 1=表示する)
  32.     VIEW_BASE_CLASS_NAME = 1
  33.     #基本職のレベルを表示するか(0=表示しない 1=表示する)
  34.     VIEW_BASE_CLASS_LEVEL = 1
  35.    
  36.     #職名を表示しない拡張職IDを指定
  37.     NO_VIEW_ADVCLASS = [1]
  38.     #レベルを表示しない拡張職IDを指定
  39.     NO_VIEW_ADVCLASS_LV = [1]
  40.   end
  41. end

  42. #==============================================================================
  43. # ■ RPG::Class(追加定義)
  44. #==============================================================================
  45. class RPG::Class < RPG::BaseItem
  46.   #--------------------------------------------------------------------------
  47.   # ★ 職業別最大レベル
  48.   #--------------------------------------------------------------------------
  49.   def max_adv_level
  50.     @note.match(/<最大レベル\s?(\d+)\s?>/)
  51.     return $1 ? $1.to_i : nil
  52.   end
  53.   #--------------------------------------------------------------------------
  54.   # ★ 短縮職業名
  55.   #--------------------------------------------------------------------------  
  56.   def short_class_name
  57.     @note.match(/<短縮名称\s?(.+?)\s?>/)
  58.     return $1 ? $1 : @name
  59.   end
  60. end

  61. #==============================================================================
  62. # ■ RPG::Actor(追加定義)
  63. #==============================================================================
  64. class RPG::Actor < RPG::BaseItem
  65.   #--------------------------------------------------------------------------
  66.   # ★ 拡張職の定義(追加定義)
  67.   #--------------------------------------------------------------------------  
  68.   def adv_class_id
  69.     KURE.add_feature_basic([], @note, "拡張職", 31, 111)
  70.   end
  71. end

  72. #==============================================================================
  73. # ■ Window_Base
  74. #==============================================================================
  75. class Window_Base < Window
  76.   #--------------------------------------------------------------------------
  77.   # □ レベルの描画(再定義)
  78.   #--------------------------------------------------------------------------
  79.   def draw_actor_level(actor, x, y)
  80.     change_color(system_color)
  81.     draw_text(x, y, 32, line_height, Vocab::level_a)
  82.    
  83.     actor_level = ""
  84.     actor_level = actor.level.to_s if KURE::MultiClass::VIEW_BASE_CLASS_LEVEL == 1
  85.     length = 0
  86.     actor.adv_class_id.each_with_index{|block, index|
  87.       next unless block
  88.       next if KURE::MultiClass::NO_VIEW_ADVCLASS_LV.include?(index)
  89.       actor_level += "/" + block[1].to_s ; length += 34 }
  90.    
  91.     change_color(normal_color)
  92.     draw_text(x + 32, y, 24 + length, line_height, actor_level)
  93.   end
  94.   #--------------------------------------------------------------------------
  95.   # ■ 職業の描画(再定義)
  96.   #--------------------------------------------------------------------------
  97.   def draw_actor_class(actor, x, y, width = 180)
  98.     change_color(normal_color)
  99.    
  100.     actor_calss_name = ""
  101.     actor_calss_name += actor.class.name if KURE::MultiClass::VIEW_BASE_CLASS_NAME == 1
  102.     actor.adv_class_id.each_with_index{|block, index|
  103.       next unless block
  104.       next if KURE::MultiClass::NO_VIEW_ADVCLASS.include?(index)
  105.       actor_calss_name += "/" unless actor_calss_name == ""
  106.       actor_calss_name += $data_classes[block[0]].short_class_name}
  107.       
  108.     draw_text(x, y, width, line_height, actor_calss_name)
  109.   end
  110. end

  111. #==============================================================================
  112. # ■ Game_Actor
  113. #==============================================================================
  114. class Game_Actor < Game_Battler
  115.   attr_reader   :adv_class_id                # 拡張職業
  116.   #--------------------------------------------------------------------------
  117.   # ◎ スキルの初期化(エイリアス再定義)
  118.   #--------------------------------------------------------------------------
  119.   alias k_multiclass_before_init_skills init_skills unless $!
  120.   def init_skills
  121.     k_multiclass_before_init_skills
  122.     @adv_class_id.each{|block|
  123.       next unless block
  124.       learn_class_skills(block[0], block[1])}
  125.   end
  126.   #--------------------------------------------------------------------------
  127.   # ◎ 経験値の初期化(エイリアス再定義)
  128.   #--------------------------------------------------------------------------
  129.   alias k_multiclass_before_init_exp init_exp unless $!
  130.   def init_exp
  131.     k_multiclass_before_init_exp
  132.     init_adv_exp
  133.   end
  134.   #--------------------------------------------------------------------------
  135.   # ★ 拡張職業の初期化(追加定義)
  136.   #--------------------------------------------------------------------------
  137.   def init_adv_exp
  138.     @adv_class_id = []
  139.    
  140.     actor.adv_class_id.each{|block|
  141.       next if block[1] == @class_id
  142.       @adv_class_id[block[0]] = [block[1], block[2]]}
  143.       
  144.     @adv_class_id.each{|block|
  145.       next unless block
  146.       @exp[block[0]] = current_adv_level_exp(block[0], block[1])}
  147.   end
  148.   #--------------------------------------------------------------------------
  149.   # ★ 指定IDの職業の指定レベルの最低経験値を取得(追加定義)
  150.   #--------------------------------------------------------------------------
  151.   def current_adv_level_exp(id, level)
  152.     adv_exp_for_level(id, level)
  153.   end
  154.   #--------------------------------------------------------------------------
  155.   # ★ 指定IDの職業の指定レベルに上がるのに必要な累計経験値の取得(追加定義)
  156.   #--------------------------------------------------------------------------
  157.   def adv_exp_for_level(id, level)
  158.     $data_classes[id].exp_for_level(level)
  159.   end  
  160.   #--------------------------------------------------------------------------
  161.   # ★ 指定IDの職業の指定レベルの次のレベルの経験値を取得
  162.   #--------------------------------------------------------------------------
  163.   def adv_next_level_exp(id, level)
  164.     adv_exp_for_level(id, level + 1)
  165.   end
  166.   #--------------------------------------------------------------------------
  167.   # ★ 最大レベル(追加定義)
  168.   #--------------------------------------------------------------------------
  169.   def max_adv_level(id)
  170.     $data_classes[id].max_adv_level ? $data_classes[id].max_adv_level : actor.max_level
  171.   end
  172.   #--------------------------------------------------------------------------
  173.   # ★ 最大レベル判定(追加定義)
  174.   #--------------------------------------------------------------------------
  175.   def max_adv_level?(id)
  176.     @adv_class_id[id][1] >= max_adv_level(@adv_class_id[id][0])
  177.   end
  178.   #--------------------------------------------------------------------------
  179.   # ★ 指定IDの職業の経験値の取得
  180.   #--------------------------------------------------------------------------
  181.   def adv_exp(id)
  182.     @exp[id]
  183.   end
  184.   #--------------------------------------------------------------------------
  185.   # ★ 拡張職業の経験値の変更(追加定義)
  186.   #     show : レベルアップ表示フラグ
  187.   #--------------------------------------------------------------------------
  188.   def change_adv_exp(id, exp, show)
  189.     return unless @adv_class_id[id]
  190.     adv_id = @adv_class_id[id][0]
  191.     @exp[adv_id] = [exp, 0].max
  192.     @adv_class_id[id][1] ||= 1
  193.     last_level = @adv_class_id[id][1]
  194.     last_skills = skills
  195.     adv_level_up(id) while !max_adv_level?(id) && adv_exp(adv_id) >= adv_next_level_exp(adv_id, @adv_class_id[id][1])
  196.     adv_level_down(id) while adv_exp(adv_id) < current_adv_level_exp(adv_id, @adv_class_id[id][1])
  197.     display_adv_level_up(id, skills - last_skills) if show && @adv_class_id[id][1] > last_level
  198.     refresh
  199.   end
  200.   #--------------------------------------------------------------------------
  201.   # ★ 拡張職のレベルアップ(追加定義)
  202.   #--------------------------------------------------------------------------
  203.   def adv_level_up(id)
  204.     @adv_class_id[id][1] += 1
  205.     return if multi_class_data(id, 2) == 0
  206.     $data_classes[@adv_class_id[id][0]].learnings.each { |learning|
  207.       learn_skill(learning.skill_id) if learning.level == @adv_class_id[id][1]}
  208.   end
  209.   #--------------------------------------------------------------------------
  210.   # ★ 拡張職のレベルダウン(追加定義)
  211.   #--------------------------------------------------------------------------
  212.   def adv_level_down(id)
  213.     @adv_class_id[id][1] -= 1
  214.     return if multi_class_data(id, 2) == 0
  215.     $data_classes[@adv_class_id[id][0]].learnings.each { |learning|
  216.       forget_skill(learning.skill_id) if learning.level > @adv_class_id[id][1]}
  217.   end
  218.   #--------------------------------------------------------------------------
  219.   # ★ 拡張職のレベルアップメッセージの表示
  220.   #--------------------------------------------------------------------------
  221.   def display_adv_level_up(id, new_skills)
  222.     $game_message.new_page
  223.     class_name = $data_classes[@adv_class_id[id][0]].name
  224.    
  225.     $game_message.add(sprintf(Vocab::LevelUp, @name, class_name + "の" + Vocab::level + "が" , @adv_class_id[id][1]))
  226.     new_skills.each do |skill|
  227.       $game_message.add(sprintf(Vocab::ObtainSkill, skill.name))
  228.     end
  229.   end
  230.   #--------------------------------------------------------------------------
  231.   # ◎ 経験値の獲得(経験獲得率を考慮)(エイリアス再定義)
  232.   #--------------------------------------------------------------------------
  233.   alias k_multiclass_before_gain_exp gain_exp
  234.   def gain_exp(exp)
  235.     k_multiclass_before_gain_exp(exp)
  236.     @adv_class_id.each_with_index{|block, index|
  237.       next unless block
  238.       adv_gain_exp(index, exp)}
  239.   end
  240.   #--------------------------------------------------------------------------
  241.   # ★ 拡張職の経験値の獲得(経験獲得率を考慮)
  242.   #--------------------------------------------------------------------------
  243.   def adv_gain_exp(id, exp, show = true)
  244.     return unless @adv_class_id[id]
  245.     change_adv_exp(id, adv_exp(@adv_class_id[id][0]) + (exp * final_exp_rate * multi_class_data(id, 3)).to_i, show)
  246.   end
  247.   #--------------------------------------------------------------------------
  248.   # ★ 拡張職のレベルの変更(追加定義)
  249.   #--------------------------------------------------------------------------
  250.   def change_adv_level(id, level, show)
  251.     return unless @adv_class_id[id]
  252.    
  253.     exp = [[@adv_class_id[id][1] + level, max_adv_level(@adv_class_id[id][0])].min, 1].max
  254.     change_adv_exp(id, adv_exp_for_level(@adv_class_id[id][0], exp), show)
  255.   end
  256.   #--------------------------------------------------------------------------
  257.   # ★ 指定IDのクラスの指定レベルまでのスキルを習得(追加定義)
  258.   #--------------------------------------------------------------------------
  259.   def learn_class_skills(id, level)
  260.     $data_classes[id].learnings.each { |learning|
  261.       learn_skill(learning.skill_id) if learning.level <= level}
  262.   end
  263.   #--------------------------------------------------------------------------
  264.   # ★ 指定IDのクラスのスキルを忘れる(追加定義)
  265.   #--------------------------------------------------------------------------
  266.   def forget_class_skills(id)
  267.     $data_classes[id].learnings.each { |learning| forget_skill(learning.skill_id)}
  268.   end
  269.   #--------------------------------------------------------------------------
  270.   # □ 通常能力値の基本値取得(再定義)
  271.   #--------------------------------------------------------------------------
  272.   def param_base(param_id)
  273.     value = self.class.params[param_id, @level] * KURE::MultiClass::BASE_CLASS[0]
  274.     @adv_class_id.each_with_index{|block, index|
  275.       next unless block
  276.       value += $data_classes[block[0]].params[param_id, block[1]] * multi_class_data(index, 0)
  277.     }
  278.     return value
  279.   end
  280.   #--------------------------------------------------------------------------
  281.   # ★ 特徴を反映する拡張職業の配列を取得(追加定義)
  282.   #--------------------------------------------------------------------------
  283.   def multi_class_obj
  284.     @adv_class_id ||=[] ; result = []
  285.     @adv_class_id.each_with_index{|block, index|
  286.       next unless block
  287.       next if multi_class_data(index, 1) == 0
  288.       result.push($data_classes[block[0]])}
  289.     return result
  290.   end
  291.   #--------------------------------------------------------------------------
  292.   # ★ 特徴を反映する拡張職業のメモを取得(追加定義)
  293.   #--------------------------------------------------------------------------
  294.   def multi_class_note
  295.     multi_class_obj.inject("") {|r, item| r += item.note }
  296.   end
  297.   #--------------------------------------------------------------------------
  298.   # ★ 拡張職の反映データ取得(追加定義)
  299.   #--------------------------------------------------------------------------
  300.   def multi_class_data(id, value)
  301.     return 0 unless KURE::MultiClass::CLASS_SETTING[id]
  302.     return KURE::MultiClass::CLASS_SETTING[id][value]
  303.   end
  304.   #--------------------------------------------------------------------------
  305.   # □ レベルアップ(再定義)
  306.   #--------------------------------------------------------------------------
  307.   def level_up
  308.     @level += 1
  309.     return if KURE::MultiClass::BASE_CLASS[1] == 0
  310.     self.class.learnings.each do |learning|
  311.       learn_skill(learning.skill_id) if learning.level == @level
  312.     end
  313.   end
  314.   #--------------------------------------------------------------------------
  315.   # □ レベルダウン(再定義)
  316.   #--------------------------------------------------------------------------
  317.   def level_down
  318.     @level -= 1
  319.     return if KURE::MultiClass::BASE_CLASS[1] == 0
  320.     self.class.learnings.each do |learning|
  321.       forget_skill(learning.skill_id) if learning.level > @level
  322.     end
  323.   end
  324.   #--------------------------------------------------------------------------
  325.   # □ 職業の変更(再定義)
  326.   #     keep_exp : 経験値を引き継ぐ
  327.   #--------------------------------------------------------------------------
  328.   def change_class(class_id, keep_exp = false)
  329.     @exp[class_id] = exp if keep_exp
  330.     @class_id = class_id
  331.     change_exp(@exp[@class_id] || 0, false)
  332.    
  333.     #重複した職業が存在すれば削除する
  334.     @adv_class_id.each_with_index{|block,index|
  335.       next unless @adv_class_id[index]
  336.       @adv_class_id[index] = nil if block[0] == class_id}
  337.       
  338.     fix_memorize if $kure_integrate_script[:Memorize3]
  339.     refresh
  340.   end
  341.   #--------------------------------------------------------------------------
  342.   # ★ 拡張職業の変更(追加定義)
  343.   #--------------------------------------------------------------------------
  344.   def change_adv_class(id, class_id, keep_exp = false)
  345.     #基本職には転職できない
  346.     return if class_id == @class_id
  347.     #ID0の場合は職業を辞める
  348.     if class_id == 0 or class_id == nil
  349.       @adv_class_id[id] = nil
  350.     else
  351.       @exp[class_id] = adv_exp(@adv_class_id[id][0]) if keep_exp && @adv_class_id[id]
  352.       @adv_class_id[id] ||= []
  353.       @adv_class_id[id][0] = class_id
  354.       @adv_class_id[id][1] = 1
  355.       change_adv_exp(id, @exp[class_id] || 0, false)
  356.       learn_class_skills(class_id, 1)
  357.       #重複した職業が存在すれば削除する
  358.       @adv_class_id.each_with_index{|block,index|
  359.         next unless block
  360.         next if index == id
  361.         @adv_class_id[index] = nil if block[0] == class_id}
  362.     end
  363.     fix_memorize if $kure_integrate_script[:Memorize3]
  364.     refresh
  365.   end
  366. end

  367. #==============================================================================
  368. # ■ Game_Interpreter(追加定義)
  369. #==============================================================================
  370. class Game_Interpreter
  371.   #--------------------------------------------------------------------------
  372.   # ● 拡張職の変更(追加定義)
  373.   #--------------------------------------------------------------------------
  374.   def change_adv_class(id, actor_id, class_id)
  375.     actor = $game_actors[actor_id]
  376.     actor.change_adv_class(id, class_id)
  377.   end
  378.   #--------------------------------------------------------------------------
  379.   # ● 拡張職のレベルの増減(追加定義)
  380.   #--------------------------------------------------------------------------
  381.   def change_adv_lv(id, actor_id, value, show)
  382.     actor = $game_actors[actor_id]
  383.     actor.change_adv_level(id, value, show)
  384.   end
  385.   #--------------------------------------------------------------------------
  386.   # ● 拡張職経験値の増減(追加定義)
  387.   #--------------------------------------------------------------------------
  388.   def change_adv_exp(id, actor_id, value, show)
  389.     actor = $game_actors[actor_id]
  390.     actor.adv_gain_exp(id, value, show)
  391.   end
  392. end
复制代码

点评

没有缺少,就是原原本本的脚本一点都没有改动  发表于 2016-9-24 11:09
好像缺了什么?  发表于 2016-9-23 23:06
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2024-11-17 00:20

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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