the fleet a ship belongs to is based on its BigOwners
a player can control (run stop/disown and see position) if they own a main cockpit on the grid
This was our first scheme. We introduced Control after Fleet Membership. We needed control to be easier to wrest from others than just taking over all the blocks, because it was needed for stealing ships.
Then we introduced:
Simple Ownership
the fleet a ship belongs to is based on its best hullclassifier
a player can control (run stop/disown and see position) if they own the best hull classifier on the grid
People were often confused by the main cockpit requirement of the earlier scheme, and everyone already had a hull classifier that they owned on their ships, so it made sense to move the control requirement onto Hull Classifier instead. Thus this scheme.
Basing fleet membership on the classifier too (instead of on BigOwners) was also done to make things easier - people frequently had their ships stolen but never fully converted to new BigOwners, so they just floated in space without the original owners having the ability to find or remove them.
Ownership-based Placement Enforcement
When placing a new block on a grid, we do a number of validations to ensure it's allowed. The ownership-based checks come into play when we are adding new classifiers. Specifically, we check if the owner of the grid is allowed to have any more of that class. Class maximums are different depending on if the owner is in a fleet, a solo player, or if it's unowned.
These rules will be enforced over time as well, but the placement checks help to keep players from getting confused and surprised.
Problem:
If we're running under the Simple Ownership scheme and someone places a Classifier on a grid that previously did not have one (which is the only time it would be allowed anyway), we can't determine if they're allowed to have more of that class because the grid is considered unowned.
Solutions:
We could base grid ownership on BigOwners if no Classifier is available. This is easiest to do (one line of code changed). This would mean that grids you just started or those that have had their classifiers removed would still show up in your fleet, but you couldn't control them. I think in some cases this would be a benefit. If you just started a grid, it might be confusing that you don't see it in your fleet until you add a classifier. At the same time, you need to add one before it's going to stick around anyway. If a classifier was knocked off your ship, it might be nice to still see it in fleet. But you can't get it's position or disown it, and when it starts falling apart you'll see those many pieces cluttering up your list. That's one of the problems we were trying to solve via Simple Ownership in the first place.
We could get ownership from placed block and base it off that. This is a little more complex, because we can't get the owner from the block in creative (it will have none), so we need to check nearby players. We'll need to check for nearby when handling the notification too, because BlockAdded isn't currently structured to pass ownertype back with the violation. But this solution helps keep us more in line with simple ownership and gives us a more accurate proxy for if the block is actually allowed.
So I'm going to go with the second option. Curious to hear other thoughts, though.
Setup:
Ownership Schemes:
We have two ownership schemes right now:
Default Ownership
This was our first scheme. We introduced Control after Fleet Membership. We needed control to be easier to wrest from others than just taking over all the blocks, because it was needed for stealing ships.
Then we introduced:
Simple Ownership
People were often confused by the main cockpit requirement of the earlier scheme, and everyone already had a hull classifier that they owned on their ships, so it made sense to move the control requirement onto Hull Classifier instead. Thus this scheme.
Basing fleet membership on the classifier too (instead of on BigOwners) was also done to make things easier - people frequently had their ships stolen but never fully converted to new BigOwners, so they just floated in space without the original owners having the ability to find or remove them.
Ownership-based Placement Enforcement
When placing a new block on a grid, we do a number of validations to ensure it's allowed. The ownership-based checks come into play when we are adding new classifiers. Specifically, we check if the owner of the grid is allowed to have any more of that class. Class maximums are different depending on if the owner is in a fleet, a solo player, or if it's unowned.
These rules will be enforced over time as well, but the placement checks help to keep players from getting confused and surprised.
Problem:
If we're running under the Simple Ownership scheme and someone places a Classifier on a grid that previously did not have one (which is the only time it would be allowed anyway), we can't determine if they're allowed to have more of that class because the grid is considered unowned.
Solutions:
So I'm going to go with the second option. Curious to hear other thoughts, though.