Advertisement
iNumPad

PABS 000.1

Jun 3rd, 2013
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 12.34 KB | None | 0 0
  1. #==============================================================================#
  2. # ** Pirate Acttion Battle System |PABS|
  3. # Autor: NumPad                                                     [19/03/2013]
  4. # Créditos/Agradecimentos:
  5. # * Khas, pelas aulas de RGSS3, de quais me inspirei para fazer esse ABS.
  6. #==============================================================================#
  7. ################################################################################
  8. # Versão 0.00.0000000.00000000000000000000.00.0.0.0.000.2
  9. # Data 03-06-2013
  10. # Essa versão tem:
  11. # Tecla de ataque: A
  12. # Animações do jogador[ataque] funcionais e sem precisar de configuração;
  13. # Animações do monstro[ataque] funcionais e sem precisar de configuração;
  14. # Inimigo da XP;
  15. # Inimigo da Gold;
  16. # IA é por eventos mesmo; [É um ponto bem negativo de ABS talvez...]
  17. # É só botar um comentário no evento, nada mais. Rápido e Prático!
  18. #------------------------------------------------------------------------------#
  19. # Para utilizar:
  20. # Apenas bote esse comando no Comentário de um evento -> type:enemy=id
  21. # Sendo id o id do monstro no Database!
  22. ################################################################################
  23. #==============================================================================#
  24. # ** ABS_Config
  25. #------------------------------------------------------------------------------
  26. # * Módulo configurável, possui opções para você customizar o PABS.
  27. #==============================================================================#
  28. module PABS_Config
  29.   # Opacidade que dimuniu ao morrer:
  30.   Opacity_Burn      = 10
  31.   # Tempo para o inimigo atacar novamente:
  32.   Enemy_Recover     = 40
  33.   # Tempo para o player atacar novamente:
  34.   Player_Recover    = 40
  35.   # Som de morte:
  36.   Death_SE          = 'Audio/SE/009-System09'
  37. end
  38.  
  39. #==============================================================================#
  40. # ** PABS_Enemy
  41. #------------------------------------------------------------------------------#
  42. # * Esta classe engloba o inimigo. Aqui é definido seu id e atributos.
  43. #==============================================================================#
  44.  
  45. class PABS_Enemy
  46.   #--------------------------------------------------------------------------
  47.   attr_reader(:name, :animation, :exp)
  48.   #--------------------------------------------------------------------------
  49.   attr_accessor(:hp, :attack, :defense)
  50.   #--------------------------------------------------------------------------
  51.   # * Inicialização
  52.   #--------------------------------------------------------------------------
  53.   def initialize(id)
  54.     @id        = id
  55.     @name      = name
  56.     @animation = animation2_id
  57.     @hp        = base_maxhp
  58.     @attack    = base_atk
  59.     @defense   = base_pdef
  60.     @exp       = exp
  61.     @gold      = gold
  62.   end # def
  63.   #--------------------------------------------------------------------------
  64.   # * Retornando atributos
  65.   #--------------------------------------------------------------------------
  66.   def name; return $data_enemies[@id].name; end
  67.   def base_maxhp;     return $data_enemies[@id].maxhp;         end
  68.   def base_maxsp;     return $data_enemies[@id].maxsp;         end
  69.   def base_str;       return $data_enemies[@id].str;           end
  70.   def base_dex;       return $data_enemies[@id].dex;           end
  71.   def base_agi;       return $data_enemies[@id].agi;           end
  72.   def base_int;       return $data_enemies[@id].int;           end
  73.   def base_atk;       return $data_enemies[@id].atk;           end
  74.   def base_pdef;      return $data_enemies[@id].pdef;          end
  75.   def base_mdef;      return $data_enemies[@id].mdef;          end
  76.   def base_eva;       return $data_enemies[@id].eva;           end
  77.   def animation1_id;  return $data_enemies[@id].animation1_id; end
  78.   def animation2_id;  return $data_enemies[@id].animation2_id; end
  79.   def exp;            return $data_enemies[@id].exp;           end
  80.   def gold;           return $data_enemies[@id].gold;          end
  81.   #--------------------------------------------------------------------------
  82. end # class
  83.  
  84. #==============================================================================#
  85. # ** Game_Map
  86. #------------------------------------------------------------------------------#
  87. # * Esta classe engloba o mapa. Aqui é criada uma Array([]) com os inimigos no
  88. # mapa.
  89. #==============================================================================#
  90.  
  91. class Game_Map
  92.   #--------------------------------------------------------------------------
  93.   attr_accessor :enemies
  94.   #--------------------------------------------------------------------------
  95.   alias abs_setup setup
  96.   #--------------------------------------------------------------------------
  97.   # * Configurar mapa
  98.   #--------------------------------------------------------------------------
  99.   def setup(map_id)
  100.     @enemies.nil? ? @enemies = [] : @enemies.clear
  101.     abs_setup(map_id)
  102.   end # def
  103. end # class
  104.  
  105. #==============================================================================#
  106. # ** Game_Event [INIMIGO]
  107. #------------------------------------------------------------------------------#
  108. # * Esta é a classe que engloba os eventos. Aqui é que a 'mágica' acontece.
  109. #==============================================================================#
  110.  
  111. class Game_Event < Game_Character
  112.   #--------------------------------------------------------------------------
  113.   include PABS_Config
  114.   #--------------------------------------------------------------------------
  115.   attr_reader :enemy
  116.   #--------------------------------------------------------------------------
  117.   alias abs_initialize initialize
  118.   alias abs_refresh    refresh
  119.   alias abs_update     update
  120.   alias abs_start      start
  121.   #--------------------------------------------------------------------------
  122.   # * Inicializar
  123.   #--------------------------------------------------------------------------
  124.   def initialize(map_id, event)
  125.     @enemy   = nil
  126.     @hero = $game_party.actors[0]
  127.     @recover = 0
  128.     abs_initialize(map_id, event)
  129.   end # def
  130.   #--------------------------------------------------------------------------
  131.   # * Atualizar
  132.   #--------------------------------------------------------------------------
  133.   def refresh
  134.     abs_refresh
  135.     check_enemy
  136.   end # def
  137.   #--------------------------------------------------------------------------
  138.   # * Checar inimigo
  139.   #--------------------------------------------------------------------------
  140.   def check_enemy
  141.     unless @enemy.nil?
  142.       @enemy = nil
  143.       $game_map.enemies.delete(self) if $game_map.enemies.include?(self)
  144.     end # unless
  145.     return if @list.nil?
  146.     for command in @list
  147.       next unless command.code == 108 || command.code == 408
  148.       if command.parameters[0].include?("type:enemy=")
  149.         id       = command.parameters[0].sub("type:enemy=", "")
  150.         @enemy   = PABS_Enemy.new(id.to_i)
  151.         @trigger = 2
  152.         $game_map.enemies.push(self)
  153.         puts "#{@enemy.name}(#{id.to_i}) criado!"
  154.       end # if
  155.     end # for
  156.   end # def
  157.   #--------------------------------------------------------------------------
  158.   # * Sofrer dano
  159.   #--------------------------------------------------------------------------
  160.   def damage_enemy(value)
  161.     value     -= @enemy.defense
  162.     value      = 0 if value < 0
  163.     @enemy.hp -= value
  164.     $game_map.enemies.delete(self) if @enemy.hp <= 0
  165.   end # def
  166.   #--------------------------------------------------------------------------
  167.   # * Atualização
  168.   #--------------------------------------------------------------------------
  169.   def update
  170.     @recover  -= 1 if @recover > 0
  171.     if @enemy != nil
  172.       update_enemy_death if @enemy.hp <= 0
  173.     end # if
  174.     abs_update
  175.   end # def
  176.   #--------------------------------------------------------------------------
  177.   # * Inimigo morrer
  178.   # Esse método processa a morte de um inimigo no mapa.
  179.   #--------------------------------------------------------------------------
  180.   def update_enemy_death
  181.     if @opacity > 0
  182.       @opacity -= Opacity_Burn
  183.     else
  184.       Audio.se_play(Death_SE)
  185.       @character_name = ""
  186.       @opacity        = 255
  187.       @priority_type  = 0
  188.       @trigger        = 0
  189.       @hero.exp += @enemy.exp
  190.       $game_party.gain_gold(@enemy.gold)
  191.       @enemy          = nil
  192.     end #if
  193.   end # def
  194.   #--------------------------------------------------------------------------
  195.   # * Começar
  196.   # Esse médoto define se vai iniciar um evento normal, ou um evento ABS.
  197.   #--------------------------------------------------------------------------
  198.   def start
  199.     @enemy.nil? ? abs_start : attack
  200.   end # def
  201.   #--------------------------------------------------------------------------
  202.   # * Atacar o jogador
  203.   # Esse método executa o ataque do inimigo no jogador, e re-definie seu tempo
  204.   # de espera para atacar novamente.
  205.   #--------------------------------------------------------------------------
  206.   def attack
  207.     return if @recover        > 0
  208.     return if @enemy.hp      <= 0
  209.     $game_player.animation_id = @enemy.animation# if $enemy_damage > 0
  210.     $game_player.damage_hero(@enemy.attack)
  211.     @recover = Enemy_Recover
  212.   end # def
  213. end # class
  214.  
  215. #==============================================================================#
  216. # ** Game_Player [JOGADOR]
  217. #------------------------------------------------------------------------------#
  218. # * Esta classe engloba o Jogador. Aqui é criado as funções de ataque, de ser
  219. # atacado e etc.
  220. #==============================================================================#
  221.  
  222. class Game_Player < Game_Character
  223.   #--------------------------------------------------------------------------
  224.   include PABS_Config
  225.   #--------------------------------------------------------------------------
  226.   alias abs_initialize initialize
  227.   alias abs_update     update
  228.   #--------------------------------------------------------------------------
  229.   # * Inicialização
  230.   #--------------------------------------------------------------------------
  231.   def initialize
  232.     @recover     = 0
  233.     @player_died = false
  234.     abs_initialize
  235.   end # def
  236.   #--------------------------------------------------------------------------
  237.   # * Atualização
  238.   #--------------------------------------------------------------------------
  239.   def update
  240.     @recover -= 1 if @recover > 0
  241.     update_attack if Input.trigger?(Input::X)
  242.     update_player_death if @player_died
  243.     abs_update
  244.   end # def
  245.   #--------------------------------------------------------------------------
  246.   # * Ataque ao inimigo
  247.   #--------------------------------------------------------------------------
  248.   def update_attack
  249.     return if @recover > 0
  250.     for enemy in $game_map.enemies
  251.       ex = enemy.x
  252.       ey = enemy.y
  253.       px = @x - ex
  254.       py = @y - ey
  255.       case @direction
  256.       when 2 # Baixo
  257.         attack_enemy(enemy) if px == 0 && py == -1
  258.       when 4 # Esquerda
  259.         attack_enemy(enemy) if py == 0 && px == 1
  260.       when 6 # Direita
  261.         attack_enemy(enemy) if py == 0 && px == -1
  262.       when 8 # Cima
  263.         attack_enemy(enemy) if px == 0 && py == 1
  264.       end # case
  265.     end # for
  266.   end # def
  267.   #--------------------------------------------------------------------------
  268.   # * Causar dano
  269.   #--------------------------------------------------------------------------
  270.   def attack_enemy(event)
  271.     puts "Inimigos no mapa: #{$game_map.enemies.size}"
  272.     event.damage_enemy($game_party.actors[0].base_atk)
  273.     event.animation_id = $game_party.actors[0].animation2_id #if $player_damage > 0
  274.     @recover = Player_Recover
  275.   end # def  
  276.   #--------------------------------------------------------------------------
  277.   # * Sofrer dano
  278.   #--------------------------------------------------------------------------
  279.   def damage_hero(value)
  280.     return if @player_died
  281.     hero   = $game_party.actors[0]
  282.     value -= hero.base_pdef
  283.     value  = 0 if value < 0
  284.     if value > hero.hp
  285.       hero.hp      = 1
  286.       @player_died = true
  287.       Audio.se_play(Death_SE)
  288.     else
  289.       hero.hp -= value
  290.     end # if
  291.   end # end
  292.   #--------------------------------------------------------------------------
  293.   # * Jogador morrer
  294.   #--------------------------------------------------------------------------
  295.   def update_player_death
  296.     if @opacity > 0
  297.       @opacity -= Opacity_Burn
  298.     else
  299.       $scene    = Scene_Gameover.new
  300.     end #if
  301.   end # def
  302. end # class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement