设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1485|回复: 2
打印 上一主题 下一主题

[已经过期] 显示NPC名字不正常。

[复制链接]

Lv2.观梦者

梦石
0
星屑
582
在线时间
917 小时
注册时间
2013-3-13
帖子
557
跳转到指定楼层
1
发表于 2013-6-1 18:55:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
有没有人遇到过这种情况?
满足特定条件才会出现的某些NPC刚出现时候不显示名字,要刷新一下才有。
为什么?

Lv1.梦旅人

梦石
0
星屑
70
在线时间
1083 小时
注册时间
2013-3-29
帖子
2394
2
发表于 2013-6-1 18:58:32 | 只看该作者
LZ是什么意思?不显示名字?是用了NPC在地图上显示名称的脚本吗?

点评

是的。脚本如下:  发表于 2013-6-1 19:01

坑的进度如上                                                                                                        点击↑
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
582
在线时间
917 小时
注册时间
2013-3-13
帖子
557
3
 楼主| 发表于 2013-6-1 19:01:54 | 只看该作者
  1. #==============================================================================
  2. # (新)显示NPC名和图标 v1.04 by 沉影不器
  3. #------------------------------------------------------------------------------
  4. # 功能: 在指定NPC头上显示名/图标,比如有任务的NPC头上多一个提示图标
  5. # 使用方法:
  6. #    ① 在事件页里任意位置(默认第一行)加注释,格式为:
  7. #       npc=名称,名称颜色     例: npc = 无敌将军,3
  8. #       大小写不限,名称颜色指text_color编号
  9. #      
  10. #    ② 需要显示图标的事件,在注释任意位置增加\i[图标序号],大小写不限
  11. #    ③ 参数设定在脚本第15-20行
  12. #    ④ 全局控制是否显示 NPC 名,当脚本第23行指定的开关打开时显示
  13. #       默认第10号开关
  14. #==============================================================================
  15. # 参数设定
  16. #==============================================================================
  17. module NPC
  18.   ALL_LIST    = true                # 是否支持事件页任意位置读取NPC注释
  19.   NAME_FONT   = "黑体"              # 名称字体
  20.   NAME_SIZE   = 14                  # 名称字号
  21.   NAME_COLOR  = 0                   # 名称字色(text_color编号)
  22.   NAME_SHADOW = true                # 名称字体阴影
  23.   NAME_WIDTH  = 120                 # 名称最大宽度
  24.   PLAYER_NAME = false                # 是否显示主角名
  25.   NAME_SWITCH = 27                  # 全局控制是否显示NPC名的开关序号
  26. end

  27. class String
  28.   #-------------------------------------------------------------------------
  29.   # ○ 读取注释
  30.   #     section : 字段名
  31.   #     ignore_caps : 忽略大小写(仅字段名)
  32.   #-------------------------------------------------------------------------
  33.   def read_note(section, ignore_caps = true)
  34.     result = ''
  35.     # 忽略大小写时,全部转大写
  36.     section.upcase! if ignore_caps
  37.     # 转symbol方便比较
  38.     s = section.to_sym
  39.     self.each_line{|line|
  40.       temp = line.split(/=/)
  41.       # 去掉干扰字符
  42.       temp.each {|i| i.strip!}
  43.       temp[0].upcase! if ignore_caps
  44.       if temp[0].to_sym == s
  45.         unless temp[1] == nil
  46.           result = temp[1]
  47.         end
  48.         # 如果希望同名字段值覆盖前面的字段,去掉下一行
  49.         break
  50.       end
  51.     }
  52.     return result
  53.   end
  54. end
  55. #==============================================================================
  56. # ■ Game_Character
  57. #==============================================================================
  58. class Game_Character
  59.   #--------------------------------------------------------------------------
  60.   # ◎ 定义实例变量
  61.   #--------------------------------------------------------------------------
  62.   attr_accessor :npcname                # NPC名
  63.   attr_accessor :npcicon                # NPC图标
  64.   #--------------------------------------------------------------------------
  65.   # ◎ 初始化对象
  66.   #--------------------------------------------------------------------------
  67.   alias character_ini initialize
  68.   def initialize
  69.     character_ini
  70.     @npcname = ""
  71.     @npcicon = -1
  72.   end
  73. end
  74. #==============================================================================
  75. # ■ Game_Event
  76. #==============================================================================
  77. class Game_Event < Game_Character
  78.   #--------------------------------------------------------------------------
  79.   # ◎ 定义实例变量
  80.   #--------------------------------------------------------------------------
  81.   attr_reader   :erased                    # 暂时消除标志
  82.   attr_reader   :npcname                   # NPC 名
  83.   attr_reader   :npcicon                   # NPC 图标
  84.   #--------------------------------------------------------------------------
  85.   # ◎ 刷新
  86.   #--------------------------------------------------------------------------
  87.   def refresh
  88.     new_page = nil
  89.     unless @erased                          # 无法暂时消失的情况下
  90.       for page in @event.pages.reverse      # 按页面顺序
  91.         next unless conditions_met?(page)   # 判断是否符合条件
  92.         new_page = page
  93.         break
  94.       end
  95.     end
  96.     if new_page != @page            # 事件页是否被改变?
  97.       clear_starting                # 清除启动中标志
  98.       setup(new_page)               # 设置事件页
  99.       check_event_trigger_auto      # 判断自动事件启动
  100.       ### NPC名
  101.       get_npcinfo
  102.       ### 地图刷新
  103.       $game_map.need_refresh = true
  104.     end
  105.   end
  106.   #--------------------------------------------------------------------------
  107.   # ○ 获取 NPC 信息
  108.   #--------------------------------------------------------------------------
  109.   def get_npcinfo
  110.     @npcname = ""
  111.     @npcicon = -1
  112.     return if @list == nil
  113.     for line in @list
  114.       if line.code == 108 or line.code == 408
  115.         unless line.parameters.empty?
  116.           npcinfo = line.parameters.to_s.read_note('npc')
  117.           @npcname = npcinfo.gsub(/\\I\[(\d+)\]/i) {}
  118.           @npcicon = $1 == nil ? -1 : $1.to_i
  119.           return
  120.         end
  121.       end
  122.       break unless NPC::ALL_LIST
  123.     end
  124.   end
  125. end
  126. #==============================================================================
  127. # ■ Game_Player
  128. #==============================================================================
  129. class Game_Player < Game_Character
  130.   #--------------------------------------------------------------------------
  131.   # ○ NPC名
  132.   #--------------------------------------------------------------------------
  133.   def npcname
  134.     return NPC::PLAYER_NAME ? $game_party.members[0].name : ""
  135.   end
  136. end
  137. #==============================================================================
  138. # ■ Sprite_Character
  139. #==============================================================================
  140. class Sprite_Character < Sprite_Base
  141.   #--------------------------------------------------------------------------
  142.   # ◎ 初始化对象
  143.   #     viewport  : 视区
  144.   #     character : 角色 (Game_Character)
  145.   #--------------------------------------------------------------------------
  146.   def initialize(viewport, character = nil)
  147.     super(viewport)
  148.     @character = character
  149.     @balloon_duration = 0
  150.     ### NPC 名
  151.     @npcname = @character.npcname
  152.     @npcicon = @character.npcicon
  153.     set_name_sprite
  154.     update
  155.   end
  156.   #--------------------------------------------------------------------------
  157.   # ◎ 释放
  158.   #--------------------------------------------------------------------------
  159.   def dispose
  160.     dispose_balloon
  161.     super
  162.     ###
  163.     return if @name_sprite == nil
  164.     @name_sprite.bitmap.dispose
  165.     @name_sprite.dispose
  166.   end
  167.   #--------------------------------------------------------------------------
  168.   # ◎ 更新画面
  169.   #--------------------------------------------------------------------------
  170.   alias npc_update update
  171.   def update
  172.     npc_update
  173.     ### NPC 名
  174.     if @name_sprite != nil and !@name_sprite.disposed?
  175.       ### 可视性
  176.       if $game_switches[NPC::NAME_SWITCH]
  177.         @name_sprite.visible = true
  178.       else
  179.         @name_sprite.visible = false
  180.         return
  181.       end
  182.       if @character.is_a?(Game_Event) and
  183.         @character.erased || @character.character_name == ""
  184.         @name_sprite.visible = false
  185.         return
  186.       else
  187.         @name_sprite.visible = true
  188.       end
  189.       if @character.is_a?(Game_Player) and @character.in_vehicle?
  190.         @name_sprite.visible = false
  191.         return
  192.       else
  193.         @name_sprite.visible = true
  194.       end
  195.       return unless @name_sprite.visible
  196.       if @npcname != @character.npcname or @npcicon != @character.npcicon
  197.         @npcname = @character.npcname
  198.         @npcicon = @character.npcicon
  199.         refresh_name_sprite
  200.       end
  201.       ### 坐标跟随
  202.       @name_sprite.x = self.x - NPC::NAME_WIDTH/2
  203.       @name_sprite.y = self.y - self.height-24-NPC::NAME_SIZE-2
  204.       @name_sprite.z = self.z+1
  205.     end
  206.   end
  207.   #--------------------------------------------------------------------------
  208.   # ○ 设定 NPC 名称
  209.   #--------------------------------------------------------------------------
  210.   def set_name_sprite
  211.     return if @character.is_a?(Game_Event) and @character.erased
  212.     return if @character.character_name == ""
  213.     @name_sprite = Sprite.new(self.viewport)
  214.     @name_sprite.bitmap = Bitmap.new(NPC::NAME_WIDTH, 24+NPC::NAME_SIZE+2)
  215.     @name_sprite.bitmap.font.name = NPC::NAME_FONT
  216.     @name_sprite.bitmap.font.size = NPC::NAME_SIZE
  217.     @name_sprite.bitmap.font.shadow = NPC::NAME_SHADOW
  218.     refresh_name_sprite
  219.   end
  220.   #--------------------------------------------------------------------------
  221.   # ○ 更新 NPC 名称
  222.   #--------------------------------------------------------------------------
  223.   def refresh_name_sprite
  224.     name,color_index = @npcname.split(/,/)
  225.     color_index = NPC::NAME_COLOR if color_index == ""
  226.     @name_sprite.bitmap.font.color = text_color(color_index.to_i)
  227.     @name_sprite.bitmap.clear
  228.     ## 描绘图标
  229.     if @npcicon > 0
  230.       bitmap = Cache.system("Iconset")
  231.       rect = Rect.new(@npcicon % 16 * 24, @npcicon / 16 * 24, 24, 24)
  232.       @name_sprite.bitmap.blt(NPC::NAME_WIDTH/2-12, 0, bitmap, rect)
  233.     end
  234.     # 描绘名
  235.     @name_sprite.bitmap.draw_text(0,24,NPC::NAME_WIDTH,NPC::NAME_SIZE+2,name,1)
  236.   end
  237.   #--------------------------------------------------------------------------
  238.   # ○ 获取文字颜色色
  239.   #     n : 文字颜色编号 (0~31)
  240.   #--------------------------------------------------------------------------
  241.   def text_color(n)
  242.     x = 64 + (n % 8) * 8
  243.     y = 96 + (n / 8) * 8
  244.     return Cache.system("Window").get_pixel(x, y)
  245.   end
  246. end
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-24 21:20

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表