/
admin_secrets.dm
121 lines (97 loc) · 3.08 KB
/
admin_secrets.dm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
var/global/datum/admin_secrets/admin_secrets = new()
/datum/admin_secrets
var/list/datum/admin_secret_category/categories
var/list/datum/admin_secret_item/items
/datum/admin_secrets/New()
..()
categories = init_subtypes(/datum/admin_secret_category)
items = list()
var/list/category_assoc = list()
for(var/datum/admin_secret_category/category in categories)
category_assoc[category.type] = category
for(var/item_type in (typesof(/datum/admin_secret_item) - /datum/admin_secret_item))
var/datum/admin_secret_item/secret_item = item_type
if(!initial(secret_item.name))
continue
var/datum/admin_secret_item/item = new item_type()
var/datum/admin_secret_category/category = category_assoc[item.category]
dd_insertObjectList(category.items, item)
items += item
//
// Secret Item Category - Each subtype is a category for organizing secret commands.
//
/datum/admin_secret_category
var/name = ""
var/desc = ""
var/list/datum/admin_secret_item/items
/datum/admin_secret_category
items = list()
/datum/admin_secret_category/proc/can_view(mob/user)
for(var/datum/admin_secret_item/item in items)
if(item.can_view(user))
return 1
return 0
//
// Secret Item Datum - Each subtype is a command on the secrets panel.
// Override execute() with the implementation of the command.
//
/datum/admin_secret_item
var/name = ""
var/category = null
var/log = 1
var/feedback = 1
var/permissions = R_HOST
var/warn_before_use = 0
/datum/admin_secret_item/dd_SortValue()
return "[name]"
/datum/admin_secret_item/proc/name()
return name
/datum/admin_secret_item/proc/can_view(mob/user)
return check_rights(permissions, 0, user)
/datum/admin_secret_item/proc/can_execute(mob/user)
if(can_view(user))
if(!warn_before_use || alert("Execute the command '[name]'?[istext(warn_before_use) ? " [warn_before_use]" : ""]", name, "No","Yes") == "Yes")
return can_view(user)
return FALSE
/datum/admin_secret_item/proc/execute(mob/user)
if(!can_execute(user))
return FALSE
if(log)
log_and_message_admins("used secret '[name]'", user)
. = TRUE
do_execute(user)
/datum/admin_secret_item/proc/do_execute(mob/user)
return
/datum/admin_secret_item/Topic()
. = ..()
return !. && !can_execute(usr)
/*************************
* Pre-defined categories *
*************************/
/datum/admin_secret_category/admin_secrets
name = "Admin Secrets"
/datum/admin_secret_category/debug
name = "Debug Tools"
/datum/admin_secret_category/investigation
name = "Investigation"
/datum/admin_secret_category/fun_secrets
name = "Fun Secrets"
/*************************
* Pre-defined base items *
*************************/
/datum/admin_secret_item/admin_secret
category = /datum/admin_secret_category/admin_secrets
log = 0
permissions = R_ADMIN
/datum/admin_secret_item/debug
category = /datum/admin_secret_category/debug
log = 1
permissions = R_DEBUG
/datum/admin_secret_item/investigation
category = /datum/admin_secret_category/investigation
log = 0
permissions = R_INVESTIGATE
/datum/admin_secret_item/fun_secret
category = /datum/admin_secret_category/fun_secrets
permissions = R_FUN
warn_before_use = 1