| 赞 | 0  | 
 
| VIP | 15 | 
 
| 好人卡 | 0 | 
 
| 积分 | 1 | 
 
| 经验 | 1365 | 
 
| 最后登录 | 2012-7-4 | 
 
| 在线时间 | 0 小时 | 
 
 
 
 
 
Lv1.梦旅人 
	- 梦石
 - 0 
 
        - 星屑
 - 50 
 
        - 在线时间
 - 0 小时
 
        - 注册时间
 - 2009-10-24
 
        - 帖子
 - 22
 
 
 
 | 
	
4楼
 
 
 楼主 |
发表于 2009-12-3 12:45:43
|
只看该作者
 
 
 
就这个脚本啊~#============================================================================== 
# (新)显示NPC名和图标 v1.04 by 沉影不器 
#------------------------------------------------------------------------------ 
# 功能: 在指定NPC头上显示名/图标,比如有任务的NPC头上多一个提示图标 
# 使用方法: 
#    ① 在事件页里任意位置(默认第一行)加注释,格式为: 
#       npc=名称,名称颜色     例: npc = 无敌将军,3 
#       大小写不限,名称颜色指text_color编号 
#        
#    ② 需要显示图标的事件,在注释任意位置增加/i[图标序号],大小写不限 
#    ③ 参数设定在脚本第15-20行 
#    ④ 全局控制是否显示 NPC 名,当脚本第23行指定的开关打开时显示 
#       默认第10号开关 
#============================================================================== 
# 参数设定 
#============================================================================== 
module NPC 
  ALL_LIST    = false               # 是否支持事件页任意位置读取NPC注释 
  NAME_FONT   = "黑体"              # 名称字体 
  NAME_SIZE   = 14                  # 名称字号 
  NAME_COLOR  = 0                   # 名称字色(text_color编号) 
  NAME_SHADOW = true                # 名称字体阴影 
  NAME_WIDTH  = 120                 # 名称最大宽度 
  PLAYER_NAME = true                # 是否显示主角名 
  NAME_SWITCH = 42                  # 全局控制是否显示NPC名的开关序号 
end 
 
class String 
  #------------------------------------------------------------------------- 
  # ○ 读取注释 
  #     section : 字段名 
  #     ignore_caps : 忽略大小写(仅字段名) 
  #------------------------------------------------------------------------- 
  def read_note(section, ignore_caps = true) 
    result = '' 
    # 忽略大小写时,全部转大写 
    section.upcase! if ignore_caps 
    # 转symbol方便比较 
    s = section.to_sym 
    self.each_line{|line|  
      temp = line.split(/=/) 
      # 去掉干扰字符 
      temp.each {|i| i.strip!} 
      temp[0].upcase! if ignore_caps 
      if temp[0].to_sym == s 
        unless temp[1] == nil 
          result = temp[1] 
        end 
        # 如果希望同名字段值覆盖前面的字段,去掉下一行 
        break 
      end 
    } 
    return result 
  end 
end 
#============================================================================== 
# ■ Game_Character 
#============================================================================== 
class Game_Character 
  #-------------------------------------------------------------------------- 
  # ◎ 定义实例变量 
  #-------------------------------------------------------------------------- 
  attr_accessor :npcname                # NPC名 
  attr_accessor :npcicon                # NPC图标 
  #-------------------------------------------------------------------------- 
  # ◎ 初始化对象 
  #-------------------------------------------------------------------------- 
  alias character_ini initialize 
  def initialize 
    character_ini 
    @npcname = "" 
    @npcicon = -1 
  end 
end 
#============================================================================== 
# ■ Game_Event 
#============================================================================== 
class Game_Event < Game_Character 
  #-------------------------------------------------------------------------- 
  # ◎ 定义实例变量 
  #-------------------------------------------------------------------------- 
  attr_reader   :erased                    # 暂时消除标志 
  attr_reader   :npcname                   # NPC 名 
  attr_reader   :npcicon                   # NPC 图标 
  #-------------------------------------------------------------------------- 
  # ◎ 刷新 
  #-------------------------------------------------------------------------- 
  def refresh 
    new_page = nil 
    unless @erased                          # 无法暂时消失的情况下 
      for page in @event.pages.reverse      # 按页面顺序 
        next unless conditions_met?(page)   # 判断是否符合条件 
        new_page = page 
        break 
      end 
    end 
    if new_page != @page            # 事件页是否被改变? 
      clear_starting                # 清除启动中标志 
      setup(new_page)               # 设置事件页 
      check_event_trigger_auto      # 判断自动事件启动 
      ### NPC名 
      get_npcinfo 
      ### 地图刷新 
      $game_map.need_refresh = true 
    end 
  end 
  #-------------------------------------------------------------------------- 
  # ○ 获取 NPC 信息 
  #-------------------------------------------------------------------------- 
  def get_npcinfo 
    @npcname = "" 
    @npcicon = -1 
    return if @list == nil 
    for line in @list 
      if line.code == 108 or line.code == 408 
        unless line.parameters.empty? 
          npcinfo = line.parameters.to_s.read_note('npc') 
          @npcname = npcinfo.gsub(/\\I\[(\d+)\]/i) {} 
          @npcicon = $1 == nil ? -1 : $1.to_i 
          return 
        end 
      end 
      break unless NPC::ALL_LIST 
    end 
  end 
end 
#============================================================================== 
# ■ Game_Player 
#============================================================================== 
class Game_Player < Game_Character 
  #-------------------------------------------------------------------------- 
  # ○ NPC名 
  #-------------------------------------------------------------------------- 
  def npcname 
    return NPC::PLAYER_NAME ? $game_party.members[0].name : "" 
  end 
end 
#============================================================================== 
# ■ Sprite_Character 
#============================================================================== 
class Sprite_Character < Sprite_Base 
  #-------------------------------------------------------------------------- 
  # ◎ 初始化对象 
  #     viewport  : 视区 
  #     character : 角色 (Game_Character) 
  #-------------------------------------------------------------------------- 
  def initialize(viewport, character = nil) 
    super(viewport) 
    @character = character 
    @balloon_duration = 0 
    ### NPC 名 
    @npcname = @character.npcname 
    @npcicon = @character.npcicon 
    set_name_sprite 
    update 
  end 
  #-------------------------------------------------------------------------- 
  # ◎ 释放 
  #-------------------------------------------------------------------------- 
  def dispose 
    dispose_balloon 
    super 
    ### 
    return if @name_sprite == nil 
    @name_sprite.bitmap.dispose 
    @name_sprite.dispose 
  end 
  #-------------------------------------------------------------------------- 
  # ◎ 更新画面 
  #-------------------------------------------------------------------------- 
  alias npc_update update 
  def update 
    npc_update 
    ### NPC 名 
    if @name_sprite != nil and !@name_sprite.disposed? 
      ### 可视性 
      if $game_switches[NPC::NAME_SWITCH] 
        @name_sprite.visible = true 
      else 
        @name_sprite.visible = false 
        return 
      end 
      if @character.is_a?(Game_Event) and  
        @character.erased || @character.character_name == "" 
        @name_sprite.visible = false 
        return 
      else 
        @name_sprite.visible = true 
      end 
      if @character.is_a?(Game_Player) and @character.in_vehicle? 
        @name_sprite.visible = false 
        return 
      else 
        @name_sprite.visible = true 
      end 
      return unless @name_sprite.visible 
      if @npcname != @character.npcname or @npcicon != @character.npcicon 
        @npcname = @character.npcname 
        @npcicon = @character.npcicon 
        refresh_name_sprite 
      end 
      ### 坐标跟随 
      @name_sprite.x = self.x - NPC::NAME_WIDTH/2 
      @name_sprite.y = self.y - self.height-24-NPC::NAME_SIZE-2 
      @name_sprite.z = self.z+1 
    end 
  end 
  #-------------------------------------------------------------------------- 
  # ○ 设定 NPC 名称 
  #-------------------------------------------------------------------------- 
  def set_name_sprite 
    return if @character.is_a?(Game_Event) and @character.erased 
    return if @character.character_name == "" 
    @name_sprite = Sprite.new(self.viewport) 
    @name_sprite.bitmap = Bitmap.new(NPC::NAME_WIDTH, 24+NPC::NAME_SIZE+2) 
    @name_sprite.bitmap.font.name = NPC::NAME_FONT 
    @name_sprite.bitmap.font.size = NPC::NAME_SIZE 
    @name_sprite.bitmap.font.shadow = NPC::NAME_SHADOW 
    refresh_name_sprite 
  end 
  #-------------------------------------------------------------------------- 
  # ○ 更新 NPC 名称 
  #-------------------------------------------------------------------------- 
  def refresh_name_sprite 
    name,color_index = @npcname.split(/,/) 
    color_index = NPC::NAME_COLOR if color_index == "" 
    @name_sprite.bitmap.font.color = text_color(color_index.to_i) 
    @name_sprite.bitmap.clear 
    ## 描绘图标 
    if @npcicon > 0 
      bitmap = Cache.system("Iconset") 
      rect = Rect.new(@npcicon % 16 * 24, @npcicon / 16 * 24, 24, 24) 
      @name_sprite.bitmap.blt(NPC::NAME_WIDTH/2-12, 0, bitmap, rect) 
    end 
    # 描绘名 
    @name_sprite.bitmap.draw_text(0,24,NPC::NAME_WIDTH,NPC::NAME_SIZE+2,name,1) 
  end 
  #-------------------------------------------------------------------------- 
  # ○ 获取文字颜色色 
  #     n : 文字颜色编号 (0~31) 
  #-------------------------------------------------------------------------- 
  def text_color(n) 
    x = 64 + (n % 8) * 8 
    y = 96 + (n / 8) * 8 
    return Cache.system("Window").get_pixel(x, y) 
  end 
end |   
 
 
 
 |