更新于 v252 - 2020 年 4 月 作者:Marcos Elias
Proton Bus 地图模组系统的第 2 阶段允许游戏中拥有乘客、交通和其他更多内容!这将其提升到了另一个层次,实际上可以将此功能前后的 Proton 分开。这几乎就像一个新游戏!
警告: 由于时间限制,无法在转换和编辑过程中提供个人支持。我们建议您自己尝试,看看其他地图是如何制作的,并探索文件结构。最好在 Facebook 游戏群组中发布相关问题,这样解决方案可以帮助每个人,其他模组制作者也可以帮助您。
如果您尚未订阅,请加入制作人的频道:www.youtube.com/marquinhosxp。 一些视频和教程发布在那里。
PBSU 官方 Facebook 页面:https://www.facebook.com/protonbusoficial 以及 PBSR:https://www.facebook.com/protonbusrod.oficial/
模组创作者的独家群组: https://www.facebook.com/groups/pbsmods/ 如果您只是玩家,请避免加入此群组,以免因离题帖子(将被删除)而造成混乱!
用户群组: 在这些群组中,从玩家的角度自由发布截图、提示、视频、各种教程等:
获取模组纹理的好网站提示: http://www.textures.com
在开始第 2 阶段的地图之前,您必须掌握第 1 阶段的基本制作水平。如果您还不熟悉,请不要担心,您可以跟随本指南以及示例地图进行操作。最大的要求是拥有 Blender 的基础知识,因为我们将使用它来导出地图。
关于第 1 阶段的旧文档在这里,针对地图: http://blog.protonbus.com.br/2019/09/experimental-mods-de-mapas-no-pbs.html
针对巴士: http://blog.protonbus.com.br/2018/09/primeira-fase-do-sistema-de-mods-de.html
始终使用最新版本的游戏总是好的!旧版本不再受支持,beta 版本在不断发展,所以我们总是考虑最新的。您可以在 http://pbsu.busmods.com 找到最新的城市版构建,在 http://pbsr.busmods.com 找到公路版。
基本上,我们使用 Blender 2.79 来制作场景,以 3ds 格式导出模型,并为 Proton Bus 系统创建文件夹和文件结构。
重要提示:使用 BLENDER 2.79! 当前游戏格式所需的导出器在 Blender 2.8 中不起作用,显然它已被停止使用,并且至今没有人更新它。也许将来它会再次起作用,有些人正在尝试。
您可以在这里下载 Blender 2.79:https://download.blender.org/release/Blender2.79/ 最新版本通常是名称中带有“b”的版本。平台无关紧要,这取决于您的系统(Windows、Linux 或 Mac)和架构(32 或 64 位)。
如果您已经在 2.8 中开始了地图,建议导出为 2.79 可以打开的某种中间格式,然后从那里导出到游戏。
重要提示:修改 PROTON 的 3DS 导出器! Blender 中的默认 3ds 导出器会将对象和纹理名称截断为 12 个字符。我们要避免某些部件名称和/或纹理名称出现错误,通常需要的字符数不止于此。
下载用于导出的修改后的 Blender 插件(Blender 2.79 的文件): http://proton.viamep.com/coisas/export_3ds_protonbus_blender279.zip
关于如何更改插件的教程: https://youtu.be/0EokFmSjGdA
如果您愿意,不用下载这个,而是更改 Blender 的 scripts\addons\io_scene_3ds 文件夹中的 export_3ds.py 文件。查找 [:12] 并将 12 更改为一个大得多的数字,如 999。这是字符限制。没有这个,导出到游戏可能会失败。
提示: 下载 BLENDER 时,您可以选择 zip 中的“便携式”版本,以便同时保留多个版本。
Proton 中的地图由几个 txt 文件(纯文本)和一些文件夹组成。基本的和主要的结构是一个地图定义 txt 和一个文件夹,两者都位于 maps 文件夹中,而该文件夹又位于游戏的 mods 文件夹中。
PC 上的结构示例:

地图定义 txt 必须以 .map.txt 结尾(例如:Estrada Longa.map.txt)。必须是一个唯一的名称!
重要提示: 切勿在模组文件名中使用重音符号、变音符或特殊字符!
在这个 txt 中,我们将拥有基本结构:
[map]
baseDir=Estrada Longe
; 地图的基本文件夹,与 .map.txt 一起位于 maps 中
modelsDir=Rota 1
; 模型文件夹,位于 tiles 文件夹内
textures=textures
; 纹理文件夹
mapModVersion=2
; 在第 2 阶段使用数字 2!
preview=preview.png
; 选择屏幕图像(16:9,例如:640x360)
在地图的基本文件夹中,必须有其他文件夹:

dest:存储标志和牌照。skins:存储地图巴士皮肤(在 skins/0/pbc 内)。textures:存储纹理。 避免 JPG,使用 PNG!tiles:必须强制使用此名称。其中包含模型文件夹 (modelsDir)。重要提示: PROTON BUS 地图模组是完全加载的!它们不能太重。如果您要做几条长线,请将它们分成几部分。
在 modelsDir 中定义的文件夹内,是导出的 .3ds 文件和配置:

模型文件夹的内部结构:

aipeople:行人设置。aitrains:火车设置。aivehicles:交通设置。busstops:巴士站设置。entrypoints.txt:高级入口点设置。entrypoints_list.txt:入口点的简单列表。重要提示: 模组不受保护!从技术上讲,没有任何游戏是受保护的。防止您的模组被编辑或泄露的唯一方法是不发布它。
入口点定义了开始游戏时巴士出现的位置。它们必须具有唯一的名称(例如:351F-10 TP,Garagem Central)。
重要提示: 切勿在这些名称中使用重音符号或特殊字符!也不要使用斜杠。
简单列表,每行一个名称。

定义地图上的位置和物理旋转。

请记住: 在 Blender 中,Y 是前/后,Z 是高度。在 Unity(游戏)中,Y 是高度,Z 是前/后。复制坐标时反转 Y 和 Z!
要找出坐标,请在 Blender 中使用一个 Empty 对象:

在 dest 文件夹中,创建与 txt 中定义的 entrypoints 名称完全相同的文件夹。

在每个目的地文件夹内是图像:

重要提示: 避免手机图像大于 2048 像素!
建议的标志文件名:
1.png, 2.png, 3.png (电子标志 1024x128)capelinhaDigital.png, capelinhaPVC.png (256x128)lonaDestino.png, lonaLinha.png (卷帘标志)placa1.png, placa2.png, placa3.png (侧面和前面牌照)每个站点在 3D 中必须有一个唯一的名称(例如:zzPonto1)。
站点包括:
nomedoponto_trigger 的不可见立方体(触发器)。nomedoponto.000, nomedoponto.001 等。
提示: 使用简单的平面作为乘客以节省多边形。
正确的触发器:

位置良好的触发器示例:

位置不佳的触发器示例(不能做!):

重叠(不能做!):

在相反站点正确:

在调试模式下可视化:

在 busstops 文件夹中创建一个与站点同名的 txt。

[busstop]
name=广场站
isLeft=0
paxAmount=15
[from_3d]
readFrom3D=1
prefix=zzPonto1
maxPathsToCheck=30
defPaxRotY=90
prefix:必须与 3D 中使用的名称完全匹配(.000 之前)。defPaxRotY:默认乘客旋转(测试 0, 90, 180, -90)。工作原理类似于站点:定义路径 (path) 的一系列对象。
示例:xxCalcada1.000, xxCalcada1.001 等。

在 aipeople 文件夹中创建一个 txt:

[automatic_setup]
enabled=1
loop=0
reverse=0
[defaults]
isSpawner=1
spawnInterval=5
allowBicycle=0
loop=1:最后一个点连接到第一个点(圆形)。loop=0:路径在最后一个点结束(线性)。就像行人一样!aivehicles 文件夹。

isBusSpawner=1:使巴士出现。spawnInterval:增加以减少交通。speedMultiplier:更改速度(例如:0.5 一半,2 双倍)。将皮肤 (PNG) 放在 skins/0/pbc 中。游戏随机选择。
PBC 皮肤基础:http://omsi.viamep.com/proton/base-skins-pbc-protonbussimulator.zip
同样的逻辑,aitrains 文件夹。
建议:在 defaults 中 isSpawner=0,并定义间隔开的手动生成器。

randomTimeToWaitAtStart=1:在随机时间开始。spawnTimeInterval:火车之间的间隔(例如:120 秒)。重要提示: 火车不停车!它们会碾过一切。不要做平交道口。
_transparent_(例如:grade_transparent_)。_gencol_ 生成自动碰撞器(街道、人行道)。 适度使用!_gencol_invisible_(例如:barreira_gencol_invisible_)。_emissive_。_low_speed_zone_(避免投诉)。
_force_exit_。
_det1.3ds 结尾的 3DS 文件(例如:arvores_det1.3ds)。仅当用户启用“额外细节”时加载。为了避免地面上的纹理闪烁 (z-fighting/flickering),在纹理旁边创建一个 .config.txt 文件。
例如:asfalto.png.config.txt。


_gencol_。目前就这些!玩得开心!