查看: 1479|回复: 4

[原创发布] 【VA】ULDS无限图层便捷模版

[复制链接]

葱

梦石
26
星屑
13748
在线时间
2230 小时
注册时间
2012-12-12
回帖
567

极短28获奖

发表于 2026-3-10 06:50:58 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 congwsbn 于 2026-3-10 08:21 编辑

简介 /
此脚本为更方便的使用【ULDS】而制作,极大简化繁琐操作。
脚本作者:@百里_飞柳 ,范例工程:@congwsbn ,兼容RGD部分:deepseek


功能介绍 /
如果一张地图有下层、上层、光层、影层等多个远景图,每一张都要复制一遍地图注释很麻烦吧。
某个地图不想要光层、影层还要特意修改注释;或是想要整体修改某个值,要每张地图都去修改。
用便捷模版模版便可以一句“<ulds_diy map 1>”完成全部配置,
并自动判断有无下层、上层、光层、影层等,方便整体修改。

[fold=使用介绍]1. 先在脚本中自定义模版:
新建图像j1.png
此模版中已含有 下层、上层_U、光层_L、影层_S

2. 在地图备注中写入一句指令便可自动判断需要显示的层:


新建图像j2.jpg → 新建图像j4.jpg

3. 也可兼容<ulds>和原版远景图:

新建图像j3.jpg → 新建图像j5.jpg [/fold]

脚本 /
[pre lang="ruby" line="1"]
#encoding:utf-8
#==============================================================================
# ● ULDS便捷模版
#    脚本作者:老鹰  (https://github.com/OneEyedEagle/EAGLE-RGSS3)
#    范例工程:葱兔 Onion rabbit  (https://rpg.blue/?317370)
#    兼容RGD部分(解决RGD打包脚本失效的问题):deepseek
#==============================================================================
module Taroxd::ULDS
  DIY_SETTINGS = {
# -----------------------------------------------------------------------------
#  ▍使用方法
# -----------------------------------------------------------------------------

#  ● 地图备注写: <ulds_diy map filename>

#     释义:
#     map      → 下方模版对应的名称,名称中不能有空格。
#     filename → 模板中的 [name],也就是远景图名称。
#                 在 [name]前可以加入统一前缀,如“map”,就可以只写编号了。
#                 在 [name]后加后缀,显示对应名称远景图,没有便自动跳过。
#                   如 _U 为上层遮挡, _L 为光层,_S 为影层。
#   ·若要兼容<ulds></ulds>,请将 <ulds_diy> 放置于备注最后(参考“window”地图)
#   ·远景素材必须是工程中有的素材(红点),VA自带的RTP(蓝点)不行
  
# -----------------------------------------------------------------------------
#  ▍模版格式说明
# -----------------------------------------------------------------------------
#  "模版名称" =>  
#   "自定义内容,如<ulds=Map[name]></ulds>"
#  ,(逗号不要漏掉)

# -----------------------------------------------------------------------------
#  ▍模版1
# -----------------------------------------------------------------------------
"map" =>
"<ulds=map[name]></ulds>

<ulds=map[name]_U>
  z: 101
</ulds>

<ulds=map[name]_L>
  z: 370
  blend_type: 1
</ulds>

<ulds=map[name]_S>
  z: 375
  blend_type: 2
</ulds>
",

# -----------------------------------------------------------------------------
#  ▍模版2、3、4……
# -----------------------------------------------------------------------------
#~ "" => "
#~ # 内容

#~ ",


#==============================================================================
#                                 × 设定完毕 ×
#==============================================================================
  }
# -----------------------------------------------------------------------------

  RE_DIY = /<ulds_diy +(.*?) +(.*?)>/mi

  class << self
    # 保存原始的 new 方法(如果需要备用)
    alias_method :new_original, :new

    # 新的 new 方法:如果位图加载失败,则返回 nil(不创建对象)
    def new(settings, viewport)
      @settings = settings
      bitmap = make_bitmap
      return nil unless bitmap  # 位图为空则不创建对象

      # 创建容器(Sprite 或 Plane)
      container = (extract('loop') ? Plane : Sprite).new(viewport)
      container.bitmap = bitmap
      container.instance_eval(init_container_code, __FILE__, __LINE__)
      container
    end

    # 重写 make_bitmap,捕获文件不存在的异常,返回 nil
    def make_bitmap
      basename = extract(nil)
      return nil if basename.empty?  # 文件名为空则跳过

      folder_name = "Graphics/#{extract('path', DEFAULT_PATH).chomp}"
      Bitmap.new("#{folder_name}/#{basename}")
    rescue Errno::ENOENT
      # 图片不存在,安静地跳过(不输出警告,避免干扰)
      nil
    end

    # 新的 from_note:处理 <ulds_diy> 标签,合并后逐个解析,自动跳过位图缺失的图层
    def from_note(note, viewport)
      diy_strings = []
      note.scan(RE_DIY).each do |type, name|
        template = DIY_SETTINGS[type]
        next unless template
        diy_strings << template.gsub('[name]', name)
      end
      combined_note = diy_strings.join("\n") + "\n" + note

      # 解析所有 <ulds> 标签,逐个创建对象
      combined_note.scan(RE_OUTER).map do |name, contents|
        settings = {nil => name}
        contents.scan(RE_INNER) do |key, value|
          (settings[key] ||= '') << value << "\n"
        end
        new(settings, viewport)  
      end.compact
    end
  end
end
[/pre]

更多详情可参考范例工程  ▶ 百度网盘

ULDS便捷模版.rar (4.19 MB, 下载次数: 36)


———————————————————————————————————————————————————————
w-conggzt.png
  ▶ 葱の耕种田
———————————————————————————————————————————————————————
◎ Onion rabbit - Congwsbn


评分

参与人数 4赞 +4 收起 理由
星间漫游起重机 + 1 精品文章
百里_飞柳 + 1 精品文章
IndigoIX + 1 塞糖
白小荟 + 1 好东西!

查看全部评分


▶ 葱兔の游戏列表 (´・ω・`)
梦石
0
星屑
1934
在线时间
296 小时
注册时间
2020-8-9
回帖
21

极短28参与极短27参与

发表于 2026-3-10 07:02:03 | 显示全部楼层
这么强?!
回复

使用道具 举报

梦石
0
星屑
1679
在线时间
163 小时
注册时间
2022-1-14
回帖
27
发表于 2026-3-10 08:49:31 | 显示全部楼层
这个好!
用原生ULDS的时候,其实做个新地图复制备注的时候还不算麻烦,也就是改名字时仔细一点检查
但如果做着做着要加东西:“加个开关控制昼夜吧!加点太阳光晕!”之类的就要一张一张改了
(而且备注那个小窗口,内容一多只能用方向键上下翻……也不能用鼠标滚轮的说)
有这个的话就可以统一用模板管理了,妙哉!
回复

使用道具 举报

老鹰

梦石
40
星屑
37812
在线时间
7091 小时
注册时间
2012-5-26
回帖
3297

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

发表于 2026-3-10 08:52:48 | 显示全部楼层
只是做了一点微小的工作,DeepSeek一改,都看不出我的代码了
回复

使用道具 举报

梦石
4
星屑
9336
在线时间
889 小时
注册时间
2017-10-28
回帖
441
发表于 2026-5-23 11:31:25 | 显示全部楼层
居然還有便捷模板,再也不用一個個複製粘貼了好耶
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部