Merge pull request #15499 from neersighted/readmin

Fix and refactor deadmin/readmin
This commit is contained in:
tkdrg
2016-02-14 17:08:13 -03:00
3 changed files with 59 additions and 95 deletions
+24 -27
View File
@@ -59,7 +59,7 @@ var/list/admin_ranks = list() //list of all admin_rank datums
return flag
/proc/admin_keyword_to_path(word) //use this with verb keywords eg +/client/proc/blah
return text2path(copytext(word,2,findtext(word," ",2,0)))
return text2path(copytext(word, 2, findtext(word, " ", 2, 0)))
// Adds/removes rights to this admin_rank
/datum/admin_rank/proc/process_keyword(word, previous_rights=0)
@@ -115,7 +115,7 @@ var/list/admin_ranks = list() //list of all admin_rank datums
var/prev = findchar(line, "+-", next, 0)
while(prev)
next = findchar(line, "+-", prev+1, 0)
next = findchar(line, "+-", prev + 1, 0)
R.process_keyword(copytext(line, prev, next), previous_rights)
prev = next
@@ -152,14 +152,15 @@ var/list/admin_ranks = list() //list of all admin_rank datums
#endif
/proc/load_admins()
/proc/load_admins(target = null)
//clear the datums references
admin_datums.Cut()
for(var/client/C in admins)
C.remove_admin_verbs()
C.holder = null
admins.Cut()
load_admin_ranks()
if(!target)
admin_datums.Cut()
for(var/client/C in admins)
C.remove_admin_verbs()
C.holder = null
admins.Cut()
load_admin_ranks()
var/list/rank_names = list()
for(var/datum/admin_rank/R in admin_ranks)
@@ -167,35 +168,28 @@ var/list/admin_ranks = list() //list of all admin_rank datums
if(config.admin_legacy_system)
//load text from file
var/list/Lines = file2list("config/admins.txt")
var/list/lines = file2list("config/admins.txt")
//process each line seperately
for(var/line in Lines)
for(var/line in lines)
if(!length(line))
continue
if(findtextEx(line,"#",1,2))
if(findtextEx(line, "#", 1, 2))
continue
//Split the line at every "="
var/list/List = splittext(line, "=")
if(!List.len)
var/list/entry = splittext(line, "=")
if(entry.len < 2)
continue
//ckey is before the first "="
var/ckey = ckey(List[1])
if(!ckey)
var/ckey = ckey(entry[1])
var/rank = ckeyEx(entry[2])
if(!ckey || !rank || (target && ckey != target))
continue
//rank follows the first "="
var/rank = ""
if(List.len >= 2)
rank = ckeyEx(List[2])
var/datum/admins/D = new(rank_names[rank], ckey) //create the admin datum and store it for later use
if(!D)
continue //will occur if an invalid rank is provided
D.associate(directory[ckey]) //find the client for a ckey if they are connected and associate them with the new admin datum
else
establish_db_connection()
if(!dbcon.IsConnected())
@@ -210,9 +204,13 @@ var/list/admin_ranks = list() //list of all admin_rank datums
while(query.NextRow())
var/ckey = ckey(query.item[1])
var/rank = ckeyEx(query.item[2])
if(target && ckey != target)
continue
if(rank_names[rank] == null)
WARNING("Admin rank ([rank]) does not exist.")
continue
var/datum/admins/D = new(rank_names[rank], ckey) //create the admin datum and store it for later use
if(!D)
continue //will occur if an invalid rank is provided
@@ -232,7 +230,7 @@ var/list/admin_ranks = list() //list of all admin_rank datums
if(holder)
holder.rank = newrank
else
holder = new /datum/admins(newrank,ckey)
holder = new /datum/admins(newrank, ckey)
remove_admin_verbs()
holder.associate(src)
@@ -240,10 +238,9 @@ var/list/admin_ranks = list() //list of all admin_rank datums
if(holder)
holder.rank.rights = newrights
else
holder = new /datum/admins("testing",newrights,ckey)
holder = new /datum/admins("testing", newrights, ckey)
remove_admin_verbs()
holder.associate(src)
#endif
/datum/admins/proc/edit_rights_topic(list/href_list)
+35 -61
View File
@@ -2,7 +2,7 @@
var/list/admin_verbs_default = list(
/client/proc/toggleadminhelpsound, /*toggles whether we hear a sound when adminhelps/PMs are used*/
/client/proc/toggleannouncelogin, /*toggles if an admin's login is announced during a round*/
/client/proc/deadmin_self, /*destroys our own admin datum so we can play as a regular player*/
/client/proc/deadmin, /*destroys our own admin datum so we can play as a regular player*/
/client/proc/cmd_admin_say, /*admin-only ooc chat*/
/client/proc/hide_verbs, /*hides all our adminverbs*/
/client/proc/hide_most_verbs, /*hides all our hideable adminverbs*/
@@ -156,7 +156,7 @@ var/list/admin_verbs_rejuv = list(
var/list/admin_verbs_hideable = list(
/client/proc/set_ooc,
/client/proc/reset_ooc,
/client/proc/deadmin_self,
/client/proc/deadmin,
/client/proc/deadchat,
/client/proc/toggleprayers,
/client/proc/toggle_hear_radio,
@@ -551,19 +551,6 @@ var/list/admin_verbs_hideable = list(
togglebuildmode(src.mob)
feedback_add_details("admin_verb","TBMS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/deadmin_self()
set name = "De-admin self"
set category = "Admin"
if(holder)
log_admin("[src] deadmined themself.")
message_admins("[src] deadmined themself.")
deadmin()
verbs += /client/proc/readmin
deadmins += ckey
src << "<span class='interface'>You are now a normal player.</span>"
feedback_add_details("admin_verb","DAS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/toggle_log_hrefs()
set name = "Toggle href logging"
set category = "Server"
@@ -583,57 +570,44 @@ var/list/admin_verbs_hideable = list(
if(holder)
src.holder.output_ai_laws()
/client/proc/deadmin()
set name = "Deadmin"
set category = "Admin"
set desc = "Shed your admin powers."
if(!holder)
return
holder.disassociate()
qdel(holder)
deadmins += ckey
admin_datums -= ckey
verbs += /client/proc/readmin
src << "<span class='interface'>You are now a normal player.</span>"
log_admin("[src] deadmined themself.")
message_admins("[src] deadmined themself.")
feedback_add_details("admin_verb","DAS")
/client/proc/readmin()
set name = "Re-admin self"
set name = "Readmin"
set category = "Admin"
set desc = "Regain your admin powers."
var/list/rank_names = list()
for(var/datum/admin_rank/R in admin_ranks)
rank_names[R.name] = R
var/datum/admins/D = admin_datums[ckey]
var/rank = null
if(config.admin_legacy_system)
//load text from file
var/list/Lines = file2list("config/admins.txt")
for(var/line in Lines)
var/list/splitline = splittext(line, " = ")
if(ckey(splitline[1]) == ckey)
if(splitline.len >= 2)
rank = ckeyEx(splitline[2])
break
continue
else
if(!dbcon.IsConnected())
message_admins("Warning, mysql database is not connected.")
src << "Warning, mysql database is not connected."
return
var/sql_ckey = sanitizeSQL(ckey)
var/DBQuery/query = dbcon.NewQuery("SELECT rank FROM [format_table_name("admin")] WHERE ckey = '[sql_ckey]'")
query.Execute()
while(query.NextRow())
rank = ckeyEx(query.item[1])
if(!D)
if(rank_names[rank] == null)
var/error_extra = ""
if(!config.admin_legacy_system)
error_extra = " Check mysql DB connection."
src << "Error while re-adminning, admin rank ([rank]) does not exist.[error_extra]"
WARNING("Error while re-adminning [src], admin rank ([rank]) does not exist.[error_extra]")
return
D = new(rank_names[rank],ckey)
var/client/C = directory[ckey]
D.associate(C)
message_admins("[src] re-adminned themselves.")
log_admin("[src] re-adminned themselves.")
deadmins -= ckey
feedback_add_details("admin_verb","RAS")
return
else
src << "You are already an admin."
verbs -= /client/proc/readmin
deadmins -= ckey
load_admins(ckey)
if(!holder) // Something went wrong...
return
deadmins -= ckey
verbs -= /client/proc/readmin
src << "<span class='interface'>You are now an admin.</span>"
message_admins("[src] re-adminned themselves.")
log_admin("[src] re-adminned themselves.")
feedback_add_details("admin_verb","RAS")
/client/proc/populate_world(amount = 50 as num)
set name = "Populate World"
set category = "Debug"
-7
View File
@@ -87,13 +87,6 @@ you will have to do something like if(client.rights & R_ADMIN) yourself.
return usr.client.holder.check_if_greater_rights_than_holder(other.holder)
return 0
/client/proc/deadmin()
admin_datums -= ckey
if(holder)
holder.disassociate()
del(holder)
return 1
//This proc checks whether subject has at least ONE of the rights specified in rights_required.
/proc/check_rights_for(client/subject, rights_required)
if(subject && subject.holder && subject.holder.rank)