### Summary This PR transitions the spawner system from a simple radius-based model to a flexible 3D boundary system. ### Core Changes * **Replaced `HomeRange` with `SpawnBounds`**: Spawners now use a `Rectangle3D` to define spawn areas instead of a circular integer range. * **Backward Compatibility**: * The `HomeRange` property remains as a helper that generates square `SpawnBounds` centered on the spawner. * Included a migration path (v10 to v11) that automatically converts old range data into new bounds during deserialization. * **Dynamic Bounds Shifting**: If a spawner is moved, its `SpawnBounds` will automatically shift with it, provided the bounds are currently configured as a centered square. * **New Spawn Logic**: Added `SpawnLocationIsHome` toggle. If enabled, spawned mobiles treat their exact spawn coordinates as their "Home" rather than the spawner's location. ### Implementation Details * **Interface Updates**: Updated `ISpawner` to include `WalkingRange`, `SpawnBounds`, and `IsInSpawnBounds()`. * **UI Enhancements**: The Spawner Controller Gump now displays "Custom" for complex bounds and allows copying of the new boundary properties between spawners. * **Refactored Constructors**: Streamlined `BaseSpawner`, `ProximitySpawner`, and `RegionSpawner` constructors to support the new data types.
108 lines
No EOL
2.2 KiB
JSON
Generated
108 lines
No EOL
2.2 KiB
JSON
Generated
{
|
|
"version": 11,
|
|
"type": "Server.Engines.Spawners.BaseSpawner",
|
|
"properties": [
|
|
{
|
|
"name": "Guid",
|
|
"type": "System.Guid",
|
|
"rule": "PrimitiveTypeMigrationRule"
|
|
},
|
|
{
|
|
"name": "ReturnOnDeactivate",
|
|
"type": "bool",
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
""
|
|
]
|
|
},
|
|
{
|
|
"name": "Entries",
|
|
"type": "System.Collections.Generic.List\u003CServer.Engines.Spawners.SpawnerEntry\u003E",
|
|
"rule": "ListMigrationRule",
|
|
"ruleArguments": [
|
|
"Server.Engines.Spawners.SpawnerEntry",
|
|
"RawSerializableMigrationRule",
|
|
"DeserializationRequiresParent"
|
|
]
|
|
},
|
|
{
|
|
"name": "WalkingRange",
|
|
"type": "int",
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
""
|
|
]
|
|
},
|
|
{
|
|
"name": "WayPoint",
|
|
"type": "Server.Items.WayPoint",
|
|
"rule": "SerializableInterfaceMigrationRule"
|
|
},
|
|
{
|
|
"name": "Group",
|
|
"type": "bool",
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
""
|
|
]
|
|
},
|
|
{
|
|
"name": "MinDelay",
|
|
"type": "System.TimeSpan",
|
|
"rule": "PrimitiveTypeMigrationRule"
|
|
},
|
|
{
|
|
"name": "MaxDelay",
|
|
"type": "System.TimeSpan",
|
|
"rule": "PrimitiveTypeMigrationRule"
|
|
},
|
|
{
|
|
"name": "Count",
|
|
"type": "int",
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
""
|
|
]
|
|
},
|
|
{
|
|
"name": "Team",
|
|
"type": "int",
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
""
|
|
]
|
|
},
|
|
{
|
|
"name": "SpawnBounds",
|
|
"type": "Server.Rectangle3D",
|
|
"rule": "PrimitiveUOTypeMigrationRule",
|
|
"ruleArguments": [
|
|
"Rect3D"
|
|
]
|
|
},
|
|
{
|
|
"name": "Running",
|
|
"type": "bool",
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
""
|
|
]
|
|
},
|
|
{
|
|
"name": "SpawnLocationIsHome",
|
|
"type": "bool",
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
""
|
|
]
|
|
},
|
|
{
|
|
"name": "End",
|
|
"type": "System.DateTime",
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
""
|
|
]
|
|
}
|
|
]
|
|
} |