Project1

标题: [地图增强]NPC响应标示,路牌,门牌 [打印本页]

作者: trentswd    时间: 2008-9-23 19:19
标题: [地图增强]NPC响应标示,路牌,门牌
……自己做游戏的副产品
主要就是模仿空之轨迹还有ff12等游戏,到了NPC面前会显示「Talk」,到了门前会显示门后面的地点,等等……【囧】
功能:
1.路牌:在路口显示此方向通往哪里
2.门牌:显示门通向哪里
3.NPC响应:靠近时显示「Talk」「Trade」「Check」等图标。
截图:
路牌:

门牌:

NPC响应:
使用方法:
1.路牌:
在路口画一个区域,不用很大,取名为 方向,名称
方向请用2,4,6,8代替。
示例:

2.门牌。
门牌可以四个方向响应。
示例:

请在第一行插入注释Door
之后使用如图格式写注释。
注意,可以只写一个方向,也可以写两个方向……【囧丁乙】
一个注释栏写不下可以分多个
其实XXX_name表示门牌框的名字,XXX_type表示名字下面显示的建筑类型,XXX_range表示离主角多少距离就显示门牌。请不要大于4。
最后请用Door_END表示注释完成。
3.NPC响应。
示例:
NPC:

商人:

宝箱:(或表示隐藏物品)

请在事件的第一行用注释写上"NPC"或"Item",type中写入类型。name表示名字。最后用"NPC_END"或"Item_END"表示注释结束。
可能需要的物件:
我预先做好的标记。请解压在Graphics/system中。也可以自行替换。
文件名可在脚本中定义
http://rpg.blue/UP_PIC/200801/需要用到的文件.rar
脚本:已经分成两块,并可以和地名显示(点我)一起使用。
一、通用块。用来自定义设置和存储常量,和地名显示那里的是一样的,不用重复插入了……

  1. #▼▼▼通用变量、方法、模块、类▼▼▼
  2. #==============================================================================
  3. # ■ (模块)T_m
  4. #------------------------------------------------------------------------------
  5. #  用来存储常用常量
  6. #=============================================================================
  7. module T_m
  8.   #-----------------------------------------------------------------------------
  9.   # ● 地名窗口常量
  10.   #-----------------------------------------------------------------------------
  11.   #▼地名窗口
  12.   WIDTH = 150                                   # 窗口宽度最小值      
  13.   IN_TIME = 20                                  # 窗口出现时间
  14.   SHOW_TIME = 60                                # 窗口显示时间
  15.   FADE_TIME = 30                                # 窗口淡去时间
  16.   TEXT1_SIZE = 19                               # 地图名,区域名的字体大小
  17.   TEXT2_SIZE = 13                               # 地区名的字体大小
  18.   TEXT1_COLOR = Color.new(255,255,255)          # 地图名,区域名的默认颜色
  19.   TEXT2_COLOR = Color.new(255,60,60)            # 地区名的默认颜色
  20.   SKIN = "window"                             # 窗口皮肤的文件名
  21.   VX_H = 416                                    # VX窗口高度
  22.   VX_W = 544                                    # VX窗口宽度
  23.   ZONE_NUM =8                                   # 地区名占用角色名的编号
  24.   Map_W_S=1                                     # 控制是否显示的开关
  25.   #▼地区名窗口
  26.   Z_IN_TIME = 30                                 # 窗口出现时间
  27.   Z_SHOW_TIME = 70                               # 窗口显示时间
  28.   Z_FADE_TIME = 30                               # 窗口淡去时间
  29.   ZONE_W_S=2                                     # 控制是否显示开关


  30.   #▼计算
  31.   HEIGHT = TEXT1_SIZE + TEXT2_SIZE + 34         # 窗口高度
  32.   MWINDOW_Y = VX_H - HEIGHT - 16                # 窗口Y坐标
  33.   #----------------------------------------------------------------------------
  34.   # ● 路牌门牌NPC常量
  35.   #----------------------------------------------------------------------------
  36.   #▼路口窗口
  37.   RT_WIDTH=240                                    #窗口宽度的最小值
  38.   RT_Y=30                                            #窗口Y值
  39.   RT_INTIME=20                                    #窗口出现时间
  40.   RT_ONTIME=60                                    #窗口持续时间
  41.   RT_FADETIME=20                                  #窗口消失时间

  42.   RT_S=3                                          #控制开关
  43.   RT_TEXTSIZE=20                                   #字体大小
  44.   RT_TEXTCOLOR=Color.new(255,255,255)               #字体颜色
  45.   #▼NPC窗口
  46.   NPC_ICON_TALK="talk"                       #「谈话」图标名
  47.   NPC_ICON_TRADE="trade"                     #「交易」图标名
  48.   NPC_ICON_CHECK="check"                     #「调查」图标名
  49.   NPC_NAME_SIZE=16                           #「NPC」人名字号
  50.   NPC_S=4                                    #「NPC控制开关」编号
  51.   #▼门牌窗口
  52.   DOOR_NAME_SIZE=22                              #门牌「名称」字号
  53.   DOOR_TYPE_SIZE =16                             #门牌「类型」字号
  54.   DOOR_S=5                                    #「门牌」控制开关编号
  55.   #----------------------------------------------------------------------------
  56.   # ●其他
  57.   #----------------------------------------------------------------------------
  58.   def self.preview_dis
  59.     return @preview_dis
  60.   end
  61.   def self.preview_dis=(a)
  62.     return @preview_dis=a
  63.   end
  64.   @preview_dis=false
  65. end

  66.   #----------------------------------------------------------------------------
  67.   # ● 方法:读取属性
  68.   #----------------------------------------------------------------------------
  69.   def readattr(str,section,ignore_caps = false)
  70.     str="" if str.class!=String
  71.     result=''
  72.     section.upcase! if ignore_caps
  73.     s = section.to_sym
  74.     temp = str.split(/=/)
  75.     temp.each{|i|i.strip!}
  76.     temp[0].upcase! if ignore_caps
  77.     temp[0]=" " if temp[0]==nil
  78.     if temp[0].to_sym==s
  79.       unless temp[1]==nil
  80.         result=temp[1]
  81.       end
  82.     end
  83.     return result
  84.   end

  85. #==============================================================================
  86. # ■ Game_Map
  87. #------------------------------------------------------------------------------
  88. #  对Game_Map类的追加定义。
  89. #=============================================================================
  90. class Game_Map
  91.   #--------------------------------------------------------------------------
  92.   # ● 获取所在场景名称
  93.   #--------------------------------------------------------------------------
  94.   def name
  95.       load_data("Data/MapInfos.rvdata")
  96.   end
  97. end


  98. #==============================================================================
  99. # ■ Game_Character
  100. #------------------------------------------------------------------------------
  101. #  判断当前人物所在区域id(by beside)。
  102. #=============================================================================
  103. class Game_Character
  104.   def area_id
  105.     for area in $data_areas.values
  106.      if in_area?(area)
  107.        return area.id
  108.      end
  109.    end
  110. end
  111. end
  112.    
  113. #==============================================================================
  114. # ◎ GPRA_Bitmap
  115. #------------------------------------------------------------------------------
  116. # ◎ Bitmap功能加强
  117. #------------------------------------------------------------------------------
  118. # 制作者:绿梨子红苹果
  119. # 个人主页:vbgm.9126.com
  120. # E-Mail:[email protected]
  121. # QQ:42378361
  122. #==============================================================================

  123. class Bitmap
  124.   # 影子字
  125.   def draw_text_s(x, y, width, height, str, align=0)
  126.     # 保存当前颜色
  127.     r=self.font.color.red
  128.     g=self.font.color.green
  129.     b=self.font.color.blue
  130.     # 颜色更改成黑色
  131.     self.font.color.set(0, 0, 0)
  132.     # 绘制影子
  133.     self.draw_text(x+2, y+2, width, height, str, align)
  134.     # 恢复原始字色
  135.     self.font.color.set(r,g,b)
  136.     # 绘制原来的字
  137.     self.draw_text(x, y, width, height, str, align)
  138.   end
  139.   # 描边字
  140.   def draw_text_f(x, y, width, height, str, align=0)
  141.     # 保存当前颜色
  142.     r=self.font.color.red
  143.     g=self.font.color.green
  144.     b=self.font.color.blue
  145.     # 颜色更改成黑色
  146.     self.font.color.set(0, 0, 0)
  147.     # 绘制边框
  148.     self.draw_text(x-1, y-1, width, height, str, align)
  149.     self.draw_text(x-1, y+1, width, height, str, align)
  150.     self.draw_text(x+1, y-1, width, height, str, align)
  151.     self.draw_text(x+1, y+1, width, height, str, align)
  152.     self.draw_text(x, y-1, width, height, str, align)
  153.     self.draw_text(x, y+1, width, height, str, align)
  154.     self.draw_text(x-1, y, width, height, str, align)
  155.     self.draw_text(x+1, y, width, height, str, align)
  156.     # 恢复原始字色
  157.     self.font.color.set(r,g,b)
  158.     # 绘制原来的字
  159.     self.draw_text(x, y, width, height, str, align)
  160.     end
  161.   end
复制代码

二:NPC响应,门牌,路牌块

  1. $npc_window=[]
  2. #==============================================================================
  3. # ■ Window_Roadtip
  4. #------------------------------------------------------------------------------
  5. #  路口窗口
  6. #==============================================================================
  7. class Window_Roadtip < Window_Base
  8.   #--------------------------------------------------------------------------
  9.   # ● 初始化
  10.   #--------------------------------------------------------------------------
  11.   def initialize
  12.     super(0,0,100,100)
  13.     self.opacity=0
  14.     self.contents_opacity=0
  15.     @id=$game_player.area_id
  16.     @time=0
  17.     @name=""
  18.   end
  19.   #--------------------------------------------------------------------------
  20.   # ● 得到区域名
  21.   #--------------------------------------------------------------------------
  22.   def area_name(id=$game_player.area_id)
  23.     name=$data_areas[id].name
  24.     return name
  25.   end
  26.   #--------------------------------------------------------------------------
  27.   # ● 进行判断并取得值
  28.   #--------------------------------------------------------------------------
  29.   def judge
  30.     @continue=0
  31.     if area_name.split(/,/)[0].to_i==2||6||4||8
  32.       @direction=area_name.split(/,/)[0]
  33.       @name=area_name.split(/,/)[1]
  34.       @continue=1
  35.     end
  36.   end
  37.   #--------------------------------------------------------------------------
  38.   # ● 绘制地图
  39.   #--------------------------------------------------------------------------
  40.   def draw
  41.     @d=""
  42.     case @direction.to_i
  43.      when 2
  44.        @d="↓"
  45.      when 4
  46.        @d="←"
  47.      when 6
  48.        @d="→"
  49.      when 8
  50.        @d="↑"
  51.      end
  52.      
  53.     create_contents
  54.     self.contents.clear
  55.     self.contents.font.size=T_m::RT_TEXTSIZE
  56.     self.contents.font.color=T_m::RT_TEXTCOLOR
  57.     self.contents.draw_text(0,0,self.width-32,self.height-32,@d+@name,1)
  58.   end
  59.   #--------------------------------------------------------------------------
  60.   # ● 刷新
  61.   #--------------------------------------------------------------------------
  62.   def update
  63.     if @id!=$game_player.area_id
  64.         @id=$game_player.area_id
  65.         if $game_player.area_id.is_a?(Numeric)==true
  66.         if $game_switches[T_m::RT_S] == true
  67.           judge
  68.           if @continue==1
  69.             self.height=T_m::RT_TEXTSIZE+32
  70.             @name="" if @name==nil
  71.             self.width=[T_m::RT_WIDTH,(T_m::RT_TEXTSIZE)*(@name.size)/3+50].max
  72.             self.x=(T_m::VX_W-self.width)/2
  73.             self.y=T_m::RT_Y
  74.             if [email protected]_i
  75.               @time=T_m::RT_INTIME+T_m::RT_ONTIME+T_m::RT_FADETIME
  76.               draw
  77.               T_m::preview_dis=true
  78.             end
  79.           end
  80.         end
  81.       end
  82.     end
  83.     if @time>T_m::RT_ONTIME+T_m::RT_FADETIME
  84.       self.opacity = 255*(T_m::RT_INTIME+T_m::RT_ONTIME+T_m::RT_FADETIME-@time)/(T_m::RT_INTIME-1)
  85.       self.contents_opacity = 255*(T_m::RT_INTIME+T_m::RT_ONTIME+T_m::RT_FADETIME-@time)/(T_m::RT_INTIME-1)
  86.       @time-=1
  87.     elsif @time>T_m::RT_FADETIME
  88.       @time-=1
  89.     elsif @time>0
  90.       self.opacity = 255*(@time-1)/(T_m::RT_FADETIME-1)
  91.       self.contents_opacity = 255*(@time-1)/(T_m::RT_FADETIME-1)
  92.       @time-=1
  93.     else
  94.       self.opacity = 0
  95.       self.contents_opacity = 0
  96.     end
  97.   end
  98. end

  99. #==============================================================================
  100. # ■ Window_NPC
  101. #------------------------------------------------------------------------------
  102. #  NPC响应窗口,门牌窗口。
  103. #=============================================================================
  104. class Window_NPC < Window_Base
  105.   def initialize(type,name,add="",dir=0)
  106.     super(0,0,100,100)
  107.     self.opacity=0
  108.     self.contents_opacity=255
  109.     @time=0
  110.     @type=type
  111.     case type
  112.     when "NPC"
  113.     self.height=T_m::NPC_NAME_SIZE+32+Cache.system(T_m::NPC_ICON_TALK).height
  114.     self.width=[name.size/3*T_m::NPC_NAME_SIZE,Cache.system(T_m::NPC_ICON_TALK).width].max+32
  115.     create_contents
  116.     self.contents.font.size=T_m::NPC_NAME_SIZE
  117.     self.contents.draw_text(0,Cache.system(T_m::NPC_ICON_TALK).height+1,self.width-32,T_m::NPC_NAME_SIZE,name,1)
  118.     self.contents.blt((self.width-Cache.system(T_m::NPC_ICON_TALK).width-32)/2,0,Cache.system(T_m::NPC_ICON_TALK),Rect.new(0,0,Cache.system(T_m::NPC_ICON_TALK).width,Cache.system(T_m::NPC_ICON_TALK).height))
  119.     @time=10
  120.     when "Item"
  121.     self.height=32+Cache.system(T_m::NPC_ICON_CHECK).height
  122.     self.width=Cache.system(T_m::NPC_ICON_CHECK).width+32
  123.     create_contents
  124.     self.contents.blt((self.width-Cache.system(T_m::NPC_ICON_CHECK).width-32)/2,0,Cache.system(T_m::NPC_ICON_CHECK),Rect.new(0,0,Cache.system(T_m::NPC_ICON_CHECK).width,Cache.system(T_m::NPC_ICON_CHECK).height))
  125.     @time=10
  126.     when "Trade"
  127.     self.height=32+Cache.system(T_m::NPC_ICON_TRADE).height+T_m::NPC_NAME_SIZE
  128.     self.width=[Cache.system(T_m::NPC_ICON_TRADE).width+32,name.size/3*T_m::NPC_NAME_SIZE+32].max
  129.     create_contents
  130.     self.contents.font.size=T_m::NPC_NAME_SIZE
  131.     self.contents.draw_text(0,Cache.system(T_m::NPC_ICON_TRADE).height+1,self.width-32,T_m::NPC_NAME_SIZE,name,1)
  132.     self.contents.blt((self.width-Cache.system(T_m::NPC_ICON_TRADE).width-32)/2,0,Cache.system(T_m::NPC_ICON_TRADE),Rect.new(0,0,Cache.system(T_m::NPC_ICON_TRADE).width,Cache.system(T_m::NPC_ICON_TRADE).height))
  133.     @time=10
  134.     when "Door"
  135.     self.opacity=255
  136.     self.height=T_m::DOOR_NAME_SIZE+T_m::DOOR_TYPE_SIZE+32+2
  137.     self.width=[(name.size/3+1)*T_m::DOOR_NAME_SIZE,add.size/3*T_m::DOOR_TYPE_SIZE].max+32
  138.     create_contents
  139.     dire=""
  140.     case dir
  141.     when 2
  142.       dire="↑"
  143.     when 4
  144.       dire="→"
  145.     when 6
  146.       dire="←"
  147.     when 8
  148.       dire="↓"
  149.     end
  150.     self.contents.font.size=T_m::DOOR_NAME_SIZE
  151.     self.contents.draw_text(0,0,self.width-32,T_m::DOOR_NAME_SIZE,dire+name,1)
  152.     self.contents.font.size=T_m::DOOR_TYPE_SIZE
  153.     self.contents.font.color=Color.new(105,105,105)
  154.     self.contents.draw_text(0,T_m::DOOR_NAME_SIZE+3,self.width-32,T_m::DOOR_TYPE_SIZE,add,1)
  155.     @time=10
  156.     end
  157.   end
  158.   def refresh(x1,y1)
  159.     if @type!="Door"
  160.       self.x=x1-self.width/2
  161.       self.y=y1-self.height+10
  162.       if @time>0
  163.         self.contents_opacity=255*(10-@time)/9
  164.         @time-=1
  165.       elsif @time<-1
  166.         self.contents_opacity=255*(-@time-2)/9
  167.         @time+=1
  168.       elsif @time==-1
  169.         self.dispose
  170.       else
  171.         self.contents_opacity=255
  172.       end
  173.     else
  174.       @player_height= Cache.character($game_player.character_name).height / 4/2
  175.       self.x=$game_player.screen_x-self.width/2
  176.       self.y=$game_player.screen_y-@player_height-self.height-10
  177.       if @time>0
  178.         self.contents_opacity=255*(10-@time)/9
  179.         @time-=1
  180.       elsif @time<-1
  181.         self.contents_opacity=255*(-@time-2)/9
  182.         @time+=1
  183.       elsif @time==-1
  184.         self.dispose
  185.       else
  186.         self.contents_opacity=255
  187.       end
  188.     end   
  189.   end
  190.   def disappear
  191.     @time=-11 if @time==0
  192.   end
  193. end

  194. #==============================================================================
  195. # ■ Game_Event
  196. #------------------------------------------------------------------------------
  197. #  对门牌窗口和NPC响应的追加定义
  198. #  感觉会很有冲突OTZ
  199. #==============================================================================

  200. class Game_Event < Game_Character
  201.   #--------------------------------------------------------------------------
  202.   # ● 初始化对象
  203.   #--------------------------------------------------------------------------
  204.   alias t_initialize initialize
  205.   def initialize(map_id, event)
  206.     t_initialize(map_id, event)
  207.     get_info
  208.   end
  209.   #--------------------------------------------------------------------------
  210.   # ● 设置事件页
  211.   #--------------------------------------------------------------------------
  212.   alias t_setup setup
  213.   def setup(new_page)
  214.     t_setup(new_page)
  215.     self.NPC_dispose
  216.     get_info
  217.   end
  218.   #--------------------------------------------------------------------------
  219.   # ● 获取信息
  220.   #--------------------------------------------------------------------------
  221.   def get_info
  222.       event=self
  223.       section=[]
  224.       @title=""
  225.       return if event.list==nil
  226.       if event.list[0].code==108
  227.         case event.list[0].parameters[0]
  228.         when "NPC"
  229.         end_s="NPC_END"
  230.         @title="NPC"
  231.         @type="NPC"
  232.         @name=""
  233.         section=["type","name"]
  234.         when "Item"
  235.         end_s="Item_END"
  236.         @title="Item"
  237.         section=[]
  238.         when "Door"
  239.         end_s="Door_END"
  240.         @title="Door"
  241.         section=["type","left_name","left_range","left_type",
  242.         "right_name","right_range","right_type",
  243.         "up_name","up_range","up_type",
  244.         "down_name","down_range","down_type"]
  245.         @type="Door"
  246.         @left_name=""
  247.         @left_range=0
  248.         @left_type=""
  249.         @right_name=""
  250.         @right_range=0
  251.         @right_type=""
  252.         @up_name=""
  253.         @up_range=0
  254.         @up_type=""
  255.         @down_name=""
  256.         @down_range=0
  257.         @down_type=""
  258.         end
  259.       end
  260.    
  261.   
  262.       @event_width = Cache.character(event.character_name).width / 4/4
  263.       @event_height = Cache.character(event.character_name).height / 4/2
  264.     for i in 0...event.list.size
  265.       for j in section
  266.         temp=readattr(event.list[i].parameters[0],j)
  267.         if temp!=nil && temp != ""
  268.           case j
  269.           when "type"
  270.           @type=temp
  271.           when "name"
  272.           @name=temp
  273.           when "left_name"
  274.           @left_name=temp
  275.           when "left_range"
  276.           @left_range=temp.to_i
  277.           when "left_type"
  278.           @left_type=temp
  279.           when "right_name"
  280.           @right_name=temp
  281.           when "right_range"
  282.           @right_range=temp.to_i
  283.           when "right_type"
  284.           @right_type=temp
  285.           when "up_name"
  286.           @up_name=temp
  287.           when "up_range"
  288.           @up_range=temp.to_i
  289.           when "up_type"
  290.           @up_type=temp
  291.           when "down_name"
  292.           @down_name=temp
  293.           when "down_range"
  294.           @down_range=temp.to_i
  295.           when "down_type"
  296.           @down_type=temp
  297.           end
  298.         end
  299.         if event.list[i].parameters[0]==end_s
  300.           breakable=true
  301.           break
  302.         else
  303.           breakable=false
  304.         end
  305.       end
  306.       break if breakable==true
  307.     end
  308.   end

  309.   #--------------------------------------------------------------------------
  310.   # ● 处理信息
  311.   #--------------------------------------------------------------------------
  312.   def t_dis
  313.     x1=self.x
  314.     x2=$game_player.x
  315.     y1=self.y
  316.     y2=$game_player.y
  317.     temp_x=x1-x2
  318.     temp_x=-temp_x if temp_x<0
  319.     temp_y=y1-y2
  320.     temp_y=-temp_y if temp_y<0
  321.     if !(temp_x>5||temp_y>5)
  322.     if @title!="Door"
  323.       if $game_switches[T_m::NPC_S]==true
  324.       if ((x1-x2==1 ||x2-x1==1) && y1==y2)||((y1-y2==1 ||y2-y1==1) && x1==x2)
  325.         case @title
  326.         when "NPC"
  327.           if $npc_window[self.id].class!=Window_NPC
  328.             $npc_window[self.id]=Window_NPC.new(@type,@name) if $npc_window[self.id].class!=Window_NPC
  329.           end
  330.           if $npc_window[self.id].class==Window_NPC
  331.             $npc_window[self.id]=Window_NPC.new(@type,@name) if $npc_window[self.id].disposed?
  332.           end
  333.         when "Item"
  334.           if $npc_window[self.id].class!=Window_NPC
  335.             $npc_window[self.id]=Window_NPC.new("Item","") if $npc_window[self.id].class!=Window_NPC
  336.           end
  337.           if $npc_window[self.id].class==Window_NPC
  338.             $npc_window[self.id]=Window_NPC.new("Item","") if $npc_window[self.id].disposed?
  339.           end
  340.         end
  341.       elsif $npc_window[self.id].class==Window_NPC
  342.         $npc_window[self.id].disappear
  343.       end
  344.       end
  345.     elsif @title=="Door"
  346.       if $game_switches[T_m::DOOR_S]==true
  347.       if (@left_range!=0&&y1==y2 && x2-x1<0 && x1-x2<=@left_range)
  348.         if $npc_window[self.id].class!=Window_NPC
  349.           $npc_window[self.id]=Window_NPC.new(@type,@left_name,@left_type,4) if $npc_window[self.id].class!=Window_NPC
  350.         end
  351.         if $npc_window[self.id].class==Window_NPC
  352.           $npc_window[self.id]=Window_NPC.new(@type,@left_name,@left_type,4) if $npc_window[self.id].disposed?
  353.         end
  354.       
  355.       
  356.       elsif (@right_range!=0&&y1==y2&&x2-x1>0&&x2-x1<=@right_range)
  357.         if $npc_window[self.id].class!=Window_NPC
  358.           $npc_window[self.id]=Window_NPC.new(@type,@right_name,@right_type,6) if $npc_window[self.id].class!=Window_NPC
  359.         end
  360.         if $npc_window[self.id].class==Window_NPC
  361.           $npc_window[self.id]=Window_NPC.new(@type,@right_name,@right_type,6) if $npc_window[self.id].disposed?
  362.         end
  363.      
  364.       
  365.       elsif (@up_range!=0&&x1==x2&&y2-y1<0&&y1-y2<=@up_range)
  366.         if $npc_window[self.id].class!=Window_NPC
  367.           $npc_window[self.id]=Window_NPC.new(@type,@up_name,@up_type,8) if $npc_window[self.id].class!=Window_NPC
  368.         end
  369.         if $npc_window[self.id].class==Window_NPC
  370.           $npc_window[self.id]=Window_NPC.new(@type,@up_name,@up_type,8) if $npc_window[self.id].disposed?
  371.         end
  372.      
  373.       
  374.       elsif (@down_range!=0&&x1==x2&&y2-y1>0&&y2-y1<=@down_range)
  375.         if $npc_window[self.id].class!=Window_NPC
  376.           $npc_window[self.id]=Window_NPC.new(@type,@down_name,@down_type,2) if $npc_window[self.id].class!=Window_NPC
  377.         end
  378.         if $npc_window[self.id].class==Window_NPC
  379.           $npc_window[self.id]=Window_NPC.new(@type,@down_name,@down_type,2) if $npc_window[self.id].disposed?
  380.         end
  381.       
  382.         
  383.       elsif $npc_window[self.id].class==Window_NPC
  384.         $npc_window[self.id].disappear
  385.       end
  386.     end
  387.     end
  388.     end
  389.   end
  390.   #--------------------------------------------------------------------------
  391.   # ● 释放$npc_window[self.id]
  392.   #--------------------------------------------------------------------------
  393.   def NPC_dispose
  394.     $npc_window[self.id].dispose if ($npc_window[self.id].class==Window_NPC&&(!$npc_window[self.id].disposed?))
  395.   end
  396.   #--------------------------------------------------------------------------
  397.   # ● 刷新
  398.   #--------------------------------------------------------------------------
  399.   alias t_update update
  400.   def update
  401.     t_dis
  402.     if $npc_window[self.id].class==Window_NPC
  403.       $npc_window[self.id].refresh(self.screen_x,self.screen_y-@event_height) unless $npc_window[self.id].disposed?
  404.     end
  405.     if $npc_window[self.id].class==Window_NPC && $game_player.transfer?
  406.       $npc_window[self.id].dispose unless $npc_window[self.id].disposed?
  407.     end
  408.     t_update
  409.   end
  410. end


  411. #==============================================================================
  412. # ■ Scene_Map
  413. #------------------------------------------------------------------------------
  414. #  对Scene_Map的追加定义。
  415. #==============================================================================

  416. class Scene_Map < Scene_Base  
  417.   #--------------------------------------------------------------------------
  418.   # ● 开始处理时建立对象
  419.   #--------------------------------------------------------------------------
  420.   alias t_start start
  421.   def start
  422.     @window_roadtip = Window_Roadtip.new
  423.     t_start
  424.   end
  425.   #--------------------------------------------------------------------------
  426.   # ● 释放时释放对象
  427.   #--------------------------------------------------------------------------
  428.   alias t_terminate terminate
  429.   def terminate
  430.     @window_roadtip.dispose
  431.     for event in $game_map.events.values
  432.       event.NPC_dispose
  433.     end
  434.     t_terminate
  435.   end
  436.   #--------------------------------------------------------------------------
  437.   # ● 刷新时刷新对象
  438.   #--------------------------------------------------------------------------
  439.   alias t_update update
  440.   def update
  441.     @window_roadtip.update
  442.     t_update
  443.   end
  444. end
复制代码
范例工程:
实在没精力做了……OTZ


              [本贴由 八云紫 于 2008-10-30 12:48:19 进行了编辑]
作者: sunson468    时间: 2008-9-23 19:59
楼主用的是系统字体啊,楼主绝不觉得NPC名字16号字体有些粗呢?

我想用14号,但是名字又想清晰点,楼主有好的建议没?
作者: trentswd    时间: 2008-9-23 20:08
可以在第一个脚本里改字号……
用点对点字体吧……比如宋体……【OTZ】虽然貌似RM不是点对点的……
还可以把阴影关掉……
我用的是准圆……不过太大了所以没传上来……
作者: Fantasy幻想    时间: 2008-9-23 20:59
都抱走了,猫做的脚本都很符合我的胃口=w=
作者: v2sam    时间: 2008-9-23 21:14
{/se}弄着弄着,一套会出来吧
作者: Zohar    时间: 2008-9-23 21:19
提示: 作者被禁止或删除 内容自动屏蔽
作者: trentswd    时间: 2008-9-23 21:21
以下引用v2sam于2008-9-23 13:14:10的发言:

弄着弄着,一套会出来吧

按照我懒的程度……应该不太可能……
以下引用Zohar于2008-9-23 13:19:54的发言:

我是来催楼主填坑的……

哪个坑?
作者: Zohar    时间: 2008-9-23 21:33
提示: 作者被禁止或删除 内容自动屏蔽
作者: cheyenne    时间: 2008-9-23 21:56
{/fd}我是来告诉楼主我白给你画范例地图了的
作者: trentswd    时间: 2008-9-24 01:42
以下引用cheyenne于2008-9-23 13:56:56的发言:

我是来告诉楼主我白给你画范例地图了的


[本贴由作者于 2008-9-23 13:59:59 最后编辑]

我只是暂时不做……最近太困了……
顺便乃的签名……乃又腹黑了……
作者: 越前リョーマ    时间: 2008-9-25 02:25
脚本万岁……
作者: chinamonkey    时间: 2008-9-25 23:07
提示: 作者被禁止或删除 内容自动屏蔽
作者: trentswd    时间: 2008-9-26 00:06
以下引用chinamonkey于2008-9-25 15:07:28的发言:

这个不错,拿来用了。
好像也可以用事件做。
比如进入某张地图时,取合适位置显示文章,内容为地图名,背景用自制的windowskin,可以达到类似效果。
路牌也是一样。

OTL用事件会麻烦死……而且显示文章还得去改脚本
作者: Beside    时间: 2008-9-26 19:30
很好 支持  本来准备写这个的
作者: 沉影不器    时间: 2008-9-30 04:10
提示: 作者被禁止或删除 内容自动屏蔽
作者: 沉影不器    时间: 2008-9-30 04:26
提示: 作者被禁止或删除 内容自动屏蔽
作者: trentswd    时间: 2008-9-30 09:04
OTL我再另外一贴声明这段脚本是参考你的,这贴忘了写囧
不过下面的和你的区别还是比较大的,因为这是做游戏的副产品,所以考虑到还有读取其他字段,所以取消大小写没有弄掉。
|||||||||||||我没有恶意,如果你不希望被这样使用,我这就去删了……

http://rpg.blue/viewthread.php?tid=104676
声明贴如上……
作者: 沉影不器    时间: 2008-9-30 17:24
提示: 作者被禁止或删除 内容自动屏蔽
作者: trentswd    时间: 2008-9-30 22:40
66的游戏,研究过的。
是个并行事件,判断坐标,然后显示动画

所以你找的到脚本才怪||||||||
所以66游戏才只有这一个路牌,因为并行事件卡,而且做动画麻烦

至于这一个,对于会脚本的人只是提供一个思路而已……所以可以把那个window换成sprite,一样会有很好的效果,所以最终效果还要调试,只是当时写了太久,已经很烦了,就没去美化。
作者: 松谷修三    时间: 2008-10-1 04:14
用不了
还是搞范例出来吧
作者: trentswd    时间: 2008-10-1 06:02
以下引用松谷修三于2008-9-30 20:14:06的发言:

用不了
还是搞范例出来吧

忘了说要开开关4和5
至于范例……
你还是别等了……
作者: 沉影不器    时间: 2008-10-1 18:41
提示: 作者被禁止或删除 内容自动屏蔽
作者: 松谷修三    时间: 2008-10-1 19:51
以下引用trentswd于2008-9-30 22:02:51的发言:


以下引用松谷修三于2008-9-30 20:14:06的发言:

用不了
还是搞范例出来吧


忘了说要开开关4和5
至于范例……
你还是别等了……

{/fd}原来是这样
作者: 松谷修三    时间: 2008-10-2 03:21
{/jy}冲突了
如果地图有自动执行或者并行处理的事件
228行就会XX错误D
      if event.list[0].code==108
作者: trentswd    时间: 2008-10-2 03:49
以下引用松谷修三于2008-10-1 19:21:10的发言:

冲突了
如果地图有自动执行或者并行处理的事件
228行就会XX错误D
     if event.list[0].code==108

感谢指出……我这就去看看……泪奔
============
我看了,设了自动并行,没有出错啊……
作者: 松谷修三    时间: 2008-10-2 19:25
我的.......{/fd}坏了?
作者: 松谷修三    时间: 2008-10-2 19:26
看来是传说中的RPWT{/dk}

哎,自动没问题,并行有问题啊
作者: 松谷修三    时间: 2008-10-2 19:33
恩,是并行处理的问题
奇怪,编辑回复不起作用了
作者: 松谷修三    时间: 2008-10-2 20:18
版主~允许我再反馈一下{/hx}我知道你很善良的
{/hx}LZ,路牌和某个功能没效果啊,只有NPC有效,但是并行处理却冲突
作者: trentswd    时间: 2008-10-2 22:46
……OTZ,LS你可以按了编辑再等等的……
把开关都打开的情况下,我都没有问题啊……并行也没有问题……

所以把你详细的给我看看吧……光说并行我也不知道是什么……
作者: 松谷修三    时间: 2008-10-2 23:00
我放弃这个脚本好了~{/dy}
作者: 我想被发卡    时间: 2008-10-4 05:35
提示: 作者被禁止或删除 内容自动屏蔽
作者: 8231153    时间: 2008-10-4 06:47
这个脚本好用吗?
作者: trentswd    时间: 2008-10-4 08:01
我也不知道……望,已经有同学放弃了……
建议没有耐心就不要用了……|||||
用了有问题欢迎来反应……
作者: 沉影不器    时间: 2008-10-4 17:49
提示: 作者被禁止或删除 内容自动屏蔽
作者: 松谷修三    时间: 2008-10-4 21:35
{/hx}放弃是不可以的,我很需要这个脚本呢,加油改{/hx}支持你
作者: 松谷修三    时间: 2008-10-4 23:23
以下引用沉影不器于2008-10-4 9:49:37的发言:

松谷修三讲的冲突是脚本考虑不周造成的...俺刚开始编event脚本时也吃过这亏
当某个事件被执行erase后返回值变nil,就会报错

沉影去帮LZ改一下
作者: 松谷修三    时间: 2008-10-5 00:15
沉影的脚本是超专业的
作者: trentswd    时间: 2008-10-5 09:13
用begin rescue行么……我去试试……
==========
编辑了脚本,在      if event.list[0].code==108
前加一行
      return if event.list==nil
试试……
作者: 松谷修三    时间: 2008-10-5 22:35
哦,我试试


==============
好了,么事了,现在解决路牌那些
作者: 沉影不器    时间: 2008-10-6 04:47
提示: 作者被禁止或删除 内容自动屏蔽
作者: 松谷修三    时间: 2008-10-6 04:48
以下引用沉影不器于2008-10-5 20:47:24的发言:


以下引用松谷修三于2008-10-4 16:15:53的发言:

沉影的脚本是超专业的


遗憾,不是专业是跨专业.

懵懂+迷茫
作者: zhengchuan    时间: 2008-10-9 18:46
提示: 作者被禁止或删除 内容自动屏蔽
作者: trentswd    时间: 2008-10-10 02:17
我目前整个人都积分了……就算了吧……
作者: 做游戏的新手    时间: 2008-10-10 02:18
上传个范例吧
作者: 松谷修三    时间: 2008-10-11 02:23
那么偶来做个
作者: 松谷修三    时间: 2008-10-11 02:42
只能用NPC响应,所以只做了那个....
http://rpg.blue/upload_program/d/松谷修三_[地图增强]NPC响应标示_104092902.rar其他怎么用,MS用不了
呀?URL不行了?
作者: trentswd    时间: 2008-10-11 05:46
RT_S=3                                          #控制开关
NPC_S=4                                    #「NPC控制开关」编号
DOOR_S=5                                    #「门牌」控制开关编号

http://rpg.blue/upload_program/d/trentswd_[地图增强]NPC响应标示_104103876.rar
将上述开关打开就可以了……囧……
话说LS的同学,我把你的功能补全了……三个功能里面都有……
作者: 松谷修三    时间: 2008-10-19 20:56
{/hx}JP不能沉了 [LINE]1,#dddddd[/LINE]版主对此帖的评论:『那你就 沉 了吧。>_<』,积分『-100』。这些被扣积分的一半会用于对本帖正确答案的悬赏。
作者: 风雪优游    时间: 2008-10-25 00:05
很不错的脚本,就是太麻烦0 0
作者: 八云紫    时间: 2008-10-30 21:01
发布完毕
   
发布页面:
   http://rpg.blue/web/htm/news1177.htm

VIP + 3  {/hx}
作者: 松谷修三    时间: 2008-11-2 03:38
我也有份呢....{/ll}




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