查看: 2109|回复: 0

[已经解决] 技能SP--让技能像装备一样 脚本错误

[复制链接]
梦石
10
星屑
39550
在线时间
1919 小时
注册时间
2010-11-14
回帖
3214

R考场第七期纪念奖

发表于 2015-5-5 23:42:00 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 KB.Driver 于 2015-5-5 23:44 编辑

问题见问题截图……一打开技能装备的界面就会弹出窗口
而以前这个功能还可以用的……到现在也没有修改过内容,不知道为什么就不能用了……
和以前唯一的变化就是插入了喵呜喵5的公共事件转界面脚本。
而且刚才把那段脚本全部都注释了,问题依旧存在……到底要怎么解决呢……?

问题截图 QQ截图20150505233728.png QQ截图20150505233816.png




技能CP制脚本
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/                ◆ 技能SP点--让技能像装备一样装备吧~
  3. #_/
  4. #_/  看到了VX中KGC的技能CP制脚本,然后到KGC和6R找了好久都没找到ACE版本,就参照着
  5. #_/  KGCVX版的思路移植了个技能SP的脚本~
  6. #_/  功能:
  7. #_/   让技能像装备一样装备,只有装备后的技能可以在战斗中使用。
  8. #_/   技能可在备注设定消耗的SP,角色升级可增加SP,装备也可追加SP(或者扣除SP上限)。
  9. #_/   可定义技能栏上限,这样即使SP再多也只能携带特定数目技能。
  10. #_/                                                            ---千叶玖濑
  11. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

  12. #==============================================================================
  13. # ☆系统设置
  14. #==============================================================================
  15. module Kunase
  16. module Skill_SP
  17.   # ◆ 技能栏最大空位
  18.   MAX_SKILLS = 20
  19.   # ◆ SP 的名字
  20.   VOCAB_SP   = "SP"
  21.   # ◆ SP 的简称
  22.   VOCAB_SP_A = "灵"
  23.   # ◆ 在角色状态中显示SP数值(适合默认菜单)
  24.   SHOW_STATUS_SP = true
  25.   # ◆ 未设定消耗SP的技能,默认消耗的SP值。
  26.   DEFAULT_SP_COST = 0
  27.   # ◆ 人物升级所获得得SP值上限
  28.   SP_MAX = 150
  29.   # ◆ 人物SP值下限
  30.   SP_MIN = 0
  31.   # ◆ 本来的SP加上装备提供的SP上限
  32.   REVISED_SP_MAX = 200
  33.   # ◆ 经过装备扣除后的SP下限
  34.   REVISED_SP_MIN = 0
  35.   # ◆通用的SP最大值的计算公式
  36.   #   level代表角色当前等级
  37.   #   结果自动取整
  38. SP_ABOUT_EXP = "level * 1 + 20.0"     
  39.   # ◆ 对于特定角色角色最大SP计算公式
  40.   #   PERSONAL_SP_ABOUT_EXP[角色 ID] = "公式"
  41.   #   公式格式和最大值计算公式举例如下
  42.   PERSONAL_SP_ABOUT_EXP = [] # 此行不要改动
  43.   PERSONAL_SP_ABOUT_EXP[21] = "level * 1.0 "  
  44. #  PERSONAL_SP_ABOUT_EXP[3] = "level * 1.0 + 5.0"   #修改  未使用
  45.   # ◆ 在技能装备栏中允许显示不可使用的技能
  46.   SHOW_UNUSABLE_SKILL    = true
  47.   # ◆ 新学习到的技能自动装备
  48.   AUTO_SET_NEW_SKILL     = false
  49.   # ◆ SP 最小值时的颜色
  50.   #  (数值为\C[n]表示的颜色)
  51.   GAUGE_START_COLOR = 13
  52.   # ◆ SP 最大值时的颜色
  53.   GAUGE_END_COLOR   = 5
  54.   # ◆ 菜单中进入技能SP的名称
  55.   VOCAB_MENU_SET_SKILL = "卡组"
  56.   # ◆ 未设定技能时显示的名称
  57.   BLANK_TEXT   = "-   空位   -"
  58.   # ◆ 技能解除时候显示的名称
  59.   RELEASE_TEXT = "( 解除技能 )"
  60. end
  61. end
  62. #==============================================================================
  63. # ☆对于在数据库备注中的设定方法~
  64. #==============================================================================
  65. module Kunase::Skill_SP
  66.   module Regexp
  67.     module BaseItem
  68.       # 最大SP增加:在装备栏备注中填写<最大SP X>或<MAXSP X>(X可为负数)
  69.       MAXSP_PLUS = /<(?:MAX|最大)SP\s*([\-\+]?\d+)>/
  70.       # 技能框增加:在装备栏备注中填写<技能栏追加 X>
  71.       BATTLE_SKILL_MAX = /<(?:BATTLE_SKILL_MAX|技能栏追加)\s*([\-\+]?\d+)>/i
  72.     end
  73.     module Skill
  74.       # 消费SP设定 :在技能备注中填写<SP X>
  75.       SP_COST = /<SP\s*(\d+)>/i
  76.     end
  77.   end
  78. end
  79. #==============================================================================
  80. ## ☆ Game_Interpreter----用事件脚本来获取SP的方法~
  81. #==============================================================================
  82. module Skill_SP
  83.   #--------------------------------------------------------------------------
  84.   # ○ 获得角色SP最大值
  85.   #     actor_id    : 角色编号
  86.   #     variable_id : SP赋值的变量号(不填则不代入)
  87.   #--------------------------------------------------------------------------
  88.   def get_actor_sp(actor_id, variable_id = 0)
  89.     value = $game_actors[actor_id].maxsp_plus
  90.     $game_variables[variable_id] = value if variable_id > 0
  91.     return value
  92.   end
  93.   #--------------------------------------------------------------------------
  94.   # ○ 变更角色SP最大值
  95.   #     actor_id : 角色编号
  96.   #     value    : 变更后的SP最大值
  97.   #--------------------------------------------------------------------------
  98.   def set_actor_sp(actor_id, value)
  99.     $game_actors[actor_id].maxsp_plus = value
  100.   end
  101.   #--------------------------------------------------------------------------
  102.   # ○ 角色最大SP增加
  103.   #     actor_id : 角色编号
  104.   #     value    : SP最大值增加量
  105.   #--------------------------------------------------------------------------
  106.   def gain_actor_sp(actor_id, value)
  107.     $game_actors[actor_id].maxsp_plus += value
  108.   end
  109.   #--------------------------------------------------------------------------
  110.   # ○ 技能栏最大数获得
  111.   #     actor_id : 角色编号
  112.   #     variable_id : 技能栏最大数赋值的变量号(不填则不代入)
  113.   #--------------------------------------------------------------------------
  114.   def get_battle_skill_max(actor_id, variable_id = 0)
  115.     value = $game_actors[actor_id].battle_skill_max
  116.     $game_variables[variable_id] = value if variable_id > 0
  117.     return value
  118.   end
  119.   #--------------------------------------------------------------------------
  120.   # ○ 技能栏最大数变更
  121.   #     actor_id : 角色ID
  122.   #     value    : 变更后的技能栏数目
  123.   #--------------------------------------------------------------------------
  124.   def set_battle_skill_max(actor_id, value = -1)
  125.     $game_actors[actor_id].battle_skill_max = value
  126.   end
  127.   #--------------------------------------------------------------------------
  128.   # ○ 确认某技能是否已装备
  129.   #     actor_id : 角色ID
  130.   #     skill_id : 技能ID
  131.   #--------------------------------------------------------------------------
  132.   def battle_skill_set?(actor_id, skill_id)
  133.     return $game_actors[actor_id].battle_skill_ids.include?(skill_id)
  134.   end
  135.   #--------------------------------------------------------------------------
  136.   # ○ 装备技能
  137.   #     actor_id : 角色编号
  138.   #     index    : 装备的技能栏位
  139.   #     skill_id : 技能ID(nil则为解除装备)
  140.   #--------------------------------------------------------------------------
  141.   def set_battle_skill(actor_id, index, skill_id = nil)
  142.     actor = $game_actors[actor_id]
  143.     if skill_id.is_a?(Integer)
  144.       # 装备
  145.       skill = $data_skills[skill_id]
  146.       return unless actor.battle_skill_settable?(index, skill)  # 无法装备
  147.       actor.set_battle_skill(index, skill)
  148.       actor.restore_battle_skill
  149.     else
  150.       # 解除
  151.       actor.remove_battle_skill(index)
  152.     end
  153.   end
  154.   #--------------------------------------------------------------------------
  155.   # ○ 直接装备某技能
  156.   #     actor_id : 角色编号
  157.   #     skill_id : 技能编号
  158.   #--------------------------------------------------------------------------
  159.   def add_battle_skill(actor_id, skill_id)
  160.     actor = $game_actors[actor_id]
  161.     skill = $data_skills[skill_id]
  162.     return if actor == nil || skill == nil
  163.     actor.add_battle_skill(skill)
  164.   end
  165.   #--------------------------------------------------------------------------
  166.   # ○ 卸下全部技能
  167.   #     actor_id : 角色编号
  168.   #--------------------------------------------------------------------------
  169.   def clear_battle_skill(actor_id)
  170.     $game_actors[actor_id].clear_battle_skill
  171.   end
  172.   end
  173.   class Game_Interpreter
  174.     include Skill_SP
  175.   end
  176. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★


  177. #==============================================================================
  178. # ■ RPG::BaseItem
  179. #==============================================================================

  180. class RPG::BaseItem
  181.   #--------------------------------------------------------------------------
  182.   # ○ 读取装备备注
  183.   #--------------------------------------------------------------------------
  184.   def create_skill_sp_system_cache
  185.     @__maxsp_plus = 0
  186.     @__battle_skill_max_plus = 0
  187.     self.note.each_line { |line|
  188.       case line
  189.       when Kunase::Skill_SP::Regexp::BaseItem::MAXSP_PLUS
  190.         @__maxsp_plus += $1.to_i
  191.       when Kunase::Skill_SP::Regexp::BaseItem::BATTLE_SKILL_MAX
  192.         @__battle_skill_max_plus += $1.to_i
  193.       end
  194.     }
  195.   end
  196.   #--------------------------------------------------------------------------
  197.   # ○ 最大 SP
  198.   #--------------------------------------------------------------------------
  199.   def maxsp_plus
  200.     create_skill_sp_system_cache if @__maxsp_plus == nil
  201.     return @__maxsp_plus
  202.   end
  203.   #--------------------------------------------------------------------------
  204.   # ○ 技能框追加
  205.   #--------------------------------------------------------------------------
  206.   def battle_skill_max_plus
  207.     create_skill_sp_system_cache if @__battle_skill_max_plus == nil
  208.     return @__battle_skill_max_plus
  209.   end
  210. end
  211. #==============================================================================
  212. # ■ RPG::Skill
  213. #==============================================================================
  214. class RPG::Skill < RPG::UsableItem
  215.   #--------------------------------------------------------------------------
  216.   # ○ 技能SP生成
  217.   #--------------------------------------------------------------------------
  218.   def create_skill_sp_system_cache
  219.     @__sp_cost = Kunase::Skill_SP::DEFAULT_SP_COST
  220.     self.note.each_line { |line|
  221.       case line
  222.       when Kunase::Skill_SP::Regexp::Skill::SP_COST
  223.         # 消费SP
  224.         @__sp_cost = $1.to_i
  225.       end
  226.     }
  227.   end
  228.   #--------------------------------------------------------------------------
  229.   # ○ 消費 SP
  230.   #--------------------------------------------------------------------------
  231.   def sp_cost
  232.     create_skill_sp_system_cache if @__sp_cost == nil
  233.     return @__sp_cost
  234.   end
  235. end
  236. #==============================================================================
  237. # ■ Vocab
  238. #==============================================================================
  239. module Vocab
  240.   #SP
  241.   def self.sp
  242.     return Kunase::Skill_SP::VOCAB_SP
  243.   end
  244.   #SP略
  245.   def self.sp_a
  246.     return Kunase::Skill_SP::VOCAB_SP_A
  247.   end
  248.   # 技能设定
  249.   def self.set_battle_skill
  250.     return Kunase::Skill_SP::VOCAB_MENU_SET_SKILL
  251.   end
  252. end
  253. #==============================================================================
  254. # ■ Game_Battler
  255. #==============================================================================

  256. class Game_Battler
  257.   #--------------------------------------------------------------------------
  258.   # ○ 战斗技能配置确定
  259.   #--------------------------------------------------------------------------
  260.   def battle_skill_set?(skill)
  261.     return true
  262.   end
  263. end

  264. #==============================================================================
  265. # ■ Game_Actor
  266. #==============================================================================

  267. class Game_Actor < Game_Battler
  268.   #--------------------------------------------------------------------------
  269.   # ● 实例变量
  270.   #--------------------------------------------------------------------------
  271.   attr_writer   :maxsp_plus               # 最大SP补正值
  272.   #--------------------------------------------------------------------------
  273.   # ○ MaxSP 取得
  274.   #--------------------------------------------------------------------------
  275.   def maxsp
  276.     about_exp = Kunase::Skill_SP::PERSONAL_SP_ABOUT_EXP[self.id]
  277.     if about_exp == nil
  278.       about_exp = Kunase::Skill_SP::SP_ABOUT_EXP
  279.     end
  280.     n = Integer(eval(about_exp))
  281.     n = [[n, sp_limit].min, Kunase::Skill_SP::SP_MIN].max
  282.     n += maxsp_plus + maxsp_plus_equip
  283.     return [[n, revised_sp_limit].min, Kunase::Skill_SP::REVISED_SP_MIN].max
  284.   end
  285.   #--------------------------------------------------------------------------
  286.   # ○ SP 取得
  287.   #--------------------------------------------------------------------------
  288.   def sp
  289.     return [maxsp - consumed_sp, 0].max
  290.   end
  291.   #--------------------------------------------------------------------------
  292.   # ○ SP 消耗量取得
  293.   #--------------------------------------------------------------------------
  294.   def consumed_sp
  295.     n = 0
  296.     battle_skills.compact.each { |skill| n += skill.sp_cost }
  297.     return n
  298.   end
  299.   #--------------------------------------------------------------------------
  300.   # ○ SP 上限取得
  301.   #--------------------------------------------------------------------------
  302.   def sp_limit
  303.     return Kunase::Skill_SP::SP_MAX
  304.   end
  305.   #--------------------------------------------------------------------------
  306.   # ○ 补正后SP上限获得
  307.   #--------------------------------------------------------------------------
  308.   def revised_sp_limit
  309.     return Kunase::Skill_SP::REVISED_SP_MAX
  310.   end
  311.   #--------------------------------------------------------------------------
  312.   # ○ 补正值获得
  313.   #--------------------------------------------------------------------------
  314.   def maxsp_plus
  315.     if @maxsp_plus == nil
  316.       if @own_sp != nil
  317.         @maxsp_plus = @own_sp
  318.         @own_sp = nil
  319.       else
  320.         @maxsp_plus = 0
  321.       end
  322.     end
  323.     return @maxsp_plus
  324.   end
  325.   #--------------------------------------------------------------------------
  326.   # ○ 装备补正
  327.   #--------------------------------------------------------------------------
  328.   def maxsp_plus_equip
  329.     n = 0
  330.     equips.compact.each { |item| n += item.maxsp_plus }
  331.     return n
  332.   end
  333.   #--------------------------------------------------------------------------
  334.   # ● 技能取得
  335.   #--------------------------------------------------------------------------
  336.   alias skills_SkillSP skills
  337.   def skills
  338.     return (skill_sp_restrict? ? restricted_skills : skills_SkillSP)
  339.   end
  340.   #--------------------------------------------------------------------------
  341.   # ○ 战斗测试
  342.   #--------------------------------------------------------------------------
  343.   def skill_sp_restrict?
  344.     if $game_party.in_battle
  345.     return true unless $BTEST
  346.     end
  347.     return false
  348.   end
  349.   #--------------------------------------------------------------------------
  350.   # ○ 技能限制
  351.   #--------------------------------------------------------------------------
  352.   def restricted_skills
  353.     # 战斗技能加入
  354.     result = battle_skills
  355.     result.sort! { |a, b| a.id <=> b.id }
  356.     return result
  357.   end
  358.   #--------------------------------------------------------------------------
  359.   # ○ 全部技能取得
  360.   #--------------------------------------------------------------------------
  361.   def all_skills
  362.     last_in_battle = $game_party.in_battle
  363.     $game_party.in_battle = false
  364.     result = skills_SkillSP
  365.     $game_party.in_battle = last_in_battle
  366.     return result
  367.   end
  368.   #--------------------------------------------------------------------------
  369.   # ○ 技能栏最大数取得
  370.   #--------------------------------------------------------------------------
  371.   def battle_skill_max
  372.     @battle_skill_max = -1 if @battle_skill_max == nil
  373.     n = (@battle_skill_max < 0 ?
  374.       Kunase::Skill_SP::MAX_SKILLS : @battle_skill_max)
  375.     n += equipment_battle_skill_max_plus
  376.     return [n, 0].max
  377.   end
  378.   #--------------------------------------------------------------------------
  379.   # ○ 扩充技能栏
  380.   #--------------------------------------------------------------------------
  381.   def equipment_battle_skill_max_plus
  382.     n = 0
  383.     equips.compact.each { |item| n += item.battle_skill_max_plus }
  384.     return n
  385.   end
  386.   #--------------------------------------------------------------------------
  387.   # ○ 技能栏最大值设定
  388.   #--------------------------------------------------------------------------
  389.   def battle_skill_max=(value)
  390.     @battle_skill_max = value
  391.     if @battle_skills == nil
  392.       @battle_skills = []
  393.     else
  394.       @battle_skills = @battle_skills[0...value]
  395.     end
  396.   end
  397.   #--------------------------------------------------------------------------
  398.   # ○ 战斗使用技能ID
  399.   #--------------------------------------------------------------------------
  400.   def battle_skill_ids
  401.     @battle_skills = [] if @battle_skills == nil
  402.     return @battle_skills
  403.   end
  404.   #--------------------------------------------------------------------------
  405.   # ○ 战斗用技能取得
  406.   #--------------------------------------------------------------------------
  407.   def battle_skills
  408.     result = []
  409.     battle_skill_ids.each { |i|
  410.       next if i == nil           
  411.       result << $data_skills[i]
  412.     }
  413.     return result
  414.   end
  415.   #--------------------------------------------------------------------------
  416.   # ○ 战斗技能登陆
  417.   #     index : 位置
  418.   #     skill : 技能编号
  419.   #--------------------------------------------------------------------------
  420.   def set_battle_skill(index, skill)
  421.     if skill == nil
  422.       @battle_skills[index] = nil
  423.     else
  424.       return unless skill.is_a?(RPG::Skill)  
  425.       return if sp < skill.sp_cost           
  426.       @battle_skills[index] = skill.id
  427.     end
  428.   end
  429.   #--------------------------------------------------------------------------
  430.   # ○ 战斗技能追加
  431.   #     skill : 技能
  432.   #--------------------------------------------------------------------------
  433.   def add_battle_skill(skill)
  434.     return unless skill.is_a?(RPG::Skill)  
  435.     skills = battle_skill_ids
  436.     return if skills.include?(skill.id)   
  437.     return if sp < skill.sp_cost           
  438.     battle_skill_max.times { |i|
  439.       if skills[i] == nil
  440.         set_battle_skill(i, skill)
  441.         break
  442.       end
  443.     }
  444.     restore_battle_skill
  445.   end
  446.   #--------------------------------------------------------------------------
  447.   # ○ 战斗技能解除
  448.   #     index : 位置
  449.   #--------------------------------------------------------------------------
  450.   def remove_battle_skill(index)
  451.     @battle_skills[index] = nil
  452.   end
  453.   #--------------------------------------------------------------------------
  454.   # ○ 战斗技能全部解除
  455.   #--------------------------------------------------------------------------
  456.   def clear_battle_skill
  457.     @battle_skills = []
  458.   end
  459.   #--------------------------------------------------------------------------
  460.   # ○ 技能能否设置判定
  461.   #     index : 位置
  462.   #     skill : 技能
  463.   #--------------------------------------------------------------------------
  464.   def battle_skill_settable?(index, skill)
  465.     return false if battle_skill_max <= index  # 超出范围
  466.     return true  if skill == nil               # 解除技能
  467.     return false if battle_skill_ids.include?(skill.id)  #已经设定
  468.     skill_id = battle_skill_ids[index]
  469.     curr_skill = (skill_id != nil ? $data_skills[skill_id] : nil)
  470.     offset = (curr_skill != nil ? curr_skill.sp_cost : 0)
  471.     return false if self.sp < (skill.sp_cost - offset)  # SP 不足
  472.     return true
  473.   end
  474.   #--------------------------------------------------------------------------
  475.   # ○ 战斗技能存储
  476.   #--------------------------------------------------------------------------
  477.   def restore_battle_skill
  478.     result = battle_skill_ids.clone
  479.     usable_skills = all_skills
  480.     result.each_with_index { |n, i|
  481.       next if n == nil
  482.       # 未学习的情况
  483.       if (usable_skills.find { |s| s.id == n }) == nil
  484.         result[i] = nil
  485.       end
  486.     }
  487.     @battle_skills = result[0...battle_skill_max]
  488.     # SP不足的时候排除
  489.     (battle_skill_max - 1).downto(0) { |i|
  490.       @battle_skills[i] = nil if maxsp - consumed_sp < 0
  491.     }
  492.   end
  493.   #--------------------------------------------------------------------------
  494.   # ● 换装备的时候
  495.   #     equip_type : 装备部位
  496.   #     item       : 道具
  497.   #     test       : 在战斗测试中
  498.   #--------------------------------------------------------------------------
  499.   alias change_equip_SkillSP change_equip
  500.   def change_equip(equip_type, item, test = false)
  501.     change_equip_SkillSP(equip_type, item)
  502.       restore_battle_skill
  503.   end
  504.   #--------------------------------------------------------------------------
  505.   # ● 装备丢弃时
  506.   #--------------------------------------------------------------------------
  507.   alias discard_equip_SkillSP discard_equip
  508.   def discard_equip(item)
  509.     discard_equip__SkillSP(item)
  510.      restore_battle_skill
  511.   end
  512.   #--------------------------------------------------------------------------
  513.   # ● 经验变更
  514.   #--------------------------------------------------------------------------
  515.   alias change_exp_SP change_exp
  516.   def change_exp(exp, show)
  517.     last_in_battle = $game_party.in_battle
  518.     $game_party.in_battle = false

  519.     change_exp_SP(exp, show)

  520.     $game_party.in_battle = last_in_battle
  521.   end
  522.   if Kunase::Skill_SP::AUTO_SET_NEW_SKILL
  523.    alias learn_skill_SP learn_skill
  524.   def learn_skill(skill_id)
  525.     learn_skill_SP(skill_id)
  526.     add_battle_skill($data_skills[skill_id])
  527.   end
  528.   end  
  529.   #--------------------------------------------------------------------------
  530.   # ● 技能遗忘
  531.   #--------------------------------------------------------------------------
  532.   alias forget_skill_SkillSP forget_skill
  533.   def forget_skill(skill_id)
  534.     # 忘れるスキルを戦闘用スキルから削除
  535.     battle_skill_ids.each_with_index { |s, i|
  536.       remove_battle_skill(i) if s == skill_id
  537.     }
  538.     forget_skill_SkillSP(skill_id)
  539.   end
  540.   #--------------------------------------------------------------------------
  541.   # ● 判定技能是否装备
  542.   #--------------------------------------------------------------------------
  543.   def battle_skill_set?(skill)
  544.     return false unless skill.is_a?(RPG::Skill)
  545.     return battle_skill_ids.include?(skill.id)
  546.   end
  547. end

  548. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  549. #==============================================================================
  550. # ■ Window_Base
  551. #==============================================================================

  552. class Window_Base < Window
  553.   #--------------------------------------------------------------------------
  554.   # ○ SP颜色取得
  555.   #--------------------------------------------------------------------------
  556.   def sp_color(actor)
  557.     return knockout_color if actor.maxsp > 0 && actor.sp == 0
  558.     return normal_color
  559.   end
  560.   #--------------------------------------------------------------------------
  561.   # ○ SP渐变色1
  562.   #--------------------------------------------------------------------------
  563.   def sp_gauge_color1
  564.     color = Kunase::Skill_SP::GAUGE_START_COLOR
  565.     return (color.is_a?(Integer) ? text_color(color) : color)
  566.   end
  567.   #--------------------------------------------------------------------------
  568.   # ○ SP渐变色2
  569.   #--------------------------------------------------------------------------
  570.   def sp_gauge_color2
  571.     color = Kunase::Skill_SP::GAUGE_END_COLOR
  572.     return (color.is_a?(Integer) ? text_color(color) : color)
  573.   end
  574.   #--------------------------------------------------------------------------
  575.   # ○ SP描绘
  576.   #--------------------------------------------------------------------------
  577.   def draw_actor_sp(actor, x, y, width = 120)
  578.     draw_actor_sp_gauge(actor, x, y, width)
  579.     self.contents.font.color = system_color
  580.     self.contents.draw_text(x, y, 30, 24, Vocab::sp_a)
  581.     self.contents.font.color = sp_color(actor)
  582.     xr = x + width
  583.     if width < 120
  584.       self.contents.draw_text(xr - 40, y, 40, 24, actor.sp, 2)
  585.     else
  586.       self.contents.draw_text(xr - 90, y, 40, 24, actor.sp, 2)
  587.       self.contents.font.color = normal_color
  588.       self.contents.draw_text(xr - 50, y, 10, 24, "/", 2)
  589.       self.contents.draw_text(xr - 40, y, 40, 24, actor.maxsp, 2)
  590.     end
  591.     self.contents.font.color = normal_color
  592.   end
  593.   #--------------------------------------------------------------------------
  594.   # ○ SP条描绘
  595.   #--------------------------------------------------------------------------
  596.   def draw_actor_sp_gauge(actor, x, y, width = 120)
  597.     gw = width * actor.sp / [actor.maxsp, 1].max
  598.     gs1 = sp_gauge_color1
  599.     gs2 = sp_gauge_color2
  600.     self.contents.fill_rect(x, y + 24 - 8, width, 6, gauge_back_color)
  601.     self.contents.gradient_fill_rect(x, y + 24 - 8, gw, 6, gs1, gs2)
  602.   end
  603. end
  604. #==============================================================================
  605. # ■ Window_Status
  606. #==============================================================================

  607. if Kunase::Skill_SP::SHOW_STATUS_SP
  608. class Window_Status < Window_Selectable
  609.   #--------------------------------------------------------------------------
  610.   # ● 绘制基本信息
  611.   #--------------------------------------------------------------------------
  612.   alias draw_basic_info_SkillSP draw_basic_info
  613.   def draw_basic_info(x, y)
  614.     draw_basic_info_SkillSP(x, y)
  615.     draw_actor_sp(@actor, x, y + 24 * 4)
  616.   end
  617. end
  618. end
  619. #==============================================================================
  620. # □ Window_BattleSkillStatus
  621. #------------------------------------------------------------------------------
  622. #   显示基本信息的窗口
  623. #==============================================================================

  624. class Window_BattleSkillStatus < Window_Base
  625.   #--------------------------------------------------------------------------
  626.   # ● 初始化
  627.   #--------------------------------------------------------------------------
  628.   def initialize(x, y, actor)
  629.     super(x, y, Graphics.width, 24 + 32)
  630.     @actor = actor
  631.     refresh
  632.   end
  633.   #--------------------------------------------------------------------------
  634.   # ● 刷新
  635.   #--------------------------------------------------------------------------
  636.   def refresh
  637.     self.contents.clear
  638.     draw_actor_name(@actor, 4, 0)
  639.     draw_actor_level(@actor, 140, 0)
  640.     draw_actor_sp(@actor, 240, 0)
  641.   end
  642. end
  643. #==============================================================================
  644. # □ Window_BattleSkillSlot
  645. #------------------------------------------------------------------------------
  646. #   已装备的技能窗口。
  647. #==============================================================================

  648. class Window_BattleSkillSlot < Window_Selectable
  649.   #--------------------------------------------------------------------------
  650.   # ● 初始化
  651.   #--------------------------------------------------------------------------
  652.   def initialize(x, y, width, height, actor)
  653.     super(x, y, width, height)
  654.     @actor = actor
  655.     @data = []
  656.     self.index = 0
  657.     self.active = false
  658.     refresh
  659.   end
  660.   #--------------------------------------------------------------------------
  661.   # ○ 获取最大值
  662.   #--------------------------------------------------------------------------
  663.   def item_max
  664.     @data ? @data.size : 1
  665.   end
  666.   #--------------------------------------------------------------------------
  667.   # ○ 获取技能
  668.   #--------------------------------------------------------------------------
  669.   def skill
  670.     return @data[self.index]
  671.   end
  672.   #--------------------------------------------------------------------------
  673.   # ● 刷新
  674.   #--------------------------------------------------------------------------
  675.   def refresh
  676.     @data=[]
  677.         skill_ids = @actor.battle_skill_ids
  678.     @actor.battle_skill_max.times { |i|
  679.       if skill_ids[i] != nil
  680.         @data << $data_skills[skill_ids[i]]
  681.       else
  682.         @data << nil
  683.       end
  684.     }
  685.     create_contents
  686.     draw_all_items
  687.   end
  688.   #--------------------------------------------------------------------------
  689.   # ○ 绘制内容
  690.   #--------------------------------------------------------------------------
  691.   def draw_item(index)
  692.     rect = item_rect(index)
  693.     self.contents.clear_rect(rect)
  694.     skill = @data[index]
  695.     if skill != nil
  696.       rect.width -= 4
  697.       draw_item_name(skill, rect.x, rect.y)
  698.       self.contents.draw_text(rect, skill.sp_cost, 2)
  699.     else
  700.       self.contents.draw_text(rect, Kunase::Skill_SP::BLANK_TEXT, 1)
  701.     end
  702.   end
  703.   #--------------------------------------------------------------------------
  704.   # ● 更新帮助窗口
  705.   #--------------------------------------------------------------------------
  706.   def update_help
  707.     @help_window.set_text(skill == nil ? "" : skill.description)
  708.   end
  709. end
  710. #==============================================================================
  711. # □ Window_BattleSkillList
  712. #------------------------------------------------------------------------------
  713. #   右侧显示技能列表的窗口。
  714. #==============================================================================

  715. class Window_BattleSkillList < Window_Selectable
  716.   #--------------------------------------------------------------------------
  717.   # ● 定义实例变量
  718.   #--------------------------------------------------------------------------
  719.   attr_accessor :slot_index               # 技能栏编号
  720.   #--------------------------------------------------------------------------
  721.   # ● 初始化对象
  722.   #--------------------------------------------------------------------------
  723.   def initialize(x, y, width, height, actor)
  724.     super(x, y, width, height)
  725.     @actor = actor
  726.     @slot_index = 0
  727.     @data = []
  728.     self.index = 0
  729.     self.active = false
  730.     refresh
  731.   end
  732.   #--------------------------------------------------------------------------
  733.   # ○ 技能取得
  734.   #--------------------------------------------------------------------------
  735.   def skill
  736.     return @data[self.index]
  737.   end
  738.   #--------------------------------------------------------------------------
  739.   # ○ 最大技能数取得
  740.   #--------------------------------------------------------------------------
  741.   def item_max
  742.     @data ? @data.size : 1
  743.   end
  744.   #--------------------------------------------------------------------------
  745.   # ○ 显示技能列表
  746.   #--------------------------------------------------------------------------
  747.   def make_item_list
  748.     @data = [nil]
  749.     @actor.all_skills.each { |skill|
  750.       @data.push(skill) if selectable?(skill)
  751.     }
  752.   end
  753.   #--------------------------------------------------------------------------
  754.   # ● 刷新
  755.   #--------------------------------------------------------------------------
  756.   def refresh
  757.     make_item_list
  758.     create_contents
  759.     draw_all_items
  760.   end
  761.   #--------------------------------------------------------------------------
  762.   # ○ 技能可否选择判定
  763.   #--------------------------------------------------------------------------
  764.   def selectable?(skill)
  765.     return false if skill == nil
  766.     return true if skill.battle_ok?
  767.     if Kunase::Skill_SP::SHOW_UNUSABLE_SKILL && skill.occasion == 3
  768.       return true
  769.     end
  770.     return false
  771.   end
  772.   #--------------------------------------------------------------------------
  773.   # ○ 绘制项目
  774.   #--------------------------------------------------------------------------
  775.   def draw_item(index)
  776.     rect = item_rect(index)
  777.     self.contents.clear_rect(rect)
  778.     skill = @data[index]
  779.     if skill != nil
  780.       rect.width -= 4
  781.       enabled = @actor.battle_skill_settable?(@slot_index, skill)
  782.       draw_item_name(skill, rect.x, rect.y, enabled)
  783.       self.contents.draw_text(rect, skill.sp_cost, 2)
  784.     else
  785.       self.contents.draw_text(rect, Kunase::Skill_SP::RELEASE_TEXT, 1)
  786.     end
  787.   end
  788.   #--------------------------------------------------------------------------
  789.   # ● 更新帮助窗口
  790.   #--------------------------------------------------------------------------
  791.   def update_help
  792.     @help_window.set_text(skill == nil ? "" : skill.description)
  793.   end
  794. end
  795. #==============================================================================
  796. # □ Scene_SetBattleSkill
  797. #------------------------------------------------------------------------------
  798. #   技能设定的场景。
  799. #==============================================================================

  800. class Scene_SetBattleSkill < Scene_MenuBase
  801.   #--------------------------------------------------------------------------
  802.   # ● 初始化
  803.   #--------------------------------------------------------------------------
  804.   def initialize(actor_index = 0, menu_index = 0)
  805.     @actor_index = actor_index
  806.     @menu_index = menu_index
  807.   end
  808.   #--------------------------------------------------------------------------
  809.   # ● 开始处理
  810.   #--------------------------------------------------------------------------
  811.   def start
  812.     super
  813.     create_background
  814.     @actor = $game_party.menu_actor
  815.     create_windows
  816.   end
  817.   #--------------------------------------------------------------------------
  818.   # ○ 创建窗口
  819.   #--------------------------------------------------------------------------
  820.   def create_windows
  821.     @help_window = Window_Help.new
  822.     dy = @help_window.height
  823.     @status_window = Window_BattleSkillStatus.new(0, dy, @actor)

  824.     dy += @status_window.height
  825.     @slot_window = Window_BattleSkillSlot.new(
  826.       0,
  827.       dy,
  828.       Graphics.width / 2,
  829.       Graphics.height - dy,
  830.       @actor)
  831.     @slot_window.help_window = @help_window
  832.     @slot_window.active = true

  833.     @list_window = Window_BattleSkillList.new(
  834.       Graphics.width - @slot_window.width,
  835.       dy,
  836.       Graphics.width - @slot_window.width,
  837.       Graphics.height - dy,
  838.       @actor)
  839.     @list_window.help_window = @help_window
  840.   end
  841.   #--------------------------------------------------------------------------
  842.   # ● 结束处理
  843.   #--------------------------------------------------------------------------
  844.   def terminate
  845.     super
  846.     @help_window.dispose
  847.     @status_window.dispose
  848.     @slot_window.dispose
  849.     @list_window.dispose
  850.   end
  851.   #--------------------------------------------------------------------------
  852.   # ● 更新
  853.   #--------------------------------------------------------------------------
  854.   def update
  855.     super
  856.     if @slot_window.active
  857.       update_slot
  858.     elsif @list_window.active
  859.       update_list
  860.     end
  861.   end
  862.   #--------------------------------------------------------------------------
  863.   # ○ 刷新窗口
  864.   #--------------------------------------------------------------------------
  865.   def refresh_window
  866.     @status_window.refresh
  867.     @slot_window.refresh
  868.     @list_window.refresh
  869.   end
  870.   #--------------------------------------------------------------------------
  871.   # ○ 左侧窗口更新
  872.   #--------------------------------------------------------------------------
  873.   def update_slot
  874.     if @last_slot_index != @slot_window.index
  875.       @list_window.slot_index = @slot_window.index
  876.       @list_window.refresh
  877.       @last_slot_index = @slot_window.index
  878.     end
  879.     if Input.trigger?(Input::A)
  880.       Sound.play_ok
  881.       @actor.remove_battle_skill(@slot_window.index)
  882.       refresh_window
  883.     elsif Input.trigger?(Input::B)
  884.       Sound.play_cancel
  885.       SceneManager.return
  886.     elsif Input.trigger?(Input::C)
  887.       Sound.play_ok
  888.       # 切换活动窗口
  889.       @slot_window.active = false
  890.       @list_window.active = true
  891.     end
  892.   end
  893.   #--------------------------------------------------------------------------
  894.   # ○ 右侧窗口更新
  895.   #--------------------------------------------------------------------------
  896.   def update_list
  897.     if Input.trigger?(Input::B)
  898.       Sound.play_cancel
  899.       # 切换活动窗口
  900.       @slot_window.active = true
  901.       @list_window.active = false
  902.     elsif Input.trigger?(Input::C)
  903.       skill = @list_window.skill
  904.       # 无法设置的场合
  905.       unless @actor.battle_skill_settable?(@slot_window.index, skill)
  906.         Sound.play_buzzer
  907.         return
  908.       end
  909.       Sound.play_ok
  910.       set_skill(@slot_window.index, skill)
  911.       @slot_window.active = true
  912.       @list_window.active = false
  913.     end
  914.   end
  915.   #--------------------------------------------------------------------------
  916.   # ○ 设置技能
  917.   #--------------------------------------------------------------------------
  918.   def set_skill(index, skill)
  919.     @actor.remove_battle_skill(index)
  920.     if skill != nil
  921.       @actor.set_battle_skill(index, skill)
  922.     end
  923.     refresh_window
  924.   end
  925. end
  926. #==============================================================================
  927. # ■ Window_MenuCommand
  928. #------------------------------------------------------------------------------
  929. #  菜单画面中显示指令的窗口
  930. #==============================================================================

  931. class Window_MenuCommand < Window_Command
  932.   alias add_main_commands_kunase add_main_commands
  933.   def add_main_commands
  934.     add_main_commands_kunase
  935.     add_command(Kunase::Skill_SP::VOCAB_MENU_SET_SKILL, :skillsp, main_commands_enabled)
  936.   end
  937. end
  938. #==============================================================================
  939. # ■ Scene_Menu
  940. #------------------------------------------------------------------------------
  941. #  菜单画面
  942. #==============================================================================
  943. class Scene_Menu < Scene_MenuBase
  944.   alias create_command_window_kunase create_command_window
  945.   def create_command_window
  946.     create_command_window_kunase
  947.     @command_window.set_handler(:skillsp,     method(:command_personal))
  948.   end
  949.   def on_personal_ok
  950.     case @command_window.current_symbol
  951.     when :skill
  952.       SceneManager.call(Scene_Skill)
  953.     when :equip
  954.       SceneManager.call(Scene_Equip)
  955.     when :status
  956.       SceneManager.call(Scene_Status)
  957.     when :skillsp
  958.       SceneManager.call(Scene_SetBattleSkill)
  959.       end
  960.     end
  961.   end
  962. #==============================================================================
  963. # ■ Game_Unit
  964. #------------------------------------------------------------------------------
  965. #  管理游戏单位的类。是 Game_Party 和 Game_Troop 类的父类。
  966. #==============================================================================
  967. class Game_Unit
  968.   #--------------------------------------------------------------------------
  969.   # ● 定义实例变量
  970.   #--------------------------------------------------------------------------
  971.   attr_accessor   :in_battle                # 战斗中的标志
  972. end
复制代码

点评

真不好意思……原来看漏了一个插入脚本……是那个脚本的问题……  发表于 2015-5-5 23:52
用头画头像,用脚写脚本
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部