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

Script - Mostrar texto em evento

Iniciado por Iroe, 19/05/2015 às 20:20

Olá! É minha primeira vez postando aqui e, procuro trazer algo interessante.
Eu mesmo já tive a vontade de indentificar NPCs por nomes, que nem em jogos famosos de MMORPG, os quais possuem o nome do NPC acima de sua cabeça. Depois de pesquisar muito, achei um código especifico para isso. Não posso dar créditos completos a quem criou, pois o nome dele foi Encriptado como mostra no código abaixo.

Créditos:

  • Áص¹
  • Nietore
#==============================================================================
# ** Evento Mostrar Texto
#==============================================================================
# Criado por: Áص¹
# Modificado, Adaptado e Melhorado por: Nietore
# Traduzido por: Nietore
# 
#==============================================================================
# * Instruções
#
# - Criando evento para mostrar nome
# - Crie um comentário com:
# [Nome= Nome Aqui]
#------------------------------------------------------------------------------
#==============================================================================
#==============================================================================
# ** Game_Character
#==============================================================================
class Game_Character
#--------------------------------------------------------------------------
# * Escolher as cores
#--------------------------------------------------------------------------
Event_Color = Color.new(0, 225, 100)
Player_Color = Color.new(255, 255, 255)
#--------------------------------------------------------------------------
# * Escolha o que você quer mostrar no personagem
# ~ 'Nome', 'Classe', 'Nivel', 'Hp', 'Mp'
#--------------------------------------------------------------------------
Player_Text = 'Nome'
#--------------------------------------------------------------------------
# * Variável de instancia pública
#--------------------------------------------------------------------------
attr_accessor :text_display
end
#==============================================================================
# ** Game_Event
#==============================================================================

class Game_Event < Game_Character
#--------------------------------------------------------------------------
# * Alias Listings
#--------------------------------------------------------------------------
alias seph_characterdisplay_gevent_refresh refresh
#--------------------------------------------------------------------------
# * Atualização
#--------------------------------------------------------------------------
def refresh
# Methodo de Atualização Original
seph_characterdisplay_gevent_refresh
# Checa se o evento está com o comando no comentário
unless @list.nil?
for i in 0...@list.size
if @list[i].code == 108
@list[i].parameters[0].dup.gsub!(/\[[Nn][Oo][Mm][Ee][=](.+?)\]/) do
@text_display = [$1, Event_Color]
end
end
end
end
@text_display = nil if @erased
end
end
#==============================================================================
# ** Game_Player
#==============================================================================
class Game_Player < Game_Character

alias seph_characterdisplay_gplayer_refresh refresh
#--------------------------------------------------------------------------
# * Atualização
#--------------------------------------------------------------------------
def refresh
# Methodo de Atualização Original
seph_characterdisplay_gplayer_refresh
# Pega o personagem principal
actor = $game_party.members[0]
# Determina o texto
case Player_Text
when 'Nome'
txt = actor.name
when 'Classe'
txt = actor.class_name
when 'Nivel'
txt = "Nivel: #{actor.level}"
when 'Hp'
txt = "HP: #{actor.hp} / #{actor.maxhp}"
when 'Mp'
txt = "MP: #{actor.sp} / #{actor.maxsp}"
else
txt = ''
end
# Creates Text Display
@text_display = [txt, Player_Color]
end
end
#==============================================================================
# ** Sprite_Character
#==============================================================================
class Sprite_Character

alias seph_characterdisplay_scharacter_update update
#--------------------------------------------------------------------------
# * Atualizar Frame
#--------------------------------------------------------------------------
def update
# Methodo de Atualização Original
seph_characterdisplay_scharacter_update
# Methodo de atualização para mostrar o nome no evento
update_display_text
end
#--------------------------------------------------------------------------
# * Cria o Sprite para Mostrar
#--------------------------------------------------------------------------
def create_display_sprite(args)
bitmap = Bitmap.new(160, 24)
# Tamanho da Font
bitmap.font.size = 15
# Texto com Sombra
bitmap.font.draw_shadow = false if bitmap.font.respond_to?(:draw_shadow)
bitmap.font.color = Color.new(0, 0, 0)
bitmap.draw_text(1, 1, 160, 24, args[0], 1)
# Cor da Font
bitmap.font.color = args[1]
# Texto
bitmap.draw_text(0, 0, 160, 24, args[0], 1)
# Desenha o texto
@_text_display = Sprite.new(self.viewport)
@_text_display.bitmap = bitmap
@_text_display.ox = 80
@_text_display.oy = 10
@_text_display.x = self.x
@_text_display.y = self.y - self.oy / 2 - 24
@_text_display.z = 30001
@_text_display.visible = self.visible #true
end

def dispose_display_text
@_text_display.dispose unless @_text_display.nil?
end

def update_display_text
unless @character.text_display.nil?
create_display_sprite(@character.text_display) if @_text_display.nil?
@_text_display.x = self.x
@_text_display.y = self.y - self.oy / 2 - 24
else
dispose_display_text unless @_text_display.nil?
end
end
end

Lembrando que as cores podem ser alteradas, tanto para personagem quanto evento. Se você usa um sistema como o SAS, ABS, XAS, acharás interessante catalogar os monstros com seus respectivos nomes em suas cabeças com a cor vermelha e, se for programador Ruby, poderá configurar várias instâncias.
Demonstração:
Spoiler
[close]
Lembrando que estou a usar os gráficos de personagens do XP no VXAce(Script por MaxHero).
Não influência em nada usar ou não os gráficos, os nomes irão aparecer de qualquer modo,  a não ser que vás modificar algo onde não deve e acabe dando um erro de compilação.
[size=10]Quer encontrar plugins, scripts ou recursos?[/size]

Muito bom, mas tem como desativar o nome em cima do personagem principal ?

Citação de: Selitto online 20/05/2015 às 00:03
Muito bom, mas tem como desativar o nome em cima do personagem principal ?
Sim, tem sim. Eu apenas modifiquei o campo X,Y do nome, pois não sei muito sobre ruby, mas eu sei que se eu modificar e por um lugar onde o nome não aparecerá devido sua distância. Vamos deixar o papo de lado e, eis aqui o código.[box2 class=titlebg title=Script de nomes em cima dos eventos]
#==============================================================================
# ** Evento Mostrar Texto
#==============================================================================
# Criado por: Áص¹
# Modificado, Adaptado e Melhorado por: Nietore
# Traduzido por: Nietore
# Re-configurado por: Iroe
# Acesse: Www.AldeiaRpgBr.Com
#==============================================================================
# * Instruções
#
# - Criando evento para mostrar nome
# - Crie um comentário com:
# [Nome= Nome Aqui]
#------------------------------------------------------------------------------
#==============================================================================
#==============================================================================
# ** Game_Character
#==============================================================================
class Game_Character
#--------------------------------------------------------------------------
# * Escolher as cores
#--------------------------------------------------------------------------
Event_Color = Color.new(0, 225, 100)
#--------------------------------------------------------------------------
# * Vareavel de instancia publica
#--------------------------------------------------------------------------
attr_accessor :text_display
end
#==============================================================================
# ** Game_Event
#==============================================================================

class Game_Event < Game_Character
#--------------------------------------------------------------------------
# * Alias Listings
#--------------------------------------------------------------------------
alias seph_characterdisplay_gevent_refresh refresh
#--------------------------------------------------------------------------
# * Atualização
#--------------------------------------------------------------------------
def refresh
# Methodo de Atualização Original
seph_characterdisplay_gevent_refresh
# Checa se o evento está com o comando no comentário
unless @list.nil?
for i in 0...@list.size
if @list[i].code == 108
@list[i].parameters[0].dup.gsub!(/\[[Nn][Oo][Mm][Ee][=](.+?)\]/) do
@text_display = [$1, Event_Color]
end
end
end
end
@text_display = nil if @erased
end
end

#==============================================================================
# ** Sprite_Character
#==============================================================================
class Sprite_Character

alias seph_characterdisplay_scharacter_update update
#--------------------------------------------------------------------------
# * Atualizar Frame
#--------------------------------------------------------------------------
def update
# Methodo de Atualização Original
seph_characterdisplay_scharacter_update
# Methodo de atualização para mostrar o nome no evento
update_display_text
end
#--------------------------------------------------------------------------
# * Cria o Sprite para Mostrar
#--------------------------------------------------------------------------
def create_display_sprite(args)
bitmap = Bitmap.new(160, 24)
# Tamanho da Font
bitmap.font.size = 15
# Texto com Sombra
bitmap.font.draw_shadow = false if bitmap.font.respond_to?(:draw_shadow)
bitmap.font.color = Color.new(0, 0, 0)
bitmap.draw_text(1, 1, 160, 24, args[0], 1)
# Cor da Font
bitmap.font.color = args[1]
# Texto
bitmap.draw_text(0, 0, 160, 24, args[0], 1)
# Desenha o texto
@_text_display = Sprite.new(self.viewport)
@_text_display.bitmap = bitmap
@_text_display.ox = 80
@_text_display.oy = 10
@_text_display.x = self.x
@_text_display.y = self.y - self.oy / 2 - 24
@_text_display.z = 30001
@_text_display.visible = self.visible #true
end

def dispose_display_text
@_text_display.dispose unless @_text_display.nil?
end

def update_display_text
unless @character.text_display.nil?
create_display_sprite(@character.text_display) if @_text_display.nil?
@_text_display.x = self.x
@_text_display.y = self.y - self.oy / 40 - 24
else
dispose_display_text unless @_text_display.nil?
end
end
end
[/box2]
[size=10]Quer encontrar plugins, scripts ou recursos?[/size]


20/05/2015 às 18:11 #4 Última edição: 20/05/2015 às 20:04 por Iroe
Citação de: Selitto online 20/05/2015 às 16:01
Valeu, vou utiliza-lo !
Bom saber jovem! Mas, eu dei uma pequena erradinha  :facepalm:
Olha o código abaixo, conseguirá melhor resultado.
Spoiler
#==============================================================================
# ** Evento Mostrar Texto
#==============================================================================
# Criado por: Áص¹
# Modificado, Adaptado e Melhorado por: Nietore
# Traduzido por: Nietore
# 
#==============================================================================
# * Instruções
#
# - Criando evento para mostrar nome
# - Crie um comentário com:
# [Nome= Nome Aqui]
#------------------------------------------------------------------------------
#==============================================================================
#==============================================================================
# ** Game_Character
#==============================================================================
class Game_Character
#--------------------------------------------------------------------------
# * Escolher as cores
#--------------------------------------------------------------------------
Event_Color = Color.new(0, 225, 100)
Player_Color = Color.new(255, 255, 255)
#--------------------------------------------------------------------------
# * Escolha o que você quer mostrar no personagem
# ~ 'Nome', 'Classe', 'Nivel', 'Hp', 'Mp'
#--------------------------------------------------------------------------
Player_Text = ''
#--------------------------------------------------------------------------
# * Variável de instancia pública
#--------------------------------------------------------------------------
attr_accessor :text_display
end
#==============================================================================
# ** Game_Event
#==============================================================================

class Game_Event < Game_Character
#--------------------------------------------------------------------------
# * Alias Listings
#--------------------------------------------------------------------------
alias seph_characterdisplay_gevent_refresh refresh
#--------------------------------------------------------------------------
# * Atualização
#--------------------------------------------------------------------------
def refresh
# Methodo de Atualização Original
seph_characterdisplay_gevent_refresh
# Checa se o evento está com o comando no comentário
unless @list.nil?
for i in 0...@list.size
if @list[i].code == 108
@list[i].parameters[0].dup.gsub!(/\[[Nn][Oo][Mm][Ee][=](.+?)\]/) do
@text_display = [$1, Event_Color]
end
end
end
end
@text_display = nil if @erased
end
end
#==============================================================================
# ** Game_Player
#==============================================================================
class Game_Player < Game_Character

alias seph_characterdisplay_gplayer_refresh refresh
#--------------------------------------------------------------------------
# * Atualização
#--------------------------------------------------------------------------
def refresh
# Methodo de Atualização Original
seph_characterdisplay_gplayer_refresh
# Pega o personagem principal
actor = $game_party.members[18]
# Determina o texto
case Player_Text
when 'Nome'
txt = actor.name
when 'Classe'
txt = actor.class_name
when 'Nivel'
txt = "Nivel: #{actor.level}"
when 'Hp'
txt = "HP: #{actor.hp} / #{actor.maxhp}"
when 'Mp'
txt = "MP: #{actor.sp} / #{actor.maxsp}"
else
txt = ''
end
# Creates Text Display
@text_display = [txt, Player_Color]
end
end
#==============================================================================
# ** Sprite_Character
#==============================================================================
class Sprite_Character

alias seph_characterdisplay_scharacter_update update
#--------------------------------------------------------------------------
# * Atualizar Frame
#--------------------------------------------------------------------------
def update
# Methodo de Atualização Original
seph_characterdisplay_scharacter_update
# Methodo de atualização para mostrar o nome no evento
update_display_text
end
#--------------------------------------------------------------------------
# * Cria o Sprite para Mostrar
#--------------------------------------------------------------------------
def create_display_sprite(args)
bitmap = Bitmap.new(160, 24)
# Tamanho da Font
bitmap.font.size = 15
# Texto com Sombra
bitmap.font.draw_shadow = false if bitmap.font.respond_to?(:draw_shadow)
bitmap.font.color = Color.new(0, 0, 0)
bitmap.draw_text(1, 1, 160, 24, args[0], 1)
# Cor da Font
bitmap.font.color = args[1]
# Texto
bitmap.draw_text(0, 0, 160, 24, args[0], 1)
# Desenha o texto
@_text_display = Sprite.new(self.viewport)
@_text_display.bitmap = bitmap
@_text_display.ox = 80
@_text_display.oy = 10
@_text_display.x = self.x
@_text_display.y = self.y - self.oy / 2 - 24
@_text_display.z = 30001
@_text_display.visible = self.visible #true
end

def dispose_display_text
@_text_display.dispose unless @_text_display.nil?
end

def update_display_text
unless @character.text_display.nil?
create_display_sprite(@character.text_display) if @_text_display.nil?
@_text_display.x = self.x
@_text_display.y = self.y - self.oy / 2 - 24
else
dispose_display_text unless @_text_display.nil?
end
end
end
[close]
[size=10]Quer encontrar plugins, scripts ou recursos?[/size]

Por favor
me responda 2 coisas:

1) Como altero a cor dos nomes para cada evento? Exemplo: Monstros quero cor vermelha, NPCs amigos de cor verde, etc.
2) É possivel colocar icones ou baloes de expressão acima dos nomes? Tipo [!] pra ser uma Quest, etc.

Obrigado

Citação de: keobr08 online 28/05/2015 às 23:59
Por favor
me responda 2 coisas:

1) Como altero a cor dos nomes para cada evento? Exemplo: Monstros quero cor vermelha, NPCs amigos de cor verde, etc.
2) É possivel colocar icones ou baloes de expressão acima dos nomes? Tipo [!] pra ser uma Quest, etc.

Obrigado
1) Eu não lembro bem como faz para criar novas instâncias além dos eventos.
Esse código abaixo é o incluído no script. De acordo com as "Leis do Gráfico", é separado por RGB(Red, Green, Blue), e com isso poderá mudar a cor.
Spoiler
Event_Color = Color.new(0, 225, 100)
[close]

2) É possível sim! Por meio de Eventos. É só criar variáveis para as quests(Condições de aparição), não só para as quests mais sim para o balão com looping.
[size=10]Quer encontrar plugins, scripts ou recursos?[/size]