Apartment Complex has a drop zone lol
Do you have another monument close that actually does have a drop zone? I ran into a problem sort of like this, I think DropZoneDistanceTolerance is set to high, I think it's 200? I have mine at 100 now.
No, it's kind of off on a peninsula... I think it's because I removed the default Tier0 restriction, and the vanilla prefab must include a drop zone for some reason (maybe for extra fun on hardcore?)
It doesn't have a dropzone according to rusthelp website. I allow it to visit T0 monuments too and it has never dropped at apartments. Strange.
It absolutely has a drop zone - I just wrote some plugin logic to walk the transform parent hierarchy of every drop zone on the map, and got this:
[Team Report] ***** DROP ZONE @(-1266.45, 7.51, -1276.81)/D21
[Team Report] ***** transform=DropZone (UnityEngine.Transform)@(-1266.45, 7.51, -1276.81)/D21
[Team Report] ***** transform=assets/bundled/prefabs/autospawn/monument/medium/apartments_complex_1.prefab (UnityEngine.Transform)@(-1173.25, 7.08, -1233.81)/E20Merged post
It looks like Apartment Complex's MonumentInfo doesn't report it being a safe zone.
Here is some potentially better logic for determining if a drop zone is inside a safe zone trigger:
public virtual bool InSafeZone(Vector3 position)
{
if (false == BaseGameMode.GetActiveGameMode(true)?.safeZone) return false;
foreach (var safeZone in TriggerSafeZone.allSafeZones)
{
if (position != safeZone?.triggerCollider?.ClosestPoint(position)) continue;
Puts($"***** position={position} in safeZone@{safeZone.transform.position}/{MapHelper.PositionToString(safeZone.transform.position)}");
return true;
}
return false;
}
Wow, good find. I checked with UnityEngine.Object.FindObjectsByType<CH47DropZone>(FindObjectsSortMode.None) and did see it too.
I have about a dozen dropzones, oddly last night it did drop one there. Good job rusthelp - Good job facepunch! That can't be intentional right!?
I think you can replace the safe zone check in PrintDropZones() with this, in order to handle this case:
if (_config.DisallowSafeZoneMonuments)
{
if (monumentInfo.IsSafeZone)
continue;
// handle case that monument is not marked as a safe zone,
// but one exists at a contained drop location anyway
var allow = true;
foreach (var dropZone in CH47DropZone.dropZones)
{
var dzPosition = dropZone.transform.position;
// ignore drop zone if not in this monument
if (!monumentInfo.IsInBounds(dropZone.transform.position))
continue;
foreach (var safeZone in TriggerSafeZone.allSafeZones)
{
// ignore drop zone if not in this safe zone
if (safeZone.triggerCollider.ClosestPoint(dzPosition) != dzPosition)
continue;
// this drop zone is in this monument AND is in a
// safe zone trigger; mark disallowed and break out
allow = false;
break;
}
// break out if disallowed
if (!allow)
break;
}
// ignore monument if disallowed
if (!allow)
continue;
}