Project1

标题: [ISA][VXP][2011.8.23]角色功能扩展 - Expansion of Character [打印本页]

作者: 忧雪の伤    时间: 2011-8-22 22:40
标题: [ISA][VXP][2011.8.23]角色功能扩展 - Expansion of Character
本帖最后由 忧雪の伤 于 2011-8-25 04:06 编辑

关于:

这并非一个独立的脚本,这是一个 script project脚本工程(虽然目前只有 1 个部件,不过我相信在不遥远的将来它将会是一个完善的工程)。这个工程用于整合与收录在 ISA 中发布的对于地图上的角色相关的脚本,如果你有想要加入这个工程的脚本,请使用论坛的 PM 功能,或者询问我的 QQ 号码。如果你不知道 ISA,想要了解它,请点击这里
作者可能不愿意一直更改这个帖子,如果想得到最新的脚本请移步:
http://rpg.blue/thread-206856-1-1.html

列表(当前收录数:1):

DisplayName:显示角色名称。(使用请参见脚本注释。)

参考截图:


(虽然是 VX 的画面,但是 XP 同样适用。)

参考工程:

CharEx.zip (207.83 KB, 下载次数: 482) (虽然是 XP 的工程,但是 VX 同样适用。)

脚本:
[white line]


  1. #==============================================================================
  2. #  中文名称: 角色功能扩展
  3. #  英文名称: Expansion of Character
  4. #------------------------------------------------------------------------------
  5. #  协议: Ideal Script Association(ISA)
  6. #  引用: http://rpg.blue/group-215-1.html
  7. #------------------------------------------------------------------------------
  8. #  作者: 忧雪の伤
  9. #  版本: 1.0.0.2
  10. #  更新日期: 2011.8.23
  11. #==============================================================================

  12. #==============================================================================
  13. # ** 记录这个脚本的信息。
  14. #==============================================================================

  15. $imported = {} if $imported.nil?
  16. $imported['CharEx'] = '1.0.0.2'

  17. #==============================================================================
  18. # ** 通用配置模块。
  19. #==============================================================================

  20. module IdealScript
  21.   CharEx = Module.new unless IdealScript.constants.include? 'CharEx'
  22. end

  23. #==============================================================================
  24. # ** DisplayName
  25. #==============================================================================

  26. module IdealScript::CharEx::DisplayName
  27.   #--------------------------------------------------------------------------
  28.   # * 用三个常量来设置默认字体的属性。
  29.   #--------------------------------------------------------------------------
  30.   #   DefaultFontSize 只能是一个整数。
  31.   #   DefaultFontName 只能是一个字符串或者一个数组。
  32.   #   DefaultFontColor 只能是一个 Color 类的实例。
  33.   #--------------------------------------------------------------------------
  34.   DefaultFontSize = 18
  35.   DefaultFontName = ['方正粗倩简体', '黑体', '宋体']
  36.   DefaultFontColor = Color.new(255, 255, 255)
  37.   #--------------------------------------------------------------------------
  38.   # * 用一个常量来设置描绘文字的对齐方式。
  39.   #--------------------------------------------------------------------------
  40.   #   Alignment 可以是 'Head' 或者 'Feet'。
  41.   #     'Head':文字会出现在角色的头上。
  42.   #     'Feet':文字会出现在角色的脚下。
  43.   #--------------------------------------------------------------------------
  44.   Alignment = 'Head'
  45.   #--------------------------------------------------------------------------
  46.   # * 用一个常量来设置描绘文字的美化方式。
  47.   #--------------------------------------------------------------------------
  48.   #   Beautify 可以是 nil,'Shadow' 或者 'Outline'。
  49.   #     nil:采用默认的方法描绘文字。
  50.   #     'Shadow':采用带有影子的方法描绘文字。
  51.   #     'Outline':采用带有边缘的方法描绘文字。
  52.   #--------------------------------------------------------------------------
  53.   Beautify = 'Outline'
  54.   #--------------------------------------------------------------------------
  55.   # * 关于事件、角色的名称标识的介绍。
  56.   #--------------------------------------------------------------------------
  57.   #   EV:如果以此开头,视为取消显示。
  58.   #   <font bold>:如果带有的场合,会以粗体显示。
  59.   #   <no display>:如果带有的场合,视为取消显示。
  60.   #   <font italic>:如果带有的场合,会以斜体显示。
  61.   #   <not beautify>:如果带有的场合,会以默认方法描绘文字。
  62.   #   <font name(string)>:如果带有的场合,会以 string 作为字体名称。
  63.   #   <font size(integer)>:如果带有的场合,会以 integer 的数值作为字体大小。
  64.   #   <font color(red, green, blue)>:
  65.   #     如果带有的场合,会以 red, green, blue 作为文字的 RGBA 颜色的参数。
  66.   #--------------------------------------------------------------------------
  67. end

  68. #==============================================================================
  69. # ** Sprite
  70. #==============================================================================

  71. class IdealScript::CharEx::DisplayName::Sprite < Object::Sprite
  72.   #--------------------------------------------------------------------------
  73.   # * 定义实例变量。
  74.   #--------------------------------------------------------------------------
  75.   attr_reader :character
  76.   #--------------------------------------------------------------------------
  77.   # * 初始化对象。
  78.   #    character : 显示的对象。
  79.   #--------------------------------------------------------------------------
  80.   def initialize(viewport, character)
  81.     super(viewport)
  82.     @character = character
  83.     self.x = @character.screen_x
  84.     self.y = @character.screen_y
  85.     refresh
  86.   end
  87.   #--------------------------------------------------------------------------
  88.   # * 刷新画面。
  89.   #--------------------------------------------------------------------------
  90.   def update
  91.     super
  92.     self.x = @character.screen_x
  93.     self.y = @character.screen_y
  94.     self.ox = self.bitmap.rect.width / 2
  95.     refresh unless @character.name.eql? @original_name
  96.   end
  97.   #--------------------------------------------------------------------------
  98.   # * 释放。
  99.   #--------------------------------------------------------------------------
  100.   def dispose
  101.     super
  102.     self.bitmap.dispose
  103.   end
  104.   #--------------------------------------------------------------------------
  105.   # * 刷新。
  106.   #--------------------------------------------------------------------------
  107.   def refresh
  108.     self.bitmap.dispose unless self.bitmap.nil?
  109.     font = Font.new
  110.     font.name = IdealScript::CharEx::DisplayName::DefaultFontName
  111.     font.size = IdealScript::CharEx::DisplayName::DefaultFontSize
  112.     font.color = IdealScript::CharEx::DisplayName::DefaultFontColor
  113.     name = @character.name.dup
  114.     @original_name = name.dup
  115.     font.bold = !!name[/<font bold>/]
  116.     beautify = !name[/<not beautify>/]
  117.     font.italic = !!name[/<font italic>/]
  118.     name.sub!(/<font bold>/, '')
  119.     name.sub!(/<font italic>/, '')
  120.     name.sub!(/<not beautify>/, '')
  121.     name.sub!(/<font name\((.*)\)>/, '')
  122.     font.name = $1 unless $1.nil?
  123.     name.sub!(/<font size\((.*)\)>/, '')
  124.     font.size = Integer $1 unless $1.nil?
  125.     name.sub!(/<font color\((.*)\)>/, '')
  126.     args = $1.split(/,/).map {|str| Float(str) } unless $1.nil?  
  127.     font.color.set(*args) rescue nil
  128.     bitmap = Bitmap.new(32, 32)
  129.     bitmap.font, rect = font, bitmap.text_size(name)
  130.     bitmap, size = nil, [rect.width + 2, rect.height + 2]
  131.     self.bitmap, self.bitmap.font = Bitmap.new(*size), font
  132.     return self.bitmap.draw_text(1, 1, size[0], size[1], name, 1) if !beautify
  133.     original_color = self.bitmap.font.color.dup
  134.     self.bitmap.font.color = Color.new(0, 0, 0)
  135.     case IdealScript::CharEx::DisplayName::Beautify
  136.     when 'Outline'
  137.       self.bitmap.draw_text(2, 0, size[0], size[1], name, 1)
  138.       self.bitmap.draw_text(0, 2, size[0], size[1], name, 1)
  139.       self.bitmap.draw_text(2, 2, size[0], size[1], name, 1)
  140.       self.bitmap.draw_text(0, 0, size[0], size[1], name, 1)
  141.       self.bitmap.draw_text(2, 1, size[0], size[1], name, 1)
  142.       self.bitmap.draw_text(1, 2, size[0], size[1], name, 1)
  143.       self.bitmap.draw_text(0, 1, size[0], size[1], name, 1)
  144.       self.bitmap.draw_text(1, 0, size[0], size[1], name, 1)
  145.     when 'Shadow'
  146.       self.bitmap.draw_text(2, 2, size[0], size[1], name, 1)
  147.     end
  148.     self.bitmap.font.color = original_color
  149.     self.bitmap.draw_text(1, 1, size[0], size[1], name, 1)
  150.     nil
  151.   end
  152. end

  153. #==============================================================================
  154. # ** Game_Actor
  155. #==============================================================================

  156. class Game_Actor
  157.   #--------------------------------------------------------------------------
  158.   # * 获取名称。
  159.   #--------------------------------------------------------------------------
  160.   alias ideal_script_name_for_characterex name
  161.   def name(*args)
  162.     original_name = ideal_script_name_for_characterex(*args).dup
  163.     original_name.sub!(/<font color\(.*\)>/, '')
  164.     original_name.sub!(/<font name\(.*\)>/, '')
  165.     original_name.sub!(/<font size\(.*\)>/, '')
  166.     original_name.sub!(/<not beautify>/, '')
  167.     original_name.sub!(/<font italic>/, '')
  168.     original_name.sub!(/<no display>/, '')
  169.     original_name.sub!(/<font bold>/, '')
  170.     original_name
  171.   end
  172. end

  173. #==============================================================================
  174. # ** Game_Character
  175. #==============================================================================

  176. class Game_Character
  177.   #--------------------------------------------------------------------------
  178.   # * 定义实例变量。
  179.   #--------------------------------------------------------------------------
  180.   attr_accessor :charex_display_name
  181.   #--------------------------------------------------------------------------
  182.   # * 初始化对象。
  183.   #--------------------------------------------------------------------------
  184.   alias ideal_script_initialize_for_characterex initialize
  185.   def initialize(*args)
  186.     @charex_display_name = true
  187.     ideal_script_initialize_for_characterex *args
  188.   end
  189. end

  190. #==============================================================================
  191. # ** Game_Event
  192. #==============================================================================

  193. class Game_Event
  194.   #--------------------------------------------------------------------------
  195.   # * 获取名称。
  196.   #--------------------------------------------------------------------------
  197.   unless method_defined? :name
  198.     def name
  199.       return @event.name.dup unless @charex_name
  200.       @charex_name
  201.     end
  202.   end
  203.   unless method_defined? :name=
  204.     def name=(name)
  205.       @charex_name = name
  206.     end
  207.   end
  208. end

  209. #==============================================================================
  210. # ** Game_Vehicle
  211. #==============================================================================

  212. class Game_Vehicle
  213.   #------------------------------------------------------------------------
  214.   # * 获取名称。
  215.   #------------------------------------------------------------------------
  216.   unless method_defined? :name
  217.     def name
  218.       '<no display>'
  219.     end
  220.   end
  221. end

  222. #==============================================================================
  223. # ** Game_Player
  224. #==============================================================================

  225. class Game_Player
  226.   #--------------------------------------------------------------------------
  227.   # * 获取名称。
  228.   #--------------------------------------------------------------------------
  229.   unless method_defined? :name
  230.     def name
  231.       if Game_Party.method_defined? :actors
  232.         actor = $game_party.actors[0]
  233.       elsif Game_Party.method_defined? :members
  234.         actor = $game_party.members[0]
  235.       else
  236.         return ''
  237.       end
  238.       actor.ideal_script_name_for_characterex
  239.     end
  240.   end
  241. end

  242. #==============================================================================
  243. # ** Sprite_Character
  244. #==============================================================================

  245. class Sprite_Character
  246.   #--------------------------------------------------------------------------
  247.   # * 初始化对象。
  248.   #--------------------------------------------------------------------------
  249.   alias ideal_script_initialize_for_characterex initialize
  250.   def initialize(*args)
  251.     viewport = args.find {|arg| arg.is_a? Viewport }
  252.     character = args.find {|arg| arg.is_a? Game_Character }
  253.     sprite = IdealScript::CharEx::DisplayName::Sprite
  254.     @charex_display_name = sprite.new(viewport, character)
  255.     ideal_script_initialize_for_characterex *args
  256.   end
  257.   #--------------------------------------------------------------------------
  258.   # * 释放。
  259.   #--------------------------------------------------------------------------
  260.   alias ideal_script_dispose_for_characterex dispose
  261.   def dispose(*args)
  262.     @charex_display_name.dispose
  263.     ideal_script_dispose_for_characterex *args
  264.   end
  265.   #--------------------------------------------------------------------------
  266.   # * 刷新画面。
  267.   #--------------------------------------------------------------------------
  268.   alias ideal_script_update_for_characterex update
  269.   def update(*args)
  270.     ideal_script_update_for_characterex *args
  271.     boolean = !(character.name[/<no display>/] || character.name[0, 2][/EV/])
  272.     boolean = boolean && visible && character.charex_display_name
  273.     @charex_display_name.visible = boolean
  274.     @charex_display_name.z = self.z + 32
  275.     @charex_display_name.update
  276.     if IdealScript::CharEx::DisplayName::Alignment.eql? 'Head'
  277.       oy = self.src_rect.height + @charex_display_name.src_rect.height
  278.       @charex_display_name.oy = oy
  279.     end
  280.   end
  281. end
复制代码

作者: orzfly    时间: 2011-8-22 22:43
本帖最后由 orzfly 于 2011-8-22 22:43 编辑

好复杂,姐姐不能写简单点么 = =
作者: 冰舞蝶恋    时间: 2011-8-22 23:05
好神奇...雪姐姐最神了喵~~让咱这菜鸟都看不懂T。T
作者: px.凤翔九天    时间: 2011-8-22 23:07
恩,支持下~
雪姐姐的这个工程看起来会很不错啊,针对地图进行的拓展总有人用的~
作者: 忧雪の伤    时间: 2011-8-22 23:09
px.凤翔九天 发表于 2011-8-22 23:07
恩,支持下~
雪姐姐的这个工程看起来会很不错啊,针对地图进行的拓展总有人用的~ ...

关键是需要许多人一起努力……这是工程不是个人脚本……
作者: 忧雪の伤    时间: 2011-8-23 14:18
本帖最后由 忧雪の伤 于 2011-8-23 14:21 编辑

更新(2010.8.23):
修正了注释;
增加了参考工程;
增加了对应修改事件名称的功能。

作者: 无名小兵    时间: 2011-8-24 11:17
纯支持 加油哇。。。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1