查看: 1292|回复: 4

[已经过期] 请教这个脚本怎么用?

[复制链接]
梦石
0
星屑
50
在线时间
73 小时
注册时间
2013-2-18
回帖
43
发表于 2013-6-27 09:32:50 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 billyxiang123 于 2013-6-27 12:02 编辑

[pre lang="ruby" line="1"]#==============================================================================
# +++ MOG - Active Chain Commands (v1.0) +++
#==============================================================================
# By Moghunter

#==============================================================================
# Permite combinar (Linkar) ataques consecutivos através do uso de
# sequência de botões.
#==============================================================================
# Arquivos necessários. Graphics/System/
#
# Chain_Command.png
# Chain_Battle_Layout.png
# Chain_Battle_Meter.png
#
#==============================================================================
# UTILIZAÇÃO
#==============================================================================
# No banco de dados use o sequinte comentário para linkar as ações.
#
# <Chain Action = X>
#
# X - ID da habilidade.
#==============================================================================

module MOG_CHAIN_ACTIONS
#==============================================================================
# CHAIN_ACTIONS = { SKILL_ID => [COMMAND] }
#
# SKILL_ID = ID da habilidade no banco de dados.
# COMMANDS = Defina aqui a sequência de botões.
#            (Para fazer a sequência use os comandos abaixo)   
#  
# "Down" ,"Up" ,"Left" ,"Right" ,"Shift" ,"D" ,"S" ,"A" ,"Z" ,"X" ,"Q" ,"W"
#
# Exemplo de utilização
#
# CHAIN_SWITCH_COMMAND = {
# 25=>["Down","D","S","Right"],
# 59=>["Down","Up","Left","Right","Shift","D","S","A","Z","X","Q","W"],
# 80=>["Shift","D"]
# }
#==============================================================================  
CHAIN_ACTIONS = {
29=>["Left","Up","Right","Down"],
52=>["Up","Down","Left","Right","Z"],
70=>["X","Right","Left","Z","Z"],
138=>["X"],
139=>["A","S"],
140=>["Z","D","X"],
141=>["Up","Down"],
142=>["Left","Right","Z"],
999=>["Left","Right","Left","Right","Left","Right","Q","Z","Up","A","S",
      "Down","D","Z","Right","Up","Up","Z","W","Left","Down","D","A","W"]
}  
#Definição do tempo limite para pressionar o botão.
CHAIN_INPUT_DURATION = 60 #60 = 1s
#Som ao acertar.
CHAIN_RIGHT_SE = "Chime1"
#Som ao errar.
CHAIN_WRONG_SE = "Buzzer1"
#Definição do som ao ativar o sistema de chain.
CHAIN_START_SE = "Open1"
#Definição da posição do botão.
CHAIN_SPRITE_POSITION = [0,0]
#Posição do layout do medidor.
CHAIN_LAYOUT_POSITION = [1,-7]
#Posição do medidor de tempo.
CHAIN_METER_POSITION = [0,-6]
#Posição do Ícone
CHAIN_ICON_POSITION = [0,-32]
#Definição da palavra Chain.
CHAIN_COMMAND_WORD = "Chain Action!"
#Definição das palavras de erro.
CHAIN_MISSED_WORDS = ["Missed!", "Timeover"]
#Definição da posição da palavra.
CHAIN_COMMAND_WORD_POSITION = [0,0]
#Definição do nome da fonte.
CHAIN_WORD_FONT_NAME = "Georgia"
#Definição do tamanho da fonte
CHAIN_WORD_FONT_SIZE = 20
#Definição da cor da fonte
CHAIN_WORD_FONT_COLOR = Color.new(255,255,255)
#Prioridade do sprite.
CHAIN_SPRITE_Z = 100
end

#==============================================================================
# ■ Game Temp
#==============================================================================
class Game_Temp
  attr_accessor :chain_actions
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------      
  alias mog_chain_actions_initialize initialize
  def initialize
      @chain_actions = [0,0,0,false]
      mog_chain_actions_initialize
  end
  
end

#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle < Scene_Base
  
  #--------------------------------------------------------------------------
  # ● Use Item
  #--------------------------------------------------------------------------  
  alias mog_chain_actions_use_item use_item
  def use_item
      check_chain_targets
      mog_chain_actions_use_item
      execute_chain_actions
  end  
  
  #--------------------------------------------------------------------------
  # ● Check Chain Command Position
  #--------------------------------------------------------------------------      
  def check_chain_command_position
      targets = @subject.current_action.make_targets.compact
      return if targets == nil
      for i in targets         
          $game_temp.chain_actions = [i.screen_x,i.screen_y,true]
          break
      end
  end
      
  #--------------------------------------------------------------------------
  # ● Check Chain Targets
  #--------------------------------------------------------------------------   
  def check_chain_targets
      return if @subject == nil
      targets = @subject.current_action.make_targets.compact      
      return if targets == nil
      if @subject.current_action.item.scope == 1 or
         @subject.current_action.item.scope == 7 or
         @subject.current_action.item.scope == 9 or
         @subject.current_action.item.scope == 10 or
         @subject.current_action.item.scope == 11
         @pre_target = targets[0]
         @pre_target_hp = @pre_target.hp
      else   
         @pre_target = nil
         @pre_target_hp = nil
      end  
  end
  
  #--------------------------------------------------------------------------
  # ● Execute Chain Actions
  #--------------------------------------------------------------------------  
  def execute_chain_actions
      return if !can_execute_chain_actions_base?
      if @pre_target != nil
         return if @pre_target.dead?
         return if !@pre_target.result.hit? and @pre_target.hp == @pre_target_hp
      end
      check_chain_command_position      
      action_id = @subject.current_action.item.note =~ /<Chain Action = (\d+)>/i ? $1.to_i : nil
      return if action_id == nil or action_id < 1
      chain_command_sequence = MOG_CHAIN_ACTIONS::CHAIN_ACTIONS[action_id]
      $game_temp.chain_actions[2] = action_id
      if can_execute_chain_sequence?(chain_command_sequence)
         chain_sq = Chain_Actions.new(chain_command_sequence,$game_temp.chain_actions)
         loop do
              unless @spriteset.animation?
                  chain_sq.update
                  Input.update
              end
              chain_sq.update_skill_name
              @spriteset.update
              Graphics.update
              break if chain_sq.phase == 9
         end
         action_id = nil if !chain_sq.success
         chain_sq.dispose
      end        
      return if action_id == nil
      @subject.input.set_skill(action_id)
      $game_temp.chain_actions = [0,0,0,false]
      execute_action
  end
  
  #--------------------------------------------------------------------------
  # ● Can Execute Chain Sequence?
  #--------------------------------------------------------------------------  
  def can_execute_chain_sequence?(chain_command_sequence = nil)
      return false if chain_command_sequence == nil
      return true
  end

  #--------------------------------------------------------------------------
  # ● Can Execute Chain Actions Base
  #--------------------------------------------------------------------------   
  def can_execute_chain_actions_base?
      return false if @subject == nil
      return false if @subject.dead?
      return false if @subject.is_a?(Game_Enemy)
      return false if @subject.current_action == nil
      for i in @subject.states
          return false if i.restriction > 0
      end
      return false if $game_party.members.empty?
      return false if $game_party.all_dead?
      return false if $game_troop.all_dead?      
      return true
  end
   
end
  
#==============================================================================
# ■ Chain Actions
#==============================================================================
class Chain_Actions
  
  include MOG_CHAIN_ACTIONS
  
  attr_accessor :phase
  attr_accessor :success
   
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------   
  def initialize(sequence,chain_temp)
      $game_temp.chain_actions[3] = true
      @chain_command = sequence
      @x = chain_temp[0] + CHAIN_SPRITE_POSITION[0]
      @y = chain_temp[1] + CHAIN_SPRITE_POSITION[1]
      @skill = $data_skills[chain_temp[2]]
      @skillname = @skill.name
      @duration = [CHAIN_INPUT_DURATION, CHAIN_INPUT_DURATION]
      @phase = 0
      @success = false
      @com = 0
      @com_index = 0
      @initial_wait = 1
      @wrong_commnad = [false,0,0]
      Audio.se_play("Audio/SE/" + CHAIN_START_SE, 100, 100) rescue nil
      create_button_sprite
      create_skill_name
      create_icon
      create_meter
  end

  #--------------------------------------------------------------------------
  # ● Create Icon
  #--------------------------------------------------------------------------      
  def create_icon
      @icon_image = Cache.system("IconSet")
      @icon_sprite = Sprite.new
      @icon_sprite.bitmap = Bitmap.new(24,24)
      @icon_sprite.z = CHAIN_SPRITE_Z + 1
      @org_x2 = @x - 12 +  CHAIN_ICON_POSITION[0] - @center
      @icon_sprite.x = @org_x2 - 50
      @icon_sprite.y = @y +  CHAIN_ICON_POSITION[1]     
      icon_rect = Rect.new(@skill.icon_index % 16 * 24, @skill.icon_index / 16 * 24, 24, 24)
      @icon_sprite.bitmap.blt(0,0, @icon_image, icon_rect)
  end

  #--------------------------------------------------------------------------
  # ● Create Meter
  #--------------------------------------------------------------------------        
  def create_meter
      @meter_layout = Sprite.new
      @meter_layout.bitmap = Cache.system("Chain_Battle_Layout")
      @meter_layout.z = CHAIN_SPRITE_Z
      @meter_layout.x = @x - (@meter_layout.width / 2) + CHAIN_LAYOUT_POSITION[0]
      @meter_layout.y = @y + CHAIN_LAYOUT_POSITION[1]
      @meter_image = Cache.system("Chain_Battle_Meter")
      @meter_cw = @meter_image.width
      @meter_ch = @meter_image.height
      @meter = Sprite.new
      @meter.bitmap = Bitmap.new(@meter_image.width, @meter_image.height)
      @meter.z = CHAIN_SPRITE_Z + 1
      @meter.x = @x - (@meter_image.width / 2) + CHAIN_METER_POSITION[0]
      @meter.y = @y + CHAIN_METER_POSITION[1]
      @meter.visible = false
      @meter_layout.visible = false
      update_meter
  end
  
  #--------------------------------------------------------------------------
  # ● Update Meter
  #--------------------------------------------------------------------------         
  def update_meter
      return if @meter == nil
      @meter.bitmap.clear
      range = @meter_cw * @duration[0] / @duration[1]
      m_scr = Rect.new(0,0,range,@meter_ch )
      @meter.bitmap.blt(0,0, @meter_image ,m_scr)
  end
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------      
  def create_skill_name
      @skill_name = Sprite.new
      @skill_name.bitmap = Bitmap.new(200,32)
      @skill_name.bitmap.font.name = CHAIN_WORD_FONT_NAME
      @skill_name.bitmap.font.size = CHAIN_WORD_FONT_SIZE
      @skill_name.bitmap.font.color = CHAIN_WORD_FONT_COLOR
      @skill_name.z = CHAIN_SPRITE_Z
      @skill_name.y = @y - 32 + CHAIN_COMMAND_WORD_POSITION[1]
      refresh_skill_name
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh Skill Name
  #--------------------------------------------------------------------------        
  def refresh_skill_name
      cm = @skillname.to_s.split(//).size
      @center = ((200 / @skill_name.bitmap.font.size) * cm / 2) + 5
      @org_x = @x - (@button_cw / 2) - 85 + CHAIN_COMMAND_WORD_POSITION[0]
      @skill_name.x = @org_x - 50
      @skill_name.bitmap.draw_text(0,0,200,32,@skillname.to_s,1)  
  end
      
  #--------------------------------------------------------------------------
  # ● Create Button Sprite
  #--------------------------------------------------------------------------      
  def create_button_sprite
      @button_image = Cache.system("Chain_Command")
      @button_cw = @button_image.width / 13
      @button_ch = @button_image.height
      @button_sprite = Sprite.new
      @button_sprite.bitmap = Bitmap.new(@button_cw,@button_ch)
      @button_sprite.z = CHAIN_SPRITE_Z + 1
      @button_sprite.ox = @button_cw / 2
      @button_sprite.oy = @button_ch / 2
      @button_sprite.x = @x + @button_sprite.ox - (@button_cw / 2)
      @button_sprite.y = @y + @button_sprite.oy      
  end

  #--------------------------------------------------------------------------
  # ● Refresh Button Command
  #--------------------------------------------------------------------------        
  def refresh_button_command
      return if @button_sprite == nil
      @duration[0] = @duration[1]
      command_list_check(@chain_command[@com_index])  
      @button_sprite.bitmap.clear
      button_scr = Rect.new(@com * @button_cw , 0,@button_cw,@button_ch)
      @button_sprite.bitmap.blt(0,0,@button_image,button_scr)
      @button_sprite.zoom_x = 2
      @button_sprite.zoom_y = 2   
      @button_sprite.opacity = 255
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose
  #--------------------------------------------------------------------------      
  def dispose
      dispose_button
      dispose_meter
      dispose_name
      dispose_icon_sprite
      $game_temp.chain_actions[3] = false
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Icon Sprite
  #--------------------------------------------------------------------------        
  def dispose_icon_sprite
      return if @icon_image == nil
      @icon_sprite.bitmap.dispose
      @icon_sprite.dispose
      @icon_image.dispose
      @icon_image = nil
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose Name
  #--------------------------------------------------------------------------        
  def dispose_name
      return if @skill_name == nil
      @skill_name.bitmap.dispose
      @skill_name.dispose
      @skill_name = nil
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Button
  #--------------------------------------------------------------------------        
  def dispose_button
      return if @button_image == nil
      @button_sprite.bitmap.dispose
      @button_sprite.dispose
      @button_image.dispose
      @button_image = nil
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Meter
  #--------------------------------------------------------------------------         
  def dispose_meter
      return if @meter_layout == nil
      @meter_layout.bitmap.dispose
      @meter_layout.dispose
      @meter_layout = nil
      @meter.bitmap.dispose
      @meter.dispose
      @meter_image.dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------      
  def update
      if @initial_wait > 0
         @initial_wait -= 1
         if @initial_wait == 0
            refresh_button_command
            @meter.visible = true
            @meter_layout.visible = true        
         end
         return  
      end
      if @wrong_commnad[0]
         update_fade_command
         return
      end      
      update_command
      update_sprite_button
      update_time
      update_meter
  end

  #--------------------------------------------------------------------------
  # ● Update Skill Name
  #--------------------------------------------------------------------------         
  def update_fade_command
      fade_speed = 6
      @skill_name.opacity -= fade_speed
      @meter.opacity -= fade_speed
      @meter_layout.opacity -= fade_speed
      @icon_sprite.opacity -= fade_speed
      @button_sprite.opacity -= fade_speed * 2
      missed if @meter.opacity == 0
  end
  
  #--------------------------------------------------------------------------
  # ● Update Skill Name
  #--------------------------------------------------------------------------        
  def update_skill_name
      return if @skill_name == nil
      if @skill_name.x < @org_x
         @skill_name.x += 3
         @icon_sprite.x += 3
         if @skill_name.x > @org_x
            @skill_name.x = @org_x
            @icon_sprite.x = @org_x2
         end
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Update Time
  #--------------------------------------------------------------------------
  def update_time
      return if @button_sprite == nil
      @duration[0] -= 1 if @duration[0] > 0
      wrong_command(1) if @duration[0] == 0
  end
  
  #--------------------------------------------------------------------------
  # ● Update Sprite Button
  #--------------------------------------------------------------------------        
  def update_sprite_button
      return if @button_sprite == nil
      if @button_sprite.zoom_x > 1.00
         @button_sprite.zoom_x -= 0.05
         @button_sprite.zoom_x = 1.00 if @button_sprite.zoom_x < 1.00
      end
      @button_sprite.zoom_y = @button_sprite.zoom_x
  end  

#--------------------------------------------------------------------------
# ● Update Command
#--------------------------------------------------------------------------      
def update_command
     if Input.trigger?(Input::X)
        check_command(0)
     elsif Input.trigger?(Input::Z)  
        check_command(1)
     elsif Input.trigger?(Input::Y)  
        check_command(2)
     elsif Input.trigger?(Input::A)   
        check_command(3)
     elsif Input.trigger?(Input::C)           
        check_command(4)
     elsif Input.trigger?(Input::B)        
        check_command(5)
     elsif Input.trigger?(Input::L)        
        check_command(6)
     elsif Input.trigger?(Input::R)        
        check_command(7)        
     elsif Input.trigger?(Input::RIGHT)      
        check_command(8)
     elsif Input.trigger?(Input::LEFT)
        check_command(9)
     elsif Input.trigger?(Input::DOWN)
        check_command(10)
     elsif Input.trigger?(Input::UP)  
        check_command(11)
     end   
end  
   
#--------------------------------------------------------------------------
# ● command_list_check
#--------------------------------------------------------------------------      
def command_list_check(command)
     case command
         when "A"
            @com = 0  
         when "D"
            @com = 1  
         when "S"
            @com = 2
         when "Shift"
            @com = 3
         when "Z"
            @com = 4
         when "X"
            @com = 5
         when "Q"
            @com = 6
         when "W"
            @com = 7            
         when "Right"
            @com = 8
         when "Left"
            @com = 9
         when "Down"
            @com = 10
         when "Up"  
            @com = 11
         else   
            @com = 12           
     end
end   

#--------------------------------------------------------------------------
# ● check_command
#--------------------------------------------------------------------------            
def check_command(com)
     index = 0
     if com != -1
        right_input = false
        for i in @chain_command
           if index == @com_index
              command_list_check(i)
              right_input = true if @com == com
           end  
           index += 1  
       end  
     else  
       command_list_check(@com_index)
       right_input = true
     end  
     if right_input
        next_command
     else  
        wrong_command(0)
     end  
end  
   
#--------------------------------------------------------------------------
# ● Next Command
#--------------------------------------------------------------------------            
def next_command   
     @com_index += 1   
     Audio.se_play("Audio/SE/" + CHAIN_RIGHT_SE, 100, 100)
     if @com_index == @chain_command.size
        @phase = 9
        @success = true
        return
     end  
     refresh_button_command
end     

#--------------------------------------------------------------------------
# ● wrong_command
#--------------------------------------------------------------------------              
def wrong_command(type = 0)
     @wrong_commnad[0] = true
     @wrong_commnad[1] = type
     @skill_name.bitmap.clear
     Audio.se_play("Audio/SE/" + CHAIN_WRONG_SE, 100, 100)        
     wname = type == 0 ? CHAIN_MISSED_WORDS[0] : CHAIN_MISSED_WORDS[1]
     @skill_name.bitmap.draw_text(0,0,200,32,wname.to_s,1)
end     
  
#--------------------------------------------------------------------------
# ● missed
#--------------------------------------------------------------------------               
def missed
     @success = false  
     @phase = 9  
end

end

$mog_rgss3_active_chain_commands = true[/pre]

梦石
0
星屑
407
在线时间
1291 小时
注册时间
2013-1-12
回帖
3349

贵宾

发表于 2013-6-27 10:49:23 | 显示全部楼层
本帖最后由 76213585 于 2013-6-26 19:51 编辑

首先是設定
  1. CHAIN_SWITCH_COMMAND = {
  2. #這邊你設定按鍵的順序
  3. }
  4. #Duração para colocar os comandos. (A duração é multiplicado pela quantidade
  5. #de comandos) *60 = 1 sec
  6. CHAIN_INPUT_DURATION = 30  #每個按鍵的時間(預設30偵一個)
  7. #Som ao acertar.
  8. CHAIN_RIGHT_SE = "Chime1"  #成功音效
  9. #Som ao errar.
  10. CHAIN_WRONG_SE = "Buzzer1" #失敗音效
  11. #Switch que ativa o modo automático.
  12. CHAIN_AUTOMATIC_MODE_SWITCH_ID = 20 #自動模式
  13. #Definição da prioridade da hud na tela
  14. CHAIN_HUD_Z = 300  
  15. end
复制代码
然後使用
在事件-腳本-攔內填入
chain_commands(x)
x為設定順序的代碼
像是
  1. CHAIN_SWITCH_COMMAND = {
  2. 25=>["Down","D","S","Right"],  #這的就是25
  3. 59=>["Down","Up","Left","Right","Shift","D","S","A","Z","X","Q","W"],
  4. 80=>["Shift","D"]
  5. }
复制代码
然後下面弄個條件分支 如果代碼被開啟......
是說如果成功的話相對的代碼的開關就會開啟

還有 設定的那些請不要#起來 很重要
-----------------------------------------編輯-------------------------------
再附贈一個我自己制作比較好看的Chain_Comman圖片
Chain_Command.PNG

回复

使用道具 举报

梦石
0
星屑
50
在线时间
73 小时
注册时间
2013-2-18
回帖
43
 楼主| 发表于 2013-6-27 11:48:05 | 显示全部楼层
本帖最后由 billyxiang123 于 2013-6-27 12:01 编辑

好吧,我发错脚本了,是这个:[pre lang="ruby" line="1"]#==============================================================================
# +++ MOG - Active Chain Commands (v1.0) +++
#==============================================================================
# By Moghunter
#
#==============================================================================
# Permite combinar (Linkar) ataques consecutivos através do uso de
# sequência de botões.
#==============================================================================
# Arquivos necessários. Graphics/System/
#
# Chain_Command.png
# Chain_Battle_Layout.png
# Chain_Battle_Meter.png
#
#==============================================================================
# UTILIZAÇÃO
#==============================================================================
# No banco de dados use o sequinte comentário para linkar as ações.
#
# <Chain Action = X>
#
# X - ID da habilidade.
#==============================================================================

module MOG_CHAIN_ACTIONS
#==============================================================================
# CHAIN_ACTIONS = { SKILL_ID => [COMMAND] }
#
# SKILL_ID = ID da habilidade no banco de dados.
# COMMANDS = Defina aqui a sequência de botões.
#            (Para fazer a sequência use os comandos abaixo)   
#  
# "Down" ,"Up" ,"Left" ,"Right" ,"Shift" ,"D" ,"S" ,"A" ,"Z" ,"X" ,"Q" ,"W"
#
# Exemplo de utilização
#
# CHAIN_SWITCH_COMMAND = {
# 25=>["Down","D","S","Right"],
# 59=>["Down","Up","Left","Right","Shift","D","S","A","Z","X","Q","W"],
# 80=>["Shift","D"]
# }
#==============================================================================  
CHAIN_ACTIONS = {
29=>["Left","Up","Right","Down"],
52=>["Up","Down","Left","Right","Z"],
70=>["X","Right","Left","Z","Z"],
138=>["X"],
139=>["A","S"],
140=>["Z","D","X"],
141=>["Up","Down"],
142=>["Left","Right","Z"],
999=>["Left","Right","Left","Right","Left","Right","Q","Z","Up","A","S",
      "Down","D","Z","Right","Up","Up","Z","W","Left","Down","D","A","W"]
}  
#Definição do tempo limite para pressionar o botão.
CHAIN_INPUT_DURATION = 60 #60 = 1s
#Som ao acertar.
CHAIN_RIGHT_SE = "Chime1"
#Som ao errar.
CHAIN_WRONG_SE = "Buzzer1"
#Definição do som ao ativar o sistema de chain.
CHAIN_START_SE = "Open1"
#Definição da posição do botão.
CHAIN_SPRITE_POSITION = [0,0]
#Posição do layout do medidor.
CHAIN_LAYOUT_POSITION = [1,-7]
#Posição do medidor de tempo.
CHAIN_METER_POSITION = [0,-6]
#Posição do Ícone
CHAIN_ICON_POSITION = [0,-32]
#Definição da palavra Chain.
CHAIN_COMMAND_WORD = "Chain Action!"
#Definição das palavras de erro.
CHAIN_MISSED_WORDS = ["Missed!", "Timeover"]
#Definição da posição da palavra.
CHAIN_COMMAND_WORD_POSITION = [0,0]
#Definição do nome da fonte.
CHAIN_WORD_FONT_NAME = "Georgia"
#Definição do tamanho da fonte
CHAIN_WORD_FONT_SIZE = 20
#Definição da cor da fonte
CHAIN_WORD_FONT_COLOR = Color.new(255,255,255)
#Prioridade do sprite.
CHAIN_SPRITE_Z = 100
end

#==============================================================================
# ■ Game Temp
#==============================================================================
class Game_Temp
  attr_accessor :chain_actions
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------      
  alias mog_chain_actions_initialize initialize
  def initialize
      @chain_actions = [0,0,0,false]
      mog_chain_actions_initialize
  end
  
end

#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle < Scene_Base
  
  #--------------------------------------------------------------------------
  # ● Use Item
  #--------------------------------------------------------------------------  
  alias mog_chain_actions_use_item use_item
  def use_item
      check_chain_targets
      mog_chain_actions_use_item
      execute_chain_actions
  end  
  
  #--------------------------------------------------------------------------
  # ● Check Chain Command Position
  #--------------------------------------------------------------------------      
  def check_chain_command_position
      targets = @subject.current_action.make_targets.compact
      return if targets == nil
      for i in targets         
          $game_temp.chain_actions = [i.screen_x,i.screen_y,true]
          break
      end
  end
      
  #--------------------------------------------------------------------------
  # ● Check Chain Targets
  #--------------------------------------------------------------------------   
  def check_chain_targets
      return if @subject == nil
      targets = @subject.current_action.make_targets.compact      
      return if targets == nil
      if @subject.current_action.item.scope == 1 or
         @subject.current_action.item.scope == 7 or
         @subject.current_action.item.scope == 9 or
         @subject.current_action.item.scope == 10 or
         @subject.current_action.item.scope == 11
         @pre_target = targets[0]
         @pre_target_hp = @pre_target.hp
      else   
         @pre_target = nil
         @pre_target_hp = nil
      end  
  end
  
  #--------------------------------------------------------------------------
  # ● Execute Chain Actions
  #--------------------------------------------------------------------------  
  def execute_chain_actions
      return if !can_execute_chain_actions_base?
      if @pre_target != nil
         return if @pre_target.dead?
         return if !@pre_target.result.hit? and @pre_target.hp == @pre_target_hp
      end
      check_chain_command_position      
      action_id = @subject.current_action.item.note =~ /<Chain Action = (\d+)>/i ? $1.to_i : nil
      return if action_id == nil or action_id < 1
      chain_command_sequence = MOG_CHAIN_ACTIONS::CHAIN_ACTIONS[action_id]
      $game_temp.chain_actions[2] = action_id
      if can_execute_chain_sequence?(chain_command_sequence)
         chain_sq = Chain_Actions.new(chain_command_sequence,$game_temp.chain_actions)
         loop do
              unless @spriteset.animation?
                  chain_sq.update
                  Input.update
              end
              chain_sq.update_skill_name
              @spriteset.update
              Graphics.update
              break if chain_sq.phase == 9
         end
         action_id = nil if !chain_sq.success
         chain_sq.dispose
      end        
      return if action_id == nil
      @subject.input.set_skill(action_id)
      $game_temp.chain_actions = [0,0,0,false]
      execute_action
  end
  
  #--------------------------------------------------------------------------
  # ● Can Execute Chain Sequence?
  #--------------------------------------------------------------------------  
  def can_execute_chain_sequence?(chain_command_sequence = nil)
      return false if chain_command_sequence == nil
      return true
  end

  #--------------------------------------------------------------------------
  # ● Can Execute Chain Actions Base
  #--------------------------------------------------------------------------   
  def can_execute_chain_actions_base?
      return false if @subject == nil
      return false if @subject.dead?
      return false if @subject.is_a?(Game_Enemy)
      return false if @subject.current_action == nil
      for i in @subject.states
          return false if i.restriction > 0
      end
      return false if $game_party.members.empty?
      return false if $game_party.all_dead?
      return false if $game_troop.all_dead?      
      return true
  end
   
end
  
#==============================================================================
# ■ Chain Actions
#==============================================================================
class Chain_Actions
  
  include MOG_CHAIN_ACTIONS
  
  attr_accessor :phase
  attr_accessor :success
   
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------   
  def initialize(sequence,chain_temp)
      $game_temp.chain_actions[3] = true
      @chain_command = sequence
      @x = chain_temp[0] + CHAIN_SPRITE_POSITION[0]
      @y = chain_temp[1] + CHAIN_SPRITE_POSITION[1]
      @skill = $data_skills[chain_temp[2]]
      @skillname = @skill.name
      @duration = [CHAIN_INPUT_DURATION, CHAIN_INPUT_DURATION]
      @phase = 0
      @success = false
      @com = 0
      @com_index = 0
      @initial_wait = 1
      @wrong_commnad = [false,0,0]
      Audio.se_play("Audio/SE/" + CHAIN_START_SE, 100, 100) rescue nil
      create_button_sprite
      create_skill_name
      create_icon
      create_meter
  end

  #--------------------------------------------------------------------------
  # ● Create Icon
  #--------------------------------------------------------------------------      
  def create_icon
      @icon_image = Cache.system("IconSet")
      @icon_sprite = Sprite.new
      @icon_sprite.bitmap = Bitmap.new(24,24)
      @icon_sprite.z = CHAIN_SPRITE_Z + 1
      @org_x2 = @x - 12 +  CHAIN_ICON_POSITION[0] - @center
      @icon_sprite.x = @org_x2 - 50
      @icon_sprite.y = @y +  CHAIN_ICON_POSITION[1]     
      icon_rect = Rect.new(@skill.icon_index % 16 * 24, @skill.icon_index / 16 * 24, 24, 24)
      @icon_sprite.bitmap.blt(0,0, @icon_image, icon_rect)
  end

  #--------------------------------------------------------------------------
  # ● Create Meter
  #--------------------------------------------------------------------------        
  def create_meter
      @meter_layout = Sprite.new
      @meter_layout.bitmap = Cache.system("Chain_Battle_Layout")
      @meter_layout.z = CHAIN_SPRITE_Z
      @meter_layout.x = @x - (@meter_layout.width / 2) + CHAIN_LAYOUT_POSITION[0]
      @meter_layout.y = @y + CHAIN_LAYOUT_POSITION[1]
      @meter_image = Cache.system("Chain_Battle_Meter")
      @meter_cw = @meter_image.width
      @meter_ch = @meter_image.height
      @meter = Sprite.new
      @meter.bitmap = Bitmap.new(@meter_image.width, @meter_image.height)
      @meter.z = CHAIN_SPRITE_Z + 1
      @meter.x = @x - (@meter_image.width / 2) + CHAIN_METER_POSITION[0]
      @meter.y = @y + CHAIN_METER_POSITION[1]
      @meter.visible = false
      @meter_layout.visible = false
      update_meter
  end
  
  #--------------------------------------------------------------------------
  # ● Update Meter
  #--------------------------------------------------------------------------         
  def update_meter
      return if @meter == nil
      @meter.bitmap.clear
      range = @meter_cw * @duration[0] / @duration[1]
      m_scr = Rect.new(0,0,range,@meter_ch )
      @meter.bitmap.blt(0,0, @meter_image ,m_scr)
  end
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------      
  def create_skill_name
      @skill_name = Sprite.new
      @skill_name.bitmap = Bitmap.new(200,32)
      @skill_name.bitmap.font.name = CHAIN_WORD_FONT_NAME
      @skill_name.bitmap.font.size = CHAIN_WORD_FONT_SIZE
      @skill_name.bitmap.font.color = CHAIN_WORD_FONT_COLOR
      @skill_name.z = CHAIN_SPRITE_Z
      @skill_name.y = @y - 32 + CHAIN_COMMAND_WORD_POSITION[1]
      refresh_skill_name
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh Skill Name
  #--------------------------------------------------------------------------        
  def refresh_skill_name
      cm = @skillname.to_s.split(//).size
      @center = ((200 / @skill_name.bitmap.font.size) * cm / 2) + 5
      @org_x = @x - (@button_cw / 2) - 85 + CHAIN_COMMAND_WORD_POSITION[0]
      @skill_name.x = @org_x - 50
      @skill_name.bitmap.draw_text(0,0,200,32,@skillname.to_s,1)  
  end
      
  #--------------------------------------------------------------------------
  # ● Create Button Sprite
  #--------------------------------------------------------------------------      
  def create_button_sprite
      @button_image = Cache.system("Chain_Command")
      @button_cw = @button_image.width / 13
      @button_ch = @button_image.height
      @button_sprite = Sprite.new
      @button_sprite.bitmap = Bitmap.new(@button_cw,@button_ch)
      @button_sprite.z = CHAIN_SPRITE_Z + 1
      @button_sprite.ox = @button_cw / 2
      @button_sprite.oy = @button_ch / 2
      @button_sprite.x = @x + @button_sprite.ox - (@button_cw / 2)
      @button_sprite.y = @y + @button_sprite.oy      
  end

  #--------------------------------------------------------------------------
  # ● Refresh Button Command
  #--------------------------------------------------------------------------        
  def refresh_button_command
      return if @button_sprite == nil
      @duration[0] = @duration[1]
      command_list_check(@chain_command[@com_index])  
      @button_sprite.bitmap.clear
      button_scr = Rect.new(@com * @button_cw , 0,@button_cw,@button_ch)
      @button_sprite.bitmap.blt(0,0,@button_image,button_scr)
      @button_sprite.zoom_x = 2
      @button_sprite.zoom_y = 2   
      @button_sprite.opacity = 255
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose
  #--------------------------------------------------------------------------      
  def dispose
      dispose_button
      dispose_meter
      dispose_name
      dispose_icon_sprite
      $game_temp.chain_actions[3] = false
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Icon Sprite
  #--------------------------------------------------------------------------        
  def dispose_icon_sprite
      return if @icon_image == nil
      @icon_sprite.bitmap.dispose
      @icon_sprite.dispose
      @icon_image.dispose
      @icon_image = nil
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose Name
  #--------------------------------------------------------------------------        
  def dispose_name
      return if @skill_name == nil
      @skill_name.bitmap.dispose
      @skill_name.dispose
      @skill_name = nil
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Button
  #--------------------------------------------------------------------------        
  def dispose_button
      return if @button_image == nil
      @button_sprite.bitmap.dispose
      @button_sprite.dispose
      @button_image.dispose
      @button_image = nil
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Meter
  #--------------------------------------------------------------------------         
  def dispose_meter
      return if @meter_layout == nil
      @meter_layout.bitmap.dispose
      @meter_layout.dispose
      @meter_layout = nil
      @meter.bitmap.dispose
      @meter.dispose
      @meter_image.dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------      
  def update
      if @initial_wait > 0
         @initial_wait -= 1
         if @initial_wait == 0
            refresh_button_command
            @meter.visible = true
            @meter_layout.visible = true        
         end
         return  
      end
      if @wrong_commnad[0]
         update_fade_command
         return
      end      
      update_command
      update_sprite_button
      update_time
      update_meter
  end

  #--------------------------------------------------------------------------
  # ● Update Skill Name
  #--------------------------------------------------------------------------         
  def update_fade_command
      fade_speed = 6
      @skill_name.opacity -= fade_speed
      @meter.opacity -= fade_speed
      @meter_layout.opacity -= fade_speed
      @icon_sprite.opacity -= fade_speed
      @button_sprite.opacity -= fade_speed * 2
      missed if @meter.opacity == 0
  end
  
  #--------------------------------------------------------------------------
  # ● Update Skill Name
  #--------------------------------------------------------------------------        
  def update_skill_name
      return if @skill_name == nil
      if @skill_name.x < @org_x
         @skill_name.x += 3
         @icon_sprite.x += 3
         if @skill_name.x > @org_x
            @skill_name.x = @org_x
            @icon_sprite.x = @org_x2
         end
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Update Time
  #--------------------------------------------------------------------------
  def update_time
      return if @button_sprite == nil
      @duration[0] -= 1 if @duration[0] > 0
      wrong_command(1) if @duration[0] == 0
  end
  
  #--------------------------------------------------------------------------
  # ● Update Sprite Button
  #--------------------------------------------------------------------------        
  def update_sprite_button
      return if @button_sprite == nil
      if @button_sprite.zoom_x > 1.00
         @button_sprite.zoom_x -= 0.05
         @button_sprite.zoom_x = 1.00 if @button_sprite.zoom_x < 1.00
      end
      @button_sprite.zoom_y = @button_sprite.zoom_x
  end  

#--------------------------------------------------------------------------
# ● Update Command
#--------------------------------------------------------------------------      
def update_command
     if Input.trigger?(Input::X)
        check_command(0)
     elsif Input.trigger?(Input::Z)  
        check_command(1)
     elsif Input.trigger?(Input::Y)  
        check_command(2)
     elsif Input.trigger?(Input::A)   
        check_command(3)
     elsif Input.trigger?(Input::C)           
        check_command(4)
     elsif Input.trigger?(Input::B)        
        check_command(5)
     elsif Input.trigger?(Input::L)        
        check_command(6)
     elsif Input.trigger?(Input::R)        
        check_command(7)        
     elsif Input.trigger?(Input::RIGHT)      
        check_command(8)
     elsif Input.trigger?(Input::LEFT)
        check_command(9)
     elsif Input.trigger?(Input::DOWN)
        check_command(10)
     elsif Input.trigger?(Input::UP)  
        check_command(11)
     end   
end  
   
#--------------------------------------------------------------------------
# ● command_list_check
#--------------------------------------------------------------------------      
def command_list_check(command)
     case command
         when "A"
            @com = 0  
         when "D"
            @com = 1  
         when "S"
            @com = 2
         when "Shift"
            @com = 3
         when "Z"
            @com = 4
         when "X"
            @com = 5
         when "Q"
            @com = 6
         when "W"
            @com = 7            
         when "Right"
            @com = 8
         when "Left"
            @com = 9
         when "Down"
            @com = 10
         when "Up"  
            @com = 11
         else   
            @com = 12           
     end
end   

#--------------------------------------------------------------------------
# ● check_command
#--------------------------------------------------------------------------            
def check_command(com)
     index = 0
     if com != -1
        right_input = false
        for i in @chain_command
           if index == @com_index
              command_list_check(i)
              right_input = true if @com == com
           end  
           index += 1  
       end  
     else  
       command_list_check(@com_index)
       right_input = true
     end  
     if right_input
        next_command
     else  
        wrong_command(0)
     end  
end  
   
#--------------------------------------------------------------------------
# ● Next Command
#--------------------------------------------------------------------------            
def next_command   
     @com_index += 1   
     Audio.se_play("Audio/SE/" + CHAIN_RIGHT_SE, 100, 100)
     if @com_index == @chain_command.size
        @phase = 9
        @success = true
        return
     end  
     refresh_button_command
end     

#--------------------------------------------------------------------------
# ● wrong_command
#--------------------------------------------------------------------------              
def wrong_command(type = 0)
     @wrong_commnad[0] = true
     @wrong_commnad[1] = type
     @skill_name.bitmap.clear
     Audio.se_play("Audio/SE/" + CHAIN_WRONG_SE, 100, 100)        
     wname = type == 0 ? CHAIN_MISSED_WORDS[0] : CHAIN_MISSED_WORDS[1]
     @skill_name.bitmap.draw_text(0,0,200,32,wname.to_s,1)
end     
  
#--------------------------------------------------------------------------
# ● missed
#--------------------------------------------------------------------------               
def missed
     @success = false  
     @phase = 9  
end

end

$mog_rgss3_active_chain_commands = true[/pre]
回复

使用道具 举报

梦石
0
星屑
407
在线时间
1291 小时
注册时间
2013-1-12
回帖
3349

贵宾

发表于 2013-6-27 12:01:10 | 显示全部楼层
billyxiang123 发表于 2013-6-26 20:48
e,能通俗点吗?(多点图),还有,那个事件是什么事件?

就一般事件 現在新人要求好多
圖片.jpg

评分

参与人数 1星屑 +100 收起 理由
Sion + 100 感谢帮忙

查看全部评分


回复

使用道具 举报

梦石
0
星屑
50
在线时间
73 小时
注册时间
2013-2-18
回帖
43
 楼主| 发表于 2013-6-27 12:03:43 | 显示全部楼层
76213585 发表于 2013-6-27 12:01
就一般事件  現在新人要求好多

刚才我发错脚本了,额,

点评

找別人吧 我不想管了  发表于 2013-6-27 12:21
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部