Khas - damage sprites

3 Respostas   562 Visualizações

0 Membros e 1 Visitante estão vendo este tópico.

Speed

  • Veterano
  • *
  • Posts: 744
  • Ouros: 407
  • você consegue!
  • Medalhas Participante da 2º Mostra de Arte Steamfórdia
Tópico criado em: 22/05/2017 às 02:47 - Última modificação por Revali em 22/05/2017 às 10:35

 Olá.

 Eu gostaria de ajuda para retirar o "quique" do Sprite nesse script do Khas:
 
Spoiler
[close]

 Eu até consegui retirar, porém os sprites não somem depois.):

Obrigado pela ajuda.

Kyo Panda

  • Mito
  • *
  • Posts: 259
  • Ouros: 195
Resposta 1: 22/05/2017 às 08:58

Infelizmente não tenho como testar, dado a falha total do meu sistema operacional, que requere a reinstalação do Steam e drivers de vídeo, porém o script parece ser simples o suficiente:

Código: [Selecionar]
#-------------------------------------------------------------------------------
# * [ACE] SAS IV Damage Sprites
#-------------------------------------------------------------------------------
# * Por Khas Arcthunder (khasarcthunder.wordpress.com)
# * Versão: 1.0 BR
# * Lançada em: 05/01/2012
#
#-------------------------------------------------------------------------------
# * Termos de Uso
#-------------------------------------------------------------------------------
# Termos de uso – 22 de Junho de 2012
# 1. Você deve dar crédito a Khas se estiver usando algum script Khas;
# 2. Todos os scripts e aulas Khas estão sob licença Creative Commons;
# 3. Todos os scripts Khas são livres para uso não comercial. Caso queira
#    algum script para uso comercial, confira abaixo destes termos quais
#    scripts são de uso comercial livre e quais são de uso comercial pago;
# 4. Todos os scripts Khas são para uso pessoal, você pode usar e editar
#    para uso no seu projeto, porém você não pode postar nenhuma versão
#    modificada;
# 5. Você não pode dar créditos a si próprio por postar algum script Khas;
# 6. Caso queira compartilhar um script Khas, não poste o script ou o link
#    direto de download, apenas redirecione o usuário para
#    http://arcthunder.site40.net/
# 7. Todos os scripts Khas são para uso no maker em que foram feitos.
#    Não é autorizada nenhuma espécie de conversão;
# 8. É sua obrigação (usuário) conferir esta página de termos no dia em que
#    lançar seu projeto. As normas aqui presentes devem ser cumpridas pelo
#    seu projeto.
#
# Scripts de uso comercial livre:
# - Sapphire Action System IV (RPG Maker VX Ace)
# - Awesome Light Effects (RPG Maker VX Ace)
# - Pixel movement (RPG Maker VX e RPG Maker VX Ace)
# - Sprite & Window Smooth Sliding (RPG Maker VX e RPG Maker VX Ace)
# - Pathfinder (RPG Maker VX Ace)
#
# Veja todos os termos em: http://arcthunder.site40.net/termos/
#
#-------------------------------------------------------------------------------
# * Caracteristicas
#-------------------------------------------------------------------------------
# Sistema de números de dano do SAS IV.
# Configure abaixo.
#
#-------------------------------------------------------------------------------
# * Configuração
#-------------------------------------------------------------------------------

module Damage_Core
  # Nome da fonte
  Damage_Font = "Georgia"
  # Tamanho da fonte
  Damage_Size = 22
  # Itálico?
  Damage_Italic = false
  # Negrito?
  Damage_Bold = true
  # Cor - Color.new(red, green, blue)
  Damage_Color = Color.new(255,255,255)
  # Mostrar novo nível?
  Damage_Level = true
  # String de novo nível
  Damage_LString = "Level up!"
end

#-------------------------------------------------------------------------------
# * Registrar
#-------------------------------------------------------------------------------

if $khas_awesome.nil?
  $khas_awesome = []
end

scripts = []
$khas_awesome.each { |script| scripts << script[0] }

unless scripts.include?("Sapphire Action System")
  error = Sprite.new
  error.bitmap = Bitmap.new(544,416)
  error.bitmap.draw_text(0,208,544,32,"Por favor, instale o Sapphire Action System IV",1)
  error.bitmap.draw_text(0,240,544,32,"Os scripts adicionais precisam do principal",1)
  continue = Sprite.new
  continue.bitmap = Bitmap.new(544,416)
  continue.bitmap.font.color = Color.new(0,255,0)
  continue.bitmap.font.size = error.bitmap.font.size - 3
  continue.bitmap.draw_text(0,384,544,32,"Tecle ENTER para sair",1)
 
  add = Math::PI/80; max = 2*Math::PI; angle = 0
  loop do
    Graphics.update; Input.update
    angle += add; angle %= max
    continue.opacity = 185 + 70* Math.cos(angle)
    break if Input.trigger?(Input::C)
  end
 
  error.bitmap.dispose; continue.bitmap.dispose
  error.bitmap = nil; continue.bitmap = nil
  error.dispose; continue.dispose
  error = nil; continue = nil
  exit
end

$khas_awesome << ["SAS Damage Sprites",4.0]

#-------------------------------------------------------------------------------
# * Script
#-------------------------------------------------------------------------------

class Spriteset_Map
  def update_damage_sprites
    $game_map.damage_sprites.each { |damage_sprite| damage_sprite.update; @trash << damage_sprite if damage_sprite.done }
    @trash.each { |item| $game_map.damage_sprites.delete(item) }
    @trash.clear
  end
end

class Game_Map
  def level_up
    return unless Damage_Core::Damage_Level
    @damage_sprites << Sprite_Damage.new($game_player,Damage_Core::Damage_LString)
  end
 
  def show_text(target,value)
    @damage_sprites << Sprite_Damage.new(target,value)
  end
 
  def hide_damage_sprites
    virtual_damage = []
    @damage_sprites.each { |damage_sprite| virtual_damage << damage_sprite.release; damage_sprite.dispose }
    @damage_sprites = virtual_damage
  end
 
  def show_damage_sprites
    virtual_damage = @damage_sprites
    @damage_sprites = []
    virtual_damage.each { |vd| @damage_sprites << Restored_Damage.new(vd) }
    virtual_damage.clear
  end
 
  def delete_damage_sprites
    if @damage_sprites.nil?
      @damage_sprites = []
    else
      @damage_sprites.each { |damage_sprite| damage_sprite.dispose }
      @damage_sprites.clear
    end
  end
end

class Virtual_Damage
  attr_reader :x
  attr_reader :y
  attr_reader :value
  attr_reader :x_speed
  attr_reader :y_speed
  attr_reader :g_force
  attr_reader :erase
  attr_reader :opacity
 
  def initialize(x,y,value,xs,ys,gf,e,op)
    @x = x
    @y = y
    @value = value
    @x_speed = xs
    @y_speed = ys
    @g_force = gf
    @erase = e
    @opacity = op
  end
end

class Restored_Damage < Sprite
  attr_accessor :done
 
  include Damage_Core
 
  def initialize(vd)
    super(nil)
    @value = vd.value
    self.bitmap = Bitmap.new(160,20)
    self.bitmap.font.name = Damage_Font
    self.bitmap.font.size = Damage_Size
    self.bitmap.font.bold = Damage_Bold
    self.bitmap.font.italic = Damage_Italic
    self.bitmap.font.color = Damage_Color
    self.bitmap.draw_text(0,0,160,20,@value,1)
    self.x = vd.x
    self.y = vd.y
    self.ox = 50
    self.oy = 50
    self.opacity = vd.opacity
    @x_speed = vd.x_speed
    @y_speed = vd.y_speed
    @g_force = vd.g_force
    @erase = vd.erase
  end
 
  def update
    if @erase
      if self.opacity <= 0
        dispose
      else
        @y_speed += @g_force unless @y_speed <= 1
        self.y -= @y_speed
        self.opacity -= 10
      end
    else
      if @y_speed < 3
        @erase = true
      else
        self.y -= @y_speed
        @y_speed += @g_force
      end
    end
  end
 
  def release
    return Virtual_Damage.new(self.x,self.y,@value,@x_speed,@y_speed,@g_force,@erase,self.opacity)
  end
 
  def dispose
    self.bitmap.dispose
    self.bitmap = nil
    super
    @done = true
  end
end

class Sprite_Damage < Sprite
  attr_accessor :done
 
  include Damage_Core
 
  def initialize(target,value)
    super(nil)
    @value = value.to_s
    self.bitmap = Bitmap.new(160,20)
    self.bitmap.font.name = Damage_Font
    self.bitmap.font.size = Damage_Size
    self.bitmap.font.bold = Damage_Bold
    self.bitmap.font.italic = Damage_Italic
    self.bitmap.font.color = Damage_Color
    self.bitmap.draw_text(0,0,160,20,@value,1)
    self.x = target.screen_x
    self.y = target.screen_y
    self.ox = 50
    self.oy = 50
    side = (rand(2) == 0 ? 1 : -1)
    @x_speed = (rand(2)+1)*side
    @y_speed = 6
    @g_force = -0.5
    @erase = false
  end
 
  def update
    if @erase
      if self.opacity <= 0
        dispose
      else
        @y_speed += @g_force unless @y_speed <= 1
        self.y -= @y_speed
        self.opacity -= 10
      end
    else
      if @y_speed < 3
        @erase = true
      else
        self.y -= @y_speed
        @y_speed += @g_force
      end
    end
  end
 
  def release
    return Virtual_Damage.new(self.x,self.y,@value,@x_speed,@y_speed,@g_force,@erase,self.opacity)
  end
 
  def dispose
    self.bitmap.dispose
    self.bitmap = nil
    super
    @done = true
  end
end

Na lógica, ele irá para cima na velocidade de 6 pixels por atualização, reduzindo 0.5 a cada tick. Ao chegar em 3 pixels de velocidade ele começa a reduzir a opacidade do sprite de 10 em 10, removendo o sprite quando o mesmo fica invisível. Coloquei um cap de velocidade em 1 para que o sprite não "pare" no ar e removi o movimento horizontal.

Não testado. .-.

Speed

  • Veterano
  • *
  • Posts: 744
  • Ouros: 407
  • você consegue!
  • Medalhas Participante da 2º Mostra de Arte Steamfórdia
Resposta 2: 22/05/2017 às 12:09

 Como eu já lhe disse no chat, me deparei com esse erro:
Spoiler
[close]

Gking

  • *
  • Posts: 32
  • Ouros: 38
  • No Pain No Gain
Resposta 3: 16/06/2017 às 18:36

Como eu já lhe disse no chat, me deparei com esse erro:
Spoiler
[close]

Não entendo muito de script, mas pelo que sei a syntax correta seria: break if Input.trigger?(:C)