O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

SABS - RvdD

Iniciado por Speed, 29/03/2013 às 22:50

29/03/2013 às 22:50 Última edição: 20/01/2017 às 09:34 por King Gerar
SABS Do Sped


Autor:Sped rvdD
Engine:Rmvx Ace
Lag gerado:Baixo/Nulo

Olá, esse é meu primeiro SABS está bem básico mas funcional e sem bugs!
Obrigado por ler e baixar (:

Informações:
Tudo sobre os inimigos está no script
O site que foi hospedado a Demo é um site russo, por isso não se espantem (:
O botão de ataque é a letra "A" que pode ser modificada no script.

Screen:
Spoiler
[close]

Download
Clique Aqui

MediaFire Link

Para quem quiser apenas o script:
Spoiler
#---------------------------------------------------------------------------------
#Script criado por Sped RvdD
#Sistema de batalha básico 1.0
#Para criar um inimigo no mapa basta colocar um comentário "enemy=x"
#onde X é o numero do inimigo no database
#----------------------------------------------------------------------------------
#Lag gerado = 0
#Se usar dar os créditos a Sped RvdD
#---------------------------------------------------------------------------------
module ABS_Config
  Default_Animation = 1
  Opacity_Burn = 10
  Enemy_Recover = 60
  Attack_Key = :X #Tecla de ataque, configuravel de acordo com as teclas do Rmvxace
  Player_Recover = 40
end

class Game_Map
  attr_accessor :enemies
  attr_accessor :damage_sprites
  alias abs_setup setup
  def setup(map_id)
    @enemies.nil? ? @enemies = [] : @enemies.clear
    abs_setup(map_id)
  end
end

class ABS_Enemy
  include ABS_Config
  attr_accessor :hp
  attr_accessor :attack
  attr_accessor :defense
  attr_reader :name
  attr_reader :animation
  def initialize(id)
    enemy = Game_Enemy.new(0,id)
    @name = enemy.name
    note = enemy.enemy.note
    if note.include?("Animation=")
      aid = note.sub("Animation=","")
      @animation = aid.to_i
    else
      @animation = Default_Animation
    end
    @hp = enemy.mhp
    @attack = enemy.atk
    @defense = enemy.def
  end
end

  class Game_Event < Game_Character
  attr_reader :enemy
  alias abs_setup_page_settings setup_page_settings
  alias abs_initialize initialize
  alias abs_update update
  alias abs_start start
  def initialize(map_id, event)
    @enemy = nil
    @recover = 0
    abs_initialize(map_id, event)
  end
  def setup_page_settings
    abs_setup_page_settings
    check_enemy
  end  
  def check_enemy
    unless @enemy.nil?
      @enemy = nil 
     $game_map.enemies.delete(self) if $game_map.enemies.include?(self)
   end
    return if @list.nil?
    for command in @list
      next unless command.code == 108 or command.code == 408
      if command.parameters[0].include?("enemy=")
        id = command.parameters[0].sub("enemy=","")
        @enemy = ABS_Enemy.new(id.to_i)
        @trigger = 2
        $game_map.enemies.push(self)
      end
    end
  end
  def damage_enemy(value)
    jump(0,0)
    value -= @enemy.defense
    value = 0 if value < 0
    $game_map.damage_sprites.push(Damage_Sprite.new(self,value))
    @enemy.hp -= value
    if @enemy.hp <= 0
      $game_map.enemies.delete(self)
      RPG::SE.new("Collapse1",80).play
    end
  end
  def update
    if @enemy != nil
      @recover -= 1 if @recover > 0
     update_kill if @enemy.hp <= 0
    end
    abs_update
  end
  def update_kill 
    if @opacity > 0
      @opacity -= ABS_Config::Opacity_Burn
    else
      @character_name = ""
      @opacity = 255
      @priority_type = 0
      @trigger = 0
      @enemy = nil 
    end
  end
  def start
    @enemy.nil? ? abs_start : attack
  end
  def attack
    return if @enemy.hp <= 0 or @recover > 0
    @recover = ABS_Config::Enemy_Recover
    $game_player.animation_id = @enemy.animation
    $game_player.damage_hero(@enemy.attack)
  end
end

class Game_Player < Game_Character
  alias abs_initialize initialize
  alias abs_update update
  
  def initialize
    @recover = 0
    abs_initialize
  end
  
  def update
    @recover -= 1 if @recover > 0 
    update_attack if @recover == 0 and Input.trigger?(ABS_Config::Attack_Key)
    update_kill if @kill_player
    abs_update
  end
  
  def update_attack
    return if @kill_player
    for enemy in $game_map.enemies
      ax = @x - enemy.x
      ay = @y- enemy.y
      case @direction
      when 2
        attack_enemy(enemy) if ax == 0 and ay == -1
      when 4
        attack_enemy(enemy) if ay == 0 and ax == 1
      when 6
        attack_enemy(enemy) if ay == 0 and ax == -1
      when 8
        attack_enemy(enemy) if ax == 0 and ay == 1
      end
    end
  end
  
  def attack_enemy(event)
    hero = $game_party.members[0]
    event.damage_enemy(hero.atk)
    event.animation_id = hero.weapons[0].animation_id
    @recover = ABS_Config::Player_Recover
  end
  
  def damage_hero(value)
    jump(0,0)
    return if @kill_player
    hero = $game_party.members[0]
    value -= hero.def
    value = 0 if value < 0
    $game_map.damage_sprites.push(Damage_Sprite.new(self,value))
    if value > hero.hp
      hero.hp = 1
      @kill_player = true
      RPG::SE.new("Collapse1",80).play
    else
      hero.hp -= value
    end
  end
    def update_kill 
    if @opacity > 0
      @opacity -= ABS_Config::Opacity_Burn
    else
      SceneManager.goto(Scene_Gameover)
    end
  end
end

class Spriteset_Map
  alias abs_initialize initialize
  alias abs_update update
  alias abs_dispose dispose  
  def initialize 
    $game_map.damage_sprites =[]
    abs_initialize
  end
  def update
    abs_update
    trash = []
    for sprite in $game_map.damage_sprites
      sprite.update
      trash.push(sprite) if sprite.disposed?
    end
    for item in trash
      $game_map.damage_sprites.delete(item)
    end  
    trash.clear
  end
  def dispose
    abs_dispose
    for sprite in $game_map.damage_sprites
      sprite.bitmap.dispose
      sprite.dispose
    end
    $game_map.damage_sprites.clear
  end
end
  
class Damage_Sprite < Sprite
  
  def initialize(target,value)
    super(nil)
    @target = target
    self.bitmap = Bitmap.new(100,20)
    self.bitmap.draw_text(0,0,100,20,value,1)
    self.ox = 50
    self.x = @target.screen_x
    self.y = @target.screen_y - 40
    self.z = 999
    @timer = 20
  end
  def update
    self.x = @target.screen_x
    self.y = @target.screen_y - 40
    if @timer > 0
      @timer -= 1
      self.zoom_x += 0.01
      self.zoom_y += 0.01
    else
      self.opacity > 0 ? self.opacity -= 15 : dispose
    end
  end 
  def dispose
    self.bitmap.dispose
    super
  end  
end
#------------------------------------------------------------------------------------
#fim do script
#------------------------------------------------------------------------------------
[close]

Créditos:
A mim por escrever o script
Ao Khas, pois vi uns tutoriais dele para arrumar um bug

*Favor me avisar de qualquer bug!
até mais~

Parabéns pelo script man ^^, ABS já é um script que tem uma certa dificuldade xD, enfim, está bem simples, mas acho que com o tempo pode trabalhar ainda mais em cima dele e fazer um sistema mais completo ainda =D.

Obrigado Raizen, não foi fácil mesmo criar levou umas 3H :c.
Mas enfim, pretendo aprimora-lo com mais coisas como animação da arma (: e etc...
:ok: