Project1

标题: 区域名及地图名自动显示 [打印本页]

作者: Beside    时间: 2008-8-19 23:16
标题: 区域名及地图名自动显示
注意:遇到缺少方法'name'报错的
Script'main'line 36:NoMethoderror occurred.
undefined method'name'for#<Game_Map:0 188af08>
请把第43行改成locationname = load_data("Data/MapInfos.rvdata")[@map_id].name
(下面贴的脚本已经修正,但是范例没有修正)
[LINE]1,#dddddd[/LINE]编辑 by zh99998 2009-5-2


区域名及地图名自动显示
[LINE]1,#dddddd[/LINE]
脚本功能:
自动显示玩家所在的地图名,淡入淡出,全程时间可控制。
如果玩家在区域内,则同时显示地图名和区域名。
如果玩家在同一张地图内所在区域发生变化,则只显示区域名。
【区域】即是VX地图里可以设置的矩形范围,通过本脚本可以满足大地图、ARPG的需求
[LINE]1,#dddddd[/LINE]
范例演示:

看地图:


如图所示,当玩家到达没有设置区域的地方的时候,显示地图名:


当玩家首先【场所移动】到达的是设置了区域的地方的时候,同时显示地图名和区域名:


当玩家在从一个区域移动到另一个区域的时候,只显示区域变化:


当玩家从有区域设置的地方移动到无区域的地方的时候,显示地图名,反向则显示区域名。
[LINE]1,#dddddd[/LINE]
使用方法:
将脚本插入到Main前。
  1. #==============================================================================
  2. # 地图名及区域名显示 by Beside
  3. #------------------------------------------------------------------------------
  4. # 功能: 动态显示玩家所在区域及地图名。
  5. #==============================================================================
  6. class Window_Map < Window_Base
  7.   #--------------------------------------------------------------------------
  8.   # ● 以下是窗口的相关设置
  9.   #--------------------------------------------------------------------------
  10. MWINDOW_X = 240                               # 窗口X坐标
  11. MWINDOW_Y = 25                                # 窗口Y坐标
  12. WEIGH = 160                                   # 窗口宽度      
  13. START_TIME = 30                               # 窗口出现时间
  14. COUN_TIME = 30                                # 窗口持续时间
  15. FADE_TIME = 30                                # 窗口淡去时间
  16. TEXT1_SIZE = 20                               # 地图名的字体大小
  17. TEXT2_SIZE = 18                               # 区域名的字体大小
  18. TEXT3_SIZE = 18                               # 附加名的字体大小
  19. TEXT1_COLOR = Color.new(255,60,60)            # 地图名的默认颜色
  20. TEXT2_COLOR = 3                               # 区域名的默认颜色代码(0-31)
  21. TEXT3_COLOR = 5                               # 附加名的默认颜色代码(0-31)
  22. SKIN = "window"                               # 窗口皮肤的文件名
  23. HEIGHT = TEXT1_SIZE + TEXT2_SIZE + TEXT3_SIZE + 32   
  24.   #--------------------------------------------------------------------------
  25.   # ● 初始化对像
  26.   #--------------------------------------------------------------------------
  27.   def initialize
  28.     @id = 0
  29.     @a_id = 0
  30.     super(MWINDOW_X, MWINDOW_Y, WEIGH, HEIGHT)
  31.     self.opacity = 0
  32.     self.contents_opacity = 0
  33.     self.windowskin = Cache.system(SKIN)
  34.     refresh
  35.   end
  36.   #--------------------------------------------------------------------------
  37.   # ● 刷新
  38.   #--------------------------------------------------------------------------
  39.   def refresh
  40.     @map_id = $game_map.map_id
  41.     locationname = load_data("Data/MapInfos.rvdata")[@map_id].name
  42.     if $game_player.area_id.is_a?(Numeric)
  43.       if $game_player.area_id != @a_id or @map_id != @id
  44.         self.contents.clear
  45.         if @map_id != @id
  46.          @id = @map_id
  47.          @time_count = START_TIME + COUN_TIME + FADE_TIME  
  48.          self.contents.font.color = TEXT1_COLOR
  49.          self.contents.font.size = TEXT1_SIZE
  50.          self.contents.draw_text(0, 0, WEIGH-32, TEXT1_SIZE, locationname, 1)
  51.         end
  52.         @time_count = START_TIME + COUN_TIME + FADE_TIME
  53.         @a_id = $game_player.area_id
  54.         area_name = $data_areas[@a_id].name_p1
  55.         other_name = $data_areas[@a_id].name_p2
  56.         self.contents.font.size = TEXT2_SIZE
  57.         self.contents.font.color = text_color($data_areas[@a_id].color_1)
  58.         self.contents.draw_text(0, TEXT1_SIZE, WEIGH-32, TEXT2_SIZE, area_name, 1)
  59.         self.contents.font.size = TEXT3_SIZE
  60.         self.contents.font.color = text_color($data_areas[@a_id].color_2)
  61.         self.contents.draw_text(0, TEXT1_SIZE+TEXT2_SIZE, WEIGH-32, TEXT3_SIZE, other_name, 1)
  62.       end
  63.     elsif @map_id != @id
  64.       @id = @map_id
  65.       @time_count = START_TIME + COUN_TIME + FADE_TIME  
  66.       self.contents.clear
  67.       self.contents.font.color = TEXT1_COLOR
  68.       self.contents.font.size = TEXT1_SIZE
  69.       self.contents.draw_text(0, (HEIGHT-TEXT1_SIZE)/2-16, WEIGH-32, TEXT1_SIZE, locationname, 1)
  70.     elsif @a_id != 0
  71.       @a_id = 0
  72.       @time_count = START_TIME + COUN_TIME + FADE_TIME  
  73.       self.contents.clear
  74.       self.contents.font.color = TEXT1_COLOR
  75.       self.contents.font.size = TEXT1_SIZE
  76.       self.contents.draw_text(0, (HEIGHT-TEXT1_SIZE)/2-16, WEIGH-32, TEXT1_SIZE, locationname, 1)
  77.     end
  78.     if @time_count > COUN_TIME + FADE_TIME
  79.       self.opacity += 255 / START_TIME
  80.       self.contents_opacity += 255 / START_TIME
  81.       @time_count -= 1
  82.     elsif @time_count > FADE_TIME
  83.       self.opacity = 255
  84.       self.contents_opacity = 255
  85.       @time_count -= 1
  86.     elsif @time_count > 0
  87.       self.opacity -= 255 / FADE_TIME
  88.       self.contents_opacity -= 255 / FADE_TIME
  89.       @time_count -= 1
  90.     else
  91.       @time_count = 0
  92.       self.opacity = 0
  93.       self.contents_opacity = 0
  94.     end
  95.   end
  96. end

  97. #==============================================================================
  98. # ■ Scene_Map
  99. #------------------------------------------------------------------------------
  100. #  处理地图画面的类。
  101. #==============================================================================

  102. class Scene_Map < Scene_Base
  103.   alias _start start
  104.   #--------------------------------------------------------------------------
  105.   # ● 开始处理
  106.   #--------------------------------------------------------------------------
  107.   def start
  108.     @map_window = Window_Map.new
  109.     _start
  110.   end
  111.   
  112.   alias _terminate terminate
  113.   def terminate
  114.     @map_window.dispose
  115.     _terminate
  116.   end
  117.   
  118.   alias _update update
  119.   def update
  120.     @map_window.refresh
  121.     _update
  122.   end
  123. end

  124. module RPG
  125.   class Area
  126.     def name_p1
  127.       name = @name.split(/#/)[0]
  128.       return name != nil ? name : ""
  129.     end
  130.     def name_p2
  131.       name = @name.split(/#/)[1]
  132.       return name != nil ? name : ""
  133.     end
  134.     def color_1
  135.       color = @name.split(/#/)[2]
  136.       return color != nil ? color.to_i : TEXT2_COLOR
  137.     end
  138.     def color_2
  139.       color = @name.split(/#/)[3]
  140.       return color != nil ? color.to_i : TEXT3_COLOR
  141.     end
  142.   end
  143. end

  144. class Game_Character
  145.   def area_id
  146.     for area in $data_areas.values
  147.      if in_area?(area)
  148.      return area.id
  149.      end
  150.     end
  151.   end
  152. end
复制代码


[LINE]1,#dddddd[/LINE]
地图设置方法:
地图名不用说了,关于区域名——区域名又四个部分组成,标准的写法是:
区域名#附加名#区域名色码#附加名色码

区域名:区域的主名字 描绘在地图名下面
附加名:附加的名字,随便你写什么,比如对这个区域的附加属性介绍,描绘在区域名下面
区域名色码/附加名色码:前面两个项目的文字颜色,跟显示文章一样(0-31可用)

范例:草地#联盟领地#1#2

注意!如果只设定一部分是可以的,但是在中间的项目如果不填写一定要记得写#隔开!因为四个部分是又#负责识别区分的。
比如:沙漠##4 (两个#之间相当于附加名 为空字符)
[LINE]1,#dddddd[/LINE]
脚本设置:
MWINDOW_X = 240                               # 窗口X坐标
MWINDOW_Y = 25                                # 窗口Y坐标
WEIGH = 160                                   # 窗口宽度      
START_TIME = 30                               # 窗口出现时间
COUN_TIME = 30                                # 窗口持续时间
FADE_TIME = 30                                # 窗口淡去时间
TEXT1_SIZE = 20                               # 地图名的字体大小
TEXT2_SIZE = 18                               # 区域名的字体大小
TEXT3_SIZE = 18                               # 附加名的字体大小
TEXT1_COLOR = Color.new(255,60,60)            # 地图名的默认颜色
TEXT2_COLOR = 3                               # 区域名的默认颜色代码(0-31)
TEXT3_COLOR = 5                               # 附加名的默认颜色代码(0-31)
SKIN = "window"                               # 窗口皮肤的文件名

前面几个不说了,注意最后4项:
TEXT1_COLOR=====>地图名默认颜色,RGB代码
TEXT2_COLOR/TEXT3_COLOR======>区域名默认颜色,0-31
↑↑↑以上两项是地图区域设置的时候部分项不填的时候使用的缺省设置。
SKIN是窗口皮肤的文件名,这里使用了默认的window,需要替换则放自己的窗口皮肤进去,SKIN这里改成自己的窗口皮肤文件名就可以了。

范例下载:
http://rpg.blue/upload_program/files/区域显地名_99587764.rar

[LINE]1,#dddddd[/LINE]
结语:
本脚本方便实用,可自定义所有内容,颜色和皮肤根据自己需要改改好了。比较不好意思的是和沉影前辈的脚本撞车了,抱歉{/hx}
作者: 越前リョーマ    时间: 2008-8-19 23:30
好像不怎么美观…… = =
作者: Beside    时间: 2008-8-19 23:41
以下引用越前リョーマ于2008-8-19 15:30:27的发言:

好像不怎么美观…… = =


皮肤和字体颜色都可以自己改 我这个是范例  美不美观是使用者的事情
另外这个截图质量也不高
作者: zxd123314    时间: 2008-8-20 19:17
怎么显示错误???
undefined superclass 'Scene_Base'
作者: Beside    时间: 2008-8-20 19:30
这个是RMVX使用的脚本
作者: kuek9118    时间: 2008-8-21 05:51
提示: 作者被禁止或删除 内容自动屏蔽
作者: 沉影不器    时间: 2008-8-21 17:24
提示: 作者被禁止或删除 内容自动屏蔽
作者: Beside    时间: 2008-8-21 18:03
以下引用kuek9118于2008-8-20 21:51:14的发言:

呵呵~
很不錯的腳本..
可以設置成顯示地圖怪物等級嗎?
[ps]不知何年何月我才有辦法子做腳本呢

你可以在附加名的位置写上 【怪物等级:十】 之类的就可以了 自己扩展嘛

以下引用沉影不器于2008-8-21 9:24:25的发言:

原来是这份脚本...应该说我那份跟已发布的撞车,您这份还是不一样的

有个小建议
那些常量似乎都在Window_Map类内部使用,建议写成类常量

话说我还不知道常量位置的区别  谢谢提醒!
作者: ONEWateR    时间: 2008-8-22 19:37
在外国网站见过类似的,不过是xp的。
作者: 沉影不器    时间: 2008-8-22 19:41
提示: 作者被禁止或删除 内容自动屏蔽
作者: ㄆ相    时间: 2008-8-23 20:57
提示: 作者被禁止或删除 内容自动屏蔽
作者: 雪流星    时间: 2008-8-23 21:11
上次给你的那帖从头到尾有点耐心的看完...

http://rpg.blue/viewthread.php?tid=70617
作者: 经典怀旧者    时间: 2008-8-24 08:27
提示: 作者被禁止或删除 内容自动屏蔽
作者: Beside    时间: 2008-8-25 03:26
以下引用沉影不器于2008-8-22 11:41:07的发言:


以下引用ONEWateR于2008-8-22 11:37:38的发言:

在外国网站见过类似的,不过是xp的。


唔...xp也有区域?

xp有地形标记,应该可以做类似的东西

= =现在发布不了么……

作者: zh99998    时间: 2008-8-25 04:30
提点建议:当显示不同的内容的时候使用不同的版式,
就是如果只有1行字,那么居中显示,而不是固定的内容占固定的位置

这张就相当不美观

[LINE]1,#dddddd[/LINE]另外,要能用一个开关控制是否开启显示,很多时候要临时切换到某黑屏场景,这时就不要地图显示

作者: 200660408    时间: 2008-10-13 04:09
很好~
不过真的能写成显示怪等级的吗?
作者: 木葬枫    时间: 2009-1-3 19:28
发布完毕  VIP + 4
发布地址:http://rpg.blue/web/htm/news1235.htm
作者: zh99998    时间: 2009-5-3 01:54
以下引用ㄆ相于2008-8-23 12:57:39的发言:

楼主。测试的时候出现了这个。

Script'main'line 36:NoMethoderror occurred.

undefined method'name'for#<Game_Map:0 188af08>

怎么搞啊?我欲哭无泪。怎么用哪个脚本都出现?

main前是新建一个空白代码页吗?5555 不会搞。

哪位大人来救救小女子啊。

第43行改成
locationname = load_data("Data/MapInfos.rvdata")[@map_id].name
作者: 神羽邦    时间: 2009-8-23 05:21
提示: 作者被禁止或删除 内容自动屏蔽
作者: 624492089    时间: 2010-8-22 16:35
回复 Beside 的帖子


    本人完全不會程序..   我覺得你的腳本簡單方面就用了  

   但本人有一問         只顯示地圖名字  不顯示區域的名  應該怎麼改啊

   就是只有地圖不同時候才顯示地圖名字  其他一切都不管了
作者: qazsdwexc    时间: 2010-8-23 10:12
回复 神羽邦 的帖子把VX换到最新版的试试...


   




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