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

Project1

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

[已经过期] 被动技能和技能装备脚本冲突怎么解决

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2931
在线时间
410 小时
注册时间
2017-2-8
帖子
38
跳转到指定楼层
1
发表于 2017-11-15 23:54:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 进击の呆呆兽 于 2017-11-16 00:00 编辑

RUBY 代码复制
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/                ◆ 技能SP点--让技能像装备一样装备吧~
  3. #_/
  4. #_/  看到了VX中KGC的技能CP制脚本,然后到KGC和6R找了好久都没找到ACE版本,就参照着
  5. #_/  KGCVX版的思路移植了个技能SP的脚本~
  6. #_/  功能:
  7. #_/   让技能像装备一样装备,只有装备后的技能可以在战斗中使用。
  8. #_/   技能可在备注设定消耗的SP,角色升级可增加SP,装备也可追加SP(或者扣除SP上限)。
  9. #_/   可定义技能栏上限,这样即使SP再多也只能携带特定数目技能。
  10. #_/      SceneManager.call(Scene_SetBattleSkill) 呼出技能配置界面。
  11. #        在数据库技能备注中添加<CP X>
  12. #        若要让装备可以增加最大CP在装备备注中添加<最大CP X>
  13. #        若要让装备可以增加技能栏容量在备注中添加<技能栏追加 X>
  14. #        脚本内置在菜单中添加了“魔装”选项,不需要请删除脚本之后对Window_Menucommand和Scene_Menu的追加。
  15. #        关于其他对SP和技能栏的操作见范例或者注释(范例才没有卖萌呢)                                                       ---千叶玖濑
  16. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  17.  
  18. #==============================================================================
  19. # ☆系统设置
  20. #==============================================================================
  21. module Kunase
  22. module Skill_SP
  23.   # ◆ 技能栏最大空位
  24.   MAX_SKILLS = 7
  25.   # ◆ SP 的名字
  26.   VOCAB_SP   = "SP"
  27.   # ◆ SP 的简称
  28.   VOCAB_SP_A = "SP"
  29.   # ◆ 在角色状态中显示SP数值(适合默认菜单)
  30.   SHOW_STATUS_SP = true
  31.   # ◆ 未设定消耗SP的技能,默认消耗的SP值。
  32.   DEFAULT_SP_COST = 1
  33.   # ◆ 人物升级所获得得SP值上限
  34.   SP_MAX = 25
  35.   # ◆ 人物SP值下限
  36.   SP_MIN = 3
  37.   # ◆ 本来的SP加上装备提供的SP上限
  38.   REVISED_SP_MAX = 25
  39.   # ◆ 经过装备扣除后的SP下限
  40.   REVISED_SP_MIN = 0
  41.   # ◆通用的SP最大值的计算公式
  42.   #   level代表角色当前等级
  43.   #   结果自动取整
  44.   SP_ABOUT_EXP = "level * 0.6 + 1.0"
  45.   # ◆ 对于特定角色角色最大SP计算公式
  46.   #   PERSONAL_SP_ABOUT_EXP[角色 ID] = "公式"
  47.   #   公式格式和最大值计算公式举例如下
  48.   PERSONAL_SP_ABOUT_EXP = [] # 此行不要改动
  49.   PERSONAL_SP_ABOUT_EXP[1] = "level * 1.0 - 10.0"
  50.   PERSONAL_SP_ABOUT_EXP[3] = "level * 1.0 + 5.0"
  51.   # ◆ 在技能装备栏中允许显示不可使用的技能
  52.   SHOW_UNUSABLE_SKILL    = true
  53.   # ◆ 新学习到的技能自动装备
  54.   AUTO_SET_NEW_SKILL     = true
  55.   # ◆ SP 最小值时的颜色
  56.   #  (数值为\C[n]表示的颜色)
  57.   GAUGE_START_COLOR = 13
  58.   # ◆ SP 最大值时的颜色
  59.   GAUGE_END_COLOR   = 5
  60.   # ◆ 菜单中进入技能SP的名称
  61.   VOCAB_MENU_SET_SKILL = "技能书"
  62.   # ◆ 未设定技能时显示的名称
  63.   BLANK_TEXT   = "-   无   -"
  64.   # ◆ 技能解除时候显示的名称
  65.   RELEASE_TEXT = "( 解除技能 )"
  66. end
  67. end
  68. #==============================================================================
  69. # ☆对于在数据库备注中的设定方法~
  70. #==============================================================================
  71. module Kunase::Skill_SP
  72.   module Regexp
  73.     module BaseItem
  74.       # 最大SP增加:在装备栏备注中填写<最大SP X>或<MAXSP X>(X可为负数)
  75.       MAXSP_PLUS = /<(?:MAX|最大)SP\s*([\-\+]?\d+)>/
  76.       # 技能框增加:在装备栏备注中填写<技能栏追加 X>
  77.       BATTLE_SKILL_MAX = /<(?:BATTLE_SKILL_MAX|技能栏追加)\s*([\-\+]?\d+)>/i
  78.     end
  79.     module Skill
  80.       # 消费SP设定 :在技能备注中填写<SP X>
  81.       SP_COST = /<SP\s*(\d+)>/i
  82.     end
  83.   end
  84. end
  85. #==============================================================================
  86. ## ☆ Game_Interpreter----用事件脚本来获取SP的方法~
  87. #==============================================================================
  88. module Skill_SP
  89.   #--------------------------------------------------------------------------
  90.   # ○ 获得角色SP最大值
  91.   #     actor_id    : 角色编号
  92.   #     variable_id : SP赋值的变量号(不填则不代入)
  93.   #--------------------------------------------------------------------------
  94.   def get_actor_sp(actor_id, variable_id = 0)
  95.     value = $game_actors[actor_id].maxsp_plus
  96.     $game_variables[variable_id] = value if variable_id > 0
  97.     return value
  98.   end
  99.   #--------------------------------------------------------------------------
  100.   # ○ 变更角色SP最大值
  101.   #     actor_id : 角色编号
  102.   #     value    : 变更后的SP最大值
  103.   #--------------------------------------------------------------------------
  104.   def set_actor_sp(actor_id, value)
  105.     $game_actors[actor_id].maxsp_plus = value
  106.   end
  107.   #--------------------------------------------------------------------------
  108.   # ○ 角色最大SP增加
  109.   #     actor_id : 角色编号
  110.   #     value    : SP最大值增加量
  111.   #--------------------------------------------------------------------------
  112.   def gain_actor_sp(actor_id, value)
  113.     $game_actors[actor_id].maxsp_plus += value
  114.   end
  115.   #--------------------------------------------------------------------------
  116.   # ○ 技能栏最大数获得
  117.   #     actor_id : 角色编号
  118.   #     variable_id : 技能栏最大数赋值的变量号(不填则不代入)
  119.   #--------------------------------------------------------------------------
  120.   def get_battle_skill_max(actor_id, variable_id = 0)
  121.     value = $game_actors[actor_id].battle_skill_max
  122.     $game_variables[variable_id] = value if variable_id > 0
  123.     return value
  124.   end
  125.   #--------------------------------------------------------------------------
  126.   # ○ 技能栏最大数变更
  127.   #     actor_id : 角色ID
  128.   #     value    : 变更后的技能栏数目
  129.   #--------------------------------------------------------------------------
  130.   def set_battle_skill_max(actor_id, value = -1)
  131.     $game_actors[actor_id].battle_skill_max = value
  132.   end
  133.   #--------------------------------------------------------------------------
  134.   # ○ 确认某技能是否已装备
  135.   #     actor_id : 角色ID
  136.   #     skill_id : 技能ID
  137.   #--------------------------------------------------------------------------
  138.   def battle_skill_set?(actor_id, skill_id)
  139.     return $game_actors[actor_id].battle_skill_ids.include?(skill_id)
  140.   end
  141.   #--------------------------------------------------------------------------
  142.   # ○ 装备技能
  143.   #     actor_id : 角色编号
  144.   #     index    : 装备的技能栏位
  145.   #     skill_id : 技能ID(nil则为解除装备)
  146.   #--------------------------------------------------------------------------
  147.   def set_battle_skill(actor_id, index, skill_id = nil)
  148.     actor = $game_actors[actor_id]
  149.     if skill_id.is_a?(Integer)
  150.       # 装备
  151.       skill = $data_skills[skill_id]
  152.       return unless actor.battle_skill_settable?(index, skill)  # 无法装备
  153.       actor.set_battle_skill(index, skill)
  154.       actor.restore_battle_skill
  155.     else
  156.       # 解除
  157.       actor.remove_battle_skill(index)
  158.     end
  159.   end
  160.   #--------------------------------------------------------------------------
  161.   # ○ 直接装备某技能
  162.   #     actor_id : 角色编号
  163.   #     skill_id : 技能编号
  164.   #--------------------------------------------------------------------------
  165.   def add_battle_skill(actor_id, skill_id)
  166.     actor = $game_actors[actor_id]
  167.     skill = $data_skills[skill_id]
  168.     return if actor == nil || skill == nil
  169.     actor.add_battle_skill(skill)
  170.   end
  171.   #--------------------------------------------------------------------------
  172.   # ○ 卸下全部技能
  173.   #     actor_id : 角色编号
  174.   #--------------------------------------------------------------------------
  175.   def clear_battle_skill(actor_id)
  176.     $game_actors[actor_id].clear_battle_skill
  177.   end
  178.   end
  179.   class Game_Interpreter
  180.     include Skill_SP
  181.   end
  182. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  183.  
  184.  
  185. #==============================================================================
  186. # ■ RPG::BaseItem
  187. #==============================================================================
  188.  
  189. class RPG::BaseItem
  190.   #--------------------------------------------------------------------------
  191.   # ○ 读取装备备注
  192.   #--------------------------------------------------------------------------
  193.   def create_skill_sp_system_cache
  194.     @__maxsp_plus = 0
  195.     @__battle_skill_max_plus = 0
  196.     self.note.each_line { |line|
  197.       case line
  198.       when Kunase::Skill_SP::Regexp::BaseItem::MAXSP_PLUS
  199.         @__maxsp_plus += $1.to_i
  200.       when Kunase::Skill_SP::Regexp::BaseItem::BATTLE_SKILL_MAX
  201.         @__battle_skill_max_plus += $1.to_i
  202.       end
  203.     }
  204.   end
  205.   #--------------------------------------------------------------------------
  206.   # ○ 最大 SP
  207.   #--------------------------------------------------------------------------
  208.   def maxsp_plus
  209.     create_skill_sp_system_cache if @__maxsp_plus == nil
  210.     return @__maxsp_plus
  211.   end
  212.   #--------------------------------------------------------------------------
  213.   # ○ 技能框追加
  214.   #--------------------------------------------------------------------------
  215.   def battle_skill_max_plus
  216.     create_skill_sp_system_cache if @__battle_skill_max_plus == nil
  217.     return @__battle_skill_max_plus
  218.   end
  219. end
  220. #==============================================================================
  221. # ■ RPG::Skill
  222. #==============================================================================
  223. class RPG::Skill < RPG::UsableItem
  224.   #--------------------------------------------------------------------------
  225.   # ○ 技能SP生成
  226.   #--------------------------------------------------------------------------
  227.   def create_skill_sp_system_cache
  228.     @__sp_cost = Kunase::Skill_SP::DEFAULT_SP_COST
  229.     self.note.each_line { |line|
  230.       case line
  231.       when Kunase::Skill_SP::Regexp::Skill::SP_COST
  232.         # 消费SP
  233.         @__sp_cost = $1.to_i
  234.       end
  235.     }
  236.   end
  237.   #--------------------------------------------------------------------------
  238.   # ○ 消費 SP
  239.   #--------------------------------------------------------------------------
  240.   def sp_cost
  241.     create_skill_sp_system_cache if @__sp_cost == nil
  242.     return @__sp_cost
  243.   end
  244. end
  245. #==============================================================================
  246. # ■ Vocab
  247. #==============================================================================
  248. module Vocab
  249.   #SP
  250.   def self.sp
  251.     return Kunase::Skill_SP::VOCAB_SP
  252.   end
  253.   #SP略
  254.   def self.sp_a
  255.     return Kunase::Skill_SP::VOCAB_SP_A
  256.   end
  257.   # 技能设定
  258.   def self.set_battle_skill
  259.     return Kunase::Skill_SP::VOCAB_MENU_SET_SKILL
  260.   end
  261. end
  262. #==============================================================================
  263. # ■ Game_Battler
  264. #==============================================================================
  265.  
  266. class Game_Battler
  267.   #--------------------------------------------------------------------------
  268.   # ○ 战斗技能配置确定
  269.   #--------------------------------------------------------------------------
  270.   def battle_skill_set?(skill)
  271.     return true
  272.   end
  273. end
  274.  
  275. #==============================================================================
  276. # ■ Game_Actor
  277. #==============================================================================
  278.  
  279. class Game_Actor < Game_Battler
  280.   #--------------------------------------------------------------------------
  281.   # ● 实例变量
  282.   #--------------------------------------------------------------------------
  283.   attr_writer   :maxsp_plus               # 最大SP补正值
  284.   #--------------------------------------------------------------------------
  285.   # ○ MaxSP 取得
  286.   #--------------------------------------------------------------------------
  287.   def maxsp
  288.     about_exp = Kunase::Skill_SP::PERSONAL_SP_ABOUT_EXP[self.id]
  289.     if about_exp == nil
  290.       about_exp = Kunase::Skill_SP::SP_ABOUT_EXP
  291.     end
  292.     n = Integer(eval(about_exp))
  293.     n = [[n, sp_limit].min, Kunase::Skill_SP::SP_MIN].max
  294.     n += maxsp_plus + maxsp_plus_equip
  295.     return [[n, revised_sp_limit].min, Kunase::Skill_SP::REVISED_SP_MIN].max
  296.   end
  297.   #--------------------------------------------------------------------------
  298.   # ○ SP 取得
  299.   #--------------------------------------------------------------------------
  300.   def sp
  301.     return [maxsp - consumed_sp, 0].max
  302.   end
  303.   #--------------------------------------------------------------------------
  304.   # ○ SP 消耗量取得
  305.   #--------------------------------------------------------------------------
  306.   def consumed_sp
  307.     n = 0
  308.     battle_skills.compact.each { |skill| n += skill.sp_cost }
  309.     return n
  310.   end
  311.   #--------------------------------------------------------------------------
  312.   # ○ SP 上限取得
  313.   #--------------------------------------------------------------------------
  314.   def sp_limit
  315.     return Kunase::Skill_SP::SP_MAX
  316.   end
  317.   #--------------------------------------------------------------------------
  318.   # ○ 补正后SP上限获得
  319.   #--------------------------------------------------------------------------
  320.   def revised_sp_limit
  321.     return Kunase::Skill_SP::REVISED_SP_MAX
  322.   end
  323.   #--------------------------------------------------------------------------
  324.   # ○ 补正值获得
  325.   #--------------------------------------------------------------------------
  326.   def maxsp_plus
  327.     if @maxsp_plus == nil
  328.       if @own_sp != nil
  329.         @maxsp_plus = @own_sp
  330.         @own_sp = nil
  331.       else
  332.         @maxsp_plus = 0
  333.       end
  334.     end
  335.     return @maxsp_plus
  336.   end
  337.   #--------------------------------------------------------------------------
  338.   # ○ 装备补正
  339.   #--------------------------------------------------------------------------
  340.   def maxsp_plus_equip
  341.     n = 0
  342.     equips.compact.each { |item| n += item.maxsp_plus }
  343.     return n
  344.   end
  345.   #--------------------------------------------------------------------------
  346.   # ● 技能取得
  347.   #--------------------------------------------------------------------------
  348.   alias skills_SkillSP skills
  349.   def skills
  350.     return (skill_sp_restrict? ? restricted_skills : skills_SkillSP)
  351.   end
  352.   #--------------------------------------------------------------------------
  353.   # ○ 战斗测试
  354.   #--------------------------------------------------------------------------
  355.   def skill_sp_restrict?
  356.     if $game_party.in_battle
  357.     return true unless $BTEST
  358.     end
  359.     return false
  360.   end
  361.   #--------------------------------------------------------------------------
  362.   # ○ 技能限制
  363.   #--------------------------------------------------------------------------
  364.   def restricted_skills
  365.     # 战斗技能加入
  366.     result = battle_skills
  367.     result.sort! { |a, b| a.id <=> b.id }
  368.     return result
  369.   end
  370.   #--------------------------------------------------------------------------
  371.   # ○ 全部技能取得
  372.   #--------------------------------------------------------------------------
  373.   def all_skills
  374.     last_in_battle = $game_party.in_battle
  375.     $game_party.in_battle = false
  376.     result = skills_SkillSP
  377.     $game_party.in_battle = last_in_battle
  378.     return result
  379.   end
  380.   #--------------------------------------------------------------------------
  381.   # ○ 技能栏最大数取得
  382.   #--------------------------------------------------------------------------
  383.   def battle_skill_max
  384.     @battle_skill_max = -1 if @battle_skill_max == nil
  385.     n = (@battle_skill_max < 0 ?
  386.       Kunase::Skill_SP::MAX_SKILLS : @battle_skill_max)
  387.     n += equipment_battle_skill_max_plus
  388.     return [n, 0].max
  389.   end
  390.   #--------------------------------------------------------------------------
  391.   # ○ 扩充技能栏
  392.   #--------------------------------------------------------------------------
  393.   def equipment_battle_skill_max_plus
  394.     n = 0
  395.     equips.compact.each { |item| n += item.battle_skill_max_plus }
  396.     return n
  397.   end
  398.   #--------------------------------------------------------------------------
  399.   # ○ 技能栏最大值设定
  400.   #--------------------------------------------------------------------------
  401.   def battle_skill_max=(value)
  402.     @battle_skill_max = value
  403.     if @battle_skills == nil
  404.       @battle_skills = []
  405.     else
  406.       @battle_skills = @battle_skills[0...value]
  407.     end
  408.   end
  409.   #--------------------------------------------------------------------------
  410.   # ○ 战斗使用技能ID
  411.   #--------------------------------------------------------------------------
  412.   def battle_skill_ids
  413.     @battle_skills = [] if @battle_skills == nil
  414.     return @battle_skills
  415.   end
  416.   #--------------------------------------------------------------------------
  417.   # ○ 战斗用技能取得
  418.   #--------------------------------------------------------------------------
  419.   def battle_skills
  420.     result = []
  421.     battle_skill_ids.each { |i|
  422.       next if i == nil           
  423.       result << $data_skills[i]
  424.     }
  425.     return result
  426.   end
  427.   #--------------------------------------------------------------------------
  428.   # ○ 战斗技能登陆
  429.   #     index : 位置
  430.   #     skill : 技能编号
  431.   #--------------------------------------------------------------------------
  432.   def set_battle_skill(index, skill)
  433.     if skill == nil
  434.       @battle_skills[index] = nil
  435.     else
  436.       return unless skill.is_a?(RPG::Skill)  
  437.       return if sp < skill.sp_cost           
  438.       @battle_skills[index] = skill.id
  439.     end
  440.   end
  441.   #--------------------------------------------------------------------------
  442.   # ○ 战斗技能追加
  443.   #     skill : 技能
  444.   #--------------------------------------------------------------------------
  445.   def add_battle_skill(skill)
  446.     return unless skill.is_a?(RPG::Skill)  
  447.     skills = battle_skill_ids
  448.     return if skills.include?(skill.id)   
  449.     return if sp < skill.sp_cost           
  450.     battle_skill_max.times { |i|
  451.       if skills[i] == nil
  452.         set_battle_skill(i, skill)
  453.         break
  454.       end
  455.     }
  456.     restore_battle_skill
  457.   end
  458.   #--------------------------------------------------------------------------
  459.   # ○ 战斗技能解除
  460.   #     index : 位置
  461.   #--------------------------------------------------------------------------
  462.   def remove_battle_skill(index)
  463.     @battle_skills[index] = nil
  464.   end
  465.   #--------------------------------------------------------------------------
  466.   # ○ 战斗技能全部解除
  467.   #--------------------------------------------------------------------------
  468.   def clear_battle_skill
  469.     @battle_skills = []
  470.   end
  471.   #--------------------------------------------------------------------------
  472.   # ○ 技能能否设置判定
  473.   #     index : 位置
  474.   #     skill : 技能
  475.   #--------------------------------------------------------------------------
  476.   def battle_skill_settable?(index, skill)
  477.     return false if battle_skill_max <= index  # 超出范围
  478.     return true  if skill == nil               # 解除技能
  479.     return false if battle_skill_ids.include?(skill.id)  #已经设定
  480.     skill_id = battle_skill_ids[index]
  481.     curr_skill = (skill_id != nil ? $data_skills[skill_id] : nil)
  482.     offset = (curr_skill != nil ? curr_skill.sp_cost : 0)
  483.     return false if self.sp < (skill.sp_cost - offset)  # SP 不足
  484.     return true
  485.   end
  486.   #--------------------------------------------------------------------------
  487.   # ○ 战斗技能存储
  488.   #--------------------------------------------------------------------------
  489.   def restore_battle_skill
  490.     result = battle_skill_ids.clone
  491.     usable_skills = all_skills
  492.     result.each_with_index { |n, i|
  493.       next if n == nil
  494.       # 未学习的情况
  495.       if (usable_skills.find { |s| s.id == n }) == nil
  496.         result[i] = nil
  497.       end
  498.     }
  499.     @battle_skills = result[0...battle_skill_max]
  500.     # SP不足的时候排除
  501.     (battle_skill_max - 1).downto(0) { |i|
  502.       @battle_skills[i] = nil if maxsp - consumed_sp < 0
  503.     }
  504.   end
  505.   #--------------------------------------------------------------------------
  506.   # ● 换装备的时候
  507.   #     equip_type : 装备部位
  508.   #     item       : 道具
  509.   #     test       : 在战斗测试中
  510.   #--------------------------------------------------------------------------
  511.   alias change_equip_SkillSP change_equip
  512.   def change_equip(equip_type, item, test = false)
  513.     change_equip_SkillSP(equip_type, item)
  514.       restore_battle_skill
  515.   end
  516.   #--------------------------------------------------------------------------
  517.   # ● 装备丢弃时
  518.   #--------------------------------------------------------------------------
  519.   alias discard_equip_SkillSP discard_equip
  520.   def discard_equip(item)
  521.     discard_equip__SkillSP(item)
  522.      restore_battle_skill
  523.   end
  524.   #--------------------------------------------------------------------------
  525.   # ● 经验变更
  526.   #--------------------------------------------------------------------------
  527.   alias change_exp_SP change_exp
  528.   def change_exp(exp, show)
  529.     last_in_battle = $game_party.in_battle
  530.     $game_party.in_battle = false
  531.  
  532.     change_exp_SP(exp, show)
  533.  
  534.     $game_party.in_battle = last_in_battle
  535.   end
  536.   if Kunase::Skill_SP::AUTO_SET_NEW_SKILL
  537.    alias learn_skill_SP learn_skill
  538.   def learn_skill(skill_id)
  539.     learn_skill_SP(skill_id)
  540.     add_battle_skill($data_skills[skill_id])
  541.   end
  542.   end  
  543.   #--------------------------------------------------------------------------
  544.   # ● 技能遗忘
  545.   #--------------------------------------------------------------------------
  546.   alias forget_skill_SkillSP forget_skill
  547.   def forget_skill(skill_id)
  548.     # 忘れるスキルを戦闘用スキルから削除
  549.     battle_skill_ids.each_with_index { |s, i|
  550.       remove_battle_skill(i) if s == skill_id
  551.     }
  552.     forget_skill_SkillSP(skill_id)
  553.   end
  554.   #--------------------------------------------------------------------------
  555.   # ● 判定技能是否装备
  556.   #--------------------------------------------------------------------------
  557.   def battle_skill_set?(skill)
  558.     return false unless skill.is_a?(RPG::Skill)
  559.     return battle_skill_ids.include?(skill.id)
  560.   end
  561. end
  562.  
  563. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  564.  
  565. #==============================================================================
  566. # ■ Window_Base
  567. #==============================================================================
  568.  
  569. class Window_Base < Window
  570.   #--------------------------------------------------------------------------
  571.   # ○ SP颜色取得
  572.   #--------------------------------------------------------------------------
  573.   def sp_color(actor)
  574.     return knockout_color if actor.maxsp > 0 && actor.sp == 0
  575.     return normal_color
  576.   end
  577.   #--------------------------------------------------------------------------
  578.   # ○ SP渐变色1
  579.   #--------------------------------------------------------------------------
  580.   def sp_gauge_color1
  581.     color = Kunase::Skill_SP::GAUGE_START_COLOR
  582.     return (color.is_a?(Integer) ? text_color(color) : color)
  583.   end
  584.   #--------------------------------------------------------------------------
  585.   # ○ SP渐变色2
  586.   #--------------------------------------------------------------------------
  587.   def sp_gauge_color2
  588.     color = Kunase::Skill_SP::GAUGE_END_COLOR
  589.     return (color.is_a?(Integer) ? text_color(color) : color)
  590.   end
  591.   #--------------------------------------------------------------------------
  592.   # ○ SP描绘
  593.   #--------------------------------------------------------------------------
  594.   def draw_actor_sp(actor, x, y, width = 120)
  595.     draw_actor_sp_gauge(actor, x, y, width)
  596.     self.contents.font.color = system_color
  597.     self.contents.draw_text(x, y, 30, 24, Vocab::sp_a)
  598.     self.contents.font.color = sp_color(actor)
  599.     xr = x + width
  600.     if width < 120
  601.       self.contents.draw_text(xr - 40, y, 40, 24, actor.sp, 2)
  602.     else
  603.       self.contents.draw_text(xr - 90, y, 40, 24, actor.sp, 2)
  604.       self.contents.font.color = normal_color
  605.       self.contents.draw_text(xr - 50, y, 10, 24, "/", 2)
  606.       self.contents.draw_text(xr - 40, y, 40, 24, actor.maxsp, 2)
  607.     end
  608.     self.contents.font.color = normal_color
  609.   end
  610.   #--------------------------------------------------------------------------
  611.   # ○ SP条描绘
  612.   #--------------------------------------------------------------------------
  613.   def draw_actor_sp_gauge(actor, x, y, width = 120)
  614.     gw = width * actor.sp / [actor.maxsp, 1].max
  615.     gs1 = sp_gauge_color1
  616.     gs2 = sp_gauge_color2
  617.     self.contents.fill_rect(x, y + 24 - 8, width, 6, gauge_back_color)
  618.     self.contents.gradient_fill_rect(x, y + 24 - 8, gw, 6, gs1, gs2)
  619.   end
  620. end
  621. #==============================================================================
  622. # ■ Window_Status
  623. #==============================================================================
  624.  
  625. if Kunase::Skill_SP::SHOW_STATUS_SP
  626. class Window_Status < Window_Selectable
  627.   #--------------------------------------------------------------------------
  628.   # ● 绘制基本信息
  629.   #--------------------------------------------------------------------------
  630.   alias draw_basic_info_SkillSP draw_basic_info
  631.   def draw_basic_info(x, y)
  632.     draw_basic_info_SkillSP(x, y)
  633.     draw_actor_sp(@actor, x, y + 24 * 4)
  634.   end
  635. end
  636. end
  637. #==============================================================================
  638. # □ Window_BattleSkillStatus
  639. #------------------------------------------------------------------------------
  640. #   显示基本信息的窗口
  641. #==============================================================================
  642.  
  643. class Window_BattleSkillStatus < Window_Base
  644.   #--------------------------------------------------------------------------
  645.   # ● 初始化
  646.   #--------------------------------------------------------------------------
  647.   def initialize(x, y, actor)
  648.     super(x, y, Graphics.width, 24 + 32)
  649.     @actor = actor
  650.     refresh
  651.   end
  652.   #--------------------------------------------------------------------------
  653.   # ● 刷新
  654.   #--------------------------------------------------------------------------
  655.   def refresh
  656.     self.contents.clear
  657.     draw_actor_name(@actor, 4, 0)
  658.     draw_actor_level(@actor, 140, 0)
  659.     draw_actor_sp(@actor, 240, 0)
  660.   end
  661. end
  662. #==============================================================================
  663. # □ Window_BattleSkillSlot
  664. #------------------------------------------------------------------------------
  665. #   已装备的技能窗口。
  666. #==============================================================================
  667.  
  668. class Window_BattleSkillSlot < Window_Selectable
  669.   #--------------------------------------------------------------------------
  670.   # ● 初始化
  671.   #--------------------------------------------------------------------------
  672.   def initialize(x, y, width, height, actor)
  673.     super(x, y, width, height)
  674.     @actor = actor
  675.     @data = []
  676.     self.index = 0
  677.     self.active = false
  678.     refresh
  679.   end
  680.   #--------------------------------------------------------------------------
  681.   # ○ 获取最大值
  682.   #--------------------------------------------------------------------------
  683.   def item_max
  684.     @data ? @data.size : 1
  685.   end
  686.   #--------------------------------------------------------------------------
  687.   # ○ 获取技能
  688.   #--------------------------------------------------------------------------
  689.   def skill
  690.     return @data[self.index]
  691.   end
  692.   #--------------------------------------------------------------------------
  693.   # ● 刷新
  694.   #--------------------------------------------------------------------------
  695.   def refresh
  696.     @data=[]
  697.         skill_ids = @actor.battle_skill_ids
  698.     @actor.battle_skill_max.times { |i|
  699.       if skill_ids[i] != nil
  700.         @data << $data_skills[skill_ids[i]]
  701.       else
  702.         @data << nil
  703.       end
  704.     }
  705.     create_contents
  706.     draw_all_items
  707.   end
  708.   #--------------------------------------------------------------------------
  709.   # ○ 绘制内容
  710.   #--------------------------------------------------------------------------
  711.   def draw_item(index)
  712.     rect = item_rect(index)
  713.     self.contents.clear_rect(rect)
  714.     skill = @data[index]
  715.     if skill != nil
  716.       rect.width -= 4
  717.       draw_item_name(skill, rect.x, rect.y)
  718.       self.contents.draw_text(rect, skill.sp_cost, 2)
  719.     else
  720.       self.contents.draw_text(rect, Kunase::Skill_SP::BLANK_TEXT, 1)
  721.     end
  722.   end
  723.   #--------------------------------------------------------------------------
  724.   # ● 更新帮助窗口
  725.   #--------------------------------------------------------------------------
  726.   def update_help
  727.     @help_window.set_text(skill == nil ? "" : skill.description)
  728.   end
  729. end
  730. #==============================================================================
  731. # □ Window_BattleSkillList
  732. #------------------------------------------------------------------------------
  733. #   右侧显示技能列表的窗口。
  734. #==============================================================================
  735.  
  736. class Window_BattleSkillList < Window_Selectable
  737.   #--------------------------------------------------------------------------
  738.   # ● 定义实例变量
  739.   #--------------------------------------------------------------------------
  740.   attr_accessor :slot_index               # 技能栏编号
  741.   #--------------------------------------------------------------------------
  742.   # ● 初始化对象
  743.   #--------------------------------------------------------------------------
  744.   def initialize(x, y, width, height, actor)
  745.     super(x, y, width, height)
  746.     @actor = actor
  747.     @slot_index = 0
  748.     @data = []
  749.     self.index = 0
  750.     self.active = false
  751.     refresh
  752.   end
  753.   #--------------------------------------------------------------------------
  754.   # ○ 技能取得
  755.   #--------------------------------------------------------------------------
  756.   def skill
  757.     return @data[self.index]
  758.   end
  759.   #--------------------------------------------------------------------------
  760.   # ○ 最大技能数取得
  761.   #--------------------------------------------------------------------------
  762.   def item_max
  763.     @data ? @data.size : 1
  764.   end
  765.   #--------------------------------------------------------------------------
  766.   # ○ 显示技能列表
  767.   #--------------------------------------------------------------------------
  768.   def make_item_list
  769.     @data = [nil]
  770.     @actor.all_skills.each { |skill|
  771.       @data.push(skill) if selectable?(skill)
  772.     }
  773.   end
  774.   #--------------------------------------------------------------------------
  775.   # ● 刷新
  776.   #--------------------------------------------------------------------------
  777.   def refresh
  778.     make_item_list
  779.     create_contents
  780.     draw_all_items
  781.   end
  782.   #--------------------------------------------------------------------------
  783.   # ○ 技能可否选择判定
  784.   #--------------------------------------------------------------------------
  785.   def selectable?(skill)
  786.     return false if skill == nil
  787.     return true if skill.battle_ok?
  788.     if Kunase::Skill_SP::SHOW_UNUSABLE_SKILL && skill.occasion == 3
  789.       return true
  790.     end
  791.     return false
  792.   end
  793.   #--------------------------------------------------------------------------
  794.   # ○ 绘制项目
  795.   #--------------------------------------------------------------------------
  796.   def draw_item(index)
  797.     rect = item_rect(index)
  798.     self.contents.clear_rect(rect)
  799.     skill = @data[index]
  800.     if skill != nil
  801.       rect.width -= 4
  802.       enabled = @actor.battle_skill_settable?(@slot_index, skill)
  803.       draw_item_name(skill, rect.x, rect.y, enabled)
  804.       self.contents.draw_text(rect, skill.sp_cost, 2)
  805.     else
  806.       self.contents.draw_text(rect, Kunase::Skill_SP::RELEASE_TEXT, 1)
  807.     end
  808.   end
  809.   #--------------------------------------------------------------------------
  810.   # ● 更新帮助窗口
  811.   #--------------------------------------------------------------------------
  812.   def update_help
  813.     @help_window.set_text(skill == nil ? "" : skill.description)
  814.   end
  815. end
  816. #==============================================================================
  817. # □ Scene_SetBattleSkill
  818. #------------------------------------------------------------------------------
  819. #   技能设定的场景。
  820. #==============================================================================
  821.  
  822. class Scene_SetBattleSkill < Scene_MenuBase
  823.   #--------------------------------------------------------------------------
  824.   # ● 初始化
  825.   #--------------------------------------------------------------------------
  826.   def initialize(actor_index = 0, menu_index = 0)
  827.     @actor_index = actor_index
  828.     @menu_index = menu_index
  829.   end
  830.   #--------------------------------------------------------------------------
  831.   # ● 开始处理
  832.   #--------------------------------------------------------------------------
  833.   def start
  834.     super
  835.     create_background
  836.     @actor = $game_party.menu_actor
  837.     create_windows
  838.   end
  839.   #--------------------------------------------------------------------------
  840.   # ○ 创建窗口
  841.   #--------------------------------------------------------------------------
  842.   def create_windows
  843.     @help_window = Window_Help.new
  844.     dy = @help_window.height
  845.     @status_window = Window_BattleSkillStatus.new(0, dy, @actor)
  846.  
  847.     dy += @status_window.height
  848.     @slot_window = Window_BattleSkillSlot.new(
  849.       0,
  850.       dy,
  851.       Graphics.width / 2,
  852.       Graphics.height - dy,
  853.       @actor)
  854.     @slot_window.help_window = @help_window
  855.     @slot_window.active = true
  856.  
  857.     @list_window = Window_BattleSkillList.new(
  858.       Graphics.width - @slot_window.width,
  859.       dy,
  860.       Graphics.width - @slot_window.width,
  861.       Graphics.height - dy,
  862.       @actor)
  863.     @list_window.help_window = @help_window
  864.   end
  865.   #--------------------------------------------------------------------------
  866.   # ● 结束处理
  867.   #--------------------------------------------------------------------------
  868.   def terminate
  869.     super
  870.     @help_window.dispose
  871.     @status_window.dispose
  872.     @slot_window.dispose
  873.     @list_window.dispose
  874.   end
  875.   #--------------------------------------------------------------------------
  876.   # ● 更新
  877.   #--------------------------------------------------------------------------
  878.   def update
  879.     super
  880.     if @slot_window.active
  881.       update_slot
  882.     elsif @list_window.active
  883.       update_list
  884.     end
  885.   end
  886.   #--------------------------------------------------------------------------
  887.   # ○ 刷新窗口
  888.   #--------------------------------------------------------------------------
  889.   def refresh_window
  890.     @status_window.refresh
  891.     @slot_window.refresh
  892.     @list_window.refresh
  893.   end
  894.   #--------------------------------------------------------------------------
  895.   # ○ 左侧窗口更新
  896.   #--------------------------------------------------------------------------
  897.   def update_slot
  898.     if @last_slot_index != @slot_window.index
  899.       @list_window.slot_index = @slot_window.index
  900.       @list_window.refresh
  901.       @last_slot_index = @slot_window.index
  902.     end
  903.     if Input.trigger?(Input::A)
  904.       Sound.play_ok
  905.       @actor.remove_battle_skill(@slot_window.index)
  906.       refresh_window
  907.     elsif Input.trigger?(Input::B)
  908.       Sound.play_cancel
  909.       SceneManager.return
  910.     elsif Input.trigger?(Input::C)
  911.       Sound.play_ok
  912.       # 切换活动窗口
  913.       @slot_window.active = false
  914.       @list_window.active = true
  915.     end
  916.   end
  917.   #--------------------------------------------------------------------------
  918.   # ○ 右侧窗口更新
  919.   #--------------------------------------------------------------------------
  920.   def update_list
  921.     if Input.trigger?(Input::B)
  922.       Sound.play_cancel
  923.       # 切换活动窗口
  924.       @slot_window.active = true
  925.       @list_window.active = false
  926.     elsif Input.trigger?(Input::C)
  927.       skill = @list_window.skill
  928.       # 无法设置的场合
  929.       unless @actor.battle_skill_settable?(@slot_window.index, skill)
  930.         Sound.play_buzzer
  931.         return
  932.       end
  933.       Sound.play_ok
  934.       set_skill(@slot_window.index, skill)
  935.       @slot_window.active = true
  936.       @list_window.active = false
  937.     end
  938.   end
  939.   #--------------------------------------------------------------------------
  940.   # ○ 设置技能
  941.   #--------------------------------------------------------------------------
  942.   def set_skill(index, skill)
  943.     @actor.remove_battle_skill(index)
  944.     if skill != nil
  945.       @actor.set_battle_skill(index, skill)
  946.     end
  947.     refresh_window
  948.   end
  949. end
  950. #==============================================================================
  951. # ■ Window_MenuCommand
  952. #------------------------------------------------------------------------------
  953. #  菜单画面中显示指令的窗口
  954. #==============================================================================
  955.  
  956. class Window_MenuCommand < Window_Command
  957.   alias add_main_commands_kunase add_main_commands
  958.   def add_main_commands
  959.     add_main_commands_kunase
  960.     add_command(Kunase::Skill_SP::VOCAB_MENU_SET_SKILL, :skillsp, main_commands_enabled)
  961.   end
  962. end
  963. #==============================================================================
  964. # ■ Scene_Menu
  965. #------------------------------------------------------------------------------
  966. #  菜单画面
  967. #==============================================================================
  968. class Scene_Menu < Scene_MenuBase
  969.   alias create_command_window_kunase create_command_window
  970.   def create_command_window
  971.     create_command_window_kunase
  972.     @command_window.set_handler(:skillsp,     method(:command_personal))
  973.   end
  974.   def on_personal_ok
  975.     case @command_window.current_symbol
  976.     when :skill
  977.       SceneManager.call(Scene_Skill)
  978.     when :equip
  979.       SceneManager.call(Scene_Equip)
  980.     when :status
  981.       SceneManager.call(Scene_Status)
  982.     when :skillsp
  983.       SceneManager.call(Scene_SetBattleSkill)
  984.       end
  985.     end
  986.   end
  987. #==============================================================================
  988. # ■ Game_Unit
  989. #------------------------------------------------------------------------------
  990. #  管理游戏单位的类。是 Game_Party 和 Game_Troop 类的父类。
  991. #==============================================================================
  992. class Game_Unit
  993.   #--------------------------------------------------------------------------
  994.   # ● 定义实例变量
  995.   #--------------------------------------------------------------------------
  996.   attr_accessor   :in_battle                # 战斗中的标志
  997. end
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2. # ● require Taroxd基础设置
  3. #    使用方法:在技能/状态上备注<passive x>,
  4. #              表示习得该技能/获得该状态等同于装备了x号武器。
  5. #--------------------------------------------------------------------------
  6.  
  7. RPG::Skill.note_i :passive
  8. RPG::State.note_i :passive
  9.  
  10. class Game_Actor < Game_Battler
  11.   #--------------------------------------------------------------------------
  12.   # ● 带有被动技能效果的所有实例
  13.   #--------------------------------------------------------------------------
  14.   def passive_objects
  15.     @skills.map {|id| $data_skills[id] } + states
  16.   end
  17.   #--------------------------------------------------------------------------
  18.   # ● 以数组方式获取拥有特性所有实例
  19.   #--------------------------------------------------------------------------
  20.   def_with(:feature_objects) {|old| old + passive_weapons }
  21.   #--------------------------------------------------------------------------
  22.   # ● 获取普通能力的附加值
  23.   #--------------------------------------------------------------------------
  24.   def_with :param_plus do |old, param_id|
  25.     passive_weapons.sum(old) {|item| item.params[param_id] }
  26.   end
  27.   #--------------------------------------------------------------------------
  28.   # ● 被动技能/状态对应的武器实例构成的数组
  29.   #--------------------------------------------------------------------------
  30.   def passive_weapons
  31.     passive_objects.map {|obj| $data_weapons[obj.passive] }.compact
  32.   end
  33. end


设置被动技能时会无法产生效果,猜测是这两个脚本的原因,但是不知道怎么解决

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

2
发表于 2017-11-16 14:32:54 | 只看该作者
猜测···那你去掉其中一个脚本的时候,另一个脚本有效果吗?
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2931
在线时间
410 小时
注册时间
2017-2-8
帖子
38
3
 楼主| 发表于 2017-11-16 20:07:12 | 只看该作者
chd114 发表于 2017-11-16 14:32
猜测···那你去掉其中一个脚本的时候,另一个脚本有效果吗?

好像是有效的,那估计是别的东西出问题了orz
顺便问一下上面的脚本框要怎么收起来,不太会用这种东西。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-7-7 08:14

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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