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:
@@ -1,17 +1,15 @@
|
||||
#define MAX_ADMIN_BANS_PER_ADMIN 1
|
||||
|
||||
//Either pass the mob you wish to ban in the 'banned_mob' attribute, or the banckey, banip and bancid variables. If both are passed, the mob takes priority! If a mob is not passed, banckey is the minimum that needs to be passed! banip and bancid are optional.
|
||||
/datum/admins/proc/DB_ban_record(bantype, mob/banned_mob, duration = -1, reason, job = "", rounds = 0, banckey = null, banip = null, bancid = null)
|
||||
/datum/admins/proc/DB_ban_record(bantype, mob/banned_mob, duration = -1, reason, job = "", banckey = null, banip = null, bancid = null)
|
||||
|
||||
if(!check_rights(R_BAN))
|
||||
return
|
||||
|
||||
establish_db_connection()
|
||||
if(!dbcon.IsConnected())
|
||||
if(!dbcon.Connect())
|
||||
src << "<span class='danger'>Failed to establish database connection.</span>"
|
||||
return
|
||||
|
||||
var/serverip = "[world.internet_address]:[world.port]"
|
||||
var/bantype_pass = 0
|
||||
var/bantype_str
|
||||
var/maxadminbancheck //Used to limit the number of active bans of a certein type that each admin can give. Used to protect against abuse or mutiny.
|
||||
@@ -122,7 +120,7 @@
|
||||
usr << "<span class='danger'>You already logged [MAX_ADMIN_BANS_PER_ADMIN] admin ban(s) or more. Do not abuse this function!</span>"
|
||||
return
|
||||
|
||||
var/sql = "INSERT INTO [format_table_name("ban")] (`id`,`bantime`,`serverip`,`bantype`,`reason`,`job`,`duration`,`rounds`,`expiration_time`,`ckey`,`computerid`,`ip`,`a_ckey`,`a_computerid`,`a_ip`,`who`,`adminwho`,`edits`,`unbanned`,`unbanned_datetime`,`unbanned_ckey`,`unbanned_computerid`,`unbanned_ip`) VALUES (null, Now(), '[serverip]', '[bantype_str]', '[reason]', '[job]', [(duration)?"[duration]":"0"], [(rounds)?"[rounds]":"0"], Now() + INTERVAL [(duration>0) ? duration : 0] MINUTE, '[ckey]', '[computerid]', '[ip]', '[a_ckey]', '[a_computerid]', '[a_ip]', '[who]', '[adminwho]', '', null, null, null, null, null)"
|
||||
var/sql = "INSERT INTO [format_table_name("ban")] (`bantime`,`server_ip`,`server_port`,`bantype`,`reason`,`job`,`duration`,`expiration_time`,`ckey`,`computerid`,`ip`,`a_ckey`,`a_computerid`,`a_ip`,`who`,`adminwho`) VALUES (Now(), INET_ATON('[world.internet_address]'), '[world.port]', '[bantype_str]', '[reason]', '[job]', [(duration)?"[duration]":"0"], Now() + INTERVAL [(duration>0) ? duration : 0] MINUTE, '[ckey]', '[computerid]', INET_ATON('[ip]'), '[a_ckey]', '[a_computerid]', INET_ATON('[a_ip]'), '[who]', '[adminwho]')"
|
||||
var/DBQuery/query_insert = dbcon.NewQuery(sql)
|
||||
query_insert.Execute()
|
||||
usr << "<span class='adminnotice'>Ban saved to database.</span>"
|
||||
@@ -183,8 +181,7 @@
|
||||
if(job)
|
||||
sql += " AND job = '[job]'"
|
||||
|
||||
establish_db_connection()
|
||||
if(!dbcon.IsConnected())
|
||||
if(!dbcon.Connect())
|
||||
return
|
||||
|
||||
var/ban_id
|
||||
@@ -280,8 +277,7 @@
|
||||
|
||||
var/sql = "SELECT ckey FROM [format_table_name("ban")] WHERE id = [id]"
|
||||
|
||||
establish_db_connection()
|
||||
if(!dbcon.IsConnected())
|
||||
if(!dbcon.Connect())
|
||||
return
|
||||
|
||||
var/ban_number = 0 //failsafe
|
||||
@@ -308,7 +304,7 @@
|
||||
var/unban_computerid = src.owner:computer_id
|
||||
var/unban_ip = src.owner:address
|
||||
|
||||
var/sql_update = "UPDATE [format_table_name("ban")] SET unbanned = 1, unbanned_datetime = Now(), unbanned_ckey = '[unban_ckey]', unbanned_computerid = '[unban_computerid]', unbanned_ip = '[unban_ip]' WHERE id = [id]"
|
||||
var/sql_update = "UPDATE [format_table_name("ban")] SET unbanned = 1, unbanned_datetime = Now(), unbanned_ckey = '[unban_ckey]', unbanned_computerid = '[unban_computerid]', unbanned_ip = INET_ATON('[unban_ip]') WHERE id = [id]"
|
||||
message_admins("[key_name_admin(usr)] has lifted [pckey]'s ban.",1)
|
||||
|
||||
var/DBQuery/query_update = dbcon.NewQuery(sql_update)
|
||||
@@ -333,8 +329,7 @@
|
||||
if(!check_rights(R_BAN))
|
||||
return
|
||||
|
||||
establish_db_connection()
|
||||
if(!dbcon.IsConnected())
|
||||
if(!dbcon.Connect())
|
||||
usr << "<span class='danger'>Failed to establish database connection.</span>"
|
||||
return
|
||||
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
|
||||
var/ckeytext = ckey(key)
|
||||
|
||||
if(!establish_db_connection())
|
||||
if(!dbcon.Connect())
|
||||
log_world("Ban database connection failure. Key [ckeytext] not checked")
|
||||
diary << "Ban database connection failure. Key [ckeytext] not checked"
|
||||
return
|
||||
@@ -69,25 +69,23 @@
|
||||
var/ipquery = ""
|
||||
var/cidquery = ""
|
||||
if(address)
|
||||
ipquery = " OR ip = '[address]' "
|
||||
ipquery = " OR ip = INET_ATON('[address]') "
|
||||
|
||||
if(computer_id)
|
||||
cidquery = " OR computerid = '[computer_id]' "
|
||||
|
||||
var/DBQuery/query = dbcon.NewQuery("SELECT ckey, ip, computerid, a_ckey, reason, expiration_time, duration, bantime, bantype FROM [format_table_name("ban")] WHERE (ckey = '[ckeytext]' [ipquery] [cidquery]) AND (bantype = 'PERMABAN' OR bantype = 'ADMIN_PERMABAN' OR ((bantype = 'TEMPBAN' OR bantype = 'ADMIN_TEMPBAN') AND expiration_time > Now())) AND isnull(unbanned)")
|
||||
var/DBQuery/query = dbcon.NewQuery("SELECT ckey, a_ckey, reason, expiration_time, duration, bantime, bantype FROM [format_table_name("ban")] WHERE (ckey = '[ckeytext]' [ipquery] [cidquery]) AND (bantype = 'PERMABAN' OR bantype = 'ADMIN_PERMABAN' OR ((bantype = 'TEMPBAN' OR bantype = 'ADMIN_TEMPBAN') AND expiration_time > Now())) AND isnull(unbanned)")
|
||||
|
||||
query.Execute()
|
||||
|
||||
while(query.NextRow())
|
||||
var/pckey = query.item[1]
|
||||
//var/pip = query.item[2]
|
||||
//var/pcid = query.item[3]
|
||||
var/ackey = query.item[4]
|
||||
var/reason = query.item[5]
|
||||
var/expiration = query.item[6]
|
||||
var/duration = query.item[7]
|
||||
var/bantime = query.item[8]
|
||||
var/bantype = query.item[9]
|
||||
var/ackey = query.item[2]
|
||||
var/reason = query.item[3]
|
||||
var/expiration = query.item[4]
|
||||
var/duration = query.item[5]
|
||||
var/bantime = query.item[6]
|
||||
var/bantype = query.item[7]
|
||||
if (bantype == "ADMIN_PERMABAN" || bantype == "ADMIN_TEMPBAN")
|
||||
//admin bans MUST match on ckey to prevent cid-spoofing attacks
|
||||
// as well as dynamic ip abuse
|
||||
|
||||
@@ -134,11 +134,11 @@ var/savefile/Banlist
|
||||
if (!Banlist.dir.Remove(foldername)) return 0
|
||||
|
||||
if(!usr)
|
||||
log_admin("Ban Expired: [key]")
|
||||
log_admin_private("Ban Expired: [key]")
|
||||
message_admins("Ban Expired: [key]")
|
||||
else
|
||||
ban_unban_log_save("[key_name(usr)] unbanned [key]")
|
||||
log_admin("[key_name(usr)] unbanned [key]")
|
||||
log_admin_private("[key_name(usr)] unbanned [key]")
|
||||
message_admins("[key_name_admin(usr)] unbanned: [key]")
|
||||
feedback_inc("ban_unban",1)
|
||||
usr.client.holder.DB_ban_unban( ckey(key), BANTYPE_ANY_FULLBAN)
|
||||
|
||||
@@ -572,11 +572,11 @@ var/global/BSACooldown = 0
|
||||
set desc="Delay the game start"
|
||||
set name="Delay pre-game"
|
||||
|
||||
var/newtime = input("Set a new time in seconds. Set -1 for indefinite delay.","Set Delay",round(ticker.timeLeft/10)) as num|null
|
||||
var/newtime = input("Set a new time in seconds. Set -1 for indefinite delay.","Set Delay",round(ticker.GetTimeLeft()/10)) as num|null
|
||||
if(ticker.current_state > GAME_STATE_PREGAME)
|
||||
return alert("Too late... The game has already started!")
|
||||
if(newtime)
|
||||
ticker.timeLeft = newtime * 10
|
||||
ticker.SetTimeLeft(newtime * 10)
|
||||
if(newtime < 0)
|
||||
world << "<b>The game start has been delayed.</b>"
|
||||
log_admin("[key_name(usr)] delayed the round start.")
|
||||
|
||||
@@ -127,8 +127,7 @@ var/list/admin_ranks = list() //list of all admin_rank datums
|
||||
|
||||
previous_rights = R.rights
|
||||
else
|
||||
establish_db_connection()
|
||||
if(!dbcon.IsConnected())
|
||||
if(!dbcon.Connect())
|
||||
log_world("Failed to connect to database in load_admin_ranks(). Reverting to legacy system.")
|
||||
diary << "Failed to connect to database in load_admin_ranks(). Reverting to legacy system."
|
||||
config.admin_legacy_system = 1
|
||||
@@ -202,8 +201,7 @@ var/list/admin_ranks = list() //list of all admin_rank datums
|
||||
world.SetConfig("APP/admin", ckey, "role=admin")
|
||||
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())
|
||||
if(!dbcon.Connect())
|
||||
log_world("Failed to connect to database in load_admins(). Reverting to legacy system.")
|
||||
diary << "Failed to connect to database in load_admins(). Reverting to legacy system."
|
||||
config.admin_legacy_system = 1
|
||||
@@ -375,8 +373,7 @@ var/list/admin_ranks = list() //list of all admin_rank datums
|
||||
edit_admin_permissions()
|
||||
|
||||
/datum/admins/proc/updateranktodb(ckey,newrank)
|
||||
establish_db_connection()
|
||||
if (!dbcon.IsConnected())
|
||||
if(!dbcon.Connect())
|
||||
return
|
||||
var/sql_ckey = sanitizeSQL(ckey)
|
||||
var/sql_admin_rank = sanitizeSQL(newrank)
|
||||
|
||||
@@ -94,7 +94,6 @@ var/list/admin_verbs_fun = list(
|
||||
/client/proc/one_click_antag,
|
||||
/client/proc/send_space_ninja,
|
||||
/client/proc/cmd_admin_add_freeform_ai_law,
|
||||
/client/proc/cmd_admin_add_random_ai_law,
|
||||
/client/proc/object_say,
|
||||
/client/proc/toggle_random_events,
|
||||
/client/proc/set_ooc,
|
||||
@@ -216,12 +215,10 @@ var/list/admin_verbs_hideable = list(
|
||||
/client/proc/cinematic,
|
||||
/client/proc/send_space_ninja,
|
||||
/client/proc/cmd_admin_add_freeform_ai_law,
|
||||
/client/proc/cmd_admin_add_random_ai_law,
|
||||
/client/proc/cmd_admin_create_centcom_report,
|
||||
/client/proc/cmd_change_command_name,
|
||||
/client/proc/object_say,
|
||||
/client/proc/toggle_random_events,
|
||||
/client/proc/cmd_admin_add_random_ai_law,
|
||||
/datum/admins/proc/startnow,
|
||||
/datum/admins/proc/restart,
|
||||
/datum/admins/proc/delay,
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
return 0
|
||||
|
||||
if(!M.client) //no cache. fallback to a DBQuery
|
||||
var/DBQuery/query = dbcon.NewQuery("SELECT reason FROM [format_table_name("ban")] WHERE ckey = '[sanitizeSQL(M.ckey)]' AND job = '[sanitizeSQL(rank)]' AND (bantype = 'JOB_PERMABAN' OR (bantype = 'JOB_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)")
|
||||
var/DBQuery/query = dbcon.NewQuery("SELECT reason FROM [format_table_name("ban")] WHERE ckey = '[sanitizeSQL(M.ckey)]' AND (bantype = 'JOB_PERMABAN' OR (bantype = 'JOB_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned) AND job = '[sanitizeSQL(rank)]'")
|
||||
if(!query.Execute())
|
||||
log_game("SQL ERROR obtaining jobbans. Error : \[[query.ErrorMsg()]\]\n")
|
||||
return
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
if(!question)
|
||||
return
|
||||
question = sanitizeSQL(question)
|
||||
var/DBQuery/query_polladd_question = dbcon.NewQuery("INSERT INTO [format_table_name("poll_question")] (polltype, starttime, endtime, question, adminonly, multiplechoiceoptions, createdby_ckey, createdby_ip, dontshow) VALUES ('[polltype]', '[starttime]', '[endtime]', '[question]', '[adminonly]', '[choice_amount]', '[sql_ckey]', '[address]', '[dontshow]')")
|
||||
var/DBQuery/query_polladd_question = dbcon.NewQuery("INSERT INTO [format_table_name("poll_question")] (polltype, starttime, endtime, question, adminonly, multiplechoiceoptions, createdby_ckey, createdby_ip, dontshow) VALUES ('[polltype]', '[starttime]', '[endtime]', '[question]', '[adminonly]', '[choice_amount]', '[sql_ckey]', INET_ATON('[address]'), '[dontshow]')")
|
||||
if(!query_polladd_question.Execute())
|
||||
var/err = query_polladd_question.ErrorMsg()
|
||||
log_game("SQL ERROR adding new poll question to table. Error : \[[err]\]\n")
|
||||
@@ -108,7 +108,7 @@
|
||||
message_admins("[key_name_admin(usr)] has created a new server poll. Poll type: [polltype] - Admin Only: [adminonly ? "Yes" : "No"]<br>Question: [question]")
|
||||
return
|
||||
var/pollid = 0
|
||||
var/DBQuery/query_get_id = dbcon.NewQuery("SELECT id FROM [format_table_name("poll_question")] WHERE question = '[question]' AND starttime = '[starttime]' AND endtime = '[endtime]' AND createdby_ckey = '[sql_ckey]' AND createdby_ip = '[address]'")
|
||||
var/DBQuery/query_get_id = dbcon.NewQuery("SELECT id FROM [format_table_name("poll_question")] WHERE question = '[question]' AND starttime = '[starttime]' AND endtime = '[endtime]' AND createdby_ckey = '[sql_ckey]' AND createdby_ip = INET_ATON('[address]')")
|
||||
if(!query_get_id.Execute())
|
||||
var/err = query_get_id.ErrorMsg()
|
||||
log_game("SQL ERROR obtaining id from poll_question table. Error : \[[err]\]\n")
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
cachedintel.cache = TRUE
|
||||
return cachedintel
|
||||
|
||||
if (establish_db_connection())
|
||||
if(dbcon.Connect())
|
||||
var/DBQuery/query = dbcon.NewQuery({"
|
||||
SELECT date, intel, TIMESTAMPDIFF(MINUTE,date,NOW())
|
||||
FROM [format_table_name("ipintel")]
|
||||
@@ -61,7 +61,7 @@
|
||||
res.intel = ip_intel_query(ip)
|
||||
if (updatecache && res.intel >= 0)
|
||||
SSipintel.cache[ip] = res
|
||||
if (establish_db_connection())
|
||||
if(dbcon.Connect())
|
||||
var/DBQuery/query = dbcon.NewQuery("INSERT INTO [format_table_name("ipintel")] (ip, intel) VALUES (INET_ATON('[ip]'), [res.intel]) ON DUPLICATE KEY UPDATE intel = VALUES(intel), date = NOW()")
|
||||
query.Execute()
|
||||
return
|
||||
|
||||
@@ -60,9 +60,7 @@
|
||||
if (!check_rights(R_PERMISSIONS))
|
||||
return
|
||||
|
||||
establish_db_connection()
|
||||
|
||||
if(!dbcon.IsConnected())
|
||||
if(!dbcon.Connect())
|
||||
usr << "<span class='danger'>Failed to establish database connection.</span>"
|
||||
return
|
||||
|
||||
@@ -109,8 +107,7 @@
|
||||
if(check_rights(R_PERMISSIONS))
|
||||
return
|
||||
|
||||
establish_db_connection()
|
||||
if(!dbcon.IsConnected())
|
||||
if(!dbcon.Connect())
|
||||
usr << "<span class='danger'>Failed to establish database connection.</span>"
|
||||
return
|
||||
|
||||
|
||||
@@ -348,12 +348,16 @@
|
||||
var/living_players_antagonist = 0
|
||||
var/brains = 0
|
||||
var/other_players = 0
|
||||
var/living_skipped = 0
|
||||
for(var/mob/M in mob_list)
|
||||
if(M.ckey)
|
||||
if(isnewplayer(M))
|
||||
lobby_players++
|
||||
continue
|
||||
else if(M.stat != DEAD && M.mind && !isbrain(M))
|
||||
if(M.z == ZLEVEL_CENTCOM)
|
||||
living_skipped++
|
||||
continue
|
||||
living_players++
|
||||
if(M.mind.special_role)
|
||||
living_players_antagonist++
|
||||
@@ -369,6 +373,7 @@
|
||||
other_players++
|
||||
dat += "<BR><b><font color='blue' size='3'>Players:|[connected_players - lobby_players] ingame|[connected_players] connected|[lobby_players] lobby|</font></b>"
|
||||
dat += "<BR><b><font color='green'>Living Players:|[living_players_connected] active|[living_players - living_players_connected] disconnected|[living_players_antagonist] antagonists|</font></b>"
|
||||
dat += "<BR><b><font color='#bf42f4'>SKIPPED \[On centcom Z-level\]: [living_skipped] living players|</font></b>"
|
||||
dat += "<BR><b><font color='red'>Dead/Observing players:|[observers_connected] active|[observers - observers_connected] disconnected|[brains] brains|</font></b>"
|
||||
if(other_players)
|
||||
dat += "<BR><span class='userdanger'>[other_players] players in invalid state or the statistics code is bugged!</span>"
|
||||
|
||||
@@ -10,8 +10,6 @@
|
||||
<A href='?src=\ref[src];secrets=admin_log'>Admin Log</A><BR>
|
||||
<A href='?src=\ref[src];secrets=show_admins'>Show Admin List</A><BR>
|
||||
<A href='?src=\ref[src];secrets=mentor_log'>Mentor Log</A><BR>
|
||||
|
||||
<A href='?src=\ref[src];secrets=show_current_watchlist'>Show online players in the watchlist</A><BR>
|
||||
<BR>
|
||||
"}
|
||||
|
||||
@@ -59,6 +57,7 @@
|
||||
<A href='?src=\ref[src];secrets=magic'>Summon Magic</A><BR>
|
||||
<A href='?src=\ref[src];secrets=events'>Summon Events (Toggle)</A><BR>
|
||||
<A href='?src=\ref[src];secrets=onlyone'>There can only be one!</A><BR>
|
||||
<A href='?src=\ref[src];secrets=delayed_onlyone'>There can only be one! (40-second delay)</A><BR>
|
||||
<A href='?src=\ref[src];secrets=onlyme'>There can only be me!</A><BR>
|
||||
<A href='?src=\ref[src];secrets=retardify'>Make all players retarded</A><BR>
|
||||
<A href='?src=\ref[src];secrets=eagles'>Egalitarian Station Mode</A><BR>
|
||||
@@ -102,14 +101,6 @@
|
||||
dat += "No-one has done anything this round!"
|
||||
usr << browse(dat, "window=admin_log")
|
||||
|
||||
if("mentor_log")
|
||||
var/dat = "<B>Mentor Log<HR></B>"
|
||||
for(var/l in mentor_log)
|
||||
dat += "<li>[l]</li>"
|
||||
if(!mentor_log.len)
|
||||
dat += "No mentors have done anything this round!"
|
||||
usr << browse(dat, "window=mentor_log")
|
||||
|
||||
if("list_job_debug")
|
||||
var/dat = "<B>Job Debug info.</B><HR>"
|
||||
if(SSjob)
|
||||
@@ -540,8 +531,17 @@
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","OO")
|
||||
usr.client.only_one()
|
||||
send_to_playing_players('sound/misc/highlander.ogg')
|
||||
// message_admins("[key_name_admin(usr)] has triggered a battle to the death (only one)")
|
||||
|
||||
if("delayed_onlyone")
|
||||
if(!check_rights(R_FUN))
|
||||
return
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","OO")
|
||||
usr.client.only_one_delayed()
|
||||
send_to_playing_players('sound/misc/highlander_delayed.ogg')
|
||||
|
||||
if("onlyme")
|
||||
if(!check_rights(R_FUN))
|
||||
return
|
||||
@@ -598,6 +598,14 @@
|
||||
purrbation.")
|
||||
log_admin("[key_name(usr)] has removed everyone from purrbation.")
|
||||
|
||||
if("mentor_log")
|
||||
var/dat = "<B>Mentor Log<HR></B>"
|
||||
for(var/l in mentor_log)
|
||||
dat += "<li>[l]</li>"
|
||||
if(!mentor_log.len)
|
||||
dat += "No mentors have done anything this round!"
|
||||
usr << browse(dat, "window=mentor_log")
|
||||
|
||||
if(E)
|
||||
E.processing = 0
|
||||
if(E.announceWhen>0)
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
log_game("SQL ERROR creating new [type] in messages table. Error : \[[err]\]\n")
|
||||
return
|
||||
if(logged)
|
||||
log_admin("[key_name(usr)] has created a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_ckey]" : ""]: [text]")
|
||||
log_admin_private("[key_name(usr)] has created a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_ckey]" : ""]: [text]")
|
||||
message_admins("[key_name_admin(usr)] has created a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_ckey]" : ""]:<br>[text]")
|
||||
if(browse)
|
||||
browse_messages("[type]")
|
||||
@@ -84,7 +84,7 @@
|
||||
log_game("SQL ERROR deleting [type] from messages table. Error : \[[err]\]\n")
|
||||
return
|
||||
if(logged)
|
||||
log_admin("[key_name(usr)] has deleted a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for" : " made by"] [target_ckey]: [text]")
|
||||
log_admin_private("[key_name(usr)] has deleted a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for" : " made by"] [target_ckey]: [text]")
|
||||
message_admins("[key_name_admin(usr)] has deleted a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for" : " made by"] [target_ckey]:<br>[text]")
|
||||
if(browse)
|
||||
browse_messages("[type]")
|
||||
@@ -119,7 +119,7 @@
|
||||
var/err = query_edit_message.ErrorMsg()
|
||||
log_game("SQL ERROR editing messages table. Error : \[[err]\]\n")
|
||||
return
|
||||
log_admin("[key_name(usr)] has edited a [type] [(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_ckey]" : ""] made by [admin_ckey] from [old_text] to [new_text]")
|
||||
log_admin_private("[key_name(usr)] has edited a [type] [(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_ckey]" : ""] made by [admin_ckey] from [old_text] to [new_text]")
|
||||
message_admins("[key_name_admin(usr)] has edited a [type] [(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_ckey]" : ""] made by [admin_ckey] from<br>[old_text]<br>to<br>[new_text]")
|
||||
if(browse)
|
||||
browse_messages("[type]")
|
||||
@@ -150,7 +150,7 @@
|
||||
var/err = query_message_secret.ErrorMsg()
|
||||
log_game("SQL ERROR toggling message secrecy. Error : \[[err]\]\n")
|
||||
return
|
||||
log_admin("[key_name(usr)] has toggled [target_ckey]'s [type] made by [admin_ckey] to [secret ? "not secret" : "secret"]")
|
||||
log_admin_private("[key_name(usr)] has toggled [target_ckey]'s [type] made by [admin_ckey] to [secret ? "not secret" : "secret"]")
|
||||
message_admins("[key_name_admin(usr)] has toggled [target_ckey]'s [type] made by [admin_ckey] to [secret ? "not secret" : "secret"]")
|
||||
browse_messages(target_ckey = target_ckey)
|
||||
|
||||
@@ -255,9 +255,9 @@
|
||||
notedata += data
|
||||
output += "<h2><center>[target_ckey]</center></h2><center>"
|
||||
if(!linkless)
|
||||
output += "<a href='?_src_=holder;addmessage=[target_ckey]'>\[Add message\]</a>"
|
||||
output += "<a href='?_src_=holder;addnote=[target_ckey]'>\[Add note\]</a>"
|
||||
output += " <a href='?_src_=holder;addmessage=[target_ckey]'>\[Add message\]</a>"
|
||||
output += " <a href='?_src_=holder;addwatch=[target_ckey]'>\[Add to watchlist\]</a>"
|
||||
output += " <a href='?_src_=holder;addnote=[target_ckey]'>\[Add note\]</a>"
|
||||
output += " <a href='?_src_=holder;showmessageckey=[target_ckey]'>\[Refresh page\]</a></center>"
|
||||
else
|
||||
output += " <a href='?_src_=holder;showmessageckeylinkless=[target_ckey]'>\[Refresh page\]</a></center>"
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
|
||||
world.SetConfig("ban",ckey,list2stickyban(ban))
|
||||
|
||||
log_admin("[key_name(usr)] has stickybanned [ckey].\nReason: [ban["message"]]")
|
||||
log_admin_private("[key_name(usr)] has stickybanned [ckey].\nReason: [ban["message"]]")
|
||||
message_admins("<span class='adminnotice'>[key_name_admin(usr)] has stickybanned [ckey].\nReason: [ban["message"]]</span>")
|
||||
|
||||
if ("remove")
|
||||
@@ -52,7 +52,7 @@
|
||||
return
|
||||
world.SetConfig("ban",ckey, null)
|
||||
|
||||
log_admin("[key_name(usr)] removed [ckey]'s stickyban")
|
||||
log_admin_private("[key_name(usr)] removed [ckey]'s stickyban")
|
||||
message_admins("<span class='adminnotice'>[key_name_admin(usr)] removed [ckey]'s stickyban</span>")
|
||||
|
||||
if ("remove_alt")
|
||||
@@ -100,7 +100,7 @@
|
||||
|
||||
world.SetConfig("ban",ckey,list2stickyban(ban))
|
||||
|
||||
log_admin("[key_name(usr)] has disassociated [alt] from [ckey]'s sticky ban")
|
||||
log_admin_private("[key_name(usr)] has disassociated [alt] from [ckey]'s sticky ban")
|
||||
message_admins("<span class='adminnotice'>[key_name_admin(usr)] has disassociated [alt] from [ckey]'s sticky ban</span>")
|
||||
|
||||
if ("edit")
|
||||
@@ -124,7 +124,7 @@
|
||||
|
||||
world.SetConfig("ban",ckey,list2stickyban(ban))
|
||||
|
||||
log_admin("[key_name(usr)] has edited [ckey]'s sticky ban reason from [oldreason] to [reason]")
|
||||
log_admin_private("[key_name(usr)] has edited [ckey]'s sticky ban reason from [oldreason] to [reason]")
|
||||
message_admins("<span class='adminnotice'>[key_name_admin(usr)] has edited [ckey]'s sticky ban reason from [oldreason] to [reason]</span>")
|
||||
|
||||
if ("revert")
|
||||
@@ -142,7 +142,7 @@
|
||||
usr << "<span class='adminnotice'>Error: No cached sticky ban for [ckey] found!"
|
||||
world.SetConfig("ban",ckey,null)
|
||||
|
||||
log_admin("[key_name(usr)] has reverted [ckey]'s sticky ban to it's state at round start.")
|
||||
log_admin_private("[key_name(usr)] has reverted [ckey]'s sticky ban to it's state at round start.")
|
||||
message_admins("<span class='adminnotice'>[key_name_admin(usr)] has reverted [ckey]'s sticky ban to it's state at round start.</span>")
|
||||
//revert is mostly used when shit goes rouge, so we have to set it to null
|
||||
// and wait a byond tick before assigning it to ensure byond clears its shit.
|
||||
|
||||
+55
-55
@@ -21,7 +21,7 @@
|
||||
C << "Please try to be calm, clear, and descriptive in admin helps, do not assume the admin has seen any related events, and clearly state the names of anybody you are reporting."
|
||||
|
||||
message_admins("[key_name_admin(usr)] Rejected [C.key]'s admin help. [C.key]'s Adminhelp verb has been returned to them.")
|
||||
log_admin("[key_name(usr)] Rejected [C.key]'s admin help.")
|
||||
log_admin_private("[key_name(usr)] Rejected [C.key]'s admin help.")
|
||||
|
||||
else if(href_list["icissue"])
|
||||
var/client/C = locate(href_list["icissue"]) in clients
|
||||
@@ -35,7 +35,7 @@
|
||||
C << msg
|
||||
|
||||
message_admins("[key_name_admin(usr)] marked [C.key]'s admin help as an IC issue.")
|
||||
log_admin("[key_name(usr)] marked [C.key]'s admin help as an IC issue.")
|
||||
log_admin_private("[key_name(usr)] marked [C.key]'s admin help as an IC issue.")
|
||||
|
||||
else if(href_list["stickyban"])
|
||||
stickyban(href_list["stickyban"],href_list)
|
||||
@@ -249,55 +249,11 @@
|
||||
else
|
||||
message_admins("Ban process: A mob matching [playermob.ckey] was found at location [playermob.x], [playermob.y], [playermob.z]. Custom ip and computer id fields replaced with the ip and computer id from the located mob.")
|
||||
|
||||
if(!DB_ban_record(bantype, playermob, banduration, banreason, banjob, null, banckey, banip, bancid ))
|
||||
if(!DB_ban_record(bantype, playermob, banduration, banreason, banjob, banckey, banip, bancid ))
|
||||
usr << "<span class='danger'>Failed to apply ban.</span>"
|
||||
return
|
||||
create_message("note", banckey, null, banreason, null, null, 0, 0)
|
||||
|
||||
else if(href_list["mentor"])
|
||||
if(!check_rights(R_ADMIN)) return
|
||||
|
||||
var/mob/M = locate(href_list["mentor"])
|
||||
if(!ismob(M))
|
||||
usr << "this can be only used on instances of type /mob"
|
||||
return
|
||||
|
||||
if(!M.client)
|
||||
usr << "no client"
|
||||
return
|
||||
|
||||
log_admin("[key_name(usr)] has granted [key_name(M)] mentor access")
|
||||
message_admins("\blue [key_name_admin(usr)] has granted [key_name_admin(M)] mentor access", 1)
|
||||
|
||||
var/DBQuery/query = dbcon.NewQuery("INSERT INTO [format_table_name("mentor")] (ckey) VALUES ('[M.client.ckey]')")
|
||||
if(!query.Execute())
|
||||
var/err = query.ErrorMsg()
|
||||
log_game("SQL ERROR during adding new mentor. Error : \[[err]\]\n")
|
||||
load_mentors()
|
||||
M.verbs += /client/proc/cmd_mentor_say
|
||||
M.verbs += /client/proc/show_mentor_memo
|
||||
M << "\blue You've been granted mentor access! Help people who send mentor-pms"
|
||||
|
||||
else if(href_list["removementor"])
|
||||
if(!check_rights(R_ADMIN)) return
|
||||
|
||||
var/mob/living/carbon/human/M = locate(href_list["removementor"])
|
||||
if(!ismob(M))
|
||||
usr << "this can be only used on instances of type /mob"
|
||||
return
|
||||
|
||||
log_admin("[key_name(usr)] has removed mentor access from [key_name(M)]")
|
||||
message_admins("\blue [key_name_admin(usr)] has removed mentor access from [key_name_admin(M)]", 1)
|
||||
|
||||
var/DBQuery/query = dbcon.NewQuery("DELETE FROM [format_table_name("mentor")] WHERE ckey = '[M.client.ckey]'")
|
||||
if(!query.Execute())
|
||||
var/err = query.ErrorMsg()
|
||||
log_game("SQL ERROR during removing mentor. Error : \[[err]\]\n")
|
||||
load_mentors()
|
||||
M << "\blue Your mentor access has been removed"
|
||||
M.verbs -= /client/proc/cmd_mentor_say
|
||||
M.verbs -= /client/proc/show_mentor_memo
|
||||
|
||||
else if(href_list["editrights"])
|
||||
edit_rights_topic(href_list)
|
||||
|
||||
@@ -550,7 +506,7 @@
|
||||
if(!reason)
|
||||
return
|
||||
|
||||
log_admin("[key_name(usr)] edited [banned_key]'s ban. Reason: [reason] Duration: [duration]")
|
||||
log_admin_private("[key_name(usr)] edited [banned_key]'s ban. Reason: [reason] Duration: [duration]")
|
||||
ban_unban_log_save("[key_name(usr)] edited [banned_key]'s ban. Reason: [reason] Duration: [duration]")
|
||||
message_admins("<span class='adminnotice'>[key_name_admin(usr)] edited [banned_key]'s ban. Reason: [reason] Duration: [duration]</span>")
|
||||
Banlist.cd = "/base/[banfolder]"
|
||||
@@ -580,7 +536,7 @@
|
||||
switch(alert("Remove appearance ban?","Please Confirm","Yes","No"))
|
||||
if("Yes")
|
||||
ban_unban_log_save("[key_name(usr)] removed [key_name(M)]'s appearance ban.")
|
||||
log_admin("[key_name(usr)] removed [key_name(M)]'s appearance ban.")
|
||||
log_admin_private("[key_name(usr)] removed [key_name(M)]'s appearance ban.")
|
||||
feedback_inc("ban_appearance_unban", 1)
|
||||
DB_ban_unban(M.ckey, BANTYPE_ANY_JOB, "appearance")
|
||||
if(M.client)
|
||||
@@ -599,7 +555,7 @@
|
||||
if(M.client)
|
||||
jobban_buildcache(M.client)
|
||||
ban_unban_log_save("[key_name(usr)] appearance banned [key_name(M)]. reason: [reason]")
|
||||
log_admin("[key_name(usr)] appearance banned [key_name(M)]. \nReason: [reason]")
|
||||
log_admin_private("[key_name(usr)] appearance banned [key_name(M)]. \nReason: [reason]")
|
||||
feedback_inc("ban_appearance",1)
|
||||
create_message("note", M.ckey, null, "Appearance banned - [reason]", null, null, 0, 0)
|
||||
message_admins("<span class='adminnotice'>[key_name_admin(usr)] appearance banned [key_name_admin(M)].</span>")
|
||||
@@ -984,7 +940,7 @@
|
||||
if(M.client)
|
||||
jobban_buildcache(M.client)
|
||||
ban_unban_log_save("[key_name(usr)] temp-jobbanned [key_name(M)] from [job] for [mins] minutes. reason: [reason]")
|
||||
log_admin("[key_name(usr)] temp-jobbanned [key_name(M)] from [job] for [mins] minutes.")
|
||||
log_admin_private("[key_name(usr)] temp-jobbanned [key_name(M)] from [job] for [mins] minutes.")
|
||||
feedback_inc("ban_job_tmp",1)
|
||||
feedback_add_details("ban_job_tmp","- [job]")
|
||||
if(!msg)
|
||||
@@ -1009,7 +965,7 @@
|
||||
if(M.client)
|
||||
jobban_buildcache(M.client)
|
||||
ban_unban_log_save("[key_name(usr)] perma-jobbanned [key_name(M)] from [job]. reason: [reason]")
|
||||
log_admin("[key_name(usr)] perma-banned [key_name(M)] from [job]")
|
||||
log_admin_private("[key_name(usr)] perma-banned [key_name(M)] from [job]")
|
||||
feedback_inc("ban_job",1)
|
||||
feedback_add_details("ban_job","- [job]")
|
||||
if(!msg)
|
||||
@@ -1037,7 +993,7 @@
|
||||
switch(alert("Job: '[job]' Reason: '[reason]' Un-jobban?","Please Confirm","Yes","No"))
|
||||
if("Yes")
|
||||
ban_unban_log_save("[key_name(usr)] unjobbanned [key_name(M)] from [job]")
|
||||
log_admin("[key_name(usr)] unbanned [key_name(M)] from [job]")
|
||||
log_admin_private("[key_name(usr)] unbanned [key_name(M)] from [job]")
|
||||
DB_ban_unban(M.ckey, BANTYPE_ANY_JOB, job)
|
||||
if(M.client)
|
||||
jobban_buildcache(M.client)
|
||||
@@ -1185,7 +1141,7 @@
|
||||
M << "<span class='danger'>To try to resolve this matter head to [config.banappeals]</span>"
|
||||
else
|
||||
M << "<span class='danger'>No ban appeals URL has been set.</span>"
|
||||
log_admin("[key_name(usr)] has banned [M.ckey].\nReason: [key_name(M)]\nThis will be removed in [mins] minutes.")
|
||||
log_admin_private("[key_name(usr)] has banned [M.ckey].\nReason: [key_name(M)]\nThis will be removed in [mins] minutes.")
|
||||
message_admins("<span class='adminnotice'>[key_name_admin(usr)] has banned [key_name_admin(M)].\nReason: [reason]\nThis will be removed in [mins] minutes.</span>")
|
||||
|
||||
qdel(M.client)
|
||||
@@ -1210,7 +1166,7 @@
|
||||
usr << "<span class='danger'>Failed to apply ban.</span>"
|
||||
return
|
||||
ban_unban_log_save("[key_name(usr)] has permabanned [key_name(M)]. - Reason: [reason] - This is a permanent ban.")
|
||||
log_admin("[key_name(usr)] has banned [key_name_admin(M)].\nReason: [reason]\nThis is a permanent ban.")
|
||||
log_admin_private("[key_name(usr)] has banned [key_name_admin(M)].\nReason: [reason]\nThis is a permanent ban.")
|
||||
message_admins("<span class='adminnotice'>[key_name_admin(usr)] has banned [key_name_admin(M)].\nReason: [reason]\nThis is a permanent ban.</span>")
|
||||
feedback_inc("ban_perma",1)
|
||||
qdel(M.client)
|
||||
@@ -2302,6 +2258,50 @@
|
||||
else
|
||||
error_viewer.show_to(owner, null, href_list["viewruntime_linear"])
|
||||
|
||||
else if(href_list["mentor"])
|
||||
if(!check_rights(R_ADMIN)) return
|
||||
|
||||
var/mob/M = locate(href_list["mentor"])
|
||||
if(!ismob(M))
|
||||
usr << "this can be only used on instances of type /mob"
|
||||
return
|
||||
|
||||
if(!M.client)
|
||||
usr << "no client"
|
||||
return
|
||||
|
||||
log_admin("[key_name(usr)] has granted [key_name(M)] mentor access")
|
||||
message_admins("\blue [key_name_admin(usr)] has granted [key_name_admin(M)] mentor access", 1)
|
||||
|
||||
var/DBQuery/query = dbcon.NewQuery("INSERT INTO [format_table_name("mentor")] (ckey) VALUES ('[M.client.ckey]')")
|
||||
if(!query.Execute())
|
||||
var/err = query.ErrorMsg()
|
||||
log_game("SQL ERROR during adding new mentor. Error : \[[err]\]\n")
|
||||
load_mentors()
|
||||
M.verbs += /client/proc/cmd_mentor_say
|
||||
M.verbs += /client/proc/show_mentor_memo
|
||||
M << "\blue You've been granted mentor access! Help people who send mentor-pms"
|
||||
|
||||
else if(href_list["removementor"])
|
||||
if(!check_rights(R_ADMIN)) return
|
||||
|
||||
var/mob/living/carbon/human/M = locate(href_list["removementor"])
|
||||
if(!ismob(M))
|
||||
usr << "this can be only used on instances of type /mob"
|
||||
return
|
||||
|
||||
log_admin("[key_name(usr)] has removed mentor access from [key_name(M)]")
|
||||
message_admins("\blue [key_name_admin(usr)] has removed mentor access from [key_name_admin(M)]", 1)
|
||||
|
||||
var/DBQuery/query = dbcon.NewQuery("DELETE FROM [format_table_name("mentor")] WHERE ckey = '[M.client.ckey]'")
|
||||
if(!query.Execute())
|
||||
var/err = query.ErrorMsg()
|
||||
log_game("SQL ERROR during removing mentor. Error : \[[err]\]\n")
|
||||
load_mentors()
|
||||
M << "\blue Your mentor access has been removed"
|
||||
M.verbs -= /client/proc/cmd_mentor_say
|
||||
M.verbs -= /client/proc/show_mentor_memo
|
||||
|
||||
else if(href_list["mentormemoeditlist"])
|
||||
var/sql_key = sanitizeSQL("[href_list["memoeditlist"]]")
|
||||
var/DBQuery/query_memoedits = dbcon.NewQuery("SELECT edits FROM [format_table_name("mentor_memo")] WHERE (ckey = '[sql_key]')")
|
||||
|
||||
@@ -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