Advertisement
Raizen

Akea Team Battle Skill

Mar 8th, 2015
440
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 15.02 KB | None | 0 0
  1. #=======================================================
  2. #        Akea Team Battle Skill
  3. # Autor: Raizen
  4. # Comunidade: http://www.centrorpg.com/
  5. # Compatibilidade: RMVXAce
  6. # Permite skills duplas, triplas, quadruplas etc... No mesmo estilo
  7. # encontrado em Chrono Trigger
  8. #=======================================================
  9. $imported ||= Hash.new
  10. $imported[:akea_team_battle] = true
  11. module Akea_Team_Skill
  12. Team_Skill = []
  13. Data_Skill = []
  14. # Nome da conjunção que ligará os nomes dos personagens na janela de batalha
  15. Conj = ' e '
  16.  
  17.  
  18. #==============================================================================
  19. # Aqui são configurados as habilidades duplas, triplas etc...
  20. # Para configurar siga o exemplo abaixo
  21. #Data_Skill[id] = {
  22. #'Actors' => [actor1, actor2],
  23. #'Skills' => [id1, id2],
  24. # aonde o id é o id da skill que será feita por mais de um membro
  25. # actor1, actor2 e assim em diante são os actors que participarão do skill
  26. # id1, id2 e assim em diante são as skills necessárias para liberar esse skill
  27. # ligando sempre id1 para actor1, id2 para actor2...
  28.  
  29. # IMPORTANTE: Adicione o skill de equipe nas classes, pode ser para level 1,
  30. # Ele apenas aparecerá caso todos os requisitos acima sejam atingidos
  31.  
  32. #==============================================================================
  33. Data_Skill[54] = { #id da skill
  34. 'Actors' => [1, 8], #actors envolvidos
  35. 'Skills' => [51, 51], #id das skills necessárias
  36. }
  37. Data_Skill[127] = { #id da skill
  38. 'Actors' => [1, 2, 4], #actors envolvidos
  39. 'Skills' => [3, 52, 89], #id das skills necessárias
  40. }
  41. Data_Skill[128] = { #id da skill
  42. 'Actors' => [2, 4], #actors envolvidos
  43. 'Skills' => [56, 89], #id das skills necessárias
  44. }
  45.  
  46.  
  47. #==============================================================================
  48. #------------------------------------------------------------------------------
  49. # -----------------------Configuração de Animações!! --------------------------
  50. #------------------------------------------------------------------------------
  51. #==============================================================================
  52. # Para configurar uma animação é simples, basta fazer exatamente como é realizado
  53. # no Akea Animated Battle System, porém colocando o actor na frente, ou seja
  54. # os mesmos comandos de lá, que são <movement>, <castskill>, <animation>,
  55. # <move_hit>
  56.  
  57. # pode adicionar quantas linhas quiser, mantendo o padrão de
  58. # [id_do_actor, 'tipo_de_movimento'],
  59.  
  60. # Para chamar essa animação, basta colocar no bloco de notas do skill o seguinte
  61. # <teamskill id>
  62. # Aonde id é o número na frente do Team_Skill[id]
  63. # por exemplo o Team_Skill[3]  você ativaria assim
  64. # <teamskill 3>
  65. #==============================================================================
  66. # Team_Skill[3] => Triple Vulcano Fist
  67. #==============================================================================
  68. Team_Skill[3] = [
  69. [1, '<movement 4>'],
  70. [1, '<movement 21>'],
  71. [1, '<movement 41>'],
  72. [1, '<castskill 95>'],
  73. [1, '<movement 41>'],
  74. [1, '<movement 2>'],
  75. [2, '<movement 4>'],
  76. [2, '<castskill 43>'],
  77. [2, '<movement 22>'],
  78. [2, '<castskill 43>'],
  79. [2, '<movement 22>'],
  80. [2, '<castskill 43>'],
  81. [2, '<movement 2>'],
  82. [4, '<movement 1>'],
  83. [4, '<movement 41>'],
  84. [4, '<make_hit 15>'],
  85. [4, '<movement 3>'],
  86. [4, '<castskill 95>'],
  87. [4, '<movement 46>'],
  88. [4, '<animation 2>'],
  89. [4, '<movement 2>'],
  90. ]
  91. #==============================================================================
  92. # Team_Skill[3] => Double Ice Combo
  93. #==============================================================================
  94. Team_Skill[4] = [
  95. [2, '<movement 4>'],
  96. [2, '<movement 22>'],
  97. [2, '<castskill 43>'],
  98. [2, '<movement 25>'],
  99. [2, '<movement 25>'],
  100. [2, '<movement 25>'],
  101. [2, '<movement 22>'],
  102. [2, '<castskill 43>'],
  103. [2, '<movement 2>'],
  104. [4, '<movement 4>'],
  105. [4, '<movement 4>'],
  106. [4, '<castskill 42>'],
  107. [4, '<movement 1>'],
  108. [4, '<movement 41>'],
  109. [4, '<movement 43>'],
  110. [4, '<make_hit 20>'],
  111. [4, '<movement 45>'],
  112. [4, '<make_hit 20>'],
  113. [4, '<animation 3>'],
  114. [4, '<movement 2>'],
  115. ]
  116. end
  117. #==============================================================================
  118. # ** Scene_Battle
  119. #------------------------------------------------------------------------------
  120. #  Esta classe executa o processamento da tela de batalha.
  121. #==============================================================================
  122. class Scene_Battle < Scene_Base
  123. alias :atbs_turn_start :turn_start
  124. alias :atbs_start :start
  125. alias :atbs_turn_start :turn_start
  126.   def start(*args, &block)
  127.     @force_team_skill = []
  128.     atbs_start(*args, &block)
  129.   end
  130.   #--------------------------------------------------------------------------
  131.   # * Início do turno
  132.   #--------------------------------------------------------------------------
  133.   def turn_start
  134.     atbs_turn_start
  135.     #@force_team_skill.sort! {|a, b| $game_actors[b].param(6) - $game_actors[a].param(6)}
  136.     #@force_team_skill.pop
  137.     for n in 0...@force_team_skill.size
  138.       BattleManager.remove_action(@force_team_skill[n])
  139.     end
  140.     @force_team_skill = []
  141.   end
  142.   #--------------------------------------------------------------------------
  143.   # * Verificação de notetags
  144.   #--------------------------------------------------------------------------
  145.   def atbs_team_skill(battle_notes)
  146.     @remember_old_user = @subject
  147.     @remember_old_target = @reuse_targets
  148.     for n in 0...battle_notes.size - 10
  149.       if battle_notes[n..n+10] == "<teamskill "
  150.         y = 0
  151.         y += 1 until battle_notes[n+11+y] == '>'
  152.         team_skill = battle_notes[n+11..n+10+y].to_i
  153.       end
  154.     end
  155.     for n in 0...Akea_Team_Skill::Team_Skill[team_skill].size
  156.       battle_notes = Akea_Team_Skill::Team_Skill[team_skill][n][1]
  157.       @subject = $game_actors[Akea_Team_Skill::Team_Skill[team_skill][n][0]]
  158.       @reuse_targets = @remember_old_target
  159.       if battle_notes[0..9] == "<movement "
  160.         y = 0
  161.         y += 1 until battle_notes[10+y] == '>'
  162.         insert_battle_commands(battle_notes[10..9+y].to_i)
  163.       elsif battle_notes[0..9] == "<make_hit "
  164.         y = 0
  165.         y += 1 until battle_notes[10+y] == '>'
  166.         insert_battle_damage(battle_notes[10..9+y].to_i)
  167.       elsif battle_notes[0..9] == "<move_hit "
  168.         y = 0
  169.         y += 1 until battle_notes[10+y] == '>'
  170.         old_sub = @subject
  171.         for z in 0...@reuse_targets.size
  172.           insert_battle_commands(battle_notes[10..9+y].to_i, @reuse_targets[z], old_sub)
  173.         end
  174.         @subject = old_sub
  175.           elsif battle_notes[0..10] == "<playmovie "
  176.             y = 0
  177.             y += 1 until battle_notes[11+y] == '>'
  178.             insert_battle_animations(battle_notes[11..11+y])
  179.       elsif battle_notes[0..10] == "<animation "
  180.         y = 0
  181.         y += 1 until battle_notes[11+y] == '>'
  182.         insert_battle_animations(battle_notes[11..11+y].to_i)
  183.       elsif battle_notes[0..10] == "<castskill "
  184.         y = 0
  185.         y += 1 until battle_notes[11+y] == '>'
  186.         insert_self_battle_animations(battle_notes[11..11+y].to_i)
  187.       elsif battle_notes[0..10] == "<condition "
  188.         y = 0
  189.         y += 1 until battle_notes[11+y] == '>'
  190.         all_battle_members[@subject.index].current_condition = battle_notes[11..11+y].to_i
  191.       end
  192.     end
  193.     @subject = @remember_old_user
  194.     @reuse_targets = @remember_old_target
  195.   end
  196.  
  197.   #--------------------------------------------------------------------------
  198.   # * Habilidade [Confirmação]
  199.   #--------------------------------------------------------------------------
  200.   def on_skill_ok
  201.     @skill = @skill_window.item
  202.     id = BattleManager.actor.id
  203.     BattleManager.actor.input.set_skill(@skill.id)
  204.     BattleManager.actor.last_skill.object = @skill
  205.     if !@skill.need_selection?
  206.       @skill_window.hide
  207.       next_command
  208.     elsif @skill.for_opponent?
  209.       select_enemy_selection
  210.     else
  211.       select_actor_selection
  212.     end
  213.     if Akea_Team_Skill::Data_Skill[@skill.id]
  214.       @force_team_skill << Akea_Team_Skill::Data_Skill[@skill.id]['Actors'].dup
  215.       @force_team_skill.last << @skill.id
  216.     end
  217.   end
  218. end
  219.  
  220.  
  221. #==============================================================================
  222. # ** Window_BattleSkill
  223. #------------------------------------------------------------------------------
  224. #  Esta janela para seleção de habilidades na tela de batalha.
  225. #==============================================================================
  226.  
  227. class Window_BattleSkill < Window_SkillList
  228. alias :atbs_include? :include?
  229.   #--------------------------------------------------------------------------
  230.   # * Inclusão do item na lista
  231.   #     item : item
  232.   #--------------------------------------------------------------------------
  233.   def include?(item)
  234.     return false if item.note.include?("<not_included>")
  235.     atbs_include?(item)
  236.   end
  237. end
  238. #==============================================================================
  239. # ** Game_Actor
  240. #------------------------------------------------------------------------------
  241. #  Esta classe gerencia os heróis. Ela é utilizada internamente pela classe
  242. # Game_Actors ($game_actors). A instância desta classe é referenciada
  243. # pela classe Game_Party ($game_party).
  244. #==============================================================================
  245.  
  246. class Game_Actor < Game_Battler
  247. alias :atbs_learn_skill :learn_skill
  248.   #--------------------------------------------------------------------------
  249.   # * Aprender habilidade
  250.   #     skill_id : ID da habilidade
  251.   #--------------------------------------------------------------------------
  252.   def learn_skill(skill_id)
  253.     atbs_learn_skill(skill_id)
  254.     for n in 0...Akea_Team_Skill::Data_Skill.size
  255.       if Akea_Team_Skill::Data_Skill[n]
  256.         for i in 0...Akea_Team_Skill::Data_Skill[n]['Actors'].size
  257.           atbs_learn_skill(n) if Akea_Team_Skill::Data_Skill[n]['Actors'][i] == @actor_id && skill_learn?($data_skills[Akea_Team_Skill::Data_Skill[n]['Skills'][i]])
  258.         end
  259.       end
  260.     end
  261.   end
  262. end
  263. #==============================================================================
  264. # ** Window_SkillList
  265. #------------------------------------------------------------------------------
  266. #  Esta janela exibe uma lista de habilidades usáveis na tela de habilidades.
  267. #==============================================================================
  268.  
  269. class Window_SkillList < Window_Selectable
  270. alias :atbs_include? :include?
  271.   #--------------------------------------------------------------------------
  272.   # * Inclusão do item na lista
  273.   #     item : item
  274.   #--------------------------------------------------------------------------
  275.   def include?(item)
  276.     if Akea_Team_Skill::Data_Skill[item.id]
  277.       check_inc = true
  278.       Akea_Team_Skill::Data_Skill[item.id]['Actors'].each{|member| check_inc = false unless $game_party.members.include?($game_actors[member])}
  279.       for n in 0...Akea_Team_Skill::Data_Skill[item.id]['Actors'].size
  280.        check_inc = false unless $game_actors[Akea_Team_Skill::Data_Skill[item.id]['Actors'][n]].skill_learn?($data_skills[Akea_Team_Skill::Data_Skill[item.id]['Skills'][n]])
  281.       end
  282.       atbs_include?(item) && check_inc
  283.     else
  284.       atbs_include?(item)
  285.     end
  286.   end
  287. end
  288.  
  289. #==============================================================================
  290. # ** BattleManager
  291. #------------------------------------------------------------------------------
  292. #  Este módulo gerencia o andamento da batalha.
  293. #==============================================================================
  294.  
  295. module BattleManager
  296.   #--------------------------------------------------------------------------
  297.   # * Forçar ação
  298.   #--------------------------------------------------------------------------
  299.   def self.remove_action(battler)
  300.     for i in 0...battler.size - 1
  301.       @action_battlers.delete($game_actors[battler[i]]) unless $game_actors[battler[i]].current_action.item == $data_skills[battler.last]
  302.     end
  303.   end
  304. end
  305. #==============================================================================
  306. # ** Game_Battler
  307. #------------------------------------------------------------------------------
  308. #  Esta classe gerencia os battlers. Controla a adição de sprites e ações
  309. # dos lutadores durante o combate.
  310. # É usada como a superclasse das classes Game_Enemy e Game_Actor.
  311. #==============================================================================
  312.  
  313. class Game_Battler < Game_BattlerBase
  314. alias :atbs_make_damage_value :make_damage_value
  315.   #--------------------------------------------------------------------------
  316.   # * Cálculo de dano
  317.   #     user : usuário
  318.   #     item : habilidade/item
  319.   #--------------------------------------------------------------------------
  320.   def make_damage_value(user, item)
  321.     unless Akea_Team_Skill::Data_Skill[item.id]
  322.       atbs_make_damage_value(user, item)
  323.       return
  324.     end
  325.     value = 0
  326.     for n in 0...Akea_Team_Skill::Data_Skill[item.id]['Actors'].size - 1
  327.       user = $game_actors[Akea_Team_Skill::Data_Skill[item.id]['Actors'][n]]
  328.       value += item.damage.eval(user, self, $game_variables)
  329.       value *= item_element_rate(user, item)
  330.       value *= pdr if item.physical?
  331.       value *= mdr if item.magical?
  332.       value *= rec if item.damage.recover?
  333.       value = apply_critical(value) if @result.critical
  334.       value = apply_variance(value, item.damage.variance)
  335.       value = apply_guard(value)
  336.     end
  337.     @result.make_damage(value.to_i, item)
  338.   end
  339. end
  340.  
  341. #==============================================================================
  342. # ** Window_BattleLog
  343. #------------------------------------------------------------------------------
  344. #  Esta janela exibe o progresso da luta. Não exibe o quadro da
  345. # janela, é tratado como uma janela por conveniência.
  346. #==============================================================================
  347.  
  348. class Window_BattleLog < Window_Selectable
  349. alias :atbs_display_use_item :display_use_item
  350.     #--------------------------------------------------------------------------
  351.   # * Exibição de uso de habilidade/item
  352.   #     subject : lutador
  353.   #     item    : habilidade/item
  354.   #--------------------------------------------------------------------------
  355.   def display_use_item(subject, item)
  356.     if item.is_a?(RPG::Skill)
  357.       unless Akea_Team_Skill::Data_Skill[item.id]
  358.         atbs_display_use_item(subject, item)
  359.         return
  360.       end
  361.       name = ''
  362.       for n in 0...Akea_Team_Skill::Data_Skill[item.id]['Actors'].size
  363.         next unless Akea_Team_Skill::Data_Skill[item.id]['Actors'][n]
  364.         if n == 0
  365.           name += $game_actors[Akea_Team_Skill::Data_Skill[item.id]['Actors'][n]].name
  366.         elsif n != Akea_Team_Skill::Data_Skill[item.id]['Actors'].size - 1
  367.           name += ', ' + $game_actors[Akea_Team_Skill::Data_Skill[item.id]['Actors'][n]].name
  368.         else
  369.           name += Akea_Team_Skill::Conj + $game_actors[Akea_Team_Skill::Data_Skill[item.id]['Actors'][n]].name
  370.         end
  371.       end
  372.       add_text(name + item.message1)
  373.       unless item.message2.empty?
  374.         wait
  375.         add_text(item.message2)
  376.       end
  377.     else
  378.       atbs_display_use_item(subject, item)
  379.     end
  380.   end
  381. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement