MultiServer: move permissions to an IntEnum
This commit is contained in:
parent
7f35f6f8f4
commit
952a155003
|
@ -31,7 +31,7 @@ from worlds import network_data_package, lookup_any_item_id_to_name, lookup_any_
|
||||||
import Utils
|
import Utils
|
||||||
from Utils import get_item_name_from_id, get_location_name_from_id, \
|
from Utils import get_item_name_from_id, get_location_name_from_id, \
|
||||||
version_tuple, restricted_loads, Version
|
version_tuple, restricted_loads, Version
|
||||||
from NetUtils import Endpoint, ClientStatus, NetworkItem, decode, encode, NetworkPlayer
|
from NetUtils import Endpoint, ClientStatus, NetworkItem, decode, encode, NetworkPlayer, Permission
|
||||||
|
|
||||||
colorama.init()
|
colorama.init()
|
||||||
|
|
||||||
|
@ -469,8 +469,13 @@ async def on_client_connected(ctx: Context, client: Client):
|
||||||
# Name them by feature or fork, as you feel is appropriate.
|
# Name them by feature or fork, as you feel is appropriate.
|
||||||
'tags': ctx.tags,
|
'tags': ctx.tags,
|
||||||
'version': Utils.version_tuple,
|
'version': Utils.version_tuple,
|
||||||
|
# TODO ~0.2.0 remove forfeit_mode and remaining_mode in favor of permissions
|
||||||
'forfeit_mode': ctx.forfeit_mode,
|
'forfeit_mode': ctx.forfeit_mode,
|
||||||
'remaining_mode': ctx.remaining_mode,
|
'remaining_mode': ctx.remaining_mode,
|
||||||
|
'permissions': {
|
||||||
|
"forfeit": Permission.from_text(ctx.forfeit_mode),
|
||||||
|
"remaining": Permission.from_text(ctx.remaining_mode),
|
||||||
|
},
|
||||||
'hint_cost': ctx.hint_cost,
|
'hint_cost': ctx.hint_cost,
|
||||||
'location_check_points': ctx.location_check_points,
|
'location_check_points': ctx.location_check_points,
|
||||||
'datapackage_version': network_data_package["version"],
|
'datapackage_version': network_data_package["version"],
|
||||||
|
|
19
NetUtils.py
19
NetUtils.py
|
@ -25,6 +25,25 @@ class ClientStatus(enum.IntEnum):
|
||||||
CLIENT_GOAL = 30
|
CLIENT_GOAL = 30
|
||||||
|
|
||||||
|
|
||||||
|
class Permission(enum.IntEnum):
|
||||||
|
disabled = 0b000 # 0, completely disables access
|
||||||
|
enabled = 0b001 # 1, allows manual use
|
||||||
|
goal = 0b010 # 2, allows manual use after goal completion
|
||||||
|
auto = 0b110 # 6, forces use after goal completion, only works for forfeit
|
||||||
|
auto_enabled = 0b111 # 7, forces use after goal completion, allows manual use any time
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def from_text(text: str):
|
||||||
|
data = 0
|
||||||
|
if "auto" in text:
|
||||||
|
data |= 0b110
|
||||||
|
elif "goal" in text:
|
||||||
|
data |= 0b010
|
||||||
|
if "enabled" in text:
|
||||||
|
data |= 0b001
|
||||||
|
return Permission(data)
|
||||||
|
|
||||||
|
|
||||||
class NetworkPlayer(typing.NamedTuple):
|
class NetworkPlayer(typing.NamedTuple):
|
||||||
team: int
|
team: int
|
||||||
slot: int
|
slot: int
|
||||||
|
|
|
@ -27,6 +27,7 @@ server_options:
|
||||||
# "enabled" -> clients can always forfeit
|
# "enabled" -> clients can always forfeit
|
||||||
# "auto" -> automatic forfeit on goal completion, "goal" -> clients can forfeit after achieving their goal
|
# "auto" -> automatic forfeit on goal completion, "goal" -> clients can forfeit after achieving their goal
|
||||||
# "auto-enabled" -> automatic forfeit on goal completion and manual forfeit is also enabled
|
# "auto-enabled" -> automatic forfeit on goal completion and manual forfeit is also enabled
|
||||||
|
# "goal" -> forfeit is allowed after goal completion
|
||||||
forfeit_mode: "goal"
|
forfeit_mode: "goal"
|
||||||
# Remaining modes
|
# Remaining modes
|
||||||
# !remaining handling, that tells a client which items remain in their pool
|
# !remaining handling, that tells a client which items remain in their pool
|
||||||
|
|
Loading…
Reference in New Issue