Sistema de Status Hitskin_logo Hitskin.com

Isto é uma pré-visualização de um tema em Hitskin.com
Instalar o temaVoltar para a ficha do tema

Aldeia RPG
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Sistema de Status

5 participantes

Ir para baixo

Sistema de Status Empty Sistema de Status

Mensagem por iCoke~ Ter maio 26, 2020 7:49 pm

Introdução:
Fala, pessoal. Esse é um sistema que eu tinha feito há um tempo já, e agora atualizei ele pra versão mais recente do VXA-OS. É um sistema que possibilita a visualização dos status que o personagem possui, por meio de ícones na HUD.

Explicações:
- Mostra o ícone de cada status possuído.
- Mostra o nome e o tempo restante de cada status ao passar o mouse por cima do ícone.
- Cada status tem um tempo independente. Portanto, se você receber um status que dura 15 segundos, esperar 10 segundos e então receber outro status que dura 30 segundos, estará faltando 5 segundos para acabar o primeiro e 30 segundos para acabar o segundo.
- O tempo máximo de cada status é configurado nas notas.
- Exibe a animação do primeiro status da lista.

IMPORTANTE:
- Por enquanto os traços dos status não estão funcionando, talvez isso seja implementado no VXA-OS mais pra frente.
- Eu deixei dois 'defs' dentro do script que eu estou disponibilizando, são eles:
1) 'def apply_state_effect0(id)', que ocorre por possuir um status.
2) 'apply_state_effect1(id)', que ocorre uma vez por segundo, ao possuir um status. 
Use-os como desejar.

Imagens:

Spoiler:

Spoiler:

Scripts:
1) Substitua o '[VS] Sprite_HUD' do Cliente por esse:
Código:
#==============================================================================
# ** Sprite_HUD
#------------------------------------------------------------------------------
#  Esta classe lida com a exibição de HP, MP, experiência,
# face e nível do jogador.
#------------------------------------------------------------------------------
#  Autor: Valentine
#     Edições por iCoke~
#==============================================================================

class Sprite_HUD < Sprite2
  
  attr_reader :exp_sprite
  
  def initialize
    super
    self.bitmap = Bitmap.new(255, 107)
    self.x = 11
    self.y = 9
    self.z = 50
    self.bitmap.font.size = 18
    self.bitmap.font.bold = true
    @back = Cache.system('HUD')
    @bars = Cache.system('HUDBars')
    $states_list = [] #Lista com os tempos e 'subtempos' de cada state.
    create_exp_bar
    create_tool_tip
    refresh
  end
  
  def create_tool_tip
    #$name_viewport = Viewport.new
    #$name_viewport.z = 50
    @tool_tip = Sprite2.new(viewport)
    @tool_tip.bitmap = Bitmap.new(100, 50)
    @tool_tip.bitmap.fill_rect(@tool_tip.bitmap.rect, Color.new(0, 0, 0, 160))
    @tool_tip.bitmap.draw_text(@tool_tip.bitmap.rect, "", 1)
    @tool_tip.visible = false
  end
  
  def dispose
    super
    if @tool_tip
      @tool_tip.bitmap.dispose
      @tool_tip.dispose
    end
    @exp_sprite.bitmap.dispose
    @exp_sprite.dispose
  end
  
  def visible=(visible)
    super
    @tool_tip.visible = false if @tool_tip
  end
  
  def update_tool_tip
    return unless @tool_tip && visible
    @tool_tip.visible = $in_states_area[0]
    if @tool_tip.visible
      @tool_tip.x = Mouse.x + 18 + @tool_tip.bitmap.width > Graphics.width ? Graphics.width - @tool_tip.bitmap.width :  Mouse.x + 18
      @tool_tip.y = Mouse.y + 18 + @tool_tip.bitmap.height > Graphics.height ? Graphics.height - @tool_tip.bitmap.height : Mouse.y + 18
    end
    if $in_states_area[1] != nil
      @tool_tip.bitmap.fill_rect(@tool_tip.bitmap.rect, Color.new(0, 0, 0, 160))
      
      @tool_tip.bitmap.font.color.set(crisis_color)
      @tool_tip.bitmap.draw_text(0, 2, @tool_tip.bitmap.width, 17, $in_states_area[1].name.to_s, 1)
      max_time = Note.read_number('Time', $data_states[$in_states_area[1].id].note)
      n = (Mouse.x-118)/21
      return if $states_list[n] == nil || $states_list[n][0] == nil
      actual_time = max_time - $states_list[n][0]
      @tool_tip.bitmap.font.color.set(normal_color)
      @tool_tip.bitmap.draw_text(0, 24, @tool_tip.bitmap.width, 17, "Tempo: " + actual_time.to_s + " s", 1)
    end
  end
  
  def create_exp_bar
 @exp_sprite = Sprite2.new
 @exp_sprite.bitmap = Bitmap.new(308, 22)
    @exp_sprite.bitmap.font.size = 18
    @exp_sprite.bitmap.font.bold = true
    @exp_sprite.x = adjust_x
    @exp_sprite.y = adjust_y
    @exp_sprite.dragable = true
 @exp_sprite.z = self.z
  end
  
  def adjust_x
    Graphics.width / 2 - 109
  end
  
  def adjust_y
    Graphics.height - 28
  end
  
  def states_list_changed?
    return true if @old_states_size != $game_actors[1].states.size
    return false
  end
  
  def refresh
    draw_background
    draw_face
    draw_hp_bar
    draw_mp_bar
    draw_exp_bar
    draw_level
    draw_status
    @old_states_size = $game_actors[1].states.size
  end
  
  def draw_background
    self.bitmap.clear
    rect = Rect.new(0, 0, 248, 98)
    self.bitmap.blt(7, 0, @back, rect)
  end
  
  def draw_face
    return if $game_actors[1].face_name.empty?
    face = Cache.face($game_actors[1].face_name)
    rect = Rect.new($game_actors[1].face_index % 4 * 96, $game_actors[1].face_index / 4 * 96, 96, 96)
    self.bitmap.blt(8, 1, face, rect)
  end
  
  def draw_hp_bar
    rect = Rect.new(0, 0, 123 * $game_actors[1].hp / $game_actors[1].mhp, 26)
    self.bitmap.blt(107, 2, @bars, rect)
    self.bitmap.draw_text(111, 7, 25, 18, Vocab::hp_a)
    self.bitmap.draw_text(0, 7, 229, 18, "#{$game_actors[1].hp}/#{$game_actors[1].mhp}", 2)
  end
  
  def draw_mp_bar
    rect = Rect.new(0, 26, 123 * $game_actors[1].mp / $game_actors[1].mmp, 26)
    self.bitmap.blt(107, 30, @bars, rect)
    self.bitmap.draw_text(111, 35, 25, 18, Vocab::mp_a)
    self.bitmap.draw_text(0, 35, 229, 18, "#{$game_actors[1].mp}/#{$game_actors[1].mmp}", 2)
  end
  
  def draw_exp_bar
    @exp_sprite.bitmap.clear
    rect1 = Rect.new(0, 98, @exp_sprite.bitmap.width, @exp_sprite.bitmap.height)
    rect2 = Rect.new(0, 52, 308 * $game_actors[1].now_exp / $game_actors[1].next_exp, @exp_sprite.bitmap.height)
    exp = $game_actors[1].level >= Configs::MAX_LEVEL ? Vocab::MaxLevel : convert_gold($game_actors[1].next_exp - $game_actors[1].now_exp)
    @exp_sprite.bitmap.blt(0, 0, @back, rect1)
    @exp_sprite.bitmap.blt(0, 0, @bars, rect2)
    @exp_sprite.bitmap.draw_text(4, 2, 25, 18, Vocab::Exp)
    @exp_sprite.bitmap.draw_text(0, 2, 308, 18, exp, 1)
  end
  
  def draw_level
    rect = Rect.new(0, 120, 29, 30)
    self.bitmap.blt(0, 77, @back, rect)
    self.bitmap.draw_text(0, 83, 30, 18, $game_actors[1].level, 1)
  end
  
  def draw_status
    for i in 0..$game_actors[1].states.size-1
      return if $game_actors[1].states.size == 0
      status_id = $game_actors[1].states[i].id
      icon = Cache.system('Iconset')
      rect = Rect.new(0+24*status_id, 24, 24, 24)
      self.bitmap.blt(104+24*i, 68, icon, rect)
    end
  end
  
  def update
    super
    @exp_sprite.update
    update_tool_tip
    refresh if states_list_changed?
    if $states_list.size < $game_actors[1].states.size
      $states_list.push([0, 0])
    end
  end
  
end

#================================================================================
# ** Scene_Map
#--------------------------------------------------------------------------------
#     por iCoke~
#================================================================================
# * Parte que conta o tempo dos states e os elimina após ter cumprido o tempo má-
# ximo. Além disso, aplica alguns efeitos de status.
#--------------------------------------------------------------------------------
class Scene_Map
  
  alias state_update update
  def update
    state_update
    a = $states_list.size-1
    for i in 0..a
      if $game_actors[1].states.size > 0        
        apply_state_effect0($game_actors[1].states[i].id) if $game_actors[1].states[i] != nil
        return if $states_list[i] == nil
        return if $game_actors[1].states[i] == nil
        max_time = Note.read_number('Time', $data_states[$game_actors[1].states[i].id].note)
        $states_list[i][1] += 1
        if $states_list[i][1] >= 40
          $states_list[i][0] += 1
          $states_list[i][1] = 0
          apply_state_effect1($game_actors[1].states[i].id)
          if $states_list[i][0] >= max_time
            $states_list[i][1] = 0
            $states_list[i][0] = 0
            s = $game_actors[1].states[i]
            $states_list.delete_at(i)
            $game_actors[1].erase_state(s.id)
          end
        end
      end
    end
end
 
  #==============================================================================
  # * Aqui você configura o efeito que ocorre devido a possuir o status
  #==============================================================================
  def apply_state_effect0(id)

  end
  
  #==============================================================================
  # * Aqui você configura o efeito que ocorre uma vez por segundo
  #==============================================================================
  def apply_state_effect1(id)
    ani_id = Note.read_number('Ani_id', $data_states[$game_actors[1].states[0].id].note)
    $game_player.animation_id = ani_id #Mostra a animação do primeiro status da lista
  end
  
end

2) No script '[VS] Sprite_Cursor' do Cliente, acima do 'def update', adicione:
Código:
def in_area?(x = 0, y = 0, w = width, h = height)
    Mouse.x >= x && Mouse.x <= x + w && Mouse.y >= y && Mouse.y <= y + h
  end

  def show_tool_tip
    if in_area?(116, 78, 21+21*10, 22) && $game_actors[1].states.size > 0
      n = (Mouse.x-118)/21
      return if $game_actors[1].states[n.abs] == nil
      $in_states_area = [true, $game_actors[1].states[n.abs]]
    else
      $in_states_area = [false, nil]
    end
  end

e, ainda dentro do '[VS] Sprite_Cursor', agora dentro do 'def update', adicione a linha:
Código:
show_tool_tip

3) Localize o script '[RM] Game_Battler', localize o 'def add_new_state', e dentro dele, remova a seguinte linha:
Código:
sort_states
Isso impede que os status sejam organizados por id, o que confundiria seus tempos independentes.

Criando um status:
Escolha(ou crie) um status no database que contenha as seguintes notas:
Código:
Time=TEMPO
Ani_id=ID
No lugar de 'TEMPO', preencha com o tempo em segundos que o status vai durar. No lugar de ID, preencha com o id da animação que será executada quando esse status for o primeiro da lista, a cada segundo que passar.

Agradecimentos:
- Valentine pelo VXA-OS.
iCoke~
iCoke~
Membro Ativo
Membro Ativo

Medalhas : Sistema de Status Trophy12
Mensagens : 268
Créditos : 25

Ficha do personagem
Nível: 1
Experiência:
Sistema de Status Left_bar_bleue0/0Sistema de Status Empty_bar_bleue  (0/0)
Vida:
Sistema de Status Left_bar_bleue30/30Sistema de Status Empty_bar_bleue  (30/30)

-JohnLennon- gosta desta mensagem

Ir para o topo Ir para baixo

Sistema de Status Empty Re: Sistema de Status

Mensagem por WillMaiaBR Ter maio 26, 2020 8:15 pm

Parabéns pelo suporte a engine.

_________________
Sistema de Status Logo_xstrond
WillMaiaBR
WillMaiaBR
Iniciante
Iniciante

Mensagens : 71
Créditos : 8

Ficha do personagem
Nível: 1
Experiência:
Sistema de Status Left_bar_bleue0/0Sistema de Status Empty_bar_bleue  (0/0)
Vida:
Sistema de Status Left_bar_bleue30/30Sistema de Status Empty_bar_bleue  (30/30)

https://www.facebook.com/willmaiabr

Ir para o topo Ir para baixo

Sistema de Status Empty Re: Sistema de Status

Mensagem por Valentine Qui maio 28, 2020 4:51 pm

Muito bom, vai ajudar muita gente.

+ 1 crédito
Valentine
Valentine
Administrador
Administrador

Medalhas : Sistema de Status ZgLkiRU
Mensagens : 5343
Créditos : 1164

https://www.aldeiarpg.com/

Ir para o topo Ir para baixo

Sistema de Status Empty Re: Sistema de Status

Mensagem por GallighanMaker Sex maio 29, 2020 5:17 pm

Muito bom! é massa demais ver a galera contribuindo com a comunidade.

_________________
Sistema de Status 8dVK0ku
using C# and import Python developer || Expert in Unity Engine IDE. || Sistema de Status 769_heart 2D pixel games.
GallighanMaker
GallighanMaker
Colaborador
Colaborador

Medalhas : Sistema de Status ZgLkiRU
Mensagens : 985
Créditos : 102

Ficha do personagem
Nível: 1
Experiência:
Sistema de Status Left_bar_bleue0/0Sistema de Status Empty_bar_bleue  (0/0)
Vida:
Sistema de Status Left_bar_bleue30/30Sistema de Status Empty_bar_bleue  (30/30)

https://kingsland-online.com/

Ir para o topo Ir para baixo

Sistema de Status Empty Re: Sistema de Status

Mensagem por Jorosane Seg Jun 29, 2020 1:13 pm

O que diferencia esse sistema de status para o que já vem no VXA-OS? O tempo ?

E o que seria esses traços dos status que não estão funcionando ? kkkk sou novo
Jorosane
Jorosane
Iniciante
Iniciante

Mensagens : 67
Créditos : 6

Ir para o topo Ir para baixo

Sistema de Status Empty Re: Sistema de Status

Mensagem por iCoke~ Qui Jul 09, 2020 11:35 pm

Esse sistema foi feito antes do que está presente na versão atual do VXA-OS, portanto não vale a pena ser utilizado já que a engine possui um sistema equivalente e ainda mais efetivo. Os traços que eu falei que não funcionavam eram os traços dos Status no database do RM, na versão atual do VXA-OS eles já funcionam.
iCoke~
iCoke~
Membro Ativo
Membro Ativo

Medalhas : Sistema de Status Trophy12
Mensagens : 268
Créditos : 25

Ficha do personagem
Nível: 1
Experiência:
Sistema de Status Left_bar_bleue0/0Sistema de Status Empty_bar_bleue  (0/0)
Vida:
Sistema de Status Left_bar_bleue30/30Sistema de Status Empty_bar_bleue  (30/30)

Ir para o topo Ir para baixo

Sistema de Status Empty Re: Sistema de Status

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos