mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-09 16:14:13 +00:00
Before, when making a link to an admin tool, you done this: <a href='?src=\ref[C.holder];parameter=1;>link</a> Now, we do not need to use a reference to direct it to places like usr or usr.client.holder (or client, but you never needed src for that anyway) usr: <a href='?_src_=usr;parameter=1;>link</a> holder: <a href='?_src_=holder;parameter=1;>link</a> This basically allows us to move a LOT of code outside of loops as we no longer have to create a \ref for every recipient of the message. They can all be sent identical links. A simple example of this would be in pray.dm Although it's most noticeable in the adminhelp code which is vastly simplified. Adminhelp name spotting code thingy...whatever... looks for ckey matches first, then surnames, then forenames. This is to stop it possibly weirding out if there is a station full of "Ed"s of "Sarah"s Prayer code no longer loads a new icon into memory every time a prayer is sent. Use image() not icon()! key_name() no longer needs a reference for it's admin_link argument. message_admin() pretty much doesn't need those extra arguments for finding and replacing %holder_ref%. I've got to go through all the code to check before I remove it though. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@5105 316c924e-a436-60f5-8080-3fe189b3f50e
111 lines
3.7 KiB
Plaintext
111 lines
3.7 KiB
Plaintext
|
|
|
|
//This is a list of words which are ignored by the parser when comparing message contents for names. MUST BE IN LOWER CASE!
|
|
var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","alien","as")
|
|
|
|
/client/verb/adminhelp(msg as text)
|
|
set category = "Admin"
|
|
set name = "Adminhelp"
|
|
|
|
//handle muting and automuting
|
|
if(muted & MUTE_ADMINHELP)
|
|
src << "<font color='red'>Error: Admin-PM: You cannot send adminhelps (Muted).</font>"
|
|
return
|
|
if(src.handle_spam_prevention(msg,MUTE_ADMINHELP))
|
|
return
|
|
|
|
//remove out adminhelp verb temporarily to prevent spamming of admins.
|
|
src.verbs -= /client/verb/adminhelp
|
|
spawn(1200)
|
|
src.verbs += /client/verb/adminhelp // 2 minute cool-down for adminhelps
|
|
|
|
//clean the input msg
|
|
if(!msg) return
|
|
msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN))
|
|
if(!msg) return
|
|
var/original_msg = msg
|
|
|
|
//explode the input msg into a list
|
|
var/list/msglist = text2list(msg, " ")
|
|
|
|
//generate keywords lookup
|
|
var/list/surnames = list()
|
|
var/list/forenames = list()
|
|
var/list/ckeys = list()
|
|
for(var/mob/M in mob_list)
|
|
var/list/indexing = list(M.real_name, M.name)
|
|
if(M.mind) indexing += M.mind.name
|
|
|
|
for(var/string in indexing)
|
|
var/list/L = text2list(string, " ")
|
|
var/surname_found = 0
|
|
//surnames
|
|
for(var/i=L.len, i>=1, i--)
|
|
var/word = ckey(L[i])
|
|
if(word)
|
|
surnames[word] = M
|
|
surname_found = i
|
|
break
|
|
//forenames
|
|
for(var/i=1, i<surname_found, i++)
|
|
var/word = ckey(L[i])
|
|
if(word)
|
|
forenames[word] = M
|
|
//ckeys
|
|
ckeys[M.ckey] = M
|
|
|
|
var/ai_found = 0
|
|
msg = ""
|
|
var/list/mobs_found = list()
|
|
for(var/original_word in msglist)
|
|
var/word = ckey(original_word)
|
|
if(word)
|
|
if(!(word in adminhelp_ignored_words))
|
|
if(word == "ai")
|
|
ai_found = 1
|
|
else
|
|
var/mob/found = ckeys[word]
|
|
if(!found)
|
|
found = surnames[word]
|
|
if(!found)
|
|
found = forenames[word]
|
|
if(found)
|
|
if(!(found in mobs_found))
|
|
mobs_found += found
|
|
if(!ai_found && isAI(found))
|
|
ai_found = 1
|
|
msg += "<b><font color='black'>[original_word] (<A HREF='?_src_=holder;adminmoreinfo=\ref[found]'>?</A>)</font></b> "
|
|
continue
|
|
msg += "[original_word] "
|
|
|
|
if(!mob) return //this doesn't happen
|
|
|
|
var/ref_mob = "\ref[mob]"
|
|
msg = "\blue <b><font color=red>HELP: </font>[key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=holder;adminplayervars=[ref_mob]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) (<A HREF='?_src_=holder;adminplayerobservejump=[ref_mob]'>JMP</A>) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) [ai_found ? " (<A HREF='?_src_=holder;adminchecklaws=[ref_mob]'>CL</A>)" : ""]:</b> [msg]"
|
|
|
|
//send this msg to all admins
|
|
var/admin_number_afk = 0
|
|
for(var/client/X in admins)
|
|
if(X.is_afk())
|
|
admin_number_afk++
|
|
if(X.holder.sound_adminhelp)
|
|
X << 'sound/effects/adminhelp.ogg'
|
|
X << msg
|
|
|
|
//show it to the person adminhelping too
|
|
src << "<font color='blue'>PM to-<b>Admins</b>: [original_msg]</font>"
|
|
|
|
var/admin_number_present = admins.len - admin_number_afk
|
|
log_admin("HELP: [key_name(src)]: [original_msg] - heard by [admin_number_present] non-AFK admins.")
|
|
if(admin_number_present <= 0)
|
|
if(!admin_number_afk)
|
|
send2irc(ckey, "[original_msg] - No admins online")
|
|
else
|
|
send2irc(ckey, "[original_msg] - All admins AFK ([admin_number_afk])")
|
|
feedback_add_details("admin_verb","AH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
|
return
|
|
|
|
proc/send2irc(msg,msg2)
|
|
if(config.useircbot)
|
|
shell("python nudge.py [msg] [msg2]")
|
|
return |