Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 27 additions & 43 deletions server/area_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@

class AreaManager:
"""Holds the list of all areas."""

class Timer:
"""Represents a single instance of a timer in the area."""

Expand Down Expand Up @@ -107,6 +106,8 @@ def __init__(self, hub_manager, name):
self.can_spectate = True
self.can_getareas = True
self.passing_msg = False
# If the characters are persistent or not (their area is recorded)
self.character_persistance = False
# /prefs

# optimization memes
Expand Down Expand Up @@ -137,6 +138,29 @@ def __init__(self, hub_manager, name):
["spock", "scissors", "rock"],
]

# Which prefs to save/load in yaml
self.save_list = [
"name",
"abbreviation",
"move_delay",
"arup_enabled",
"hide_clients",
"info",
"can_gm",
"music_ref",
"replace_music",
"client_music",
"max_areas",
"single_cm",
"censor_ic",
"censor_ooc",
"can_spectate",
"can_getareas",
"passing_msg",
"char_list_ref",
"character_persistance",
]

@property
def name(self):
"""Area's name string. Abbreviation is also updated according to this."""
Expand Down Expand Up @@ -189,27 +213,7 @@ def load(self, hub, destructive=False, ignore=[]):
if "hub" in hub:
hub["name"] = hub["hub"]

load_list = [
"name",
"abbreviation",
"move_delay",
"arup_enabled",
"hide_clients",
"info",
"can_gm",
"music_ref",
"replace_music",
"client_music",
"max_areas",
"single_cm",
"censor_ic",
"censor_ooc",
"can_spectate",
"can_getareas",
"passing_msg",
"char_list_ref",
]
for entry in list(set(load_list) - set(ignore)):
for entry in list(set(self.save_list) - set(ignore)):
if entry in hub:
setattr(self, entry, hub[entry])
if entry == "music_ref":
Expand Down Expand Up @@ -294,27 +298,7 @@ def get_char_id_by_name(self, name):

def save(self, ignore=[]):
hub = OrderedDict()
save_list = [
"name",
"abbreviation",
"move_delay",
"arup_enabled",
"hide_clients",
"info",
"can_gm",
"music_ref",
"replace_music",
"client_music",
"max_areas",
"single_cm",
"censor_ic",
"censor_ooc",
"can_spectate",
"can_getareas",
"passing_msg",
"char_list_ref",
]
for entry in list(set(save_list) - set(ignore)):
for entry in list(set(self.save_list) - set(ignore)):
hub[entry] = getattr(self, entry)

if "areas" not in ignore:
Expand Down
16 changes: 15 additions & 1 deletion server/client_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -916,6 +916,10 @@ def set_area(self, area, target_pos=""):
if target_pos != "":
self.pos = target_pos

# set our character's recorded area
if self.char_id != -1 and self.area.area_manager.character_persistance:
self.c_area = self.area

# If we're using /evidence_present, reset it due to area change (evidence will be different most likely)
self.presenting = 0

Expand Down Expand Up @@ -945,7 +949,6 @@ def set_area(self, area, target_pos=""):
],
],
)

# Update everyone's available characters list
# Commented out due to potentially causing clientside lag...
# self.area.send_command('CharsCheck',
Expand Down Expand Up @@ -1898,6 +1901,17 @@ def desc(self, value):
self.area.area_manager.set_character_data(
self.char_id, "desc", value)

@property
def c_area(self):
"""Get the character's area."""
return self.area.area_manager.get_character_data(self.char_id, "area", "")

@c_area.setter
def area(self, value):
"""Set the character's area character data."""
self.area.area_manager.set_character_data(
self.char_id, "area", value)

@property
def hidden(self):
"""Return if the character is hidden or not. Always True if char_id is -1 (spectator)"""
Expand Down
14 changes: 14 additions & 0 deletions server/commands/hubs.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
"ooc_cmd_toggle_getareas",
"ooc_cmd_toggle_spectate",
"ooc_cmd_toggle_passing_ic",
"ooc_cmd_toggle_character_persistance",
"ooc_cmd_hide_clients",
"ooc_cmd_unhide_clients",
# General
Expand Down Expand Up @@ -634,6 +635,19 @@ def ooc_cmd_toggle_passing_ic(client, arg):
)


@mod_only(hub_owners=True)
def ooc_cmd_toggle_character_persistance(client, arg):
"""
Toggle character persistence, remembering their last known location.
Usage: /toggle_character_persistance
"""
client.area.area_manager.character_persistance = not client.area.area_manager.character_persistance
toggle = "enabled" if client.area.area_manager.character_persistance else "disabled"
client.area.area_manager.broadcast_ooc(
f"Persistent Characters are now {toggle} for this hub."
)


@mod_only(hub_owners=True)
def ooc_cmd_arup_enable(client, arg):
"""
Expand Down