YEA - Battle Engine Add-On: Enemy HP Bars [EDIT]

Engr. Adiktuzmiko

Chemical Engineer, Game Developer, Using BlinkBoy'
Veteran
Joined
May 15, 2012
Messages
14,682
Reaction score
3,003
First Language
Tagalog
Primarily Uses
RMVXA
YEA - Battle Engine Add-On: Enemy HP Bars [EDIT]

by Yanfly

edited by Adiktuzmiko

#=============================================================================

Features

# Basically it allows you to let enemies have hp bars

# I edited it so that you can set the width and height of the HP bar per enemy via notetags

#=============================================================================

For screenshots: see the original script link below

Script:

Original script here: http://yanflychannel.wordpress.com/rmvxa/battle-scripts/ace-battle-engine/enemy-hp-bars/

Edited version below:



#==============================================================================


# ▼ Yanfly Engine Ace - Battle Engine Add-On: Enemy HP Bars v1.11

# -- Last Updated: 08/09/2013

# -- Level: Easy, Normal

# -- Requires: YEA - Ace Battle Engine v1.00+.

# -- Edited by: Adiktuzmiko (1.11)



#==============================================================================

 

$imported = {} if $imported.nil?

$imported["YEA-EnemyHPBars"] = true

 

#==============================================================================

# ▼ Updates

# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

# 08/09/2013 - Added capability to set gauge width and height via notetags

# 2012.02.10 - Bug Fixed: AoE selection doesn't reveal hidden enemies.

# 2012.02.01 - Bug Fixed: Back and front of gauge randomly don't appear.

# 2012.01.11 - Efficiency update.

# 2012.01.04 - Compatibility Update: Area of Effect

# 2011.12.28 - Efficiency update.

#            - Bug Fixed: HP bars didn't disappear after a heal.

# 2011.12.26 - Bug Fixed: HP bars were not depleting.

# 2011.12.23 - Efficiency update.

# 2011.12.10 - Bug Fixed: HP bars no longer appear when dead and an AoE skill

#              has been selected.

# 2011.12.08 - New feature. Hide HP Bars until defeated once.

# 2011.12.06 - Started Script and Finished.



#==============================================================================

# ▼ Introduction

# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

# This script shows HP gauges on enemies as they're selected for targeting or

# whenever they're damaged. The HP gauges will actually slide downward or

# upward as the enemies take damage.



# Included in v1.01 is the option to require the player having slain an enemy

# once before enemies of that type will show their HP gauge.



#==============================================================================

# ▼ Instructions

# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

# To install this script, open up your script editor and copy/paste this script

# to an open slot below ▼ Materials/素材 but above ▼ Main. Remember to save.



# -----------------------------------------------------------------------------

# Enemy Notetags - These notetags go in the enemy notebox in the database.

# -----------------------------------------------------------------------------

# <back gauge: x>

# Changes the colour of the enemy HP back gauge to x where x is the text colour

# used from the "Window" skin image under Graphics\System.



# <hp gauge 1: x>

# <hp gauge 2: x>

# Changes the colour of the enemy HP HP gauge to x where x is the text colour

# used from the "Window" skin image under Graphics\System.



# <hide gauge>

# <show gauge>

# Hides/shows HP gauge for enemies in battle. These gauges appear whenever the

# enemy is targeted for battle or whenever the enemy takes HP damage. Note that

# using the <show gauge> tag will bypass the requirement for needing to defeat

# an enemy once if that setting is enabled.



# <GAUGE_WIDTH: x>

# <GAUGE_HEIGHT: x>

#

# sets the hp gauge width and height for the battler, if not used, battler

# will use default values set below



#==============================================================================

# ▼ Compatibility

# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

# This script is made strictly for RPG Maker VX Ace. It is highly unlikely that

# it will run with RPG Maker VX without adjusting.



# This script requires Yanfly Engine Ace - Ace Battle Engine v1.00+ and the

# script must be placed under Ace Battle Engine in the script listing.



#==============================================================================

 

module YEA

  module BATTLE

    

    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    # - Enemy HP Gauges -

    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    # Adjust the settings for the enemy HP gauges. You can choose to show the

    # enemy HP gauges by default, the size of the gauge, the colour of the

    # gauge, and the back colour of the gauge.

    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    SHOW_ENEMY_HP_GAUGE    = true   # Display Enemy HP Gauge?

    ANIMATE_HP_GAUGE       = true   # Animate the HP gauge?

    DEFEAT_ENEMIES_FIRST   = false  # Must defeat enemy first to show HP?

    ENEMY_GAUGE_WIDTH      = 64    # How wide the enemy gauges are.

    ENEMY_GAUGE_HEIGHT     = 4     # How tall the enemy gauges are.

    ENEMY_HP_GAUGE_COLOUR1 = 24     # Colour 1 for HP.

    ENEMY_HP_GAUGE_COLOUR2 = 29     # Colour 2 for HP.

    ENEMY_HP_GAUGE_COLOUR01 = 2     # Colour 1 for HP.

    ENEMY_HP_GAUGE_COLOUR02 = 10     # Colour 2 for HP.

    ENEMY_BACKGAUGE_COLOUR = 19     # Gauge Back colour.

    

  end # BATTLE

end # YEA

 

#==============================================================================

# ▼ Editting anything past this point may potentially result in causing

# computer damage, incontinence, explosion of user's head, coma, death, and/or

# halitosis so edit at your own risk.

#==============================================================================

 

if $imported["YEA-BattleEngine"]

 

module YEA

  module REGEXP

  module ENEMY

    

    HIDE_GAUGE = /<(?:HIDE_GAUGE|hide gauge)>/i

    SHOW_GAUGE = /<(?:SHOW_GAUGE|show gauge)>/i

    GAUGE_WIDTH = /<(?:GAUGE_WIDTH):[ ]*(\d+)>/i

    GAUGE_HEIGHT = /<(?:GAUGE_HEIGHT):[ ]*(\d+)>/i

    BACK_GAUGE = /<(?:BACK_GAUGE|back gauge):[ ]*(\d+)>/i

    HP_GAUGE_1 = /<(?:HP_GAUGE_1|hp gauge 1):[ ]*(\d+)>/i

    HP_GAUGE_2 = /<(?:HP_GAUGE_2|hp gauge 2):[ ]*(\d+)>/i

    

  end # ENEMY

  end # REGEXP

end # YEA

 

#==============================================================================

# ■ DataManager

#==============================================================================

 

module DataManager

  

  #--------------------------------------------------------------------------

  # alias method: load_database

  #--------------------------------------------------------------------------

  class <<self; alias load_database_ehpb load_database; end

  def self.load_database

    load_database_ehpb

    load_notetags_ehpb

  end

  

  #--------------------------------------------------------------------------

  # new method: load_notetags_ehpb

  #--------------------------------------------------------------------------

  def self.load_notetags_ehpb

    groups = [$data_enemies]

    for group in groups

      for obj in group

        next if obj.nil?

        obj.load_notetags_ehpb

      end

    end

  end

  

end # DataManager

 

#==============================================================================

# ■ RPG::Enemy

#==============================================================================

 

class RPG::Enemy < RPG::BaseItem

  

  #--------------------------------------------------------------------------

  # public instance variables

  #--------------------------------------------------------------------------

  attr_accessor :show_gauge

  attr_accessor :require_death_show_gauge

  attr_accessor :back_gauge_colour

  attr_accessor :hp_gauge_colour1

  attr_accessor :hp_gauge_colour2

  attr_accessor :gauge_width

  attr_accessor :gauge_height

  

  #--------------------------------------------------------------------------

  # common cache: load_notetags_ehpb

  #--------------------------------------------------------------------------

  def load_notetags_ehpb

    @show_gauge = YEA::BATTLE::SHOW_ENEMY_HP_GAUGE

    @require_death_show_gauge = YEA::BATTLE::DEFEAT_ENEMIES_FIRST

    @back_gauge_colour = YEA::BATTLE::ENEMY_BACKGAUGE_COLOUR

    @hp_gauge_colour1 = YEA::BATTLE::ENEMY_HP_GAUGE_COLOUR1

    @hp_gauge_colour2 = YEA::BATTLE::ENEMY_HP_GAUGE_COLOUR2

    @gauge_width = YEA::BATTLE::ENEMY_GAUGE_WIDTH

    @gauge_height = YEA::BATTLE::ENEMY_GAUGE_HEIGHT

    #---

    self.note.split(/[\r\n]+/).each { |line|

      case line

      #---

      when YEA::REGEXP::ENEMY::HIDE_GAUGE

        @show_gauge = false

      when YEA::REGEXP::ENEMY::SHOW_GAUGE

        @show_gauge = true

        @require_death_show_gauge = false

      when YEA::REGEXP::ENEMY::BACK_GAUGE

        @back_gauge_colour = [$1.to_i, 31].min

      when YEA::REGEXP::ENEMY::HP_GAUGE_1

        @hp_gauge_colour1 = [$1.to_i, 31].min

      when YEA::REGEXP::ENEMY::HP_GAUGE_2

        @hp_gauge_colour2 = [$1.to_i, 31].min

      when YEA::REGEXP::ENEMY::GAUGE_WIDTH

        @gauge_width = $1.to_i

      when YEA::REGEXP::ENEMY::GAUGE_HEIGHT

        @gauge_height = $1.to_i

      end

    } # self.note.split

    #---

  end

  

end # RPG::Enemy

 

#==============================================================================

# ■ Sprite_Battler

#==============================================================================

 

class Sprite_Battler < Sprite_Base

  

  #--------------------------------------------------------------------------

  # alias method: initialize

  #--------------------------------------------------------------------------

  alias sprite_battler_initialize_ehpb initialize

  def initialize(viewport, battler = nil)

    sprite_battler_initialize_ehpb(viewport, battler)

    create_enemy_gauges

  end

  

  #--------------------------------------------------------------------------

  # alias method: dispose

  #--------------------------------------------------------------------------

  alias sprite_battler_dispose_ehpb dispose

  def dispose

    sprite_battler_dispose_ehpb

    dispose_enemy_gauges

  end

  

  #--------------------------------------------------------------------------

  # alias method: update

  #--------------------------------------------------------------------------

  alias sprite_battler_update_ehpb update

  def update

    sprite_battler_update_ehpb

    update_enemy_gauges

  end

  

  #--------------------------------------------------------------------------

  # new method: create_enemy_gauges

  #--------------------------------------------------------------------------

  def create_enemy_gauges

    return if @battler.nil?

    return if @battler.actor?

    return unless @battler.enemy.show_gauge

    @back_gauge_viewport = Enemy_HP_Gauge_Viewport.new(@battler, self, :back)

    @hp_gauge_viewport = Enemy_HP_Gauge_Viewport.new(@battler, self, :hp)

  end

  

  #--------------------------------------------------------------------------

  # new method: dispose_enemy_gauges

  #--------------------------------------------------------------------------

  def dispose_enemy_gauges

    @back_gauge_viewport.dispose unless @back_gauge_viewport.nil?

    @hp_gauge_viewport.dispose unless @hp_gauge_viewport.nil?

  end

  

  #--------------------------------------------------------------------------

  # new method: update_enemy_gauges

  #--------------------------------------------------------------------------

  def update_enemy_gauges

    @back_gauge_viewport.update unless @back_gauge_viewport.nil?

    @hp_gauge_viewport.update unless @hp_gauge_viewport.nil?

  end

  

  #--------------------------------------------------------------------------

  # new method: update_enemy_gauge_value

  #--------------------------------------------------------------------------

  def update_enemy_gauge_value

    @back_gauge_viewport.new_hp_updates unless @back_gauge_viewport.nil?

    @hp_gauge_viewport.new_hp_updates unless @hp_gauge_viewport.nil?

  end

  

end # Sprite_Battler

 

#==============================================================================

# ■ Game_BattlerBase

#==============================================================================

 

class Game_BattlerBase

  

  #--------------------------------------------------------------------------

  # public instance variables

  #--------------------------------------------------------------------------

  attr_accessor :hidden

  

  #--------------------------------------------------------------------------

  # alias method: refresh

  #--------------------------------------------------------------------------

  alias game_battlerbase_refresh_ehpb refresh

  def refresh

    game_battlerbase_refresh_ehpb

    return unless SceneManager.scene_is?(Scene_Battle)

    return if actor?

    sprite.update_enemy_gauge_value

  end

  

end # Game_BattlerBase

 

#==============================================================================

# ■ Game_Battler

#==============================================================================

 

class Game_Battler < Game_BattlerBase

  

  #--------------------------------------------------------------------------

  # alias method: die

  #--------------------------------------------------------------------------

  alias game_battler_die_ehpb die

  def die

    game_battler_die_ehpb

    return if actor?

    $game_party.add_defeated_enemy(@enemy_id)

  end

  

  #--------------------------------------------------------------------------

  # alias method: hp=

  #--------------------------------------------------------------------------

  alias game_battlerbase_hpequals_ehpb hp=

  def hp=(value)

    game_battlerbase_hpequals_ehpb(value)

    return unless SceneManager.scene_is?(Scene_Battle)

    return if actor?

    return if value == 0

    sprite.update_enemy_gauge_value

  end

  

end # Game_Battler

 

#==============================================================================

# ■ Game_Party

#==============================================================================

 

class Game_Party < Game_Unit

  

  #--------------------------------------------------------------------------

  # alias method: init_all_items

  #--------------------------------------------------------------------------

  alias game_party_init_all_items_ehpb init_all_items

  def init_all_items

    game_party_init_all_items_ehpb

    @defeated_enemies = []

  end

  

  #--------------------------------------------------------------------------

  # new method: defeated_enemies

  #--------------------------------------------------------------------------

  def defeated_enemies

    @defeated_enemies = [] if @defeated_enemies.nil?

    return @defeated_enemies

  end

  

  #--------------------------------------------------------------------------

  # new method: add_defeated_enemy

  #--------------------------------------------------------------------------

  def add_defeated_enemy(id)

    @defeated_enemies = [] if @defeated_enemies.nil?

    @defeated_enemies.push(id) unless @defeated_enemies.include?(id)

  end

  

end # Game_Party

 

#==============================================================================

# ■ Enemy_HP_Gauge_Viewport

#==============================================================================

 

class Enemy_HP_Gauge_Viewport < Viewport

  

  #--------------------------------------------------------------------------

  # initialize

  #--------------------------------------------------------------------------

  def initialize(battler, sprite, type)

    @battler = battler

    @base_sprite = sprite

    @type = type

    dw = @battler.enemy.gauge_width

    dw += 2 if @type == :back

    @start_width = dw

    dh = @battler.enemy.gauge_height

    dh += 2 if @type == :back

    rect = Rect.new(0, 0, dw, dh + 12)

    @current_hp = @battler.hp

    @current_mhp = @battler.mhp

    @target_gauge_width = target_gauge_width

    @gauge_rate = 1.0

    setup_original_hide_gauge

    super(rect)

    self.z = 125

    create_gauge_sprites

    self.visible = false

    update_position

  end

  

  #--------------------------------------------------------------------------

  # dispose

  #--------------------------------------------------------------------------

  def dispose

    @sprite.bitmap.dispose unless @sprite.bitmap.nil?

    @sprite.dispose

    super

  end

  

  #--------------------------------------------------------------------------

  # update

  #--------------------------------------------------------------------------

  def update

    super

    self.visible = gauge_visible?

    @sprite.ox += 4 if YEA::BATTLE::ANIMATE_HP_GAUGE

    update_position

    update_gauge

    @visible_counter -= 1

  end

  

  #--------------------------------------------------------------------------

  # setup_original_hide_gauge

  #--------------------------------------------------------------------------

  def setup_original_hide_gauge

    @original_hide = @battler.enemy.require_death_show_gauge

    return unless @original_hide

    if YEA::BATTLE::DEFEAT_ENEMIES_FIRST

      enemy_id = @battler.enemy_id

      @original_hide = !$game_party.defeated_enemies.include?(enemy_id)

    end

  end

  

  #--------------------------------------------------------------------------

  # create_gauge_sprites

  #--------------------------------------------------------------------------

  def create_gauge_sprites

    @sprite = Plane.new(self)

    dw = self.rect.width * 2

    @sprite.bitmap = Bitmap.new(dw, self.rect.height)

    case @type

    when :back

      colour1 = Colour.text_colour(@battler.enemy.back_gauge_colour)

      colour2 = Colour.text_colour(@battler.enemy.back_gauge_colour)

    when :hp

      colour1 = Colour.text_colour(@battler.enemy.hp_gauge_colour1)

      colour2 = Colour.text_colour(@battler.enemy.hp_gauge_colour2)

    end

    dx = 0

    dy = 12

    dw = self.rect.width

    dh = self.rect.height

    @gauge_width = target_gauge_width

    @sprite.bitmap.gradient_fill_rect(dx, dy, dw, dh, colour1, colour2)

    @sprite.bitmap.gradient_fill_rect(dw, dy, dw, dh, colour2, colour1)

    @visible_counter = 0

  end

  

  #--------------------------------------------------------------------------

  # update_visible

  #--------------------------------------------------------------------------

  def gauge_visible?

    update_original_hide

    return false if @original_hide

    return false if case_original_hide?

    return true if @visible_counter > 0

    return true if @gauge_width != @target_gauge_width

    if SceneManager.scene_is?(Scene_Battle)

      return false if SceneManager.scene.enemy_window.nil?

      unless @battler.dead?

        if SceneManager.scene.enemy_window.active

          return true if SceneManager.scene.enemy_window.enemy == @battler

          return true if SceneManager.scene.enemy_window.select_all?

          return true if highlight_aoe?

        end

      end

    end

    return false

  end

  

  #--------------------------------------------------------------------------

  # highlight_aoe?

  #--------------------------------------------------------------------------

  def highlight_aoe?

    return false unless $imported["YEA-AreaofEffect"]

    return false if @battler.enemy? && @battler.hidden

    return SceneManager.scene.enemy_window.hightlight_aoe?(@battler)

  end

  

  #--------------------------------------------------------------------------

  # new_hp_updates

  #--------------------------------------------------------------------------

  def new_hp_updates

    return if @current_hp == @battler.hp && @current_mhp == @battler.mhp

    @current_hp = @battler.hp

    @current_mhp = @battler.mhp

    return if @gauge_rate == target_gauge_rate

    @gauge_rate = target_gauge_rate

    @target_gauge_width = target_gauge_width

    @visible_counter = 60

  end

  

  #--------------------------------------------------------------------------

  # case_original_hide?

  #--------------------------------------------------------------------------

  def case_original_hide?

    return false if !@battler.enemy.require_death_show_gauge

    if YEA::BATTLE::DEFEAT_ENEMIES_FIRST

      enemy_id = @battler.enemy_id

      return true unless $game_party.defeated_enemies.include?(enemy_id)

    end

    return false

  end

  

  #--------------------------------------------------------------------------

  # update_original_hide

  #--------------------------------------------------------------------------

  def update_original_hide

    return unless @original_hide

    return if @battler.dead?

    enemy_id = @battler.enemy_id

    @original_hide = false if $game_party.defeated_enemies.include?(enemy_id)

  end

  

  #--------------------------------------------------------------------------

  # update_position

  #--------------------------------------------------------------------------

  def update_position

    dx = @battler.screen_x - @start_width / 2

    dy = @battler.screen_y

    self.rect.x = dx

    self.rect.y = dy

    dh = self.rect.height + 1

    dh += 2 unless @type == :back

    dy = [@battler.screen_y, Graphics.height - dh - 80].min

    dy += 1 unless @type == :back

    self.rect.y = dy

  end

  

  #--------------------------------------------------------------------------

  # update_gauge

  #--------------------------------------------------------------------------

  def update_gauge

    return if @gauge_width == @target_gauge_width

    rate = 3

    @target_gauge_width = target_gauge_width

    if @gauge_width > @target_gauge_width

      @gauge_width = [@gauge_width - rate, @target_gauge_width].max

    elsif @gauge_width < @target_gauge_width

      @gauge_width = [@gauge_width + rate, @target_gauge_width].min

    end

    @visible_counter = @gauge_width == 0 ? 10 : 60

    dx = 0

    dy = 12

    dw = @gauge_width

    dh = self.rect.height

    if @battler.hp > @battler.mhp*0.3 then

      colour1 = @battler.enemy.hp_gauge_colour1

      colour2 = @battler.enemy.hp_gauge_colour2

    else

        colour1 = YEA::BATTLE::ENEMY_HP_GAUGE_COLOUR01

        colour2 = YEA::BATTLE::ENEMY_HP_GAUGE_COLOUR02

    end

    return if @type == :back

    self.rect.width = @gauge_width

    @sprite.bitmap.gradient_fill_rect(dx,dy,dw,dh, Colour.text_colour(colour1), Colour.text_colour(colour2))

    @sprite.bitmap.gradient_fill_rect(dw,dy,dw,dh, Colour.text_colour(colour2), Colour.text_colour(colour1))

    #@sprite.bitmap.fill_rect(dx,dy,dw,dh,Colour.text_colour(colour1))

  end

  

  #--------------------------------------------------------------------------

  # target_gauge_rate

  #--------------------------------------------------------------------------

  def target_gauge_rate

    return @current_hp.to_f / @current_mhp.to_f

  end

  

  #--------------------------------------------------------------------------

  # target_gauge_width

  #--------------------------------------------------------------------------

  def target_gauge_width

    return [@current_hp * @start_width / @current_mhp, @start_width].min

  end

  

end # Enemy_HP_Gauge_Viewport

 

end # $imported["YEA-BattleEngine"]

 

#==============================================================================



# ▼ End of File



#==============================================================================



 

#=============================================================================

Terms and Conditions

Same as Yanfly's (free to use)

Credits should go to Yanfly too

#=============================================================================
 
Last edited by a moderator:

ShinGamix

DS Style 4Ever!
Veteran
Joined
Mar 18, 2012
Messages
3,905
Reaction score
451
First Language
April Fools
Primarily Uses
N/A
Could please post a screen shot?
 

Engr. Adiktuzmiko

Chemical Engineer, Game Developer, Using BlinkBoy'
Veteran
Joined
May 15, 2012
Messages
14,682
Reaction score
3,003
First Language
Tagalog
Primarily Uses
RMVXA
the only screenie I can take is the same as that posted by yanfly in the original post as my edit was only notetag additions so I didn't add any on my post anymore... and I can't use the pic by Yanfly on the image tags as the site don't accept .jpg
 
Last edited by a moderator:

Neo Soul Gamer

Veteran
Veteran
Joined
Aug 10, 2012
Messages
653
Reaction score
391
First Language
English
Primarily Uses
N/A
Should have added enemy MP bars.
 

Engr. Adiktuzmiko

Chemical Engineer, Game Developer, Using BlinkBoy'
Veteran
Joined
May 15, 2012
Messages
14,682
Reaction score
3,003
First Language
Tagalog
Primarily Uses
RMVXA
I won't add that, not unless I need it maybe... If I'd do that, I'd maybe just write it on my own script rather than adding it into Yanfly's script... :)
 

Users Who Are Viewing This Thread (Users: 0, Guests: 1)

Latest Threads

Latest Posts

Latest Profile Posts

Couple hours of work. Might use in my game as a secret find or something. Not sure. Fancy though no? :D
Holy stink, where have I been? Well, I started my temporary job this week. So less time to spend on game design... :(
Cartoonier cloud cover that better fits the art style, as well as (slightly) improved blending/fading... fading clouds when there are larger patterns is still somewhat abrupt for some reason.
Do you Find Tilesetting or Looking for Tilesets/Plugins more fun? Personally I like making my tileset for my Game (Cretaceous Park TM) xD
How many parameters is 'too many'??

Forum statistics

Threads
105,862
Messages
1,017,047
Members
137,569
Latest member
Shtelsky
Top