Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Clean up topic commands to use UIDs instead of a global list #4160

Merged
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
8 changes: 5 additions & 3 deletions code/game/world.dm
Original file line number Diff line number Diff line change
Expand Up @@ -121,11 +121,13 @@ var/global/world_topic_last = world.timeofday
if(!length(params))
return
var/command_key = params[1]
if(!command_key || !global.topic_commands[command_key])
if(!command_key)
return "Unrecognised Command"
var/decl/topic_command/command = decls_repository.get_decl_by_id("topic_command_[command_key]")
if(!istype(command))
return "Unrecognised Command"

var/decl/topic_command/TC = global.topic_commands[command_key]
return TC.try_use(T, addr, master, key)
return command.try_use(T, addr, master, key)

/world/Reboot(var/reason)

Expand Down
30 changes: 14 additions & 16 deletions code/game/world_topic_commands.dm
Original file line number Diff line number Diff line change
@@ -1,24 +1,10 @@
var/global/list/decl/topic_command/topic_commands = list()

/decl/topic_command
abstract_type = /decl/topic_command
var/name
var/has_params = FALSE
var/base_type = /decl/topic_command

/// Initialises the assoc list of topic commands by key.
/hook/startup/proc/setup_api()
var/list/commands = decls_repository.get_decls_of_subtype(/decl/topic_command)
for (var/command in commands)
var/decl/topic_command/TC = commands[command]
if(TC.base_type == command)
continue
global.topic_commands[TC.name] = TC
return TRUE

/// Returns TRUE if we can use this command, and FALSE otherwise
/decl/topic_command/proc/can_use(var/T, var/addr, var/master, var/key)
if(base_type == type) // this is an abstract type
return FALSE
if (has_params)
if (copytext(T, 1, length(name) + 1) != name)
return FALSE
Expand All @@ -38,7 +24,7 @@ var/global/list/decl/topic_command/topic_commands = list()
return use(params)

/decl/topic_command/secure
base_type = /decl/topic_command/secure
abstract_type = /decl/topic_command/secure

/decl/topic_command/secure/try_use(var/T, var/addr, var/master, var/key)
if (!can_use(T, addr, master, key))
Expand All @@ -60,6 +46,7 @@ var/global/list/decl/topic_command/topic_commands = list()

/decl/topic_command/ping
name = "ping"
uid = "topic_command_ping"

/decl/topic_command/ping/use()
var/x = 1
Expand All @@ -69,12 +56,14 @@ var/global/list/decl/topic_command/topic_commands = list()

/decl/topic_command/players
name = "players"
uid = "topic_command_players"

/decl/topic_command/players/use()
return global.clients.len

/decl/topic_command/status
name = "status"
uid = "topic_command_status"
has_params = TRUE

/decl/topic_command/status/use(var/list/params)
Expand Down Expand Up @@ -119,6 +108,7 @@ var/global/list/decl/topic_command/topic_commands = list()

/decl/topic_command/manifest
name = "manifest"
uid = "topic_command_manifest"

/decl/topic_command/manifest/use()
var/list/positions = list()
Expand All @@ -138,6 +128,7 @@ var/global/list/decl/topic_command/topic_commands = list()

/decl/topic_command/revision
name = "revision"
uid = "topic_command_revision"

/decl/topic_command/revision/use()
var/list/L = list()
Expand All @@ -162,6 +153,7 @@ var/global/list/decl/topic_command/topic_commands = list()
* * * * * * * */
/decl/topic_command/ban
name = "placepermaban"
uid = "topic_command_placepermaban"
has_params = TRUE

/decl/topic_command/ban/try_use(var/T, var/addr, var/master, var/key)
Expand Down Expand Up @@ -205,6 +197,7 @@ var/global/list/decl/topic_command/topic_commands = list()

/decl/topic_command/secure/laws
name = "laws"
uid = "topic_command_laws"
has_params = TRUE

/decl/topic_command/secure/laws/use(var/list/params)
Expand Down Expand Up @@ -251,6 +244,7 @@ var/global/list/decl/topic_command/topic_commands = list()

/decl/topic_command/secure/info
name = "info"
uid = "topic_command_info"
has_params = TRUE

/decl/topic_command/secure/info/use(var/list/params)
Expand Down Expand Up @@ -300,6 +294,7 @@ var/global/list/decl/topic_command/topic_commands = list()

/decl/topic_command/secure/adminmsg
name = "adminmsg"
uid = "topic_command_adminmsg"
has_params = TRUE

/decl/topic_command/secure/adminmsg/use(var/list/params)
Expand Down Expand Up @@ -335,13 +330,15 @@ var/global/list/decl/topic_command/topic_commands = list()

/decl/topic_command/secure/notes
name = "notes"
uid = "topic_command_notes"
has_params = TRUE

/decl/topic_command/secure/notes/use(var/list/params)
return show_player_info_irc(ckey(params["notes"]))

/decl/topic_command/secure/age
name = "age"
uid = "topic_command_age"
has_params = TRUE

/decl/topic_command/secure/age/use(var/list/params)
Expand All @@ -356,6 +353,7 @@ var/global/list/decl/topic_command/topic_commands = list()

/decl/topic_command/secure/prometheus_metrics
name = "prometheus_metrics"
uid = "topic_command_prometheus_metrics"

/decl/topic_command/secure/prometheus_metrics/use()
if(!global.prometheus_metrics)
Expand Down
Loading