| 
 
| 赞 | 3 |  
| VIP | 109 |  
| 好人卡 | 208 |  
| 积分 | 3 |  
| 经验 | 22037 |  
| 最后登录 | 2025-4-27 |  
| 在线时间 | 1196 小时 |  
 Lv2.观梦者 虚構歪曲
	梦石0 星屑334 在线时间1196 小时注册时间2010-12-18帖子3928 
 | 
| 
本帖最后由 忧雪の伤 于 2011-8-25 04:06 编辑
x
加入我们,或者,欢迎回来。您需要 登录 才可以下载或查看,没有帐号?注册会员  
 关于:
 
 这并非一个独立的脚本,这是一个 script project ,脚本工程。(虽然目前只有 1 个部件,不过我相信在不遥远的将来它将会是一个完善的工程)。这个工程用于整合与收录在 ISA 中发布的对于地图上的角色相关的脚本,如果你有想要加入这个工程的脚本,请使用论坛的 PM 功能,或者询问我的 QQ 号码。如果你不知道 ISA,想要了解它,请点击这里。
 作者可能不愿意一直更改这个帖子,如果想得到最新的脚本请移步:http://rpg.blue/thread-206856-1-1.html 。
 
 列表(当前收录数:1):
 
 DisplayName:显示角色名称。(使用请参见脚本注释。)
 
 参考截图:
 
 
   (虽然是 VX 的画面,但是 XP 同样适用。)
 
 参考工程:
 
 
  CharEx.zip
(207.83 KB, 下载次数: 483)
(虽然是 XP 的工程,但是 VX 同样适用。) 
 脚本:
 [white line]
 
 
 
 复制代码#==============================================================================
#  中文名称: 角色功能扩展
#  英文名称: Expansion of Character 
#------------------------------------------------------------------------------
#  协议: Ideal Script Association(ISA)
#  引用: http://rpg.blue/group-215-1.html
#------------------------------------------------------------------------------
#  作者: 忧雪の伤
#  版本: 1.0.0.2
#  更新日期: 2011.8.23
#==============================================================================
#==============================================================================
# ** 记录这个脚本的信息。
#==============================================================================
$imported = {} if $imported.nil?
$imported['CharEx'] = '1.0.0.2'
#==============================================================================
# ** 通用配置模块。
#==============================================================================
module IdealScript
  CharEx = Module.new unless IdealScript.constants.include? 'CharEx'
end
#==============================================================================
# ** DisplayName
#==============================================================================
module IdealScript::CharEx::DisplayName
  #--------------------------------------------------------------------------
  # * 用三个常量来设置默认字体的属性。
  #--------------------------------------------------------------------------
  #   DefaultFontSize 只能是一个整数。
  #   DefaultFontName 只能是一个字符串或者一个数组。
  #   DefaultFontColor 只能是一个 Color 类的实例。
  #--------------------------------------------------------------------------
  DefaultFontSize = 18
  DefaultFontName = ['方正粗倩简体', '黑体', '宋体']
  DefaultFontColor = Color.new(255, 255, 255)
  #--------------------------------------------------------------------------
  # * 用一个常量来设置描绘文字的对齐方式。
  #--------------------------------------------------------------------------
  #   Alignment 可以是 'Head' 或者 'Feet'。
  #     'Head':文字会出现在角色的头上。
  #     'Feet':文字会出现在角色的脚下。
  #--------------------------------------------------------------------------
  Alignment = 'Head'
  #--------------------------------------------------------------------------
  # * 用一个常量来设置描绘文字的美化方式。
  #--------------------------------------------------------------------------
  #   Beautify 可以是 nil,'Shadow' 或者 'Outline'。
  #     nil:采用默认的方法描绘文字。
  #     'Shadow':采用带有影子的方法描绘文字。
  #     'Outline':采用带有边缘的方法描绘文字。
  #--------------------------------------------------------------------------
  Beautify = 'Outline'
  #--------------------------------------------------------------------------
  # * 关于事件、角色的名称标识的介绍。
  #--------------------------------------------------------------------------
  #   EV:如果以此开头,视为取消显示。
  #   <font bold>:如果带有的场合,会以粗体显示。
  #   <no display>:如果带有的场合,视为取消显示。
  #   <font italic>:如果带有的场合,会以斜体显示。
  #   <not beautify>:如果带有的场合,会以默认方法描绘文字。
  #   <font name(string)>:如果带有的场合,会以 string 作为字体名称。
  #   <font size(integer)>:如果带有的场合,会以 integer 的数值作为字体大小。
  #   <font color(red, green, blue)>:
  #     如果带有的场合,会以 red, green, blue 作为文字的 RGBA 颜色的参数。
  #--------------------------------------------------------------------------
end
#==============================================================================
# ** Sprite
#==============================================================================
class IdealScript::CharEx::DisplayName::Sprite < Object::Sprite
  #--------------------------------------------------------------------------
  # * 定义实例变量。
  #--------------------------------------------------------------------------
  attr_reader :character
  #--------------------------------------------------------------------------
  # * 初始化对象。
  #    character : 显示的对象。
  #--------------------------------------------------------------------------
  def initialize(viewport, character)
    super(viewport)
    @character = character
    self.x = @character.screen_x
    self.y = @character.screen_y
    refresh
  end
  #--------------------------------------------------------------------------
  # * 刷新画面。
  #--------------------------------------------------------------------------
  def update
    super
    self.x = @character.screen_x
    self.y = @character.screen_y
    self.ox = self.bitmap.rect.width / 2
    refresh unless @character.name.eql? @original_name
  end
  #--------------------------------------------------------------------------
  # * 释放。
  #--------------------------------------------------------------------------
  def dispose
    super
    self.bitmap.dispose
  end
  #--------------------------------------------------------------------------
  # * 刷新。
  #--------------------------------------------------------------------------
  def refresh
    self.bitmap.dispose unless self.bitmap.nil?
    font = Font.new
    font.name = IdealScript::CharEx::DisplayName::DefaultFontName
    font.size = IdealScript::CharEx::DisplayName::DefaultFontSize
    font.color = IdealScript::CharEx::DisplayName::DefaultFontColor
    name = @character.name.dup
    @original_name = name.dup
    font.bold = !!name[/<font bold>/]
    beautify = !name[/<not beautify>/]
    font.italic = !!name[/<font italic>/] 
    name.sub!(/<font bold>/, '')
    name.sub!(/<font italic>/, '')
    name.sub!(/<not beautify>/, '')
    name.sub!(/<font name\((.*)\)>/, '')
    font.name = $1 unless $1.nil?
    name.sub!(/<font size\((.*)\)>/, '')
    font.size = Integer $1 unless $1.nil?
    name.sub!(/<font color\((.*)\)>/, '')
    args = $1.split(/,/).map {|str| Float(str) } unless $1.nil?  
    font.color.set(*args) rescue nil
    bitmap = Bitmap.new(32, 32)
    bitmap.font, rect = font, bitmap.text_size(name)
    bitmap, size = nil, [rect.width + 2, rect.height + 2]
    self.bitmap, self.bitmap.font = Bitmap.new(*size), font
    return self.bitmap.draw_text(1, 1, size[0], size[1], name, 1) if !beautify
    original_color = self.bitmap.font.color.dup
    self.bitmap.font.color = Color.new(0, 0, 0)
    case IdealScript::CharEx::DisplayName::Beautify
    when 'Outline'
      self.bitmap.draw_text(2, 0, size[0], size[1], name, 1)
      self.bitmap.draw_text(0, 2, size[0], size[1], name, 1)
      self.bitmap.draw_text(2, 2, size[0], size[1], name, 1)
      self.bitmap.draw_text(0, 0, size[0], size[1], name, 1)
      self.bitmap.draw_text(2, 1, size[0], size[1], name, 1)
      self.bitmap.draw_text(1, 2, size[0], size[1], name, 1)
      self.bitmap.draw_text(0, 1, size[0], size[1], name, 1)
      self.bitmap.draw_text(1, 0, size[0], size[1], name, 1)
    when 'Shadow'
      self.bitmap.draw_text(2, 2, size[0], size[1], name, 1)
    end
    self.bitmap.font.color = original_color
    self.bitmap.draw_text(1, 1, size[0], size[1], name, 1)
    nil
  end
end
#==============================================================================
# ** Game_Actor
#==============================================================================
class Game_Actor
  #--------------------------------------------------------------------------
  # * 获取名称。
  #--------------------------------------------------------------------------
  alias ideal_script_name_for_characterex name
  def name(*args)
    original_name = ideal_script_name_for_characterex(*args).dup
    original_name.sub!(/<font color\(.*\)>/, '')
    original_name.sub!(/<font name\(.*\)>/, '')
    original_name.sub!(/<font size\(.*\)>/, '')
    original_name.sub!(/<not beautify>/, '')
    original_name.sub!(/<font italic>/, '')
    original_name.sub!(/<no display>/, '')
    original_name.sub!(/<font bold>/, '')
    original_name
  end
end
#==============================================================================
# ** Game_Character
#==============================================================================
class Game_Character
  #--------------------------------------------------------------------------
  # * 定义实例变量。
  #--------------------------------------------------------------------------
  attr_accessor :charex_display_name
  #--------------------------------------------------------------------------
  # * 初始化对象。
  #--------------------------------------------------------------------------
  alias ideal_script_initialize_for_characterex initialize
  def initialize(*args)
    @charex_display_name = true
    ideal_script_initialize_for_characterex *args
  end
end
#==============================================================================
# ** Game_Event
#==============================================================================
class Game_Event
  #--------------------------------------------------------------------------
  # * 获取名称。
  #--------------------------------------------------------------------------
  unless method_defined? :name
    def name
      return @event.name.dup unless @charex_name
      @charex_name
    end
  end
  unless method_defined? :name=
    def name=(name)
      @charex_name = name
    end
  end
end
#==============================================================================
# ** Game_Vehicle
#==============================================================================
class Game_Vehicle 
  #------------------------------------------------------------------------
  # * 获取名称。
  #------------------------------------------------------------------------
  unless method_defined? :name
    def name
      '<no display>'
    end
  end
end
#==============================================================================
# ** Game_Player
#==============================================================================
class Game_Player
  #--------------------------------------------------------------------------
  # * 获取名称。
  #--------------------------------------------------------------------------
  unless method_defined? :name
    def name
      if Game_Party.method_defined? :actors
        actor = $game_party.actors[0]
      elsif Game_Party.method_defined? :members
        actor = $game_party.members[0]
      else
        return ''
      end
      actor.ideal_script_name_for_characterex
    end
  end
end
#==============================================================================
# ** Sprite_Character
#==============================================================================
class Sprite_Character
  #--------------------------------------------------------------------------
  # * 初始化对象。
  #--------------------------------------------------------------------------
  alias ideal_script_initialize_for_characterex initialize
  def initialize(*args)
    viewport = args.find {|arg| arg.is_a? Viewport }
    character = args.find {|arg| arg.is_a? Game_Character }
    sprite = IdealScript::CharEx::DisplayName::Sprite
    @charex_display_name = sprite.new(viewport, character)
    ideal_script_initialize_for_characterex *args
  end
  #--------------------------------------------------------------------------
  # * 释放。
  #--------------------------------------------------------------------------
  alias ideal_script_dispose_for_characterex dispose
  def dispose(*args)
    @charex_display_name.dispose
    ideal_script_dispose_for_characterex *args
  end
  #--------------------------------------------------------------------------
  # * 刷新画面。
  #--------------------------------------------------------------------------
  alias ideal_script_update_for_characterex update
  def update(*args)
    ideal_script_update_for_characterex *args 
    boolean = !(character.name[/<no display>/] || character.name[0, 2][/EV/]) 
    boolean = boolean && visible && character.charex_display_name
    @charex_display_name.visible = boolean 
    @charex_display_name.z = self.z + 32
    @charex_display_name.update
    if IdealScript::CharEx::DisplayName::Alignment.eql? 'Head'
      oy = self.src_rect.height + @charex_display_name.src_rect.height
      @charex_display_name.oy = oy
    end
  end
end
 | 
 评分
查看全部评分
 |