查看: 2123|回复: 4

[已经过期] 这段脚本里面如何捕捉到某角色的某技能的剩余冷却时间

[复制链接]
梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

发表于 2014-9-21 16:09:33 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 chd114 于 2014-9-20 23:11 编辑

[pre lang="ruby" line="1"]=begin
在VA默认战斗系统上增加技能冷却时间系统。使用一个技能后在一定回合内不可以使用。
需要在技能备注里添加<冷却时间 x>
=end
class RPG::Skill < RPG::UsableItem
  def cool_time
    @note.each_line{|line|
    case line
    when /\<(?:冷却时间)[ ]*(\d+)\>/
      return $1.to_i
    end
    }
    return 0
  end
end
#==============================================================================
# ■ Game_Actor
#------------------------------------------------------------------------------
#  管理角色的类。
#   本类在 Game_Actors 类 ($game_actors) 的内部使用。
#   具体使用请查看 Game_Party 类 ($game_party) 。
#==============================================================================

class Game_Battler
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #--------------------------------------------------------------------------
  alias skill_cool_time_initialize initialize
  def initialize
    skill_cool_time_initialize
    @skill_cool_time=[]
  end
  #--------------------------------------------------------------------------
  # ● 应用技能/物品的效果
  #--------------------------------------------------------------------------
  alias skill_cool_time_item_apply item_apply
  def item_apply(user, item)
    skill_cool_time_item_apply(user,item)
    if item.is_a?(RPG::Skill)
      user.set_cool_time(item)
    end
  end
  #--------------------------------------------------------------------------
  # ● 设置技能冷却时间
  #--------------------------------------------------------------------------
  def set_cool_time(skill)
    if skill.cool_time
      @skill_cool_time[skill.id] = skill.cool_time
    end
  end
  #--------------------------------------------------------------------------
  # ● 回合结束处理
  #--------------------------------------------------------------------------
  alias skill_cool_time_on_turn_end on_turn_end
  def on_turn_end
    skill_cool_time_on_turn_end
    @skill_cool_time.each_index{|index|
    @skill_cool_time[index] -= 1 if @skill_cool_time[index] and @skill_cool_time[index] > 0
    }
  end
  #--------------------------------------------------------------------------
  # ● 技能是否正在冷却
  #--------------------------------------------------------------------------
  def skill_cooling?(skill)
    @skill_cool_time[skill.id] and @skill_cool_time[skill.id] != 0
  end
  #--------------------------------------------------------------------------
  # ● 获取冷却回合
  #--------------------------------------------------------------------------
  def skill_cool_turn(skill)
    @skill_cool_time[skill.id] ? @skill_cool_time[skill.id] : 0
  end
  #--------------------------------------------------------------------------
  # ● 检查技能的使用条件
  #--------------------------------------------------------------------------
  alias skill_cool_time_skill_conditions_met? skill_conditions_met?
  def skill_conditions_met?(skill)
    skill_cool_time_skill_conditions_met?(skill) && !skill_cooling?(skill)
  end
  #--------------------------------------------------------------------------
  # ● 战斗结束处理
  #--------------------------------------------------------------------------
  alias skill_cool_time_on_battle_end on_battle_end
  def on_battle_end
    skill_cool_time_on_battle_end
    @skill_cool_time.clear
  end
end
#==============================================================================
# ■ Window_SkillList
#------------------------------------------------------------------------------
#  技能画面中,显示技能的窗口。
#==============================================================================

class Window_SkillList < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 绘制项目
  #--------------------------------------------------------------------------
  alias skill_cool_time_draw_item draw_item
  def draw_item(index)
    skill = @data[index]
    sss=@data[1]
    if skill
      #skill.cool_time
      #p sss
      p "文字"
      #p index
      p @actor.skill_cool_turn(1)
      #p @actor.skill_cool_turn(skill)
      if @actor.skill_cooling?(skill)
        rect = item_rect(index)
        w = (skill.cool_time - @actor.skill_cool_turn(skill)).to_f / skill.cool_time
        draw_gauge(rect.x,rect.y,rect.width,w,text_color(5),text_color(13))
      end
    end
    skill_cool_time_draw_item(index)
  end
end[/pre]
试着P @actor.skill_cool_turn(skill)
可P出来的结果是所有的囧

@invwindy @Taxord ···
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
梦石
8
星屑
164
在线时间
57 小时
注册时间
2013-7-14
回帖
32
发表于 2014-9-21 20:02:34 | 显示全部楼层
p @skill_cool_time 看看
回复

使用道具 举报

梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

 楼主| 发表于 2014-9-21 21:33:21 | 显示全部楼层
invwindy 发表于 2014-9-21 03:02
p @skill_cool_time 看看

P出来的结果是[1,0](1是我角色第一个技能的剩余CD,0是另一个技能的···)
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

梦石
8
星屑
164
在线时间
57 小时
注册时间
2013-7-14
回帖
32
发表于 2014-9-21 21:58:04 | 显示全部楼层
chd114 发表于 2014-9-21 21:33
P出来的结果是[1,0](1是我角色第一个技能的剩余CD,0是另一个技能的···) ...

因此如果在这个表外的就都是0了。
回复

使用道具 举报

梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

 楼主| 发表于 2014-9-21 21:59:00 | 显示全部楼层
invwindy 发表于 2014-9-21 04:58
因此如果在这个表外的就都是0了。

刚好我都没学表外的······

点评

周末再看了···  发表于 2014-9-21 22:05
那就不清楚了看看别处吧……  发表于 2014-9-21 22:04
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部