欢迎加入!

注册后,您将能够与我们社区的其他成员进行讨论、分享和私信。

无论您是想寻求帮助、分享经验,还是结识志同道合的朋友,我们都期待您的参与!一起探索更多精彩内容吧。

立即注册! 加入群聊
  • 所有的免费插件都是同步外网更新,所有都是最新版!
纪念碑查找器

纪念碑查找器 同步更新

没有下载权限
购买会员

特征

  • 允许特权玩家列出和查看纪念碑
  • 为插件提供 API 以查找纪念碑
  • 支持原版纪念碑、自定义纪念碑、火车隧道和水下实验室
  • 允许自定义纪念碑边界,这对于自定义纪念碑很有用

运作方式

Monument Finder 的主要目标是准确定义纪念碑的边界。这是必要的,因为游戏定义的边界并非对于每个纪念碑都准确,并且地图制作者无法为其自定义纪念碑定义边界。关心纪念碑的位置以及它们占用多少空间的插件可以利用 Monument Finder 来找出答案。服务器所有者可以通过根据需要在配置中定义或覆盖 monuments 边界来协助使用 Monument Finder 的插件。

所有使用 Monument Finder 的插件都获得相同的信息,使它们能够一致地了解哪些纪念碑占据了哪些空间。这是一个功能,但并非每个插件都希望获得相同的纪念碑视图。例如,想要限制纪念碑周围传送半径的插件可能需要与 Monument Finder 中定义的边界不同。在这种情况下,该插件可以提供自己的逻辑/配置来定义纪念碑边界,并且不需要使用 Monument Finder。

对于已经具有相当准确边界的原版纪念碑,Monument Finder 只需使用这些边界进行操作。对于边界不准确的原版纪念碑,以及地下火车隧道部分,Monument Finder 提供开发人员和/或社区认为准确的硬编码边界。配置中的服务器所有者也可以覆盖边界。

水下实验室是程序生成的模块集合。Monument Finder 将每个模块视为一个单独的纪念碑,因为整个实验室纪念碑没有一致的布局。因此,这允许服务器所有者,例如,使用 Monument Addons 插件在 moonpool 模块中放置自动售货机,导致该 moonpool 模块的每个实例在所有水下实验室纪念碑中都有相同的自动售货机。

对于自定义界标,有多个选项可用于定义边界:

  • 地图制作者可以调整纪念碑标记的大小(使用转换比例)以封装纪念碑的所有内容,服务器所有者可以配置 Monument Finder 来确定该纪念碑与纪念碑标记的边界。
  • 地图制作者可以在纪念碑上放置“阻止建筑物”体积(适用于大多数自定义纪念碑),服务器所有者可以配置 Monument Finder 以确定该纪念碑的边界与阻止建筑物体积。
  • 服务器所有者可以在配置中定义自定义边界。
地图制作者可以通过向服务器所有者提供建议的配置来协助完成上述配置过程。

权限

此插件使用权限系统。要分配权限,请使用 。要删除权限,请使用 。oxide.grant <user or group> <name or steam id> <permission>oxide.revoke <user or group> <name or steam id> <permission>
  • monumentfinder.find-- 允许玩家找到纪念碑。适用于管理员。

命令

此插件使用相同的语法提供聊天和控制台命令。在聊天中使用命令时,请为其添加正斜杠前缀: '/'。
注意:可以在插件配置中更改该命令。mf

  • mf-- 打印有关可用命令的帮助信息。
  • mf list <filter>-- 列出所有纪念碑、火车隧道和水下实验室模块。筛选器是可选的。
  • mf show <filter>--(需要管理员)在所有纪念碑、火车隧道和水下实验室模块上方显示文本。筛选器是可选的。
  • mf closest-- 打印有关最近的纪念碑、火车隧道或水下实验室模块的信息。如果是 admin,则还会显示 monument 边界。
  • mf closest config-- 在配置中添加最近纪念碑的条目。

配置

设置和选项可以在目录下的文件中进行配置。建议使用编辑器和验证器,以避免格式问题和语法错误。MonumentFinderconfig
默认配置:

{
"Command": "mf",
"Default custom monument settings": {
"Position": {
"Auto determine from monument marker": true,
"Auto determine from prevent building volume": false
},
"Rotation": {
"Auto determine from monument marker": true,
"Auto determine from prevent building volume": false
},
"Bounds": {
"Auto determine from monument marker": false,
"Auto determine from prevent building volume": false,
"Use custom bounds": true,
"Custom bounds": {
"Size": {
"x": 30.0,
"y": 30.0,
"z": 30.0
},
"Center adjustment": {
"x": 0.0,
"y": 10.0,
"z": 0.0
}
}
}
},
"Monuments": {
"example_monument": {
"Position": {
"Auto determine from monument marker": true,
"Auto determine from prevent building volume": false
},
"Rotation": {
"Auto determine from monument marker": true,
"Auto determine from prevent building volume": false
},
"Bounds": {
"Auto determine from monument marker": false,
"Auto determine from prevent building volume": false,
"Use custom bounds": true,
"Custom bounds": {
"Size": {
"x": 30.0,
"y": 30.0,
"z": 30.0
},
"Center adjustment": {
"x": 0.0,
"y": 10.0,
"z": 0.0
}
}
}
}
}
}
  • Command-- 确定插件的基本命令。
  • Default custom monument settings-- 定义插件如何确定自定义纪念碑的位置、旋转和边界。可以在配置部分中覆盖单个自定义纪念碑的行为。Monuments
    • Position-- 定义插件如何确定纪念碑的 “origin” 。Monument Addons 或 Custom Vending Setup 等插件将捕获相对于原点的坐标。注意: 更改确定纪念碑原点的方式可能会导致已经生成相对于该纪念碑的坐标的插件出现问题,这意味着您可能必须在该纪念碑上为这些插件重做设置。
      • Auto determine from monument marker (true或 ) -- 虽然 , 插件会将纪念碑的原点视为纪念碑标记的位置。falsetrue
        • 注意:由于 RustEdit 目前不允许自定义预制件包含纪念碑标记,因此地图开发人员可能无法为纪念碑的每个实例一致地定位/旋转纪念碑标记,因此依赖标记位置/旋转可能会导致使用纪念碑相对坐标的插件出现问题。
      • Auto determine from prevent building volume (true或 ) -- 虽然 ,插件会将纪念碑的原点视为 Prevent Building Sphere/Cube 的中心(如果有一个与纪念碑标记重叠)。falsetrue
    • Rotation-- 定义插件将如何确定纪念碑的旋转。注意: 更改确定纪念碑旋转的方式可能会导致已经生成相对于该纪念碑的坐标的插件出现问题,这意味着您可能必须在该纪念碑上为这些插件重做设置。
      • Auto determine from monument marker (true或 ) -- 虽然 ,插件会将纪念碑的旋转视为纪念碑标记的旋转。falsetrue
        • 注意:由于 RustEdit 目前不允许自定义预制件包含纪念碑标记,因此地图开发人员可能无法为纪念碑的每个实例一致地定位/旋转纪念碑标记,因此依赖标记位置/旋转可能会导致使用纪念碑相对坐标的插件出现问题。
      • Auto determine from prevent building volume (true或 ) -- 当 时,插件会将纪念碑的旋转视为 Prevent Building Sphere/Cube 的旋转(如果有一个与纪念碑标记重叠)。falsetrue
    • Bounds-- 定义插件如何确定纪念碑的边界框。其他插件使用 Bounds 来准确确定给定位置是否位于纪念碑中,并具体确定哪个纪念碑。
      • Auto determine from monument marker (true或 ) -- 当 ,插件会将纪念碑的边界框视为纪念碑标记的边界框。仅当地图开发人员缩放纪念碑标记以覆盖纪念碑时,这才是一个合适的选择,您应该鼓励地图开发人员这样做,因为这使此插件很容易确定纪念碑边界。falsetrue
      • Auto determine from prevent building volume (true或 ) -- 当 ,插件会将纪念碑的边界框视为 Prevent Building Sphere/Cube 的边界(如果有一个与纪念碑标记重叠)。falsetrue
      • Use custom bounds (true或 ) -- 虽然 ,插件将看到您在 中配置的纪念碑的边界框。falsetrueCustom bounds
      • Custom bounds
        • Size-- 确定边界框相对于纪念碑原点的大小。例如,如果纪念碑的形状像一个立方体,则 set 和 相同的值。xyz
        • Center adjustment-- 相对于纪念碑的原点调整边界框的中心。例如,如果希望边界框的中心比纪念碑的原点高出 10 米,请将此项设置为 。"x": 0, "y": 10, "z": 0
  • Monuments-- 此部分允许您覆盖单个纪念碑的配置,包括原版纪念碑和自定义纪念碑。不支持自定义火车隧道和水下实验室。选项与 相同,但 和 等选项对原版纪念碑没有影响。Default custom monument settingsAuto determine from monument markerAuto determine from prevent building volume

如何设置自定义区域

您必须拥有或继续。owneridmoderatorid

  1. 运行命令以验证是否可以找到您的纪念碑。如果您在列表中没有看到它,则表示纪念碑未使用预制件,因此需要在地图编辑器中更新它,然后再继续。mf list <filter>monument_marker
  2. 确定纪念碑的名称后,运行命令 .如果名称包含空格,请将名称括在引号中。此命令将显示漂浮在游戏中纪念碑上方的纪念碑名称。mf show <name>
  3. 转到纪念碑并运行命令 .这应该显示漂浮在其上方的纪念碑名称,并在纪念碑周围有一个边界框。如果此框准确包含纪念碑,那么您就完成了。mf closest
  4. 如果边界框不准确,请运行命令以自动将条目添加到插件配置中。mf closest config
  5. 在插件配置中配置边界,重新加载插件,然后运行以可视化边界。重复此过程,直到您对边界感到满意为止。注意:如果地图开发人员使纪念碑标记覆盖了纪念碑,或者他们向纪念碑添加了 Prevent Building Sphere/Cube (阻止建筑物球体/立方体),那么您可以尝试使用配置选项来自动检测这些边界。如果这两个选项都不存在,或者边界不合适,则可以配置自定义边界。mf closest

精确边界示例

最终,它应如下所示。X、-X、Z 和 -Z 辅助线指示 X 轴和 Z 轴的方向,以便在配置自定义边界时更改正确的值。

Bounds.png


纪念碑名称示例

这些是通过将 Prefab Sniffer 与命令 .prefab find assets/bundled/prefabs/autospawn/monument

  • airfield_1
  • arctic_research_base_a
  • bandit_town
  • cave_large_hard
  • cave_large_medium
  • cave_large_sewers_hard
  • cave_medium_easy
  • cave_medium_hard
  • cave_medium_medium
  • cave_small_easy
  • cave_small_hard
  • cave_small_medium
  • 复合
  • desert_military_base_a
  • desert_military_base_b
  • desert_military_base_c
  • desert_military_base_d
  • excavator_1
  • ferry_terminal_1
  • fishing_village_a
  • fishing_village_b
  • fishing_village_c
  • gas_station_1
  • harbor_1
  • harbor_2
  • ice_lake_1
  • ice_lake_2
  • ice_lake_3
  • ice_lake_4
  • junkyard_1
  • launch_site_1
  • 灯塔
  • military_tunnel_1
  • mining_quarry_a
  • mining_quarry_b
  • mining_quarry_c
  • nuclear_missile_silo
  • oilrig_1
  • oilrig_2
  • powerplant_1
  • radtown_small_3
  • satellite_dish
  • sphere_tank
  • stables_a
  • stables_b
  • supermarket_1
  • swamp_a
  • swamp_b
  • swamp_c
  • trainyard_1
  • underwater_lab_a
  • underwater_lab_b
  • underwater_lab_c
  • underwater_lab_d
  • 仓库
  • water_treatment_plant_1
  • water_well_a
  • water_well_b
  • water_well_c
  • water_well_d
  • water_well_e

地方化

默认消息位于目录下的文件中。要添加对其他语言的支持,请创建一个新的语言文件夹(例如 对于德语),请将默认语言文件复制到新文件夹,然后自定义消息。MonumentFinderlang/ende
{
"NoPermission": "You don't have permission to do that.",
"NoMonumentsFound": "No monuments found",
"AtMonument": "At monument: {0}\nRelative position: {1}",
"ClosestMonument": "Closest monument: {0}\nDistance: {1:f2}m",
"Closest.Config.Success": "Added monument <color=#9f6>{0}</color> to the plugin config.",
"Closest.Config.AlreadyPresent": "Monument <color=#9f6>{0}</color> is already in the plugin config.",
"List.Header": "Listing monuments:",
"Help.Header": "Monument Finder commands:",
"Help.List": "<color=#9f6>{0} list <filter></color> - List monuments matching filter",
"Help.Show": "<color=#9f6>{0} show <filter></color> - Show monuments matching filter",
"Help.Closest": "<color=#9f6>{0} closest</color> - Show info about the closest monument",
"Help.Closest.Config": "<color=#9f6>{0} closest config</color> - Adds the closest monument to the config"
}

开发人员 API

何时使用此 API

如果你想找到一个预先确定的地上原版纪念碑,例如 Outpost,你可以简单地循环找到它。这样做可以避免对 Monument Finder 的依赖。TerrainMeta.Path.Monuments

使用该接口的主要原因如下:

  • 准确确定位置所在的纪念碑。如果没有这个插件,您将不得不求助于距离检查,当小型纪念碑旁边有大型纪念碑时,这可能会返回不准确的结果。
  • 确定给定位置是否在火车隧道内。
  • 确定给定位置是否在水下实验室模块内。
不支持:

  • 洞穴。您可以对此使用案例进行拓扑检查。

查找原版或自定义纪念碑

List<Dictionary<string, object>> API_FindMonuments(string filter)
Dictionary<string, object> API_GetClosestMonument(Vector3 position)
旧版 API 方法:

List<MonumentInfo> FindMonuments(string filter)

查找火车隧道

List<Dictionary<string, object>> API_FindTrainTunnels(string filter)
Dictionary<string, object> API_GetClosestTrainTunnel(Vector3 position)

查找水下实验室模块

List<Dictionary<string, object>> API_FindUnderwaterLabModules(string filter)
Dictionary<string, object> API_GetClosestUnderwaterLabModule(Vector3 position)

查找任何类型的纪念碑

以下方法可能会返回原版纪念碑、自定义纪念碑、火车隧道和水下实验室模块。

List<Dictionary<string, object>> API_Find(string filter)
List<Dictionary<string, object>> API_FindByShortName(string shortName)
List<Dictionary<string, object>> API_FindByAlias(string alias)
Dictionary<string, object> API_GetClosest(Vector3 position)

Monument wrapper 对象

每个对象由以下键组成。Dictionary<string, object>

  • "Object"-- 代表纪念碑、火车隧道或水下实验室的底层对象。
    • 类型: | |MonumentInfoDungeonGridCellDungeonBaseLink
  • "PrefabName"-- 纪念碑的完整预制件名称。
    • 类型:string
  • "ShortName"-- 纪念碑的简短预制件名称。
    • 类型:string
  • "Alias"-- 纪念碑的别名(如果有),否则为 null。例如,所有火车站都将使用别名 .TrainStation
    • 类型:string
    • 可能的别名: | | | | | | .TrainStationBarricadeTunnelLootTunnelSplitTunnelIntersectionLargeIntersectionCornerTunnel
  • "Position"-- 纪念碑的位置。
    • 类型:Vector3
  • "Rotation"-- 纪念碑的旋转。
    • 类型:Quaternion
  • "BoundingBoxes"-- 纪念碑的边界框列表。大多数纪念碑都有一个,但水下实验室模块可能有多个。
    • 类型:OBB[]
  • "TransformPoint"-- Delegate,其工作方式类似于 UnityEngine.Transform.TransformPoint
    • 类型:Func<Vector3, Vector3>
  • "InverseTransformPoint"-- Delegate,其工作方式类似于 UnityEngine.Transform.InverseTransformPoint
    • 类型:Func<Vector3, Vector3>
  • "ClosestPointOnBounds"-- 返回纪念碑边界内最近位置的 Delegate,例如 UnityEngine.Collider.ClosestPointOnBounds
    • 类型:Func<Vector3, Vector3>
  • "IsInBounds"-- 如果位置在纪念碑的边界内,则返回 true 的 delegate,就像 Rust 的一样。MonumentInfo.IsInBounds(Vector3)
    • 类型:Func<Vector3, bool>

插件中的示例

// Place at top of plugin file.
using Oxide.Core.Plugins;

// The rest goes within a plugin class.
[PluginReference]
Plugin MonumentFinder;

class MonumentAdapter
{
public MonoBehaviour Object => (MonoBehaviour)_monumentInfo["Object"];
public string PrefabName => (string)_monumentInfo["PrefabName"];
public string ShortName => (string)_monumentInfo["ShortName"];
public string Alias => (string)_monumentInfo["Alias"];
public Vector3 Position => (Vector3)_monumentInfo["Position"];
public Quaternion Rotation => (Quaternion)_monumentInfo["Rotation"];
public OBB[] BoundingBoxes => (OBB[])_monumentInfo["BoundingBoxes"];

private Dictionary<string, object> _monumentInfo;

public MonumentAdapter(Dictionary<string, object> monumentInfo)
{
_monumentInfo = monumentInfo;
}

public Vector3 TransformPoint(Vector3 localPosition) =>
((Func<Vector3, Vector3>)_monumentInfo["TransformPoint"]).Invoke(localPosition);

public Vector3 InverseTransformPoint(Vector3 worldPosition) =>
((Func<Vector3, Vector3>)_monumentInfo["InverseTransformPoint"]).Invoke(worldPosition);

public Vector3 ClosestPointOnBounds(Vector3 position) =>
((Func<Vector3, Vector3>)_monumentInfo["ClosestPointOnBounds"]).Invoke(position);

public bool IsInBounds(Vector3 position) =>
((Func<Vector3, bool>)_monumentInfo["IsInBounds"]).Invoke(position);
}

// Call this method within your plugin to get the closest monument, train tunnel, or underwater lab.
MonumentAdapter GetClosestMonument(Vector3 position)
{
var dictResult = MonumentFinder?.Call("API_GetClosest", position) as Dictionary<string, object>;
return dictResult != null ? new MonumentAdapter(dictResult) : null;
}
作者
xiaoguan
下载
0
查看
16
首次发布
最后更新

评分

0.00 星 0 星

来自xiaoguan的更多资源

后退
顶部