Skip to content

Commit

Permalink
Апгрейд ивентоделов (#4973)
Browse files Browse the repository at this point in the history
* base

* todos

* forgeted

* is_eventmaker fix

* client in client method

* another fix with eventmaker check

* refactor

* hehe

* dme

* Apply suggestions from code review

* add verbs to eventers

---------

Co-authored-by: Iajret <[email protected]>
Co-authored-by: Iajret <[email protected]>
  • Loading branch information
3 people authored Dec 19, 2024
1 parent 7a456b6 commit e3d6e73
Show file tree
Hide file tree
Showing 43 changed files with 302 additions and 100 deletions.
2 changes: 1 addition & 1 deletion SQL/optimisations_2017-02-19.sql
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ ALTER TABLE `library`
, CHANGE COLUMN `deleted` `deleted` TINYINT(1) UNSIGNED NULL DEFAULT NULL;

ALTER TABLE `messages`
CHANGE COLUMN `type` `type` ENUM('memo', 'message', 'message sent', 'note', 'watchlist entry') NOT NULL
CHANGE COLUMN `type` `type` ENUM('memo', 'message', 'message sent', 'note', 'watchlist entry', 'eventmaker note') NOT NULL
, CHANGE COLUMN `text` `text` VARCHAR(2048) NOT NULL
, CHANGE COLUMN `secret` `secret` TINYINT(1) UNSIGNED NOT NULL;

Expand Down
2 changes: 1 addition & 1 deletion SQL/tgstation_schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -307,7 +307,7 @@ DROP TABLE IF EXISTS `messages`;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `messages` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` enum('memo','message','message sent','note','watchlist entry') NOT NULL,
`type` enum('memo','message','message sent','note','watchlist entry', 'eventmaker note') NOT NULL,
`targetckey` varchar(32) NOT NULL,
`adminckey` varchar(32) NOT NULL,
`text` varchar(2048) NOT NULL,
Expand Down
2 changes: 1 addition & 1 deletion SQL/tgstation_schema_prefixed.sql
Original file line number Diff line number Diff line change
Expand Up @@ -305,7 +305,7 @@ DROP TABLE IF EXISTS `SS13_messages`;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `SS13_messages` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` enum('memo','message','message sent','note','watchlist entry') NOT NULL,
`type` enum('memo','message','message sent','note','watchlist entry', 'eventmaker note') NOT NULL,
`targetckey` varchar(32) NOT NULL,
`adminckey` varchar(32) NOT NULL,
`text` varchar(2048) NOT NULL,
Expand Down
1 change: 1 addition & 0 deletions code/__DEFINES/speech_channels.dm
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@
#define ME_CHANNEL "Me"
#define OOC_CHANNEL "OOC"
#define ADMIN_CHANNEL "Admin"
#define EVENT_CHANNEL "Event" // TFF ADDITION - Eventmaker
15 changes: 15 additions & 0 deletions code/__DEFINES/~ff_defines/_globalvars/lists/hidden_verbs.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
GLOBAL_LIST_INIT(eventmakers_blacklist_verbs, list(
//Admin
"Add PB Bypass" = TRUE, "ASay" = TRUE, "Cross-server Help Request" = TRUE,
"Get Current Logs" = TRUE, "Get Server Logs" = TRUE, "Known Alts Panel" = TRUE,
"loudAsay" = TRUE, "Paintings manager" = TRUE, "Player Playtime" = TRUE, "Player Ticket History" = TRUE,
"Reload Admins" = TRUE, "Revoke PB Bypass" = TRUE, "Trophy Manager" = TRUE, "View Round Logs" = TRUE,
"Load Away Mission" = TRUE, "Mass Zombie Cure" = TRUE, "Mass Zombie Infection" = TRUE,
"Polymorph All" = TRUE, "Title Screen: Change" = TRUE, "Title Screen: Set HTML" = TRUE, "Title Screen: Set Notice" = TRUE,
"Show Lag Switches" = TRUE,
//Server
"Reestablish DB Connection" = TRUE, "Reset Player OOC Color" = TRUE, "Set Player OOC Color" = TRUE,
"Toggle Antag OOC" = TRUE, "Toggle CDN" = TRUE, "Toggle OOC" = TRUE, "Toggle Security OOC" = TRUE,
//Debug
"Debug Stat Panel" = TRUE, "Migrate Player Ranks" = TRUE, "Open LUA Editor" = TRUE, "Re-establish Connection To TTS" = TRUE, "Reload Configuration" = TRUE, "Run Empty Query" = TRUE, "View Runtime" = TRUE
))
1 change: 1 addition & 0 deletions code/__DEFINES/~ff_defines/_globalvars/logging.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#define LOG_CATEGORY_GAME_EVENTMAKER "game-eventmaker"
1 change: 1 addition & 0 deletions code/__DEFINES/~ff_defines/span.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#define span_eventmaker(str) ("<span class='eventmaker'>" + str + "</span>")
2 changes: 1 addition & 1 deletion code/__HELPERS/hearted.dm
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
continue
hearted_mob.client.adjust_heart()
message += "[hearted_ckey][i == hearts.len ? "" : ", "]"
message_admins(message.Join())
message_admins(message.Join(), TRUE)

/// Ask someone if they'd like to award a commendation for the round, 3 tries to get the name they want before we give up
/mob/proc/query_heart(attempt=1)
Expand Down
1 change: 0 additions & 1 deletion code/controllers/subsystem/admin_verbs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,6 @@ SUBSYSTEM_DEF(admin_verbs)
if(!admin.holder.check_for_rights(verb_singleton.permissions))
to_chat(admin, span_adminnotice("You lack the permissions to do this."))
return

var/old_usr = usr
usr = admin.mob
// THE MACRO ENSURES THIS EXISTS. IF IT EVER DOESNT EXIST SOMEONE DIDNT USE THE DAMN MACRO!
Expand Down
2 changes: 1 addition & 1 deletion code/controllers/subsystem/stickyban.dm
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ SUBSYSTEM_DEF(stickyban)

//get_stickyban_from_ckey returned null, aka something broke. Notify admins about it
if (!ban)
message_admins("Failed to apply stickyban for [bannedkey]. Check the DB for corrupt stickyban entries.")
message_admins("Failed to apply stickyban for [bannedkey]. Check the DB for corrupt stickyban entries.", TRUE)
log_admin_private ("Failed to apply stickyban for [bannedkey]. Check the DB for corrupt stickyban entries.")
continue

Expand Down
7 changes: 6 additions & 1 deletion code/datums/brain_damage/imaginary_friend.dm
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,12 @@
message = capitalize(message)

if(message_mods[RADIO_EXTENSION] == MODE_ADMIN)
SSadmin_verbs.dynamic_invoke_verb(client, /datum/admin_verb/cmd_admin_say, message)
// TFF ADDITION START - Eventmaker
if(client.is_eventmaker())
SSadmin_verbs.dynamic_invoke_verb(client, /datum/admin_verb/cmd_eventmaker_say, message)
else
// TFF ADDITION END
SSadmin_verbs.dynamic_invoke_verb(client, /datum/admin_verb/cmd_admin_say, message)
return

if(message_mods[RADIO_EXTENSION] == MODE_DEADMIN)
Expand Down
11 changes: 9 additions & 2 deletions code/modules/admin/admin.dm
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
////////////////////////////////
/proc/message_admins(msg)
/proc/message_admins(msg, not_to_eventmaker) // TFF EDIT. ORIGINAL /proc/message_admins(msg)
msg = "<span class=\"admin\"><span class=\"prefix\">ADMIN LOG:</span> <span class=\"message\">[msg]</span></span>"
to_chat(GLOB.admins,
// TFF CHANGE START - EVENTMAKERS
var/list/addressee = GLOB.admins.Copy()
if(not_to_eventmaker)
for(var/client/admin in GLOB.admins)
if(admin.is_eventmaker())
addressee -= admin
// TFF CHANGE END
to_chat(addressee, // TFF EDIT. ORIGINAL GLOB.admins,
type = MESSAGE_TYPE_ADMINLOG,
html = msg,
confidential = TRUE)
Expand Down
4 changes: 2 additions & 2 deletions code/modules/admin/known_alts.dm
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ GLOBAL_DATUM_INIT(known_alts, /datum/known_alts, new)

if (query_add_known_alt.warn_execute())
var/message = "[key_name(usr)] has added a new known alt connection between [ckey1] and [ckey2]."
message_admins(message)
message_admins(message, TRUE)
log_admin_private(message)

cached_known_alts = null
Expand Down Expand Up @@ -115,7 +115,7 @@ GLOBAL_DATUM_INIT(known_alts, /datum/known_alts, new)

if (query_delete_known_alt.warn_execute())
var/message = "[key_name(usr)] has deleted the known alt connection between [result[1]] and [result[2]]."
message_admins(message)
message_admins(message, TRUE)
log_admin_private(message)

cached_known_alts = null
Expand Down
8 changes: 4 additions & 4 deletions code/modules/admin/sql_ban_system.dm
Original file line number Diff line number Diff line change
Expand Up @@ -685,7 +685,7 @@
var/target = ban_target_string(player_key, player_ip, player_cid)
var/msg = "has created a [global_ban ? "global" : "local"] [isnull(duration) ? "permanent" : "temporary [time_message]"] [applies_to_admins ? "admin " : ""][is_server_ban ? "server ban" : "role ban from [roles_to_ban.len] roles"] for [target]." // NOVA EDIT CHANGE - MULTISERVER
log_admin_private("[kn] [msg][is_server_ban ? "" : " Roles: [roles_to_ban.Join(", ")]"] Reason: [reason]")
message_admins("[kna] [msg][is_server_ban ? "" : " Roles: [roles_to_ban.Join("\n")]"]\nReason: [reason]")
message_admins("[kna] [msg][is_server_ban ? "" : " Roles: [roles_to_ban.Join("\n")]"]\nReason: [reason]", TRUE)
if(applies_to_admins)
send2adminchat("BAN ALERT","[kn] [msg]")
if(player_ckey)
Expand Down Expand Up @@ -885,7 +885,7 @@
return
qdel(query_unban)
log_admin_private("[kn] has unbanned [target] from [role].")
message_admins("[kna] has unbanned [target] from [role].")
message_admins("[kna] has unbanned [target] from [role].", TRUE)
var/client/C = GLOB.directory[player_key]
if(C)
build_ban_cache(C)
Expand Down Expand Up @@ -930,7 +930,7 @@
return
qdel(query_reban)
log_admin_private("[kn] has rebanned [target] from [role].")
message_admins("[kna] has rebanned [target] from [role].")
message_admins("[kna] has rebanned [target] from [role].", TRUE)

var/banned_player_message = span_boldannounce("[usr.client.key] has re-activated a removed ban from [role] for your key.")
var/banned_other_message = span_boldannounce("[usr.client.key] has re-activated a removed ban from [role] for your IP or CID.")
Expand Down Expand Up @@ -1041,7 +1041,7 @@
var/kn = key_name(usr)
var/kna = key_name_admin(usr)
log_admin_private("[kn] has edited the [changes_keys_text] of a ban for [old_key ? "[old_key]" : "[old_ip]-[old_cid]"].") //if a ban doesn't have a key it must have an ip and/or a cid to have reached this point normally
message_admins("[kna] has edited the [changes_keys_text] of a ban for [old_key ? "[old_key]" : "[old_ip]-[old_cid]"].")
message_admins("[kna] has edited the [changes_keys_text] of a ban for [old_key ? "[old_key]" : "[old_ip]-[old_cid]"].", TRUE)
if(changes["Applies to admins"])
send2adminchat("BAN ALERT","[kn] has edited a ban for [old_key ? "[old_key]" : "[old_ip]-[old_cid]"] to [applies_to_admins ? "" : "not"]affect admins")

Expand Down
65 changes: 48 additions & 17 deletions code/modules/admin/sql_message_system.dm
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
if(!type)
return
var/target_ckey = ckey(target_key)
if(!target_key && (type == "note" || type == "message" || type == "watchlist entry"))
if(!target_key && (type == "note" || type == "message" || type == "watchlist entry" || type == "eventmaker note")) // TFF EDIT - Eventmaker
var/new_key = input(usr,"Who would you like to create a [type] for?","Enter a key or ckey",null) as null|text
if(!new_key)
return
Expand Down Expand Up @@ -102,7 +102,7 @@
qdel(query_create_message)
if(logged)
log_admin_private(pm)
message_admins("[header]:<br>[text]")
message_admins("[header]:<br>[text]", TRUE)
admin_ticket_log(target_ckey, "<font color='blue'>[header]</font><br>[text]")
if(browse)
browse_messages("[type]")
Expand Down Expand Up @@ -146,7 +146,7 @@
var/m1 = "[user_key_name] has deleted a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for" : " made by"] [target_key]: [text]"
var/m2 = "[user_name_admin] has deleted a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for" : " made by"] [target_key]:<br>[text]"
log_admin_private(m1)
message_admins(m2)
message_admins(m2, TRUE)
if(browse)
browse_messages("[type]")
else
Expand Down Expand Up @@ -195,7 +195,7 @@
return
qdel(query_edit_message)
log_admin_private("[kn] has edited a [type] [(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_key]" : ""] made by [admin_key] from [old_text] to [new_text]")
message_admins("[kna] has edited a [type] [(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_key]" : ""] made by [admin_key] from<br>[old_text]<br>to<br>[new_text]")
message_admins("[kna] has edited a [type] [(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_key]" : ""] made by [admin_key] from<br>[old_text]<br>to<br>[new_text]", TRUE)
if(browse)
browse_messages("[type]")
else
Expand Down Expand Up @@ -266,7 +266,7 @@
return
qdel(query_edit_message_expiry)
log_admin_private("[kn] has edited the expiration time of a [type] [(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_key]" : ""] made by [admin_key] from [(old_expiry ? old_expiry : "no expiration date")] to [new_expiry]")
message_admins("[kna] has edited the expiration time of a [type] [(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_key]" : ""] made by [admin_key] from [(old_expiry ? old_expiry : "no expiration date")] to [new_expiry]")
message_admins("[kna] has edited the expiration time of a [type] [(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_key]" : ""] made by [admin_key] from [(old_expiry ? old_expiry : "no expiration date")] to [new_expiry]", TRUE)
if(browse)
browse_messages("[type]")
else
Expand Down Expand Up @@ -320,7 +320,7 @@
return
qdel(query_edit_note_severity)
log_admin_private("[kn] has edited the severity of a [type] for [target_key] made by [admin_key] from [old_severity] to [new_severity]")
message_admins("[kna] has edited the severity time of a [type] for [target_key] made by [admin_key] from [old_severity] to [new_severity]")
message_admins("[kna] has edited the severity time of a [type] for [target_key] made by [admin_key] from [old_severity] to [new_severity]", TRUE)
browse_messages(target_ckey = ckey(target_key), agegate = TRUE)
qdel(query_find_edit_note_severity)

Expand Down Expand Up @@ -364,7 +364,7 @@
return
qdel(query_message_secret)
log_admin_private("[kn] has toggled [target_key]'s [type] made by [admin_key] to [secret ? "not secret" : "secret"]")
message_admins("[kna] has toggled [target_key]'s [type] made by [admin_key] to [secret ? "not secret" : "secret"]")
message_admins("[kna] has toggled [target_key]'s [type] made by [admin_key] to [secret ? "not secret" : "secret"]", TRUE)
browse_messages(target_ckey = ckey(target_key), agegate = TRUE)
qdel(query_find_message_secret)

Expand All @@ -381,7 +381,8 @@
var/list/navbar = list("<a href='?_src_=holder;[HrefToken()];nonalpha=1'>All</a><a href='?_src_=holder;[HrefToken()];nonalpha=2'>#</a>")
for(var/letter in GLOB.alphabet)
navbar += "<a href='?_src_=holder;[HrefToken()];showmessages=[letter]'>[letter]</a>"
navbar += "<a href='?_src_=holder;[HrefToken()];showmemo=1'>Memos</a><a href='?_src_=holder;[HrefToken()];showwatch=1'>Watchlist</a>"
if(!usr?.client.is_eventmaker()) // TFF ADDITION - Eventmaker
navbar += "<a href='?_src_=holder;[HrefToken()];showmemo=1'>Memos</a><a href='?_src_=holder;[HrefToken()];showwatch=1'>Watchlist</a>"
navbar += "<br><form method='GET' name='search' action='?'>\
<input type='hidden' name='_src_' value='holder'>\
[HrefTokenFormField()]\
Expand Down Expand Up @@ -438,6 +439,10 @@
var/playtime = query_get_type_messages.item[11]
var/round_id = query_get_type_messages.item[12] // NOVA EDIT CHANGE END - MULTISERVER
output += "<b>"
// TFF ADDITION START - Eventmaker
if(type != "eventmaker note" && usr?.client.is_eventmaker())
continue
// TFF ADDITION END
if(type == "watchlist entry")
output += "[t_key] | "
output += "[timestamp] | [server] | Round [round_id] | [admin_key]"
Expand Down Expand Up @@ -482,6 +487,10 @@
var/list/messagedata = list()
var/list/watchdata = list()
var/list/notedata = list()
// TFF ADDITION START - Eventmaker
var/list/rating = 5 // Изначальный рейтинг пользователя, далее его.. понижают нотесы с тяжестью.
var/list/eventnotedata = list() // Храним в себе нотесы ивентеров
// TFF ADDITION END
var/skipped = 0
while(query_get_messages.NextRow())
if(QDELETED(usr))
Expand Down Expand Up @@ -519,6 +528,15 @@
alphatext = "filter: alpha(opacity=[alpha]); opacity: [alpha/100];"
var/list/data = list("<div style='margin:0px;[alphatext]'><p class='severity'>")
if(severity)
// TFF ADDITION START - Eventmaker
switch(severity)
if("high")
rating -= 0.4
if("medium")
rating -= 0.2
if("minor")
rating -= 0.1
// TFF ADDITION END
data += "<img src='[SSassets.transport.get_asset_url("[severity]_button.png")]' height='24' width='24'></img> "
data += "<b>[timestamp] | [server] | Round [round_id] | [admin_key][secret ? " | <i>- Secret</i>" : ""] | [get_exp_format(text2num(playtime))] Living Playtime"
if(expire_timestamp)
Expand Down Expand Up @@ -553,6 +571,10 @@
watchdata += data
if("note")
notedata += data
// TFF ADDITION START - Eventmaker
if("eventmaker note")
eventnotedata += data
// TFF ADDITION END
qdel(query_get_messages)
if(!target_key)
var/datum/db_query/query_get_message_key = SSdbcore.NewQuery({"
Expand All @@ -565,21 +587,24 @@
target_key = query_get_message_key.item[1]
qdel(query_get_message_key)
output += "<h2><center>[target_key]</center></h2><center>"
output += "<h3>Player Rating: <font color ='[rating > 4 ? COLOR_GREEN : rating > 2 ? COLOR_ORANGE : COLOR_RED]'>[rating > -1 ? rating : 0]</font></h3>" // TFF ADDITION - Eventmaker
if(!linkless)
output += "<a href='?_src_=holder;[HrefToken()];addnote=[target_key]'>Add note</a>"
output += " <a href='?_src_=holder;[HrefToken()];addmessage=[target_key]'>Add message</a>"
output += " <a href='?_src_=holder;[HrefToken()];addwatch=[target_key]'>Add to watchlist</a>"
if(!usr?.client.is_eventmaker()) // TFF ADDITION - Eventmaker
output += "<a href='?_src_=holder;[HrefToken()];addnote=[target_key]'>Add note</a>"
output += " <a href='?_src_=holder;[HrefToken()];addmessage=[target_key]'>Add message</a>"
output += " <a href='?_src_=holder;[HrefToken()];addwatch=[target_key]'>Add to watchlist</a>"
output += " <a href='?_src_=holder;[HrefToken()];addeventnote=[target_key]'>Add event note</a>" // TFF ADDITION - Eventmaker
output += " <a href='?_src_=holder;[HrefToken()];showmessageckey=[target_ckey]'>Refresh page</a></center>"
else
output += " <a href='?_src_=holder;[HrefToken()];showmessageckeylinkless=[target_ckey]'>Refresh page</a></center>"
output += ruler
if(messagedata)
if(messagedata && !usr?.client.is_eventmaker())// TFF ADDITION - Eventmaker
output += "<h2>Messages</h2>"
output += messagedata
if(watchdata)
if(watchdata && !usr?.client.is_eventmaker())// TFF ADDITION - Eventmaker
output += "<h2>Watchlist</h2>"
output += watchdata
if(notedata)
if(notedata && !usr?.client.is_eventmaker())// TFF ADDITION - Eventmaker
output += "<h2>Notes</h2>"
output += notedata
if(!linkless)
Expand All @@ -590,9 +615,15 @@
output += "<center><a href='?_src_=holder;[HrefToken()];showmessageckey=[target_ckey];showall=1'>Show All</a></center>"
else
output += "<center><a href='?_src_=holder;[HrefToken()];showmessageckey=[target_ckey]'>Hide Old</a></center>"
// TFF ADDITION START - Eventmaker
if(eventnotedata)
output += "<h2>Event Notes</h2>"
output += eventnotedata
// TFF ADDITION END
if(index)
var/search
output += "<center><a href='?_src_=holder;[HrefToken()];addmessageempty=1'>Add message</a><a href='?_src_=holder;[HrefToken()];addwatchempty=1'>Add watchlist entry</a><a href='?_src_=holder;[HrefToken()];addnoteempty=1'>Add note</a></center>"
if(!usr?.client.is_eventmaker()) // TFF ADDITION - Eventmaker
output += "<center><a href='?_src_=holder;[HrefToken()];addmessageempty=1'>Add message</a><a href='?_src_=holder;[HrefToken()];addwatchempty=1'>Add watchlist entry</a><a href='?_src_=holder;[HrefToken()];addnoteempty=1'>Add note</a></center>"
output += ruler
switch(index)
if(1)
Expand Down Expand Up @@ -624,7 +655,7 @@
index_key = index_ckey
output += "<a href='?_src_=holder;[HrefToken()];showmessageckey=[index_ckey]'>[index_key]</a><br>"
qdel(query_list_messages)
else if(!type && !target_ckey && !index)
else if(!type && !target_ckey && !index && !usr?.client.is_eventmaker()) // TFF EDIT - Eventmaker
output += "<center><a href='?_src_=holder;[HrefToken()];addmessageempty=1'>Add message</a><a href='?_src_=holder;[HrefToken()];addwatchempty=1'>Add watchlist entry</a><a href='?_src_=holder;[HrefToken()];addnoteempty=1'>Add note</a></center>"
output += ruler
var/datum/browser/browser = new(usr, "Note panel", "Manage player notes", 1000, 500)
Expand Down Expand Up @@ -717,7 +748,7 @@

/proc/scream_about_watchlists(client/read_from)
for(var/datum/admin_message/message in get_message_output("watchlist entry", read_from.ckey))
message_admins("<font color='[COLOR_RED]'><B>Notice: </B></font><font color='[COLOR_ADMIN_PINK]'>[key_name_admin(read_from.ckey)] has been on the watchlist since [message.timestamp] and has just connected - Reason: [message.text]</font>")
message_admins("<font color='[COLOR_RED]'><B>Notice: </B></font><font color='[COLOR_ADMIN_PINK]'>[key_name_admin(read_from.ckey)] has been on the watchlist since [message.timestamp] and has just connected - Reason: [message.text]</font>", TRUE)
send2tgs_adminless_only("Watchlist", "[key_name(read_from.ckey)] is on the watchlist and has just connected - Reason: [message.text]")

#define NOTESFILE "data/player_notes.sav"
Expand Down
Loading

0 comments on commit e3d6e73

Please sign in to comment.