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

Project1

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

[RMVA发布] 让技能像装备一样装备吧~技能SP系统

[复制链接]

Lv1.梦旅人 (暗夜天使)

永夜蟄居の玖瀨

梦石
0
星屑
71
在线时间
1018 小时
注册时间
2011-9-5
帖子
2813

开拓者贵宾

跳转到指定楼层
1
发表于 2015-2-9 17:44:42 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 千葉玖濑 于 2015-2-9 17:44 编辑

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

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

技能SP系统.zip (1.44 MB, 下载次数: 568)

评分

参与人数 1星屑 +5 收起 理由
zjd540921697 + 5 精品文章

查看全部评分


Lv4.逐梦者 (版主)

无限の剣制

梦石
0
星屑
9956
在线时间
5019 小时
注册时间
2013-2-28
帖子
5030

开拓者贵宾

2
发表于 2015-2-9 19:35:26 | 只看该作者
妙妙妙,
酒濑大触(๑• . •๑)
待编辑

点评

大触都这样说废渣  发表于 2015-2-9 20:29
回复 支持 反对

使用道具 举报

Lv4.逐梦者

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

开拓者

3
发表于 2015-2-9 20:04:00 | 只看该作者
本帖最后由 chd114 于 2015-2-9 04:36 编辑

我居然是第一个下的

如果明年有整合系统制作赛的话介意我整合一下发出来吗?


发现个BUG,范例里面的第三个角色的治愈如果卸掉了,在战斗中是不会显示出来,但是技能那里还是会显示


这个脚本和https://rpg.blue/thread-373928-1-1.html有冲突,顺序靠前的那个脚本的窗口会无法打开···

点评

如果要不显示也行啊,按照战斗技能的显示方法改写一下Window_SkillList就好了  发表于 2015-2-9 22:15
有冲突http://rm.66rpg.com/thread-373928-1-1.html  发表于 2015-2-9 21:37
这个在技能树里面看不就好了吗···  发表于 2015-2-9 21:10
因为技能页面本来就是告诉你有什么技能而不是装备了什么技能啊。。  发表于 2015-2-9 20:52
0.0好奇怪的设定···这个只应该对被动技能有效才对吧···  发表于 2015-2-9 20:41
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv1.梦旅人 (暗夜天使)

永夜蟄居の玖瀨

梦石
0
星屑
71
在线时间
1018 小时
注册时间
2011-9-5
帖子
2813

开拓者贵宾

4
 楼主| 发表于 2015-2-9 22:09:50 | 只看该作者
因为有些地图上使用的技能就算不装备也得能用吧(*/ω\*)
顺带冲突问题过几天我看下,因为我也需要用那个脚本

回复 支持 反对

使用道具 举报

Lv4.逐梦者

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

开拓者

5
发表于 2015-2-9 22:37:18 | 只看该作者
千葉玖濑 发表于 2015-2-9 05:09
因为有些地图上使用的技能就算不装备也得能用吧(*/ω\*)
顺带冲突问题过几天我看下,因为我也需要用那个脚 ...

我已经解决了
  1. class Scene_Menu < Scene_MenuBase
  2.   def on_personal_ok
  3.     case @command_window.current_symbol
  4.     when :skill
  5.       SceneManager.call(Scene_Skill)
  6.     when :equip
  7.       SceneManager.call(Scene_Equip)
  8.     when :status
  9.       SceneManager.call(Scene_Status)
  10.     when :skillsp
  11.       SceneManager.call(Scene_SetBattleSkill)
  12.     end
  13.   end
  14. end
复制代码
这里的问题,要去掉两个的其中一个,整合成
  1. class Scene_Menu < Scene_MenuBase
  2.   def on_personal_ok
  3.     case @command_window.current_symbol
  4.     when :skill
  5.       SceneManager.call(Scene_Skill)
  6.     when :equip
  7.       SceneManager.call(Scene_Equip)
  8.     when :status
  9.       SceneManager.call(Scene_Status)
  10.     when :skillsp
  11.       SceneManager.call(Scene_SetBattleSkill)
  12.     when :addskill
  13.       SceneManager.call(Scene_AddSkill)
  14.     end
  15.   end
  16. end
复制代码
就可以了

点评

如果加上@data.unshift(nil)则会有2个可以移除技能的选项,第一个显示文字而第二个不显示  发表于 2015-2-10 16:12
卸除技能那个选项的文字不显示了,但是还是可以移除  发表于 2015-2-10 16:10
改那个BattleSkillList,取一下减集  发表于 2015-2-10 15:40
如果我不希望已经装备的技能在右侧技能栏显示又要改掉哪些地方呢?  发表于 2015-2-10 12:45
http://rm.66rpg.com/thread-376386-1-1.html  发表于 2015-2-10 12:31
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
696 小时
注册时间
2011-1-4
帖子
208
6
发表于 2015-2-9 22:49:43 | 只看该作者
本帖最后由 cjlzbb 于 2015-2-9 23:00 编辑

以前有看过个VA的版本,不是6R上的,是日文的。已找到,不知道还有没有前置脚本。给楼主做个参考吧

RUBY 代码复制
  1. #==============================================================================
  2. #  ■スキルメモライズシステム for RGSS3 Ver1.21-β6
  3. # □author kure、星潟
  4. #
  5. # 呼び出し方法 SceneManager.call(Scene_SkillMemorize)
  6. # 
  7. #==============================================================================
  8. # ※追加イベントコマンド(スクリプトに挿入して使用)
  9. #  ・memory_skill_ad(アクターID, スキルID)
  10. #   アクターにメモライズを追加、メモライズ制限無視
  11. #
  12. #  ・memory_skill_ad_l(アクターID, スキルID)
  13. #   アクターにメモライズを追加、メモライズ制限適用
  14. #
  15. #  ・memory_skill_dl(アクターID, スキルID)
  16. #    アクターのメモライズから指定スキルを削除
  17. #
  18. #  ・memory_skill_dl_all(アクターID)
  19. #   アクターのメモライズを初期化
  20. #
  21. #==============================================================================
  22. # ※メモライズ追加設定
  23. #  メモ欄に「<メモライズ不要>」と書かれたスキルはメモライズ無しで使用可
  24. #  アクター毎に個別設定したい場合は「<メモライズ不要 1>」と書いて下さい
  25. #==============================================================================
  26. module KURE
  27.   module SkillMemorize
  28.     #基本設定(変更しない事)
  29.     CHAIN_MEMORIZE = []
  30.  
  31.     #動作設定-------------------------------------------------------------------
  32.     #记忆系统适用范围(0=一直 1=战斗中适用)
  33.     ADOPT_MEMORIZE = 0
  34.     #升级时自动记忆(0=OFF、1=ON)
  35.     AUTO_MEMORIZE = 0
  36.     #升级时不自动记忆的技能类型ID
  37.     NOT_AUTO_MEMORIZE = []
  38.  
  39.     #表示設定-------------------------------------------------------------------
  40.     #是否显示技能类型记忆容量(0=不显示 1=表示)
  41.     #VIEW_MEMORIZE_GAGE = [スキルタイプ1,スキルタイプ2,…]
  42.     VIEW_MEMORIZE_GAGE = [1,1,1]
  43.     #是否显示记忆容量(0=不显示 1=表示)
  44.     VIEW_MEMORIZE_CAPACITY = 1
  45.     #不显示的技能类型
  46.     #NOT_VIEW_SKILLTYPE = [スキルタイプID]
  47.     NOT_VIEW_SKILLTYPE = []
  48.  
  49.     #スキルメモライズ数(記憶数)に関する設定-------------------------------------
  50.     #记忆数不适用的技能类型
  51.     #NOT_ADOPT_SKILL_TYPE = [スキルタイプID]
  52.     NOT_ADOPT_MAX_MEMORY_SKILL_TYPE = []
  53.  
  54.     #基础的各类型技能记忆数
  55.     #BASE_MAX_MEMORY = [スキルタイプ1,スキルタイプ2,…]
  56.     BASE_MAX_MEMORY = [5,5,5]
  57.  
  58.     #每升一级各类型技能记忆数提高
  59.     #Lv_MAX_MEMORY = [スキルタイプ1,スキルタイプ2,…]
  60.     Lv_MAX_MEMORY = [0,0,0]
  61.  
  62.     #各类型技能记忆数的上限(0=无上限)
  63.     #MAX_MEMORY_CAP = [スキルタイプ1,スキルタイプ2,…]
  64.     MAX_MEMORY_CAP = [0,0,0]
  65.  
  66.     #メモライズ容量(記憶容量)に関する設定---------------------------------------
  67.     #记忆容量不适用的技能类型
  68.     #NOT_ADOPT_SKILL_TYPE = [スキルタイプID]
  69.     NOT_ADOPT_MEMORIZE_CAPACITY_SKILL_TYPE = []
  70.  
  71.     #基础的各类型技能记忆容量
  72.     #BASE_MEMORIZE_CAPACITY = [スキルタイプ1,スキルタイプ2,…] 
  73.     BASE_MEMORIZE_CAPACITY = [50,50,50]
  74.  
  75.     #每升一级各类型技能记忆容量提高
  76.     #Lv_MEMORIZE_CAPACITY = [スキルタイプ1,スキルタイプ2,…]
  77.     Lv_MEMORIZE_CAPACITY = [0.1,1.5,1]
  78.  
  79.     #各类型技能记忆容量的上限(0=无上限)
  80.     #MAX_MEMORY_CAP = [スキルタイプ1,スキルタイプ2,…]
  81.     MAX_MEMORIZE_CAP = [0,0,0]
  82.  
  83.     #记忆容量の表示名
  84.     MEMORIZE_CAPACITY_NAME = "记忆力"
  85.  
  86.     #スキルに関する設定---------------------------------------------------------
  87.     #チェインメモライズ
  88.     #CHAIN_MEMORIZE[判定順(0〜数字を入れていってください)] = [追加スキルID,要求スキルID,要求スキルID,…]
  89. #    CHAIN_MEMORIZE[0] = [74,76,77,78]
  90. #    CHAIN_MEMORIZE[1] = [73,96,77,78]
  91. #    CHAIN_MEMORIZE[2] = [72,96,95,78]
  92.   end
  93. end
  94.  
  95. #==============================================================================
  96. # ■ Scene_SkillMemorize
  97. #==============================================================================
  98. class Scene_SkillMemorize < Scene_Skill
  99.   #--------------------------------------------------------------------------
  100.   # ● 開始処理
  101.   #--------------------------------------------------------------------------
  102.   def start
  103.     super
  104.     #保存変数
  105.     @keep_index = -1
  106.  
  107.     create_help_window
  108.     create_command_window
  109.     create_status_window
  110.     create_item_window
  111.     create_pop_window
  112.  
  113.     setup_actor
  114.     setup_window
  115.   end
  116.   #--------------------------------------------------------------------------
  117.   # ● アイテムウィンドウの作成(再定義)
  118.   #--------------------------------------------------------------------------
  119.   def create_item_window
  120.     create_memorized_skill_window
  121.     create_all_skill_window
  122.     @memorized_skill_window.stype_id = @command_window.current_ext
  123.     @learnd_skill_window.stype_id = @command_window.current_ext
  124.   end
  125.   #--------------------------------------------------------------------------
  126.   # ● コマンドウィンドウの作成
  127.   #--------------------------------------------------------------------------
  128.   def create_command_window
  129.     wy = @help_window.height
  130.     @command_window = Window_k_Skillmemorize_SkillCommand.new(0, wy)
  131.     @command_window.set_handler(:skill,    method(:command_skill))
  132.     @command_window.set_handler(:cancel,   method(:return_scene))
  133.     @command_window.set_handler(:pagedown, method(:next_actor))
  134.     @command_window.set_handler(:pageup,   method(:prev_actor))
  135.   end
  136.   #--------------------------------------------------------------------------
  137.   # ● ステータスウィンドウの作成
  138.   #--------------------------------------------------------------------------
  139.   def create_status_window
  140.     y = @help_window.height
  141.     @status_window = Window_k_SkillMemorize_SkillStatus.new(0, y)
  142.     @status_window.opacity = 0
  143.   end
  144.   #--------------------------------------------------------------------------
  145.   # ● 記憶スキルウィンドウの作成
  146.   #--------------------------------------------------------------------------
  147.   def create_memorized_skill_window
  148.     wx = 0
  149.     wy = @status_window.y + @status_window.height
  150.     ww = Graphics.width / 2
  151.     wh = Graphics.height - wy
  152.     @memorized_skill_window = Window_k_SkillMemorize_SkillList.new(wx, wy, ww, wh)
  153.     @memorized_skill_window.set_handler(:ok,     method(:on_memorize_ok))
  154.     @memorized_skill_window.set_handler(:cancel, method(:on_memorize_cancel))
  155.     @memorized_skill_window.deactivate
  156.     @memorized_skill_window.unselect
  157.   end
  158.   #--------------------------------------------------------------------------
  159.   # ● 習得スキルウィンドウの作成
  160.   #--------------------------------------------------------------------------
  161.   def create_all_skill_window
  162.     wx = Graphics.width / 2
  163.     wy = @status_window.y + @status_window.height
  164.     ww = Graphics.width / 2
  165.     wh = Graphics.height - wy
  166.     @learnd_skill_window = Window_k_LearndSkill_SkillList.new(wx, wy, ww, wh)
  167.     @learnd_skill_window.set_handler(:ok,     method(:on_learnd_ok))
  168.     @learnd_skill_window.set_handler(:cancel, method(:on_learnd_cancel))
  169.     @learnd_skill_window.deactivate
  170.     @learnd_skill_window.unselect
  171.   end
  172.   #--------------------------------------------------------------------------
  173.   # ● ポップウィンドウの作成
  174.   #--------------------------------------------------------------------------
  175.   def create_pop_window
  176.     wx = Graphics.width / 4 - 40
  177.     wy = @status_window.y + @status_window.height - 30
  178.     ww = Graphics.width / 2 + 80
  179.     wh = 24 * 2
  180.     @pop_window = Window__k_SkillMemorize_Popup.new(wx,wy,ww,wh)
  181.     @pop_window.z += 100
  182.     @pop_window.back_opacity = 255
  183.     @pop_window.hide
  184.   end
  185.   #--------------------------------------------------------------------------
  186.   # ● アクターのセットアップ
  187.   #--------------------------------------------------------------------------
  188.   def setup_actor
  189.     @command_window.actor = @actor
  190.     @status_window.actor = @actor
  191.     @memorized_skill_window.actor = @actor
  192.     @learnd_skill_window.actor = @actor
  193.     @pop_window.actor = @actor
  194.   end
  195.   #--------------------------------------------------------------------------
  196.   # ● ウィンドウセットアップ
  197.   #--------------------------------------------------------------------------
  198.   def setup_window
  199.     @command_window.help_window = @help_window
  200.     @command_window.memorized_skill_window = @memorized_skill_window
  201.     @command_window.learnd_skill_window = @learnd_skill_window
  202.     @memorized_skill_window.help_window = @help_window
  203.     @learnd_skill_window.help_window = @help_window
  204.     @memorized_skill_window.pop_window = @pop_window
  205.     @command_window.select(0)
  206.   end
  207.   #--------------------------------------------------------------------------
  208.   # ● コマンド[スキル]
  209.   #--------------------------------------------------------------------------
  210.   def command_skill
  211.     @command_window.deactivate
  212.     @memorized_skill_window.activate
  213.     @memorized_skill_window.select(0)
  214.   end
  215.   #--------------------------------------------------------------------------
  216.   # ● 呼び出し元のシーンへ戻る
  217.   #--------------------------------------------------------------------------
  218.   def return_scene
  219.     @actor.set_passive_skills
  220.     @actor.release_unequippable_items
  221.     SceneManager.return
  222.   end
  223.   #--------------------------------------------------------------------------
  224.   # ● 記憶ウィンドウ[決定]
  225.   #--------------------------------------------------------------------------
  226.   def on_memorize_ok
  227.     if @pop_window.visible == true
  228.       @pop_window.hide
  229.       @memorized_skill_window.activate
  230.       return
  231.     end  
  232.     #選択位置を保存
  233.     @keep_memorize_index = @memorized_skill_window.index
  234.  
  235.     if @memorized_skill_window.data[@keep_memorize_index] != nil
  236.       @learnd_skill_window.select_skill = @memorized_skill_window.data[@keep_memorize_index].id
  237.     end
  238.  
  239.     @memorized_skill_window.deactivate
  240.     @learnd_skill_window.refresh
  241.     @learnd_skill_window.activate
  242.     @learnd_skill_window.select(0)
  243.   end
  244.   #--------------------------------------------------------------------------
  245.   # ● 記憶ウィンドウ[キャンセル]
  246.   #--------------------------------------------------------------------------
  247.   def on_memorize_cancel
  248.     set_memorize_to_command
  249.   end
  250.   #--------------------------------------------------------------------------
  251.   # ● 習得ウィンドウ[決定]
  252.   #--------------------------------------------------------------------------
  253.   def on_learnd_ok
  254.     #エクストラ配列をセット
  255.     @actor.chain_memorize_set
  256.  
  257.     #セット前のエクストラ配列を取得
  258.     @before_memorize = @actor.extra_skills.collect {|skill| skill.id}
  259.  
  260.  
  261.     if @learnd_skill_window.data[@learnd_skill_window.index] != nil
  262.       index = @actor.memory_skills.index(@memorized_skill_window.data[@keep_memorize_index])
  263.       @actor.add_memorize_skill(@learnd_skill_window.data[@learnd_skill_window.index].id,index)
  264.     end
  265.     if @memorized_skill_window.data[@keep_memorize_index] != nil
  266.       @actor.delete_memorize_skill(@memorized_skill_window.data[@keep_memorize_index].id)
  267.       max_memorize_cheack
  268.     end
  269.  
  270.     #エクストラ配列をセット
  271.     @actor.chain_memorize_set
  272.     #セット後のエクトラ配列を取得
  273.     @after_memorize = @actor.extra_skills.collect {|skill| skill.id}
  274.  
  275.     @learnd_skill_window.select_skill = 0
  276.     @command_window.refresh
  277.     @learnd_skill_window.refresh
  278.     @memorized_skill_window.refresh
  279.     set_learnd_to_memorize
  280.     view_popup
  281.   end
  282.   #--------------------------------------------------------------------------
  283.   # ● 習得ウィンドウ[キャンセル]
  284.   #--------------------------------------------------------------------------
  285.   def on_learnd_cancel
  286.     set_learnd_to_memorize
  287.   end
  288.   #--------------------------------------------------------------------------
  289.   # ● 次のアクターに切り替え
  290.   #--------------------------------------------------------------------------
  291.   def next_actor
  292.     @actor.set_passive_skills
  293.     @actor.release_unequippable_items
  294.     @actor = $game_party.menu_actor_next
  295.     on_actor_change
  296.   end
  297.   #--------------------------------------------------------------------------
  298.   # ● 前のアクターに切り替え
  299.   #--------------------------------------------------------------------------
  300.   def prev_actor
  301.     @actor.set_passive_skills
  302.     @actor.release_unequippable_items
  303.     @actor = $game_party.menu_actor_prev
  304.     on_actor_change
  305.   end
  306.   #--------------------------------------------------------------------------
  307.   # ● アクターの切り替え
  308.   #--------------------------------------------------------------------------
  309.   def on_actor_change
  310.     setup_actor
  311.     @command_window.select(0)
  312.     @command_window.activate
  313.   end
  314.   #--------------------------------------------------------------------------
  315.   # ● 習得→記録の切り替え
  316.   #--------------------------------------------------------------------------
  317.   def set_learnd_to_memorize
  318.     @learnd_skill_window.deactivate
  319.     @learnd_skill_window.unselect
  320.     @learnd_skill_window.select_skill = 0
  321.     @learnd_skill_window.refresh
  322.     @memorized_skill_window.activate
  323.     @memorized_skill_window.select(@keep_memorize_index)
  324.     @pop_window.hide
  325.   end
  326.   #--------------------------------------------------------------------------
  327.   # ● 記録→コマンドの切り替え
  328.   #--------------------------------------------------------------------------
  329.   def set_memorize_to_command
  330.     @memorized_skill_window.deactivate
  331.     @memorized_skill_window.select(0)
  332.     @memorized_skill_window.unselect
  333.     @command_window.activate
  334.     @command_window.select(0)
  335.     @pop_window.hide
  336.   end
  337.   #--------------------------------------------------------------------------
  338.   # ● 記録容量確認
  339.   #--------------------------------------------------------------------------
  340.   def max_memorize_cheack
  341.     unless KURE::SkillMemorize::NOT_ADOPT_MAX_MEMORY_SKILL_TYPE.include?(@command_window.current_ext)
  342.       if @memorized_skill_window.data.size > @actor.max_memorize[@command_window.current_ext - 1]
  343.         for i in @actor.max_memorize[@command_window.current_ext - 1]..@memorized_skill_window.data.size - 1
  344.           @actor.delete_memorize_skill(@memorized_skill_window.data[i].id)
  345.         end
  346.       end
  347.     end
  348.   end
  349.   #--------------------------------------------------------------------------
  350.   # ● ポップアップを表示
  351.   #--------------------------------------------------------------------------
  352.   def view_popup
  353.     flag = 0
  354.  
  355.     if (@before_memorize - @after_memorize).size > 0
  356.       @pop_window.delete_skill = (@before_memorize - @after_memorize)
  357.       flag = 1
  358.     else
  359.       @pop_window.delete_skill = []
  360.     end
  361.  
  362.     if (@after_memorize - @before_memorize).size > 0
  363.       @pop_window.add_skill = (@after_memorize - @before_memorize)
  364.       flag = 1
  365.     else
  366.       @pop_window.add_skill = []
  367.     end
  368.  
  369.     if flag == 1
  370.       @pop_window.refresh
  371.       Audio.se_play("Audio/SE/Chime2")
  372.       @pop_window.show      
  373.     end
  374.   end
  375. end
  376.  
  377. #==============================================================================
  378. # ■ Game_Interpreter(追加定義)
  379. #==============================================================================
  380. class Game_Interpreter
  381.   #--------------------------------------------------------------------------
  382.   # ● メモライズ追加(記憶容量無制限)(追加定義)
  383.   #--------------------------------------------------------------------------
  384.   def memory_skill_ad(index, s_id)
  385.     $game_actors[index].add_memorize_skill_ir(s_id, false)
  386.   end
  387.   #--------------------------------------------------------------------------
  388.   # ● メモライズ追加(記憶容量制限)(追加定義)
  389.   #--------------------------------------------------------------------------
  390.   def memory_skill_ad_l(index, s_id)
  391.     $game_actors[index].add_memorize_skill_ir(s_id, true)
  392.   end
  393.   #--------------------------------------------------------------------------
  394.   # ● メモライズ削除(記憶容量制限)(追加定義)
  395.   #--------------------------------------------------------------------------
  396.   def memory_skill_dl(index, s_id)
  397.     $game_actors[index].delete_memorize_skill(s_id)
  398.   end
  399.   #--------------------------------------------------------------------------
  400.   # ● メモライズ初期化(追加定義)
  401.   #--------------------------------------------------------------------------
  402.   def memory_skill_dl_all(index)
  403.     $game_actors[index].memory_skills_dl
  404.   end
  405. end
  406.  
  407. #==============================================================================
  408. # ■ Window_SkillList(再定義)
  409. #==============================================================================
  410. class Window_SkillList < Window_Selectable
  411.   #--------------------------------------------------------------------------
  412.   # ● アイテム名の描画(再定義)
  413.   #     enabled : 有効フラグ。false のとき半透明で描画
  414.   #--------------------------------------------------------------------------
  415.   def draw_item_name(item, x, y, enabled = true, width = 172)
  416.     return unless item
  417.     draw_icon(item.icon_index, x, y, enabled)
  418.  
  419.     if @actor.extra_skills.include?(item)
  420.       change_color(crisis_color, enabled)
  421.     else
  422.       change_color(normal_color, enabled)
  423.     end
  424.     draw_text(x + 24, y, width, line_height, item.name)
  425.   end
  426. end
  427.  
  428. #==============================================================================
  429. # ■ Game_Actor(再定義)
  430. #==============================================================================
  431. class Game_Actor < Game_Battler
  432.   #--------------------------------------------------------------------------
  433.   # ● 記憶スキルオブジェクトの配列取得(追加定義)
  434.   #--------------------------------------------------------------------------
  435.   def memory_skills
  436.     fix_memorys
  437.     @memory_skills.collect {|id| $data_skills[id] }
  438.   end
  439.   #--------------------------------------------------------------------------
  440.   # ● 記憶オブジェクト修正(追加定義)
  441.   #--------------------------------------------------------------------------
  442.   def fix_memorys
  443.     for i in [email]0..@memory_skills.size[/email] - 1
  444.       if @skills.include?(@memory_skills[i]) == false
  445.         if @sub_class_skills.include?(@memory_skills[i]) == false
  446.           if added_skills.include?(@memory_skills[i]) == false
  447.             @memory_skills[i] = nil
  448.           end
  449.         end
  450.       end
  451.     end
  452.     @memory_skills.compact!
  453.     chain_memorize_set
  454.   end
  455.   #--------------------------------------------------------------------------
  456.   # ● チェインメモライズのセット(追加定義)
  457.   #--------------------------------------------------------------------------
  458.   def chain_memorize_set
  459.     extra_skills_dl
  460.     return if KURE::SkillMemorize::CHAIN_MEMORIZE.size == 0
  461.  
  462.     for i in 0..KURE::SkillMemorize::CHAIN_MEMORIZE.size - 1
  463.       #判定フラグ
  464.       add_flag = 0
  465.       skill = 0
  466.  
  467.       if KURE::SkillMemorize::CHAIN_MEMORIZE[i].size >= 2
  468.         for j in 1..KURE::SkillMemorize::CHAIN_MEMORIZE[i].size - 1
  469.           if @memory_skills.include?(KURE::SkillMemorize::CHAIN_MEMORIZE[i][j]) == true
  470.           else
  471.             add_flag = 1
  472.           end
  473.         end
  474.       end
  475.  
  476.       if add_flag == 0
  477.         set_extra_skill(KURE::SkillMemorize::CHAIN_MEMORIZE[i][0])
  478.       end
  479.     end
  480.   end
  481.   #--------------------------------------------------------------------------
  482.   # ● エクストラメモライズの記憶済み判定(追加定義)
  483.   #--------------------------------------------------------------------------
  484.   def extra_skill_memorize?(skill)
  485.     skill.is_a?(RPG::Skill) && @extra_skills.include?(skill.id)
  486.   end
  487.   #--------------------------------------------------------------------------
  488.   # ● エクストラメモライズ初期化処理(追加定義)
  489.   #--------------------------------------------------------------------------
  490.   def extra_skills_dl
  491.     @extra_skills = []
  492.   end
  493.   #--------------------------------------------------------------------------
  494.   # ● エクストラメモライズの記憶設定(追加定義)
  495.   #--------------------------------------------------------------------------
  496.   def set_extra_skill(skill_id)
  497.     unless skill_memorize?($data_skills[skill_id])
  498.       @extra_skills.push(skill_id)
  499.     end
  500.   end
  501.   #--------------------------------------------------------------------------
  502.   # ● エクストラメモライズオブジェクトの配列取得(追加定義)
  503.   #--------------------------------------------------------------------------
  504.   def extra_skills
  505.     @extra_skills.collect {|id| $data_skills[id] }
  506.   end
  507.   #--------------------------------------------------------------------------
  508.   # ● スキルの記憶済み判定(追加定義)
  509.   #--------------------------------------------------------------------------
  510.   def skill_memorize?(skill)
  511.     skill.is_a?(RPG::Skill) && @memory_skills.include?(skill.id)
  512.   end
  513.   #--------------------------------------------------------------------------
  514.   # ● スキルを記憶する(追加定義)
  515.   #--------------------------------------------------------------------------
  516.   def add_memorize_skill(skill_id,index)
  517.     unless skill_memorize?($data_skills[skill_id])
  518.       if index != nil
  519.         @memory_skills[index] = skill_id
  520.         @memory_skills.compact!
  521.       else
  522.         @memory_skills.push(skill_id)
  523.       end
  524.     end
  525.   end
  526.   #--------------------------------------------------------------------------
  527.   # ● スキル記憶を削除する(追加定義)
  528.   #--------------------------------------------------------------------------
  529.   def delete_memorize_skill(skill_id)
  530.     @memory_skills.delete(skill_id)
  531.   end  
  532.   #--------------------------------------------------------------------------
  533.   # ● 最大数記憶数(追加定義)
  534.   #--------------------------------------------------------------------------
  535.   def max_memorize
  536.     #基礎値配列を取得
  537.     memorize = Marshal.load(Marshal.dump(KURE::SkillMemorize::BASE_MAX_MEMORY))
  538.  
  539.     #スキルタイプごとの職業補正を取得
  540.     for i in 0..memorize.size - 1
  541.       if self.class.max_memorize_revise[i] != nil
  542.         memorize[i] = memorize[i] + self.class.max_memorize_revise[i]
  543.       end
  544.     end
  545.  
  546.     #Lv補正を加算
  547.     for j in 0..memorize.size - 1
  548.       memorize[j] = memorize[j] + (KURE::SkillMemorize::Lv_MAX_MEMORY[j] * @level).to_i
  549.     end   
  550.  
  551.     #スキルタイプごとの変数補正を取得
  552.     for i in 0..memorize.size - 1
  553.       if self.class.add_max_memorize_var[i] != nil
  554.         memorize[i] = memorize[i] + $game_variables[self.class.add_max_memorize_var[i]]
  555.       end
  556.     end
  557.  
  558.     #装備補正を加算
  559.     if KURE::BaseScript::USE_ExEquip == 1
  560.       for k in 0..memorize.size - 1
  561.         memorize[k] += all_gain_max_memorize
  562.       end
  563.     end
  564.  
  565.     #上限値設定
  566.     for j in 0..memorize.size - 1
  567.       memorize[j] = [memorize[j],KURE::SkillMemorize::MAX_MEMORY_CAP[j]].min if KURE::SkillMemorize::MAX_MEMORY_CAP[j] != 0
  568.       if KURE::SkillMemorize::NOT_ADOPT_MAX_MEMORY_SKILL_TYPE.include?(j+1)
  569.         memorize[j] += 999999
  570.       end
  571.     end
  572.  
  573.     return memorize
  574.   end
  575.   #--------------------------------------------------------------------------
  576.   # ● メモライズ容量最大値(追加定義)
  577.   #--------------------------------------------------------------------------
  578.   def max_memorize_capacity
  579.     #基礎値配列を取得
  580.     capacity = Marshal.load(Marshal.dump(KURE::SkillMemorize::BASE_MEMORIZE_CAPACITY))
  581.  
  582.     #スキルタイプごとの職業補正を取得
  583.     for i in 0..capacity.size - 1
  584.       if self.class.memorize_capacity_revise[i] != nil
  585.         capacity[i] = capacity[i] + self.class.memorize_capacity_revise[i]
  586.       end
  587.     end
  588.  
  589.     #スキルタイプごとの変数補正を取得
  590.     for i in 0..capacity.size - 1
  591.       if self.class.add_max_memorize_cap_var[i] != nil
  592.         capacity[i] = capacity[i] + $game_variables[self.class.add_max_memorize_cap_var[i]]
  593.       end
  594.     end
  595.  
  596.     #Lv補正を加算
  597.     for j in 0..capacity.size - 1
  598.       capacity[j] = capacity[j] + (KURE::SkillMemorize::Lv_MEMORIZE_CAPACITY[j] * @level).to_i
  599.     end   
  600.  
  601.     #装備補正を加算
  602.     if KURE::BaseScript::USE_ExEquip == 1
  603.       for k in 0..capacity.size - 1
  604.         capacity[k] += all_gain_memorize
  605.       end
  606.     end
  607.  
  608.     #上限値設定
  609.     for j in 0..capacity.size - 1
  610.       capacity[j] = [capacity[j],KURE::SkillMemorize::MAX_MEMORIZE_CAP[j]].min if KURE::SkillMemorize::MAX_MEMORIZE_CAP[j] != 0
  611.       if KURE::SkillMemorize::NOT_ADOPT_MEMORIZE_CAPACITY_SKILL_TYPE.include?(j+1)
  612.         capacity[j] += 999999
  613.       end
  614.     end     
  615.  
  616.     return capacity
  617.   end
  618.   #--------------------------------------------------------------------------
  619.   # ● メモライズ容量(追加定義)
  620.   #--------------------------------------------------------------------------
  621.   def memorize_capacity(stype_id)
  622.     fix_memorys
  623.     capacity = 0
  624.     for i in [email]0..@memory_skills.size[/email] - 1
  625.       if $data_skills[@memory_skills[i]].stype_id  == stype_id
  626.         capacity = capacity + $data_skills[@memory_skills[i]].memorize_capacity
  627.       end
  628.     end
  629.     return capacity
  630.   end
  631.   #--------------------------------------------------------------------------
  632.   # ● イベントコマンド用メモライズ追加処理(追加定義)
  633.   #--------------------------------------------------------------------------
  634.   def add_memorize_skill_ir(skill_id, limit)
  635.     for i in @memory_skills
  636.       delete_memorize_skill(i) unless skills.include?($data_skills[i])
  637.     end
  638.     skill = $data_skills[skill_id]
  639.     return if unselect_skill?(skill.id)
  640.     return if skill_memorize?(skill)
  641.     value = 0
  642.     value2 = 0
  643.     if limit == true
  644.       for i in @memory_skills
  645.         value += 1 if $data_skills[i].stype_id == skill.stype_id
  646.       end
  647.       unless KURE::SkillMemorize::NOT_ADOPT_MAX_MEMORY_SKILL_TYPE.include?(skill.stype_id)
  648.         return if max_memorize[skill.stype_id - 1] <= value
  649.       end
  650.  
  651.       for i in @memory_skills
  652.         value2 = memorize_capacity(skill.stype_id)
  653.       end
  654.       return if max_memorize_capacity[skill.stype_id - 1] < skill.memorize_capacity + value2
  655.  
  656.     end
  657.     @memory_skills.push(skill_id)
  658.   end
  659.   #--------------------------------------------------------------------------
  660.   # ● イベントコマンド用メモライズ初期化処理(追加定義)
  661.   #--------------------------------------------------------------------------
  662.   def memory_skills_dl
  663.     @memory_skills = []
  664.   end
  665.  
  666. end
  667.  
  668. #==============================================================================
  669. # ■ Window_k_Skillmemorize_SkillCommand(新規)
  670. #==============================================================================
  671. class Window_k_Skillmemorize_SkillCommand < Window_Command
  672.   attr_accessor :actor
  673.   attr_accessor :memorized_skill_window
  674.   attr_accessor :learnd_skill_window
  675.   #--------------------------------------------------------------------------
  676.   # ● 表示行数の取得
  677.   #--------------------------------------------------------------------------
  678.   def visible_line_number
  679.     4
  680.   end
  681.   #--------------------------------------------------------------------------
  682.   # ● ウィンドウ幅の取得
  683.   #--------------------------------------------------------------------------
  684.   def window_width
  685.     return Graphics.width
  686.   end
  687.   #--------------------------------------------------------------------------
  688.   # ● アクターの設定
  689.   #--------------------------------------------------------------------------
  690.   def actor=(actor)
  691.     return if @actor == actor
  692.     @actor = actor
  693.     refresh
  694.   end
  695.   #--------------------------------------------------------------------------
  696.   # ● カーソル位置の設定
  697.   #--------------------------------------------------------------------------
  698.   def index=(index)
  699.     @index = index
  700.     update_cursor
  701.     call_update_help
  702.  
  703.     return if @index < 0
  704.     @memorized_skill_window.stype_id = current_ext if @memorized_skill_window
  705.     @learnd_skill_window.stype_id = current_ext if @learnd_skill_window
  706.   end
  707.   #--------------------------------------------------------------------------
  708.   # ● 全項目の描画
  709.   #--------------------------------------------------------------------------
  710.   def draw_all_items
  711.  
  712.     item_max.times {|i| draw_item(i) }
  713.  
  714.     draw_actor_memorize
  715.   end
  716.   #--------------------------------------------------------------------------
  717.   # ● 項目を描画する矩形の取得
  718.   #--------------------------------------------------------------------------
  719.   def item_rect(index)
  720.     rect = Rect.new
  721.     rect.width = item_width - 270
  722.     rect.height = item_height
  723.     rect.x = index % col_max * (item_width + spacing) + 270
  724.     rect.y = index / col_max * item_height
  725.     rect
  726.   end
  727.   #--------------------------------------------------------------------------
  728.   # ● 記憶容量の描画
  729.   #--------------------------------------------------------------------------
  730.   def draw_actor_memorize
  731.     x = Graphics.width - 160
  732.     i = 0
  733.     return if @actor == nil
  734.     #スキルタイプの配列を作成
  735.     stype_list = Marshal.load(Marshal.dump(@actor.added_skill_types))
  736.  
  737.     stype_list.sort!
  738.     counter = 0
  739.     for i in 0..stype_list.size - 1
  740.       skill_type = stype_list[i]
  741.  
  742.       #表示しないスキルタイプは扱わない
  743.       unless KURE::SkillMemorize::NOT_VIEW_SKILLTYPE.include?(skill_type)
  744.  
  745.       #容量表示をするのであれば描画する。
  746.       if KURE::SkillMemorize::VIEW_MEMORIZE_GAGE[skill_type - 1] == 1
  747.         memory = @actor.memorize_capacity(skill_type)
  748.         memory_max = @actor.max_memorize_capacity[skill_type - 1]
  749.         memorize_rate = memory.to_f / memory_max
  750.  
  751.         if memory_max > 999999
  752.           memory_max = "∞"
  753.           memorize_rate = 0
  754.         end
  755.  
  756.         draw_gauge(x, line_height * counter, 124, memorize_rate, tp_gauge_color1, tp_gauge_color2)
  757.         change_color(system_color)
  758.         draw_text(x, line_height * counter, 30, line_height, KURE::SkillMemorize::MEMORIZE_CAPACITY_NAME)
  759.         draw_current_and_max_values(x, line_height * counter, 124, memory, memory_max,
  760.         mp_color(actor), normal_color)
  761.       end
  762.         counter += 1
  763.       end
  764.     end
  765.   end   
  766.   #--------------------------------------------------------------------------
  767.   # ● 選択項目の拡張データを取得
  768.   #--------------------------------------------------------------------------
  769.   def current_ext
  770.     current_data ? current_data[:ext] : nil
  771.   end
  772.   #--------------------------------------------------------------------------
  773.   # ● コマンドリストの作成
  774.   #--------------------------------------------------------------------------
  775.   def make_command_list
  776.     return unless @actor
  777.     @actor.added_skill_types.sort.each do |stype_id|
  778.       name = $data_system.skill_types[stype_id]
  779.       if KURE::SkillMemorize::NOT_VIEW_SKILLTYPE.include?(stype_id)
  780.       else
  781.         add_command(name, :skill, true, stype_id)
  782.       end
  783.     end
  784.   end
  785. end
  786.  
  787. #==============================================================================
  788. # ■ Window_k_SkillMemorize_SkillList(新規)
  789. #==============================================================================
  790. class Window_k_SkillMemorize_SkillList < Window_Command
  791.   attr_reader :data
  792.   attr_accessor :pop_window
  793.   #--------------------------------------------------------------------------
  794.   # ● オブジェクト初期化
  795.   #--------------------------------------------------------------------------
  796.   def initialize(x, y,width,height)
  797.     @stype_id = 0
  798.     @width = width
  799.     @height = height
  800.     super(x, y)
  801.   end
  802.   #--------------------------------------------------------------------------
  803.   # ● ウィンドウ幅の取得
  804.   #--------------------------------------------------------------------------
  805.   def window_width
  806.     return @width
  807.   end
  808.   #--------------------------------------------------------------------------
  809.   # ● ウィンドウ高さの取得
  810.   #--------------------------------------------------------------------------
  811.   def window_height
  812.     return @height
  813.   end
  814.   #--------------------------------------------------------------------------
  815.   # ● スキルの取得
  816.   #--------------------------------------------------------------------------
  817.   def item
  818.     @data && index >= 0 ? @data[index] : nil
  819.   end
  820.   #--------------------------------------------------------------------------
  821.   # ● カーソルを下に移動
  822.   #--------------------------------------------------------------------------
  823.   def cursor_down(wrap = false)
  824.     if @pop_window.visible == true
  825.       @pop_window.hide
  826.       return
  827.     end
  828.  
  829.     if index < item_max - col_max || (wrap && col_max == 1)
  830.       select((index + col_max) % item_max)
  831.     end
  832.   end
  833.   #--------------------------------------------------------------------------
  834.   # ● カーソルを上に移動
  835.   #--------------------------------------------------------------------------
  836.   def cursor_up(wrap = false)
  837.     if @pop_window.visible == true
  838.       @pop_window.hide
  839.       return
  840.     end
  841.  
  842.     if index >= col_max || (wrap && col_max == 1)
  843.       select((index - col_max + item_max) % item_max)
  844.     end
  845.   end
  846.   #--------------------------------------------------------------------------
  847.   # ● アクターの設定
  848.   #--------------------------------------------------------------------------
  849.   def actor=(actor)
  850.     return if @actor == actor
  851.     @actor = actor
  852.     refresh
  853.   end
  854.   #--------------------------------------------------------------------------
  855.   # ● スキルタイプ ID の設定
  856.   #--------------------------------------------------------------------------
  857.   def stype_id=(stype_id)
  858.     return if @stype_id == stype_id
  859.     @stype_id = stype_id
  860.     refresh
  861.   end
  862.   #--------------------------------------------------------------------------
  863.   # ● 項目を描画する矩形の取得(テキスト用)
  864.   #--------------------------------------------------------------------------
  865.   def item_rect_for_text(index)
  866.     rect = item_rect(index)
  867.     rect.x += 28
  868.     rect.width -= 8
  869.     rect
  870.   end
  871.   #--------------------------------------------------------------------------
  872.   # ● 全項目の描画
  873.   #--------------------------------------------------------------------------
  874.   def draw_all_items
  875.     item_max.times {|i| draw_item(i) }
  876.     return if @stype_id == nil
  877.     if @stype_id != 0
  878.       if KURE::SkillMemorize::NOT_ADOPT_MAX_MEMORY_SKILL_TYPE.include?(@stype_id)
  879.         (@data.size + 1).times {|i| draw_number(i) } if @actor != nil
  880.       else
  881.         @actor.max_memorize[@stype_id - 1].times {|i| draw_number(i) } if @actor != nil
  882.       end
  883.     end
  884.   end
  885.   #--------------------------------------------------------------------------
  886.   # ● 項目の描画
  887.   #--------------------------------------------------------------------------
  888.   def draw_item(index)
  889.     skill = @data[index]
  890.     if skill
  891.       rect = item_rect(index)
  892.       rect.width -= 4
  893.       draw_item_name(skill, rect.x + 30, rect.y)
  894.  
  895.       if KURE::SkillMemorize::VIEW_MEMORIZE_CAPACITY == 1
  896.         change_color(power_down_color)
  897.         draw_text(rect.width - 30, line_height * index, 30, line_height, skill.memorize_capacity, 2) if skill.memorize_capacity != 0
  898.       end
  899.  
  900.       change_color(normal_color)
  901.     else
  902.       rect = item_rect(index)
  903.       rect.width -= 4
  904.       change_color(normal_color, command_enabled?(index))
  905.       draw_text(item_rect_for_text(index), command_name(index), alignment)
  906.     end
  907.   end
  908.   #--------------------------------------------------------------------------
  909.   # ● 番号の描画
  910.   #--------------------------------------------------------------------------
  911.   def draw_number(index)
  912.     draw_text(0, line_height * index, 24, line_height, index + 1, 2)
  913.   end
  914.   #--------------------------------------------------------------------------
  915.   # ● 項目を描画する矩形の取得(テキスト用)
  916.   #--------------------------------------------------------------------------
  917.   def item_rect_for_text(index)
  918.     rect = item_rect(index)
  919.     rect.x += 54
  920.     rect.width -= 8
  921.     rect
  922.   end
  923.   #--------------------------------------------------------------------------
  924.   # ● ヘルプテキスト更新
  925.   #--------------------------------------------------------------------------
  926.   def update_help
  927.     @help_window.set_item(item)
  928.   end
  929.   #--------------------------------------------------------------------------
  930.   # ● スキルをリストに含めるかどうか
  931.   #--------------------------------------------------------------------------
  932.   def include?(item)
  933.     item && item.stype_id == @stype_id
  934.   end
  935.   #--------------------------------------------------------------------------
  936.   # ● 記録最大数
  937.   #--------------------------------------------------------------------------
  938.   def max_select
  939.     return @data.size if KURE::SkillMemorize::NOT_ADOPT_MAX_MEMORY_SKILL_TYPE.include?(@stype_id)
  940.     return 0 if @actor == nil
  941.     return 0 if @stype_id == nil
  942.  
  943.     if @actor.max_memorize[@stype_id - 1] > @data.size
  944.       return @data.size
  945.     else
  946.       return @actor.max_memorize[@stype_id - 1] - 1
  947.     end
  948.   end  
  949.   #--------------------------------------------------------------------------
  950.   # ● コマンドリストの作成
  951.   #--------------------------------------------------------------------------
  952.   def make_command_list
  953.     @data = @actor ? @actor.memory_skills.select {|skill| include?(skill) } : []
  954.  
  955.     for i in 0..max_select
  956.       if @data[i] != nil
  957.         add_command(@data[i].name, :ok)
  958.       else
  959.         add_command("", :ok)      
  960.       end
  961.     end
  962.  
  963.   end
  964. end
  965.  
  966. #==============================================================================
  967. # ■ Window_k_LearndSkill_SkillList(新規)
  968. #==============================================================================
  969. class Window_k_LearndSkill_SkillList < Window_Command
  970.   attr_reader :data
  971.   attr_accessor :select_skill
  972.   #--------------------------------------------------------------------------
  973.   # ● オブジェクト初期化
  974.   #--------------------------------------------------------------------------
  975.   def initialize(x, y,width,height)
  976.     @select_skill = 0
  977.     @stype_id = 0
  978.     @width = width
  979.     @height = height
  980.     super(x, y)
  981.   end
  982.   #--------------------------------------------------------------------------
  983.   # ● ウィンドウ幅の取得
  984.   #--------------------------------------------------------------------------
  985.   def window_width
  986.     return @width
  987.   end
  988.   #--------------------------------------------------------------------------
  989.   # ● ウィンドウ高さの取得
  990.   #--------------------------------------------------------------------------
  991.   def window_height
  992.     return @height
  993.   end
  994.   #--------------------------------------------------------------------------
  995.   # ● スキルの取得
  996.   #--------------------------------------------------------------------------
  997.   def item
  998.     @data && index >= 0 ? @data[index] : nil
  999.   end
  1000.   #--------------------------------------------------------------------------
  1001.   # ● アクターの設定
  1002.   #--------------------------------------------------------------------------
  1003.   def actor=(actor)
  1004.     return if @actor == actor
  1005.     @actor = actor
  1006.     refresh
  1007.   end
  1008.   #--------------------------------------------------------------------------
  1009.   # ● スキルタイプ ID の設定
  1010.   #--------------------------------------------------------------------------
  1011.   def stype_id=(stype_id)
  1012.     return if @stype_id == stype_id
  1013.     @stype_id = stype_id
  1014.     refresh
  1015.   end
  1016.   #--------------------------------------------------------------------------
  1017.   # ● 項目の描画
  1018.   #--------------------------------------------------------------------------
  1019.   def draw_item(index)
  1020.     skill = @data[index]
  1021.     if skill
  1022.       rect = item_rect(index)
  1023.       rect.width -= 4
  1024.       draw_item_name(skill, rect.x, rect.y, command_enabled?(index))
  1025.  
  1026.       if KURE::SkillMemorize::VIEW_MEMORIZE_CAPACITY == 1
  1027.         change_color(power_down_color)
  1028.         draw_text(rect.width - 30, line_height * index, 30, line_height, skill.memorize_capacity, 2) if skill.memorize_capacity != 0
  1029.       end
  1030.  
  1031.       change_color(normal_color)
  1032.     else
  1033.       change_color(normal_color, command_enabled?(index))
  1034.       draw_text(item_rect_for_text(index), command_name(index), alignment)
  1035.     end
  1036.   end
  1037.   #--------------------------------------------------------------------------
  1038.   # ● 項目を描画する矩形の取得(テキスト用)
  1039.   #--------------------------------------------------------------------------
  1040.   def item_rect_for_text(index)
  1041.     rect = item_rect(index)
  1042.     rect.x += 24
  1043.     rect.width -= 8
  1044.     rect
  1045.   end
  1046.   #--------------------------------------------------------------------------
  1047.   # ● ヘルプテキスト更新
  1048.   #--------------------------------------------------------------------------
  1049.   def update_help
  1050.     @help_window.set_item(item)
  1051.   end
  1052.   #--------------------------------------------------------------------------
  1053.   # ● スキルをリストに含めるかどうか
  1054.   #--------------------------------------------------------------------------
  1055.   def include?(item)
  1056.     return false if @actor.extra_skill_memorize?(item)
  1057.     return false if item.stype_id != @stype_id or @actor.unselect_skill?(item.id)
  1058.     if item.note.include?("<无需记忆>")
  1059.       return true
  1060.     else
  1061.       memo = item.note.scan(/<无需记忆\s?(\d+)>/)
  1062.       memo = memo.flatten
  1063.       if memo != nil and not memo.empty?
  1064.         return true if memo.include?(@actor_id)
  1065.       end
  1066.       return true
  1067.     end
  1068.   end
  1069.   #--------------------------------------------------------------------------
  1070.   # ● コマンドリストの作成
  1071.   #--------------------------------------------------------------------------
  1072.   def make_command_list
  1073.     return if @stype_id == nil
  1074.     #データ配列を作成
  1075.     @data = @actor ? @actor.skills.select {|skill| include?(skill) } : []
  1076.     memory = 0
  1077.     memory_max = 0
  1078.     select = 0
  1079.     #メモライズ容量判定用の変数を設定
  1080.     if @stype_id > 0
  1081.       memory = @actor.memorize_capacity(@stype_id)
  1082.       memory_max = @actor.max_memorize_capacity[@stype_id - 1]
  1083.     end
  1084.  
  1085.     if @select_skill != 0
  1086.       select = $data_skills[@select_skill].memorize_capacity
  1087.     end
  1088.  
  1089.     if @data.size != 0
  1090.       for i in [email]0..@data.size[/email] - 1
  1091.         flag = 0
  1092.         #共存不可メモライズのチェック
  1093.         jumble_list = @data[i].not_jumble_memorize
  1094.         if jumble_list != ([] or empty?)
  1095.           for skill in 0..jumble_list.size - 1
  1096.             if @actor.skill_memorize?($data_skills[jumble_list[skill]])
  1097.               add_command(@data[i].name, :ok ,false)
  1098.               flag = 1
  1099.             end
  1100.           end
  1101.         end
  1102.  
  1103.         if flag == 0
  1104.           #メモリー合計数を計算
  1105.           totalmemory = memory + @data[i].memorize_capacity
  1106.           if @actor.skill_memorize?(@data[i])
  1107.             add_command(@data[i].name, :ok ,false)
  1108.           else
  1109.             if totalmemory > memory_max + select
  1110.               add_command(@data[i].name, :ok ,false)
  1111.             else
  1112.               add_command(@data[i].name, :ok ,true)
  1113.             end
  1114.           end
  1115.         end
  1116.  
  1117.       end
  1118.     end
  1119.  
  1120.     add_command("解除", :ok)
  1121.   end
  1122. end
  1123.  
  1124. #==============================================================================
  1125. # ■ Window_k_SkillMemorize_SkillStatus
  1126. #==============================================================================
  1127. class Window_k_SkillMemorize_SkillStatus < Window_Base
  1128.   #--------------------------------------------------------------------------
  1129.   # ● オブジェクト初期化
  1130.   #--------------------------------------------------------------------------
  1131.   def initialize(x, y)
  1132.     super(x, y, window_width, fitting_height(4))
  1133.     @actor = nil
  1134.   end
  1135.   #--------------------------------------------------------------------------
  1136.   # ● ウィンドウ幅の取得
  1137.   #--------------------------------------------------------------------------
  1138.   def window_width
  1139.     280
  1140.   end
  1141.   #--------------------------------------------------------------------------
  1142.   # ● アクターの設定
  1143.   #--------------------------------------------------------------------------
  1144.   def actor=(actor)
  1145.     return if @actor == actor
  1146.     @actor = actor
  1147.     refresh
  1148.   end
  1149.   #--------------------------------------------------------------------------
  1150.   # ● リフレッシュ
  1151.   #--------------------------------------------------------------------------
  1152.   def refresh
  1153.     contents.clear
  1154.     return unless @actor
  1155.     draw_actor_face(@actor, 0, 0)
  1156.     draw_actor_name(@actor, 108, 0)
  1157.     draw_actor_level(@actor, 108, line_height * 1)
  1158.     draw_actor_class(@actor, 108, line_height * 2)
  1159.   end
  1160. end
  1161.  
  1162. #==============================================================================
  1163. # ■ Window__k_SkillMemorize_Popup
  1164. #==============================================================================
  1165. class Window__k_SkillMemorize_Popup < Window_Base
  1166.   attr_accessor :add_skill
  1167.   attr_accessor :delete_skill
  1168.   #--------------------------------------------------------------------------
  1169.   # ● アクターの設定
  1170.   #--------------------------------------------------------------------------
  1171.   def actor=(actor)
  1172.     return if @actor == actor
  1173.     @actor = actor
  1174.     refresh
  1175.   end
  1176.   #--------------------------------------------------------------------------
  1177.   # ● リフレッシュ
  1178.   #--------------------------------------------------------------------------
  1179.   def refresh
  1180.     @add_skill = [] if @add_skill == nil
  1181.     @delete_skill = [] if @delete_skill == nil
  1182.  
  1183.     self.height = line_height * (4 + @add_skill.size + @delete_skill.size)
  1184.     self.height += line_height if @add_skill.size == 0
  1185.     self.height += line_height if @delete_skill.size == 0
  1186.     create_contents
  1187.     contents.clear
  1188.  
  1189.     #描画位置
  1190.     base_y = line_height * (1 + @add_skill.size)
  1191.  
  1192.     #追加スキルの描画
  1193.     draw_gauge(5,0, contents.width, 1, mp_gauge_color2,crisis_color)
  1194.     draw_text(5, 0, contents.width, line_height, "追加メモライズ")
  1195.  
  1196.     if @add_skill.size != 0
  1197.       for i in [email]0..@add_skill.size[/email] - 1
  1198.         draw_item_name($data_skills[@add_skill[i]], 5, line_height * (1 + i))
  1199.  
  1200.         for j in 0..KURE::SkillMemorize::CHAIN_MEMORIZE.size - 1
  1201.           if KURE::SkillMemorize::CHAIN_MEMORIZE[j] != nil
  1202.             if KURE::SkillMemorize::CHAIN_MEMORIZE[j][0] == $data_skills[@add_skill[i]].id
  1203.               for k in 1..KURE::SkillMemorize::CHAIN_MEMORIZE[j].size - 1
  1204.                 draw_icon($data_skills[KURE::SkillMemorize::CHAIN_MEMORIZE[j][k]].icon_index, 180 + 30 * ( k -1 ), line_height * (1 + i))
  1205.               end
  1206.             end
  1207.           end
  1208.         end
  1209.  
  1210.       end
  1211.     end
  1212.  
  1213.     base_y += line_height if @add_skill.size == 0
  1214.  
  1215.     #削除スキルの描画
  1216.     draw_gauge(5, base_y, contents.width, 1, mp_gauge_color2,crisis_color)
  1217.     draw_text(5, base_y, contents.width, line_height, "削除メモライズ")
  1218.  
  1219.     if @delete_skill.size != 0
  1220.       for i in [email]0..@delete_skill.size[/email] - 1
  1221.         draw_item_name($data_skills[@delete_skill[i]], 5, line_height * (1 + i) + base_y)
  1222.  
  1223.         for j in 0..KURE::SkillMemorize::CHAIN_MEMORIZE.size - 1
  1224.           if KURE::SkillMemorize::CHAIN_MEMORIZE[j] != nil
  1225.             if KURE::SkillMemorize::CHAIN_MEMORIZE[j][0] == $data_skills[@delete_skill[i]].id
  1226.               for k in 1..KURE::SkillMemorize::CHAIN_MEMORIZE[j].size - 1
  1227.                 draw_icon($data_skills[KURE::SkillMemorize::CHAIN_MEMORIZE[j][k]].icon_index, 180 + 30 * ( k -1 ), line_height * (1 + i) + base_y)
  1228.               end
  1229.             end
  1230.           end
  1231.         end        
  1232.  
  1233.       end
  1234.     end   
  1235.  
  1236.   end  
  1237. end

点评

这日文是什么意思。。。  发表于 2015-2-9 23:55
不过还是有很大差别的~  发表于 2015-2-9 23:19
应该是大同小异吧~不过要早点发现我也懒得费时间重写了…当时问了好多人…重写过了才有人给我我也是醉了qeq  发表于 2015-2-9 23:19
回复 支持 反对

使用道具 举报

Lv4.逐梦者

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

开拓者

7
发表于 2015-2-9 23:07:29 | 只看该作者
cjlzbb 发表于 2015-2-9 05:49
以前有看过个VA的版本,不是6R上的,是日文的。已找到,不知道还有没有前置脚本。给楼主做个参考吧

#===== ...

能翻译一下这具体功能有哪些吗。。。

点评

单独设置什么···  发表于 2015-2-10 12:33
我不懂日文也不懂脚本,里面的中文是我一点点试了以后写上去的。跟楼主的差不多不过不同技能类型的分开计算SP了。还可以给个别技能单独设置  发表于 2015-2-10 12:14
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv4.逐梦者

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

开拓者

8
发表于 2015-2-10 16:23:46 | 只看该作者
本帖最后由 chd114 于 2015-2-10 00:11 编辑
chd114 发表于 2015-2-9 05:37
我已经解决了这里的问题,要去掉两个的其中一个,整合成就可以了


这个问题出现的BUG(详见点评)明白了···因为装上技能以后右侧光标还在显示,再次移动过去也是在那个位置,如果技能已经全部装备就会出现不存在的选项也能下掉技能的情况···
  1. #--------------------------------------------------------------------------
  2.   # ○ 右侧窗口更新
  3.   #--------------------------------------------------------------------------
  4.   def update_list
  5.     if Input.trigger?(Input::B)
  6.       Sound.play_cancel
  7.       # 切换活动窗口
  8.       @slot_window.active = true
  9.       @list_window.active = false
  10.     elsif Input.trigger?(Input::C)
  11.       skill = @list_window.skill
  12.       return if skill==nil and @list_window.index>0#加上我
  13.       # 无法设置的场合
  14.       unless @actor.battle_skill_settable?(@slot_window.index, skill)
  15.         Sound.play_buzzer
  16.         return
  17.       end
  18.       Sound.play_ok
  19.       set_skill(@slot_window.index, skill)
  20.       @slot_window.active = true
  21.       @list_window.active = false
  22.     end
  23.   end
复制代码
加一句return if skill==nil and @list_window.index>0可以解决掉不存在的选项也能移除技能的BUG,但是光标还是会显示在那···所以这解决方法有点不合理···@VIPArcher 有什么好的解决办法吗?

点评

只能在切换窗口时候复位光标了……  发表于 2015-2-10 20:43
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
16 小时
注册时间
2010-6-29
帖子
241
9
发表于 2015-3-23 08:52:09 | 只看该作者
这个拿来做武侠游戏的内功系统不错……
[img]http://rpg.blue/data/attachment/forum/201008/11/105320eudv222d7jgvg24p.gif[img]
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
207 小时
注册时间
2011-8-24
帖子
21
10
发表于 2015-3-23 12:19:37 | 只看该作者
怎么让某些技能 固定无法卸下  ?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-28 03:01

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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