Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #==============================================================================#
- # ** Pirate Acttion Battle System |PABS|
- # Autor: NumPad [19/03/2013]
- # Créditos/Agradecimentos:
- # * Khas, pelas aulas de RGSS3, de quais me inspirei para fazer esse ABS.
- #==============================================================================#
- ################################################################################
- # Versão 0.00.0000000.00000000000000000000.00.0.0.0.000.2
- # Data 03-06-2013
- # Essa versão tem:
- # Tecla de ataque: A
- # Animações do jogador[ataque] funcionais e sem precisar de configuração;
- # Animações do monstro[ataque] funcionais e sem precisar de configuração;
- # Inimigo da XP;
- # Inimigo da Gold;
- # IA é por eventos mesmo; [É um ponto bem negativo de ABS talvez...]
- # É só botar um comentário no evento, nada mais. Rápido e Prático!
- #------------------------------------------------------------------------------#
- # Para utilizar:
- # Apenas bote esse comando no Comentário de um evento -> type:enemy=id
- # Sendo id o id do monstro no Database!
- ################################################################################
- #==============================================================================#
- # ** ABS_Config
- #------------------------------------------------------------------------------
- # * Módulo configurável, possui opções para você customizar o PABS.
- #==============================================================================#
- module PABS_Config
- # Opacidade que dimuniu ao morrer:
- Opacity_Burn = 10
- # Tempo para o inimigo atacar novamente:
- Enemy_Recover = 40
- # Tempo para o player atacar novamente:
- Player_Recover = 40
- # Som de morte:
- Death_SE = 'Audio/SE/009-System09'
- end
- #==============================================================================#
- # ** PABS_Enemy
- #------------------------------------------------------------------------------#
- # * Esta classe engloba o inimigo. Aqui é definido seu id e atributos.
- #==============================================================================#
- class PABS_Enemy
- #--------------------------------------------------------------------------
- attr_reader(:name, :animation, :exp)
- #--------------------------------------------------------------------------
- attr_accessor(:hp, :attack, :defense)
- #--------------------------------------------------------------------------
- # * Inicialização
- #--------------------------------------------------------------------------
- def initialize(id)
- @id = id
- @name = name
- @animation = animation2_id
- @hp = base_maxhp
- @attack = base_atk
- @defense = base_pdef
- @exp = exp
- @gold = gold
- end # def
- #--------------------------------------------------------------------------
- # * Retornando atributos
- #--------------------------------------------------------------------------
- def name; return $data_enemies[@id].name; end
- def base_maxhp; return $data_enemies[@id].maxhp; end
- def base_maxsp; return $data_enemies[@id].maxsp; end
- def base_str; return $data_enemies[@id].str; end
- def base_dex; return $data_enemies[@id].dex; end
- def base_agi; return $data_enemies[@id].agi; end
- def base_int; return $data_enemies[@id].int; end
- def base_atk; return $data_enemies[@id].atk; end
- def base_pdef; return $data_enemies[@id].pdef; end
- def base_mdef; return $data_enemies[@id].mdef; end
- def base_eva; return $data_enemies[@id].eva; end
- def animation1_id; return $data_enemies[@id].animation1_id; end
- def animation2_id; return $data_enemies[@id].animation2_id; end
- def exp; return $data_enemies[@id].exp; end
- def gold; return $data_enemies[@id].gold; end
- #--------------------------------------------------------------------------
- end # class
- #==============================================================================#
- # ** Game_Map
- #------------------------------------------------------------------------------#
- # * Esta classe engloba o mapa. Aqui é criada uma Array([]) com os inimigos no
- # mapa.
- #==============================================================================#
- class Game_Map
- #--------------------------------------------------------------------------
- attr_accessor :enemies
- #--------------------------------------------------------------------------
- alias abs_setup setup
- #--------------------------------------------------------------------------
- # * Configurar mapa
- #--------------------------------------------------------------------------
- def setup(map_id)
- @enemies.nil? ? @enemies = [] : @enemies.clear
- abs_setup(map_id)
- end # def
- end # class
- #==============================================================================#
- # ** Game_Event [INIMIGO]
- #------------------------------------------------------------------------------#
- # * Esta é a classe que engloba os eventos. Aqui é que a 'mágica' acontece.
- #==============================================================================#
- class Game_Event < Game_Character
- #--------------------------------------------------------------------------
- include PABS_Config
- #--------------------------------------------------------------------------
- attr_reader :enemy
- #--------------------------------------------------------------------------
- alias abs_initialize initialize
- alias abs_refresh refresh
- alias abs_update update
- alias abs_start start
- #--------------------------------------------------------------------------
- # * Inicializar
- #--------------------------------------------------------------------------
- def initialize(map_id, event)
- @enemy = nil
- @hero = $game_party.actors[0]
- @recover = 0
- abs_initialize(map_id, event)
- end # def
- #--------------------------------------------------------------------------
- # * Atualizar
- #--------------------------------------------------------------------------
- def refresh
- abs_refresh
- check_enemy
- end # def
- #--------------------------------------------------------------------------
- # * Checar inimigo
- #--------------------------------------------------------------------------
- def check_enemy
- unless @enemy.nil?
- @enemy = nil
- $game_map.enemies.delete(self) if $game_map.enemies.include?(self)
- end # unless
- return if @list.nil?
- for command in @list
- next unless command.code == 108 || command.code == 408
- if command.parameters[0].include?("type:enemy=")
- id = command.parameters[0].sub("type:enemy=", "")
- @enemy = PABS_Enemy.new(id.to_i)
- @trigger = 2
- $game_map.enemies.push(self)
- puts "#{@enemy.name}(#{id.to_i}) criado!"
- end # if
- end # for
- end # def
- #--------------------------------------------------------------------------
- # * Sofrer dano
- #--------------------------------------------------------------------------
- def damage_enemy(value)
- value -= @enemy.defense
- value = 0 if value < 0
- @enemy.hp -= value
- $game_map.enemies.delete(self) if @enemy.hp <= 0
- end # def
- #--------------------------------------------------------------------------
- # * Atualização
- #--------------------------------------------------------------------------
- def update
- @recover -= 1 if @recover > 0
- if @enemy != nil
- update_enemy_death if @enemy.hp <= 0
- end # if
- abs_update
- end # def
- #--------------------------------------------------------------------------
- # * Inimigo morrer
- # Esse método processa a morte de um inimigo no mapa.
- #--------------------------------------------------------------------------
- def update_enemy_death
- if @opacity > 0
- @opacity -= Opacity_Burn
- else
- Audio.se_play(Death_SE)
- @character_name = ""
- @opacity = 255
- @priority_type = 0
- @trigger = 0
- @hero.exp += @enemy.exp
- $game_party.gain_gold(@enemy.gold)
- @enemy = nil
- end #if
- end # def
- #--------------------------------------------------------------------------
- # * Começar
- # Esse médoto define se vai iniciar um evento normal, ou um evento ABS.
- #--------------------------------------------------------------------------
- def start
- @enemy.nil? ? abs_start : attack
- end # def
- #--------------------------------------------------------------------------
- # * Atacar o jogador
- # Esse método executa o ataque do inimigo no jogador, e re-definie seu tempo
- # de espera para atacar novamente.
- #--------------------------------------------------------------------------
- def attack
- return if @recover > 0
- return if @enemy.hp <= 0
- $game_player.animation_id = @enemy.animation# if $enemy_damage > 0
- $game_player.damage_hero(@enemy.attack)
- @recover = Enemy_Recover
- end # def
- end # class
- #==============================================================================#
- # ** Game_Player [JOGADOR]
- #------------------------------------------------------------------------------#
- # * Esta classe engloba o Jogador. Aqui é criado as funções de ataque, de ser
- # atacado e etc.
- #==============================================================================#
- class Game_Player < Game_Character
- #--------------------------------------------------------------------------
- include PABS_Config
- #--------------------------------------------------------------------------
- alias abs_initialize initialize
- alias abs_update update
- #--------------------------------------------------------------------------
- # * Inicialização
- #--------------------------------------------------------------------------
- def initialize
- @recover = 0
- @player_died = false
- abs_initialize
- end # def
- #--------------------------------------------------------------------------
- # * Atualização
- #--------------------------------------------------------------------------
- def update
- @recover -= 1 if @recover > 0
- update_attack if Input.trigger?(Input::X)
- update_player_death if @player_died
- abs_update
- end # def
- #--------------------------------------------------------------------------
- # * Ataque ao inimigo
- #--------------------------------------------------------------------------
- def update_attack
- return if @recover > 0
- for enemy in $game_map.enemies
- ex = enemy.x
- ey = enemy.y
- px = @x - ex
- py = @y - ey
- case @direction
- when 2 # Baixo
- attack_enemy(enemy) if px == 0 && py == -1
- when 4 # Esquerda
- attack_enemy(enemy) if py == 0 && px == 1
- when 6 # Direita
- attack_enemy(enemy) if py == 0 && px == -1
- when 8 # Cima
- attack_enemy(enemy) if px == 0 && py == 1
- end # case
- end # for
- end # def
- #--------------------------------------------------------------------------
- # * Causar dano
- #--------------------------------------------------------------------------
- def attack_enemy(event)
- puts "Inimigos no mapa: #{$game_map.enemies.size}"
- event.damage_enemy($game_party.actors[0].base_atk)
- event.animation_id = $game_party.actors[0].animation2_id #if $player_damage > 0
- @recover = Player_Recover
- end # def
- #--------------------------------------------------------------------------
- # * Sofrer dano
- #--------------------------------------------------------------------------
- def damage_hero(value)
- return if @player_died
- hero = $game_party.actors[0]
- value -= hero.base_pdef
- value = 0 if value < 0
- if value > hero.hp
- hero.hp = 1
- @player_died = true
- Audio.se_play(Death_SE)
- else
- hero.hp -= value
- end # if
- end # end
- #--------------------------------------------------------------------------
- # * Jogador morrer
- #--------------------------------------------------------------------------
- def update_player_death
- if @opacity > 0
- @opacity -= Opacity_Burn
- else
- $scene = Scene_Gameover.new
- end #if
- end # def
- end # class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement