Overhauls and 2/28 sync (#244)
* map tweaks/shuttle engines * helpers and defines * global/onclick * controllers and datums * mapping * game folder * some other stuff * some modules * modules that aren't mobs * some mob stuff * new player stuff * mob living * silicon stuff * simple animal things * carbon/ayylmao * update_icons * carbon/human * sounds and tools * icons and stuff * hippie grinder changes + tgui * kitchen.dmi * compile issues fixed * mapfix * Mapfixes 2.0 * mapedit2.0 * mapmerger pls * Revert "mapedit2.0" This reverts commit 74139a3cacea10df7aafca06c0a10bd3daf3a481. * clean up vore folder + 2 hotfixes * admin ticket refinement * Blob tweaks and LAZYADD * LAZYADD IS LAZY * Magic strings purged * DEFINES NEED HIGHER PRIORITIES * Only a sleepless idiot deals in absolute TRUE|FALSE * u h g * progress bar fix * reverts ticket logs * there's always that one guy * fixes and stuff * 2/27 fixes * game folder stuff * stats * some modules again * clothing stuff gets vg clothing out of the main files * everything not mobs again * mob stuff * maps, tgui, sql stuff * icons * additional fixes and compile errors * don't need this anymore * Oh right this isn't needed anymore * maint bar re-added * that doesn't need to be here * stupid events * wtfeven * probably makes Travis happy * don't care to fix the grinder atm * fixes vending sprites, changes turret * lethal, not lethals * overylays are finicky creatures * lazy fix for bleeding edgy (#252) * map tweaks/shuttle engines * helpers and defines * global/onclick * controllers and datums * mapping * game folder * some other stuff * some modules * modules that aren't mobs * some mob stuff * new player stuff * mob living * silicon stuff * simple animal things * carbon/ayylmao * update_icons * carbon/human * sounds and tools * icons and stuff * hippie grinder changes + tgui * kitchen.dmi * compile issues fixed * mapfix * Mapfixes 2.0 * mapedit2.0 * mapmerger pls * Revert "mapedit2.0" This reverts commit 74139a3cacea10df7aafca06c0a10bd3daf3a481. * clean up vore folder + 2 hotfixes * admin ticket refinement * Blob tweaks and LAZYADD * LAZYADD IS LAZY * Magic strings purged * DEFINES NEED HIGHER PRIORITIES * Only a sleepless idiot deals in absolute TRUE|FALSE * u h g * progress bar fix * reverts ticket logs * there's always that one guy * fixes and stuff * 2/27 fixes * game folder stuff * stats * some modules again * clothing stuff gets vg clothing out of the main files * everything not mobs again * mob stuff * maps, tgui, sql stuff * icons * additional fixes and compile errors * don't need this anymore * Oh right this isn't needed anymore * maint bar re-added * that doesn't need to be here * stupid events * wtfeven * probably makes Travis happy * don't care to fix the grinder atm * fixes vending sprites, changes turret * lethal, not lethals * overylays are finicky creatures
This commit is contained in:
@@ -76,7 +76,6 @@
|
||||
src.verbs |= /client/verb/adminhelp
|
||||
adminhelptimerid = 0
|
||||
|
||||
|
||||
/client/verb/adminhelp(msg as text)
|
||||
set category = "Admin"
|
||||
set name = "Adminhelp"
|
||||
@@ -92,22 +91,25 @@
|
||||
if(src.handle_spam_prevention(msg,MUTE_ADMINHELP))
|
||||
return
|
||||
|
||||
|
||||
var/datum/adminticket/ticket
|
||||
var/ref_client = "\ref[src]"
|
||||
for(var/datum/adminticket/T in admintickets)
|
||||
if(T.permckey == src.ckey && T.resolved == "No")
|
||||
for(var/I in admintickets)
|
||||
var/datum/adminticket/T = I
|
||||
if(T.permckey == src.ckey && T.resolved == TICKET_UNRESOLVED)
|
||||
if(alert(usr,"You already have an adminhelp open, would you like to bump it?", "Bump Adminhelp", "Yes", "No") == "Yes")
|
||||
T.logs += "[src.ckey] has bumped this adminhelp!"
|
||||
if(T.admin == "N/A")
|
||||
T.ticket_logs += "[src.ckey] has bumped this adminhelp!"
|
||||
if(T.admin == TICKET_UNASSIGNED)
|
||||
usr << "<b>Due to the fact your Adminhelp had no assigned admin, admins have been pinged.</b>"
|
||||
message_admins("[src.ckey] has bumped their adminhelp #[T.ID], still no assigned admin!")
|
||||
msg = "<span class='adminnotice'><b><font color=red>HELP: </font><A HREF='?priv_msg=[ckey];ahelp_reply=1'>[key_name(src)]</A> [ADMIN_QUE(mob)] [ADMIN_PP(mob)] [ADMIN_VV(mob)] [ADMIN_SM(mob)] [ADMIN_FLW(mob)] [ADMIN_TP(mob)] (<A HREF='?_src_=holder;rejectadminhelp=[ref_client]'>REJT</A>) (<A HREF='?_src_=holder;icissue=[ref_client]'>IC</A>) (<A HREF='?_src_=ticket;resolve=[T.ID]'>R</a>):</b> [msg]</span>"
|
||||
message_admins("[src.ckey] has bumped their adminhelp #[T.id], still no assigned admin!")
|
||||
msg = "<span class='adminnotice'><b><font color='red'>HELP: </font><A HREF='?priv_msg=[ckey];ahelp_reply=1'>[key_name(src)]</A> [ADMIN_QUE(mob)] [ADMIN_PP(mob)] [ADMIN_VV(mob)] [ADMIN_SM(mob)] [ADMIN_FLW(mob)] [ADMIN_TP(mob)] (<A HREF='?_src_=holder;rejectadminhelp=[ref_client]'>REJT</A>) (<A HREF='?_src_=holder;icissue=[ref_client]'>IC</A>) (<A HREF='?_src_=ticket;resolve=[T.id]'>R</a>):</b> [msg]</span>"
|
||||
for(var/client/X in admins)
|
||||
if(X.prefs.toggles & SOUND_ADMINHELP)
|
||||
X << 'sound/effects/adminhelp.ogg'
|
||||
X << msg
|
||||
else
|
||||
usr << "<b>Admins have been notified.</b>"
|
||||
message_admins("[src.ckey] has bumped their adminhelp #[T.ID].")
|
||||
message_admins("[src.ckey] has bumped their adminhelp #[T.id].")
|
||||
src.verbs -= /client/verb/adminhelp
|
||||
adminhelptimerid = addtimer(CALLBACK(src, .proc/giveadminhelpverb), 1200, TIMER_STOPPABLE) //2 minute cooldown of admin helps
|
||||
return
|
||||
@@ -125,16 +127,11 @@
|
||||
|
||||
msg = keywords_lookup(msg)
|
||||
|
||||
if(!mob) return //this doesn't happen
|
||||
if(!mob)
|
||||
return //this doesn't happen
|
||||
|
||||
createticket(src, msg, src.ckey, mob)
|
||||
|
||||
var/datum/adminticket/ticket
|
||||
|
||||
for(var/datum/adminticket/T in admintickets)
|
||||
if(T.permckey == src.ckey)
|
||||
ticket = T
|
||||
|
||||
msg = "<span class='adminnotice'><b><font color=red>HELP: </font><A HREF='?priv_msg=[ckey];ahelp_reply=1'>[key_name(src)]</A> [ADMIN_QUE(mob)] [ADMIN_PP(mob)] [ADMIN_VV(mob)] [ADMIN_SM(mob)] [ADMIN_FLW(mob)] [ADMIN_TP(mob)] (<A HREF='?_src_=holder;rejectadminhelp=[ref_client]'>REJT</A>) (<A HREF='?_src_=holder;icissue=[ref_client]'>IC</A>) (<A HREF='?_src_=holder;resolve=[ticket]'>R</a>):</b> [msg]</span>"
|
||||
|
||||
//send this msg to all admins
|
||||
@@ -142,22 +139,22 @@
|
||||
for(var/client/X in admins)
|
||||
if(X.prefs.toggles & SOUND_ADMINHELP)
|
||||
X << 'sound/effects/adminhelp.ogg'
|
||||
window_flash(X)
|
||||
window_flash(X, ignorepref = TRUE)
|
||||
X << msg
|
||||
|
||||
|
||||
//show it to the person adminhelping too
|
||||
src << "<span class='adminnotice'>PM to-<b>Admins</b>: [original_msg]</span>"
|
||||
|
||||
//send it to irc if nobody is on and tell us how many were on
|
||||
var/admin_number_present = send2irc_adminless_only(ckey,original_msg)
|
||||
send2irc(ckey,original_msg)
|
||||
|
||||
log_admin("HELP: [key_name(src)]: [original_msg] - heard by [admin_number_present] non-AFK admins who have +BAN.")
|
||||
if(admin_number_present <= 0)
|
||||
src << "<span class='notice'>No active admins are online, your adminhelp was sent to the admin irc.</span>"
|
||||
feedback_add_details("admin_verb","AH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return
|
||||
|
||||
|
||||
/proc/get_admin_counts(requiredflags = R_BAN)
|
||||
. = list("total" = list(), "noflags" = list(), "afk" = list(), "stealth" = list(), "present" = list())
|
||||
for(var/client/X in admins)
|
||||
@@ -186,8 +183,7 @@
|
||||
else
|
||||
final = "[msg] - All admins stealthed\[[english_list(stealthmins)]\], AFK\[[english_list(afkmins)]\], or lacks +BAN\[[english_list(powerlessmins)]\]! Total: [allmins.len] "
|
||||
send2irc(source,final)
|
||||
// send2admindiscord(source,final)
|
||||
|
||||
send2otherserver(source,final)
|
||||
|
||||
/proc/send2irc(msg,msg2)
|
||||
if(config.useircbot)
|
||||
@@ -205,7 +201,6 @@
|
||||
|
||||
world.Export("[global.cross_address]?[list2params(message)]")
|
||||
|
||||
|
||||
/proc/ircadminwho()
|
||||
var/list/message = list("Admins: ")
|
||||
var/list/admin_keys = list()
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
if(!holder)
|
||||
src << "<font color='red'>Error: Admin-PM-Context: Only administrators may use this command.</font>"
|
||||
return
|
||||
if( !ismob(M) || !M.client ) return
|
||||
if( !ismob(M) || !M.client )
|
||||
return
|
||||
cmd_admin_pm(M.client,null)
|
||||
feedback_add_details("admin_verb","APMM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
@@ -20,16 +21,15 @@
|
||||
var/list/client/targets[0]
|
||||
for(var/client/T)
|
||||
if(T.mob)
|
||||
if(istype(T.mob, /mob/new_player))
|
||||
if(isnewplayer(T.mob))
|
||||
targets["(New Player) - [T]"] = T
|
||||
else if(istype(T.mob, /mob/dead/observer))
|
||||
else if(isobserver(T.mob))
|
||||
targets["[T.mob.name](Ghost) - [T]"] = T
|
||||
else
|
||||
targets["[T.mob.real_name](as [T.mob.name]) - [T]"] = T
|
||||
else
|
||||
targets["(No Mob) - [T]"] = T
|
||||
var/list/sorted = sortList(targets)
|
||||
var/target = input(src,"To whom shall we send a message?","Admin PM",null) in sorted|null
|
||||
var/target = input(src,"To whom shall we send a message?","Admin PM",null) as null|anything in sortList(targets)
|
||||
cmd_admin_pm(targets[target],null)
|
||||
feedback_add_details("admin_verb","APM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
@@ -45,31 +45,30 @@
|
||||
else if(istype(whom,/client))
|
||||
C = whom
|
||||
if(!C)
|
||||
if(holder) src << "<font color='red'>Error: Admin-PM: Client not found.</font>"
|
||||
if(holder)
|
||||
src << "<font color='red'>Error: Admin-PM: Client not found.</font>"
|
||||
return
|
||||
|
||||
var/datum/adminticket/ticket
|
||||
|
||||
for(var/datum/adminticket/T in admintickets)
|
||||
if(T.permckey == C.ckey)
|
||||
ticket = T
|
||||
for(var/I in admintickets)
|
||||
var/datum/adminticket/T = I
|
||||
|
||||
if(ticket)
|
||||
if(ticket.active == "No" && ticket.replying == 0)
|
||||
message_admins("[key_name_admin(src)] has been assigned to [key_name(C, 0, 0)]'s admin help. This is the first reply. ([ticket.uID])")
|
||||
ticket.replying = 1
|
||||
ticket.user << "<b>[src.ckey] has been assigned to your admin help, please await a reply.</b>"
|
||||
else if(ticket.replying == 1)
|
||||
if(T.active == TICKET_INACTIVE && T.replying == TICKET_UNREPLIED)
|
||||
message_admins("[key_name_admin(src)] has been assigned to [key_name(C, 0, 0)]'s admin help. This is the first reply. ([T.uID])")
|
||||
T.replying = TICKET_REPLIED
|
||||
T.user << "<b>[src.ckey] has been assigned to your admin help, please await a reply.</b>"
|
||||
else if(T.replying == TICKET_REPLIED)
|
||||
src << "<b>Error, this ticket is already being replied to!</b>"
|
||||
return
|
||||
else if(ticket.admin != "N/A" && ticket.replying == 0)
|
||||
if(ticket.admin != src.ckey)
|
||||
if(alert(src, "This adminhelp already has an admin assigned: [ticket.admin]! Are you sure you want to take it over?", "Conflict", "Yes", "No") == "Yes")
|
||||
message_admins("[key_name_admin(src)] has been assigned to [key_name(C, 0, 0)]'s admin help. Override: [ticket.admin]. ([ticket.uID])")
|
||||
ticket.user << "<b>[src.ckey] has been assigned to your admin help, please await a reply.</b>"
|
||||
ticket.replying = 1
|
||||
else
|
||||
message_admins("[key_name_admin(src)] has started replying to [key_name(C, 0, 0)]'s admin help. They did not have an active ahelp.")
|
||||
else if(T.admin != TICKET_UNASSIGNED && T.replying == TICKET_UNREPLIED)
|
||||
if(T.admin != src.ckey)
|
||||
if(alert(src, "This adminhelp already has an admin assigned: [T.admin]! Are you sure you want to take it over?", "Conflict", "Yes", "No") == "Yes")
|
||||
message_admins("[key_name_admin(src)] has been assigned to [key_name(C, 0, 0)]'s admin help. Override: [T.admin]. ([T.uID])")
|
||||
T.user << "<b>[src.ckey] has been assigned to your admin help, please await a reply.</b>"
|
||||
T.replying = TICKET_REPLIED
|
||||
else
|
||||
message_admins("[key_name_admin(src)] has started replying to [key_name(C, 0, 0)]'s admin help. They did not have an active ahelp.")
|
||||
|
||||
var/msg = input(src,"Message:", "Private message to [key_name(C, 0, 0)]") as text|null
|
||||
|
||||
@@ -78,15 +77,15 @@
|
||||
if(ticket.admin != src.ckey)
|
||||
message_admins("[key_name_admin(src)] has been unassigned from [key_name(C, 0, 0)]'s admin help. Cancelled reply. ([ticket.uID])")
|
||||
ticket.user << "<b>[src.ckey] has been unassigned from your admin help. (reply cancelled)</b>"
|
||||
ticket.replying = 0
|
||||
ticket.replying = TICKET_UNREPLIED
|
||||
else
|
||||
message_admins("[key_name_admin(src)] has cancelled their reply to [key_name(C, 0, 0)]'s admin help. No active ahelp.")
|
||||
return
|
||||
|
||||
if(ticket)
|
||||
ticket.replying = 0
|
||||
ticket.replying = TICKET_UNREPLIED
|
||||
ticket.admin = src.ckey
|
||||
ticket.active = "Yes"
|
||||
ticket.active = TICKET_ACTIVE
|
||||
|
||||
cmd_admin_pm(whom, msg)
|
||||
|
||||
@@ -113,7 +112,8 @@
|
||||
if(!msg)
|
||||
msg = input(src,"Message:", "Private message to [key_name(C, 0, 0)]") as text|null
|
||||
|
||||
if(!msg) return
|
||||
if(!msg)
|
||||
return
|
||||
if(!C)
|
||||
if(holder) src << "<font color='red'>Error: Admin-PM: Client not found.</font>"
|
||||
else adminhelp(msg) //admin we are replying to has vanished, adminhelp instead
|
||||
@@ -125,7 +125,8 @@
|
||||
//clean the message if it's not sent by a high-rank admin
|
||||
if(!check_rights(R_SERVER|R_DEBUG,0))
|
||||
msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN))
|
||||
if(!msg) return
|
||||
if(!msg)
|
||||
return
|
||||
|
||||
msg = emoji_parse(msg)
|
||||
var/keywordparsedmsg = keywords_lookup(msg)
|
||||
@@ -133,26 +134,32 @@
|
||||
|
||||
if(C.holder)
|
||||
if(holder) //both are admins
|
||||
for(var/datum/adminticket/T in admintickets)
|
||||
if(T.permckey == src.ckey && T.resolved == "No")
|
||||
T.logs += "<span class='notice'>[src] TO [C]: [msg] </span>"
|
||||
for(var/I in admintickets)
|
||||
var/datum/adminticket/T = I
|
||||
if(T.permckey == src.ckey && T.resolved == TICKET_UNRESOLVED)
|
||||
T.ticket_logs += "<span class='notice'>[src] TO [C]: [msg] </span>"
|
||||
ticket = T
|
||||
break
|
||||
else if(T.permckey == src.ckey)
|
||||
ticket = T
|
||||
if(ticket && ticket.resolved == "No")
|
||||
break
|
||||
if(ticket && ticket.resolved == TICKET_UNRESOLVED)
|
||||
C << "<font color='red'>Admin PM from-<b>[key_name(src, C, 1)]</b>: [keywordparsedmsg] (<a href='?src=\ref[ticket];resolve=\ref[ticket]'>R</a>)</font>"
|
||||
src << "<font color='blue'>Admin PM to-<b>[key_name(C, src, 1)]</b>: [keywordparsedmsg] (<a href='?src=\ref[ticket];resolve=\ref[ticket]'>R</a>)</font>"
|
||||
else
|
||||
C << "<font color='red'>Admin PM from-<b>[key_name(src, C, 1)]</b>: [keywordparsedmsg]</font>"
|
||||
src << "<font color='blue'>Admin PM to-<b>[key_name(C, src, 1)]</b>: [keywordparsedmsg]</font>"
|
||||
else //recipient is an admin but sender is not
|
||||
for(var/datum/adminticket/T in admintickets)
|
||||
if(T.permckey == src.ckey && T.resolved == "No")
|
||||
T.logs += "<span class='notice'>[src] TO [C]: [msg] </span>"
|
||||
for(var/I in admintickets)
|
||||
var/datum/adminticket/T = I
|
||||
if(T.permckey == src.ckey && T.resolved == TICKET_UNRESOLVED)
|
||||
T.ticket_logs += "<span class='notice'>[src] TO [C]: [msg] </span>"
|
||||
ticket = T
|
||||
break
|
||||
else if(T.permckey == src.ckey)
|
||||
ticket = T
|
||||
if(ticket && ticket.resolved == "No")
|
||||
break
|
||||
if(ticket && ticket.resolved == TICKET_UNRESOLVED)
|
||||
C << "<font color='red'>Reply PM from-<b>[key_name(src, C, 1)]</b>: [keywordparsedmsg] (<a href='?src=\ref[ticket];resolve=\ref[ticket]'>R</a>)</font>"
|
||||
else
|
||||
C << "<font color='red'>Reply PM from-<b>[key_name(src, C, 1)]</b>: [keywordparsedmsg]</font>"
|
||||
@@ -164,17 +171,19 @@
|
||||
|
||||
else
|
||||
if(holder) //sender is an admin but recipient is not. Do BIG RED TEXT
|
||||
for(var/datum/adminticket/T in admintickets)
|
||||
if(T.permckey == C.ckey && T.resolved == "No")
|
||||
T.logs += "<span class='notice'>[src] TO [C]: [msg] </span>"
|
||||
for(var/I in admintickets)
|
||||
var/datum/adminticket/T = I
|
||||
if(T.permckey == C.ckey && T.resolved == TICKET_UNRESOLVED)
|
||||
T.ticket_logs += "<span class='danger'>[src] TO [C]: [msg] </span>"
|
||||
ticket = T
|
||||
break
|
||||
else if(T.permckey == C.ckey)
|
||||
ticket = T
|
||||
|
||||
break
|
||||
C << "<font color='red' size='4'><b>-- Administrator private message --</b></font>"
|
||||
C << "<font color='red'>Admin PM from-<b>[key_name(src, C, 0)]</b>: [msg]</font>"
|
||||
C << "<font color='red'><i>Click on the administrator's name to reply.</i></font>"
|
||||
if(ticket && ticket.resolved == "No")
|
||||
if(ticket && ticket.resolved == TICKET_UNRESOLVED)
|
||||
src << "<font color='blue'>Admin PM to-<b>[key_name(C, src, 1)]</b>: [msg] (<a href='?src=\ref[ticket];resolve=\ref[ticket]'>R</a>)</font>"
|
||||
else
|
||||
src << "<font color='blue'>Admin PM to-<b>[key_name(C, src, 1)]</b>: [msg]</font>"
|
||||
@@ -190,9 +199,10 @@
|
||||
if(C && reply)
|
||||
if(sender)
|
||||
C.cmd_admin_pm(sender,reply)
|
||||
for(var/datum/adminticket/T in admintickets)
|
||||
if(T.permckey == C.ckey && T.resolved == "No")
|
||||
T.logs += "<span class='danger'>[sendername] TO [C]: [msg] </span>" //sender is still about, let's reply to them
|
||||
for(var/I in admintickets)
|
||||
var/datum/adminticket/T = I
|
||||
if(T.permckey == C.ckey && T.resolved == TICKET_UNRESOLVED)
|
||||
T.ticket_logs += "<span class='danger'>[sendername] TO [C]: [msg] </span>" //sender is still about, let's reply to them
|
||||
else
|
||||
adminhelp(reply) //sender has left, adminhelp instead
|
||||
return
|
||||
@@ -232,7 +242,7 @@
|
||||
C << "<font color='red' size='4'><b>-- Administrator private message --</b></font>"
|
||||
C << "<font color='red'>Admin PM from-<b><a href='?priv_msg=[stealthkey]'>[adminname]</A></b>: [msg]</font>"
|
||||
C << "<font color='red'><i>Click on the administrator's name to reply.</i></font>"
|
||||
window_flash(C)
|
||||
window_flash(C, ignorepref = TRUE)
|
||||
//always play non-admin recipients the adminhelp sound
|
||||
C << 'sound/effects/adminhelp.ogg'
|
||||
|
||||
|
||||
@@ -683,7 +683,6 @@ var/list/TYPES_SHORTCUTS = list(
|
||||
set desc = "Displays a list of things that have failed to GC this round"
|
||||
|
||||
var/dat = "<B>List of things that failed to GC this round</B><BR><BR>"
|
||||
|
||||
for(var/path in SSgarbage.didntgc)
|
||||
dat += "[path] - [SSgarbage.didntgc[path]] times<BR>"
|
||||
|
||||
@@ -691,6 +690,10 @@ var/list/TYPES_SHORTCUTS = list(
|
||||
for(var/path in SSgarbage.noqdelhint)
|
||||
dat += "[path]<BR>"
|
||||
|
||||
dat += "<B>List of paths that slept in Destroy()</B><BR><BR>"
|
||||
for(var/path in SSgarbage.sleptDestroy)
|
||||
dat += "[path]<BR>"
|
||||
|
||||
usr << browse(dat, "window=dellog")
|
||||
|
||||
/client/proc/debug_huds(i as num)
|
||||
|
||||
@@ -1,65 +1,60 @@
|
||||
/datum/adminticket
|
||||
var/ID = "" //ID of the ticket, very important as its used to find adminhelps.
|
||||
var/user = "" //The user of the ahelp.
|
||||
var/uckey //The saved ckey of the adminheloing user.
|
||||
var/admin = "N/A" //The handling admin? Like come on.
|
||||
var/msg = "" //The adminhelp message.
|
||||
var/resolved = "No" //Is it resolved? Its much easier to have a "Yes" or a "No", as you can directly concat it into strings making life that much easier.
|
||||
var/permckey = "" //The perm ckey, never removed essentially.
|
||||
var/permuser = "" //Same as above!
|
||||
var/uID = "" //The UNIQUE id, made by putting part of the ckey and the ID together. Used internally in code.
|
||||
var/active = "No" //Is the adminhelp active, eg admin responded? This is the same as above, it makes life easier.
|
||||
var/logs = list() //The logs of the adminhelp.
|
||||
var/replying = 0 //Is someone responding to the adminhelp?
|
||||
var/mob //The mob adminhelping mob.
|
||||
var/active = TICKET_INACTIVE //Is the adminhelp active, eg admin responded?
|
||||
var/admin = TICKET_UNASSIGNED //The handling admin? Like come on.
|
||||
var/id = "" //ID of the ticket, very important as its used to find adminhelps.
|
||||
var/ticket_logs = list() //The logs of the adminhelp.
|
||||
var/mob //The mob adminhelping mob.
|
||||
var/msg = "" //The adminhelp message.
|
||||
var/permckey = "" //The perm ckey, never removed essentially.
|
||||
var/permuser = "" //Same as above!
|
||||
var/replying = TICKET_UNREPLIED //Is someone responding to the adminhelp?
|
||||
var/resolved = TICKET_UNRESOLVED //Is it resolved? Its much easier to have a "Yes" or a "No", as you can directly concat it into strings making life that much easier.
|
||||
var/uckey //The saved ckey of the adminhelping user.
|
||||
var/uID = "" //The UNIQUE id, made by putting part of the ckey and the ID together. Used internally in code.
|
||||
var/user = "" //The user of the ahelp.
|
||||
|
||||
|
||||
/client/proc/list_ahelps(user, resolved)
|
||||
if(!check_rights(R_ADMIN))
|
||||
src << "<font color='red'>Error: Only administrators may use this command.</font>"
|
||||
return
|
||||
|
||||
if(resolved)
|
||||
user << "Current Ahelps:"
|
||||
for(var/datum/adminticket/T in admintickets)
|
||||
var/ref_mob = "\ref[T.mob]"
|
||||
usr << "<span class='adminnotice'><b><font color=red>#[T.ID] By:</font> <A HREF='?priv_msg=[T.permckey];ahelp_reply=1'>[key_name(T.permuser)]</A></b><b> Ckey:</b> [T.permckey] <b>Name:</b> [T.permuser] <b>Unique ID:</b> [T.uID]</span>"
|
||||
usr << " <b>Controls:</b> (<A HREF='?_src_=holder;adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[ref_mob]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) (<A HREF='?_src_=holder;traitor=[ref_mob]'>TP</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=[ref_mob]'>FLW</A>)"
|
||||
for(var/I in admintickets)
|
||||
var/datum/adminticket/T = I
|
||||
|
||||
if(resolved)
|
||||
user << "Resolved Ahelps:"
|
||||
usr << "<span class='adminnotice'><b><font color='red'>#[T.id] By:</font> <A HREF='?priv_msg=[T.permckey];ahelp_reply=1'>[key_name(T.permuser)]</A></b><b> Ckey:</b> [T.permckey] <b>Name:</b> [T.permuser] <b>Unique id:</b> [T.uID]</span>"
|
||||
usr << " <b>Controls:</b> [ADMIN_QUE(mob)] [ADMIN_PP(mob)] [ADMIN_VV(mob)] [ADMIN_SM(mob)] [ADMIN_FLW(mob)] [ADMIN_TP(mob)]"
|
||||
usr << " <b>Message:</b> [T.msg]"
|
||||
usr << " <b>Handling Admin:</b> [T.admin]"
|
||||
usr << " <b>Replied To:</b> [T.active]/<b><a href='?src=\ref[T];view_logs=\ref[T]'>(LOGS)</a></b>"
|
||||
if(T.resolved == "No")
|
||||
if(T.resolved == TICKET_UNRESOLVED)
|
||||
usr << " <b>Resolved:</b> [T.resolved] <a href='?src=\ref[T];resolve=\ref[T]'>(Resolve)</a>"
|
||||
else
|
||||
usr << " <b>Resolved:</b> [T.resolved] <a href='?src=\ref[T];resolve=\ref[T]'>(Unresolve)</a>"
|
||||
|
||||
else
|
||||
user << "Current Unresolved Ahelps:"
|
||||
for(var/datum/adminticket/T in admintickets)
|
||||
if(T.resolved == "No")
|
||||
var/ref_mob = "\ref[T.mob]"
|
||||
usr << "<span class='adminnotice'><b><font color=red>#[T.ID] By:</font> <A HREF='?priv_msg=[T.permckey];ahelp_reply=1'>[key_name(T.permuser)]</A></b><b> Ckey:</b> [T.permckey] <b>Name:</b> [T.permuser] <b>Unique ID:</b> [T.uID]</span>"
|
||||
usr << " <b>Controls:</b> (<A HREF='?_src_=holder;adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[ref_mob]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) (<A HREF='?_src_=holder;traitor=[ref_mob]'>TP</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=[ref_mob]'>FLW</A>)"
|
||||
else
|
||||
user << "Current Unresolved Ahelps:"
|
||||
if(T.resolved == TICKET_UNRESOLVED)
|
||||
usr << "<span class='adminnotice'><b><font color=red>#[T.id] By:</font> <A HREF='?priv_msg=[T.permckey];ahelp_reply=1'>[key_name(T.permuser)]</A></b><b> Ckey:</b> [T.permckey] <b>Name:</b> [T.permuser] <b>Unique ID:</b> [T.uID]</span>"
|
||||
usr << " <b>Controls:</b> [ADMIN_QUE(mob)] [ADMIN_PP(mob)] [ADMIN_VV(mob)] [ADMIN_SM(mob)] [ADMIN_FLW(mob)] [ADMIN_TP(mob)]"
|
||||
usr << " <b>Message:</b> [T.msg]"
|
||||
usr << " <b>Handling Admin:</b> [T.admin]"
|
||||
usr << " <b>Replied To:</b> [T.active]/<b><a href='?src=\ref[T];view_logs=\ref[T]'>(LOGS)</a></b>"
|
||||
if(T.resolved == "No")
|
||||
if(T.resolved == TICKET_UNRESOLVED)
|
||||
usr << " <b>Resolved:</b> [T.resolved] <a href='?src=\ref[T];resolve=\ref[T]'>(Resolve)</a>"
|
||||
else
|
||||
usr << " <b>Resolved:</b> [T.resolved] <a href='?src=\ref[T];resolve=\ref[T]'>(Unresolve)</a>"
|
||||
|
||||
/client/proc/ahelp_count(modifier)
|
||||
var/amount
|
||||
for(var/datum/adminticket/T in admintickets)
|
||||
switch(modifier)
|
||||
if(0)
|
||||
if(T.resolved == "No")
|
||||
amount++
|
||||
if(1)
|
||||
if(T.resolved == "Yes")
|
||||
amount++
|
||||
if(2)
|
||||
amount++
|
||||
|
||||
for(var/I in admintickets)
|
||||
var/datum/adminticket/T = I
|
||||
if(T.resolved == TICKET_UNRESOLVED)
|
||||
amount++
|
||||
if(T.resolved == TICKET_RESOLVED)
|
||||
amount++
|
||||
return amount
|
||||
|
||||
|
||||
@@ -82,15 +77,14 @@
|
||||
if(count < 1)
|
||||
usr << " None"
|
||||
return
|
||||
|
||||
for(var/datum/adminticket/T in admintickets)
|
||||
var/ref_mob = "\ref[T.mob]"
|
||||
usr << "<span class='adminnotice'><b><font color=red>#[T.ID] By:</font> <A HREF='?priv_msg=[T.permckey];ahelp_reply=1'>[key_name(T.permuser)]</b></A><b> Ckey:</b> [T.permckey] <b>Name:</b> [T.permuser] <b>Unique ID:</b> [T.uID]</span>"
|
||||
usr << " <b>Controls:</b> (<A HREF='?_src_=holder;adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[ref_mob]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) (<A HREF='?_src_=holder;traitor=[ref_mob]'>TP</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=[ref_mob]'>FLW</A>)"
|
||||
for(var/I in admintickets)
|
||||
var/datum/adminticket/T = I
|
||||
usr << "<span class='adminnotice'><b><font color=red>#[T.id] By:</font> <A HREF='?priv_msg=[T.permckey];ahelp_reply=1'>[key_name(T.permuser)]</b></A><b> Ckey:</b> [T.permckey] <b>Name:</b> [T.permuser] <b>Unique ID:</b> [T.uID]</span>"
|
||||
usr << " <b>Controls:</b> [ADMIN_QUE(mob)] [ADMIN_PP(mob)] [ADMIN_VV(mob)] [ADMIN_SM(mob)] [ADMIN_FLW(mob)] [ADMIN_TP(mob)]"
|
||||
usr << " <b>Message:</b> [T.msg]"
|
||||
usr << " <b>Handling Admin:</b> [T.admin]"
|
||||
usr << " <b>Replied To:</b> [T.active]/<b><a href='?src=\ref[T];view_logs=\ref[T]'>(LOGS)</a></b>"
|
||||
if(T.resolved == "No")
|
||||
if(T.resolved == TICKET_UNRESOLVED)
|
||||
usr << " <b>Resolved:</b> [T.resolved] <a href='?src=\ref[T];resolve=\ref[T]'>(Resolve)</a>"
|
||||
else
|
||||
usr << " <b>Resolved:</b> [T.resolved] <a href='?src=\ref[T];resolve=\ref[T]'>(Unresolve)</a>"
|
||||
@@ -106,8 +100,9 @@
|
||||
|
||||
var/count = 0
|
||||
|
||||
for(var/datum/adminticket/T in admintickets)
|
||||
if(T.resolved =="No")
|
||||
for(var/I in admintickets)
|
||||
var/datum/adminticket/T = I
|
||||
if(T.resolved == TICKET_UNRESOLVED)
|
||||
count++
|
||||
|
||||
usr << "<b>Current Unresolved Ahelps:</b>"
|
||||
@@ -116,15 +111,15 @@
|
||||
usr << " None"
|
||||
return
|
||||
|
||||
for(var/datum/adminticket/T in admintickets)
|
||||
if(T.resolved == "No")
|
||||
var/ref_mob = "\ref[T.mob]"
|
||||
usr << "<span class='adminnotice'><b><font color=red>#[T.ID] By:</font> <A HREF='?priv_msg=[T.permckey];ahelp_reply=1'>[key_name(T.permuser)]</b></A><b> Ckey:</b> [T.permckey] <b>Name:</b> [T.permuser] <b>Unique ID:</b> [T.uID]</span>"
|
||||
usr << " <b>Controls:</b> (<A HREF='?_src_=holder;adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[ref_mob]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) (<A HREF='?_src_=holder;traitor=[ref_mob]'>TP</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=[ref_mob]'>FLW</A>)"
|
||||
for(var/I in admintickets)
|
||||
var/datum/adminticket/T = I
|
||||
if(T.resolved == TICKET_UNRESOLVED)
|
||||
usr << "<span class='adminnotice'><b><font color=red>#[T.id] By:</font> <A HREF='?priv_msg=[T.permckey];ahelp_reply=1'>[key_name(T.permuser)]</b></A><b> Ckey:</b> [T.permckey] <b>Name:</b> [T.permuser] <b>Unique ID:</b> [T.uID]</span>"
|
||||
usr << " <b>Controls:</b> [ADMIN_QUE(mob)] [ADMIN_PP(mob)] [ADMIN_VV(mob)] [ADMIN_SM(mob)] [ADMIN_FLW(mob)] [ADMIN_TP(mob)]"
|
||||
usr << " <b>Message:</b> [T.msg]"
|
||||
usr << " <b>Handling Admin:</b> [T.admin]"
|
||||
usr << " <b>Replied To:</b> [T.active]/<b><a href='?src=\ref[T];view_logs=\ref[T]'>(LOGS)</a></b>"
|
||||
if(T.resolved == "No")
|
||||
if(T.resolved == TICKET_UNRESOLVED)
|
||||
usr << " <b>Resolved:</b> [T.resolved] <a href='?src=\ref[T];resolve=\ref[T]'>(Resolve)</a>"
|
||||
else
|
||||
usr << " <b>Resolved:</b> [T.resolved] <a href='?src=\ref[T];resolve=\ref[T]'>(Unresolve)</a>"
|
||||
@@ -140,25 +135,23 @@
|
||||
|
||||
var/count = 0
|
||||
|
||||
for(var/datum/adminticket/T in admintickets)
|
||||
if(T.resolved == "No" && T.admin == ckey)
|
||||
for(var/I in admintickets)
|
||||
var/datum/adminticket/T = I
|
||||
if(T.resolved == TICKET_UNRESOLVED && T.admin == ckey)
|
||||
count++
|
||||
|
||||
if(count < 1)
|
||||
usr << "<b>You don't have any ACTIVE ahelps!</b>"
|
||||
return
|
||||
|
||||
|
||||
|
||||
for(var/datum/adminticket/T in admintickets)
|
||||
if(T.resolved == "No" && T.admin == ckey)
|
||||
var/ref_mob = "\ref[T.mob]"
|
||||
usr << "<span class='adminnotice'><b><font color=red>#[T.ID] By:</font> <A HREF='?priv_msg=[T.permckey];ahelp_reply=1'>[key_name(T.permuser)]</A></b><b> Ckey:</b> [T.permckey] <b>Name:</b> [T.permuser] <b>Unique ID:</b> [T.uID]</span>"
|
||||
usr << " <b>Controls:</b> (<A HREF='?_src_=holder;adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[ref_mob]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) (<A HREF='?_src_=holder;traitor=[ref_mob]'>TP</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=[ref_mob]'>FLW</A>)"
|
||||
for(var/I in admintickets)
|
||||
var/datum/adminticket/T = I
|
||||
if(T.resolved == TICKET_UNRESOLVED && T.admin == ckey)
|
||||
usr << "<span class='adminnotice'><b><font color=red>#[T.id] By:</font> <A HREF='?priv_msg=[T.permckey];ahelp_reply=1'>[key_name(T.permuser)]</A></b><b> Ckey:</b> [T.permckey] <b>Name:</b> [T.permuser] <b>Unique ID:</b> [T.uID]</span>"
|
||||
usr << " <b>Controls:</b> [ADMIN_QUE(mob)] [ADMIN_PP(mob)] [ADMIN_VV(mob)] [ADMIN_SM(mob)] [ADMIN_FLW(mob)] [ADMIN_TP(mob)]"
|
||||
usr << " <b>Message:</b> [T.msg]"
|
||||
usr << " <b>Handling Admin:</b> [T.admin]"
|
||||
usr << " <b>Replied To:</b> [T.active]/<b><a href='?src=\ref[T];view_logs=\ref[T]'>(LOGS)</a></b>"
|
||||
if(T.resolved == "No")
|
||||
if(T.resolved == TICKET_UNRESOLVED)
|
||||
usr << " <b>Resolved:</b> [T.resolved] <a href='?src=\ref[T];resolve=\ref[T]'>(Resolve)</a>"
|
||||
else
|
||||
usr << " <b>Resolved:</b> [T.resolved] <a href='?src=\ref[T];resolve=\ref[T]'>(Unresolve)</a>"
|
||||
@@ -170,7 +163,8 @@
|
||||
|
||||
var/count = 0
|
||||
|
||||
for(var/datum/adminticket/T in admintickets)
|
||||
for(var/I in admintickets)
|
||||
var/datum/adminticket/T = I
|
||||
if(T.permckey == ckey)
|
||||
count++
|
||||
|
||||
@@ -180,34 +174,37 @@
|
||||
|
||||
usr << "<b>Resolved Ahelps</b>"
|
||||
|
||||
var/rpass = 0
|
||||
var/rpass = FALSE
|
||||
|
||||
for(var/datum/adminticket/T in admintickets)
|
||||
if(T.permckey == ckey && T.resolved == "Yes")
|
||||
rpass = 1
|
||||
usr << "<span class='adminnotice'><b><font color=red>Adminhelp ID: #[T.ID] </font></b></span>"
|
||||
for(var/I in admintickets)
|
||||
var/datum/adminticket/T = I
|
||||
|
||||
if(T.permckey == ckey && T.resolved == TICKET_RESOLVED)
|
||||
rpass = TRUE
|
||||
usr << "<span class='adminnotice'><b><font color=red>Adminhelp ID: #[T.id] </font></b></span>"
|
||||
usr << " <b>Message:</b> [T.msg]"
|
||||
usr << " <b>Handling Admin:</b> [T.admin]"
|
||||
usr << " <b>Replied To:</b> [T.active]/<b><a href='?src=\ref[T];view_logs=\ref[T]'>(LOGS)</a></b>"
|
||||
usr << " <b>Resolved:</b> [T.resolved]"
|
||||
|
||||
if(rpass == 0)
|
||||
if(rpass == FALSE)
|
||||
usr << " None"
|
||||
|
||||
usr << "<b>Unresolved Ahelps</b>"
|
||||
|
||||
var/upass = 0
|
||||
var/upass = FALSE
|
||||
|
||||
for(var/datum/adminticket/T in admintickets)
|
||||
if(T.permckey == ckey && T.resolved == "No")
|
||||
upass = 1
|
||||
usr << "<span class='adminnotice'><b><font color=red>Adminhelp ID: #[T.ID] </font></b></span>"
|
||||
for(var/I in admintickets)
|
||||
var/datum/adminticket/T = I
|
||||
if(T.permckey == ckey && T.resolved == TICKET_UNRESOLVED)
|
||||
upass = TRUE
|
||||
usr << "<span class='adminnotice'><b><font color=red>Adminhelp ID: #[T.id] </font></b></span>"
|
||||
usr << " <b>Message:</b> [T.msg]"
|
||||
usr << " <b>Handling Admin:</b> [T.admin]"
|
||||
usr << " <b>Replied To:</b> [T.active]/<b><a href='?src=\ref[T];view_logs=\ref[T]'>(LOGS)</a></b>"
|
||||
usr << " <b>Resolved:</b> [T.resolved]"
|
||||
|
||||
if(upass == 0)
|
||||
if(upass == FALSE)
|
||||
usr << " None"
|
||||
|
||||
/client/proc/createticket(player, message, uckey, mob)
|
||||
@@ -218,14 +215,15 @@
|
||||
A.permckey = uckey
|
||||
A.permuser = A.user
|
||||
admintickets += A
|
||||
A.logs += "<b>ADMINHELP:</b> [A.permckey]([A.permuser]): [A.msg]"
|
||||
A.ticket_logs += "<b>ADMINHELP:</b> [A.permckey]([A.permuser]): [A.msg]"
|
||||
A.mob = mob
|
||||
|
||||
var/index = 0
|
||||
for(var/datum/adminticket/T in admintickets)
|
||||
for(var/I in admintickets)
|
||||
var/datum/adminticket/T = I
|
||||
index++
|
||||
T.ID = index
|
||||
T.uID = "[T.permckey][T.ID]"
|
||||
T.id = index
|
||||
T.uID = "[T.permckey][T.id]"
|
||||
|
||||
/client/verb/resolveticketself()
|
||||
set category = "Admin"
|
||||
@@ -234,17 +232,16 @@
|
||||
|
||||
var/pass = 0
|
||||
var/datum/adminticket/ticket
|
||||
|
||||
for(var/datum/adminticket/T in admintickets)
|
||||
if(T.permckey == ckey && T.resolved != "Yes")
|
||||
T.resolved = "Yes"
|
||||
ticket = T
|
||||
for(var/I in admintickets)
|
||||
var/datum/adminticket/T = I
|
||||
if(T.permckey == ckey && T.resolved != TICKET_RESOLVED)
|
||||
T.resolved = TICKET_RESOLVED
|
||||
pass = 1
|
||||
|
||||
switch(pass)
|
||||
if(1)
|
||||
src << "<b>You have resolved your current adminhelp.</b>"
|
||||
message_admins("[src] has resolved his adminhelp (#[ticket.ID])")
|
||||
message_admins("[src] has resolved his adminhelp (#[ticket.id])")
|
||||
if(0)
|
||||
src << "<b>Error, you do not have any active adminhelps.</b>"
|
||||
|
||||
@@ -260,21 +257,20 @@
|
||||
var/count = 0
|
||||
|
||||
var/datum/adminticket/ticket
|
||||
|
||||
for(var/datum/adminticket/T in admintickets)
|
||||
if(T.admin == ckey && T.resolved != "Yes")
|
||||
for(var/I in admintickets)
|
||||
var/datum/adminticket/T = I
|
||||
if(T.admin == ckey && T.resolved != TICKET_RESOLVED)
|
||||
count++
|
||||
ticket = T
|
||||
|
||||
if(count >= 1)
|
||||
usr << "<b>Adminhelp #[ticket.ID]([ticket.uID]) resolved.</b>"
|
||||
message_admins("Adminhelp ID: #[ticket.ID]([ticket.uID]) was resolved by [usr.ckey]")
|
||||
ticket.user << "<b>Your adminhelp (#[ticket.ID]) has been resolved by [usr.ckey]</b>"
|
||||
ticket.user << 'sound/machines/twobeep.ogg'
|
||||
ticket.resolved = "Yes"
|
||||
if(count >= 1)
|
||||
usr << "<b>Adminhelp #[T.id]([T.uID]) resolved.</b>"
|
||||
message_admins("Adminhelp ID: #[T.id]([T.uID]) was resolved by [usr.ckey]")
|
||||
ticket.user << "<b>Your adminhelp (#[T.id]) has been resolved by [usr.ckey]</b>"
|
||||
ticket.user << 'sound/machines/twobeep.ogg'
|
||||
ticket.resolved = TICKET_RESOLVED
|
||||
|
||||
if(count < 1)
|
||||
usr << "<b>You are not currently handling any adminhelps!</b>"
|
||||
if(count < 1)
|
||||
usr << "<b>You are not currently handling any adminhelps!</b>"
|
||||
|
||||
/datum/adminticket/proc/viewlogs(NuID, mob/user)
|
||||
var/dat = "<h3>View Logs for ahelp [NuID]</h3>"
|
||||
@@ -292,7 +288,7 @@
|
||||
return
|
||||
|
||||
dat += "<table>"
|
||||
for(var/text in ticket.logs)
|
||||
for(var/text in ticket.ticket_logs)
|
||||
dat += "<tr><td>[text]</td></tr>"
|
||||
dat += "</table>"
|
||||
|
||||
@@ -301,12 +297,19 @@
|
||||
popup.open()
|
||||
|
||||
/datum/adminticket/Topic(href, href_list)
|
||||
if (!istype(src,/datum/admins))
|
||||
src = usr.client.holder
|
||||
if (!istype(src,/datum/admins))
|
||||
usr << "Error: you are not an admin!"
|
||||
return
|
||||
|
||||
if(href_list["view_logs"])
|
||||
var/datum/adminticket/T = locate(href_list["view_logs"])
|
||||
viewlogs(T.uID, usr)
|
||||
if(href_list["resolve"])
|
||||
var/datum/adminticket/T = locate(href_list["resolve"])
|
||||
message_admins("Adminhelp ID: #[T.ID]([T.uID]) was [T.resolved == "Yes" ? "unresolved" : "resolved"] by [usr.ckey]")
|
||||
T.user << "<b>Your adminhelp (#[T.ID]) has been [T.resolved == "Yes" ? "unresolved" : "resolved"] by [usr.ckey]</b>"
|
||||
T.user << 'sound/machines/twobeep.ogg'
|
||||
T.resolved = "[T.resolved == "Yes" ? "No" : "Yes"]"
|
||||
var/datum/adminticket/T = locate(href_list["resolve"]) in admintickets
|
||||
if(T && istype(T))
|
||||
message_admins("Adminhelp ID: #[T.id]([T.uID]) was [T.resolved == "Yes" ? "unresolved" : "resolved"] by [usr.ckey]")
|
||||
T.user << "<b>Your adminhelp (#[T.id]) has been [T.resolved == "Yes" ? "unresolved" : "resolved"] by [usr.ckey]</b>"
|
||||
T.user << 'sound/machines/twobeep.ogg'
|
||||
T.resolved = "[T.resolved == "Yes" ? "No" : "Yes"]"
|
||||
@@ -4,10 +4,10 @@
|
||||
|
||||
var/datum/map_template/template
|
||||
|
||||
var/map = input(usr, "Choose a Map Template to place at your CURRENT LOCATION","Place Map Template") as null|anything in map_templates
|
||||
var/map = input(usr, "Choose a Map Template to place at your CURRENT LOCATION","Place Map Template") as null|anything in SSmapping.map_templates
|
||||
if(!map)
|
||||
return
|
||||
template = map_templates[map]
|
||||
template = SSmapping.map_templates[map]
|
||||
|
||||
var/turf/T = get_turf(mob)
|
||||
if(!T)
|
||||
@@ -38,7 +38,7 @@
|
||||
var/datum/map_template/M = new(map=map, rename="[map]")
|
||||
if(M.preload_size(map))
|
||||
usr << "Map template '[map]' ready to place ([M.width]x[M.height])"
|
||||
map_templates[M.name] = M
|
||||
SSmapping.map_templates[M.name] = M
|
||||
message_admins("<span class='adminnotice'>[key_name_admin(usr)] has uploaded a map template ([map])</span>")
|
||||
else
|
||||
usr << "Map template '[map]' failed to load properly"
|
||||
|
||||
@@ -5,8 +5,7 @@ var/highlander = FALSE
|
||||
return
|
||||
highlander = TRUE
|
||||
|
||||
world << "<span class='userdanger'><i>THERE CAN BE ONLY ONE!!!</i></span>"
|
||||
world << sound('sound/misc/highlander.ogg')
|
||||
send_to_playing_players("<span class='boldannounce'><font size=6>THERE CAN BE ONLY ONE</font></span>")
|
||||
|
||||
for(var/obj/item/weapon/disk/nuclear/N in poi_list)
|
||||
N.relocate() //Gets it out of bags and such
|
||||
@@ -20,6 +19,12 @@ var/highlander = FALSE
|
||||
log_admin("[key_name(usr)] used THERE CAN BE ONLY ONE.")
|
||||
addtimer(CALLBACK(SSshuttle.emergency, /obj/docking_port/mobile/emergency.proc/request, null, 1), 50)
|
||||
|
||||
/client/proc/only_one_delayed()
|
||||
send_to_playing_players("<span class='userdanger'>Bagpipes begin to blare. You feel Scottish pride coming over you.</span>")
|
||||
message_admins("<span class='adminnotice'>[key_name_admin(usr)] used (delayed) THERE CAN BE ONLY ONE!</span>")
|
||||
log_admin("[key_name(usr)] used delayed THERE CAN BE ONLY ONE.")
|
||||
addtimer(CALLBACK(src, .proc/only_one), 420)
|
||||
|
||||
/mob/living/carbon/human/proc/make_scottish()
|
||||
ticker.mode.traitors += mind
|
||||
mind.special_role = "highlander"
|
||||
@@ -70,7 +75,7 @@ var/highlander = FALSE
|
||||
antiwelder.icon_state = "bloodhand_right"
|
||||
put_in_hands(antiwelder)
|
||||
|
||||
src << "<span class='boldannounce'>Your [H1.name] cries out for blood. Join in the slaughter, lest you be claimed yourself...\n\
|
||||
src << "<span class='boldannounce'>Your [H1.name] cries out for blood. Claim the lives of others, and your own will be restored!\n\
|
||||
Activate it in your hand, and it will lead to the nearest target. Attack the nuclear authentication disk with it, and you will store it.</span>"
|
||||
|
||||
/proc/only_me()
|
||||
|
||||
@@ -190,25 +190,6 @@
|
||||
feedback_add_details("admin_verb","MUTE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
/client/proc/cmd_admin_add_random_ai_law()
|
||||
set category = "Fun"
|
||||
set name = "Add Random AI Law"
|
||||
if(!holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
var/confirm = alert(src, "You sure?", "Confirm", "Yes", "No")
|
||||
if(confirm != "Yes")
|
||||
return
|
||||
log_admin("[key_name(src)] has added a random AI law.")
|
||||
message_admins("[key_name_admin(src)] has added a random AI law.")
|
||||
|
||||
var/show_log = alert(src, "Show ion message?", "Message", "Yes", "No")
|
||||
var/announce_ion_laws = (show_log == "Yes" ? 1 : -1)
|
||||
|
||||
new /datum/round_event/ion_storm(0, announce_ion_laws)
|
||||
feedback_add_details("admin_verb","ION") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
//I use this proc for respawn character too. /N
|
||||
/proc/create_xeno(ckey)
|
||||
if(!ckey)
|
||||
@@ -439,8 +420,9 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
var/show_log = alert(src, "Show ion message?", "Message", "Yes", "No")
|
||||
var/announce_ion_laws = (show_log == "Yes" ? 1 : -1)
|
||||
|
||||
var/datum/round_event/ion_storm/ion = new(0, announce_ion_laws, input)
|
||||
ion.start()
|
||||
var/datum/round_event/ion_storm/add_law_only/ion = new()
|
||||
ion.announceEvent = announce_ion_laws
|
||||
ion.ionMessage = input
|
||||
|
||||
feedback_add_details("admin_verb","IONC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
return
|
||||
|
||||
dbcon.Disconnect()
|
||||
failed_db_connections = 0
|
||||
log_admin("[key_name(usr)] has forced the database to disconnect")
|
||||
message_admins("[key_name_admin(usr)] has <b>forced</b> the database to disconnect!")
|
||||
feedback_add_details("admin_verb","FRDB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
@@ -24,8 +23,8 @@
|
||||
message_admins("[key_name_admin(usr)] is attempting to re-established the DB Connection")
|
||||
feedback_add_details("admin_verb","RDB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
failed_db_connections = 0
|
||||
if (!establish_db_connection())
|
||||
dbcon.failed_connections = 0
|
||||
if(!dbcon.Connect())
|
||||
message_admins("Database connection failed: " + dbcon.ErrorMsg())
|
||||
else
|
||||
message_admins("Database connection re-established")
|
||||
Reference in New Issue
Block a user