查看: 5900|回复: 0

[已经解决] 技能冷却脚本出错

[复制链接]
梦石
0
星屑
1442
在线时间
328 小时
注册时间
2016-4-4
回帖
126

开拓者

发表于 2016-7-28 12:17:54 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 porlutia 于 2016-7-28 12:24 编辑

[pre lang="ruby"]module Sword
  ON = true ; OFF = false ; Sword15_Cooling = Array.new
#=======================================
#★ 魔劍工舖 - 技能冷卻1.02
# 轉貼腳本請著名出處:http://blog.yam.com/a870053jjkj/
# 如果採用在遊戲中,看你高興是否顯示腳本出處,但嚴禁說是自己寫的腳本!!
#=======================================
#● 使用者自定設置
Sword15_XPVX = 0 # 此腳本用於XP時設為0;此腳本用在VX時設為1
Sword15_Battle = 0  # 戰鬥結束時的冷卻狀態,0為不需冷卻;1為記憶;2為需冷卻
Sword15_Menu1 = OFF # 選單中的技能畫面,是否要顯示剩餘的冷卻時間
Sword15_Menu2 = 0 # 選單中的使用標準,0為一律可用;1為沒冷卻中時可用;
                                  # 2為沒冷卻中時可用(使用後變更為冷卻中);3為一律不可用
Sword15_Enemy = OFF # 敵人使用冷卻技能時,是否需要冷卻
Sword15_Text = ' 剩\V回合' # 技能冷卻的顯示內容,\V表示剩餘冷卻回合數
#--------------------------------------------------------------
#○ 技能冷卻回合(Sword15_Cooling[技能編號] = 冷卻回合數)
Sword15_Cooling[54] = 4
Sword15_Cooling[55] = 4
Sword15_Cooling[56] = 4
Sword15_Cooling[57] = 4
=begin
========================================
=end
  $Sword ? $Sword[15] = 101 : $Sword = {15=>101} # 腳本使用標誌
end
# 詳細設置說明請參考:http://blog.yam.com/a870053jjkj/article/25549943
#=======================================
#■ 處理臨時資料的類別
class Game_Temp
  attr_accessor :skill_id # 技能編號(選單用)
  alias sword15_initialize initialize
  def initialize
    @skill_id = 0 ; sword15_initialize
  end
end
#=======================================
#■ 處理戰鬥者的類別
class Game_Battler
  include Sword # 連接自定設置
  attr_accessor :cooling  # 冷卻技能表
  #-------------------------------------------------------------
  #● 初始化物件
  alias sword15_initialize initialize
  def initialize
    sword15_initialize
    @cooling = {}
    Sword15_Cooling.each_index do |index|
      next if Sword15_Cooling[index] == nil # 沒設置冷卻時間的技能跳過
      if Sword15_Battle == 2 ; @cooling[index] = Sword15_Cooling[index]
      else ; @cooling[index] = 0 ; end
    end
  end
  #-------------------------------------------------------------
  #● 可以使用技能的判定
  alias sword15_skill_can_use? skill_can_use?
  def skill_can_use?(skill_id)
    if Sword15_Enemy or self.is_a?(Game_Actor)
      skill_id = skill_id.id if Sword15_XPVX == 1 # 將數據轉成編號(VX)
      if (not $game_temp.in_battle) # 不是戰鬥中時
        return sword15_skill_can_use?(skill_id) if Sword15_Menu2 == 0 # 一律可用
        return false if Sword15_Cooling.has_key?(skill_id) if Sword15_Menu2 == 3
      end
      return false if self.cooling[skill_id] > 0 if self.cooling[skill_id] # 冷卻技能不可使用
      skill_id = $data_skills[skill_id] if Sword15_XPVX == 1 # 將編號轉成數據(VX)
    end
    sword15_skill_can_use?(skill_id)
  end
end
#=======================================
#■ 處理角色的類別
class Game_Actor < Game_Battler
  include Sword # 連接自定設置
  attr_reader   :actor_id # 角色編號
  attr_accessor :cooling  # 冷卻技能表
  #-------------------------------------------------------------
  #● 初始化物件
  alias sword15_setup setup
  def setup(actor_id)
    sword15_setup(actor_id)
    @cooling = {}
    Sword15_Cooling.each_index do |index|
      next if Sword15_Cooling[index] == nil # 沒設置冷卻時間的技能跳過
      if Sword15_Battle == 2 ; @cooling[index] = Sword15_Cooling[index]
      else ; @cooling[index] = 0 ; end
    end
  end
  #-------------------------------------------------------------
  #● 變更 SP(XP)
  if Sword15_Menu2 == 2 and Sword15_Battle != 0
    if Sword15_XPVX == 0 ; alias sword15_sp= sp=
    else ; alias sword15_mp= mp= ; end
    def sp=(a)
      @cooling[$game_temp.skill_id] = Sword15_Cooling[$game_temp.skill_id] if
      Sword15_Cooling[$game_temp.skill_id] != nil # 自定設置有設定就設置冷卻回合
      self.sword15_sp = a
    end
    #-----------------------------------------------------------
    #●  變更 MP(VX)
    def mp=(a)
      @cooling[$game_temp.skill_id] = Sword15_Cooling[$game_temp.skill_id] if
      Sword15_Cooling[$game_temp.skill_id] != nil # 自定設置有設定就設置冷卻回合
      self.sword15_mp = a
    end
  end
end
#=======================================
#■ 技能畫面、戰鬥畫面、顯示可以使用的技能的瀏覽視窗
class Window_Skill < Window_Selectable
  include Sword # 連接自定設置
  #-------------------------------------------------------------
  #● 描繪項目
  alias sword15_draw_item draw_item
  def draw_item(index)
    if Sword15_Menu1 or $game_temp.in_battle # 允許顯示或戰鬥時的場合
      text = '' # 負責存入冷卻內容的變量
      if @actor.cooling[@data[index].id] ; if @actor.cooling[@data[index].id] > 0
        text = Sword15_Text ; text = text.gsub(/\\[Vv]/) { @actor.cooling[@data[index].id] }
        @data[index].name += text
      end ; end
    end
    sword15_draw_item(index)
    @data[index].name = @data[index].name.gsub(/#{text}/) { '' }
  end
end
#=======================================
#■ 處理戰鬥畫面的類別
class Scene_Battle
  include Sword # 連接自定設置
  #-------------------------------------------------------------
  #● 戰鬥結束
  alias sword15_battle_end battle_end
  def battle_end(result)
    sword15_battle_end(result)
    actor = Sword15_XPVX == 0 ? $game_party.actors : $game_party.members
    xpvx = Sword15_XPVX == 0 ? 1 : 0
    if Sword15_Battle == 0 # 當指定為「不需冷卻」的場合
      (0...actor.size).each {|i| $game_actors[actor.id].cooling = Hash.new}
    elsif Sword15_Battle == 2 # 當指定為「需冷卻」的場合
      (0...actor.size).each do |i| ; (1..Sword15_Cooling.size).each do |ii|
        $game_actors[actor.id].cooling[ii] = Sword15_Cooling[ii] + xpvx if
        Sword15_Cooling[ii] != nil # 當有設置冷卻時代入冷卻回合
      end ; end
    end
  end
  #-------------------------------------------------------------
  #● 產生技能行動結果(XP)
  if Sword15_XPVX == 0 ; alias sword15_make_skill_action_result make_skill_action_result
  else ; alias sword15_make_skill_action_result execute_action_skill ; end
  def make_skill_action_result
    #○ 確認敵人是否可使用該技能
    skill_id = Sword15_XPVX == 0 ? @active_battler.current_action.skill_id :
    @active_battler.action.skill_id # 縮短腳本長度
    skill = Sword15_XPVX == 0 ?
    $data_skills[@active_battler.current_action.skill_id] :
    $data_skills[@active_battler.action.skill_id]
    no = false
    a = Sword15_XPVX == 0 ?
    @active_battler.current_action.forcing : @active_battler.action.forcing
    b = Sword15_XPVX == 0 ? skill.id : skill
    unless a ; unless @active_battler.skill_can_use?(b)
      @phase4_step = 1 if no # 跳轉到階段1
      no = true
    end ; end
    sword15_make_skill_action_result unless no
    #○ 設置冷卻回合
    return if @active_battler.cooling[skill_id] > 0 if @active_battler.cooling[skill_id] != nil
    xpvx = Sword15_XPVX == 0 ? 1 : 0 # XP和VX的回合數值修正
    @active_battler.cooling[skill_id] = Sword15_Cooling[skill_id] + xpvx if
    Sword15_Cooling[skill_id] != nil # 如果自定設置有設定就設置冷卻回合
    $game_temp.forcing_battler = nil if no # 清除強制行動對象
  end
  #-------------------------------------------------------------
  #● 執行戰鬥行動:使用技能(VX)
  def execute_action_skill
    make_skill_action_result
  end
  #-------------------------------------------------------------
  #● 更新畫面 (主回合步驟 6 : 更新)(XP)
  if Sword15_XPVX == 0 ; alias sword15_update_phase4_step6 update_phase4_step6
  else ; alias sword15_update_phase4_step6 set_next_active_battler ; end
  def update_phase4_step6
    sword15_update_phase4_step6
    return if @active_battler == nil # 如果行動方是空的就中斷
    @active_battler.cooling.each_key do |i|
      @active_battler.cooling -= 1 if @active_battler.cooling > 0
    end
  end
  #-------------------------------------------------------------
  #● 設置下一戰鬥者行動(VX)
  def set_next_active_battler
    update_phase4_step6
  end
end
#=======================================
#■ 處理技能畫面的類別
class Scene_Skill
  include Sword # 連接自定設置
  #-------------------------------------------------------------
  #● 更新畫面 (技能視窗被活化的情況下) (XP)
  if Sword15_XPVX == 0 ; alias sword15_update_skill update_skill
  else ; alias sword15_update_skill update_skill_selection ; end
  def update_skill
    $game_temp.skill_id = @skill_window.skill.id
    sword15_update_skill
    $game_temp.skill_id = nil if $scene.is_a?(Scene_Skill)
  end
  #-------------------------------------------------------------
  #● 更新技能選擇(VX)
  def update_skill_selection
    update_skill
  end
end[/pre]
插入[main]上面 点击测试游戏就跳出
脚本第78行发生了NameError
undefined method‵setup' for class‵Game_Actor'
这怎么办?
会不会是和其他什么脚本冲突了....
——————————————————————————————————————————————
解决了....  放到除了Game_Actor以外带有Game_Actor类的脚本的上面就可以了...
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

在本版发帖返回顶部