mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-24 04:27:35 +01:00
Merge pull request #324 from ZomgPonies/rev
New +MENTOR permission for mentors
This commit is contained in:
@@ -41,6 +41,7 @@ var/list/admin_ranks = list() //list of all ranks with associated rights
|
||||
if("sound","sounds") rights |= R_SOUNDS
|
||||
if("spawn","create") rights |= R_SPAWN
|
||||
if("mod") rights |= R_MOD
|
||||
if("mentor") rights |= R_MENTOR
|
||||
|
||||
admin_ranks[rank] = rights
|
||||
previous_rights = rights
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
//admin verb groups - They can overlap if you so wish. Only one of each verb will exist in the verbs list regardless
|
||||
var/list/admin_verbs_default = list(
|
||||
// /datum/admins/proc/show_player_panel, /*shows an interface for individual players, with various links (links require additional flags*/
|
||||
/client/proc/deadmin_self, /*destroys our own admin datum so we can play as a regular player*/
|
||||
/client/proc/debug_variables, /*allows us to -see- the variables of any instance in the game. +VAREDIT needed to modify*/
|
||||
/client/proc/deadmin_self /*destroys our own admin datum so we can play as a regular player*/
|
||||
// /client/proc/check_antagonists, /*shows all antags*/
|
||||
/client/proc/cmd_mentor_check_new_players
|
||||
// /client/proc/deadchat /*toggles deadchat on/off*/
|
||||
)
|
||||
var/list/admin_verbs_admin = list(
|
||||
@@ -46,7 +44,6 @@ var/list/admin_verbs_admin = list(
|
||||
/client/proc/toggleprayers, /*toggles prayers on/off*/
|
||||
// /client/proc/toggle_hear_radio, /*toggles whether we hear the radio*/
|
||||
/client/proc/investigate_show, /*various admintools for investigation. Such as a singulo grief-log*/
|
||||
/client/proc/secrets,
|
||||
/datum/admins/proc/toggleooc, /*toggles ooc on/off for everyone*/
|
||||
/datum/admins/proc/toggleoocdead, /*toggles ooc on/off for everyone who is dead*/
|
||||
/datum/admins/proc/toggledsay, /*toggles dsay on/off for everyone*/
|
||||
@@ -56,7 +53,6 @@ var/list/admin_verbs_admin = list(
|
||||
/client/proc/cmd_mod_say,
|
||||
/datum/admins/proc/show_player_info,
|
||||
/client/proc/free_slot, /*frees slot for chosen job*/
|
||||
/client/proc/cmd_admin_rejuvenate,
|
||||
/client/proc/toggleattacklogs,
|
||||
/client/proc/toggledebuglogs,
|
||||
/client/proc/update_mob_sprite,
|
||||
@@ -64,9 +60,7 @@ var/list/admin_verbs_admin = list(
|
||||
/client/proc/man_up,
|
||||
/client/proc/global_man_up,
|
||||
/client/proc/delbook,
|
||||
/client/proc/event_manager_panel,
|
||||
/client/proc/empty_ai_core_toggle_latejoin,
|
||||
/client/proc/fax_panel
|
||||
/client/proc/empty_ai_core_toggle_latejoin
|
||||
)
|
||||
var/list/admin_verbs_ban = list(
|
||||
/client/proc/unban_panel,
|
||||
@@ -99,6 +93,9 @@ var/list/admin_verbs_event = list(
|
||||
/client/proc/cmd_admin_world_narrate, /*sends text to all players with no padding*/
|
||||
/client/proc/response_team, // Response Teams admin verb
|
||||
/client/proc/cmd_admin_create_centcom_report,
|
||||
/client/proc/fax_panel,
|
||||
/client/proc/secrets,
|
||||
/client/proc/event_manager_panel
|
||||
)
|
||||
|
||||
var/list/admin_verbs_spawn = list(
|
||||
@@ -123,21 +120,7 @@ var/list/admin_verbs_server = list(
|
||||
/client/proc/delbook,
|
||||
/client/proc/toggle_antagHUD_use,
|
||||
/client/proc/toggle_antagHUD_restrictions,
|
||||
/client/proc/set_ooc,
|
||||
|
||||
//Doubling of certain event verbs for senior admins
|
||||
/datum/admins/proc/access_news_network, /*allows access of newscasters*/
|
||||
/client/proc/cmd_admin_direct_narrate, /*send text directly to a player with no padding. Useful for narratives and fluff-text*/
|
||||
/client/proc/cmd_admin_world_narrate, /*sends text to all players with no padding*/
|
||||
/client/proc/toggle_random_events,
|
||||
/client/proc/toggle_ert_calling,
|
||||
/client/proc/one_click_antag,
|
||||
/client/proc/cmd_admin_change_custom_event,
|
||||
/client/proc/cmd_admin_create_centcom_report,
|
||||
/client/proc/cmd_admin_dress,
|
||||
/client/proc/editappear,
|
||||
/client/proc/response_team, // Response Teams admin verb
|
||||
/client/proc/nanomapgen_DumpImage
|
||||
/client/proc/set_ooc
|
||||
)
|
||||
var/list/admin_verbs_debug = list(
|
||||
/client/proc/cmd_admin_list_open_jobs,
|
||||
@@ -167,7 +150,8 @@ var/list/admin_verbs_permissions = list(
|
||||
/client/proc/edit_admin_permissions
|
||||
)
|
||||
var/list/admin_verbs_rejuv = list(
|
||||
/client/proc/respawn_character
|
||||
/client/proc/respawn_character,
|
||||
/client/proc/cmd_admin_rejuvenate
|
||||
)
|
||||
var/list/admin_verbs_mod = list(
|
||||
/client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/
|
||||
@@ -182,9 +166,16 @@ var/list/admin_verbs_mod = list(
|
||||
/client/proc/dsay,
|
||||
/datum/admins/proc/show_player_panel,
|
||||
/client/proc/jobbans,
|
||||
/client/proc/debug_variables /*allows us to -see- the variables of any instance in the game. +VAREDIT needed to modify*/
|
||||
// /client/proc/cmd_admin_subtle_message /*send an message to somebody as a 'voice in their head'*/
|
||||
)
|
||||
|
||||
var/list/admin_verbs_mentor = list(
|
||||
/client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/
|
||||
/client/proc/cmd_admin_pm_panel, /*admin-pm list*/
|
||||
/client/proc/cmd_admin_pm_by_key_panel, /*admin-pm list by key*/
|
||||
/client/proc/cmd_mentor_check_new_players
|
||||
)
|
||||
|
||||
/client/proc/add_admin_verbs()
|
||||
if(holder)
|
||||
@@ -202,6 +193,7 @@ var/list/admin_verbs_mod = list(
|
||||
if(holder.rights & R_SOUNDS) verbs += admin_verbs_sounds
|
||||
if(holder.rights & R_SPAWN) verbs += admin_verbs_spawn
|
||||
if(holder.rights & R_MOD) verbs += admin_verbs_mod
|
||||
if(holder.rights & R_MENTOR) verbs += admin_verbs_mentor
|
||||
|
||||
/client/proc/admin_ghost()
|
||||
set category = "Admin"
|
||||
|
||||
@@ -21,7 +21,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
|
||||
src.verbs += /client/verb/adminhelp // 2 minute cool-down for adminhelps//Go to hell
|
||||
**/
|
||||
var/msg
|
||||
var/list/type = list("Player Complaint","Question","Bug Report","Event")
|
||||
var/list/type = list("Question","Player Complaint")
|
||||
var/selected_type = input("Pick a category.", "Admin Help", null, null) as null|anything in type
|
||||
if(selected_type)
|
||||
msg = input("Please enter your message.", "Admin Help", null, null) as text
|
||||
@@ -100,11 +100,9 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
|
||||
var/admin_number_afk = 0
|
||||
var/list/modholders = list()
|
||||
var/list/banholders = list()
|
||||
var/list/debugholders = list()
|
||||
var/list/adminholders = list()
|
||||
var/list/eventholders = list()
|
||||
for(var/client/X in admins)
|
||||
if(R_MOD & X.holder.rights)
|
||||
if((R_MOD | R_MENTOR) & X.holder.rights)
|
||||
if(X.is_afk())
|
||||
admin_number_afk++
|
||||
modholders += X
|
||||
@@ -114,10 +112,6 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
|
||||
adminholders += X
|
||||
if(R_BAN & X.holder.rights)
|
||||
banholders += X
|
||||
if(R_DEBUG & X.holder.rights)
|
||||
debugholders += X
|
||||
if(R_EVENT & X.holder.rights)
|
||||
eventholders += X
|
||||
|
||||
switch(selected_type)
|
||||
if("Question")
|
||||
@@ -132,30 +126,6 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
|
||||
if(X.prefs.sound & SOUND_ADMINHELP)
|
||||
X << 'sound/effects/adminhelp.ogg'
|
||||
X << msg
|
||||
else if("Bug Report")
|
||||
if(debugholders.len)
|
||||
for(var/client/X in debugholders)
|
||||
if(X.prefs.sound & SOUND_ADMINHELP)
|
||||
X << 'sound/effects/adminhelp.ogg'
|
||||
X << msg
|
||||
else
|
||||
if(adminholders.len)
|
||||
for(var/client/X in adminholders)
|
||||
if(X.prefs.sound & SOUND_ADMINHELP)
|
||||
X << 'sound/effects/adminhelp.ogg'
|
||||
X << msg
|
||||
else if("Event")
|
||||
if(eventholders.len)
|
||||
for(var/client/X in eventholders)
|
||||
if(X.prefs.sound & SOUND_ADMINHELP)
|
||||
X << 'sound/effects/adminhelp.ogg'
|
||||
X << msg
|
||||
else
|
||||
if(banholders.len)
|
||||
for(var/client/X in banholders)
|
||||
if(X.prefs.sound & SOUND_ADMINHELP)
|
||||
X << 'sound/effects/adminhelp.ogg'
|
||||
X << msg
|
||||
else if("Player Complaint")
|
||||
if(banholders.len)
|
||||
for(var/client/X in banholders)
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
//mod PMs are maroon
|
||||
//PMs sent from admins and mods display their rank
|
||||
if(holder)
|
||||
if( holder.rights & R_MOD && !holder.rights & R_ADMIN )
|
||||
if( holder.rights & (R_MOD | R_MENTOR) && !holder.rights & R_ADMIN )
|
||||
recieve_color = "maroon"
|
||||
else
|
||||
recieve_color = "red"
|
||||
@@ -204,20 +204,14 @@
|
||||
|
||||
var/list/modholders = list()
|
||||
var/list/banholders = list()
|
||||
var/list/debugholders = list()
|
||||
var/list/adminholders = list()
|
||||
var/list/eventholders = list()
|
||||
for(var/client/X in admins)
|
||||
if(R_MOD & X.holder.rights)
|
||||
if((R_MOD | R_MENTOR) & X.holder.rights)
|
||||
modholders += X
|
||||
if(R_ADMIN & X.holder.rights)
|
||||
adminholders += X
|
||||
if(R_DEBUG & X.holder.rights)
|
||||
debugholders += X
|
||||
if(R_BAN & X.holder.rights)
|
||||
banholders += X
|
||||
if(R_EVENT & X.holder.rights)
|
||||
eventholders += X
|
||||
|
||||
//we don't use message_admins here because the sender/receiver might get it too
|
||||
for(var/client/X in admins)
|
||||
@@ -227,20 +221,10 @@
|
||||
if(X.key!=key && X.key!=C.key)
|
||||
switch(type)
|
||||
if("Question")
|
||||
if(X.holder.rights & R_MOD)
|
||||
if(X.holder.rights & (R_MOD | R_MENTOR))
|
||||
X << "<B><font color='blue'>[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]:</B> \blue [msg]</font>" //inform X
|
||||
else if(!modholders.len && X.holder.rights & R_ADMIN)
|
||||
X << "<B><font color='blue'>[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]:</B> \blue [msg]</font>" //Any admins in backup of mod question
|
||||
if("Bug Report")
|
||||
if(X.holder.rights & R_DEBUG)
|
||||
X << "<B><font color='blue'>[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]:</B> \blue [msg]</font>" //inform X
|
||||
else if(!debugholders.len && X.holder.rights & R_ADMIN)
|
||||
X << "<B><font color='blue'>[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]:</B> \blue [msg]</font>" //Any admins in backup of bug reports
|
||||
if("Event")
|
||||
if(X.holder.rights & R_EVENT)
|
||||
X << "<B><font color='blue'>[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]:</B> \blue [msg]</font>" //inform X
|
||||
else if(!eventholders.len && X.holder.rights & R_BAN)
|
||||
X << "<B><font color='blue'>[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]:</B> \blue [msg]</font>" //Quality in backup of Event
|
||||
if("Player Complaint")
|
||||
if(X.holder.rights & R_BAN)
|
||||
X << "<B><font color='blue'>[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]:</B> \blue [msg]</font>" //There should always be at least 1 person with +BAN on
|
||||
@@ -273,6 +257,6 @@
|
||||
for(var/client/X in admins)
|
||||
if(X == src)
|
||||
continue
|
||||
if((X.holder.rights & R_ADMIN) || (X.holder.rights & R_MOD))
|
||||
if((X.holder.rights & R_ADMIN) || (X.holder.rights & (R_MOD | R_MENTOR)))
|
||||
X << "<B><font color='blue'>PM: [key_name(src, X, 0)]->IRC-Admins:</B> \blue [msg]</font>"
|
||||
|
||||
|
||||
@@ -13,26 +13,26 @@ var/list/adminfaxes = list()
|
||||
|
||||
/datum/fax/New()
|
||||
faxes += src
|
||||
|
||||
|
||||
/datum/fax/admin
|
||||
var/list/reply_to = null
|
||||
|
||||
|
||||
/datum/fax/admin/New()
|
||||
adminfaxes += src
|
||||
|
||||
// Fax panel - lets admins check all faxes sent during the round
|
||||
|
||||
// Fax panel - lets admins check all faxes sent during the round
|
||||
/client/proc/fax_panel()
|
||||
set name = "Fax Panel"
|
||||
set category = "Admin"
|
||||
set category = "Event"
|
||||
if(holder)
|
||||
holder.fax_panel(usr)
|
||||
feedback_add_details("admin_verb","FXP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return
|
||||
|
||||
|
||||
/datum/admins/proc/fax_panel(var/mob/living/user)
|
||||
var/html = "<A align='right' href='?src=\ref[src];refreshfaxpanel=1'>Refresh</A>"
|
||||
html += "<A align='right' href='?src=\ref[src];AdminFaxCreate=1;faxtype=Administrator'>Create Fax</A>"
|
||||
|
||||
|
||||
html += "<div class='block'>"
|
||||
html += "<h2>Admin Faxes</h2>"
|
||||
html += "<table>"
|
||||
@@ -51,14 +51,14 @@ var/list/adminfaxes = list()
|
||||
html += "<td><A align='right' href='?src=\ref[src];AdminFaxView=\ref[A.message]'>View</A></td>"
|
||||
if(!A.reply_to)
|
||||
if(A.from_department == "Administrator")
|
||||
html += "<td>N/A</td>"
|
||||
html += "<td>N/A</td>"
|
||||
else
|
||||
html += "<td><A align='right' href='?src=\ref[src];AdminFaxCreate=\ref[A.sent_by];originfax=\ref[A.origin];faxtype=[A.to_department];replyto=\ref[A.message]'>Reply</A></td>"
|
||||
html += "<td>N/A</td>"
|
||||
else
|
||||
html += "<td>N/A</td>"
|
||||
html += "<td><A align='right' href='?src=\ref[src];AdminFaxView=\ref[A.reply_to]'>Original</A></td>"
|
||||
html += "</tr>"
|
||||
html += "<td><A align='right' href='?src=\ref[src];AdminFaxView=\ref[A.reply_to]'>Original</A></td>"
|
||||
html += "</tr>"
|
||||
html += "</table>"
|
||||
html += "</div>"
|
||||
|
||||
@@ -78,11 +78,10 @@ var/list/adminfaxes = list()
|
||||
else
|
||||
html += "<td>Unknown</td>"
|
||||
html += "<td><A align='right' href='?src=\ref[src];AdminFaxView=\ref[F.message]'>View</A></td>"
|
||||
html += "</tr>"
|
||||
html += "</tr>"
|
||||
html += "</table>"
|
||||
html += "</div>"
|
||||
|
||||
|
||||
var/datum/browser/popup = new(user, "fax_panel", "Fax Panel", 950, 450)
|
||||
popup.set_content(html)
|
||||
popup.open()
|
||||
|
||||
@@ -130,8 +130,8 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
files.known_tech=files.possible_tech
|
||||
for(var/datum/tech/KT in files.known_tech)
|
||||
if(KT.level < KT.max_level)
|
||||
KT.level=KT.max_level
|
||||
|
||||
KT.level=KT.max_level
|
||||
|
||||
/obj/machinery/computer/rdconsole/New()
|
||||
..()
|
||||
files = new /datum/research(src) //Setup the research data holder.
|
||||
@@ -250,11 +250,12 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
linked_destroy.loaded_item = null
|
||||
linked_destroy.icon_state = "d_analyzer"
|
||||
screen = 2.1
|
||||
|
||||
|
||||
else if(href_list["maxresearch"]) //Eject the item inside the destructive analyzer.
|
||||
if(!usr.client.holder) return
|
||||
if(usr.client.holder & R_MENTOR) return
|
||||
screen = 0.0
|
||||
if(alert("Are you sure you want to maximize research levels?","Confirmation","Yes","No")=="No")
|
||||
if(alert("Are you sure you want to maximize research levels?","Confirmation","Yes","No")=="No")
|
||||
return
|
||||
log_admin("[key_name(usr)] has maximized the research levels.")
|
||||
message_admins("[key_name_admin(usr)] has maximized the research levels.")
|
||||
@@ -262,7 +263,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
Maximize()
|
||||
screen = 1.0
|
||||
updateUsrDialog()
|
||||
griefProtection() //Update centcomm too
|
||||
griefProtection() //Update centcomm too
|
||||
|
||||
else if(href_list["deconstruct"]) //Deconstruct the item in the destructive analyzer and update the research holder.
|
||||
if(linked_destroy)
|
||||
@@ -593,7 +594,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
spawn(20)
|
||||
screen = 1.6
|
||||
updateUsrDialog()
|
||||
|
||||
|
||||
else if(href_list["search"]) //Search for designs with name matching pattern
|
||||
var/compare
|
||||
|
||||
@@ -611,7 +612,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
continue
|
||||
if(findtext(D.name,href_list["to_search"]))
|
||||
matching_designs.Add(D)
|
||||
|
||||
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
@@ -873,7 +874,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
dat += " | <span class='bad'>LOCKED</span>"
|
||||
dat += "<BR>"
|
||||
dat += "</div>"
|
||||
|
||||
|
||||
if(3.17) //Display search result
|
||||
dat += "<A href='?src=\ref[src];menu=1.0'>Main Menu</A>"
|
||||
dat += "<A href='?src=\ref[src];menu=3.1'>Protolathe Menu</A>"
|
||||
@@ -981,7 +982,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
dat += "<h3>Circuit Imprinter Menu:</h3><BR>"
|
||||
dat += "Material Amount: [linked_imprinter.TotalMaterials()]<BR>"
|
||||
dat += "Chemical Volume: [linked_imprinter.reagents.total_volume]<HR>"
|
||||
|
||||
|
||||
dat += "<form name='search' action='?src=\ref[src]'> \
|
||||
<input type='hidden' name='src' value='\ref[src]'> \
|
||||
<input type='hidden' name='search' value='to_search'> \
|
||||
@@ -1019,7 +1020,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
if(D.locked)
|
||||
dat += " | <span class='bad'>LOCKED</span>"
|
||||
dat += "</div>"
|
||||
|
||||
|
||||
if(4.17)
|
||||
dat += "<A href='?src=\ref[src];menu=1.0'>Main Menu</A>"
|
||||
dat += "<A href='?src=\ref[src];menu=4.1'>Circuit Imprinter Menu</A>"
|
||||
|
||||
Reference in New Issue
Block a user