| 赞 | 274 |
| VIP | |
| 好人卡 | |
| 积分 | 496 |
| 经验 | |
| 最后登录 | 2024-6-21 |
| 在线时间 | 1919 小时 |
- 梦石
- 10
- 星屑
- 39550
- 在线时间
- 1919 小时
- 注册时间
- 2010-11-14
- 回帖
- 3214

|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有账号?注册会员
×
本帖最后由 KB.Driver 于 2015-5-5 23:44 编辑
问题见问题截图……一打开技能装备的界面就会弹出窗口
而以前这个功能还可以用的……到现在也没有修改过内容,不知道为什么就不能用了……
和以前唯一的变化就是插入了喵呜喵5的公共事件转界面脚本。
而且刚才把那段脚本全部都注释了,问题依旧存在……到底要怎么解决呢……?
问题截图
技能CP制脚本- #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
- #_/ ◆ 技能SP点--让技能像装备一样装备吧~
- #_/
- #_/ 看到了VX中KGC的技能CP制脚本,然后到KGC和6R找了好久都没找到ACE版本,就参照着
- #_/ KGCVX版的思路移植了个技能SP的脚本~
- #_/ 功能:
- #_/ 让技能像装备一样装备,只有装备后的技能可以在战斗中使用。
- #_/ 技能可在备注设定消耗的SP,角色升级可增加SP,装备也可追加SP(或者扣除SP上限)。
- #_/ 可定义技能栏上限,这样即使SP再多也只能携带特定数目技能。
- #_/ ---千叶玖濑
- #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
- #==============================================================================
- # ☆系统设置
- #==============================================================================
- module Kunase
- module Skill_SP
- # ◆ 技能栏最大空位
- MAX_SKILLS = 20
- # ◆ SP 的名字
- VOCAB_SP = "SP"
- # ◆ SP 的简称
- VOCAB_SP_A = "灵"
- # ◆ 在角色状态中显示SP数值(适合默认菜单)
- SHOW_STATUS_SP = true
- # ◆ 未设定消耗SP的技能,默认消耗的SP值。
- DEFAULT_SP_COST = 0
- # ◆ 人物升级所获得得SP值上限
- SP_MAX = 150
- # ◆ 人物SP值下限
- SP_MIN = 0
- # ◆ 本来的SP加上装备提供的SP上限
- REVISED_SP_MAX = 200
- # ◆ 经过装备扣除后的SP下限
- REVISED_SP_MIN = 0
- # ◆通用的SP最大值的计算公式
- # level代表角色当前等级
- # 结果自动取整
- SP_ABOUT_EXP = "level * 1 + 20.0"
- # ◆ 对于特定角色角色最大SP计算公式
- # PERSONAL_SP_ABOUT_EXP[角色 ID] = "公式"
- # 公式格式和最大值计算公式举例如下
- PERSONAL_SP_ABOUT_EXP = [] # 此行不要改动
- PERSONAL_SP_ABOUT_EXP[21] = "level * 1.0 "
- # PERSONAL_SP_ABOUT_EXP[3] = "level * 1.0 + 5.0" #修改 未使用
- # ◆ 在技能装备栏中允许显示不可使用的技能
- SHOW_UNUSABLE_SKILL = true
- # ◆ 新学习到的技能自动装备
- AUTO_SET_NEW_SKILL = false
- # ◆ SP 最小值时的颜色
- # (数值为\C[n]表示的颜色)
- GAUGE_START_COLOR = 13
- # ◆ SP 最大值时的颜色
- GAUGE_END_COLOR = 5
- # ◆ 菜单中进入技能SP的名称
- VOCAB_MENU_SET_SKILL = "卡组"
- # ◆ 未设定技能时显示的名称
- BLANK_TEXT = "- 空位 -"
- # ◆ 技能解除时候显示的名称
- RELEASE_TEXT = "( 解除技能 )"
- end
- end
- #==============================================================================
- # ☆对于在数据库备注中的设定方法~
- #==============================================================================
- module Kunase::Skill_SP
- module Regexp
- module BaseItem
- # 最大SP增加:在装备栏备注中填写<最大SP X>或<MAXSP X>(X可为负数)
- MAXSP_PLUS = /<(?:MAX|最大)SP\s*([\-\+]?\d+)>/
- # 技能框增加:在装备栏备注中填写<技能栏追加 X>
- BATTLE_SKILL_MAX = /<(?:BATTLE_SKILL_MAX|技能栏追加)\s*([\-\+]?\d+)>/i
- end
- module Skill
- # 消费SP设定 :在技能备注中填写<SP X>
- SP_COST = /<SP\s*(\d+)>/i
- end
- end
- end
- #==============================================================================
- ## ☆ Game_Interpreter----用事件脚本来获取SP的方法~
- #==============================================================================
- module Skill_SP
- #--------------------------------------------------------------------------
- # ○ 获得角色SP最大值
- # actor_id : 角色编号
- # variable_id : SP赋值的变量号(不填则不代入)
- #--------------------------------------------------------------------------
- def get_actor_sp(actor_id, variable_id = 0)
- value = $game_actors[actor_id].maxsp_plus
- $game_variables[variable_id] = value if variable_id > 0
- return value
- end
- #--------------------------------------------------------------------------
- # ○ 变更角色SP最大值
- # actor_id : 角色编号
- # value : 变更后的SP最大值
- #--------------------------------------------------------------------------
- def set_actor_sp(actor_id, value)
- $game_actors[actor_id].maxsp_plus = value
- end
- #--------------------------------------------------------------------------
- # ○ 角色最大SP增加
- # actor_id : 角色编号
- # value : SP最大值增加量
- #--------------------------------------------------------------------------
- def gain_actor_sp(actor_id, value)
- $game_actors[actor_id].maxsp_plus += value
- end
- #--------------------------------------------------------------------------
- # ○ 技能栏最大数获得
- # actor_id : 角色编号
- # variable_id : 技能栏最大数赋值的变量号(不填则不代入)
- #--------------------------------------------------------------------------
- def get_battle_skill_max(actor_id, variable_id = 0)
- value = $game_actors[actor_id].battle_skill_max
- $game_variables[variable_id] = value if variable_id > 0
- return value
- end
- #--------------------------------------------------------------------------
- # ○ 技能栏最大数变更
- # actor_id : 角色ID
- # value : 变更后的技能栏数目
- #--------------------------------------------------------------------------
- def set_battle_skill_max(actor_id, value = -1)
- $game_actors[actor_id].battle_skill_max = value
- end
- #--------------------------------------------------------------------------
- # ○ 确认某技能是否已装备
- # actor_id : 角色ID
- # skill_id : 技能ID
- #--------------------------------------------------------------------------
- def battle_skill_set?(actor_id, skill_id)
- return $game_actors[actor_id].battle_skill_ids.include?(skill_id)
- end
- #--------------------------------------------------------------------------
- # ○ 装备技能
- # actor_id : 角色编号
- # index : 装备的技能栏位
- # skill_id : 技能ID(nil则为解除装备)
- #--------------------------------------------------------------------------
- def set_battle_skill(actor_id, index, skill_id = nil)
- actor = $game_actors[actor_id]
- if skill_id.is_a?(Integer)
- # 装备
- skill = $data_skills[skill_id]
- return unless actor.battle_skill_settable?(index, skill) # 无法装备
- actor.set_battle_skill(index, skill)
- actor.restore_battle_skill
- else
- # 解除
- actor.remove_battle_skill(index)
- end
- end
- #--------------------------------------------------------------------------
- # ○ 直接装备某技能
- # actor_id : 角色编号
- # skill_id : 技能编号
- #--------------------------------------------------------------------------
- def add_battle_skill(actor_id, skill_id)
- actor = $game_actors[actor_id]
- skill = $data_skills[skill_id]
- return if actor == nil || skill == nil
- actor.add_battle_skill(skill)
- end
- #--------------------------------------------------------------------------
- # ○ 卸下全部技能
- # actor_id : 角色编号
- #--------------------------------------------------------------------------
- def clear_battle_skill(actor_id)
- $game_actors[actor_id].clear_battle_skill
- end
- end
- class Game_Interpreter
- include Skill_SP
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ RPG::BaseItem
- #==============================================================================
- class RPG::BaseItem
- #--------------------------------------------------------------------------
- # ○ 读取装备备注
- #--------------------------------------------------------------------------
- def create_skill_sp_system_cache
- @__maxsp_plus = 0
- @__battle_skill_max_plus = 0
- self.note.each_line { |line|
- case line
- when Kunase::Skill_SP::Regexp::BaseItem::MAXSP_PLUS
- @__maxsp_plus += $1.to_i
- when Kunase::Skill_SP::Regexp::BaseItem::BATTLE_SKILL_MAX
- @__battle_skill_max_plus += $1.to_i
- end
- }
- end
- #--------------------------------------------------------------------------
- # ○ 最大 SP
- #--------------------------------------------------------------------------
- def maxsp_plus
- create_skill_sp_system_cache if @__maxsp_plus == nil
- return @__maxsp_plus
- end
- #--------------------------------------------------------------------------
- # ○ 技能框追加
- #--------------------------------------------------------------------------
- def battle_skill_max_plus
- create_skill_sp_system_cache if @__battle_skill_max_plus == nil
- return @__battle_skill_max_plus
- end
- end
- #==============================================================================
- # ■ RPG::Skill
- #==============================================================================
- class RPG::Skill < RPG::UsableItem
- #--------------------------------------------------------------------------
- # ○ 技能SP生成
- #--------------------------------------------------------------------------
- def create_skill_sp_system_cache
- @__sp_cost = Kunase::Skill_SP::DEFAULT_SP_COST
- self.note.each_line { |line|
- case line
- when Kunase::Skill_SP::Regexp::Skill::SP_COST
- # 消费SP
- @__sp_cost = $1.to_i
- end
- }
- end
- #--------------------------------------------------------------------------
- # ○ 消費 SP
- #--------------------------------------------------------------------------
- def sp_cost
- create_skill_sp_system_cache if @__sp_cost == nil
- return @__sp_cost
- end
- end
- #==============================================================================
- # ■ Vocab
- #==============================================================================
- module Vocab
- #SP
- def self.sp
- return Kunase::Skill_SP::VOCAB_SP
- end
- #SP略
- def self.sp_a
- return Kunase::Skill_SP::VOCAB_SP_A
- end
- # 技能设定
- def self.set_battle_skill
- return Kunase::Skill_SP::VOCAB_MENU_SET_SKILL
- end
- end
- #==============================================================================
- # ■ Game_Battler
- #==============================================================================
- class Game_Battler
- #--------------------------------------------------------------------------
- # ○ 战斗技能配置确定
- #--------------------------------------------------------------------------
- def battle_skill_set?(skill)
- return true
- end
- end
- #==============================================================================
- # ■ Game_Actor
- #==============================================================================
- class Game_Actor < Game_Battler
- #--------------------------------------------------------------------------
- # ● 实例变量
- #--------------------------------------------------------------------------
- attr_writer :maxsp_plus # 最大SP补正值
- #--------------------------------------------------------------------------
- # ○ MaxSP 取得
- #--------------------------------------------------------------------------
- def maxsp
- about_exp = Kunase::Skill_SP::PERSONAL_SP_ABOUT_EXP[self.id]
- if about_exp == nil
- about_exp = Kunase::Skill_SP::SP_ABOUT_EXP
- end
- n = Integer(eval(about_exp))
- n = [[n, sp_limit].min, Kunase::Skill_SP::SP_MIN].max
- n += maxsp_plus + maxsp_plus_equip
- return [[n, revised_sp_limit].min, Kunase::Skill_SP::REVISED_SP_MIN].max
- end
- #--------------------------------------------------------------------------
- # ○ SP 取得
- #--------------------------------------------------------------------------
- def sp
- return [maxsp - consumed_sp, 0].max
- end
- #--------------------------------------------------------------------------
- # ○ SP 消耗量取得
- #--------------------------------------------------------------------------
- def consumed_sp
- n = 0
- battle_skills.compact.each { |skill| n += skill.sp_cost }
- return n
- end
- #--------------------------------------------------------------------------
- # ○ SP 上限取得
- #--------------------------------------------------------------------------
- def sp_limit
- return Kunase::Skill_SP::SP_MAX
- end
- #--------------------------------------------------------------------------
- # ○ 补正后SP上限获得
- #--------------------------------------------------------------------------
- def revised_sp_limit
- return Kunase::Skill_SP::REVISED_SP_MAX
- end
- #--------------------------------------------------------------------------
- # ○ 补正值获得
- #--------------------------------------------------------------------------
- def maxsp_plus
- if @maxsp_plus == nil
- if @own_sp != nil
- @maxsp_plus = @own_sp
- @own_sp = nil
- else
- @maxsp_plus = 0
- end
- end
- return @maxsp_plus
- end
- #--------------------------------------------------------------------------
- # ○ 装备补正
- #--------------------------------------------------------------------------
- def maxsp_plus_equip
- n = 0
- equips.compact.each { |item| n += item.maxsp_plus }
- return n
- end
- #--------------------------------------------------------------------------
- # ● 技能取得
- #--------------------------------------------------------------------------
- alias skills_SkillSP skills
- def skills
- return (skill_sp_restrict? ? restricted_skills : skills_SkillSP)
- end
- #--------------------------------------------------------------------------
- # ○ 战斗测试
- #--------------------------------------------------------------------------
- def skill_sp_restrict?
- if $game_party.in_battle
- return true unless $BTEST
- end
- return false
- end
- #--------------------------------------------------------------------------
- # ○ 技能限制
- #--------------------------------------------------------------------------
- def restricted_skills
- # 战斗技能加入
- result = battle_skills
- result.sort! { |a, b| a.id <=> b.id }
- return result
- end
- #--------------------------------------------------------------------------
- # ○ 全部技能取得
- #--------------------------------------------------------------------------
- def all_skills
- last_in_battle = $game_party.in_battle
- $game_party.in_battle = false
- result = skills_SkillSP
- $game_party.in_battle = last_in_battle
- return result
- end
- #--------------------------------------------------------------------------
- # ○ 技能栏最大数取得
- #--------------------------------------------------------------------------
- def battle_skill_max
- @battle_skill_max = -1 if @battle_skill_max == nil
- n = (@battle_skill_max < 0 ?
- Kunase::Skill_SP::MAX_SKILLS : @battle_skill_max)
- n += equipment_battle_skill_max_plus
- return [n, 0].max
- end
- #--------------------------------------------------------------------------
- # ○ 扩充技能栏
- #--------------------------------------------------------------------------
- def equipment_battle_skill_max_plus
- n = 0
- equips.compact.each { |item| n += item.battle_skill_max_plus }
- return n
- end
- #--------------------------------------------------------------------------
- # ○ 技能栏最大值设定
- #--------------------------------------------------------------------------
- def battle_skill_max=(value)
- @battle_skill_max = value
- if @battle_skills == nil
- @battle_skills = []
- else
- @battle_skills = @battle_skills[0...value]
- end
- end
- #--------------------------------------------------------------------------
- # ○ 战斗使用技能ID
- #--------------------------------------------------------------------------
- def battle_skill_ids
- @battle_skills = [] if @battle_skills == nil
- return @battle_skills
- end
- #--------------------------------------------------------------------------
- # ○ 战斗用技能取得
- #--------------------------------------------------------------------------
- def battle_skills
- result = []
- battle_skill_ids.each { |i|
- next if i == nil
- result << $data_skills[i]
- }
- return result
- end
- #--------------------------------------------------------------------------
- # ○ 战斗技能登陆
- # index : 位置
- # skill : 技能编号
- #--------------------------------------------------------------------------
- def set_battle_skill(index, skill)
- if skill == nil
- @battle_skills[index] = nil
- else
- return unless skill.is_a?(RPG::Skill)
- return if sp < skill.sp_cost
- @battle_skills[index] = skill.id
- end
- end
- #--------------------------------------------------------------------------
- # ○ 战斗技能追加
- # skill : 技能
- #--------------------------------------------------------------------------
- def add_battle_skill(skill)
- return unless skill.is_a?(RPG::Skill)
- skills = battle_skill_ids
- return if skills.include?(skill.id)
- return if sp < skill.sp_cost
- battle_skill_max.times { |i|
- if skills[i] == nil
- set_battle_skill(i, skill)
- break
- end
- }
- restore_battle_skill
- end
- #--------------------------------------------------------------------------
- # ○ 战斗技能解除
- # index : 位置
- #--------------------------------------------------------------------------
- def remove_battle_skill(index)
- @battle_skills[index] = nil
- end
- #--------------------------------------------------------------------------
- # ○ 战斗技能全部解除
- #--------------------------------------------------------------------------
- def clear_battle_skill
- @battle_skills = []
- end
- #--------------------------------------------------------------------------
- # ○ 技能能否设置判定
- # index : 位置
- # skill : 技能
- #--------------------------------------------------------------------------
- def battle_skill_settable?(index, skill)
- return false if battle_skill_max <= index # 超出范围
- return true if skill == nil # 解除技能
- return false if battle_skill_ids.include?(skill.id) #已经设定
- skill_id = battle_skill_ids[index]
- curr_skill = (skill_id != nil ? $data_skills[skill_id] : nil)
- offset = (curr_skill != nil ? curr_skill.sp_cost : 0)
- return false if self.sp < (skill.sp_cost - offset) # SP 不足
- return true
- end
- #--------------------------------------------------------------------------
- # ○ 战斗技能存储
- #--------------------------------------------------------------------------
- def restore_battle_skill
- result = battle_skill_ids.clone
- usable_skills = all_skills
- result.each_with_index { |n, i|
- next if n == nil
- # 未学习的情况
- if (usable_skills.find { |s| s.id == n }) == nil
- result[i] = nil
- end
- }
- @battle_skills = result[0...battle_skill_max]
- # SP不足的时候排除
- (battle_skill_max - 1).downto(0) { |i|
- @battle_skills[i] = nil if maxsp - consumed_sp < 0
- }
- end
- #--------------------------------------------------------------------------
- # ● 换装备的时候
- # equip_type : 装备部位
- # item : 道具
- # test : 在战斗测试中
- #--------------------------------------------------------------------------
- alias change_equip_SkillSP change_equip
- def change_equip(equip_type, item, test = false)
- change_equip_SkillSP(equip_type, item)
- restore_battle_skill
- end
- #--------------------------------------------------------------------------
- # ● 装备丢弃时
- #--------------------------------------------------------------------------
- alias discard_equip_SkillSP discard_equip
- def discard_equip(item)
- discard_equip__SkillSP(item)
- restore_battle_skill
- end
- #--------------------------------------------------------------------------
- # ● 经验变更
- #--------------------------------------------------------------------------
- alias change_exp_SP change_exp
- def change_exp(exp, show)
- last_in_battle = $game_party.in_battle
- $game_party.in_battle = false
- change_exp_SP(exp, show)
- $game_party.in_battle = last_in_battle
- end
- if Kunase::Skill_SP::AUTO_SET_NEW_SKILL
- alias learn_skill_SP learn_skill
- def learn_skill(skill_id)
- learn_skill_SP(skill_id)
- add_battle_skill($data_skills[skill_id])
- end
- end
- #--------------------------------------------------------------------------
- # ● 技能遗忘
- #--------------------------------------------------------------------------
- alias forget_skill_SkillSP forget_skill
- def forget_skill(skill_id)
- # 忘れるスキルを戦闘用スキルから削除
- battle_skill_ids.each_with_index { |s, i|
- remove_battle_skill(i) if s == skill_id
- }
- forget_skill_SkillSP(skill_id)
- end
- #--------------------------------------------------------------------------
- # ● 判定技能是否装备
- #--------------------------------------------------------------------------
- def battle_skill_set?(skill)
- return false unless skill.is_a?(RPG::Skill)
- return battle_skill_ids.include?(skill.id)
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Window_Base
- #==============================================================================
- class Window_Base < Window
- #--------------------------------------------------------------------------
- # ○ SP颜色取得
- #--------------------------------------------------------------------------
- def sp_color(actor)
- return knockout_color if actor.maxsp > 0 && actor.sp == 0
- return normal_color
- end
- #--------------------------------------------------------------------------
- # ○ SP渐变色1
- #--------------------------------------------------------------------------
- def sp_gauge_color1
- color = Kunase::Skill_SP::GAUGE_START_COLOR
- return (color.is_a?(Integer) ? text_color(color) : color)
- end
- #--------------------------------------------------------------------------
- # ○ SP渐变色2
- #--------------------------------------------------------------------------
- def sp_gauge_color2
- color = Kunase::Skill_SP::GAUGE_END_COLOR
- return (color.is_a?(Integer) ? text_color(color) : color)
- end
- #--------------------------------------------------------------------------
- # ○ SP描绘
- #--------------------------------------------------------------------------
- def draw_actor_sp(actor, x, y, width = 120)
- draw_actor_sp_gauge(actor, x, y, width)
- self.contents.font.color = system_color
- self.contents.draw_text(x, y, 30, 24, Vocab::sp_a)
- self.contents.font.color = sp_color(actor)
- xr = x + width
- if width < 120
- self.contents.draw_text(xr - 40, y, 40, 24, actor.sp, 2)
- else
- self.contents.draw_text(xr - 90, y, 40, 24, actor.sp, 2)
- self.contents.font.color = normal_color
- self.contents.draw_text(xr - 50, y, 10, 24, "/", 2)
- self.contents.draw_text(xr - 40, y, 40, 24, actor.maxsp, 2)
- end
- self.contents.font.color = normal_color
- end
- #--------------------------------------------------------------------------
- # ○ SP条描绘
- #--------------------------------------------------------------------------
- def draw_actor_sp_gauge(actor, x, y, width = 120)
- gw = width * actor.sp / [actor.maxsp, 1].max
- gs1 = sp_gauge_color1
- gs2 = sp_gauge_color2
- self.contents.fill_rect(x, y + 24 - 8, width, 6, gauge_back_color)
- self.contents.gradient_fill_rect(x, y + 24 - 8, gw, 6, gs1, gs2)
- end
- end
- #==============================================================================
- # ■ Window_Status
- #==============================================================================
- if Kunase::Skill_SP::SHOW_STATUS_SP
- class Window_Status < Window_Selectable
- #--------------------------------------------------------------------------
- # ● 绘制基本信息
- #--------------------------------------------------------------------------
- alias draw_basic_info_SkillSP draw_basic_info
- def draw_basic_info(x, y)
- draw_basic_info_SkillSP(x, y)
- draw_actor_sp(@actor, x, y + 24 * 4)
- end
- end
- end
- #==============================================================================
- # □ Window_BattleSkillStatus
- #------------------------------------------------------------------------------
- # 显示基本信息的窗口
- #==============================================================================
- class Window_BattleSkillStatus < Window_Base
- #--------------------------------------------------------------------------
- # ● 初始化
- #--------------------------------------------------------------------------
- def initialize(x, y, actor)
- super(x, y, Graphics.width, 24 + 32)
- @actor = actor
- refresh
- end
- #--------------------------------------------------------------------------
- # ● 刷新
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- draw_actor_name(@actor, 4, 0)
- draw_actor_level(@actor, 140, 0)
- draw_actor_sp(@actor, 240, 0)
- end
- end
- #==============================================================================
- # □ Window_BattleSkillSlot
- #------------------------------------------------------------------------------
- # 已装备的技能窗口。
- #==============================================================================
- class Window_BattleSkillSlot < Window_Selectable
- #--------------------------------------------------------------------------
- # ● 初始化
- #--------------------------------------------------------------------------
- def initialize(x, y, width, height, actor)
- super(x, y, width, height)
- @actor = actor
- @data = []
- self.index = 0
- self.active = false
- refresh
- end
- #--------------------------------------------------------------------------
- # ○ 获取最大值
- #--------------------------------------------------------------------------
- def item_max
- @data ? @data.size : 1
- end
- #--------------------------------------------------------------------------
- # ○ 获取技能
- #--------------------------------------------------------------------------
- def skill
- return @data[self.index]
- end
- #--------------------------------------------------------------------------
- # ● 刷新
- #--------------------------------------------------------------------------
- def refresh
- @data=[]
- skill_ids = @actor.battle_skill_ids
- @actor.battle_skill_max.times { |i|
- if skill_ids[i] != nil
- @data << $data_skills[skill_ids[i]]
- else
- @data << nil
- end
- }
- create_contents
- draw_all_items
- end
- #--------------------------------------------------------------------------
- # ○ 绘制内容
- #--------------------------------------------------------------------------
- def draw_item(index)
- rect = item_rect(index)
- self.contents.clear_rect(rect)
- skill = @data[index]
- if skill != nil
- rect.width -= 4
- draw_item_name(skill, rect.x, rect.y)
- self.contents.draw_text(rect, skill.sp_cost, 2)
- else
- self.contents.draw_text(rect, Kunase::Skill_SP::BLANK_TEXT, 1)
- end
- end
- #--------------------------------------------------------------------------
- # ● 更新帮助窗口
- #--------------------------------------------------------------------------
- def update_help
- @help_window.set_text(skill == nil ? "" : skill.description)
- end
- end
- #==============================================================================
- # □ Window_BattleSkillList
- #------------------------------------------------------------------------------
- # 右侧显示技能列表的窗口。
- #==============================================================================
- class Window_BattleSkillList < Window_Selectable
- #--------------------------------------------------------------------------
- # ● 定义实例变量
- #--------------------------------------------------------------------------
- attr_accessor :slot_index # 技能栏编号
- #--------------------------------------------------------------------------
- # ● 初始化对象
- #--------------------------------------------------------------------------
- def initialize(x, y, width, height, actor)
- super(x, y, width, height)
- @actor = actor
- @slot_index = 0
- @data = []
- self.index = 0
- self.active = false
- refresh
- end
- #--------------------------------------------------------------------------
- # ○ 技能取得
- #--------------------------------------------------------------------------
- def skill
- return @data[self.index]
- end
- #--------------------------------------------------------------------------
- # ○ 最大技能数取得
- #--------------------------------------------------------------------------
- def item_max
- @data ? @data.size : 1
- end
- #--------------------------------------------------------------------------
- # ○ 显示技能列表
- #--------------------------------------------------------------------------
- def make_item_list
- @data = [nil]
- @actor.all_skills.each { |skill|
- @data.push(skill) if selectable?(skill)
- }
- end
- #--------------------------------------------------------------------------
- # ● 刷新
- #--------------------------------------------------------------------------
- def refresh
- make_item_list
- create_contents
- draw_all_items
- end
- #--------------------------------------------------------------------------
- # ○ 技能可否选择判定
- #--------------------------------------------------------------------------
- def selectable?(skill)
- return false if skill == nil
- return true if skill.battle_ok?
- if Kunase::Skill_SP::SHOW_UNUSABLE_SKILL && skill.occasion == 3
- return true
- end
- return false
- end
- #--------------------------------------------------------------------------
- # ○ 绘制项目
- #--------------------------------------------------------------------------
- def draw_item(index)
- rect = item_rect(index)
- self.contents.clear_rect(rect)
- skill = @data[index]
- if skill != nil
- rect.width -= 4
- enabled = @actor.battle_skill_settable?(@slot_index, skill)
- draw_item_name(skill, rect.x, rect.y, enabled)
- self.contents.draw_text(rect, skill.sp_cost, 2)
- else
- self.contents.draw_text(rect, Kunase::Skill_SP::RELEASE_TEXT, 1)
- end
- end
- #--------------------------------------------------------------------------
- # ● 更新帮助窗口
- #--------------------------------------------------------------------------
- def update_help
- @help_window.set_text(skill == nil ? "" : skill.description)
- end
- end
- #==============================================================================
- # □ Scene_SetBattleSkill
- #------------------------------------------------------------------------------
- # 技能设定的场景。
- #==============================================================================
- class Scene_SetBattleSkill < Scene_MenuBase
- #--------------------------------------------------------------------------
- # ● 初始化
- #--------------------------------------------------------------------------
- def initialize(actor_index = 0, menu_index = 0)
- @actor_index = actor_index
- @menu_index = menu_index
- end
- #--------------------------------------------------------------------------
- # ● 开始处理
- #--------------------------------------------------------------------------
- def start
- super
- create_background
- @actor = $game_party.menu_actor
- create_windows
- end
- #--------------------------------------------------------------------------
- # ○ 创建窗口
- #--------------------------------------------------------------------------
- def create_windows
- @help_window = Window_Help.new
- dy = @help_window.height
- @status_window = Window_BattleSkillStatus.new(0, dy, @actor)
- dy += @status_window.height
- @slot_window = Window_BattleSkillSlot.new(
- 0,
- dy,
- Graphics.width / 2,
- Graphics.height - dy,
- @actor)
- @slot_window.help_window = @help_window
- @slot_window.active = true
- @list_window = Window_BattleSkillList.new(
- Graphics.width - @slot_window.width,
- dy,
- Graphics.width - @slot_window.width,
- Graphics.height - dy,
- @actor)
- @list_window.help_window = @help_window
- end
- #--------------------------------------------------------------------------
- # ● 结束处理
- #--------------------------------------------------------------------------
- def terminate
- super
- @help_window.dispose
- @status_window.dispose
- @slot_window.dispose
- @list_window.dispose
- end
- #--------------------------------------------------------------------------
- # ● 更新
- #--------------------------------------------------------------------------
- def update
- super
- if @slot_window.active
- update_slot
- elsif @list_window.active
- update_list
- end
- end
- #--------------------------------------------------------------------------
- # ○ 刷新窗口
- #--------------------------------------------------------------------------
- def refresh_window
- @status_window.refresh
- @slot_window.refresh
- @list_window.refresh
- end
- #--------------------------------------------------------------------------
- # ○ 左侧窗口更新
- #--------------------------------------------------------------------------
- def update_slot
- if @last_slot_index != @slot_window.index
- @list_window.slot_index = @slot_window.index
- @list_window.refresh
- @last_slot_index = @slot_window.index
- end
- if Input.trigger?(Input::A)
- Sound.play_ok
- @actor.remove_battle_skill(@slot_window.index)
- refresh_window
- elsif Input.trigger?(Input::B)
- Sound.play_cancel
- SceneManager.return
- elsif Input.trigger?(Input::C)
- Sound.play_ok
- # 切换活动窗口
- @slot_window.active = false
- @list_window.active = true
- end
- end
- #--------------------------------------------------------------------------
- # ○ 右侧窗口更新
- #--------------------------------------------------------------------------
- def update_list
- if Input.trigger?(Input::B)
- Sound.play_cancel
- # 切换活动窗口
- @slot_window.active = true
- @list_window.active = false
- elsif Input.trigger?(Input::C)
- skill = @list_window.skill
- # 无法设置的场合
- unless @actor.battle_skill_settable?(@slot_window.index, skill)
- Sound.play_buzzer
- return
- end
- Sound.play_ok
- set_skill(@slot_window.index, skill)
- @slot_window.active = true
- @list_window.active = false
- end
- end
- #--------------------------------------------------------------------------
- # ○ 设置技能
- #--------------------------------------------------------------------------
- def set_skill(index, skill)
- @actor.remove_battle_skill(index)
- if skill != nil
- @actor.set_battle_skill(index, skill)
- end
- refresh_window
- end
- end
- #==============================================================================
- # ■ Window_MenuCommand
- #------------------------------------------------------------------------------
- # 菜单画面中显示指令的窗口
- #==============================================================================
- class Window_MenuCommand < Window_Command
- alias add_main_commands_kunase add_main_commands
- def add_main_commands
- add_main_commands_kunase
- add_command(Kunase::Skill_SP::VOCAB_MENU_SET_SKILL, :skillsp, main_commands_enabled)
- end
- end
- #==============================================================================
- # ■ Scene_Menu
- #------------------------------------------------------------------------------
- # 菜单画面
- #==============================================================================
- class Scene_Menu < Scene_MenuBase
- alias create_command_window_kunase create_command_window
- def create_command_window
- create_command_window_kunase
- @command_window.set_handler(:skillsp, method(:command_personal))
- end
- def on_personal_ok
- case @command_window.current_symbol
- when :skill
- SceneManager.call(Scene_Skill)
- when :equip
- SceneManager.call(Scene_Equip)
- when :status
- SceneManager.call(Scene_Status)
- when :skillsp
- SceneManager.call(Scene_SetBattleSkill)
- end
- end
- end
- #==============================================================================
- # ■ Game_Unit
- #------------------------------------------------------------------------------
- # 管理游戏单位的类。是 Game_Party 和 Game_Troop 类的父类。
- #==============================================================================
- class Game_Unit
- #--------------------------------------------------------------------------
- # ● 定义实例变量
- #--------------------------------------------------------------------------
- attr_accessor :in_battle # 战斗中的标志
- end
复制代码 |
|