mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2025-12-26 18:13:11 +00:00
Merge branch 'master' of https://github.com/PolarisSS13/Polaris into 2020_04_17_LoadBalancing
This commit is contained in:
@@ -82,7 +82,7 @@ datum/admins/proc/DB_ban_record(var/bantype, var/mob/banned_mob, var/duration =
|
||||
var/sql = "INSERT INTO erro_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/DBQuery/query_insert = dbcon.NewQuery(sql)
|
||||
query_insert.Execute()
|
||||
to_chat(usr, "<font color='blue'>Ban saved to database.</font>")
|
||||
to_chat(usr, "<span class='filter_adminlog'><font color='blue'>Ban saved to database.</font></span>")
|
||||
message_admins("[key_name_admin(usr)] has added a [bantype_str] for [ckey] [(job)?"([job])":""] [(duration > 0)?"([duration] minutes)":""] with the reason: \"[reason]\" to the ban database.",1)
|
||||
|
||||
|
||||
@@ -136,17 +136,17 @@ datum/admins/proc/DB_ban_unban(var/ckey, var/bantype, var/job = "")
|
||||
ban_number++;
|
||||
|
||||
if(ban_number == 0)
|
||||
to_chat(usr, "<font color='red'>Database update failed due to no bans fitting the search criteria. If this is not a legacy ban you should contact the database admin.</font>")
|
||||
to_chat(usr, "<span class='filter_adminlog'><font color='red'>Database update failed due to no bans fitting the search criteria. If this is not a legacy ban you should contact the database admin.</font></span>")
|
||||
return
|
||||
|
||||
if(ban_number > 1)
|
||||
to_chat(usr, "<font color='red'>Database update failed due to multiple bans fitting the search criteria. Note down the ckey, job and current time and contact the database admin.</font>")
|
||||
to_chat(usr, "<span class='filter_adminlog'><font color='red'>Database update failed due to multiple bans fitting the search criteria. Note down the ckey, job and current time and contact the database admin.</font></span>")
|
||||
return
|
||||
|
||||
if(istext(ban_id))
|
||||
ban_id = text2num(ban_id)
|
||||
if(!isnum(ban_id))
|
||||
to_chat(usr, "<font color='red'>Database update failed due to a ban ID mismatch. Contact the database admin.</font>")
|
||||
to_chat(usr, "<span class='filter_adminlog'><font color='red'>Database update failed due to a ban ID mismatch. Contact the database admin.</font></span>")
|
||||
return
|
||||
|
||||
DB_ban_unban_by_id(ban_id)
|
||||
@@ -172,7 +172,7 @@ datum/admins/proc/DB_ban_edit(var/banid = null, var/param = null)
|
||||
duration = query.item[2]
|
||||
reason = query.item[3]
|
||||
else
|
||||
to_chat(usr, "Invalid ban id. Contact the database admin")
|
||||
to_chat(usr, "<span class='filter_adminlog'>Invalid ban id. Contact the database admin</span>")
|
||||
return
|
||||
|
||||
reason = sql_sanitize_text(reason)
|
||||
@@ -204,12 +204,8 @@ datum/admins/proc/DB_ban_edit(var/banid = null, var/param = null)
|
||||
if(alert("Unban [pckey]?", "Unban?", "Yes", "No") == "Yes")
|
||||
DB_ban_unban_by_id(banid)
|
||||
return
|
||||
else
|
||||
to_chat(usr, "Cancelled")
|
||||
return
|
||||
else
|
||||
to_chat(usr, "Cancelled")
|
||||
return
|
||||
to_chat(usr, "<span class='filter_adminlog'>Cancelled</span>")
|
||||
return
|
||||
|
||||
datum/admins/proc/DB_ban_unban_by_id(var/id)
|
||||
|
||||
@@ -231,11 +227,11 @@ datum/admins/proc/DB_ban_unban_by_id(var/id)
|
||||
ban_number++;
|
||||
|
||||
if(ban_number == 0)
|
||||
to_chat(usr, "<font color='red'>Database update failed due to a ban id not being present in the database.</font>")
|
||||
to_chat(usr, "<span class='filter_adminlog'><font color='red'>Database update failed due to a ban id not being present in the database.</font></span>")
|
||||
return
|
||||
|
||||
if(ban_number > 1)
|
||||
to_chat(usr, "<font color='red'>Database update failed due to multiple bans having the same ID. Contact the database admin.</font>")
|
||||
to_chat(usr, "<span class='filter_adminlog'><font color='red'>Database update failed due to multiple bans having the same ID. Contact the database admin.</font></span>")
|
||||
return
|
||||
|
||||
if(!src.owner || !istype(src.owner, /client))
|
||||
@@ -271,7 +267,7 @@ datum/admins/proc/DB_ban_unban_by_id(var/id)
|
||||
|
||||
establish_db_connection()
|
||||
if(!dbcon.IsConnected())
|
||||
to_chat(usr, "<font color='red'>Failed to establish database connection</font>")
|
||||
to_chat(usr, "<span class='filter_adminlog'><font color='red'>Failed to establish database connection</font></span>")
|
||||
return
|
||||
|
||||
var/output = "<div align='center'><table width='90%'><tr>"
|
||||
|
||||
@@ -106,7 +106,7 @@ var/savefile/Banlist
|
||||
|
||||
Banlist.cd = "/base"
|
||||
if ( Banlist.dir.Find("[ckey][computerid]") )
|
||||
to_chat(usr, "<font color='red'>Ban already exists.</font>")
|
||||
to_chat(usr, "<span class='filter_adminlog warning'>Ban already exists.</span>")
|
||||
return 0
|
||||
else
|
||||
Banlist.dir.Add("[ckey][computerid]")
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
F["last_update"] << world.realtime
|
||||
log_misc("ToR data updated!")
|
||||
if(usr)
|
||||
to_chat(usr, "ToRban updated.")
|
||||
to_chat(usr, "<span class='filter_adminlog'>ToRban updated.</span>")
|
||||
return 1
|
||||
log_misc("ToR data update aborted: no data.")
|
||||
return 0
|
||||
@@ -73,16 +73,16 @@
|
||||
var/choice = input(src,"Please select an IP address to remove from the ToR banlist:","Remove ToR ban",null) as null|anything in F.dir
|
||||
if(choice)
|
||||
F.dir.Remove(choice)
|
||||
to_chat(src, "<b>Address removed</b>")
|
||||
to_chat(src, "<span class='filter_adminlog'><b>Address removed</b></span>")
|
||||
if("remove all")
|
||||
to_chat(src, "<b>[TORFILE] was [fdel(TORFILE)?"":"not "]removed.</b>")
|
||||
to_chat(src, "<span class='filter_adminlog'><b>[TORFILE] was [fdel(TORFILE)?"":"not "]removed.</b></span>")
|
||||
if("find")
|
||||
var/input = input(src,"Please input an IP address to search for:","Find ToR ban",null) as null|text
|
||||
if(input)
|
||||
if(ToRban_isbanned(input))
|
||||
to_chat(src, "<font color='green'><b>Address is a known ToR address</b></font>")
|
||||
to_chat(src, "<span class='filter_adminlog'><font color='green'><b>Address is a known ToR address</b></font></span>")
|
||||
else
|
||||
to_chat(src, "<font color='red'><b>Address is not a known ToR address</b></font>")
|
||||
to_chat(src, "<span class='filter_adminlog danger'>Address is not a known ToR address</span>")
|
||||
return
|
||||
|
||||
#undef TORFILE
|
||||
|
||||
@@ -5,7 +5,7 @@ var/global/floorIsLava = 0
|
||||
|
||||
////////////////////////////////
|
||||
/proc/message_admins(var/msg)
|
||||
msg = "<span class=\"log_message\"><span class=\"prefix\">ADMIN LOG:</span> <span class=\"message\">[msg]</span></span>"
|
||||
msg = "<span class='filter_adminlog log_message'><span class='prefix'>ADMIN LOG:</span> <span class=\"message\">[msg]</span></span>"
|
||||
//log_adminwarn(msg) //log_and_message_admins is for this
|
||||
|
||||
for(var/client/C in admins)
|
||||
@@ -13,7 +13,7 @@ var/global/floorIsLava = 0
|
||||
to_chat(C,msg)
|
||||
|
||||
/proc/msg_admin_attack(var/text) //Toggleable Attack Messages
|
||||
var/rendered = "<span class=\"log_message\"><span class=\"prefix\">ATTACK:</span> <span class=\"message\">[text]</span></span>"
|
||||
var/rendered = "<span class='filter_attacklog log_message'><span class='prefix'>ATTACK:</span> <span class=\"message\">[text]</span></span>"
|
||||
for(var/client/C in admins)
|
||||
if((R_ADMIN|R_MOD) & C.holder.rights)
|
||||
if(C.is_preference_enabled(/datum/client_preference/mod/show_attack_logs))
|
||||
@@ -868,21 +868,26 @@ proc/admin_notice(var/message, var/rights)
|
||||
|
||||
/datum/admins/proc/startnow()
|
||||
set category = "Server"
|
||||
set desc="Start the round RIGHT NOW"
|
||||
set desc="Start the round ASAP"
|
||||
set name="Start Now"
|
||||
if(!ticker)
|
||||
alert("Unable to start the game as it is not set up.")
|
||||
|
||||
if(!check_rights(R_SERVER|R_EVENT))
|
||||
return
|
||||
if(ticker.current_state == GAME_STATE_PREGAME)
|
||||
ticker.current_state = GAME_STATE_SETTING_UP
|
||||
Master.SetRunLevel(RUNLEVEL_SETUP)
|
||||
log_admin("[usr.key] has started the game.")
|
||||
message_admins("<font color='blue'>[usr.key] has started the game.</font>")
|
||||
if(SSticker.current_state > GAME_STATE_PREGAME)
|
||||
to_chat(usr, "<span class='warning'>Error: Start Now: Game has already started.</span>")
|
||||
return
|
||||
if(!SSticker.start_immediately)
|
||||
SSticker.start_immediately = TRUE
|
||||
var/msg = ""
|
||||
if(SSticker.current_state == GAME_STATE_INIT)
|
||||
msg = " (The server is still setting up, but the round will be started as soon as possible.)"
|
||||
log_admin("[key_name(usr)] has started the game.[msg]")
|
||||
message_admins("<span class='notice'>[key_name_admin(usr)] has started the game.[msg]</span>")
|
||||
feedback_add_details("admin_verb","SN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return 1
|
||||
else
|
||||
to_chat(usr, "<font color='red'>Error: Start Now: Game has already started.</font>")
|
||||
return 0
|
||||
SSticker.start_immediately = FALSE
|
||||
to_world("<span class='notice'>Immediate game start canceled. Normal startup resumed.</span>")
|
||||
log_and_message_admins("cancelled immediate game start.")
|
||||
|
||||
/datum/admins/proc/toggleenter()
|
||||
set category = "Server"
|
||||
@@ -949,10 +954,10 @@ proc/admin_notice(var/message, var/rights)
|
||||
set name="Delay"
|
||||
|
||||
if(!check_rights(R_SERVER|R_EVENT)) return
|
||||
if (!ticker || ticker.current_state != GAME_STATE_PREGAME)
|
||||
ticker.delay_end = !ticker.delay_end
|
||||
log_admin("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].")
|
||||
message_admins("<font color='blue'>[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].</font>", 1)
|
||||
if (SSticker.current_state >= GAME_STATE_PLAYING)
|
||||
SSticker.delay_end = !SSticker.delay_end
|
||||
log_admin("[key_name(usr)] [SSticker.delay_end ? "delayed the round end" : "has made the round end normally"].")
|
||||
message_admins("<font color='blue'>[key_name(usr)] [SSticker.delay_end ? "delayed the round end" : "has made the round end normally"].</font>", 1)
|
||||
return //alert("Round end delayed", null, null, null, null, null)
|
||||
round_progressing = !round_progressing
|
||||
if (!round_progressing)
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
if(!message) return
|
||||
var/F = investigate_subject2file(subject)
|
||||
if(!F) return
|
||||
to_chat(F, "<small>[time2text(world.timeofday,"hh:mm")] \ref[src] ([x],[y],[z])</small> || [src] [message]<br>")
|
||||
to_chat(F, "<span class='filter_adminlog'><small>[time2text(world.timeofday,"hh:mm")] \ref[src] ([x],[y],[z])</small> || [src] [message]<br></span>")
|
||||
|
||||
//ADMINVERBS
|
||||
/client/proc/investigate_show( subject in list("hrefs","notes","singulo","telesci") )
|
||||
@@ -34,7 +34,7 @@
|
||||
if("singulo", "telesci") //general one-round-only stuff
|
||||
var/F = investigate_subject2file(subject)
|
||||
if(!F)
|
||||
to_chat(src, "<font color='red'>Error: admin_investigate: [INVESTIGATE_DIR][subject] is an invalid path or cannot be accessed.</font>")
|
||||
to_chat(src, "<span class='filter_adminlog warning'>Error: admin_investigate: [INVESTIGATE_DIR][subject] is an invalid path or cannot be accessed.</span>")
|
||||
return
|
||||
src << browse(F,"window=investigate[subject];size=800x300")
|
||||
|
||||
@@ -43,8 +43,8 @@
|
||||
if(href_logfile)
|
||||
src << browse(href_logfile,"window=investigate[subject];size=800x300")
|
||||
else
|
||||
to_chat(src, "<font color='red'>Error: admin_investigate: No href logfile found.</font>")
|
||||
to_chat(src, "<span class='filter_adminlog warning'>Error: admin_investigate: No href logfile found.</span>")
|
||||
return
|
||||
else
|
||||
to_chat(src, "<font color='red'>Error: admin_investigate: Href Logging is not on.</font>")
|
||||
to_chat(src, "<span class='filter_adminlog warning'>Error: admin_investigate: Href Logging is not on.</span>")
|
||||
return
|
||||
|
||||
@@ -22,11 +22,11 @@
|
||||
return
|
||||
if("")
|
||||
F.dir.Remove(ckey)
|
||||
to_chat(src, "<b>Memo removed</b>")
|
||||
to_chat(src, "<span class='filter_adminlog'><b>Memo removed</b></span>")
|
||||
return
|
||||
if( findtext(memo,"<script",1,0) )
|
||||
return
|
||||
to_chat(F[ckey], "[key] on [time2text(world.realtime,"(DDD) DD MMM hh:mm")]<br>[memo]")
|
||||
to_chat(F[ckey], "<span class='filter_adminlog'>[key] on [time2text(world.realtime,"(DDD) DD MMM hh:mm")]<br>[memo]</span>")
|
||||
message_admins("[key] set an admin memo:<br>[memo]")
|
||||
|
||||
//show all memos
|
||||
@@ -35,7 +35,7 @@
|
||||
var/savefile/F = new(MEMOFILE)
|
||||
if(F)
|
||||
for(var/ckey in F.dir)
|
||||
to_chat(src, "<center><span class='motd'><b>Admin Memo</b><i> by [F[ckey]]</i></span></center>")
|
||||
to_chat(src, "<span class='filter_adminlog'><center><span class='motd'><b>Admin Memo</b><i> by [F[ckey]]</i></span></center></span>")
|
||||
|
||||
//delete your own or somebody else's memo
|
||||
/client/proc/admin_memo_delete()
|
||||
@@ -48,7 +48,7 @@
|
||||
ckey = src.ckey
|
||||
if(ckey)
|
||||
F.dir.Remove(ckey)
|
||||
to_chat(src, "<b>Removed Memo created by [ckey].</b>")
|
||||
to_chat(src, "<span class='filter_adminlog'><b>Removed Memo created by [ckey].</b></span>")
|
||||
|
||||
#undef MEMOFILE
|
||||
#undef ENABLE_MEMOS
|
||||
528
code/modules/admin/admin_verb_lists.dm
Normal file
528
code/modules/admin/admin_verb_lists.dm
Normal file
@@ -0,0 +1,528 @@
|
||||
//admin verb groups - They can overlap if you so wish. Only one of each verb will exist in the verbs list regardless
|
||||
var/list/admin_verbs_default = list(
|
||||
/datum/admins/proc/show_player_panel, //shows an interface for individual players, with various links (links require additional flags,
|
||||
/client/proc/player_panel_new, //shows an interface for all players, with links to various panels,
|
||||
/client/proc/player_panel,
|
||||
/client/proc/deadmin_self, //destroys our own admin datum so we can play as a regular player,
|
||||
/client/proc/hide_verbs, //hides all our adminverbs,
|
||||
/client/proc/hide_most_verbs, //hides all our hideable adminverbs,
|
||||
/client/proc/debug_variables, //allows us to -see- the variables of any instance in the game. +VAREDIT needed to modify,
|
||||
/client/proc/mark_datum_mapview,
|
||||
/client/proc/cmd_check_new_players, //allows us to see every new player
|
||||
// /client/proc/check_antagonists, //shows all antags,
|
||||
// /client/proc/cmd_mod_say,
|
||||
// /client/proc/deadchat //toggles deadchat on/off,
|
||||
// /client/proc/toggle_ahelp_sound,
|
||||
)
|
||||
|
||||
var/list/admin_verbs_admin = list(
|
||||
/datum/admins/proc/set_tcrystals,
|
||||
/datum/admins/proc/add_tcrystals,
|
||||
/client/proc/invisimin, //allows our mob to go invisible/visible,
|
||||
/datum/admins/proc/show_traitor_panel, //interface which shows a mob's mind.,
|
||||
/datum/admins/proc/show_game_mode, //Configuration window for the current game mode.,
|
||||
/datum/admins/proc/force_mode_latespawn, //Force the mode to try a latespawn proc,
|
||||
/datum/admins/proc/force_antag_latespawn, //Force a specific template to try a latespawn proc,
|
||||
/datum/admins/proc/toggleenter, //toggles whether people can join the current game,
|
||||
/datum/admins/proc/toggleguests, //toggles whether guests can join the current game,
|
||||
/datum/admins/proc/announce, //priority announce something to all clients.,
|
||||
/datum/admins/proc/intercom, //send a fake intercom message, like an arrivals announcement,
|
||||
/datum/admins/proc/intercom_convo, //send a fake intercom conversation, like an ATC exchange,
|
||||
/client/proc/colorooc, //allows us to set a custom colour for everythign we say in ooc,
|
||||
/client/proc/admin_ghost, //allows us to ghost/reenter body at will,
|
||||
/client/proc/toggle_view_range, //changes how far we can see,
|
||||
/datum/admins/proc/view_txt_log, //shows the server log (diary) for today,
|
||||
/datum/admins/proc/view_atk_log, //shows the server combat-log, doesn't do anything presently,
|
||||
/client/proc/cmd_admin_pm_context, //right-click adminPM interface,
|
||||
/client/proc/cmd_admin_pm_panel, //admin-pm list,
|
||||
/client/proc/cmd_admin_subtle_message, //send an message to somebody as a 'voice in their head',
|
||||
/client/proc/cmd_admin_delete, //delete an instance/object/mob/etc,
|
||||
/client/proc/cmd_admin_check_contents, //displays the contents of an instance,
|
||||
/client/proc/cmd_admin_check_player_logs, //checks a player's attack logs,
|
||||
/client/proc/cmd_admin_check_dialogue_logs, //checks a player's dialogue logs,
|
||||
/datum/admins/proc/access_news_network, //allows access of newscasters,
|
||||
/client/proc/giveruntimelog, //allows us to give access to runtime logs to somebody,
|
||||
/client/proc/getserverlog, //allows us to fetch server logs (diary) for other days,
|
||||
/client/proc/jumptocoord, //we ghost and jump to a coordinate,
|
||||
/client/proc/Getmob, //teleports a mob to our location,
|
||||
/client/proc/Getkey, //teleports a mob with a certain ckey to our location,
|
||||
// /client/proc/sendmob, //sends a mob somewhere, -Removed due to it needing two sorting procs to work, which were executed every time an admin right-clicked. ~Errorage,
|
||||
/client/proc/Jump,
|
||||
/client/proc/jumptokey, //allows us to jump to the location of a mob with a certain ckey,
|
||||
/client/proc/jumptomob, //allows us to jump to a specific mob,
|
||||
/client/proc/jumptoturf, //allows us to jump to a specific turf,
|
||||
/client/proc/admin_call_shuttle, //allows us to call the emergency shuttle,
|
||||
/client/proc/admin_cancel_shuttle, //allows us to cancel the emergency shuttle, sending it back to CentCom,
|
||||
/client/proc/cmd_admin_direct_narrate, //send text directly to a player with no padding. Useful for narratives and fluff-text,
|
||||
/client/proc/cmd_admin_world_narrate, //sends text to all players with no padding,
|
||||
/client/proc/cmd_admin_create_centcom_report,
|
||||
/client/proc/check_words, //displays cult-words,
|
||||
/client/proc/check_ai_laws, //shows AI and borg laws,
|
||||
/client/proc/rename_silicon, //properly renames silicons,
|
||||
/client/proc/manage_silicon_laws, // Allows viewing and editing silicon laws. ,
|
||||
/client/proc/check_antagonists,
|
||||
/client/proc/admin_memo, //admin memo system. show/delete/write. +SERVER needed to delete admin memos of others,
|
||||
/client/proc/dsay, //talk in deadchat using our ckey/fakekey,
|
||||
// /client/proc/toggle_hear_deadcast, //toggles whether we hear deadchat,
|
||||
/client/proc/investigate_show, //various admintools for investigation. Such as a singulo grief-log,
|
||||
/client/proc/secrets,
|
||||
/datum/admins/proc/toggleooc, //toggles ooc on/off for everyone,
|
||||
/datum/admins/proc/togglelooc, //toggles looc on/off for everyone,
|
||||
/datum/admins/proc/toggleoocdead, //toggles ooc on/off for everyone who is dead,
|
||||
/datum/admins/proc/togglehubvisibility, //toggles visibility on the BYOND Hub.,
|
||||
/datum/admins/proc/toggledsay, //toggles dsay on/off for everyone,
|
||||
/client/proc/game_panel, //game panel, allows to change game-mode etc,
|
||||
/client/proc/cmd_admin_say, //admin-only ooc chat,
|
||||
/client/proc/cmd_mod_say,
|
||||
/client/proc/cmd_event_say,
|
||||
/datum/admins/proc/PlayerNotes,
|
||||
/datum/admins/proc/show_player_info,
|
||||
/client/proc/free_slot, //frees slot for chosen job,
|
||||
/client/proc/cmd_admin_change_custom_event,
|
||||
/client/proc/cmd_admin_rejuvenate,
|
||||
/client/proc/toggleghostwriters,
|
||||
/client/proc/toggledrones,
|
||||
/datum/admins/proc/show_skills,
|
||||
/client/proc/check_customitem_activity,
|
||||
/client/proc/man_up,
|
||||
/client/proc/global_man_up,
|
||||
/client/proc/response_team, // Response Teams admin verb,
|
||||
/client/proc/trader_ship, // Trader ship admin verb,
|
||||
/client/proc/toggle_antagHUD_use,
|
||||
/client/proc/toggle_antagHUD_restrictions,
|
||||
/client/proc/allow_character_respawn, // Allows a ghost to respawn ,
|
||||
/client/proc/event_manager_panel,
|
||||
/client/proc/empty_ai_core_toggle_latejoin,
|
||||
/client/proc/empty_ai_core_toggle_latejoin,
|
||||
/client/proc/aooc,
|
||||
/client/proc/change_human_appearance_admin, // Allows an admin to change the basic appearance of human-based mobs ,
|
||||
/client/proc/change_human_appearance_self, // Allows the human-based mob itself change its basic appearance ,
|
||||
/client/proc/change_security_level,
|
||||
/client/proc/view_chemical_reaction_logs,
|
||||
/client/proc/makePAI,
|
||||
/client/proc/toggle_debug_logs,
|
||||
/client/proc/toggle_attack_logs,
|
||||
/datum/admins/proc/paralyze_mob,
|
||||
/client/proc/fixatmos,
|
||||
/datum/admins/proc/sendFax,
|
||||
/client/proc/despawn_player,
|
||||
/datum/admins/proc/view_feedback
|
||||
)
|
||||
|
||||
var/list/admin_verbs_ban = list(
|
||||
/client/proc/unban_panel,
|
||||
/client/proc/jobbans
|
||||
)
|
||||
|
||||
var/list/admin_verbs_sounds = list(
|
||||
/client/proc/play_local_sound,
|
||||
/client/proc/play_sound,
|
||||
/client/proc/play_server_sound
|
||||
)
|
||||
|
||||
var/list/admin_verbs_fun = list(
|
||||
/client/proc/object_talk,
|
||||
/datum/admins/proc/cmd_admin_dress,
|
||||
/client/proc/cmd_admin_gib_self,
|
||||
/client/proc/drop_bomb,
|
||||
/client/proc/everyone_random,
|
||||
/client/proc/cinematic,
|
||||
/datum/admins/proc/toggle_aliens,
|
||||
/datum/admins/proc/toggle_space_ninja,
|
||||
/client/proc/cmd_admin_add_freeform_ai_law,
|
||||
/client/proc/cmd_admin_add_random_ai_law,
|
||||
/client/proc/make_sound,
|
||||
/client/proc/toggle_random_events,
|
||||
/client/proc/editappear,
|
||||
/client/proc/roll_dices,
|
||||
/datum/admins/proc/call_supply_drop,
|
||||
/datum/admins/proc/call_drop_pod,
|
||||
/client/proc/smite,
|
||||
/client/proc/admin_lightning_strike,
|
||||
)
|
||||
|
||||
var/list/admin_verbs_spawn = list(
|
||||
/datum/admins/proc/spawn_fruit,
|
||||
/datum/admins/proc/spawn_custom_item,
|
||||
/datum/admins/proc/check_custom_items,
|
||||
/datum/admins/proc/spawn_plant,
|
||||
/datum/admins/proc/spawn_atom, //allows us to spawn instances,
|
||||
/client/proc/respawn_character,
|
||||
/client/proc/virus2_editor,
|
||||
/client/proc/spawn_chemdisp_cartridge,
|
||||
/client/proc/map_template_load,
|
||||
/client/proc/map_template_upload,
|
||||
/client/proc/map_template_load_on_new_z
|
||||
)
|
||||
|
||||
var/list/admin_verbs_server = list(
|
||||
/datum/admins/proc/capture_map,
|
||||
/client/proc/Set_Holiday,
|
||||
/client/proc/ToRban,
|
||||
/datum/admins/proc/startnow,
|
||||
/datum/admins/proc/restart,
|
||||
/datum/admins/proc/delay,
|
||||
/datum/admins/proc/toggleaban,
|
||||
/client/proc/cmd_mod_say,
|
||||
/client/proc/toggle_log_hrefs,
|
||||
/datum/admins/proc/immreboot,
|
||||
/client/proc/everyone_random,
|
||||
/datum/admins/proc/toggleAI,
|
||||
/client/proc/cmd_admin_delete, //delete an instance/object/mob/etc,
|
||||
/client/proc/cmd_debug_del_all,
|
||||
/datum/admins/proc/adrev,
|
||||
/datum/admins/proc/adspawn,
|
||||
/datum/admins/proc/adjump,
|
||||
/datum/admins/proc/toggle_aliens,
|
||||
/datum/admins/proc/toggle_space_ninja,
|
||||
/client/proc/toggle_random_events,
|
||||
/client/proc/check_customitem_activity,
|
||||
/client/proc/nanomapgen_DumpImage,
|
||||
/client/proc/modify_server_news,
|
||||
/client/proc/recipe_dump,
|
||||
/client/proc/panicbunker,
|
||||
/client/proc/paranoia_logging,
|
||||
/client/proc/ip_reputation
|
||||
)
|
||||
|
||||
var/list/admin_verbs_debug = list(
|
||||
/client/proc/getruntimelog, //allows us to access runtime logs to somebody,
|
||||
/client/proc/cmd_admin_list_open_jobs,
|
||||
/client/proc/Debug2,
|
||||
/client/proc/kill_air,
|
||||
/client/proc/ZASSettings,
|
||||
/client/proc/cmd_debug_make_powernets,
|
||||
/client/proc/kill_airgroup,
|
||||
/client/proc/debug_controller,
|
||||
/client/proc/debug_antagonist_template,
|
||||
/client/proc/cmd_debug_mob_lists,
|
||||
/client/proc/cmd_debug_using_map,
|
||||
/client/proc/cmd_admin_delete,
|
||||
/client/proc/cmd_debug_del_all,
|
||||
/client/proc/cmd_debug_tog_aliens,
|
||||
/client/proc/cmd_display_del_log,
|
||||
/client/proc/cmd_display_init_log,
|
||||
/client/proc/cmd_display_overlay_log,
|
||||
/client/proc/air_report,
|
||||
/client/proc/reload_admins,
|
||||
/client/proc/reload_eventMs,
|
||||
/client/proc/restart_controller,
|
||||
/datum/admins/proc/restart,
|
||||
/client/proc/print_random_map,
|
||||
/client/proc/create_random_map,
|
||||
/client/proc/apply_random_map,
|
||||
/client/proc/overlay_random_map,
|
||||
/client/proc/delete_random_map,
|
||||
/client/proc/show_plant_genes,
|
||||
/client/proc/enable_debug_verbs,
|
||||
/client/proc/callproc,
|
||||
/client/proc/callproc_datum,
|
||||
/client/proc/SDQL2_query,
|
||||
/client/proc/Jump,
|
||||
/client/proc/jumptomob,
|
||||
/client/proc/jumptocoord,
|
||||
/client/proc/dsay,
|
||||
/client/proc/toggle_debug_logs,
|
||||
/client/proc/admin_ghost, //allows us to ghost/reenter body at will,
|
||||
/datum/admins/proc/view_runtimes,
|
||||
/client/proc/show_gm_status,
|
||||
/datum/admins/proc/change_weather,
|
||||
/datum/admins/proc/change_time,
|
||||
/client/proc/admin_give_modifier,
|
||||
/client/proc/simple_DPS,
|
||||
/datum/admins/proc/view_feedback
|
||||
)
|
||||
|
||||
var/list/admin_verbs_paranoid_debug = list(
|
||||
/client/proc/callproc,
|
||||
/client/proc/callproc_datum,
|
||||
/client/proc/debug_controller
|
||||
)
|
||||
|
||||
var/list/admin_verbs_possess = list(
|
||||
/proc/possess,
|
||||
/proc/release
|
||||
)
|
||||
var/list/admin_verbs_permissions = list(
|
||||
/client/proc/edit_admin_permissions
|
||||
)
|
||||
var/list/admin_verbs_rejuv = list(
|
||||
/client/proc/respawn_character
|
||||
)
|
||||
|
||||
//verbs which can be hidden - needs work
|
||||
var/list/admin_verbs_hideable = list(
|
||||
/client/proc/deadmin_self,
|
||||
// /client/proc/deadchat,
|
||||
/datum/admins/proc/show_traitor_panel,
|
||||
/datum/admins/proc/toggleenter,
|
||||
/datum/admins/proc/toggleguests,
|
||||
/datum/admins/proc/announce,
|
||||
/client/proc/colorooc,
|
||||
/client/proc/admin_ghost,
|
||||
/client/proc/toggle_view_range,
|
||||
/datum/admins/proc/view_txt_log,
|
||||
/datum/admins/proc/view_atk_log,
|
||||
/client/proc/cmd_admin_subtle_message,
|
||||
/client/proc/cmd_admin_check_contents,
|
||||
/client/proc/cmd_admin_check_player_logs,
|
||||
/client/proc/cmd_admin_check_dialogue_logs,
|
||||
/datum/admins/proc/access_news_network,
|
||||
/client/proc/admin_call_shuttle,
|
||||
/client/proc/admin_cancel_shuttle,
|
||||
/client/proc/cmd_admin_direct_narrate,
|
||||
/client/proc/cmd_admin_world_narrate,
|
||||
/client/proc/check_words,
|
||||
/client/proc/play_local_sound,
|
||||
/client/proc/play_sound,
|
||||
/client/proc/play_server_sound,
|
||||
/client/proc/object_talk,
|
||||
/datum/admins/proc/cmd_admin_dress,
|
||||
/client/proc/cmd_admin_gib_self,
|
||||
/client/proc/drop_bomb,
|
||||
/client/proc/cinematic,
|
||||
/datum/admins/proc/toggle_aliens,
|
||||
/datum/admins/proc/toggle_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/make_sound,
|
||||
/client/proc/toggle_random_events,
|
||||
/client/proc/cmd_admin_add_random_ai_law,
|
||||
/client/proc/Set_Holiday,
|
||||
/client/proc/ToRban,
|
||||
/datum/admins/proc/startnow,
|
||||
/datum/admins/proc/restart,
|
||||
/datum/admins/proc/delay,
|
||||
/datum/admins/proc/toggleaban,
|
||||
/client/proc/toggle_log_hrefs,
|
||||
/datum/admins/proc/immreboot,
|
||||
/client/proc/everyone_random,
|
||||
/datum/admins/proc/toggleAI,
|
||||
/datum/admins/proc/adrev,
|
||||
/datum/admins/proc/adspawn,
|
||||
/datum/admins/proc/adjump,
|
||||
/client/proc/restart_controller,
|
||||
/client/proc/cmd_admin_list_open_jobs,
|
||||
/client/proc/callproc,
|
||||
/client/proc/callproc_datum,
|
||||
/client/proc/Debug2,
|
||||
/client/proc/reload_admins,
|
||||
/client/proc/kill_air,
|
||||
/client/proc/cmd_debug_make_powernets,
|
||||
/client/proc/kill_airgroup,
|
||||
/client/proc/debug_controller,
|
||||
/client/proc/startSinglo,
|
||||
/client/proc/simple_DPS,
|
||||
/client/proc/cmd_debug_mob_lists,
|
||||
/client/proc/cmd_debug_using_map,
|
||||
/client/proc/cmd_debug_del_all,
|
||||
/client/proc/cmd_debug_tog_aliens,
|
||||
/client/proc/cmd_display_del_log,
|
||||
/client/proc/air_report,
|
||||
/client/proc/enable_debug_verbs,
|
||||
/client/proc/roll_dices,
|
||||
/proc/possess,
|
||||
/proc/release,
|
||||
/datum/admins/proc/set_tcrystals
|
||||
)
|
||||
var/list/admin_verbs_mod = list(
|
||||
/client/proc/cmd_admin_pm_context, //right-click adminPM interface,
|
||||
/client/proc/cmd_admin_pm_panel, //admin-pm list,
|
||||
/client/proc/debug_variables, //allows us to -see- the variables of any instance in the game.,
|
||||
/datum/admins/proc/PlayerNotes,
|
||||
/client/proc/admin_ghost, //allows us to ghost/reenter body at will,
|
||||
/client/proc/cmd_mod_say,
|
||||
/client/proc/cmd_event_say,
|
||||
/datum/admins/proc/show_player_info,
|
||||
/datum/admins/proc/show_traitor_panel,
|
||||
/client/proc/colorooc,
|
||||
/client/proc/player_panel_new,
|
||||
/client/proc/dsay,
|
||||
/datum/admins/proc/show_skills,
|
||||
/datum/admins/proc/show_player_panel,
|
||||
/client/proc/check_antagonists,
|
||||
/client/proc/aooc,
|
||||
/client/proc/jobbans,
|
||||
/client/proc/toggle_attack_logs,
|
||||
/client/proc/cmd_admin_subtle_message, //send an message to somebody as a 'voice in their head',
|
||||
/datum/admins/proc/paralyze_mob,
|
||||
/client/proc/cmd_admin_direct_narrate,
|
||||
/client/proc/allow_character_respawn, // Allows a ghost to respawn ,
|
||||
/datum/admins/proc/sendFax,
|
||||
/client/proc/getserverlog, //allows us to fetch server logs (diary) for other days,
|
||||
/datum/admins/proc/view_txt_log, //shows the server log (diary) for today,
|
||||
/datum/admins/proc/view_atk_log //shows the server combat-log, doesn't do anything presently,
|
||||
)
|
||||
|
||||
var/list/admin_verbs_event_manager = list(
|
||||
/client/proc/cmd_event_say,
|
||||
/client/proc/cmd_admin_pm_context,
|
||||
/client/proc/cmd_admin_pm_panel,
|
||||
/client/proc/admin_ghost,
|
||||
/datum/admins/proc/show_player_info,
|
||||
/client/proc/dsay,
|
||||
/client/proc/cmd_admin_subtle_message,
|
||||
/client/proc/debug_variables,
|
||||
/client/proc/check_antagonists,
|
||||
/client/proc/aooc,
|
||||
/datum/admins/proc/paralyze_mob,
|
||||
/client/proc/cmd_admin_direct_narrate,
|
||||
/client/proc/allow_character_respawn,
|
||||
/datum/admins/proc/sendFax,
|
||||
/client/proc/respawn_character,
|
||||
/proc/possess,
|
||||
/proc/release,
|
||||
/datum/admins/proc/change_weather,
|
||||
/datum/admins/proc/change_time,
|
||||
/client/proc/admin_give_modifier,
|
||||
/client/proc/Jump,
|
||||
/client/proc/jumptomob,
|
||||
/client/proc/jumptocoord,
|
||||
/client/proc/cmd_admin_delete,
|
||||
/datum/admins/proc/delay,
|
||||
/client/proc/Set_Holiday,
|
||||
/client/proc/make_sound,
|
||||
/client/proc/toggle_random_events,
|
||||
/datum/admins/proc/cmd_admin_dress,
|
||||
/client/proc/cmd_admin_gib_self,
|
||||
/client/proc/drop_bomb,
|
||||
/client/proc/cmd_admin_add_freeform_ai_law,
|
||||
/client/proc/cmd_admin_add_random_ai_law,
|
||||
/client/proc/make_sound,
|
||||
/client/proc/toggle_random_events,
|
||||
/client/proc/editappear,
|
||||
/client/proc/roll_dices,
|
||||
/datum/admins/proc/call_supply_drop,
|
||||
/datum/admins/proc/call_drop_pod,
|
||||
/datum/admins/proc/PlayerNotes,
|
||||
/client/proc/callproc,
|
||||
/client/proc/callproc_datum,
|
||||
/client/proc/debug_controller,
|
||||
/client/proc/show_gm_status,
|
||||
/datum/admins/proc/change_weather,
|
||||
/datum/admins/proc/change_time,
|
||||
/client/proc/admin_give_modifier,
|
||||
/datum/admins/proc/cmd_admin_dress,
|
||||
/client/proc/cmd_admin_gib_self,
|
||||
/datum/admins/proc/set_tcrystals,
|
||||
/datum/admins/proc/add_tcrystals,
|
||||
/client/proc/invisimin, //allows our mob to go invisible/visible,
|
||||
/datum/admins/proc/show_traitor_panel, //interface which shows a mob's mind.,
|
||||
/datum/admins/proc/show_game_mode, //Configuration window for the current game mode.,
|
||||
/datum/admins/proc/force_mode_latespawn, //Force the mode to try a latespawn proc,
|
||||
/datum/admins/proc/force_antag_latespawn, //Force a specific template to try a latespawn proc,
|
||||
/datum/admins/proc/announce, //priority announce something to all clients.,
|
||||
/datum/admins/proc/intercom, //send a fake intercom message, like an arrivals announcement,
|
||||
/datum/admins/proc/intercom_convo, //send a fake intercom conversation, like an ATC exchange,
|
||||
/client/proc/colorooc, //allows us to set a custom colour for everythign we say in ooc,
|
||||
/client/proc/admin_ghost, //allows us to ghost/reenter body at will,
|
||||
/client/proc/toggle_view_range, //changes how far we can see,
|
||||
/client/proc/cmd_admin_pm_context, //right-click adminPM interface,
|
||||
/client/proc/cmd_admin_pm_panel, //admin-pm list,
|
||||
/client/proc/cmd_admin_subtle_message, //send an message to somebody as a 'voice in their head',
|
||||
/client/proc/cmd_admin_delete, //delete an instance/object/mob/etc,
|
||||
/client/proc/cmd_admin_check_contents, //displays the contents of an instance,
|
||||
/client/proc/cmd_admin_check_player_logs, //checks a player's attack logs,
|
||||
/client/proc/cmd_admin_check_dialogue_logs, //checks a player's dialogue logs,
|
||||
/datum/admins/proc/access_news_network, //allows access of newscasters,
|
||||
/client/proc/jumptocoord, //we ghost and jump to a coordinate,
|
||||
/client/proc/Getmob, //teleports a mob to our location,
|
||||
/client/proc/Getkey, //teleports a mob with a certain ckey to our location,
|
||||
/client/proc/Jump,
|
||||
/client/proc/jumptokey, //allows us to jump to the location of a mob with a certain ckey,
|
||||
/client/proc/jumptomob, //allows us to jump to a specific mob,
|
||||
/client/proc/jumptoturf, //allows us to jump to a specific turf,
|
||||
/client/proc/admin_call_shuttle, //allows us to call the emergency shuttle,
|
||||
/client/proc/admin_cancel_shuttle, //allows us to cancel the emergency shuttle, sending it back to CentCom,
|
||||
/client/proc/cmd_admin_direct_narrate, //send text directly to a player with no padding. Useful for narratives and fluff-text,
|
||||
/client/proc/cmd_admin_world_narrate, //sends text to all players with no padding,
|
||||
/client/proc/cmd_admin_create_centcom_report,
|
||||
/client/proc/check_words, //displays cult-words,
|
||||
/client/proc/check_ai_laws, //shows AI and borg laws,
|
||||
/client/proc/rename_silicon, //properly renames silicons,
|
||||
/client/proc/manage_silicon_laws, // Allows viewing and editing silicon laws. ,
|
||||
/client/proc/check_antagonists,
|
||||
/client/proc/admin_memo, //admin memo system. show/delete/write. +SERVER needed to delete admin memos of others,
|
||||
/client/proc/dsay, //talk in deadchat using our ckey/fakekey,
|
||||
/client/proc/secrets,
|
||||
/client/proc/game_panel, //game panel, allows to change game-mode etc,
|
||||
/client/proc/cmd_mod_say,
|
||||
/client/proc/cmd_event_say,
|
||||
/datum/admins/proc/show_player_info,
|
||||
/client/proc/free_slot, //frees slot for chosen job,
|
||||
/client/proc/cmd_admin_change_custom_event,
|
||||
/client/proc/cmd_admin_rejuvenate,
|
||||
/client/proc/toggleghostwriters,
|
||||
/datum/admins/proc/show_skills,
|
||||
/client/proc/man_up,
|
||||
/client/proc/global_man_up,
|
||||
/client/proc/response_team, // Response Teams admin verb,
|
||||
/client/proc/trader_ship, // Trader ship admin verb,
|
||||
/client/proc/allow_character_respawn, // Allows a ghost to respawn ,
|
||||
/client/proc/event_manager_panel,
|
||||
/client/proc/aooc,
|
||||
/client/proc/change_human_appearance_admin, // Allows an admin to change the basic appearance of human-based mobs ,
|
||||
/client/proc/change_human_appearance_self, // Allows the human-based mob itself change its basic appearance ,
|
||||
/client/proc/change_security_level,
|
||||
/client/proc/makePAI,
|
||||
/client/proc/toggle_debug_logs,
|
||||
/client/proc/toggle_attack_logs,
|
||||
/datum/admins/proc/paralyze_mob,
|
||||
/client/proc/fixatmos,
|
||||
/datum/admins/proc/sendFax,
|
||||
/client/proc/despawn_player,
|
||||
/datum/admins/proc/view_feedback,
|
||||
/datum/admins/proc/capture_map,
|
||||
/client/proc/Set_Holiday,
|
||||
/datum/admins/proc/startnow,
|
||||
/datum/admins/proc/restart,
|
||||
/datum/admins/proc/delay,
|
||||
/client/proc/cmd_mod_say,
|
||||
/datum/admins/proc/immreboot,
|
||||
/client/proc/everyone_random,
|
||||
/client/proc/cmd_admin_delete, //delete an instance/object/mob/etc,
|
||||
/client/proc/cmd_debug_del_all,
|
||||
/client/proc/toggle_random_events,
|
||||
/client/proc/modify_server_news
|
||||
|
||||
)
|
||||
|
||||
/client/proc/add_admin_verbs()
|
||||
if(holder)
|
||||
verbs += admin_verbs_default
|
||||
if(holder.rights & R_BUILDMODE) verbs += /client/proc/togglebuildmodeself
|
||||
if(holder.rights & R_ADMIN) verbs += admin_verbs_admin
|
||||
if(holder.rights & R_BAN) verbs += admin_verbs_ban
|
||||
if(holder.rights & R_FUN) verbs += admin_verbs_fun
|
||||
if(holder.rights & R_SERVER) verbs += admin_verbs_server
|
||||
if(holder.rights & R_DEBUG)
|
||||
verbs += admin_verbs_debug
|
||||
if(config.debugparanoid && !(holder.rights & R_ADMIN))
|
||||
verbs.Remove(admin_verbs_paranoid_debug) //Right now it's just callproc but we can easily add others later on.
|
||||
if(holder.rights & R_POSSESS) verbs += admin_verbs_possess
|
||||
if(holder.rights & R_PERMISSIONS) verbs += admin_verbs_permissions
|
||||
if(holder.rights & R_STEALTH) verbs += /client/proc/stealth
|
||||
if(holder.rights & R_REJUVINATE) verbs += admin_verbs_rejuv
|
||||
if(holder.rights & R_SOUNDS) verbs += admin_verbs_sounds
|
||||
if(holder.rights & R_SPAWN) verbs += admin_verbs_spawn
|
||||
if(holder.rights & R_MOD) verbs += admin_verbs_mod
|
||||
if(holder.rights & R_EVENT) verbs += admin_verbs_event_manager
|
||||
|
||||
/client/proc/remove_admin_verbs()
|
||||
verbs.Remove(
|
||||
admin_verbs_default,
|
||||
/client/proc/togglebuildmodeself,
|
||||
admin_verbs_admin,
|
||||
admin_verbs_ban,
|
||||
admin_verbs_fun,
|
||||
admin_verbs_server,
|
||||
admin_verbs_debug,
|
||||
admin_verbs_possess,
|
||||
admin_verbs_permissions,
|
||||
/client/proc/stealth,
|
||||
admin_verbs_rejuv,
|
||||
admin_verbs_sounds,
|
||||
admin_verbs_spawn,
|
||||
debug_verbs
|
||||
)
|
||||
@@ -1,532 +1,3 @@
|
||||
//admin verb groups - They can overlap if you so wish. Only one of each verb will exist in the verbs list regardless
|
||||
var/list/admin_verbs_default = list(
|
||||
/datum/admins/proc/show_player_panel, //shows an interface for individual players, with various links (links require additional flags,
|
||||
/client/proc/player_panel_new, //shows an interface for all players, with links to various panels,
|
||||
/client/proc/player_panel,
|
||||
/client/proc/deadmin_self, //destroys our own admin datum so we can play as a regular player,
|
||||
/client/proc/hide_verbs, //hides all our adminverbs,
|
||||
/client/proc/hide_most_verbs, //hides all our hideable adminverbs,
|
||||
/client/proc/debug_variables, //allows us to -see- the variables of any instance in the game. +VAREDIT needed to modify,
|
||||
/client/proc/mark_datum_mapview,
|
||||
/client/proc/cmd_check_new_players, //allows us to see every new player
|
||||
// /client/proc/check_antagonists, //shows all antags,
|
||||
// /client/proc/cmd_mod_say,
|
||||
// /client/proc/deadchat //toggles deadchat on/off,
|
||||
// /client/proc/toggle_ahelp_sound,
|
||||
)
|
||||
|
||||
var/list/admin_verbs_admin = list(
|
||||
/datum/admins/proc/set_tcrystals,
|
||||
/datum/admins/proc/add_tcrystals,
|
||||
/client/proc/invisimin, //allows our mob to go invisible/visible,
|
||||
/datum/admins/proc/show_traitor_panel, //interface which shows a mob's mind.,
|
||||
/datum/admins/proc/show_game_mode, //Configuration window for the current game mode.,
|
||||
/datum/admins/proc/force_mode_latespawn, //Force the mode to try a latespawn proc,
|
||||
/datum/admins/proc/force_antag_latespawn, //Force a specific template to try a latespawn proc,
|
||||
/datum/admins/proc/toggleenter, //toggles whether people can join the current game,
|
||||
/datum/admins/proc/toggleguests, //toggles whether guests can join the current game,
|
||||
/datum/admins/proc/announce, //priority announce something to all clients.,
|
||||
/datum/admins/proc/intercom, //send a fake intercom message, like an arrivals announcement,
|
||||
/datum/admins/proc/intercom_convo, //send a fake intercom conversation, like an ATC exchange,
|
||||
/client/proc/colorooc, //allows us to set a custom colour for everythign we say in ooc,
|
||||
/client/proc/admin_ghost, //allows us to ghost/reenter body at will,
|
||||
/client/proc/toggle_view_range, //changes how far we can see,
|
||||
/datum/admins/proc/view_txt_log, //shows the server log (diary) for today,
|
||||
/datum/admins/proc/view_atk_log, //shows the server combat-log, doesn't do anything presently,
|
||||
/client/proc/cmd_admin_pm_context, //right-click adminPM interface,
|
||||
/client/proc/cmd_admin_pm_panel, //admin-pm list,
|
||||
/client/proc/cmd_admin_subtle_message, //send an message to somebody as a 'voice in their head',
|
||||
/client/proc/cmd_admin_delete, //delete an instance/object/mob/etc,
|
||||
/client/proc/cmd_admin_check_contents, //displays the contents of an instance,
|
||||
/client/proc/cmd_admin_check_player_logs, //checks a player's attack logs,
|
||||
/client/proc/cmd_admin_check_dialogue_logs, //checks a player's dialogue logs,
|
||||
/datum/admins/proc/access_news_network, //allows access of newscasters,
|
||||
/client/proc/giveruntimelog, //allows us to give access to runtime logs to somebody,
|
||||
/client/proc/getserverlog, //allows us to fetch server logs (diary) for other days,
|
||||
/client/proc/jumptocoord, //we ghost and jump to a coordinate,
|
||||
/client/proc/Getmob, //teleports a mob to our location,
|
||||
/client/proc/Getkey, //teleports a mob with a certain ckey to our location,
|
||||
// /client/proc/sendmob, //sends a mob somewhere, -Removed due to it needing two sorting procs to work, which were executed every time an admin right-clicked. ~Errorage,
|
||||
/client/proc/Jump,
|
||||
/client/proc/jumptokey, //allows us to jump to the location of a mob with a certain ckey,
|
||||
/client/proc/jumptomob, //allows us to jump to a specific mob,
|
||||
/client/proc/jumptoturf, //allows us to jump to a specific turf,
|
||||
/client/proc/admin_call_shuttle, //allows us to call the emergency shuttle,
|
||||
/client/proc/admin_cancel_shuttle, //allows us to cancel the emergency shuttle, sending it back to CentCom,
|
||||
/client/proc/cmd_admin_direct_narrate, //send text directly to a player with no padding. Useful for narratives and fluff-text,
|
||||
/client/proc/cmd_admin_world_narrate, //sends text to all players with no padding,
|
||||
/client/proc/cmd_admin_create_centcom_report,
|
||||
/client/proc/check_words, //displays cult-words,
|
||||
/client/proc/check_ai_laws, //shows AI and borg laws,
|
||||
/client/proc/rename_silicon, //properly renames silicons,
|
||||
/client/proc/manage_silicon_laws, // Allows viewing and editing silicon laws. ,
|
||||
/client/proc/check_antagonists,
|
||||
/client/proc/admin_memo, //admin memo system. show/delete/write. +SERVER needed to delete admin memos of others,
|
||||
/client/proc/dsay, //talk in deadchat using our ckey/fakekey,
|
||||
// /client/proc/toggle_hear_deadcast, //toggles whether we hear deadchat,
|
||||
/client/proc/investigate_show, //various admintools for investigation. Such as a singulo grief-log,
|
||||
/client/proc/secrets,
|
||||
/datum/admins/proc/toggleooc, //toggles ooc on/off for everyone,
|
||||
/datum/admins/proc/togglelooc, //toggles looc on/off for everyone,
|
||||
/datum/admins/proc/toggleoocdead, //toggles ooc on/off for everyone who is dead,
|
||||
/datum/admins/proc/togglehubvisibility, //toggles visibility on the BYOND Hub.,
|
||||
/datum/admins/proc/toggledsay, //toggles dsay on/off for everyone,
|
||||
/client/proc/game_panel, //game panel, allows to change game-mode etc,
|
||||
/client/proc/cmd_admin_say, //admin-only ooc chat,
|
||||
/client/proc/cmd_mod_say,
|
||||
/client/proc/cmd_event_say,
|
||||
/datum/admins/proc/PlayerNotes,
|
||||
/datum/admins/proc/show_player_info,
|
||||
/client/proc/free_slot, //frees slot for chosen job,
|
||||
/client/proc/cmd_admin_change_custom_event,
|
||||
/client/proc/cmd_admin_rejuvenate,
|
||||
/client/proc/toggleghostwriters,
|
||||
/client/proc/toggledrones,
|
||||
/datum/admins/proc/show_skills,
|
||||
/client/proc/check_customitem_activity,
|
||||
/client/proc/man_up,
|
||||
/client/proc/global_man_up,
|
||||
/client/proc/response_team, // Response Teams admin verb,
|
||||
/client/proc/trader_ship, // Trader ship admin verb,
|
||||
/client/proc/toggle_antagHUD_use,
|
||||
/client/proc/toggle_antagHUD_restrictions,
|
||||
/client/proc/allow_character_respawn, // Allows a ghost to respawn ,
|
||||
/client/proc/event_manager_panel,
|
||||
/client/proc/empty_ai_core_toggle_latejoin,
|
||||
/client/proc/empty_ai_core_toggle_latejoin,
|
||||
/client/proc/aooc,
|
||||
/client/proc/change_human_appearance_admin, // Allows an admin to change the basic appearance of human-based mobs ,
|
||||
/client/proc/change_human_appearance_self, // Allows the human-based mob itself change its basic appearance ,
|
||||
/client/proc/change_security_level,
|
||||
/client/proc/view_chemical_reaction_logs,
|
||||
/client/proc/makePAI,
|
||||
/client/proc/toggle_debug_logs,
|
||||
/client/proc/toggle_attack_logs,
|
||||
/datum/admins/proc/paralyze_mob,
|
||||
/client/proc/fixatmos,
|
||||
/datum/admins/proc/sendFax,
|
||||
/client/proc/despawn_player,
|
||||
/datum/admins/proc/view_feedback
|
||||
)
|
||||
|
||||
var/list/admin_verbs_ban = list(
|
||||
/client/proc/unban_panel,
|
||||
/client/proc/jobbans
|
||||
)
|
||||
|
||||
var/list/admin_verbs_sounds = list(
|
||||
/client/proc/play_local_sound,
|
||||
/client/proc/play_sound,
|
||||
/client/proc/play_server_sound
|
||||
)
|
||||
|
||||
var/list/admin_verbs_fun = list(
|
||||
/client/proc/object_talk,
|
||||
/datum/admins/proc/cmd_admin_dress,
|
||||
/client/proc/cmd_admin_gib_self,
|
||||
/client/proc/drop_bomb,
|
||||
/client/proc/everyone_random,
|
||||
/client/proc/cinematic,
|
||||
/datum/admins/proc/toggle_aliens,
|
||||
/datum/admins/proc/toggle_space_ninja,
|
||||
/client/proc/cmd_admin_add_freeform_ai_law,
|
||||
/client/proc/cmd_admin_add_random_ai_law,
|
||||
/client/proc/make_sound,
|
||||
/client/proc/toggle_random_events,
|
||||
/client/proc/editappear,
|
||||
/client/proc/roll_dices,
|
||||
/datum/admins/proc/call_supply_drop,
|
||||
/datum/admins/proc/call_drop_pod,
|
||||
/client/proc/smite,
|
||||
/client/proc/admin_lightning_strike,
|
||||
)
|
||||
|
||||
var/list/admin_verbs_spawn = list(
|
||||
/datum/admins/proc/spawn_fruit,
|
||||
/datum/admins/proc/spawn_custom_item,
|
||||
/datum/admins/proc/check_custom_items,
|
||||
/datum/admins/proc/spawn_plant,
|
||||
/datum/admins/proc/spawn_atom, //allows us to spawn instances,
|
||||
/client/proc/respawn_character,
|
||||
/client/proc/virus2_editor,
|
||||
/client/proc/spawn_chemdisp_cartridge,
|
||||
/client/proc/map_template_load,
|
||||
/client/proc/map_template_upload,
|
||||
/client/proc/map_template_load_on_new_z
|
||||
)
|
||||
|
||||
var/list/admin_verbs_server = list(
|
||||
/datum/admins/proc/capture_map,
|
||||
/client/proc/Set_Holiday,
|
||||
/client/proc/ToRban,
|
||||
/datum/admins/proc/startnow,
|
||||
/datum/admins/proc/restart,
|
||||
/datum/admins/proc/delay,
|
||||
/datum/admins/proc/toggleaban,
|
||||
/client/proc/cmd_mod_say,
|
||||
/client/proc/toggle_log_hrefs,
|
||||
/datum/admins/proc/immreboot,
|
||||
/client/proc/everyone_random,
|
||||
/datum/admins/proc/toggleAI,
|
||||
/client/proc/cmd_admin_delete, //delete an instance/object/mob/etc,
|
||||
/client/proc/cmd_debug_del_all,
|
||||
/datum/admins/proc/adrev,
|
||||
/datum/admins/proc/adspawn,
|
||||
/datum/admins/proc/adjump,
|
||||
/datum/admins/proc/toggle_aliens,
|
||||
/datum/admins/proc/toggle_space_ninja,
|
||||
/client/proc/toggle_random_events,
|
||||
/client/proc/check_customitem_activity,
|
||||
/client/proc/nanomapgen_DumpImage,
|
||||
/client/proc/modify_server_news,
|
||||
/client/proc/recipe_dump,
|
||||
/client/proc/panicbunker,
|
||||
/client/proc/paranoia_logging,
|
||||
/client/proc/ip_reputation
|
||||
)
|
||||
|
||||
var/list/admin_verbs_debug = list(
|
||||
/client/proc/getruntimelog, //allows us to access runtime logs to somebody,
|
||||
/client/proc/cmd_admin_list_open_jobs,
|
||||
/client/proc/Debug2,
|
||||
/client/proc/kill_air,
|
||||
/client/proc/ZASSettings,
|
||||
/client/proc/cmd_debug_make_powernets,
|
||||
/client/proc/kill_airgroup,
|
||||
/client/proc/debug_controller,
|
||||
/client/proc/debug_antagonist_template,
|
||||
/client/proc/cmd_debug_mob_lists,
|
||||
/client/proc/cmd_debug_using_map,
|
||||
/client/proc/cmd_admin_delete,
|
||||
/client/proc/cmd_debug_del_all,
|
||||
/client/proc/cmd_debug_tog_aliens,
|
||||
/client/proc/cmd_display_del_log,
|
||||
/client/proc/cmd_display_init_log,
|
||||
/client/proc/cmd_display_overlay_log,
|
||||
/client/proc/air_report,
|
||||
/client/proc/reload_admins,
|
||||
/client/proc/reload_eventMs,
|
||||
/client/proc/restart_controller,
|
||||
/datum/admins/proc/restart,
|
||||
/client/proc/print_random_map,
|
||||
/client/proc/create_random_map,
|
||||
/client/proc/apply_random_map,
|
||||
/client/proc/overlay_random_map,
|
||||
/client/proc/delete_random_map,
|
||||
/client/proc/show_plant_genes,
|
||||
/client/proc/enable_debug_verbs,
|
||||
/client/proc/callproc,
|
||||
/client/proc/callproc_datum,
|
||||
/client/proc/SDQL2_query,
|
||||
/client/proc/Jump,
|
||||
/client/proc/jumptomob,
|
||||
/client/proc/jumptocoord,
|
||||
/client/proc/dsay,
|
||||
/client/proc/toggle_debug_logs,
|
||||
/client/proc/admin_ghost, //allows us to ghost/reenter body at will,
|
||||
/datum/admins/proc/view_runtimes,
|
||||
/client/proc/show_gm_status,
|
||||
/datum/admins/proc/change_weather,
|
||||
/datum/admins/proc/change_time,
|
||||
/client/proc/admin_give_modifier,
|
||||
/client/proc/simple_DPS,
|
||||
/datum/admins/proc/view_feedback
|
||||
)
|
||||
|
||||
var/list/admin_verbs_paranoid_debug = list(
|
||||
/client/proc/callproc,
|
||||
/client/proc/callproc_datum,
|
||||
/client/proc/debug_controller
|
||||
)
|
||||
|
||||
var/list/admin_verbs_possess = list(
|
||||
/proc/possess,
|
||||
/proc/release
|
||||
)
|
||||
var/list/admin_verbs_permissions = list(
|
||||
/client/proc/edit_admin_permissions
|
||||
)
|
||||
var/list/admin_verbs_rejuv = list(
|
||||
/client/proc/respawn_character
|
||||
)
|
||||
|
||||
//verbs which can be hidden - needs work
|
||||
var/list/admin_verbs_hideable = list(
|
||||
/client/proc/deadmin_self,
|
||||
// /client/proc/deadchat,
|
||||
/datum/admins/proc/show_traitor_panel,
|
||||
/datum/admins/proc/toggleenter,
|
||||
/datum/admins/proc/toggleguests,
|
||||
/datum/admins/proc/announce,
|
||||
/client/proc/colorooc,
|
||||
/client/proc/admin_ghost,
|
||||
/client/proc/toggle_view_range,
|
||||
/datum/admins/proc/view_txt_log,
|
||||
/datum/admins/proc/view_atk_log,
|
||||
/client/proc/cmd_admin_subtle_message,
|
||||
/client/proc/cmd_admin_check_contents,
|
||||
/client/proc/cmd_admin_check_player_logs,
|
||||
/client/proc/cmd_admin_check_dialogue_logs,
|
||||
/datum/admins/proc/access_news_network,
|
||||
/client/proc/admin_call_shuttle,
|
||||
/client/proc/admin_cancel_shuttle,
|
||||
/client/proc/cmd_admin_direct_narrate,
|
||||
/client/proc/cmd_admin_world_narrate,
|
||||
/client/proc/check_words,
|
||||
/client/proc/play_local_sound,
|
||||
/client/proc/play_sound,
|
||||
/client/proc/play_server_sound,
|
||||
/client/proc/object_talk,
|
||||
/datum/admins/proc/cmd_admin_dress,
|
||||
/client/proc/cmd_admin_gib_self,
|
||||
/client/proc/drop_bomb,
|
||||
/client/proc/cinematic,
|
||||
/datum/admins/proc/toggle_aliens,
|
||||
/datum/admins/proc/toggle_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/make_sound,
|
||||
/client/proc/toggle_random_events,
|
||||
/client/proc/cmd_admin_add_random_ai_law,
|
||||
/client/proc/Set_Holiday,
|
||||
/client/proc/ToRban,
|
||||
/datum/admins/proc/startnow,
|
||||
/datum/admins/proc/restart,
|
||||
/datum/admins/proc/delay,
|
||||
/datum/admins/proc/toggleaban,
|
||||
/client/proc/toggle_log_hrefs,
|
||||
/datum/admins/proc/immreboot,
|
||||
/client/proc/everyone_random,
|
||||
/datum/admins/proc/toggleAI,
|
||||
/datum/admins/proc/adrev,
|
||||
/datum/admins/proc/adspawn,
|
||||
/datum/admins/proc/adjump,
|
||||
/client/proc/restart_controller,
|
||||
/client/proc/cmd_admin_list_open_jobs,
|
||||
/client/proc/callproc,
|
||||
/client/proc/callproc_datum,
|
||||
/client/proc/Debug2,
|
||||
/client/proc/reload_admins,
|
||||
/client/proc/kill_air,
|
||||
/client/proc/cmd_debug_make_powernets,
|
||||
/client/proc/kill_airgroup,
|
||||
/client/proc/debug_controller,
|
||||
/client/proc/startSinglo,
|
||||
/client/proc/simple_DPS,
|
||||
/client/proc/cmd_debug_mob_lists,
|
||||
/client/proc/cmd_debug_using_map,
|
||||
/client/proc/cmd_debug_del_all,
|
||||
/client/proc/cmd_debug_tog_aliens,
|
||||
/client/proc/cmd_display_del_log,
|
||||
/client/proc/air_report,
|
||||
/client/proc/enable_debug_verbs,
|
||||
/client/proc/roll_dices,
|
||||
/proc/possess,
|
||||
/proc/release,
|
||||
/datum/admins/proc/set_tcrystals
|
||||
)
|
||||
var/list/admin_verbs_mod = list(
|
||||
/client/proc/cmd_admin_pm_context, //right-click adminPM interface,
|
||||
/client/proc/cmd_admin_pm_panel, //admin-pm list,
|
||||
/client/proc/debug_variables, //allows us to -see- the variables of any instance in the game.,
|
||||
/datum/admins/proc/PlayerNotes,
|
||||
/client/proc/admin_ghost, //allows us to ghost/reenter body at will,
|
||||
/client/proc/cmd_mod_say,
|
||||
/client/proc/cmd_event_say,
|
||||
/datum/admins/proc/show_player_info,
|
||||
/datum/admins/proc/show_traitor_panel,
|
||||
/client/proc/colorooc,
|
||||
/client/proc/player_panel_new,
|
||||
/client/proc/dsay,
|
||||
/datum/admins/proc/show_skills,
|
||||
/datum/admins/proc/show_player_panel,
|
||||
/client/proc/check_antagonists,
|
||||
/client/proc/aooc,
|
||||
/client/proc/jobbans,
|
||||
/client/proc/toggle_attack_logs,
|
||||
/client/proc/cmd_admin_subtle_message, //send an message to somebody as a 'voice in their head',
|
||||
/datum/admins/proc/paralyze_mob,
|
||||
/client/proc/cmd_admin_direct_narrate,
|
||||
/client/proc/allow_character_respawn, // Allows a ghost to respawn ,
|
||||
/datum/admins/proc/sendFax,
|
||||
/client/proc/getserverlog, //allows us to fetch server logs (diary) for other days,
|
||||
/datum/admins/proc/view_txt_log, //shows the server log (diary) for today,
|
||||
/datum/admins/proc/view_atk_log //shows the server combat-log, doesn't do anything presently,
|
||||
)
|
||||
|
||||
var/list/admin_verbs_event_manager = list(
|
||||
/client/proc/cmd_event_say,
|
||||
/client/proc/cmd_admin_pm_context,
|
||||
/client/proc/cmd_admin_pm_panel,
|
||||
/client/proc/admin_ghost,
|
||||
/datum/admins/proc/show_player_info,
|
||||
/client/proc/dsay,
|
||||
/client/proc/cmd_admin_subtle_message,
|
||||
/client/proc/debug_variables,
|
||||
/client/proc/check_antagonists,
|
||||
/client/proc/aooc,
|
||||
/datum/admins/proc/paralyze_mob,
|
||||
/client/proc/cmd_admin_direct_narrate,
|
||||
/client/proc/allow_character_respawn,
|
||||
/datum/admins/proc/sendFax,
|
||||
/client/proc/respawn_character,
|
||||
/proc/possess,
|
||||
/proc/release,
|
||||
/datum/admins/proc/change_weather,
|
||||
/datum/admins/proc/change_time,
|
||||
/client/proc/admin_give_modifier,
|
||||
/client/proc/Jump,
|
||||
/client/proc/jumptomob,
|
||||
/client/proc/jumptocoord,
|
||||
/client/proc/cmd_admin_delete,
|
||||
/datum/admins/proc/delay,
|
||||
/client/proc/Set_Holiday,
|
||||
/client/proc/make_sound,
|
||||
/client/proc/toggle_random_events,
|
||||
/datum/admins/proc/cmd_admin_dress,
|
||||
/client/proc/cmd_admin_gib_self,
|
||||
/client/proc/drop_bomb,
|
||||
/client/proc/cmd_admin_add_freeform_ai_law,
|
||||
/client/proc/cmd_admin_add_random_ai_law,
|
||||
/client/proc/make_sound,
|
||||
/client/proc/toggle_random_events,
|
||||
/client/proc/editappear,
|
||||
/client/proc/roll_dices,
|
||||
/datum/admins/proc/call_supply_drop,
|
||||
/datum/admins/proc/call_drop_pod,
|
||||
/datum/admins/proc/PlayerNotes,
|
||||
/client/proc/callproc,
|
||||
/client/proc/callproc_datum,
|
||||
/client/proc/debug_controller,
|
||||
/client/proc/show_gm_status,
|
||||
/datum/admins/proc/change_weather,
|
||||
/datum/admins/proc/change_time,
|
||||
/client/proc/admin_give_modifier,
|
||||
/datum/admins/proc/cmd_admin_dress,
|
||||
/client/proc/cmd_admin_gib_self,
|
||||
/datum/admins/proc/set_tcrystals,
|
||||
/datum/admins/proc/add_tcrystals,
|
||||
/client/proc/invisimin, //allows our mob to go invisible/visible,
|
||||
/datum/admins/proc/show_traitor_panel, //interface which shows a mob's mind.,
|
||||
/datum/admins/proc/show_game_mode, //Configuration window for the current game mode.,
|
||||
/datum/admins/proc/force_mode_latespawn, //Force the mode to try a latespawn proc,
|
||||
/datum/admins/proc/force_antag_latespawn, //Force a specific template to try a latespawn proc,
|
||||
/datum/admins/proc/announce, //priority announce something to all clients.,
|
||||
/datum/admins/proc/intercom, //send a fake intercom message, like an arrivals announcement,
|
||||
/datum/admins/proc/intercom_convo, //send a fake intercom conversation, like an ATC exchange,
|
||||
/client/proc/colorooc, //allows us to set a custom colour for everythign we say in ooc,
|
||||
/client/proc/admin_ghost, //allows us to ghost/reenter body at will,
|
||||
/client/proc/toggle_view_range, //changes how far we can see,
|
||||
/client/proc/cmd_admin_pm_context, //right-click adminPM interface,
|
||||
/client/proc/cmd_admin_pm_panel, //admin-pm list,
|
||||
/client/proc/cmd_admin_subtle_message, //send an message to somebody as a 'voice in their head',
|
||||
/client/proc/cmd_admin_delete, //delete an instance/object/mob/etc,
|
||||
/client/proc/cmd_admin_check_contents, //displays the contents of an instance,
|
||||
/client/proc/cmd_admin_check_player_logs, //checks a player's attack logs,
|
||||
/client/proc/cmd_admin_check_dialogue_logs, //checks a player's dialogue logs,
|
||||
/datum/admins/proc/access_news_network, //allows access of newscasters,
|
||||
/client/proc/jumptocoord, //we ghost and jump to a coordinate,
|
||||
/client/proc/Getmob, //teleports a mob to our location,
|
||||
/client/proc/Getkey, //teleports a mob with a certain ckey to our location,
|
||||
/client/proc/Jump,
|
||||
/client/proc/jumptokey, //allows us to jump to the location of a mob with a certain ckey,
|
||||
/client/proc/jumptomob, //allows us to jump to a specific mob,
|
||||
/client/proc/jumptoturf, //allows us to jump to a specific turf,
|
||||
/client/proc/admin_call_shuttle, //allows us to call the emergency shuttle,
|
||||
/client/proc/admin_cancel_shuttle, //allows us to cancel the emergency shuttle, sending it back to CentCom,
|
||||
/client/proc/cmd_admin_direct_narrate, //send text directly to a player with no padding. Useful for narratives and fluff-text,
|
||||
/client/proc/cmd_admin_world_narrate, //sends text to all players with no padding,
|
||||
/client/proc/cmd_admin_create_centcom_report,
|
||||
/client/proc/check_words, //displays cult-words,
|
||||
/client/proc/check_ai_laws, //shows AI and borg laws,
|
||||
/client/proc/rename_silicon, //properly renames silicons,
|
||||
/client/proc/manage_silicon_laws, // Allows viewing and editing silicon laws. ,
|
||||
/client/proc/check_antagonists,
|
||||
/client/proc/admin_memo, //admin memo system. show/delete/write. +SERVER needed to delete admin memos of others,
|
||||
/client/proc/dsay, //talk in deadchat using our ckey/fakekey,
|
||||
/client/proc/secrets,
|
||||
/client/proc/game_panel, //game panel, allows to change game-mode etc,
|
||||
/client/proc/cmd_mod_say,
|
||||
/client/proc/cmd_event_say,
|
||||
/datum/admins/proc/show_player_info,
|
||||
/client/proc/free_slot, //frees slot for chosen job,
|
||||
/client/proc/cmd_admin_change_custom_event,
|
||||
/client/proc/cmd_admin_rejuvenate,
|
||||
/client/proc/toggleghostwriters,
|
||||
/datum/admins/proc/show_skills,
|
||||
/client/proc/man_up,
|
||||
/client/proc/global_man_up,
|
||||
/client/proc/response_team, // Response Teams admin verb,
|
||||
/client/proc/trader_ship, // Trader ship admin verb,
|
||||
/client/proc/allow_character_respawn, // Allows a ghost to respawn ,
|
||||
/client/proc/event_manager_panel,
|
||||
/client/proc/aooc,
|
||||
/client/proc/change_human_appearance_admin, // Allows an admin to change the basic appearance of human-based mobs ,
|
||||
/client/proc/change_human_appearance_self, // Allows the human-based mob itself change its basic appearance ,
|
||||
/client/proc/change_security_level,
|
||||
/client/proc/makePAI,
|
||||
/client/proc/toggle_debug_logs,
|
||||
/client/proc/toggle_attack_logs,
|
||||
/datum/admins/proc/paralyze_mob,
|
||||
/client/proc/fixatmos,
|
||||
/datum/admins/proc/sendFax,
|
||||
/client/proc/despawn_player,
|
||||
/datum/admins/proc/view_feedback,
|
||||
/datum/admins/proc/capture_map,
|
||||
/client/proc/Set_Holiday,
|
||||
/datum/admins/proc/startnow,
|
||||
/datum/admins/proc/restart,
|
||||
/datum/admins/proc/delay,
|
||||
/client/proc/cmd_mod_say,
|
||||
/datum/admins/proc/immreboot,
|
||||
/client/proc/everyone_random,
|
||||
/client/proc/cmd_admin_delete, //delete an instance/object/mob/etc,
|
||||
/client/proc/cmd_debug_del_all,
|
||||
/client/proc/toggle_random_events,
|
||||
/client/proc/modify_server_news
|
||||
|
||||
)
|
||||
|
||||
/client/proc/add_admin_verbs()
|
||||
if(holder)
|
||||
verbs += admin_verbs_default
|
||||
if(holder.rights & R_BUILDMODE) verbs += /client/proc/togglebuildmodeself
|
||||
if(holder.rights & R_ADMIN) verbs += admin_verbs_admin
|
||||
if(holder.rights & R_BAN) verbs += admin_verbs_ban
|
||||
if(holder.rights & R_FUN) verbs += admin_verbs_fun
|
||||
if(holder.rights & R_SERVER) verbs += admin_verbs_server
|
||||
if(holder.rights & R_DEBUG)
|
||||
verbs += admin_verbs_debug
|
||||
if(config.debugparanoid && !(holder.rights & R_ADMIN))
|
||||
verbs.Remove(admin_verbs_paranoid_debug) //Right now it's just callproc but we can easily add others later on.
|
||||
if(holder.rights & R_POSSESS) verbs += admin_verbs_possess
|
||||
if(holder.rights & R_PERMISSIONS) verbs += admin_verbs_permissions
|
||||
if(holder.rights & R_STEALTH) verbs += /client/proc/stealth
|
||||
if(holder.rights & R_REJUVINATE) verbs += admin_verbs_rejuv
|
||||
if(holder.rights & R_SOUNDS) verbs += admin_verbs_sounds
|
||||
if(holder.rights & R_SPAWN) verbs += admin_verbs_spawn
|
||||
if(holder.rights & R_MOD) verbs += admin_verbs_mod
|
||||
if(holder.rights & R_EVENT) verbs += admin_verbs_event_manager
|
||||
|
||||
/client/proc/remove_admin_verbs()
|
||||
verbs.Remove(
|
||||
admin_verbs_default,
|
||||
/client/proc/togglebuildmodeself,
|
||||
admin_verbs_admin,
|
||||
admin_verbs_ban,
|
||||
admin_verbs_fun,
|
||||
admin_verbs_server,
|
||||
admin_verbs_debug,
|
||||
admin_verbs_possess,
|
||||
admin_verbs_permissions,
|
||||
/client/proc/stealth,
|
||||
admin_verbs_rejuv,
|
||||
admin_verbs_sounds,
|
||||
admin_verbs_spawn,
|
||||
debug_verbs
|
||||
)
|
||||
|
||||
/client/proc/hide_most_verbs()//Allows you to keep some functionality while hiding some verbs
|
||||
set name = "Adminverbs - Hide Most"
|
||||
set category = "Admin"
|
||||
@@ -534,7 +5,7 @@ var/list/admin_verbs_event_manager = list(
|
||||
verbs.Remove(/client/proc/hide_most_verbs, admin_verbs_hideable)
|
||||
verbs += /client/proc/show_verbs
|
||||
|
||||
to_chat(src, "<span class='interface'>Most of your adminverbs have been hidden.</span>")
|
||||
to_chat(src, "<span class='filter_system interface'>Most of your adminverbs have been hidden.</span>")
|
||||
feedback_add_details("admin_verb","HMV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return
|
||||
|
||||
@@ -545,7 +16,7 @@ var/list/admin_verbs_event_manager = list(
|
||||
remove_admin_verbs()
|
||||
verbs += /client/proc/show_verbs
|
||||
|
||||
to_chat(src, "<span class='interface'>Almost all of your adminverbs have been hidden.</span>")
|
||||
to_chat(src, "<span class='filter_system interface'>Almost all of your adminverbs have been hidden.</span>")
|
||||
feedback_add_details("admin_verb","TAVVH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return
|
||||
|
||||
@@ -556,7 +27,7 @@ var/list/admin_verbs_event_manager = list(
|
||||
verbs -= /client/proc/show_verbs
|
||||
add_admin_verbs()
|
||||
|
||||
to_chat(src, "<span class='interface'>All of your adminverbs are now visible.</span>")
|
||||
to_chat(src, "<span class='filter_adminlog interface'>All of your adminverbs are now visible.</span>")
|
||||
feedback_add_details("admin_verb","TAVVS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
@@ -570,13 +41,13 @@ var/list/admin_verbs_event_manager = list(
|
||||
if(ghost.can_reenter_corpse)
|
||||
ghost.reenter_corpse()
|
||||
else
|
||||
to_chat(ghost, "<font color='red'>Error: Aghost: Can't reenter corpse.</font>")
|
||||
to_chat(ghost, "<span class='filter_system warning'>Error: Aghost: Can't reenter corpse.</span>")
|
||||
return
|
||||
|
||||
feedback_add_details("admin_verb","P") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
else if(istype(mob,/mob/new_player))
|
||||
to_chat(src, "<font color='red'>Error: Aghost: Can't admin-ghost whilst in the lobby. Join or Observe first.</font>")
|
||||
to_chat(src, "<span class='filter_system warning'>Error: Aghost: Can't admin-ghost whilst in the lobby. Join or Observe first.</span>")
|
||||
else
|
||||
//ghostize
|
||||
var/mob/body = mob
|
||||
@@ -595,11 +66,11 @@ var/list/admin_verbs_event_manager = list(
|
||||
if(holder && mob)
|
||||
if(mob.invisibility == INVISIBILITY_OBSERVER)
|
||||
mob.invisibility = initial(mob.invisibility)
|
||||
to_chat(mob, "<font color='red'><b>Invisimin off. Invisibility reset.</b></font>")
|
||||
to_chat(mob, "<span class='filter_system danger'>Invisimin off. Invisibility reset.</span>")
|
||||
mob.alpha = max(mob.alpha + 100, 255)
|
||||
else
|
||||
mob.invisibility = INVISIBILITY_OBSERVER
|
||||
to_chat(mob, "<font color='blue'><b>Invisimin on. You are now as invisible as a ghost.</b></font>")
|
||||
to_chat(mob, "<span class='filter_system notice'><b>Invisimin on. You are now as invisible as a ghost.</b></span>")
|
||||
mob.alpha = max(mob.alpha - 100, 0)
|
||||
|
||||
|
||||
@@ -717,8 +188,7 @@ var/list/admin_verbs_event_manager = list(
|
||||
createStealthKey()
|
||||
if(istype(mob, /mob/new_player))
|
||||
mob.name = new_key
|
||||
log_admin("[key_name(usr)] has turned stealth mode [holder.fakekey ? "ON" : "OFF"]")
|
||||
message_admins("[key_name_admin(usr)] has turned stealth mode [holder.fakekey ? "ON" : "OFF"]", 1)
|
||||
log_and_message_admins("[key_name(usr)] has turned stealth mode [holder.fakekey ? "ON" : "OFF"]")
|
||||
feedback_add_details("admin_verb","SM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
#define MAX_WARNS 3
|
||||
@@ -729,7 +199,7 @@ var/list/admin_verbs_event_manager = list(
|
||||
|
||||
if(!warned_ckey || !istext(warned_ckey)) return
|
||||
if(warned_ckey in admin_datums)
|
||||
to_chat(usr, "<font color='red'>Error: warn(): You can't warn admins.</font>")
|
||||
to_chat(usr, "<span class='warning'>Error: warn(): You can't warn admins.</span>")
|
||||
return
|
||||
|
||||
var/datum/preferences/D
|
||||
@@ -738,14 +208,14 @@ var/list/admin_verbs_event_manager = list(
|
||||
else D = preferences_datums[warned_ckey]
|
||||
|
||||
if(!D)
|
||||
to_chat(src, "<font color='red'>Error: warn(): No such ckey found.</font>")
|
||||
to_chat(src, "<span class='warning'>Error: warn(): No such ckey found.</span>")
|
||||
return
|
||||
|
||||
if(++D.warns >= MAX_WARNS) //uh ohhhh...you'reee iiiiin trouuuubble O:)
|
||||
ban_unban_log_save("[ckey] warned [warned_ckey], resulting in a [AUTOBANTIME] minute autoban.")
|
||||
if(C)
|
||||
message_admins("[key_name_admin(src)] has warned [key_name_admin(C)] resulting in a [AUTOBANTIME] minute ban.")
|
||||
to_chat(C, "<font color='red'><BIG><B>You have been autobanned due to a warning by [ckey].</B></BIG><br>This is a temporary ban, it will be removed in [AUTOBANTIME] minutes.</font>")
|
||||
to_chat(C, "<span class='filter_system danger'><BIG>You have been autobanned due to a warning by [ckey].</BIG><br>This is a temporary ban, it will be removed in [AUTOBANTIME] minutes.</span>")
|
||||
del(C)
|
||||
else
|
||||
message_admins("[key_name_admin(src)] has warned [warned_ckey] resulting in a [AUTOBANTIME] minute ban.")
|
||||
@@ -753,7 +223,7 @@ var/list/admin_verbs_event_manager = list(
|
||||
feedback_inc("ban_warn",1)
|
||||
else
|
||||
if(C)
|
||||
to_chat(C, "<font color='red'><BIG><B>You have been formally warned by an administrator.</B></BIG><br>Further warnings will result in an autoban.</font>")
|
||||
to_chat(C, "<span class='filter_system danger'><BIG>You have been formally warned by an administrator.</BIG><br>Further warnings will result in an autoban.</span>")
|
||||
message_admins("[key_name_admin(src)] has warned [key_name_admin(C)]. They have [MAX_WARNS-D.warns] strikes remaining.")
|
||||
else
|
||||
message_admins("[key_name_admin(src)] has warned [warned_ckey] (DC). They have [MAX_WARNS-D.warns] strikes remaining.")
|
||||
@@ -875,19 +345,15 @@ var/list/admin_verbs_event_manager = list(
|
||||
if(!msg)
|
||||
return
|
||||
for (var/mob/V in hearers(mob.control_object))
|
||||
V.show_message("<b>[mob.control_object.name]</b> says: \"" + msg + "\"", 2)
|
||||
V.show_message("<span class='filter_say'><b>[mob.control_object.name]</b> says: \"[msg]\"</span>", 2)
|
||||
feedback_add_details("admin_verb","OT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/kill_air() // -- TLE
|
||||
set category = "Debug"
|
||||
set name = "Kill Air"
|
||||
set desc = "Toggle Air Processing"
|
||||
if(!SSair.can_fire)
|
||||
SSair.can_fire = TRUE
|
||||
to_chat(usr, "<b>Enabled air processing.</b>")
|
||||
else
|
||||
SSair.can_fire = FALSE
|
||||
to_chat(usr, "<b>Disabled air processing.</b>")
|
||||
SSair.can_fire = !SSair.can_fire
|
||||
to_chat(usr, "<span class='filter_system'><b>[SSair.can_fire ? "En" : "Dis"]abled air processing.</b></span>")
|
||||
feedback_add_details("admin_verb","KA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
log_admin("[key_name(usr)] used 'kill air'.")
|
||||
message_admins("<font color='blue'>[key_name_admin(usr)] used 'kill air'.</font>", 1)
|
||||
@@ -900,7 +366,7 @@ var/list/admin_verbs_event_manager = list(
|
||||
deadmin_holder.reassociate()
|
||||
log_admin("[src] re-admined themself.")
|
||||
message_admins("[src] re-admined themself.", 1)
|
||||
to_chat(src, "<span class='interface'>You now have the keys to control the planet, or atleast a small space station</span>")
|
||||
to_chat(src, "<span class='filter_system interface'>You now have the keys to control the planet, or at least a small space station</span>")
|
||||
verbs -= /client/proc/readmin_self
|
||||
|
||||
/client/proc/deadmin_self()
|
||||
@@ -912,7 +378,7 @@ var/list/admin_verbs_event_manager = list(
|
||||
log_admin("[src] deadmined themself.")
|
||||
message_admins("[src] deadmined themself.", 1)
|
||||
deadmin()
|
||||
to_chat(src, "<span class='interface'>You are now a normal player.</span>")
|
||||
to_chat(src, "<span class='filter_system interface'>You are now a normal player.</span>")
|
||||
verbs |= /client/proc/readmin_self
|
||||
feedback_add_details("admin_verb","DAS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
@@ -921,12 +387,8 @@ var/list/admin_verbs_event_manager = list(
|
||||
set category = "Server"
|
||||
if(!holder) return
|
||||
if(config)
|
||||
if(config.log_hrefs)
|
||||
config.log_hrefs = 0
|
||||
to_chat(src, "<b>Stopped logging hrefs</b>")
|
||||
else
|
||||
config.log_hrefs = 1
|
||||
to_chat(src, "<b>Started logging hrefs</b>")
|
||||
config.log_hrefs = !config.log_hrefs
|
||||
message_admins("<b>[key_name_admin(usr)] [config.log_hrefs ? "started" : "stopped"] logging hrefs</b>")
|
||||
|
||||
/client/proc/check_ai_laws()
|
||||
set name = "Check AI Laws"
|
||||
@@ -988,7 +450,7 @@ var/list/admin_verbs_event_manager = list(
|
||||
if(!H) return
|
||||
|
||||
if(!H.client)
|
||||
to_chat(usr, "Only mobs with clients can alter their own appearance.")
|
||||
to_chat(usr, "<span class='filter_arning'> Only mobs with clients can alter their own appearance.</span>")
|
||||
return
|
||||
var/datum/gender/T = gender_datums[H.get_visible_gender()]
|
||||
switch(alert("Do you wish for [H] to be allowed to select non-whitelisted races?","Alter Mob Appearance","Yes","No","Cancel"))
|
||||
@@ -1031,7 +493,7 @@ var/list/admin_verbs_event_manager = list(
|
||||
var/mob/living/carbon/human/M = input("Select mob.", "Edit Appearance") as null|anything in human_mob_list
|
||||
|
||||
if(!istype(M, /mob/living/carbon/human))
|
||||
to_chat(usr, "<font color='red'>You can only do this to humans!</font>")
|
||||
to_chat(usr, "<span class='warning'>You can only do this to humans!</span>")
|
||||
return
|
||||
switch(alert("Are you sure you wish to edit this mob's appearance? Skrell, Unathi, Tajaran can result in unintended consequences.",,"Yes","No"))
|
||||
if("No")
|
||||
@@ -1119,28 +581,16 @@ var/list/admin_verbs_event_manager = list(
|
||||
set category = "Server"
|
||||
if(!holder) return
|
||||
if(config)
|
||||
if(config.cult_ghostwriter)
|
||||
config.cult_ghostwriter = 0
|
||||
to_chat(src, "<b>Disallowed ghost writers.</b>")
|
||||
message_admins("Admin [key_name_admin(usr)] has disabled ghost writers.", 1)
|
||||
else
|
||||
config.cult_ghostwriter = 1
|
||||
to_chat(src, "<b>Enabled ghost writers.</b>")
|
||||
message_admins("Admin [key_name_admin(usr)] has enabled ghost writers.", 1)
|
||||
config.cult_ghostwriter = !config.cult_ghostwriter
|
||||
message_admins("Admin [key_name_admin(usr)] has [config.cult_ghostwriter ? "en" : "dis"]abled ghost writers.", 1)
|
||||
|
||||
/client/proc/toggledrones()
|
||||
set name = "Toggle maintenance drones"
|
||||
set category = "Server"
|
||||
if(!holder) return
|
||||
if(config)
|
||||
if(config.allow_drone_spawn)
|
||||
config.allow_drone_spawn = 0
|
||||
to_chat(src, "<b>Disallowed maint drones.</b>")
|
||||
message_admins("Admin [key_name_admin(usr)] has disabled maint drones.", 1)
|
||||
else
|
||||
config.allow_drone_spawn = 1
|
||||
to_chat(src, "<b>Enabled maint drones.</b>")
|
||||
message_admins("Admin [key_name_admin(usr)] has enabled maint drones.", 1)
|
||||
config.allow_drone_spawn = !config.allow_drone_spawn
|
||||
message_admins("Admin [key_name_admin(usr)] has [config.allow_drone_spawn ? "en" : "dis"]abled maintenance drones.", 1)
|
||||
|
||||
/client/proc/man_up(mob/T as mob in mob_list)
|
||||
set category = "Fun"
|
||||
@@ -1149,8 +599,8 @@ var/list/admin_verbs_event_manager = list(
|
||||
|
||||
if(alert("Are you sure you want to tell them to man up?","Confirmation","Deal with it","No")=="No") return
|
||||
|
||||
to_chat(T, "<span class='notice'><b><font size=3>Man up and deal with it.</font></b></span>")
|
||||
to_chat(T, "<span class='notice'>Move along.</span>")
|
||||
to_chat(T, "<span class='filter_system notice'><b><font size=3>Man up and deal with it.</font></b></span>")
|
||||
to_chat(T, "<span class='filter_system notice'>Move along.</span>")
|
||||
|
||||
log_admin("[key_name(usr)] told [key_name(T)] to man up and deal with it.")
|
||||
message_admins("<font color='blue'>[key_name_admin(usr)] told [key_name(T)] to man up and deal with it.</font>", 1)
|
||||
@@ -1163,7 +613,7 @@ var/list/admin_verbs_event_manager = list(
|
||||
if(alert("Are you sure you want to tell the whole server up?","Confirmation","Deal with it","No")=="No") return
|
||||
|
||||
for (var/mob/T as mob in mob_list)
|
||||
to_chat(T, "<br><center><span class='notice'><b><font size=4>Man up.<br> Deal with it.</font></b><br>Move along.</span></center><br>")
|
||||
to_chat(T, "<br><center><span class='filter_system notice'><b><font size=4>Man up.<br> Deal with it.</font></b><br>Move along.</span></center><br>")
|
||||
T << 'sound/voice/ManUp1.ogg'
|
||||
|
||||
log_admin("[key_name(usr)] told everyone to man up and deal with it.")
|
||||
|
||||
@@ -39,12 +39,12 @@
|
||||
testname = replacetext(testname, "()", "")
|
||||
|
||||
if(targetselected && !hascall(target,testname))
|
||||
to_chat(usr, "<font color='red'>Error: callproc(): type [target.type] has no proc named [procname].</font>")
|
||||
to_chat(usr, "<span class='filter_adminlog'><font color='red'>Error: callproc(): type [target.type] has no proc named [procname].</font></span>")
|
||||
return
|
||||
else
|
||||
var/procpath = text2path(procname)
|
||||
if (!procpath)
|
||||
to_chat(usr, "<font color='red'>Error: callproc(): proc [procname] does not exist. (Did you forget the /proc/ part?)</font>")
|
||||
to_chat(usr, "<span class='filter_adminlog'><font color='red'>Error: callproc(): proc [procname] does not exist. (Did you forget the /proc/ part?)</font></span>")
|
||||
return
|
||||
var/list/lst = get_callproc_args()
|
||||
if(!lst)
|
||||
@@ -52,7 +52,7 @@
|
||||
|
||||
if(targetselected)
|
||||
if(!target)
|
||||
to_chat(usr, "<font color='red'>Error: callproc(): owner of proc no longer exists.</font>")
|
||||
to_chat(usr, "<span class='filter_adminlog'><font color='red'>Error: callproc(): owner of proc no longer exists.</font></span>")
|
||||
return
|
||||
var/msg = "[key_name(src)] called [target]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"]."
|
||||
log_admin(msg)
|
||||
@@ -84,11 +84,11 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention)
|
||||
|
||||
/proc/WrapAdminProcCall(datum/target, procname, list/arguments)
|
||||
if(target && procname == "Del")
|
||||
to_chat(usr, "Calling Del() is not allowed")
|
||||
to_chat(usr, "<span class='filter_adminlog'>Calling Del() is not allowed</span>")
|
||||
return
|
||||
|
||||
if(target != GLOBAL_PROC && !target.CanProcCall(procname))
|
||||
to_chat(usr, "Proccall on [target.type]/proc/[procname] is disallowed!")
|
||||
to_chat(usr, "<span class='filter_adminlog'>Proccall on [target.type]/proc/[procname] is disallowed!</span>")
|
||||
return
|
||||
var/current_caller = GLOB.AdminProcCaller
|
||||
var/ckey = usr ? usr.client.ckey : GLOB.AdminProcCaller
|
||||
@@ -140,7 +140,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention)
|
||||
if(!procname)
|
||||
return
|
||||
if(!hascall(A,procname))
|
||||
to_chat(usr, "<font color='red'>Error: callproc_datum(): type [A.type] has no proc named [procname].</font>")
|
||||
to_chat(usr, "<span class='filter_adminlog'><font color='red'>Error: callproc_datum(): type [A.type] has no proc named [procname].</font></span>")
|
||||
return
|
||||
var/list/lst = get_callproc_args()
|
||||
if(!lst)
|
||||
|
||||
@@ -76,7 +76,7 @@ NOTE: It checks usr by default. Supply the "user" argument if you wish to check
|
||||
return FALSE
|
||||
if(!C.holder)
|
||||
if(show_msg)
|
||||
to_chat(C, "<span class='warning'>Error: You are not an admin.</span>")
|
||||
to_chat(C, "<span class='filter_adminlog warning'>Error: You are not an admin.</span>")
|
||||
return FALSE
|
||||
|
||||
if(rights_required)
|
||||
@@ -84,7 +84,7 @@ NOTE: It checks usr by default. Supply the "user" argument if you wish to check
|
||||
return TRUE
|
||||
else
|
||||
if(show_msg)
|
||||
to_chat(C, "<span class='warning'>Error: You do not have sufficient rights to do that. You require one of the following flags:[rights2text(rights_required," ")].</span>")
|
||||
to_chat(C, "<span class='filter_adminlog warning'>Error: You do not have sufficient rights to do that. You require one of the following flags:[rights2text(rights_required," ")].</span>")
|
||||
return FALSE
|
||||
else
|
||||
return TRUE
|
||||
@@ -98,7 +98,7 @@ NOTE: It checks usr by default. Supply the "user" argument if you wish to check
|
||||
if(usr.client.holder.rights != other.holder.rights)
|
||||
if( (usr.client.holder.rights & other.holder.rights) == other.holder.rights )
|
||||
return 1 //we have all the rights they have and more
|
||||
to_chat(usr, "<font color='red'>Error: Cannot proceed. They have more or equal rights to us.</font>")
|
||||
to_chat(usr, "<span class='filter_adminlog warning'>Error: Cannot proceed. They have more or equal rights to us.</span>")
|
||||
return 0
|
||||
|
||||
/client/proc/mark_datum(datum/D)
|
||||
|
||||
@@ -7,13 +7,13 @@
|
||||
return
|
||||
|
||||
if(isnull(tx) || isnull(ty) || isnull(tz) || isnull(range))
|
||||
to_chat(usr, "Capture Map Part, captures part of a map using camara like rendering.")
|
||||
to_chat(usr, "Usage: Capture-Map-Part target_x_cord target_y_cord target_z_cord range")
|
||||
to_chat(usr, "Target coordinates specify bottom left corner of the capture, range defines render distance to opposite corner.")
|
||||
to_chat(usr, "<span class='filter_notice'>Capture Map Part, captures part of a map using camara like rendering.</span>")
|
||||
to_chat(usr, "<span class='filter_notice'>Usage: Capture-Map-Part target_x_cord target_y_cord target_z_cord range.</span>")
|
||||
to_chat(usr, "<span class='filter_notice'>Target coordinates specify bottom left corner of the capture, range defines render distance to opposite corner.</span>")
|
||||
return
|
||||
|
||||
if(range > 32 || range <= 0)
|
||||
to_chat(usr, "Capturing range is incorrect, it must be within 1-32.")
|
||||
to_chat(usr, "<span class='filter_notice'>Capturing range is incorrect, it must be within 1-32.</span>")
|
||||
return
|
||||
|
||||
if(locate(tx,ty,tz))
|
||||
@@ -53,7 +53,7 @@
|
||||
cap.Blend(img, blendMode2iconMode(A.blend_mode), A.pixel_x + xoff, A.pixel_y + yoff)
|
||||
|
||||
var/file_name = "map_capture_x[tx]_y[ty]_z[tz]_r[range].png"
|
||||
to_chat(usr, "Saved capture in cache as [file_name].")
|
||||
to_chat(usr, "<span class='filter_notice'>Saved capture in cache as [file_name].</span>")
|
||||
usr << browse_rsc(cap, file_name)
|
||||
else
|
||||
to_chat(usr, "Target coordinates are incorrect.")
|
||||
to_chat(usr, "<span class='filter_notice'>Target coordinates are incorrect.</span>")
|
||||
|
||||
@@ -51,13 +51,13 @@
|
||||
return
|
||||
|
||||
if(!usr.client.holder || !(usr.client.holder.rights & R_PERMISSIONS))
|
||||
to_chat(usr, "<font color='red'>You do not have permission to do this!</font>")
|
||||
to_chat(usr, "<span class='filter_adminlog'><font color='red'>You do not have permission to do this!</font></span>")
|
||||
return
|
||||
|
||||
establish_db_connection()
|
||||
|
||||
if(!dbcon.IsConnected())
|
||||
to_chat(usr, "<font color='red'>Failed to establish database connection</font>")
|
||||
to_chat(usr, "<span class='filter_adminlog'><font color='red'>Failed to establish database connection</font></span>")
|
||||
return
|
||||
|
||||
if(!adm_ckey || !new_rank)
|
||||
@@ -85,14 +85,14 @@
|
||||
insert_query.Execute()
|
||||
var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO `test`.`erro_admin_log` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Added new admin [adm_ckey] to rank [new_rank]');")
|
||||
log_query.Execute()
|
||||
to_chat(usr, "<font color='blue'>New admin added.</font>")
|
||||
to_chat(usr, "<span class='filter_adminlog'><font color='blue'>New admin added.</font></span>")
|
||||
else
|
||||
if(!isnull(admin_id) && isnum(admin_id))
|
||||
var/DBQuery/insert_query = dbcon.NewQuery("UPDATE `erro_admin` SET rank = '[new_rank]' WHERE id = [admin_id]")
|
||||
insert_query.Execute()
|
||||
var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO `test`.`erro_admin_log` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Edited the rank of [adm_ckey] to [new_rank]');")
|
||||
log_query.Execute()
|
||||
to_chat(usr, "<font color='blue'>Admin rank changed.</font>")
|
||||
to_chat(usr, "<span class='filter_adminlog'><font color='blue'>Admin rank changed.</font></span>")
|
||||
|
||||
/datum/admins/proc/log_admin_permission_modification(var/adm_ckey, var/new_permission)
|
||||
if(config.admin_legacy_system) return
|
||||
@@ -101,12 +101,12 @@
|
||||
return
|
||||
|
||||
if(!usr.client.holder || !(usr.client.holder.rights & R_PERMISSIONS))
|
||||
to_chat(usr, "<font color='red'>You do not have permission to do this!</font>")
|
||||
to_chat(usr, "<span class='filter_adminlog'><font color='red'>You do not have permission to do this!</font></span>")
|
||||
return
|
||||
|
||||
establish_db_connection()
|
||||
if(!dbcon.IsConnected())
|
||||
to_chat(usr, "<font color='red'>Failed to establish database connection</font>")
|
||||
to_chat(usr, "<span class='filter_adminlog'><font color='red'>Failed to establish database connection</font></span>")
|
||||
return
|
||||
|
||||
if(!adm_ckey || !new_permission)
|
||||
@@ -140,10 +140,10 @@
|
||||
insert_query.Execute()
|
||||
var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO `test`.`erro_admin_log` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Removed permission [rights2text(new_permission)] (flag = [new_permission]) to admin [adm_ckey]');")
|
||||
log_query.Execute()
|
||||
to_chat(usr, "<font color='blue'>Permission removed.</font>")
|
||||
to_chat(usr, "<span class='filter_adminlog'><font color='blue'>Permission removed.</font></span>")
|
||||
else //This admin doesn't have this permission, so we are adding it.
|
||||
var/DBQuery/insert_query = dbcon.NewQuery("UPDATE `erro_admin` SET flags = '[admin_rights | new_permission]' WHERE id = [admin_id]")
|
||||
insert_query.Execute()
|
||||
var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO `test`.`erro_admin_log` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Added permission [rights2text(new_permission)] (flag = [new_permission]) to admin [adm_ckey]')")
|
||||
log_query.Execute()
|
||||
to_chat(usr, "<font color='blue'>Permission added.</font>")
|
||||
to_chat(usr, "<span class='filter_adminlog'><font color='blue'>Permission added.</font></span>")
|
||||
@@ -63,23 +63,23 @@
|
||||
switch(bantype)
|
||||
if(BANTYPE_PERMA)
|
||||
if(!banckey || !banreason)
|
||||
to_chat(usr, "Not enough parameters (Requires ckey and reason)")
|
||||
to_chat(usr, "<span class='filter_adminlog'>Not enough parameters (Requires ckey and reason)</span>")
|
||||
return
|
||||
banduration = null
|
||||
banjob = null
|
||||
if(BANTYPE_TEMP)
|
||||
if(!banckey || !banreason || !banduration)
|
||||
to_chat(usr, "Not enough parameters (Requires ckey, reason and duration)")
|
||||
to_chat(usr, "<span class='filter_adminlog'>Not enough parameters (Requires ckey, reason and duration)</span>")
|
||||
return
|
||||
banjob = null
|
||||
if(BANTYPE_JOB_PERMA)
|
||||
if(!banckey || !banreason || !banjob)
|
||||
to_chat(usr, "Not enough parameters (Requires ckey, reason and job)")
|
||||
to_chat(usr, "<span class='filter_adminlog'>Not enough parameters (Requires ckey, reason and job)</span>")
|
||||
return
|
||||
banduration = null
|
||||
if(BANTYPE_JOB_TEMP)
|
||||
if(!banckey || !banreason || !banjob || !banduration)
|
||||
to_chat(usr, "Not enough parameters (Requires ckey, reason and job)")
|
||||
to_chat(usr, "<span class='filter_adminlog'>Not enough parameters (Requires ckey, reason and job)</span>")
|
||||
return
|
||||
|
||||
var/mob/playermob
|
||||
@@ -116,14 +116,14 @@
|
||||
var/new_ckey = ckey(input(usr,"New admin's ckey","Admin ckey", null) as text|null)
|
||||
if(!new_ckey) return
|
||||
if(new_ckey in admin_datums)
|
||||
to_chat(usr, "<font color='red'>Error: Topic 'editrights': [new_ckey] is already an admin</font>")
|
||||
to_chat(usr, "<span class='filter_adminlog warning'>Error: Topic 'editrights': [new_ckey] is already an admin</span>")
|
||||
return
|
||||
adm_ckey = new_ckey
|
||||
task = "rank"
|
||||
else if(task != "show")
|
||||
adm_ckey = ckey(href_list["ckey"])
|
||||
if(!adm_ckey)
|
||||
to_chat(usr, "<font color='red'>Error: Topic 'editrights': No valid ckey</font>")
|
||||
to_chat(usr, "<span class='filter_adminlog warning'>Error: Topic 'editrights': No valid ckey</span>")
|
||||
return
|
||||
|
||||
var/datum/admins/D = admin_datums[adm_ckey]
|
||||
@@ -155,7 +155,7 @@
|
||||
if(config.admin_legacy_system)
|
||||
new_rank = ckeyEx(new_rank)
|
||||
if(!new_rank)
|
||||
to_chat(usr, "<font color='red'>Error: Topic 'editrights': Invalid rank</font>")
|
||||
to_chat(usr, "<span class='filter_adminlog warning'>Error: Topic 'editrights': Invalid rank</span>")
|
||||
return
|
||||
if(config.admin_legacy_system)
|
||||
if(admin_ranks.len)
|
||||
@@ -264,7 +264,7 @@
|
||||
|
||||
var/mob/M = locate(href_list["mob"])
|
||||
if(!ismob(M))
|
||||
to_chat(usr, "This can only be used on instances of type /mob")
|
||||
to_chat(usr, "<span class='filter_adminlog'>This can only be used on instances of type /mob</span>")
|
||||
return
|
||||
|
||||
var/delmob = 0
|
||||
@@ -370,14 +370,14 @@
|
||||
|
||||
var/mob/M = locate(href_list["jobban2"])
|
||||
if(!ismob(M))
|
||||
to_chat(usr, "This can only be used on instances of type /mob")
|
||||
to_chat(usr, "<span class='filter_adminlog'>This can only be used on instances of type /mob</span>")
|
||||
return
|
||||
|
||||
if(!M.ckey) //sanity
|
||||
to_chat(usr, "This mob has no ckey")
|
||||
to_chat(usr, "<span class='filter_adminlog'>This mob has no ckey</span>")
|
||||
return
|
||||
if(!job_master)
|
||||
to_chat(usr, "Job Master has not been setup!")
|
||||
to_chat(usr, "<span class='filter_adminlog'>Job Master has not been setup!</span>")
|
||||
return
|
||||
|
||||
var/dat = ""
|
||||
@@ -610,16 +610,16 @@
|
||||
//JOBBAN'S INNARDS
|
||||
else if(href_list["jobban3"])
|
||||
if(!check_rights(R_MOD,0) && !check_rights(R_ADMIN,0))
|
||||
to_chat(usr, "<span class='warning'>You do not have the appropriate permissions to add job bans!</span>")
|
||||
to_chat(usr, "<span class='filter_adminlog warning'>You do not have the appropriate permissions to add job bans!</span>")
|
||||
return
|
||||
|
||||
if(check_rights(R_MOD,0) && !check_rights(R_ADMIN,0) && !config.mods_can_job_tempban) // If mod and tempban disabled
|
||||
to_chat(usr, "<span class='warning'>Mod jobbanning is disabled!</span>")
|
||||
to_chat(usr, "<span class='filter_adminlog warning'>Mod jobbanning is disabled!</span>")
|
||||
return
|
||||
|
||||
var/mob/M = locate(href_list["jobban4"])
|
||||
if(!ismob(M))
|
||||
to_chat(usr, "This can only be used on instances of type /mob")
|
||||
to_chat(usr, "<span class='filter_adminlog'>This can only be used on instances of type /mob</span>")
|
||||
return
|
||||
|
||||
if(M != usr) //we can jobban ourselves
|
||||
@@ -628,7 +628,7 @@
|
||||
return
|
||||
|
||||
if(!job_master)
|
||||
to_chat(usr, "Job Master has not been setup!")
|
||||
to_chat(usr, "<span class='filter_adminlog'>Job Master has not been setup!</span>")
|
||||
return
|
||||
|
||||
//get jobs for department if specified, otherwise just returnt he one job in a list.
|
||||
@@ -697,16 +697,16 @@
|
||||
switch(alert("Temporary Ban?",,"Yes","No", "Cancel"))
|
||||
if("Yes")
|
||||
if(!check_rights(R_MOD,0) && !check_rights(R_BAN, 0))
|
||||
to_chat(usr, "<span class='warning'> You Cannot issue temporary job-bans!</span>")
|
||||
to_chat(usr, "<span class='filter_adminlog warning'> You Cannot issue temporary job-bans!</span>")
|
||||
return
|
||||
if(config.ban_legacy_system)
|
||||
to_chat(usr, "<font color='red'>Your server is using the legacy banning system, which does not support temporary job bans. Consider upgrading. Aborting ban.</font>")
|
||||
to_chat(usr, "<span class='filter_adminlog warning'>Your server is using the legacy banning system, which does not support temporary job bans. Consider upgrading. Aborting ban.</span>")
|
||||
return
|
||||
var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num|null
|
||||
if(!mins)
|
||||
return
|
||||
if(check_rights(R_MOD, 0) && !check_rights(R_BAN, 0) && mins > config.mod_job_tempban_max)
|
||||
to_chat(usr, "<span class='warning'> Moderators can only job tempban up to [config.mod_job_tempban_max] minutes!</span>")
|
||||
to_chat(usr, "<span class='filter_adminlog warning'> Moderators can only job tempban up to [config.mod_job_tempban_max] minutes!</span>")
|
||||
return
|
||||
var/reason = sanitize(input(usr,"Reason?","Please State Reason","") as text|null)
|
||||
if(!reason)
|
||||
@@ -726,9 +726,9 @@
|
||||
msg += ", [job]"
|
||||
notes_add(M.ckey, "Banned from [msg] - [reason]", usr)
|
||||
message_admins("<font color='blue'>[key_name_admin(usr)] banned [key_name_admin(M)] from [msg] for [mins] minutes</font>", 1)
|
||||
to_chat(M, "<font color='red'><BIG><B>You have been jobbanned by [usr.client.ckey] from: [msg].</B></BIG></font>")
|
||||
to_chat(M, "<font color='red'><B>The reason is: [reason]</B></font>")
|
||||
to_chat(M, "<font color='red'>This jobban will be lifted in [mins] minutes.</font>")
|
||||
to_chat(M, "<span class='filter_system'><font color='red'><BIG><B>You have been jobbanned by [usr.client.ckey] from: [msg].</B></BIG></font></span>")
|
||||
to_chat(M, "<span class='filter_system'><font color='red'><B>The reason is: [reason]</B></font></span>")
|
||||
to_chat(M, "<span class='filter_system'><font color='red'>This jobban will be lifted in [mins] minutes.</font></span>")
|
||||
href_list["jobban2"] = 1 // lets it fall through and refresh
|
||||
return 1
|
||||
if("No")
|
||||
@@ -747,9 +747,9 @@
|
||||
else msg += ", [job]"
|
||||
notes_add(M.ckey, "Banned from [msg] - [reason]", usr)
|
||||
message_admins("<font color='blue'>[key_name_admin(usr)] banned [key_name_admin(M)] from [msg]</font>", 1)
|
||||
to_chat(M, "<font color='red'><BIG><B>You have been jobbanned by [usr.client.ckey] from: [msg].</B></BIG></font>")
|
||||
to_chat(M, "<font color='red'><B>The reason is: [reason]</B></font>")
|
||||
to_chat(M, "<font color='red'>Jobban can be lifted only upon request.</font>")
|
||||
to_chat(M, "<span class='filter_system'><font color='red'><BIG><B>You have been jobbanned by [usr.client.ckey] from: [msg].</B></BIG></font></span>")
|
||||
to_chat(M, "<span class='filter_system'><font color='red'><B>The reason is: [reason]</B></font></span>")
|
||||
to_chat(M, "<span class='filter_system'><font color='red'>Jobban can be lifted only upon request.</font></span>")
|
||||
href_list["jobban2"] = 1 // lets it fall through and refresh
|
||||
return 1
|
||||
if("Cancel")
|
||||
@@ -759,7 +759,7 @@
|
||||
//all jobs in joblist are banned already OR we didn't give a reason (implying they shouldn't be banned)
|
||||
if(joblist.len) //at least 1 banned job exists in joblist so we have stuff to unban.
|
||||
if(!config.ban_legacy_system)
|
||||
to_chat(usr, "Unfortunately, database based unbanning cannot be done through this panel")
|
||||
to_chat(usr, "<span class='filter_adminlog'>Unfortunately, database based unbanning cannot be done through this panel</span>")
|
||||
DB_ban_panel(M.ckey)
|
||||
return
|
||||
var/msg
|
||||
@@ -780,7 +780,7 @@
|
||||
continue
|
||||
if(msg)
|
||||
message_admins("<font color='blue'>[key_name_admin(usr)] unbanned [key_name_admin(M)] from [msg]</font>", 1)
|
||||
to_chat(M, "<font color='red'><BIG><B>You have been un-jobbanned by [usr.client.ckey] from [msg].</B></BIG></font>")
|
||||
to_chat(M, "<span class='filter_system danger'><BIG>You have been un-jobbanned by [usr.client.ckey] from [msg].</BIG></span>")
|
||||
href_list["jobban2"] = 1 // lets it fall through and refresh
|
||||
return 1
|
||||
return 0 //we didn't do anything!
|
||||
@@ -794,7 +794,7 @@
|
||||
if(!reason)
|
||||
return
|
||||
|
||||
to_chat(M, span("critical", "You have been kicked from the server: [reason]"))
|
||||
to_chat(M, span("filter_system critical", "You have been kicked from the server: [reason]"))
|
||||
log_admin("[key_name(usr)] booted [key_name(M)] for reason: '[reason]'.")
|
||||
message_admins("<font color='blue'>[key_name_admin(usr)] booted [key_name_admin(M)] for reason '[reason]'.</font>", 1)
|
||||
//M.client = null
|
||||
@@ -844,15 +844,15 @@
|
||||
AddBan(M.ckey, M.computer_id, reason, usr.ckey, 1, mins)
|
||||
ban_unban_log_save("[usr.client.ckey] has banned [M.ckey]. - Reason: [reason] - This will be removed in [mins] minutes.")
|
||||
notes_add(M.ckey,"[usr.client.ckey] has banned [M.ckey]. - Reason: [reason] - This will be removed in [mins] minutes.",usr)
|
||||
to_chat(M, "<font color='red'><BIG><B>You have been banned by [usr.client.ckey].\nReason: [reason].</B></BIG></font>")
|
||||
to_chat(M, "<font color='red'>This is a temporary ban, it will be removed in [mins] minutes.</font>")
|
||||
to_chat(M, "<span class='filter_system critical'>You have been banned by [usr.client.ckey].\nReason: [reason].</span>")
|
||||
to_chat(M, "<span class='filter_system warning'>This is a temporary ban, it will be removed in [mins] minutes.</span>")
|
||||
feedback_inc("ban_tmp",1)
|
||||
DB_ban_record(BANTYPE_TEMP, M, mins, reason)
|
||||
feedback_inc("ban_tmp_mins",mins)
|
||||
if(config.banappeals)
|
||||
to_chat(M, "<font color='red'>To try to resolve this matter head to [config.banappeals]</font>")
|
||||
to_chat(M, "<span class='filter_system warning'>To try to resolve this matter head to [config.banappeals]</span>")
|
||||
else
|
||||
to_chat(M, "<font color='red'>No ban appeals URL has been set.</font>")
|
||||
to_chat(M, "<span class='filter_system warning'>No ban appeals URL has been set.</span>")
|
||||
log_admin("[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.")
|
||||
message_admins("<font color='blue'>[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.</font>")
|
||||
var/datum/admin_help/AH = M.client ? M.client.current_ticket : null
|
||||
@@ -871,12 +871,12 @@
|
||||
AddBan(M.ckey, M.computer_id, reason, usr.ckey, 0, 0, M.lastKnownIP)
|
||||
if("No")
|
||||
AddBan(M.ckey, M.computer_id, reason, usr.ckey, 0, 0)
|
||||
to_chat(M, "<font color='red'><BIG><B>You have been banned by [usr.client.ckey].\nReason: [reason].</B></BIG></font>")
|
||||
to_chat(M, "<font color='red'>This is a permanent ban.</font>")
|
||||
to_chat(M, "<span class='filter_system critical'>You have been banned by [usr.client.ckey].\nReason: [reason].</span>")
|
||||
to_chat(M, "<span class='filter_system warning'>This is a permanent ban.</span>")
|
||||
if(config.banappeals)
|
||||
to_chat(M, "<font color='red'>To try to resolve this matter head to [config.banappeals]</font>")
|
||||
to_chat(M, "<span class='filter_system warning'>To try to resolve this matter head to [config.banappeals]</span>")
|
||||
else
|
||||
to_chat(M, "<font color='red'>No ban appeals URL has been set.</font>")
|
||||
to_chat(M, "<span class='filter_system warning'>No ban appeals URL has been set.</span>")
|
||||
ban_unban_log_save("[usr.client.ckey] has permabanned [M.ckey]. - Reason: [reason] - This is a permanent ban.")
|
||||
notes_add(M.ckey,"[usr.client.ckey] has permabanned [M.ckey]. - Reason: [reason] - This is a permanent ban.",usr)
|
||||
log_admin("[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis is a permanent ban.")
|
||||
@@ -962,7 +962,7 @@
|
||||
|
||||
var/mob/living/carbon/human/H = locate(href_list["monkeyone"])
|
||||
if(!istype(H))
|
||||
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
|
||||
to_chat(usr, "<span class='filter_adminlog'>This can only be used on instances of type /mob/living/carbon/human</span>")
|
||||
return
|
||||
|
||||
log_admin("[key_name(usr)] attempting to monkeyize [key_name(H)]")
|
||||
@@ -974,7 +974,7 @@
|
||||
|
||||
var/mob/living/carbon/human/H = locate(href_list["corgione"])
|
||||
if(!istype(H))
|
||||
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
|
||||
to_chat(usr, "<span class='filter_adminlog'>This can only be used on instances of type /mob/living/carbon/human</span>")
|
||||
return
|
||||
|
||||
log_admin("[key_name(usr)] attempting to corgize [key_name(H)]")
|
||||
@@ -986,7 +986,7 @@
|
||||
|
||||
var/mob/M = locate(href_list["forcespeech"])
|
||||
if(!ismob(M))
|
||||
to_chat(usr, "this can only be used on instances of type /mob")
|
||||
to_chat(usr, "<span class='filter_adminlog'>this can only be used on instances of type /mob</span>")
|
||||
|
||||
var/speech = input("What will [key_name(M)] say?.", "Force speech", "")// Don't need to sanitize, since it does that in say(), we also trust our admins.
|
||||
if(!speech) return
|
||||
@@ -1003,10 +1003,10 @@
|
||||
|
||||
var/mob/M = locate(href_list["sendtoprison"])
|
||||
if(!ismob(M))
|
||||
to_chat(usr, "This can only be used on instances of type /mob")
|
||||
to_chat(usr, "<span class='filter_adminlog'>This can only be used on instances of type /mob</span>")
|
||||
return
|
||||
if(istype(M, /mob/living/silicon/ai))
|
||||
to_chat(usr, "This cannot be used on instances of type /mob/living/silicon/ai")
|
||||
to_chat(usr, "<span class='filter_adminlog'>This cannot be used on instances of type /mob/living/silicon/ai</span>")
|
||||
return
|
||||
|
||||
var/turf/prison_cell = pick(prisonwarp)
|
||||
@@ -1031,7 +1031,7 @@
|
||||
prisoner.equip_to_slot_or_del(new /obj/item/clothing/under/color/prison(prisoner), slot_w_uniform)
|
||||
prisoner.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(prisoner), slot_shoes)
|
||||
|
||||
to_chat(M, "<font color='red'>You have been sent to the prison station!</font>")
|
||||
to_chat(M, "<span class='filter_system warning'>You have been sent to the prison station!</span>")
|
||||
log_admin("[key_name(usr)] sent [key_name(M)] to the prison station.")
|
||||
message_admins("<font color='blue'>[key_name_admin(usr)] sent [key_name_admin(M)] to the prison station.</font>", 1)
|
||||
|
||||
@@ -1041,11 +1041,11 @@
|
||||
|
||||
var/mob/M = locate(href_list["sendbacktolobby"])
|
||||
if(!isobserver(M))
|
||||
to_chat(usr, "<span class='notice'>You can only send ghost players back to the Lobby.</span>")
|
||||
to_chat(usr, "<span class='filter_adminlog notice'>You can only send ghost players back to the Lobby.</span>")
|
||||
return
|
||||
|
||||
if(!M.client)
|
||||
to_chat(usr, "<span class='warning'>[M] doesn't seem to have an active client.</span>")
|
||||
to_chat(usr, "<span class='filter_adminlog warning'>[M] doesn't seem to have an active client.</span>")
|
||||
return
|
||||
|
||||
if(alert(usr, "Send [key_name(M)] back to Lobby?", "Message", "Yes", "No") != "Yes")
|
||||
@@ -1066,10 +1066,10 @@
|
||||
|
||||
var/mob/M = locate(href_list["tdome1"])
|
||||
if(!ismob(M))
|
||||
to_chat(usr, "This can only be used on instances of type /mob")
|
||||
to_chat(usr, "<span class='filter_adminlog'>This can only be used on instances of type /mob</span>")
|
||||
return
|
||||
if(istype(M, /mob/living/silicon/ai))
|
||||
to_chat(usr, "This cannot be used on instances of type /mob/living/silicon/ai")
|
||||
to_chat(usr, "<span class='filter_adminlog'>This cannot be used on instances of type /mob/living/silicon/ai</span>")
|
||||
return
|
||||
|
||||
for(var/obj/item/I in M)
|
||||
@@ -1079,7 +1079,7 @@
|
||||
sleep(5)
|
||||
M.loc = pick(tdome1)
|
||||
spawn(50)
|
||||
to_chat(M, "<font color='blue'>You have been sent to the Thunderdome.</font>")
|
||||
to_chat(M, "<span class='filter_system notice'>You have been sent to the Thunderdome.</span>")
|
||||
log_admin("[key_name(usr)] has sent [key_name(M)] to the thunderdome. (Team 1)")
|
||||
message_admins("[key_name_admin(usr)] has sent [key_name_admin(M)] to the thunderdome. (Team 1)", 1)
|
||||
|
||||
@@ -1091,10 +1091,10 @@
|
||||
|
||||
var/mob/M = locate(href_list["tdome2"])
|
||||
if(!ismob(M))
|
||||
to_chat(usr, "This can only be used on instances of type /mob")
|
||||
to_chat(usr, "<span class='filter_adminlog'>This can only be used on instances of type /mob</span>")
|
||||
return
|
||||
if(istype(M, /mob/living/silicon/ai))
|
||||
to_chat(usr, "This cannot be used on instances of type /mob/living/silicon/ai")
|
||||
to_chat(usr, "<span class='filter_adminlog'>This cannot be used on instances of type /mob/living/silicon/ai</span>")
|
||||
return
|
||||
|
||||
for(var/obj/item/I in M)
|
||||
@@ -1104,7 +1104,7 @@
|
||||
sleep(5)
|
||||
M.loc = pick(tdome2)
|
||||
spawn(50)
|
||||
to_chat(M, "<font color='blue'>You have been sent to the Thunderdome.</font>")
|
||||
to_chat(M, "<span class='filter_system notice'>You have been sent to the Thunderdome.</span>")
|
||||
log_admin("[key_name(usr)] has sent [key_name(M)] to the thunderdome. (Team 2)")
|
||||
message_admins("[key_name_admin(usr)] has sent [key_name_admin(M)] to the thunderdome. (Team 2)", 1)
|
||||
|
||||
@@ -1116,17 +1116,17 @@
|
||||
|
||||
var/mob/M = locate(href_list["tdomeadmin"])
|
||||
if(!ismob(M))
|
||||
to_chat(usr, "This can only be used on instances of type /mob")
|
||||
to_chat(usr, "<span class='filter_adminlog'>This can only be used on instances of type /mob</span>")
|
||||
return
|
||||
if(istype(M, /mob/living/silicon/ai))
|
||||
to_chat(usr, "This cannot be used on instances of type /mob/living/silicon/ai")
|
||||
to_chat(usr, "<span class='filter_adminlog'>This cannot be used on instances of type /mob/living/silicon/ai</span>")
|
||||
return
|
||||
|
||||
M.Paralyse(5)
|
||||
sleep(5)
|
||||
M.loc = pick(tdomeadmin)
|
||||
spawn(50)
|
||||
to_chat(M, "<font color='blue'>You have been sent to the Thunderdome.</font>")
|
||||
to_chat(M, "<span class='filter_system notice'>You have been sent to the Thunderdome.</span>")
|
||||
log_admin("[key_name(usr)] has sent [key_name(M)] to the thunderdome. (Admin.)")
|
||||
message_admins("[key_name_admin(usr)] has sent [key_name_admin(M)] to the thunderdome. (Admin.)", 1)
|
||||
|
||||
@@ -1138,10 +1138,10 @@
|
||||
|
||||
var/mob/M = locate(href_list["tdomeobserve"])
|
||||
if(!ismob(M))
|
||||
to_chat(usr, "This can only be used on instances of type /mob")
|
||||
to_chat(usr, "<span class='filter_adminlog'>This can only be used on instances of type /mob</span>")
|
||||
return
|
||||
if(istype(M, /mob/living/silicon/ai))
|
||||
to_chat(usr, "This cannot be used on instances of type /mob/living/silicon/ai")
|
||||
to_chat(usr, "<span class='filter_adminlog'>This cannot be used on instances of type /mob/living/silicon/ai</span>")
|
||||
return
|
||||
|
||||
for(var/obj/item/I in M)
|
||||
@@ -1155,7 +1155,7 @@
|
||||
sleep(5)
|
||||
M.loc = pick(tdomeobserve)
|
||||
spawn(50)
|
||||
to_chat(M, "<font color='blue'>You have been sent to the Thunderdome.</font>")
|
||||
to_chat(M, "<span class='filter_system notice'>You have been sent to the Thunderdome.</span>")
|
||||
log_admin("[key_name(usr)] has sent [key_name(M)] to the thunderdome. (Observer.)")
|
||||
message_admins("[key_name_admin(usr)] has sent [key_name_admin(M)] to the thunderdome. (Observer.)", 1)
|
||||
|
||||
@@ -1164,7 +1164,7 @@
|
||||
|
||||
var/mob/living/L = locate(href_list["revive"])
|
||||
if(!istype(L))
|
||||
to_chat(usr, "This can only be used on instances of type /mob/living")
|
||||
to_chat(usr, "<span class='filter_adminlog'>This can only be used on instances of type /mob/living</span>")
|
||||
return
|
||||
|
||||
if(config.allow_admin_rev)
|
||||
@@ -1172,14 +1172,14 @@
|
||||
message_admins("<font color='red'>Admin [key_name_admin(usr)] healed / revived [key_name_admin(L)]!</font>", 1)
|
||||
log_admin("[key_name(usr)] healed / Rrvived [key_name(L)]")
|
||||
else
|
||||
to_chat(usr, "Admin Rejuvinates have been disabled")
|
||||
to_chat(usr, "<span class='filter_adminlog filter_warning'>Admin Rejuvinates have been disabled</span>")
|
||||
|
||||
else if(href_list["makeai"])
|
||||
if(!check_rights(R_SPAWN)) return
|
||||
|
||||
var/mob/living/carbon/human/H = locate(href_list["makeai"])
|
||||
if(!istype(H))
|
||||
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
|
||||
to_chat(usr, "<span class='filter_adminlog'>This can only be used on instances of type /mob/living/carbon/human</span>")
|
||||
return
|
||||
|
||||
message_admins("<font color='red'>Admin [key_name_admin(usr)] AIized [key_name_admin(H)]!</font>", 1)
|
||||
@@ -1191,7 +1191,7 @@
|
||||
|
||||
var/mob/living/carbon/human/H = locate(href_list["makealien"])
|
||||
if(!istype(H))
|
||||
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
|
||||
to_chat(usr, "<span class='filter_adminlog'>This can only be used on instances of type /mob/living/carbon/human</span>")
|
||||
return
|
||||
|
||||
usr.client.cmd_admin_alienize(H)
|
||||
@@ -1201,7 +1201,7 @@
|
||||
|
||||
var/mob/living/carbon/human/H = locate(href_list["makerobot"])
|
||||
if(!istype(H))
|
||||
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
|
||||
to_chat(usr, "<span class='filter_adminlog'>This can only be used on instances of type /mob/living/carbon/human</span>")
|
||||
return
|
||||
|
||||
usr.client.cmd_admin_robotize(H)
|
||||
@@ -1211,7 +1211,7 @@
|
||||
|
||||
var/mob/M = locate(href_list["makeanimal"])
|
||||
if(istype(M, /mob/new_player))
|
||||
to_chat(usr, "This cannot be used on instances of type /mob/new_player")
|
||||
to_chat(usr, "<span class='filter_adminlog'>This cannot be used on instances of type /mob/new_player</span>")
|
||||
return
|
||||
|
||||
usr.client.cmd_admin_animalize(M)
|
||||
@@ -1230,7 +1230,7 @@
|
||||
|
||||
var/mob/living/carbon/human/H = locate(href_list["togmutate"])
|
||||
if(!istype(H))
|
||||
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
|
||||
to_chat(usr, "<span class='filter_adminlog'>This can only be used on instances of type /mob/living/carbon/human</span>")
|
||||
return
|
||||
var/block=text2num(href_list["block"])
|
||||
usr.client.cmd_admin_toggle_block(H,block)
|
||||
@@ -1273,7 +1273,7 @@
|
||||
for(var/client/X in admins)
|
||||
if((R_ADMIN|R_MOD|R_EVENT|R_SERVER) & X.holder.rights)
|
||||
to_chat(X, take_msg)
|
||||
to_chat(M, "<span class='notice'><b>Your adminhelp is being attended to by [usr.client]. Thanks for your patience!</b></span>")
|
||||
to_chat(M, "<span class='filter_pm notice'><b>Your adminhelp is being attended to by [usr.client]. Thanks for your patience!</b></span>")
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>Unable to locate mob.</span>")
|
||||
|
||||
@@ -1295,7 +1295,7 @@
|
||||
else if(href_list["adminmoreinfo"])
|
||||
var/mob/M = locate(href_list["adminmoreinfo"])
|
||||
if(!ismob(M))
|
||||
to_chat(usr, "This can only be used on instances of type /mob")
|
||||
to_chat(usr, "<span class='filter_adminlog'>This can only be used on instances of type /mob</span>")
|
||||
return
|
||||
|
||||
var/location_description = ""
|
||||
@@ -1335,19 +1335,20 @@
|
||||
if(MALE,FEMALE) gender_description = "[M.gender]"
|
||||
else gender_description = "<font color='red'><b>[M.gender]</b></font>"
|
||||
|
||||
to_chat(src.owner, "<b>Info about [M.name]:</b> ")
|
||||
to_chat(src.owner, "Mob type = [M.type]; Gender = [gender_description] Damage = [health_description]")
|
||||
to_chat(src.owner, "Name = <b>[M.name]</b>; Real_name = [M.real_name]; Mind_name = [M.mind?"[M.mind.name]":""]; Key = <b>[M.key]</b>;")
|
||||
to_chat(src.owner, "Location = [location_description];")
|
||||
to_chat(src.owner, "[special_role_description]")
|
||||
to_chat(src.owner, "(<a href='?src=\ref[usr];priv_msg=\ref[M]'>PM</a>) (<A HREF='?src=\ref[src];adminplayeropts=\ref[M]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[M]'>VV</A>) (<A HREF='?src=\ref[src];subtlemessage=\ref[M]'>SM</A>) ([admin_jump_link(M, src)]) (<A HREF='?src=\ref[src];secretsadmin=check_antagonist'>CA</A>)")
|
||||
to_chat(src.owner, "<span class='filter_adminlog'><b>Info about [M.name]:</b><br>\
|
||||
Mob type = [M.type]; Gender = [gender_description] Damage = [health_description]<br>\
|
||||
Name = <b>[M.name]</b>; Real_name = [M.real_name]; Mind_name = [M.mind?"[M.mind.name]":""]; Key = <b>[M.key]</b>;<br>\
|
||||
Location = [location_description];<br>\
|
||||
[special_role_description]<br>\
|
||||
(<a href='?src=\ref[usr];priv_msg=\ref[M]'>PM</a>) (<A HREF='?src=\ref[src];adminplayeropts=\ref[M]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[M]'>VV</A>) \
|
||||
(<A HREF='?src=\ref[src];subtlemessage=\ref[M]'>SM</A>) ([admin_jump_link(M, src)]) (<A HREF='?src=\ref[src];secretsadmin=check_antagonist'>CA</A>)</span>")
|
||||
|
||||
else if(href_list["adminspawncookie"])
|
||||
if(!check_rights(R_ADMIN|R_FUN|R_EVENT)) return
|
||||
|
||||
var/mob/living/carbon/human/H = locate(href_list["adminspawncookie"])
|
||||
if(!ishuman(H))
|
||||
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
|
||||
to_chat(usr, "<span class='filter_adminlog'>This can only be used on instances of type /mob/living/carbon/human</span>")
|
||||
return
|
||||
|
||||
H.equip_to_slot_or_del( new /obj/item/weapon/reagent_containers/food/snacks/cookie(H), slot_l_hand )
|
||||
@@ -1364,14 +1365,14 @@
|
||||
log_admin("[key_name(H)] got their cookie, spawned by [key_name(src.owner)]")
|
||||
message_admins("[key_name(H)] got their cookie, spawned by [key_name(src.owner)]")
|
||||
feedback_inc("admin_cookies_spawned",1)
|
||||
to_chat(H, "<font color='blue'>Your prayers have been answered!! You received the <b>best cookie</b>!</font>")
|
||||
to_chat(H, "<span class='notice'>Your prayers have been answered!! You received the <b>best cookie</b>!</span>")
|
||||
|
||||
else if(href_list["adminsmite"])
|
||||
if(!check_rights(R_ADMIN|R_FUN|R_EVENT)) return
|
||||
|
||||
var/mob/living/carbon/human/H = locate(href_list["adminsmite"])
|
||||
if(!ishuman(H))
|
||||
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
|
||||
to_chat(usr, "<span class='filter_adminlog'>This can only be used on instances of type /mob/living/carbon/human</span>")
|
||||
return
|
||||
|
||||
owner.smite(H)
|
||||
@@ -1381,7 +1382,7 @@
|
||||
|
||||
var/mob/living/M = locate(href_list["BlueSpaceArtillery"])
|
||||
if(!isliving(M))
|
||||
to_chat(usr, "This can only be used on instances of type /mob/living")
|
||||
to_chat(usr, "<span class='filter_adminlog'>This can only be used on instances of type /mob/living</span>")
|
||||
return
|
||||
|
||||
if(alert(src.owner, "Are you sure you wish to hit [key_name(M)] with Blue Space Artillery?", "Confirm Firing?" , "Yes" , "No") != "Yes")
|
||||
@@ -1392,14 +1393,14 @@
|
||||
else if(href_list["CentComReply"])
|
||||
var/mob/living/L = locate(href_list["CentComReply"])
|
||||
if(!istype(L))
|
||||
to_chat(usr, "This can only be used on instances of type /mob/living/")
|
||||
to_chat(usr, "<span class='filter_adminlog'>This can only be used on instances of type /mob/living/</span>")
|
||||
return
|
||||
|
||||
if(L.can_centcom_reply())
|
||||
var/input = sanitize(input(src.owner, "Please enter a message to reply to [key_name(L)] via their headset.","Outgoing message from CentCom", ""))
|
||||
if(!input) return
|
||||
|
||||
to_chat(src.owner, "You sent [input] to [L] via a secure channel.")
|
||||
to_chat(src.owner, "<span class='filter_adminlog'>You sent [input] to [L] via a secure channel.</span>")
|
||||
log_admin("[src.owner] replied to [key_name(L)]'s CentCom message with the message [input].")
|
||||
message_admins("[src.owner] replied to [key_name(L)]'s CentCom message with: \"[input]\"")
|
||||
if(!isAI(L))
|
||||
@@ -1409,24 +1410,25 @@
|
||||
to_chat(L, "<span class='notice'>[input]</span>")
|
||||
to_chat(L, "<span class='info'>Message ends.</span>")
|
||||
else
|
||||
to_chat(src.owner, "The person you are trying to contact does not have functional radio equipment.")
|
||||
to_chat(src.owner, "<span class='filter_adminlog'>The person you are trying to contact does not have functional radio equipment.</span>")
|
||||
|
||||
|
||||
else if(href_list["SyndicateReply"])
|
||||
var/mob/living/carbon/human/H = locate(href_list["SyndicateReply"])
|
||||
if(!istype(H))
|
||||
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human")
|
||||
to_chat(usr, "<span class='filter_adminlog'>This can only be used on instances of type /mob/living/carbon/human</span>")
|
||||
return
|
||||
if(!istype(H.l_ear, /obj/item/device/radio/headset) && !istype(H.r_ear, /obj/item/device/radio/headset))
|
||||
to_chat(usr, "The person you are trying to contact is not wearing a headset")
|
||||
to_chat(usr, "<span class='filter_adminlog'>The person you are trying to contact is not wearing a headset</span>")
|
||||
return
|
||||
|
||||
var/input = sanitize(input(src.owner, "Please enter a message to reply to [key_name(H)] via their headset.","Outgoing message from a shadowy figure...", ""))
|
||||
if(!input) return
|
||||
|
||||
to_chat(src.owner, "You sent [input] to [H] via a secure channel.")
|
||||
to_chat(src.owner, "<span class='filter_adminlog'>You sent [input] to [H] via a secure channel.</span>")
|
||||
log_admin("[src.owner] replied to [key_name(H)]'s illegal message with the message [input].")
|
||||
to_chat(H, "You hear something crackle in your headset for a moment before a voice speaks. \"Please stand by for a message from your benefactor. Message as follows, agent. <b>\"[input]\"</b> Message ends.\"")
|
||||
to_chat(H, "<span class='filter_notice'>You hear something crackle in your headset for a moment before a voice speaks. \
|
||||
\"Please stand by for a message from your benefactor. Message as follows, agent. <b>\"[input]\"</b> Message ends.\"</span>")
|
||||
|
||||
else if(href_list["AdminFaxView"])
|
||||
var/obj/item/fax = locate(href_list["AdminFaxView"])
|
||||
@@ -1448,7 +1450,7 @@
|
||||
|
||||
usr << browse(data, "window=[B.name]")
|
||||
else
|
||||
to_chat(usr, "<font color='red'>The faxed item is not viewable. This is probably a bug, and should be reported on the tracker: [fax.type]</font>")
|
||||
to_chat(usr, "<span class='warning'>The faxed item is not viewable. This is probably a bug, and should be reported on the tracker: [fax.type]</span>")
|
||||
|
||||
else if (href_list["AdminFaxViewPage"])
|
||||
var/page = text2num(href_list["AdminFaxViewPage"])
|
||||
@@ -1520,7 +1522,7 @@
|
||||
|
||||
var/mob/M = locate(href_list["traitor"])
|
||||
if(!ismob(M))
|
||||
to_chat(usr, "This can only be used on instances of type /mob.")
|
||||
to_chat(usr, "<span class='filter_adminlog'>This can only be used on instances of type /mob.</span>")
|
||||
return
|
||||
show_traitor_panel(M)
|
||||
|
||||
@@ -1544,7 +1546,7 @@
|
||||
if(!check_rights(R_SPAWN)) return
|
||||
|
||||
if(!config.allow_admin_spawning)
|
||||
to_chat(usr, "Spawning of items is not allowed.")
|
||||
to_chat(usr, "<span class='filter_adminlog'>Spawning of items is not allowed.</span>")
|
||||
return
|
||||
|
||||
var/atom/loc = usr.loc
|
||||
@@ -1604,24 +1606,24 @@
|
||||
where = "onfloor"
|
||||
|
||||
if( where == "inhand" )
|
||||
to_chat(usr, "Support for inhand not available yet. Will spawn on floor.")
|
||||
to_chat(usr, "<span class='filter_adminlog'>Support for inhand not available yet. Will spawn on floor.</span>")
|
||||
where = "onfloor"
|
||||
|
||||
if ( where == "inhand" ) //Can only give when human or monkey
|
||||
if ( !( ishuman(usr) || issmall(usr) ) )
|
||||
to_chat(usr, "Can only spawn in hand when you're a human or a monkey.")
|
||||
to_chat(usr, "<span class='filter_adminlog'>Can only spawn in hand when you're a human or a monkey.</span>")
|
||||
where = "onfloor"
|
||||
else if ( usr.get_active_hand() )
|
||||
to_chat(usr, "Your active hand is full. Spawning on floor.")
|
||||
to_chat(usr, "<span class='filter_adminlog'>Your active hand is full. Spawning on floor.</span>")
|
||||
where = "onfloor"
|
||||
|
||||
if ( where == "inmarked" )
|
||||
if ( !marked_datum )
|
||||
to_chat(usr, "You don't have any object marked. Abandoning spawn.")
|
||||
to_chat(usr, "<span class='filter_adminlog'>You don't have any object marked. Abandoning spawn.</span>")
|
||||
return
|
||||
else
|
||||
if ( !istype(marked_datum,/atom) )
|
||||
to_chat(usr, "The object you have marked cannot be used as a target. Target must be of type /atom. Abandoning spawn.")
|
||||
to_chat(usr, "<span class='filter_adminlog'>The object you have marked cannot be used as a target. Target must be of type /atom. Abandoning spawn.</span>")
|
||||
return
|
||||
|
||||
var/atom/target //Where the object will be spawned
|
||||
@@ -1873,17 +1875,17 @@
|
||||
if(check_rights(R_SPAWN|R_EVENT))
|
||||
var/mob/M = locate(href_list["toglang"])
|
||||
if(!istype(M))
|
||||
to_chat(usr, "[M] is illegal type, must be /mob!")
|
||||
to_chat(usr, "<span class='filter_adminlog'>[M] is illegal type, must be /mob!</span>")
|
||||
return
|
||||
var/lang2toggle = href_list["lang"]
|
||||
var/datum/language/L = GLOB.all_languages[lang2toggle]
|
||||
|
||||
if(L in M.languages)
|
||||
if(!M.remove_language(lang2toggle))
|
||||
to_chat(usr, "Failed to remove language '[lang2toggle]' from \the [M]!")
|
||||
to_chat(usr, "<span class='filter_adminlog'>Failed to remove language '[lang2toggle]' from \the [M]!</span>")
|
||||
else
|
||||
if(!M.add_language(lang2toggle))
|
||||
to_chat(usr, "Failed to add language '[lang2toggle]' from \the [M]!")
|
||||
to_chat(usr, "<span class='filter_adminlog'>Failed to add language '[lang2toggle]' from \the [M]!</span>")
|
||||
|
||||
show_player_panel(M)
|
||||
|
||||
|
||||
@@ -31,6 +31,6 @@
|
||||
var/F = file("broken_icons.txt")
|
||||
fdel(F)
|
||||
F << text
|
||||
to_world("Completeled successfully and written to [F]")
|
||||
to_world("<span class='filter_system'>Completeled successfully and written to [F]</span>")
|
||||
|
||||
|
||||
|
||||
@@ -267,7 +267,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
|
||||
|
||||
AddInteraction("<font color='purple'>Reopened by [key_name_admin(usr)]</font>")
|
||||
if(initiator)
|
||||
to_chat(initiator, "<font color='purple'>Ticket [TicketHref("#[id]")] was reopened by [key_name(usr,FALSE,FALSE)].</font>")
|
||||
to_chat(initiator, "<span class='filter_adminlog'><font color='purple'>Ticket [TicketHref("#[id]")] was reopened by [key_name(usr,FALSE,FALSE)].</font></span>")
|
||||
var/msg = "<span class='adminhelp'>Ticket [TicketHref("#[id]")] reopened by [key_name_admin(usr)].</span>"
|
||||
message_admins(msg)
|
||||
log_admin(msg)
|
||||
@@ -291,9 +291,9 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
|
||||
RemoveActive()
|
||||
state = AHELP_CLOSED
|
||||
GLOB.ahelp_tickets.ListInsert(src)
|
||||
AddInteraction("<font color='red'>Closed by [key_name_admin(usr)].</font>")
|
||||
AddInteraction("<span class='filter_adminlog'><font color='red'>Closed by [key_name_admin(usr)].</font></span>")
|
||||
if(initiator)
|
||||
to_chat(initiator, "<font color='red'>Ticket [TicketHref("#[id]")] was closed by [key_name(usr,FALSE,FALSE)].</font>")
|
||||
to_chat(initiator, "<span class='filter_adminlog'><font color='red'>Ticket [TicketHref("#[id]")] was closed by [key_name(usr,FALSE,FALSE)].</font></span>")
|
||||
if(!silent)
|
||||
feedback_inc("ahelp_close")
|
||||
var/msg = "Ticket [TicketHref("#[id]")] closed by [key_name_admin(usr)]."
|
||||
@@ -308,9 +308,9 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
|
||||
state = AHELP_RESOLVED
|
||||
GLOB.ahelp_tickets.ListInsert(src)
|
||||
|
||||
AddInteraction("<font color='green'>Resolved by [key_name_admin(usr)].</font>")
|
||||
AddInteraction("<span class='filter_adminlog'><font color='green'>Resolved by [key_name_admin(usr)].</font></span>")
|
||||
if(initiator)
|
||||
to_chat(initiator, "<font color='green'>Ticket [TicketHref("#[id]")] was marked resolved by [key_name(usr,FALSE,FALSE)].</font>")
|
||||
to_chat(initiator, "<span class='filter_adminlog'><font color='green'>Ticket [TicketHref("#[id]")] was marked resolved by [key_name(usr,FALSE,FALSE)].</font></span>")
|
||||
if(!silent)
|
||||
feedback_inc("ahelp_resolve")
|
||||
var/msg = "Ticket [TicketHref("#[id]")] resolved by [key_name_admin(usr)]"
|
||||
@@ -326,9 +326,9 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
|
||||
if(initiator.is_preference_enabled(/datum/client_preference/holder/play_adminhelp_ping))
|
||||
initiator << 'sound/effects/adminhelp.ogg'
|
||||
|
||||
to_chat(initiator, "<font color='red' size='4'><b>- AdminHelp Rejected! -</b></font>")
|
||||
to_chat(initiator, "<font color='red'><b>Your admin help was rejected.</b></font>")
|
||||
to_chat(initiator, "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.")
|
||||
to_chat(initiator, "<span class='filter_pm'><font color='red' size='4'><b>- AdminHelp Rejected! -</b></font><br>\
|
||||
<font color='red'><b>Your admin help was rejected.</b></font><br>\
|
||||
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.</span>")
|
||||
|
||||
feedback_inc("ahelp_reject")
|
||||
var/msg = "Ticket [TicketHref("#[id]")] rejected by [key_name_admin(usr)]"
|
||||
@@ -342,9 +342,9 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
|
||||
if(state != AHELP_ACTIVE)
|
||||
return
|
||||
|
||||
var/msg = "<font color='red' size='4'><b>- AdminHelp marked as IC issue! -</b></font><br>"
|
||||
var/msg = "<span class='filter_pm'><font color='red' size='4'><b>- AdminHelp marked as IC issue! -</b></font><br>"
|
||||
msg += "<font color='red'><b>This is something that can be solved ICly, and does not currently require staff intervention.</b></font><br>"
|
||||
msg += "<font color='red'>Your AdminHelp may also be unanswerable due to ongoing events.</font>"
|
||||
msg += "<font color='red'>Your AdminHelp may also be unanswerable due to ongoing events.</font></span>"
|
||||
|
||||
if(initiator)
|
||||
to_chat(initiator, msg)
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
A.on_mob_jump()
|
||||
A.loc = T
|
||||
else
|
||||
to_chat(A, "This mob is not located in the game world.")
|
||||
to_chat(A, "<span class='filter_adminlog'>This mob is not located in the game world.</span>")
|
||||
else
|
||||
alert("Admin jumping disabled")
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
keys += M.client
|
||||
var/selection = input("Please, select a player!", "Admin Jumping", null, null) as null|anything in sortKey(keys)
|
||||
if(!selection)
|
||||
to_chat(src, "No keys found.")
|
||||
to_chat(src, "<span class='filter_adminlog'>No keys found.</span>")
|
||||
return
|
||||
var/mob/M = selection:mob
|
||||
log_admin("[key_name(usr)] jumped to [key_name(M)]")
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
set name = "Check Piping"
|
||||
set background = 1
|
||||
if(!src.holder)
|
||||
to_chat(src, "Only administrators may use this command.")
|
||||
return
|
||||
|
||||
feedback_add_details("admin_verb","CP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
if(alert("WARNING: This command should not be run on a live server. Do you want to continue?", "Check Piping", "No", "Yes") == "No")
|
||||
@@ -14,17 +14,17 @@
|
||||
//all plumbing - yes, some things might get stated twice, doesn't matter.
|
||||
for (var/obj/machinery/atmospherics/plumbing in machines)
|
||||
if (plumbing.nodealert)
|
||||
to_chat(usr, "Unconnected [plumbing.name] located at [plumbing.x],[plumbing.y],[plumbing.z] ([get_area(plumbing.loc)])")
|
||||
to_chat(usr, "<span class='filter_adminlog warning'>Unconnected [plumbing.name] located at [plumbing.x],[plumbing.y],[plumbing.z] ([get_area(plumbing.loc)])</span>")
|
||||
|
||||
//Manifolds
|
||||
for (var/obj/machinery/atmospherics/pipe/manifold/pipe in machines)
|
||||
if (!pipe.node1 || !pipe.node2 || !pipe.node3)
|
||||
to_chat(usr, "Unconnected [pipe.name] located at [pipe.x],[pipe.y],[pipe.z] ([get_area(pipe.loc)])")
|
||||
to_chat(usr, "<span class='filter_adminlog warning'>Unconnected [pipe.name] located at [pipe.x],[pipe.y],[pipe.z] ([get_area(pipe.loc)])</span>")
|
||||
|
||||
//Pipes
|
||||
for (var/obj/machinery/atmospherics/pipe/simple/pipe in machines)
|
||||
if (!pipe.node1 || !pipe.node2)
|
||||
to_chat(usr, "Unconnected [pipe.name] located at [pipe.x],[pipe.y],[pipe.z] ([get_area(pipe.loc)])")
|
||||
to_chat(usr, "<span class='filter_adminlog warning'>Unconnected [pipe.name] located at [pipe.x],[pipe.y],[pipe.z] ([get_area(pipe.loc)])</span>")
|
||||
|
||||
to_chat(usr, "Checking for overlapping pipes...")
|
||||
next_turf:
|
||||
@@ -36,7 +36,7 @@
|
||||
for(var/connect_type in pipe.connect_types)
|
||||
connect_types[connect_type] += 1
|
||||
if(connect_types[1] > 1 || connect_types[2] > 1 || connect_types[3] > 1)
|
||||
to_chat(usr, "Overlapping pipe ([pipe.name]) located at [T.x],[T.y],[T.z] ([get_area(T)])")
|
||||
to_chat(usr, "<span class='filter_adminlog warning'>Overlapping pipe ([pipe.name]) located at [T.x],[T.y],[T.z] ([get_area(T)])</span>")
|
||||
continue next_turf
|
||||
to_chat(usr, "Done")
|
||||
|
||||
@@ -44,17 +44,17 @@
|
||||
set category = "Mapping"
|
||||
set name = "Check Power"
|
||||
if(!src.holder)
|
||||
to_chat(src, "Only administrators may use this command.")
|
||||
return
|
||||
|
||||
feedback_add_details("admin_verb","CPOW") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
for (var/datum/powernet/PN in powernets)
|
||||
if (!PN.nodes || !PN.nodes.len)
|
||||
if(PN.cables && (PN.cables.len > 1))
|
||||
var/obj/structure/cable/C = PN.cables[1]
|
||||
to_chat(usr, "Powernet with no nodes! (number [PN.number]) - example cable at [C.x], [C.y], [C.z] in area [get_area(C.loc)]")
|
||||
to_chat(usr, "<span class='filter_adminlog'>Powernet with no nodes! (number [PN.number]) - example cable at [C.x], [C.y], [C.z] in area [get_area(C.loc)]</span>")
|
||||
|
||||
if (!PN.cables || (PN.cables.len < 10))
|
||||
if(PN.cables && (PN.cables.len > 1))
|
||||
var/obj/structure/cable/C = PN.cables[1]
|
||||
to_chat(usr, "Powernet with fewer than 10 cables! (number [PN.number]) - example cable at [C.x], [C.y], [C.z] in area [get_area(C.loc)]")
|
||||
to_chat(usr, "<span class='filter_adminlog'>Powernet with fewer than 10 cables! (number [PN.number]) - example cable at [C.x], [C.y], [C.z] in area [get_area(C.loc)]</span>")
|
||||
@@ -88,85 +88,83 @@
|
||||
switch(master.cl.buildmode)
|
||||
|
||||
if(BUILDMODE_BASIC)
|
||||
to_chat(usr, "<span class='notice'>***********************************************************</span>")
|
||||
to_chat(usr, "<span class='notice'>Left Mouse Button = Construct / Upgrade</span>")
|
||||
to_chat(usr, "<span class='notice'>Right Mouse Button = Deconstruct / Delete / Downgrade</span>")
|
||||
to_chat(usr, "<span class='notice'>Left Mouse Button + ctrl = R-Window</span>")
|
||||
to_chat(usr, "<span class='notice'>Left Mouse Button + alt = Airlock</span>")
|
||||
to_chat(usr, "")
|
||||
to_chat(usr, "<span class='notice'>Use the button in the upper left corner to</span>")
|
||||
to_chat(usr, "<span class='notice'>change the direction of built objects.</span>")
|
||||
to_chat(usr, "<span class='notice'>***********************************************************</span>")
|
||||
|
||||
to_chat(usr, "<span class='notice'>***********************************************************<br>\
|
||||
Left Mouse Button = Construct / Upgrade<br>\
|
||||
Right Mouse Button = Deconstruct / Delete / Downgrade<br>\
|
||||
Left Mouse Button + ctrl = R-Window<br>\
|
||||
Left Mouse Button + alt = Airlock<br><br>\
|
||||
Use the button in the upper left corner to<br>\
|
||||
change the direction of built objects.<br>\
|
||||
***********************************************************</span>")
|
||||
|
||||
if(BUILDMODE_ADVANCED)
|
||||
to_chat(usr, "<span class='notice'>***********************************************************</span>")
|
||||
to_chat(usr, "<span class='notice'>Right Mouse Button on buildmode button = Set object type</span>")
|
||||
to_chat(usr, "<span class='notice'>Middle Mouse Button on buildmode button= On/Off object type saying</span>")
|
||||
to_chat(usr, "<span class='notice'>Middle Mouse Button on turf/obj = Capture object type</span>")
|
||||
to_chat(usr, "<span class='notice'>Left Mouse Button on turf/obj = Place objects</span>")
|
||||
to_chat(usr, "<span class='notice'>Right Mouse Button = Delete objects</span>")
|
||||
to_chat(usr, "<span class='notice'>Mouse Button + ctrl = Copy object type</span>")
|
||||
to_chat(usr, "")
|
||||
to_chat(usr, "<span class='notice'>Use the button in the upper left corner to</span>")
|
||||
to_chat(usr, "<span class='notice'>change the direction of built objects.</span>")
|
||||
to_chat(usr, "<span class='notice'>***********************************************************</span>")
|
||||
|
||||
to_chat(usr, "<span class='notice'>***********************************************************<br>\
|
||||
Right Mouse Button on buildmode button = Set object type<br>\
|
||||
Middle Mouse Button on buildmode button= On/Off object type saying<br>\
|
||||
Middle Mouse Button on turf/obj = Capture object type<br>\
|
||||
Left Mouse Button on turf/obj = Place objects<br>\
|
||||
Right Mouse Button = Delete objects<br>\
|
||||
Mouse Button + ctrl = Copy object type<br><br>\
|
||||
Use the button in the upper left corner to<br>\
|
||||
change the direction of built objects.<br>\
|
||||
***********************************************************</span>")
|
||||
|
||||
if(BUILDMODE_EDIT)
|
||||
to_chat(usr, "<span class='notice'>***********************************************************</span>")
|
||||
to_chat(usr, "<span class='notice'>Right Mouse Button on buildmode button = Select var(type) & value</span>")
|
||||
to_chat(usr, "<span class='notice'>Left Mouse Button on turf/obj/mob = Set var(type) & value</span>")
|
||||
to_chat(usr, "<span class='notice'>Right Mouse Button on turf/obj/mob = Reset var's value</span>")
|
||||
to_chat(usr, "<span class='notice'>***********************************************************</span>")
|
||||
|
||||
to_chat(usr, "<span class='notice'>***********************************************************<br>\
|
||||
Right Mouse Button on buildmode button = Select var(type) & value<br>\
|
||||
Left Mouse Button on turf/obj/mob = Set var(type) & value<br>\
|
||||
Right Mouse Button on turf/obj/mob = Reset var's value<br>\
|
||||
***********************************************************</span>")
|
||||
|
||||
if(BUILDMODE_THROW)
|
||||
to_chat(usr, "<span class='notice'>***********************************************************</span>")
|
||||
to_chat(usr, "<span class='notice'>Left Mouse Button on turf/obj/mob = Select</span>")
|
||||
to_chat(usr, "<span class='notice'>Right Mouse Button on turf/obj/mob = Throw</span>")
|
||||
to_chat(usr, "<span class='notice'>***********************************************************</span>")
|
||||
|
||||
to_chat(usr, "<span class='notice'>***********************************************************<br>\
|
||||
Left Mouse Button on turf/obj/mob = Select<br>\
|
||||
Right Mouse Button on turf/obj/mob = Throw<br>\
|
||||
***********************************************************</span>")
|
||||
|
||||
if(BUILDMODE_ROOM)
|
||||
to_chat(usr, "<span class='notice'>***********************************************************</span>")
|
||||
to_chat(usr, "<span class='notice'>Left Mouse Button on turf = Select as point A</span>")
|
||||
to_chat(usr, "<span class='notice'>Right Mouse Button on turf = Select as point B</span>")
|
||||
to_chat(usr, "<span class='notice'>Right Mouse Button on buildmode button = Change floor/wall type</span>")
|
||||
to_chat(usr, "<span class='notice'>***********************************************************</span>")
|
||||
|
||||
to_chat(usr, "<span class='notice'>***********************************************************<br>\
|
||||
Left Mouse Button on turf = Select as point A<br>\
|
||||
Right Mouse Button on turf = Select as point B<br>\
|
||||
Right Mouse Button on buildmode button = Change floor/wall type<br>\
|
||||
***********************************************************</span>")
|
||||
|
||||
if(BUILDMODE_LADDER)
|
||||
to_chat(usr, "<span class='notice'>***********************************************************</span>")
|
||||
to_chat(usr, "<span class='notice'>Left Mouse Button on turf = Set as upper ladder loc</span>")
|
||||
to_chat(usr, "<span class='notice'>Right Mouse Button on turf = Set as lower ladder loc</span>")
|
||||
to_chat(usr, "<span class='notice'>***********************************************************</span>")
|
||||
|
||||
to_chat(usr, "<span class='notice'>***********************************************************<br>\
|
||||
Left Mouse Button on turf = Set as upper ladder loc<br>\
|
||||
Right Mouse Button on turf = Set as lower ladder loc<br>\
|
||||
***********************************************************</span>")
|
||||
|
||||
if(BUILDMODE_CONTENTS)
|
||||
to_chat(usr, "<span class='notice'>***********************************************************</span>")
|
||||
to_chat(usr, "<span class='notice'>Left Mouse Button on turf/obj/mob = Select</span>")
|
||||
to_chat(usr, "<span class='notice'>Right Mouse Button on turf/obj/mob = Move into selection</span>")
|
||||
to_chat(usr, "<span class='notice'>***********************************************************</span>")
|
||||
|
||||
to_chat(usr, "<span class='notice'>***********************************************************<br>\
|
||||
Left Mouse Button on turf/obj/mob = Select<br>\
|
||||
Right Mouse Button on turf/obj/mob = Move into selection<br>\
|
||||
***********************************************************</span>")
|
||||
|
||||
if(BUILDMODE_LIGHTS)
|
||||
to_chat(usr, "<span class='notice'>***********************************************************</span>")
|
||||
to_chat(usr, "<span class='notice'>Left Mouse Button on turf/obj/mob = Make it glow</span>")
|
||||
to_chat(usr, "<span class='notice'>Right Mouse Button on turf/obj/mob = Reset glowing</span>")
|
||||
to_chat(usr, "<span class='notice'>Right Mouse Button on buildmode button = Change glow properties</span>")
|
||||
to_chat(usr, "<span class='notice'>***********************************************************</span>")
|
||||
|
||||
to_chat(usr, "<span class='notice'>***********************************************************<br>\
|
||||
Left Mouse Button on turf/obj/mob = Make it glow<br>\
|
||||
Right Mouse Button on turf/obj/mob = Reset glowing<br>\
|
||||
Right Mouse Button on buildmode button = Change glow properties<br>\
|
||||
***********************************************************</span>")
|
||||
|
||||
if(BUILDMODE_AI)
|
||||
to_chat(usr, "<span class='notice'>***********************************************************</span>")
|
||||
to_chat(usr, "<span class='notice'>Left Mouse Button drag box = Select only mobs in box</span>")
|
||||
to_chat(usr, "<span class='notice'>Left Mouse Button drag box + shift = Select additional mobs in area</span>")
|
||||
to_chat(usr, "<span class='notice'>Left Mouse Button on non-mob = Deselect all mobs</span>")
|
||||
to_chat(usr, "<span class='notice'>Left Mouse Button on AI mob = Select/Deselect mob</span>")
|
||||
to_chat(usr, "<span class='notice'>Left Mouse Button + alt on AI mob = Toggle hostility on mob</span>")
|
||||
to_chat(usr, "<span class='notice'>Left Mouse Button + shift on AI mob = Toggle AI (also resets)</span>")
|
||||
to_chat(usr, "<span class='notice'>Left Mouse Button + ctrl on AI mob = Copy mob faction</span>")
|
||||
to_chat(usr, "<span class='notice'>Right Mouse Button + ctrl on any mob = Paste mob faction copied with Left Mouse Button + shift</span>")
|
||||
to_chat(usr, "<span class='notice'>Right Mouse Button on enemy mob = Command selected mobs to attack mob</span>")
|
||||
to_chat(usr, "<span class='notice'>Right Mouse Button on allied mob = Command selected mobs to follow mob</span>")
|
||||
to_chat(usr, "<span class='notice'>Right Mouse Button + shift on any mob = Command selected mobs to follow mob regardless of faction</span>")
|
||||
to_chat(usr, "<span class='notice'>Right Mouse Button on tile = Command selected mobs to move to tile (will cancel if enemies are seen)</span>")
|
||||
to_chat(usr, "<span class='notice'>Right Mouse Button + shift on tile = Command selected mobs to reposition to tile (will not be inturrupted by enemies)</span>")
|
||||
to_chat(usr, "<span class='notice'>Right Mouse Button + alt on obj/turfs = Command selected mobs to attack obj/turf</span>")
|
||||
to_chat(usr, "<span class='notice'>***********************************************************</span>")
|
||||
to_chat(usr, "<span class='notice'>***********************************************************<br>\
|
||||
Left Mouse Button drag box = Select only mobs in box<br>\
|
||||
Left Mouse Button drag box + shift = Select additional mobs in area<br>\
|
||||
Left Mouse Button on non-mob = Deselect all mobs<br>\
|
||||
Left Mouse Button on AI mob = Select/Deselect mob<br>\
|
||||
Left Mouse Button + alt on AI mob = Toggle hostility on mob<br>\
|
||||
Left Mouse Button + shift on AI mob = Toggle AI (also resets)<br>\
|
||||
Left Mouse Button + ctrl on AI mob = Copy mob faction<br>\
|
||||
Right Mouse Button + ctrl on any mob = Paste mob faction copied with Left Mouse Button + shift<br>\
|
||||
Right Mouse Button on enemy mob = Command selected mobs to attack mob<br>\
|
||||
Right Mouse Button on allied mob = Command selected mobs to follow mob<br>\
|
||||
Right Mouse Button + shift on any mob = Command selected mobs to follow mob regardless of faction<br>\
|
||||
Right Mouse Button on tile = Command selected mobs to move to tile (will cancel if enemies are seen)<br>\
|
||||
Right Mouse Button + shift on tile = Command selected mobs to reposition to tile (will not be inturrupted by enemies)<br>\
|
||||
Right Mouse Button + alt on obj/turfs = Command selected mobs to attack obj/turf<br>\
|
||||
***********************************************************</span>")
|
||||
return 1
|
||||
|
||||
/obj/effect/bmode/buildquit
|
||||
@@ -272,7 +270,7 @@
|
||||
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as obj in world
|
||||
if("turf-reference")
|
||||
master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as turf in world
|
||||
|
||||
|
||||
if(BUILDMODE_ROOM)
|
||||
var/choice = alert("Would you like to change the floor or wall holders?","Room Builder", "Floor", "Wall")
|
||||
switch(choice)
|
||||
@@ -280,7 +278,7 @@
|
||||
floor_holder = get_path_from_partial_text(/turf/simulated/floor/plating)
|
||||
if("Wall")
|
||||
wall_holder = get_path_from_partial_text(/turf/simulated/wall)
|
||||
|
||||
|
||||
if(BUILDMODE_LIGHTS)
|
||||
var/choice = alert("Change the new light range, power, or color?", "Light Maker", "Range", "Power", "Color")
|
||||
switch(choice)
|
||||
@@ -357,7 +355,7 @@
|
||||
if(NORTHWEST)
|
||||
var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object))
|
||||
WIN.set_dir(NORTHWEST)
|
||||
|
||||
|
||||
if(BUILDMODE_ADVANCED)
|
||||
if(pa.Find("left") && !pa.Find("ctrl"))
|
||||
if(ispath(holder.buildmode.objholder,/turf))
|
||||
@@ -399,7 +397,7 @@
|
||||
if(holder.throw_atom)
|
||||
holder.throw_atom.throw_at(object, 10, 1)
|
||||
log_admin("[key_name(usr)] threw [holder.throw_atom] at [object]")
|
||||
|
||||
|
||||
if(BUILDMODE_ROOM)
|
||||
if(pa.Find("left"))
|
||||
holder.buildmode.coordA = get_turf(object)
|
||||
@@ -419,7 +417,7 @@
|
||||
)
|
||||
holder.buildmode.coordA = null
|
||||
holder.buildmode.coordB = null
|
||||
|
||||
|
||||
if(BUILDMODE_LADDER)
|
||||
if(pa.Find("left"))
|
||||
holder.buildmode.coordA = get_turf(object)
|
||||
@@ -439,7 +437,7 @@
|
||||
B.update_icon()
|
||||
holder.buildmode.coordA = null
|
||||
holder.buildmode.coordB = null
|
||||
|
||||
|
||||
if(BUILDMODE_CONTENTS)
|
||||
if(pa.Find("left"))
|
||||
if(istype(object, /atom))
|
||||
@@ -448,7 +446,7 @@
|
||||
if(holder.throw_atom && istype(object, /atom/movable))
|
||||
object.forceMove(holder.throw_atom)
|
||||
log_admin("[key_name(usr)] moved [object] into [holder.throw_atom].")
|
||||
|
||||
|
||||
if(BUILDMODE_LIGHTS)
|
||||
if(pa.Find("left"))
|
||||
if(object)
|
||||
@@ -456,7 +454,7 @@
|
||||
if(pa.Find("right"))
|
||||
if(object)
|
||||
object.set_light(0, 0, "#FFFFFF")
|
||||
|
||||
|
||||
if(BUILDMODE_AI)
|
||||
if(pa.Find("left"))
|
||||
if(isliving(object))
|
||||
@@ -509,7 +507,7 @@
|
||||
else //Not living
|
||||
for(var/mob/living/unit in holder.selected_mobs)
|
||||
holder.deselect_AI_mob(user.client, unit)
|
||||
|
||||
|
||||
|
||||
if(pa.Find("right"))
|
||||
// Paste faction
|
||||
@@ -594,7 +592,7 @@
|
||||
|
||||
switch(buildmode)
|
||||
if(BUILDMODE_AI)
|
||||
|
||||
|
||||
//Holding shift prevents the deselection of existing
|
||||
if(!pa.Find("shift"))
|
||||
for(var/mob/living/unit in holder.selected_mobs)
|
||||
@@ -610,7 +608,7 @@
|
||||
var/hi_x = max(c1.x,c2.x)
|
||||
var/hi_y = max(c1.y,c2.y)
|
||||
var/z = c1.z //Eh
|
||||
|
||||
|
||||
var/i = 0
|
||||
for(var/mob/living/L in living_mob_list)
|
||||
if(L.z != z || L.client)
|
||||
|
||||
@@ -30,11 +30,10 @@
|
||||
set name = "Custom Event Info"
|
||||
|
||||
if(!custom_event_msg || custom_event_msg == "")
|
||||
to_chat(src, "There currently is no known custom event taking place.")
|
||||
to_chat(src, "Keep in mind: it is possible that an admin has not properly set this.")
|
||||
to_chat(src, "<span class='filter_notice'>There currently is no known custom event taking place.</span>")
|
||||
to_chat(src, "<span class='filter_notice'>Keep in mind: it is possible that an admin has not properly set this.</span>")
|
||||
return
|
||||
|
||||
to_chat(src, "<h1 class='alert'>Custom Event</h1>")
|
||||
to_chat(src, "<h2 class='alert'>A custom event is taking place. OOC Info:</h2>")
|
||||
to_chat(src, "<span class='alert'>[custom_event_msg]</span>")
|
||||
to_chat(src, "<br>")
|
||||
to_chat(src, "<h1 class='filter_notice alert'>Custom Event</h1>")
|
||||
to_chat(src, "<h2 class='filter_notice alert'>A custom event is taking place. OOC Info:</h2>")
|
||||
to_chat(src, "<span class='filter_notice alert'>[custom_event_msg]<br></span>")
|
||||
|
||||
@@ -582,17 +582,17 @@
|
||||
|
||||
switch(input("Which list?") in list("Players","Admins","Mobs","Living Mobs","Dead Mobs", "Clients"))
|
||||
if("Players")
|
||||
usr << jointext(player_list,",")
|
||||
to_chat(usr, span("filter_debuglogs", jointext(player_list,",")))
|
||||
if("Admins")
|
||||
usr << jointext(admins,",")
|
||||
to_chat(usr, span("filter_debuglogs", jointext(admins,",")))
|
||||
if("Mobs")
|
||||
usr << jointext(mob_list,",")
|
||||
to_chat(usr, span("filter_debuglogs", jointext(mob_list,",")))
|
||||
if("Living Mobs")
|
||||
usr << jointext(living_mob_list,",")
|
||||
to_chat(usr, span("filter_debuglogs", jointext(living_mob_list,",")))
|
||||
if("Dead Mobs")
|
||||
usr << jointext(dead_mob_list,",")
|
||||
to_chat(usr, span("filter_debuglogs", jointext(dead_mob_list,",")))
|
||||
if("Clients")
|
||||
usr << jointext(GLOB.clients,",")
|
||||
to_chat(usr, span("filter_debuglogs", jointext(GLOB.clients,",")))
|
||||
|
||||
/client/proc/cmd_debug_using_map()
|
||||
set category = "Debug"
|
||||
|
||||
@@ -505,7 +505,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
|
||||
//If we're announcing their arrival
|
||||
if(announce)
|
||||
AnnounceArrival(new_character, new_character.mind.assigned_role)
|
||||
AnnounceArrival(new_character, new_character.mind.assigned_role, "Common", new_character.z)
|
||||
|
||||
log_admin("[admin] has spawned [player_key]'s character [new_character.real_name].")
|
||||
message_admins("[admin] has spawned [player_key]'s character [new_character.real_name].", 1)
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
// This is a datum-based artificial intelligence for simple mobs (and possibly others) to use.
|
||||
// The neat thing with having this here instead of on the mob is that it is independant of Life(), and that different mobs
|
||||
// can use a more or less complex AI by giving it a different datum.
|
||||
#define AI_NO_PROCESS 0
|
||||
#define AI_PROCESSING (1<<0)
|
||||
#define AI_FASTPROCESSING (1<<1)
|
||||
|
||||
#define START_AIPROCESSING(Datum) if (!(Datum.process_flags & AI_PROCESSING)) {Datum.process_flags |= AI_PROCESSING;SSai.processing += Datum}
|
||||
#define STOP_AIPROCESSING(Datum) Datum.process_flags &= ~AI_PROCESSING;SSai.processing -= Datum
|
||||
#define START_AIFASTPROCESSING(Datum) if (!(Datum.process_flags & AI_FASTPROCESSING)) {Datum.process_flags |= AI_FASTPROCESSING;SSaifast.processing += Datum}
|
||||
#define STOP_AIFASTPROCESSING(Datum) Datum.process_flags &= ~AI_FASTPROCESSING;SSaifast.processing -= Datum
|
||||
|
||||
/mob/living
|
||||
var/datum/ai_holder/ai_holder = null
|
||||
@@ -27,7 +35,20 @@
|
||||
var/busy = FALSE // If true, the ticker will skip processing this mob until this is false. Good for if you need the
|
||||
// mob to stay still (e.g. delayed attacking). If you need the mob to be inactive for an extended period of time,
|
||||
// consider sleeping the AI instead.
|
||||
|
||||
var/process_flags = 0 // Where we're processing, see flag defines.
|
||||
var/list/static/fastprocess_stances = list(
|
||||
STANCE_ALERT,
|
||||
STANCE_APPROACH,
|
||||
STANCE_FIGHT,
|
||||
STANCE_BLINDFIGHT,
|
||||
STANCE_REPOSITION,
|
||||
STANCE_MOVE,
|
||||
STANCE_FOLLOW,
|
||||
STANCE_FLEE
|
||||
)
|
||||
var/list/static/noprocess_stances = list(
|
||||
STANCE_SLEEP
|
||||
)
|
||||
|
||||
|
||||
/datum/ai_holder/hostile
|
||||
@@ -40,16 +61,34 @@
|
||||
/datum/ai_holder/New(var/new_holder)
|
||||
ASSERT(new_holder)
|
||||
holder = new_holder
|
||||
SSai.processing += src
|
||||
home_turf = get_turf(holder)
|
||||
manage_processing(AI_PROCESSING)
|
||||
GLOB.stat_set_event.register(holder, src, .proc/holder_stat_change)
|
||||
..()
|
||||
|
||||
/datum/ai_holder/Destroy()
|
||||
holder = null
|
||||
SSai.processing -= src // We might've already been asleep and removed, but byond won't care if we do this again and it saves a conditional.
|
||||
manage_processing(AI_NO_PROCESS)
|
||||
home_turf = null
|
||||
return ..()
|
||||
|
||||
/datum/ai_holder/proc/manage_processing(var/desired)
|
||||
if(desired & AI_PROCESSING)
|
||||
START_AIPROCESSING(src)
|
||||
else
|
||||
STOP_AIPROCESSING(src)
|
||||
|
||||
if(desired & AI_FASTPROCESSING)
|
||||
START_AIFASTPROCESSING(src)
|
||||
else
|
||||
STOP_AIFASTPROCESSING(src)
|
||||
|
||||
/datum/ai_holder/proc/holder_stat_change(var/mob, old_stat, new_stat)
|
||||
if(old_stat >= DEAD && new_stat <= DEAD) //Revived
|
||||
manage_processing(AI_PROCESSING)
|
||||
else if(old_stat <= DEAD && new_stat >= DEAD) //Killed
|
||||
manage_processing(AI_NO_PROCESS)
|
||||
|
||||
/datum/ai_holder/proc/update_stance_hud()
|
||||
var/image/stanceimage = holder.grab_hud(LIFE_HUD)
|
||||
stanceimage.icon_state = "ais_[stance]"
|
||||
@@ -78,7 +117,6 @@
|
||||
return
|
||||
forget_everything() // If we ever wake up, its really unlikely that our current memory will be of use.
|
||||
set_stance(STANCE_SLEEP)
|
||||
SSai.processing -= src
|
||||
update_paused_hud()
|
||||
|
||||
// Reverses the above proc.
|
||||
@@ -89,7 +127,6 @@
|
||||
if(!should_wake())
|
||||
return
|
||||
set_stance(STANCE_IDLE)
|
||||
SSai.processing += src
|
||||
update_paused_hud()
|
||||
|
||||
/datum/ai_holder/proc/should_wake()
|
||||
@@ -122,12 +159,23 @@
|
||||
|
||||
// For setting the stance WITHOUT processing it
|
||||
/datum/ai_holder/proc/set_stance(var/new_stance)
|
||||
if(stance == new_stance)
|
||||
ai_log("set_stance() : Ignoring change stance to same stance request.", AI_LOG_INFO)
|
||||
return
|
||||
|
||||
ai_log("set_stance() : Setting stance from [stance] to [new_stance].", AI_LOG_INFO)
|
||||
stance = new_stance
|
||||
if(stance_coloring) // For debugging or really weird mobs.
|
||||
stance_color()
|
||||
update_stance_hud()
|
||||
|
||||
if(new_stance in fastprocess_stances) //Becoming fast
|
||||
manage_processing(AI_PROCESSING|AI_FASTPROCESSING)
|
||||
else if(new_stance in noprocess_stances)
|
||||
manage_processing(AI_NO_PROCESS) //Becoming off
|
||||
else
|
||||
manage_processing(AI_PROCESSING) //Becoming slow
|
||||
|
||||
// This is called every half a second.
|
||||
/datum/ai_holder/proc/handle_stance_tactical()
|
||||
ai_log("========= Fast Process Beginning ==========", AI_LOG_TRACE) // This is to make it easier visually to disinguish between 'blocks' of what a tick did.
|
||||
@@ -167,19 +215,6 @@
|
||||
return
|
||||
|
||||
switch(stance)
|
||||
if(STANCE_IDLE)
|
||||
if(should_go_home())
|
||||
ai_log("handle_stance_tactical() : STANCE_IDLE, going to go home.", AI_LOG_TRACE)
|
||||
go_home()
|
||||
|
||||
else if(should_follow_leader())
|
||||
ai_log("handle_stance_tactical() : STANCE_IDLE, going to follow leader.", AI_LOG_TRACE)
|
||||
set_stance(STANCE_FOLLOW)
|
||||
|
||||
else if(should_wander())
|
||||
ai_log("handle_stance_tactical() : STANCE_IDLE, going to wander randomly.", AI_LOG_TRACE)
|
||||
handle_wander_movement()
|
||||
|
||||
if(STANCE_ALERT)
|
||||
ai_log("handle_stance_tactical() : STANCE_ALERT, going to threaten_target().", AI_LOG_TRACE)
|
||||
threaten_target()
|
||||
@@ -241,9 +276,23 @@
|
||||
if(STANCE_IDLE)
|
||||
if(speak_chance) // In the long loop since otherwise it wont shut up.
|
||||
handle_idle_speaking()
|
||||
|
||||
if(hostile)
|
||||
ai_log("handle_stance_strategical() : STANCE_IDLE, going to find_target().", AI_LOG_TRACE)
|
||||
find_target()
|
||||
|
||||
if(should_go_home())
|
||||
ai_log("handle_stance_tactical() : STANCE_IDLE, going to go home.", AI_LOG_TRACE)
|
||||
go_home()
|
||||
|
||||
else if(should_follow_leader())
|
||||
ai_log("handle_stance_tactical() : STANCE_IDLE, going to follow leader.", AI_LOG_TRACE)
|
||||
set_stance(STANCE_FOLLOW)
|
||||
|
||||
else if(should_wander())
|
||||
ai_log("handle_stance_tactical() : STANCE_IDLE, going to wander randomly.", AI_LOG_TRACE)
|
||||
handle_wander_movement()
|
||||
|
||||
if(STANCE_APPROACH)
|
||||
if(target)
|
||||
ai_log("handle_stance_strategical() : STANCE_APPROACH, going to calculate_path([target]).", AI_LOG_TRACE)
|
||||
@@ -291,4 +340,7 @@
|
||||
// 'Taunts' the AI into attacking the taunter.
|
||||
/mob/living/proc/taunt(atom/movable/taunter, force_target_switch = FALSE)
|
||||
if(ai_holder)
|
||||
ai_holder.receive_taunt(taunter, force_target_switch)
|
||||
ai_holder.receive_taunt(taunter, force_target_switch)
|
||||
|
||||
#undef AI_PROCESSING
|
||||
#undef AI_FASTPROCESSING
|
||||
@@ -6,7 +6,7 @@
|
||||
// If our holder is able to do anything.
|
||||
/datum/ai_holder/proc/can_act()
|
||||
if(!holder) // Holder missing.
|
||||
SSai.processing -= src
|
||||
manage_processing(AI_NO_PROCESS)
|
||||
return FALSE
|
||||
if(holder.stat) // Dead or unconscious.
|
||||
ai_log("can_act() : Stat was non-zero ([holder.stat]).", AI_LOG_TRACE)
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
ai_log("lose_follow() : Exited.", AI_LOG_DEBUG)
|
||||
|
||||
/datum/ai_holder/proc/should_follow_leader()
|
||||
if(!leader)
|
||||
if(!leader || target)
|
||||
return FALSE
|
||||
if(follow_until_time && world.time > follow_until_time)
|
||||
lose_follow()
|
||||
|
||||
@@ -43,6 +43,8 @@
|
||||
ai_log("walk_to_destination() : Exiting.",AI_LOG_TRACE)
|
||||
|
||||
/datum/ai_holder/proc/should_go_home()
|
||||
if(stance != STANCE_IDLE)
|
||||
return FALSE
|
||||
if(!returns_home || !home_turf)
|
||||
return FALSE
|
||||
if(get_dist(holder, home_turf) > max_home_distance)
|
||||
@@ -139,7 +141,7 @@
|
||||
return MOVEMENT_ON_COOLDOWN
|
||||
|
||||
/datum/ai_holder/proc/should_wander()
|
||||
return wander && !leader
|
||||
return (stance == STANCE_IDLE) && wander && !leader
|
||||
|
||||
// Wanders randomly in cardinal directions.
|
||||
/datum/ai_holder/proc/handle_wander_movement()
|
||||
|
||||
@@ -25,8 +25,8 @@
|
||||
|
||||
// Step 1, find out what we can see.
|
||||
/datum/ai_holder/proc/list_targets()
|
||||
. = hearers(vision_range, holder) - holder // Remove ourselves to prevent suicidal decisions. ~ SRC is the ai_holder.
|
||||
. -= dview_mob // Not the dview mob either, nerd.
|
||||
. = ohearers(vision_range, holder)
|
||||
. -= dview_mob // Not the dview mob!
|
||||
|
||||
var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/mecha, /obj/structure/blob))
|
||||
|
||||
@@ -43,13 +43,8 @@
|
||||
if(!has_targets_list)
|
||||
possible_targets = list_targets()
|
||||
for(var/possible_target in possible_targets)
|
||||
var/atom/A = possible_target
|
||||
if(found(A)) // In case people want to override this.
|
||||
. = list(A)
|
||||
break
|
||||
if(can_attack(A)) // Can we attack it?
|
||||
. += A
|
||||
continue
|
||||
if(can_attack(possible_target)) // Can we attack it?
|
||||
. += possible_target
|
||||
|
||||
var/new_target = pick_target(.)
|
||||
give_target(new_target)
|
||||
@@ -57,7 +52,7 @@
|
||||
|
||||
// Step 3, pick among the possible, attackable targets.
|
||||
/datum/ai_holder/proc/pick_target(list/targets)
|
||||
if(target != null) // If we already have a target, but are told to pick again, calculate the lowest distance between all possible, and pick from the lowest distance targets.
|
||||
if(target) // If we already have a target, but are told to pick again, calculate the lowest distance between all possible, and pick from the lowest distance targets.
|
||||
targets = target_filter_distance(targets)
|
||||
else
|
||||
targets = target_filter_closest(targets)
|
||||
@@ -88,32 +83,31 @@
|
||||
|
||||
// Filters return one or more 'preferred' targets.
|
||||
|
||||
// This one is for closest targets.
|
||||
// This one is for targets closer than our current one.
|
||||
/datum/ai_holder/proc/target_filter_distance(list/targets)
|
||||
var/target_dist = get_dist(holder, target)
|
||||
var/list/better_targets = list()
|
||||
for(var/possible_target in targets)
|
||||
var/atom/A = possible_target
|
||||
var/target_dist = get_dist(holder, target)
|
||||
var/possible_target_distance = get_dist(holder, A)
|
||||
if(target_dist < possible_target_distance)
|
||||
targets -= A
|
||||
return targets
|
||||
if(possible_target_distance < target_dist)
|
||||
better_targets += A
|
||||
return better_targets
|
||||
|
||||
// Returns the closest target and anything tied with it for distance
|
||||
/datum/ai_holder/proc/target_filter_closest(list/targets)
|
||||
var/lowest_distance = -1
|
||||
var/list/sorted_targets = list()
|
||||
var/lowest_distance = 1e6 //fakely far
|
||||
var/list/closest_targets = list()
|
||||
for(var/possible_target in targets)
|
||||
var/atom/A = possible_target
|
||||
var/current_distance = get_dist(holder, A)
|
||||
if(lowest_distance == -1)
|
||||
if(current_distance < lowest_distance)
|
||||
closest_targets.Cut()
|
||||
lowest_distance = current_distance
|
||||
sorted_targets += A
|
||||
else if(current_distance < lowest_distance)
|
||||
targets.Cut()
|
||||
lowest_distance = current_distance
|
||||
sorted_targets += A
|
||||
closest_targets += A
|
||||
else if(current_distance == lowest_distance)
|
||||
sorted_targets += A
|
||||
return sorted_targets
|
||||
closest_targets += A
|
||||
return closest_targets
|
||||
|
||||
/datum/ai_holder/proc/can_attack(atom/movable/the_target, var/vision_required = TRUE)
|
||||
if(!can_see_target(the_target) && vision_required)
|
||||
@@ -163,11 +157,6 @@
|
||||
return TRUE
|
||||
// return FALSE
|
||||
|
||||
// Override this for special targeting criteria.
|
||||
// If it returns true, the mob will always select it as the target.
|
||||
/datum/ai_holder/proc/found(atom/movable/the_target)
|
||||
return FALSE
|
||||
|
||||
// 'Soft' loss of target. They may still exist, we still have some info about them maybe.
|
||||
/datum/ai_holder/proc/lose_target()
|
||||
ai_log("lose_target() : Entering.", AI_LOG_TRACE)
|
||||
|
||||
@@ -47,16 +47,17 @@
|
||||
existing.clear(source)
|
||||
return check_alarm_cleared(existing)
|
||||
|
||||
/datum/alarm_handler/proc/major_alarms()
|
||||
return visible_alarms()
|
||||
/datum/alarm_handler/proc/major_alarms(var/z)
|
||||
return visible_alarms(z)
|
||||
|
||||
/datum/alarm_handler/proc/has_major_alarms()
|
||||
if(alarms && alarms.len)
|
||||
return 1
|
||||
return 0
|
||||
/datum/alarm_handler/proc/has_major_alarms(var/z)
|
||||
if(!LAZYLEN(alarms))
|
||||
return 0
|
||||
|
||||
/datum/alarm_handler/proc/minor_alarms()
|
||||
return visible_alarms()
|
||||
return LAZYLEN(major_alarms(z))
|
||||
|
||||
/datum/alarm_handler/proc/minor_alarms(var/z)
|
||||
return visible_alarms(z)
|
||||
|
||||
/datum/alarm_handler/proc/check_alarm_cleared(var/datum/alarm/alarm)
|
||||
if ((alarm.end_time && world.time > alarm.end_time) || !alarm.sources.len)
|
||||
@@ -101,9 +102,15 @@
|
||||
for(var/listener in listeners)
|
||||
call(listener, listeners[listener])(src, alarm, was_raised)
|
||||
|
||||
/datum/alarm_handler/proc/visible_alarms()
|
||||
/datum/alarm_handler/proc/visible_alarms(var/z)
|
||||
if(!LAZYLEN(alarms))
|
||||
return list()
|
||||
|
||||
var/list/map_levels = using_map.get_map_levels(z)
|
||||
|
||||
var/list/visible_alarms = new()
|
||||
for(var/datum/alarm/A in alarms)
|
||||
if(!A.hidden)
|
||||
visible_alarms.Add(A)
|
||||
if(A.hidden || (z && !(A.origin?.z in map_levels)))
|
||||
continue
|
||||
visible_alarms.Add(A)
|
||||
return visible_alarms
|
||||
@@ -1,16 +1,22 @@
|
||||
/datum/alarm_handler/atmosphere
|
||||
category = "Atmosphere Alarms"
|
||||
|
||||
/datum/alarm_handler/atmosphere/major_alarms()
|
||||
/datum/alarm_handler/atmosphere/major_alarms(var/z)
|
||||
var/list/major_alarms = new()
|
||||
var/list/map_levels = using_map.get_map_levels(z)
|
||||
for(var/datum/alarm/A in visible_alarms())
|
||||
if(z && !(A.origin?.z in map_levels))
|
||||
continue
|
||||
if(A.max_severity() > 1)
|
||||
major_alarms.Add(A)
|
||||
return major_alarms
|
||||
|
||||
/datum/alarm_handler/atmosphere/minor_alarms()
|
||||
/datum/alarm_handler/atmosphere/minor_alarms(var/z)
|
||||
var/list/minor_alarms = new()
|
||||
var/list/map_levels = using_map.get_map_levels(z)
|
||||
for(var/datum/alarm/A in visible_alarms())
|
||||
if(z && !(A.origin?.z in map_levels))
|
||||
continue
|
||||
if(A.max_severity() == 1)
|
||||
minor_alarms.Add(A)
|
||||
return minor_alarms
|
||||
|
||||
@@ -80,14 +80,12 @@
|
||||
return PROCESS_KILL
|
||||
|
||||
/obj/item/device/assembly/examine(mob/user)
|
||||
..(user)
|
||||
. = ..()
|
||||
if((in_range(src, user) || loc == user))
|
||||
if(secured)
|
||||
to_chat(user, "\The [src] is ready!")
|
||||
. += "\The [src] is ready!"
|
||||
else
|
||||
to_chat(user, "\The [src] can be attached!")
|
||||
return
|
||||
|
||||
. += "\The [src] can be attached!"
|
||||
|
||||
/obj/item/device/assembly/attack_self(mob/user as mob)
|
||||
if(!user) return 0
|
||||
|
||||
@@ -57,12 +57,12 @@
|
||||
master.update_icon()
|
||||
|
||||
/obj/item/device/assembly_holder/examine(mob/user)
|
||||
..(user)
|
||||
. = ..()
|
||||
if ((in_range(src, user) || src.loc == user))
|
||||
if (src.secured)
|
||||
to_chat(user, "\The [src] is ready!")
|
||||
. += "\The [src] is ready!"
|
||||
else
|
||||
to_chat(user, "\The [src] can be attached!")
|
||||
. += "\The [src] can be attached!"
|
||||
|
||||
/obj/item/device/assembly_holder/HasProximity(atom/movable/AM as mob|obj)
|
||||
if(a_left)
|
||||
@@ -155,11 +155,11 @@
|
||||
master.receive_signal()
|
||||
return 1
|
||||
|
||||
/obj/item/device/assembly_holder/hear_talk(mob/living/M as mob, msg, verb, datum/language/speaking)
|
||||
/obj/item/device/assembly_holder/hear_talk(mob/M, list/message_pieces, verb)
|
||||
if(a_right)
|
||||
a_right.hear_talk(M,msg,verb,speaking)
|
||||
a_right.hear_talk(M, message_pieces, verb)
|
||||
if(a_left)
|
||||
a_left.hear_talk(M,msg,verb,speaking)
|
||||
a_left.hear_talk(M, message_pieces, verb)
|
||||
|
||||
/obj/item/device/assembly_holder/timer_igniter
|
||||
name = "timer-igniter assembly"
|
||||
|
||||
@@ -8,9 +8,9 @@
|
||||
|
||||
|
||||
/obj/item/device/assembly/mousetrap/examine(var/mob/user)
|
||||
..(user)
|
||||
. = ..(user)
|
||||
if(armed)
|
||||
to_chat(user, "It looks like it's armed.")
|
||||
. += "It looks like it's armed."
|
||||
|
||||
/obj/item/device/assembly/mousetrap/update_icon()
|
||||
if(armed)
|
||||
|
||||
@@ -7,7 +7,8 @@
|
||||
var/listening = 0
|
||||
var/recorded //the activation message
|
||||
|
||||
/obj/item/device/assembly/voice/hear_talk(mob/living/M as mob, msg)
|
||||
/obj/item/device/assembly/voice/hear_talk(mob/M, list/message_pieces, verb)
|
||||
var/msg = multilingual_to_message(message_pieces)
|
||||
if(listening)
|
||||
recorded = msg
|
||||
listening = 0
|
||||
|
||||
@@ -64,11 +64,11 @@ GLOBAL_LIST_EMPTY(all_blobs)
|
||||
return FALSE
|
||||
|
||||
/obj/structure/blob/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(!overmind)
|
||||
to_chat(user, "It seems inert.") // Dead blob.
|
||||
. += "It seems inert." // Dead blob.
|
||||
else
|
||||
to_chat(user, overmind.blob_type.desc)
|
||||
. += overmind.blob_type.desc
|
||||
|
||||
/obj/structure/blob/get_description_info()
|
||||
if(overmind)
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
attack_message_synth = ", and your shell buckles"
|
||||
attack_verb = "lashes"
|
||||
spore_projectile = /obj/item/projectile/arc/spore
|
||||
factory_type = /obj/structure/blob/factory/turret
|
||||
|
||||
/datum/blob_type/roiling_mold/proc/find_target(var/obj/structure/blob/B, var/tries = 0, var/list/previous_targets = null)
|
||||
if(tries > 3)
|
||||
@@ -33,7 +34,7 @@
|
||||
|
||||
previous_targets |= L
|
||||
|
||||
L = find_target(B, tries + 1, previous_targets)
|
||||
return find_target(B, tries + 1, previous_targets)
|
||||
|
||||
return L
|
||||
|
||||
|
||||
@@ -137,8 +137,12 @@ You can set verify to TRUE if you want send() to sleep until the client has the
|
||||
return new type()
|
||||
return asset_datums[type]
|
||||
|
||||
/datum/asset
|
||||
var/_abstract = /datum/asset // Marker so we don't instanatiate abstract types
|
||||
|
||||
/datum/asset/New()
|
||||
asset_datums[type] = src
|
||||
register()
|
||||
|
||||
/datum/asset/proc/register()
|
||||
return
|
||||
@@ -148,6 +152,7 @@ You can set verify to TRUE if you want send() to sleep until the client has the
|
||||
|
||||
//If you don't need anything complicated.
|
||||
/datum/asset/simple
|
||||
_abstract = /datum/asset/simple
|
||||
var/assets = list()
|
||||
var/verify = FALSE
|
||||
|
||||
@@ -157,6 +162,65 @@ You can set verify to TRUE if you want send() to sleep until the client has the
|
||||
/datum/asset/simple/send(client)
|
||||
send_asset_list(client,assets,verify)
|
||||
|
||||
//
|
||||
// iconsheet Assets - For making lots of icon states available at once without sending a thousand tiny files.
|
||||
//
|
||||
/datum/asset/iconsheet
|
||||
_abstract = /datum/asset/iconsheet
|
||||
var/name // Name of the iconsheet. Asset will be named after this.
|
||||
var/verify = FALSE
|
||||
|
||||
/datum/asset/iconsheet/register(var/list/sprites)
|
||||
if (!name)
|
||||
CRASH("iconsheet [type] cannot register without a name")
|
||||
if (!islist(sprites))
|
||||
CRASH("iconsheet [type] cannot register without a sprites list")
|
||||
|
||||
var/res_name = "iconsheet_[name].css"
|
||||
var/fname = "data/iconsheets/[res_name]"
|
||||
fdel(fname)
|
||||
text2file(generate_css(sprites), fname)
|
||||
register_asset(res_name, fcopy_rsc(fname))
|
||||
fdel(fname)
|
||||
|
||||
/datum/asset/iconsheet/send(client/C)
|
||||
if (!name)
|
||||
return
|
||||
send_asset_list(C, list("iconsheet_[name].css"), verify)
|
||||
|
||||
/datum/asset/iconsheet/proc/generate_css(var/list/sprites)
|
||||
var/list/out = list(".[name]{display:inline-block;}")
|
||||
for(var/sprite_id in sprites)
|
||||
var/icon/I = sprites[sprite_id]
|
||||
var/data_url = "'data:image/png;base64,[icon2base64(I)]'"
|
||||
out += ".[name].[sprite_id]{width:[I.Width()]px;height:[I.Height()]px;background-image:url([data_url]);}"
|
||||
return out.Join("\n")
|
||||
|
||||
/datum/asset/iconsheet/proc/build_sprite_list(icon/I, list/directions, prefix = null)
|
||||
if (length(prefix))
|
||||
prefix = "[prefix]-"
|
||||
|
||||
if (!directions)
|
||||
directions = list(SOUTH)
|
||||
|
||||
var/sprites = list()
|
||||
for (var/icon_state_name in icon_states(I))
|
||||
for (var/direction in directions)
|
||||
var/suffix = (directions.len > 1) ? "-[dir2text(direction)]" : ""
|
||||
var/sprite_name = "[prefix][icon_state_name][suffix]"
|
||||
var/icon/sprite = icon(I, icon_state=icon_state_name, dir=direction, frame=1, moving=FALSE)
|
||||
if (!sprite || !length(icon_states(sprite))) // that direction or state doesn't exist
|
||||
continue
|
||||
sprites[sprite_name] = sprite
|
||||
return sprites
|
||||
|
||||
// Get HTML link tag for including the iconsheet css file.
|
||||
/datum/asset/iconsheet/proc/css_tag()
|
||||
return "<link rel='stylesheet' href='iconsheet_[name].css' />"
|
||||
|
||||
// get HTML tag for showing an icon
|
||||
/datum/asset/iconsheet/proc/icon_tag(icon_state, dir = SOUTH)
|
||||
return "<span class='[name] [icon_state]-[dir2text(dir)]'></span>"
|
||||
|
||||
//DEFINITIONS FOR ASSET DATUMS START HERE.
|
||||
/datum/asset/simple/pda
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
var/toytype = list()
|
||||
toytype["Blink toy"] = /obj/item/toy/blink
|
||||
toytype["Gravitational singularity"] = /obj/item/toy/spinningtoy
|
||||
toytype["Water flower"] = /obj/item/toy/waterflower
|
||||
toytype["Water flower"] = /obj/item/weapon/reagent_containers/spray/waterflower
|
||||
toytype["Bosun's whistle"] = /obj/item/toy/bosunwhistle
|
||||
toytype["Magic 8 Ball"] = /obj/item/toy/eight_ball
|
||||
toytype["Magic Conch shell"] = /obj/item/toy/eight_ball/conch
|
||||
|
||||
@@ -6,6 +6,14 @@
|
||||
sort_category = "Suits and Overwear"
|
||||
cost = 2
|
||||
|
||||
/datum/gear/suit/apron_white
|
||||
display_name = "apron, colorable"
|
||||
path = /obj/item/clothing/suit/storage/apron/white
|
||||
|
||||
/datum/gear/suit/apron_white/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
|
||||
/datum/gear/suit/greatcoat
|
||||
display_name = "greatcoat"
|
||||
path = /obj/item/clothing/suit/greatcoat
|
||||
|
||||
@@ -150,6 +150,10 @@
|
||||
sort_category = "Xenowear"
|
||||
cost = 1
|
||||
|
||||
/datum/gear/shoes/footwraps/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
|
||||
/datum/gear/uniform/cohesionsuits
|
||||
display_name = "cohesion suit selection (Promethean)"
|
||||
path = /obj/item/clothing/under/cohesion
|
||||
@@ -350,3 +354,42 @@
|
||||
display_name = "internal affairs cloak (Teshari)"
|
||||
path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/iaa
|
||||
allowed_roles = list("Internal Affairs Agent")
|
||||
|
||||
/datum/gear/uniform/smockcolor
|
||||
display_name = "smock, recolorable (Teshari)"
|
||||
path = /obj/item/clothing/under/seromi/smock/white
|
||||
whitelisted = SPECIES_TESHARI
|
||||
sort_category = "Xenowear"
|
||||
|
||||
/datum/gear/uniform/smockcolor/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
|
||||
/datum/gear/uniform/undercoatcolor
|
||||
display_name = "undercoat, recolorable (Teshari)"
|
||||
path = /obj/item/clothing/under/seromi/undercoat/standard/white_grey
|
||||
whitelisted = SPECIES_TESHARI
|
||||
sort_category = "Xenowear"
|
||||
|
||||
/datum/gear/uniform/undercoatcolor/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
|
||||
/datum/gear/suit/cloakcolor
|
||||
display_name = "cloak, recolorable (Teshari)"
|
||||
path = /obj/item/clothing/suit/storage/seromi/cloak/standard/white_grey
|
||||
whitelisted = SPECIES_TESHARI
|
||||
sort_category = "Xenowear"
|
||||
|
||||
/datum/gear/suit/cloakcolor/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
/datum/gear/suit/labcoat_tesh
|
||||
display_name = "labcoat, colorable (Teshari)"
|
||||
path = /obj/item/clothing/suit/storage/toggle/labcoat/teshari
|
||||
whitelisted = SPECIES_TESHARI
|
||||
sort_category = "Xenowear"
|
||||
|
||||
/datum/gear/suit/labcoat_tesh/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
|
||||
@@ -12,6 +12,7 @@ var/list/spawntypes = list()
|
||||
var/display_name //Name used in preference setup.
|
||||
var/list/restrict_job = null
|
||||
var/list/disallow_job = null
|
||||
var/announce_channel = "Common"
|
||||
|
||||
proc/check_job_spawning(job)
|
||||
if(restrict_job && !(job in restrict_job))
|
||||
@@ -20,6 +21,10 @@ var/list/spawntypes = list()
|
||||
if(disallow_job && (job in disallow_job))
|
||||
return 0
|
||||
|
||||
var/datum/job/J = SSjob.get_job(job)
|
||||
if(J?.offmap_spawn && !(job in restrict_job))
|
||||
return 0
|
||||
|
||||
return 1
|
||||
|
||||
/datum/spawnpoint/proc/get_spawn_position()
|
||||
|
||||
@@ -96,6 +96,42 @@
|
||||
. = check
|
||||
break
|
||||
|
||||
// For now, these two temp procs only return TRUE or FALSE if they can provide resistance to a given temperature.
|
||||
/obj/item/clothing/proc/handle_low_temperature(var/tempcheck = T20C)
|
||||
. = FALSE
|
||||
if(LAZYLEN(accessories))
|
||||
for(var/obj/item/clothing/C in accessories)
|
||||
if(C.handle_low_temperature(tempcheck))
|
||||
. = TRUE
|
||||
|
||||
if(min_cold_protection_temperature && min_cold_protection_temperature <= tempcheck)
|
||||
. = TRUE
|
||||
|
||||
/obj/item/clothing/proc/handle_high_temperature(var/tempcheck = T20C)
|
||||
. = FALSE
|
||||
if(LAZYLEN(accessories))
|
||||
for(var/obj/item/clothing/C in accessories)
|
||||
if(C.handle_low_temperature(tempcheck))
|
||||
. = TRUE
|
||||
|
||||
if(max_heat_protection_temperature && max_heat_protection_temperature >= tempcheck)
|
||||
. = TRUE
|
||||
|
||||
// Returns the relative flag-vars for covered protection.
|
||||
/obj/item/clothing/proc/get_cold_protection_flags()
|
||||
. = cold_protection
|
||||
|
||||
if(LAZYLEN(accessories))
|
||||
for(var/obj/item/clothing/C in accessories)
|
||||
. |= C.get_cold_protection_flags()
|
||||
|
||||
/obj/item/clothing/proc/get_heat_protection_flags()
|
||||
. = heat_protection
|
||||
|
||||
if(LAZYLEN(accessories))
|
||||
for(var/obj/item/clothing/C in accessories)
|
||||
. |= C.get_heat_protection_flags()
|
||||
|
||||
/obj/item/clothing/proc/refit_for_species(var/target_species)
|
||||
if(!species_restricted)
|
||||
return //this item doesn't use the species_restricted system
|
||||
@@ -827,16 +863,16 @@
|
||||
|
||||
|
||||
/obj/item/clothing/under/examine(mob/user)
|
||||
..(user)
|
||||
. = ..()
|
||||
switch(src.sensor_mode)
|
||||
if(0)
|
||||
to_chat(user, "Its sensors appear to be disabled.")
|
||||
. += "Its sensors appear to be disabled."
|
||||
if(1)
|
||||
to_chat(user, "Its binary life sensors appear to be enabled.")
|
||||
. += "Its binary life sensors appear to be enabled."
|
||||
if(2)
|
||||
to_chat(user, "Its vital tracker appears to be enabled.")
|
||||
. += "Its vital tracker appears to be enabled."
|
||||
if(3)
|
||||
to_chat(user, "Its vital tracker and tracking beacon appear to be enabled.")
|
||||
. += "Its vital tracker and tracking beacon appear to be enabled."
|
||||
|
||||
/obj/item/clothing/under/proc/set_sensors(mob/usr as mob)
|
||||
var/mob/M = usr
|
||||
|
||||
@@ -67,10 +67,9 @@
|
||||
src.add_fingerprint(usr)
|
||||
|
||||
/obj/item/clothing/examine(var/mob/user)
|
||||
..(user)
|
||||
. = ..(user)
|
||||
if(LAZYLEN(accessories))
|
||||
for(var/obj/item/clothing/accessory/A in accessories)
|
||||
to_chat(user, "\A [A] is attached to it.")
|
||||
. += "It has the following attached: [counting_english_list(accessories)]"
|
||||
|
||||
/**
|
||||
* Attach accessory A to src
|
||||
|
||||
@@ -78,11 +78,8 @@
|
||||
wearer = null
|
||||
|
||||
/obj/item/clothing/shoes/magboots/examine(mob/user)
|
||||
..(user)
|
||||
var/state = "disabled"
|
||||
if(item_flags & NOSLIP)
|
||||
state = "enabled"
|
||||
to_chat(user, "Its mag-pulse traction system appears to be [state].")
|
||||
. = ..()
|
||||
. += "Its mag-pulse traction system appears to be [item_flags & NOSLIP ? "enabled" : "disabled"]."
|
||||
|
||||
/obj/item/clothing/shoes/magboots/vox
|
||||
|
||||
@@ -126,6 +123,6 @@
|
||||
canremove = 1
|
||||
|
||||
/obj/item/clothing/shoes/magboots/vox/examine(mob/user)
|
||||
..(user)
|
||||
if (magpulse)
|
||||
to_chat(user, "It would be hard to take these off without relaxing your grip first.")//theoretically this message should only be seen by the wearer when the claws are equipped.
|
||||
. = ..()
|
||||
if(magpulse)
|
||||
. += "It would be hard to take these off without relaxing your grip first." // Theoretically this message should only be seen by the wearer when the claws are equipped.
|
||||
@@ -224,7 +224,7 @@ var/global/list/breach_burn_descriptors = list(
|
||||
..()
|
||||
|
||||
/obj/item/clothing/suit/space/examine(mob/user)
|
||||
..(user)
|
||||
if(can_breach && breaches && breaches.len)
|
||||
. = ..()
|
||||
if(can_breach && breaches?.len)
|
||||
for(var/datum/breach/B in breaches)
|
||||
to_chat(user, "<font color='red'><B>It has \a [B.descriptor].</B></font>")
|
||||
. += "<font color='red'><B>It has \a [B.descriptor].</B></font>"
|
||||
|
||||
@@ -55,14 +55,14 @@
|
||||
var/list/stat_rig_module/stat_modules = new()
|
||||
|
||||
/obj/item/rig_module/examine()
|
||||
..()
|
||||
. = ..()
|
||||
switch(damage)
|
||||
if(0)
|
||||
to_chat(usr, "It is undamaged.")
|
||||
. += "It is undamaged."
|
||||
if(1)
|
||||
to_chat(usr, "It is badly damaged.")
|
||||
. += "It is badly damaged."
|
||||
if(2)
|
||||
to_chat(usr, "It is almost completely destroyed.")
|
||||
. += "It is almost completely destroyed."
|
||||
|
||||
/obj/item/rig_module/attackby(obj/item/W as obj, mob/user as mob)
|
||||
|
||||
|
||||
@@ -94,22 +94,21 @@
|
||||
var/datum/effect/effect/system/spark_spread/spark_system
|
||||
|
||||
/obj/item/weapon/rig/examine()
|
||||
to_chat(usr, "This is [bicon(src)][src.name].")
|
||||
to_chat(usr, "[src.desc]")
|
||||
. = ..()
|
||||
if(wearer)
|
||||
for(var/obj/item/piece in list(helmet,gloves,chest,boots))
|
||||
if(!piece || piece.loc != wearer)
|
||||
continue
|
||||
to_chat(usr, "[bicon(piece)] \The [piece] [piece.gender == PLURAL ? "are" : "is"] deployed.")
|
||||
. += "[bicon(piece)] \The [piece] [piece.gender == PLURAL ? "are" : "is"] deployed."
|
||||
|
||||
if(src.loc == usr)
|
||||
to_chat(usr, "The access panel is [locked? "locked" : "unlocked"].")
|
||||
to_chat(usr, "The maintenance panel is [open ? "open" : "closed"].")
|
||||
to_chat(usr, "Hardsuit systems are [offline ? "<span class='warning'>offline</span>" : "<span class='notice'>online</span>"].")
|
||||
to_chat(usr, "The cooling stystem is [cooling_on ? "active" : "inactive"].")
|
||||
. += "The access panel is [locked? "locked" : "unlocked"]."
|
||||
. += "The maintenance panel is [open ? "open" : "closed"]."
|
||||
. += "Hardsuit systems are [offline ? "<span class='warning'>offline</span>" : "<span class='notice'>online</span>"]."
|
||||
. += "The cooling stystem is [cooling_on ? "active" : "inactive"]."
|
||||
|
||||
if(open)
|
||||
to_chat(usr, "It's equipped with [english_list(installed_modules)].")
|
||||
. += "It's equipped with [english_list(installed_modules)]."
|
||||
|
||||
/obj/item/weapon/rig/New()
|
||||
..()
|
||||
|
||||
@@ -51,7 +51,13 @@
|
||||
item_flags = THICKMATERIAL
|
||||
siemens_coefficient = 0.2
|
||||
offline_slowdown = 5
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit)
|
||||
allowed = list(
|
||||
/obj/item/weapon/gun,
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/weapon/tank,
|
||||
/obj/item/device/suit_cooling_unit,
|
||||
/obj/item/weapon/storage
|
||||
)
|
||||
|
||||
air_type = /obj/item/weapon/tank/vox
|
||||
|
||||
|
||||
@@ -12,7 +12,14 @@
|
||||
offline_vision_restriction = 1
|
||||
|
||||
helm_type = /obj/item/clothing/head/helmet/space/rig/combat
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/melee/baton)
|
||||
allowed = list(
|
||||
/obj/item/weapon/gun,
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/weapon/tank,
|
||||
/obj/item/device/suit_cooling_unit,
|
||||
/obj/item/weapon/melee/baton,
|
||||
/obj/item/weapon/storage
|
||||
)
|
||||
|
||||
|
||||
/obj/item/weapon/rig/combat/equipped
|
||||
@@ -42,10 +49,26 @@
|
||||
slowdown = 1
|
||||
offline_slowdown = 3
|
||||
offline_vision_restriction = 1
|
||||
allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/handcuffs, \
|
||||
/obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/weldingtool, /obj/item/weapon/tool, /obj/item/device/multitool, \
|
||||
/obj/item/device/radio, /obj/item/device/analyzer,/obj/item/weapon/storage/briefcase/inflatable, /obj/item/weapon/melee/baton, /obj/item/weapon/gun, \
|
||||
/obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller, /obj/item/device/suit_cooling_unit)
|
||||
allowed = list(
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/weapon/tank,
|
||||
/obj/item/ammo_magazine,
|
||||
/obj/item/ammo_casing,
|
||||
/obj/item/weapon/handcuffs,
|
||||
/obj/item/device/t_scanner,
|
||||
/obj/item/weapon/rcd,
|
||||
/obj/item/weapon/weldingtool,
|
||||
/obj/item/weapon/tool,
|
||||
/obj/item/device/multitool,
|
||||
/obj/item/device/radio,
|
||||
/obj/item/device/analyzer,
|
||||
/obj/item/weapon/melee/baton,
|
||||
/obj/item/weapon/gun,
|
||||
/obj/item/weapon/storage,
|
||||
/obj/item/weapon/reagent_containers/hypospray,
|
||||
/obj/item/roller,
|
||||
/obj/item/device/suit_cooling_unit
|
||||
)
|
||||
|
||||
chest_type = /obj/item/clothing/suit/space/rig/military
|
||||
helm_type = /obj/item/clothing/head/helmet/space/rig/military
|
||||
|
||||
@@ -14,10 +14,25 @@
|
||||
siemens_coefficient= 0.5
|
||||
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 100)
|
||||
allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/tool/crowbar, \
|
||||
/obj/item/weapon/tool/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/tool/wirecutters, /obj/item/weapon/tool/wrench, /obj/item/device/multitool, \
|
||||
/obj/item/device/radio, /obj/item/device/analyzer,/obj/item/weapon/storage/briefcase/inflatable, /obj/item/weapon/melee/baton, /obj/item/weapon/gun, \
|
||||
/obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller)
|
||||
allowed = list(
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/weapon/tank,
|
||||
/obj/item/device/t_scanner,
|
||||
/obj/item/weapon/rcd,
|
||||
/obj/item/weapon/tool/crowbar,
|
||||
/obj/item/weapon/tool/screwdriver,
|
||||
/obj/item/weapon/weldingtool,
|
||||
/obj/item/weapon/tool/wirecutters,
|
||||
/obj/item/weapon/tool/wrench,
|
||||
/obj/item/device/multitool,
|
||||
/obj/item/device/radio,
|
||||
/obj/item/device/analyzer,
|
||||
/obj/item/weapon/storage,
|
||||
/obj/item/weapon/melee/baton,
|
||||
/obj/item/weapon/gun,
|
||||
/obj/item/weapon/reagent_containers/hypospray,
|
||||
/obj/item/roller
|
||||
)
|
||||
|
||||
initial_modules = list(
|
||||
/obj/item/rig_module/ai_container,
|
||||
|
||||
@@ -4,7 +4,17 @@
|
||||
desc = "A lighter, less armoured rig suit."
|
||||
icon_state = "ninja_rig"
|
||||
suit_type = "light suit"
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/cell)
|
||||
allowed = list(
|
||||
/obj/item/weapon/gun,
|
||||
/obj/item/ammo_magazine,
|
||||
/obj/item/ammo_casing,
|
||||
/obj/item/weapon/melee/baton,
|
||||
/obj/item/weapon/handcuffs,
|
||||
/obj/item/weapon/tank,
|
||||
/obj/item/device/suit_cooling_unit,
|
||||
/obj/item/weapon/cell,
|
||||
/obj/item/weapon/storage
|
||||
)
|
||||
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
|
||||
emp_protection = 10
|
||||
slowdown = 0
|
||||
|
||||
@@ -14,7 +14,18 @@
|
||||
siemens_coefficient = 0.3
|
||||
glove_type = /obj/item/clothing/gloves/gauntlets/rig/eva
|
||||
helm_type = /obj/item/clothing/head/helmet/space/rig/merc
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs)
|
||||
allowed = list(
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/weapon/tank,
|
||||
/obj/item/device/suit_cooling_unit,
|
||||
/obj/item/weapon/gun,
|
||||
/obj/item/ammo_magazine,
|
||||
/obj/item/ammo_casing,
|
||||
/obj/item/weapon/melee/baton,
|
||||
/obj/item/weapon/melee/energy/sword,
|
||||
/obj/item/weapon/handcuffs,
|
||||
/obj/item/weapon/storage
|
||||
)
|
||||
|
||||
initial_modules = list(
|
||||
/obj/item/rig_module/mounted,
|
||||
|
||||
@@ -12,10 +12,25 @@
|
||||
req_access = list(access_cent_specops)
|
||||
|
||||
armor = list(melee = 60, bullet = 50, laser = 35,energy = 15, bomb = 30, bio = 100, rad = 95)
|
||||
allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/tool/crowbar, \
|
||||
/obj/item/weapon/tool/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/tool/wirecutters, /obj/item/weapon/tool/wrench, /obj/item/device/multitool, \
|
||||
/obj/item/device/radio, /obj/item/device/analyzer,/obj/item/weapon/storage/briefcase/inflatable, /obj/item/weapon/melee/baton, /obj/item/weapon/gun, \
|
||||
/obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller)
|
||||
allowed = list(
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/weapon/tank,
|
||||
/obj/item/device/t_scanner,
|
||||
/obj/item/weapon/rcd,
|
||||
/obj/item/weapon/tool/crowbar,
|
||||
/obj/item/weapon/tool/screwdriver,
|
||||
/obj/item/weapon/weldingtool,
|
||||
/obj/item/weapon/tool/wirecutters,
|
||||
/obj/item/weapon/tool/wrench,
|
||||
/obj/item/device/multitool,
|
||||
/obj/item/device/radio,
|
||||
/obj/item/device/analyzer,
|
||||
/obj/item/weapon/melee/baton,
|
||||
/obj/item/weapon/gun,
|
||||
/obj/item/weapon/storage,
|
||||
/obj/item/weapon/reagent_containers/hypospray,
|
||||
/obj/item/roller
|
||||
)
|
||||
|
||||
/obj/item/weapon/rig/pmc/commander
|
||||
name = "PMC-C hardsuit control module"
|
||||
|
||||
@@ -35,8 +35,7 @@
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/weapon/tank,
|
||||
/obj/item/device/suit_cooling_unit,
|
||||
/obj/item/weapon/storage/briefcase,
|
||||
/obj/item/weapon/storage/secure/briefcase
|
||||
/obj/item/weapon/storage,
|
||||
)
|
||||
|
||||
req_access = list()
|
||||
@@ -83,7 +82,7 @@
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/weapon/tank,
|
||||
/obj/item/device/suit_cooling_unit,
|
||||
/obj/item/weapon/storage/bag/ore,
|
||||
/obj/item/weapon/storage,
|
||||
/obj/item/device/t_scanner,
|
||||
/obj/item/weapon/pickaxe,
|
||||
/obj/item/weapon/rcd
|
||||
@@ -121,7 +120,7 @@
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/weapon/tank,
|
||||
/obj/item/device/suit_cooling_unit,
|
||||
/obj/item/weapon/storage/briefcase/inflatable,
|
||||
/obj/item/weapon/storage,
|
||||
/obj/item/device/t_scanner,
|
||||
/obj/item/weapon/rcd
|
||||
)
|
||||
@@ -167,7 +166,7 @@
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/weapon/tank,
|
||||
/obj/item/device/suit_cooling_unit,
|
||||
/obj/item/weapon/storage/briefcase/inflatable,
|
||||
/obj/item/weapon/storage,
|
||||
/obj/item/device/t_scanner,
|
||||
/obj/item/weapon/rcd
|
||||
)
|
||||
@@ -211,7 +210,7 @@
|
||||
/obj/item/weapon/tank,
|
||||
/obj/item/device/suit_cooling_unit,
|
||||
/obj/item/stack/flag,
|
||||
/obj/item/weapon/storage/excavation,
|
||||
/obj/item/weapon/storage,
|
||||
/obj/item/weapon/pickaxe,
|
||||
/obj/item/device/healthanalyzer,
|
||||
/obj/item/device/measuring_tape,
|
||||
@@ -221,8 +220,8 @@
|
||||
/obj/item/device/gps,
|
||||
/obj/item/device/beacon_locator,
|
||||
/obj/item/device/radio/beacon,
|
||||
/obj/item/weapon/pickaxe/hand,
|
||||
/obj/item/weapon/storage/bag/fossils)
|
||||
/obj/item/weapon/pickaxe/hand
|
||||
)
|
||||
|
||||
req_access = list()
|
||||
req_one_access = list()
|
||||
@@ -255,7 +254,7 @@
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/weapon/tank,
|
||||
/obj/item/device/suit_cooling_unit,
|
||||
/obj/item/weapon/storage/firstaid,
|
||||
/obj/item/weapon/storage,
|
||||
/obj/item/device/healthanalyzer,
|
||||
/obj/item/stack/medical,
|
||||
/obj/item/roller
|
||||
@@ -295,7 +294,8 @@
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/weapon/tank,
|
||||
/obj/item/device/suit_cooling_unit,
|
||||
/obj/item/weapon/melee/baton
|
||||
/obj/item/weapon/melee/baton,
|
||||
/obj/item/weapon/storage
|
||||
)
|
||||
|
||||
req_access = list()
|
||||
|
||||
@@ -58,10 +58,10 @@
|
||||
camera.c_tag = usr.name
|
||||
to_chat(usr, "<font color='blue'>User scanned as [camera.c_tag]. Camera activated.</font>")
|
||||
|
||||
/obj/item/clothing/head/helmet/space/examine()
|
||||
..()
|
||||
if(camera_networks && get_dist(usr,src) <= 1)
|
||||
to_chat(usr, "This helmet has a built-in camera. It's [camera ? "" : "in"]active.")
|
||||
/obj/item/clothing/head/helmet/space/examine(mob/user)
|
||||
. = ..()
|
||||
if(camera_networks && Adjacent(user))
|
||||
. += "This helmet has a built-in camera. It's [camera ? "" : "in"]active."
|
||||
|
||||
/obj/item/clothing/suit/space
|
||||
name = "Space suit"
|
||||
|
||||
@@ -193,27 +193,32 @@
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/security/riot
|
||||
name = "crowd control voidsuit helmet"
|
||||
desc = "A heavy-set and ominous looking crowd control suit helmet. Fitted with state of the art shock absorbing materials, to disperse blunt force trauma."
|
||||
icon_state = "rig0-sec_riot"
|
||||
armor = list(melee = 70, bullet = 15, laser = 15, energy = 5, bomb = 40, bio = 100, rad = 10)
|
||||
item_state_slots = list(slot_r_hand_str = "sec_helm_riot", slot_l_hand_str = "sec_helm_riot")
|
||||
|
||||
/obj/item/clothing/suit/space/void/security/riot
|
||||
name = "crowd control voidsuit"
|
||||
desc = "A heavy-set and ominous looking crowd control suit. Fitted with state of the art shock absorbing materials, to disperse blunt force trauma."
|
||||
icon_state = "rig-sec_riot"
|
||||
armor = list(melee = 70, bullet = 15, laser = 15, energy = 5, bomb = 40, bio = 100, rad = 10)
|
||||
item_state_slots = list(slot_r_hand_str = "sec_voidsuit_riot", slot_l_hand_str = "sec_voidsuit_riot")
|
||||
|
||||
//Security Surplus Voidsuit
|
||||
/obj/item/clothing/head/helmet/space/void/security/alt
|
||||
name = "riot security voidsuit helmet"
|
||||
desc = "A somewhat tacky voidsuit helmet, a fact mitigated by heavy armor plating."
|
||||
name = "security EVA voidsuit helmet"
|
||||
desc = "A grey-black voidsuit helmet with red highlights. A little tacky, but it offers better protection against modern firearms and radiation than standard-issue security voidsuit helmets."
|
||||
armor = list(melee = 30, bullet = 40, laser = 40, energy = 25, bomb = 60, bio = 100, rad = 50)
|
||||
icon_state = "rig0-secalt"
|
||||
armor = list(melee = 70, bullet = 20, laser = 30, energy = 5, bomb = 35, bio = 100, rad = 10)
|
||||
item_state_slots = list(slot_r_hand_str = "syndicate-helm-black", slot_l_hand_str = "syndicate-helm-black")
|
||||
|
||||
/obj/item/clothing/suit/space/void/security/alt
|
||||
name = "security EVA voidsuit"
|
||||
desc = "A grey-black voidsuit with red highlights. A little tacky, but it offers better protection against modern firearms and radiation than standard-issue security voidsuits."
|
||||
armor = list(melee = 30, bullet = 40, laser = 40, energy = 25, bomb = 60, bio = 100, rad = 50)
|
||||
icon_state = "rig-secalt"
|
||||
name = "riot security voidsuit"
|
||||
desc = "A heavily armored voidsuit, designed to intimidate people who find black intimidating. Surprisingly slimming."
|
||||
armor = list(melee = 70, bullet = 20, laser = 30, energy = 5, bomb = 35, bio = 100, rad = 10)
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/melee/baton)
|
||||
item_state_slots = list(slot_r_hand_str = "sec_voidsuitTG", slot_l_hand_str = "sec_voidsuitTG")
|
||||
|
||||
//Atmospherics
|
||||
/obj/item/clothing/head/helmet/space/void/atmos
|
||||
|
||||
@@ -68,13 +68,11 @@
|
||||
var/obj/item/device/suit_cooling_unit/cooler = null// Cooling unit, for FBPs. Cannot be installed alongside a tank.
|
||||
|
||||
/obj/item/clothing/suit/space/void/examine(user)
|
||||
..(user)
|
||||
var/list/part_list = new
|
||||
. = ..()
|
||||
for(var/obj/item/I in list(helmet,boots,tank,cooler))
|
||||
part_list += "\a [I]"
|
||||
to_chat(user, "\The [src] has [english_list(part_list)] installed.")
|
||||
. += "It has \a [I] installed."
|
||||
if(tank && in_range(src,user))
|
||||
to_chat(user, "<span class='notice'>The wrist-mounted pressure gauge reads [max(round(tank.air_contents.return_pressure()),0)] kPa remaining in \the [tank].</span>")
|
||||
. += "<span class='notice'>The wrist-mounted pressure gauge reads [max(round(tank.air_contents.return_pressure()),0)] kPa remaining in \the [tank].</span>"
|
||||
|
||||
/obj/item/clothing/suit/space/void/refit_for_species(var/target_species)
|
||||
..()
|
||||
|
||||
@@ -237,4 +237,12 @@
|
||||
name = "internal affairs cloak"
|
||||
desc = "A soft Teshari cloak made for the Internal Affairs Agent"
|
||||
icon_state = "tesh_cloak_iaa"
|
||||
item_state = "tesh_cloak_iaa"
|
||||
item_state = "tesh_cloak_iaa"
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/teshari
|
||||
name = "Teshari labcoat"
|
||||
desc = "A small suit that protects against minor chemical spills. This one is a good fit on Teshari."
|
||||
icon = 'icons/mob/species/seromi/suit.dmi'
|
||||
icon_override = 'icons/mob/species/seromi/suit.dmi'
|
||||
icon_state = "tesh_labcoat"
|
||||
species_restricted = list(SPECIES_TESHARI)
|
||||
|
||||
@@ -13,6 +13,12 @@
|
||||
allowed = list (/obj/item/weapon/reagent_containers/spray/plantbgone, /obj/item/device/analyzer/plant_analyzer, /obj/item/seeds,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle, /obj/item/weapon/material/minihoe)
|
||||
|
||||
/obj/item/clothing/suit/storage/apron/white
|
||||
name = "white apron"
|
||||
desc = "A basic white apron."
|
||||
icon_state = "apron_white"
|
||||
item_state_slots = list(slot_r_hand_str = "apronchef", slot_l_hand_str = "apronchef")
|
||||
|
||||
//Captain
|
||||
/obj/item/clothing/suit/captunic
|
||||
name = "colony director's parade tunic"
|
||||
|
||||
@@ -96,9 +96,16 @@
|
||||
name = "mesh armor plate"
|
||||
desc = "A mesh armor plate made of steel-reinforced synthetic fibers, great for dealing with small blades. Attaches to a plate carrier."
|
||||
icon_state = "armor_stab"
|
||||
armor = list(melee = 25, bullet = 5, laser = 20, energy = 10, bomb = 15, bio = 0, rad = 0)
|
||||
armor = list(melee = 30, bullet = 5, laser = 20, energy = 10, bomb = 15, bio = 0, rad = 0)
|
||||
armorsoak = list(melee = 7, bullet = 5, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/accessory/armor/armorplate/blast
|
||||
name = "gel armor plate"
|
||||
desc = "A gel armor plate made of high-grade polymers, great for dealing with localized blasts. Attaches to a plate carrier."
|
||||
icon_state = "armor_blast"
|
||||
armor = list(melee = 25, bullet = 25, laser = 10, energy = 0, bomb = 30, bio = 0, rad = 0)
|
||||
armorsoak = list(melee = 5, bullet = 7, laser = 0, energy = 0, bomb = 40, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/accessory/armor/armorplate/medium
|
||||
name = "medium armor plate"
|
||||
desc = "A plasteel-reinforced synthetic armor plate, providing good protection. Attaches to a plate carrier."
|
||||
|
||||
@@ -79,11 +79,11 @@
|
||||
..()
|
||||
|
||||
/obj/item/clothing/accessory/holster/examine(mob/user)
|
||||
..(user)
|
||||
if (holstered)
|
||||
to_chat(user, "A [holstered] is holstered here.")
|
||||
. = ..(user)
|
||||
if(holstered)
|
||||
. += "A [holstered] is holstered here."
|
||||
else
|
||||
to_chat(user, "It is empty.")
|
||||
. += "It is empty."
|
||||
|
||||
/obj/item/clothing/accessory/holster/on_attached(obj/item/clothing/under/S, mob/user as mob)
|
||||
..()
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
|
||||
/obj/item/clothing/accessory/poncho/thermal
|
||||
name = "thermal poncho"
|
||||
desc = "A simple, comfortable poncho with a thermal foil layer."
|
||||
slot_flags = SLOT_OCLOTHING | SLOT_TIE
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
|
||||
|
||||
cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
heat_protection = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
|
||||
slowdown = 0.2
|
||||
|
||||
min_cold_protection_temperature = T0C - 40
|
||||
max_heat_protection_temperature = ARMOR_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
|
||||
/obj/item/clothing/accessory/poncho/thermal/green
|
||||
name = "green thermal poncho"
|
||||
desc = "A simple, comfortable poncho with a thermal foil layer. This one is green."
|
||||
icon_state = "greenponcho"
|
||||
item_state = "greenponcho"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/thermal/red
|
||||
name = "red thermal poncho"
|
||||
desc = "A simple, comfortable poncho with a thermal foil layer. This one is red."
|
||||
icon_state = "redponcho"
|
||||
item_state = "redponcho"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/thermal/purple
|
||||
name = "purple thermal poncho"
|
||||
desc = "A simple, comfortable poncho with a thermal foil layer. This one is purple."
|
||||
icon_state = "purpleponcho"
|
||||
item_state = "purpleponcho"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/thermal/blue
|
||||
name = "blue thermal poncho"
|
||||
desc = "A simple, comfortable poncho with a thermal foil layer. This one is blue."
|
||||
icon_state = "blueponcho"
|
||||
item_state = "blueponcho"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/thermal/security
|
||||
name = "security thermal poncho"
|
||||
desc = "A simple, comfortable poncho with a thermal foil layer. This one is black and red, standard NanoTrasen Security colors."
|
||||
icon_state = "secponcho"
|
||||
item_state = "secponcho"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/thermal/medical
|
||||
name = "medical thermal poncho"
|
||||
desc = "A simple, comfortable poncho with a thermal foil layer. This one is white with green and blue tint, standard Medical colors."
|
||||
icon_state = "medponcho"
|
||||
item_state = "medponcho"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/thermal/engineering
|
||||
name = "engineering thermal poncho"
|
||||
desc = "A simple, comfortable poncho with a thermal foil layer. This one is yellow and orange, standard Engineering colors."
|
||||
icon_state = "engiponcho"
|
||||
item_state = "engiponcho"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/thermal/science
|
||||
name = "science thermal poncho"
|
||||
desc = "A simple, comfortable poncho with a thermal foil layer. This one is white with purple trim, standard NanoTrasen Science colors."
|
||||
icon_state = "sciponcho"
|
||||
item_state = "sciponcho"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/thermal/cargo
|
||||
name = "cargo thermal poncho"
|
||||
desc = "A simple, comfortable poncho with a thermal foil layer. This one is tan and grey, the colors of Cargo."
|
||||
icon_state = "cargoponcho"
|
||||
item_state = "cargoponcho"
|
||||
@@ -938,6 +938,11 @@ Uniforms and such
|
||||
name = "explorer's jumpsuit"
|
||||
icon_state = "explorer"
|
||||
|
||||
/obj/item/clothing/under/explorer/armored
|
||||
desc = "A green uniform for operating in hazardous environments. This one looks like it's been modified."
|
||||
armor = list(melee = 10, bullet = 10, laser = 10,energy = 10, bomb = 10, bio = 10, rad = 30)
|
||||
armorsoak = list(melee = 5, bullet = 5, laser = 5,energy = 5, bomb = 5, bio = 5, rad = 0)
|
||||
|
||||
/obj/item/clothing/under/cohesion
|
||||
name = "black cohesion suit"
|
||||
desc = "A plain black cohesion suit intended to assist Prometheans in maintaining their form and prevent direct skin exposure."
|
||||
|
||||
@@ -91,5 +91,6 @@
|
||||
return
|
||||
|
||||
/obj/item/weapon/evidencebag/examine(mob/user)
|
||||
..(user)
|
||||
if (stored_item) user.examinate(stored_item)
|
||||
. = ..()
|
||||
if(stored_item)
|
||||
user.examinate(stored_item)
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
var/security_level = 0 //0 - auto-identify from worn ID, require only account number
|
||||
//1 - require manual login / account number and pin
|
||||
//2 - require card and manual login
|
||||
var/offmap = FALSE //Should this account be hidden from station consoles?
|
||||
|
||||
/datum/transaction
|
||||
var/target_name = ""
|
||||
@@ -18,10 +19,11 @@
|
||||
var/time = ""
|
||||
var/source_terminal = ""
|
||||
|
||||
/proc/create_account(var/new_owner_name = "Default user", var/starting_funds = 0, var/obj/machinery/account_database/source_db)
|
||||
/proc/create_account(var/new_owner_name = "Default user", var/starting_funds = 0, var/obj/machinery/account_database/source_db, var/offmap = FALSE)
|
||||
|
||||
//create a new account
|
||||
var/datum/money_account/M = new()
|
||||
M.offmap = offmap
|
||||
M.owner_name = new_owner_name
|
||||
M.remote_access_pin = rand(1111, 111111)
|
||||
M.money = starting_funds
|
||||
|
||||
@@ -14,31 +14,31 @@
|
||||
var/creating_new_account = 0
|
||||
var/const/fund_cap = 1000000
|
||||
|
||||
proc/get_access_level()
|
||||
if (!held_card)
|
||||
return 0
|
||||
if(access_cent_captain in held_card.access)
|
||||
return 2
|
||||
else if(access_hop in held_card.access || access_captain in held_card.access)
|
||||
return 1
|
||||
/obj/machinery/account_database/proc/get_access_level()
|
||||
if (!held_card)
|
||||
return 0
|
||||
if(access_cent_captain in held_card.access)
|
||||
return 2
|
||||
else if(access_hop in held_card.access || access_captain in held_card.access)
|
||||
return 1
|
||||
|
||||
proc/create_transation(target, reason, amount)
|
||||
var/datum/transaction/T = new()
|
||||
T.target_name = target
|
||||
T.purpose = reason
|
||||
T.amount = amount
|
||||
T.date = current_date_string
|
||||
T.time = stationtime2text()
|
||||
T.source_terminal = machine_id
|
||||
return T
|
||||
/obj/machinery/account_database/proc/create_transation(target, reason, amount)
|
||||
var/datum/transaction/T = new()
|
||||
T.target_name = target
|
||||
T.purpose = reason
|
||||
T.amount = amount
|
||||
T.date = current_date_string
|
||||
T.time = stationtime2text()
|
||||
T.source_terminal = machine_id
|
||||
return T
|
||||
|
||||
proc/accounting_letterhead(report_name)
|
||||
return {"
|
||||
<center><h1><b>[report_name]</b></h1></center>
|
||||
<center><small><i>[station_name()] Accounting Report</i></small></center>
|
||||
<hr>
|
||||
<u>Generated By:</u> [held_card.registered_name], [held_card.assignment]<br>
|
||||
"}
|
||||
/obj/machinery/account_database/proc/accounting_letterhead(report_name)
|
||||
return {"
|
||||
<center><h1><b>[report_name]</b></h1></center>
|
||||
<center><small><i>[station_name()] Accounting Report</i></small></center>
|
||||
<hr>
|
||||
<u>Generated By:</u> [held_card.registered_name], [held_card.assignment]<br>
|
||||
"}
|
||||
|
||||
/obj/machinery/account_database/New()
|
||||
machine_id = "[station_name()] Acc. DB #[num_financial_terminals++]"
|
||||
@@ -98,6 +98,8 @@
|
||||
var/list/accounts[0]
|
||||
for(var/i=1, i<=all_money_accounts.len, i++)
|
||||
var/datum/money_account/D = all_money_accounts[i]
|
||||
if(D.offmap)
|
||||
continue
|
||||
accounts.Add(list(list(\
|
||||
"account_number"=D.account_number,\
|
||||
"owner_name"=D.owner_name,\
|
||||
|
||||
@@ -158,6 +158,6 @@ proc/spawn_money(var/sum, spawnloc, mob/living/carbon/human/human_user as mob)
|
||||
update_icon() return //space cash
|
||||
|
||||
/obj/item/weapon/spacecash/ewallet/examine(mob/user)
|
||||
..(user)
|
||||
if (!(user in view(2)) && user!=src.loc) return
|
||||
to_chat(user, "<font color='blue'>Charge card's owner: [src.owner_name]. Thalers remaining: [src.worth].</font>")
|
||||
. = ..()
|
||||
if(Adjacent(user))
|
||||
. += "<span class='notice'>Charge card's owner: [src.owner_name]. Thalers remaining: [src.worth].</span>"
|
||||
|
||||
@@ -32,14 +32,14 @@
|
||||
|
||||
|
||||
/obj/machinery/cash_register/examine(mob/user as mob)
|
||||
..(user)
|
||||
. = ..(user)
|
||||
if(transaction_amount)
|
||||
to_chat(user, "It has a purchase of [transaction_amount] pending[transaction_purpose ? " for [transaction_purpose]" : ""].")
|
||||
. += "It has a purchase of [transaction_amount] pending[transaction_purpose ? " for [transaction_purpose]" : ""]."
|
||||
if(cash_open)
|
||||
if(cash_stored)
|
||||
to_chat(user, "It holds [cash_stored] Thaler\s of money.")
|
||||
. += "It holds [cash_stored] Thaler\s."
|
||||
else
|
||||
to_chat(user, "It's completely empty.")
|
||||
. += "It's completely empty."
|
||||
|
||||
|
||||
/obj/machinery/cash_register/attack_hand(mob/user as mob)
|
||||
|
||||
@@ -57,10 +57,9 @@
|
||||
interact(user)
|
||||
|
||||
/obj/item/device/retail_scanner/examine(mob/user as mob)
|
||||
..(user)
|
||||
. = ..()
|
||||
if(transaction_amount)
|
||||
to_chat(user, "It has a purchase of [transaction_amount] pending[transaction_purpose ? " for [transaction_purpose]" : ""].")
|
||||
|
||||
. += "It has a purchase of [transaction_amount] pending[transaction_purpose ? " for [transaction_purpose]" : ""]."
|
||||
|
||||
/obj/item/device/retail_scanner/interact(mob/user as mob)
|
||||
var/dat = "<h2>Retail Scanner<hr></h2>"
|
||||
|
||||
@@ -32,11 +32,11 @@
|
||||
/obj/item/weapon/material/fishing_rod/built
|
||||
strung = FALSE
|
||||
|
||||
/obj/item/weapon/material/fishing_rod/examine(mob/M as mob)
|
||||
..()
|
||||
/obj/item/weapon/material/fishing_rod/examine(mob/user)
|
||||
. = ..()
|
||||
if(Bait)
|
||||
to_chat(M, "<span class='notice'>\The [src] has \the [Bait] hanging on its hook.</span>")
|
||||
Bait.examine(M)
|
||||
. += "<span class='notice'>It has [Bait] hanging on its hook: </span>"
|
||||
. += Bait.examine(user)
|
||||
|
||||
/obj/item/weapon/material/fishing_rod/CtrlClick(mob/user)
|
||||
if((src.loc == user || Adjacent(user)) && Bait)
|
||||
|
||||
@@ -28,21 +28,21 @@
|
||||
matter = list("glass" = 60)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/examine(mob/M as mob)
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
for(var/I in extras)
|
||||
if(istype(I, /obj/item/weapon/glass_extra))
|
||||
to_chat(M, "There is \a [I] in \the [src].")
|
||||
. += "There is \a [I] in \the [src]."
|
||||
else if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/fruit_slice))
|
||||
to_chat(M, "There is \a [I] on the rim.")
|
||||
. += "There is \a [I] on the rim."
|
||||
else
|
||||
to_chat(M, "There is \a [I] somewhere on the glass. Somehow.")
|
||||
. += "There is \a [I] somewhere on the glass. Somehow."
|
||||
|
||||
if(has_ice())
|
||||
to_chat(M, "There is some ice floating in the drink.")
|
||||
. += "There is some ice floating in the drink."
|
||||
|
||||
if(has_fizz())
|
||||
to_chat(M, "It is fizzing slightly.")
|
||||
. += "It is fizzing slightly."
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/proc/has_ice()
|
||||
if(reagents.reagent_list.len > 0)
|
||||
|
||||
@@ -72,18 +72,18 @@
|
||||
playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/examine(mob/user)
|
||||
if(!..(user, 1))
|
||||
return
|
||||
if(!reagents || reagents.total_volume == 0)
|
||||
to_chat(user, "<span class='notice'>\The [src] is empty!</span>")
|
||||
else if (reagents.total_volume <= volume * 0.25)
|
||||
to_chat(user, "<span class='notice'>\The [src] is almost empty!</span>")
|
||||
else if (reagents.total_volume <= volume * 0.66)
|
||||
to_chat(user, "<span class='notice'>\The [src] is half full!</span>")
|
||||
else if (reagents.total_volume <= volume * 0.90)
|
||||
to_chat(user, "<span class='notice'>\The [src] is almost full!</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>\The [src] is full!</span>")
|
||||
. = ..()
|
||||
if(Adjacent(user))
|
||||
if(!reagents?.total_volume)
|
||||
. += "<span class='notice'>It is empty!</span>"
|
||||
else if (reagents.total_volume <= volume * 0.25)
|
||||
. += "<span class='notice'>It is almost empty!</span>"
|
||||
else if (reagents.total_volume <= volume * 0.66)
|
||||
. += "<span class='notice'>It is half full!</span>"
|
||||
else if (reagents.total_volume <= volume * 0.90)
|
||||
. += "<span class='notice'>It is almost full!</span>"
|
||||
else
|
||||
. += "<span class='notice'>It is full!</span>"
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -79,9 +79,10 @@
|
||||
..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/csandwich/examine(mob/user)
|
||||
..(user)
|
||||
var/obj/item/O = pick(contents)
|
||||
to_chat(user, "<font color='blue'>You think you can see [O.name] in there.</font>")
|
||||
. = ..()
|
||||
if(contents.len)
|
||||
var/obj/item/O = pick(contents)
|
||||
. += "<font color='blue'>You think you can see [O.name] in there.</font>"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/csandwich/attack(mob/M as mob, mob/user as mob, def_zone)
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/attack_self(mob/user as mob)
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/attack(mob/M as mob, mob/user as mob, def_zone)
|
||||
/obj/item/weapon/reagent_containers/food/snacks/attack(mob/living/M as mob, mob/user as mob, def_zone)
|
||||
if(reagents && !reagents.total_volume)
|
||||
to_chat(user, "<span class='danger'>None of [src] left!</span>")
|
||||
user.drop_from_inventory(src)
|
||||
@@ -78,9 +78,6 @@
|
||||
to_chat(M, "<span class='notice'>You take a bite of [src].</span>")
|
||||
if (fullness > 350 && fullness <= 550)
|
||||
to_chat(M, "<span class='notice'>You unwillingly chew a bit of [src].</span>")
|
||||
if (fullness > (550 * (1 + M.overeatduration / 2000))) // The more you eat - the more you can eat
|
||||
to_chat(M, "<span class='danger'>You cannot force any more of [src] to go down your throat.</span>")
|
||||
return 0
|
||||
|
||||
else if(user.a_intent == I_HURT)
|
||||
return ..()
|
||||
@@ -108,11 +105,7 @@
|
||||
to_chat(user, "<span class='warning'>\The [blocked] is in the way!</span>")
|
||||
return
|
||||
|
||||
if (fullness <= (550 * (1 + M.overeatduration / 1000)))
|
||||
user.visible_message("<span class='danger'>[user] attempts to feed [M] [src].</span>")
|
||||
else
|
||||
user.visible_message("<span class='danger'>[user] cannot force anymore of [src] down [M]'s throat.</span>")
|
||||
return 0
|
||||
user.visible_message("<span class='danger'>[user] attempts to feed [M] [src].</span>")
|
||||
|
||||
user.setClickCooldown(user.get_attack_speed(src))
|
||||
if(!do_mob(user, M)) return
|
||||
@@ -140,16 +133,16 @@
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/examine(mob/user)
|
||||
if(!..(user, 1))
|
||||
return
|
||||
if (bitecount==0)
|
||||
return
|
||||
else if (bitecount==1)
|
||||
to_chat(user, "<font color='blue'>\The [src] was bitten by someone!</font>")
|
||||
else if (bitecount<=3)
|
||||
to_chat(user, "<font color='blue'>\The [src] was bitten [bitecount] times!</font>")
|
||||
else
|
||||
to_chat(user, "<font color='blue'>\The [src] was bitten multiple times!</font>")
|
||||
. = ..()
|
||||
if(Adjacent(user))
|
||||
if(bitecount==0)
|
||||
return .
|
||||
else if (bitecount==1)
|
||||
. += "<span class='notice'>It was bitten by someone!</span>"
|
||||
else if (bitecount<=3)
|
||||
. += "<span class='notice'>It was bitten [bitecount] times!</span>"
|
||||
else
|
||||
. += "<span class='notice'>It was bitten multiple times!</span>"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W,/obj/item/weapon/storage))
|
||||
|
||||
@@ -39,10 +39,10 @@
|
||||
cooking = new_setting
|
||||
icon_state = new_setting ? on_icon : off_icon
|
||||
|
||||
/obj/machinery/cooker/examine()
|
||||
..()
|
||||
if(cooking_obj && Adjacent(usr))
|
||||
to_chat(usr, "You can see \a [cooking_obj] inside.")
|
||||
/obj/machinery/cooker/examine(mob/user)
|
||||
. = ..()
|
||||
if(cooking_obj && Adjacent(user))
|
||||
. += "You can see \a [cooking_obj] inside."
|
||||
|
||||
/obj/machinery/cooker/attackby(var/obj/item/I, var/mob/user)
|
||||
|
||||
|
||||
@@ -87,8 +87,8 @@
|
||||
src.startgibbing(user)
|
||||
|
||||
/obj/machinery/gibber/examine()
|
||||
..()
|
||||
to_chat(usr, "The safety guard is [emagged ? "<span class='danger'>disabled</span>" : "enabled"].")
|
||||
. = ..()
|
||||
. += "The safety guard is [emagged ? "<span class='danger'>disabled</span>" : "enabled"]."
|
||||
|
||||
/obj/machinery/gibber/emag_act(var/remaining_charges, var/mob/user)
|
||||
emagged = !emagged
|
||||
|
||||
@@ -67,8 +67,19 @@ This allows for events that have their announcement happen after the end itself.
|
||||
|
||||
// Returns the z-levels that are involved with the event.
|
||||
// In the future this might be handy for off-station events.
|
||||
/datum/event2/event/proc/get_location_z_levels()
|
||||
return using_map.station_levels
|
||||
/datum/event2/event/proc/get_location_z_levels(space_only = FALSE)
|
||||
. = using_map.station_levels.Copy()
|
||||
if(space_only)
|
||||
for(var/z_level in .)
|
||||
if(is_planet_z_level(z_level))
|
||||
. -= z_level
|
||||
|
||||
|
||||
/datum/event2/event/proc/is_planet_z_level(z_level)
|
||||
var/datum/planet/P = LAZYACCESS(SSplanets.z_to_planet, z_level)
|
||||
if(!istype(P))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
// Returns a list of empty turfs in the same area.
|
||||
/datum/event2/event/proc/find_random_turfs(minimum_free_space = 5, list/specific_areas = list(), ignore_occupancy = FALSE)
|
||||
@@ -106,6 +117,7 @@ This allows for events that have their announcement happen after the end itself.
|
||||
continue // Occupied.
|
||||
. += A
|
||||
|
||||
|
||||
// Starts the event.
|
||||
/datum/event2/event/proc/execute()
|
||||
time_started = world.time
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
chaos = 15
|
||||
chaotic_threshold = EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT
|
||||
event_type = /datum/event2/event/airlock_failure
|
||||
var/needs_medical = FALSE
|
||||
|
||||
/datum/event2/meta/airlock_failure/emag
|
||||
name = "airlock failure - emag"
|
||||
@@ -12,11 +13,13 @@
|
||||
/datum/event2/meta/airlock_failure/door_crush
|
||||
name = "airlock failure - crushing"
|
||||
event_type = /datum/event2/event/airlock_failure/door_crush
|
||||
needs_medical = TRUE
|
||||
|
||||
/datum/event2/meta/airlock_failure/shock
|
||||
name = "airlock failure - shock"
|
||||
chaos = 30
|
||||
event_type = /datum/event2/event/airlock_failure/shock
|
||||
needs_medical = TRUE
|
||||
|
||||
|
||||
/datum/event2/meta/airlock_failure/get_weight()
|
||||
@@ -29,6 +32,8 @@
|
||||
|
||||
// Medical might be needed for some of the more violent airlock failures.
|
||||
var/medical = metric.count_people_in_department(DEPARTMENT_MEDICAL)
|
||||
if(!medical && needs_medical)
|
||||
return 0
|
||||
|
||||
return (engineering * 20) + (medical * 20) + (synths * 20)
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/datum/event2/meta/brand_intelligence
|
||||
name = "vending machine malware"
|
||||
departments = list(DEPARTMENT_EVERYONE, DEPARTMENT_EVERYONE)
|
||||
departments = list(DEPARTMENT_ENGINEERING, DEPARTMENT_EVERYONE)
|
||||
chaos = 10
|
||||
chaotic_threshold = EVENT_CHAOS_THRESHOLD_LOW_IMPACT
|
||||
event_type = /datum/event2/event/brand_intelligence
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
event_type = /datum/event2/event/spacevine
|
||||
|
||||
/datum/event2/meta/spacevine/get_weight()
|
||||
return 20 + (metric.count_people_in_department(DEPARTMENT_ENGINEERING) * 20) + (metric.count_people_in_department(DEPARTMENT_EVERYONE) * 10)
|
||||
return 20 + (metric.count_people_in_department(DEPARTMENT_ENGINEERING) * 10) + (metric.count_people_in_department(DEPARTMENT_EVERYONE) * 5)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
event_type = /datum/event2/event/window_break
|
||||
|
||||
/datum/event2/meta/window_break/get_weight()
|
||||
return metric.count_people_in_department(DEPARTMENT_ENGINEERING) * 20
|
||||
return (metric.count_people_in_department(DEPARTMENT_ENGINEERING) * 20) / (times_ran + 1)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -7,14 +7,14 @@
|
||||
event_type = /datum/event2/event/gravity
|
||||
|
||||
/datum/event2/meta/gravity/get_weight()
|
||||
return (20 + (metric.count_people_in_department(DEPARTMENT_EVERYONE) * 20)) / (times_ran + 1)
|
||||
return (20 + (metric.count_people_in_department(DEPARTMENT_EVERYONE) * 5)) / (times_ran + 1)
|
||||
|
||||
|
||||
|
||||
|
||||
/datum/event2/event/gravity
|
||||
length_lower_bound = 5 MINUTES
|
||||
length_upper_bound = 10 MINUTES
|
||||
length_lower_bound = 4 MINUTES
|
||||
length_upper_bound = 8 MINUTES
|
||||
|
||||
/datum/event2/event/gravity/announce()
|
||||
command_announcement.Announce("Feedback surge detected in mass-distributions systems. \
|
||||
@@ -23,12 +23,12 @@
|
||||
|
||||
/datum/event2/event/gravity/start()
|
||||
for(var/area/A in world)
|
||||
if(A.z in get_location_z_levels())
|
||||
if(A.z in get_location_z_levels(space_only = TRUE))
|
||||
A.gravitychange(FALSE)
|
||||
|
||||
/datum/event2/event/gravity/end()
|
||||
for(var/area/A in world)
|
||||
if(A.z in get_location_z_levels())
|
||||
if(A.z in get_location_z_levels(space_only = TRUE))
|
||||
A.gravitychange(TRUE)
|
||||
|
||||
command_announcement.Announce("Gravity generators are again functioning within normal parameters. Sorry for any inconvenience.", "Gravity Restored")
|
||||
@@ -126,6 +126,7 @@
|
||||
var/list/areas_to_break = list()
|
||||
var/list/area_types_to_break = null // Area types to include.
|
||||
var/list/area_types_to_ignore = null // Area types to exclude, usually due to undesired inclusion from inheritence.
|
||||
var/ignore_blast_doors = FALSE
|
||||
|
||||
/datum/event2/event/prison_break/brig
|
||||
area_display_name = "Brig"
|
||||
@@ -217,7 +218,7 @@
|
||||
/datum/event2/event/prison_break/start()
|
||||
for(var/area/A in areas_to_break)
|
||||
spawn(0) // So we don't block the ticker.
|
||||
A.prison_break()
|
||||
A.prison_break(open_blast_doors = !ignore_blast_doors)
|
||||
|
||||
// There's between 40 seconds and one minute before the whole station knows.
|
||||
// If there's a baddie engineer, they can choose to keep their early announcement to themselves and get a minute to exploit it.
|
||||
@@ -225,3 +226,9 @@
|
||||
command_announcement.Announce("[pick("Gr3y.T1d3 virus","Malignant trojan")] was detected \
|
||||
in \the [location_name()] [area_display_name] [containment_display_desc] subroutines. Secure any compromised \
|
||||
areas immediately. AI involvement is recommended.", "[capitalize(containment_display_desc)] Alert")
|
||||
|
||||
global_announcer.autosay(
|
||||
"It is now safe to reactivate the APCs' main breakers inside [area_display_name].",
|
||||
"[location_name()] Firewall Subroutines",
|
||||
DEPARTMENT_ENGINEERING
|
||||
)
|
||||
|
||||
@@ -6,9 +6,12 @@
|
||||
event_type = /datum/event2/event/ion_storm
|
||||
|
||||
/datum/event2/meta/ion_storm/get_weight()
|
||||
var/bots = metric.count_people_in_department(DEPARTMENT_SYNTHETIC)
|
||||
var/weight = 5 + (bots * 40) // A small chance even if no synths are on, since it can still emag beepsky.
|
||||
return weight
|
||||
var/list/bots = metric.get_people_in_department(DEPARTMENT_SYNTHETIC)
|
||||
. = 5 // A small chance even if no synths are on, since it can still emag beepsky.
|
||||
for(var/mob/living/silicon/S in bots)
|
||||
if(istype(S, /mob/living/silicon/robot/drone)) // Drones don't get their laws screwed with, so don't count them.
|
||||
continue
|
||||
. += 40
|
||||
|
||||
|
||||
/datum/event2/event/ion_storm
|
||||
|
||||
@@ -348,11 +348,11 @@
|
||||
user.visible_message("<span class = 'notice'>\The [user] [concealed ? "conceals" : "reveals"] their hand.</span>")
|
||||
|
||||
/obj/item/weapon/hand/examine(mob/user)
|
||||
..(user)
|
||||
. = ..()
|
||||
if((!concealed) && cards.len)
|
||||
to_chat(user,"It contains: ")
|
||||
. += "It contains: "
|
||||
for(var/datum/playingcard/P in cards)
|
||||
to_chat(user,"\The [P.name].")
|
||||
. += "\The [P.name]."
|
||||
|
||||
/obj/item/weapon/hand/verb/Removecard()
|
||||
|
||||
|
||||
@@ -301,7 +301,7 @@
|
||||
|
||||
last_change = world.time
|
||||
active = 1
|
||||
use_power = USE_POWER_ACTIVE
|
||||
update_use_power(USE_POWER_ACTIVE)
|
||||
|
||||
for(var/item in holographic_objs)
|
||||
derez(item)
|
||||
@@ -362,7 +362,7 @@
|
||||
|
||||
last_gravity_change = world.time
|
||||
active = 1
|
||||
use_power = USE_POWER_IDLE
|
||||
update_use_power(USE_POWER_IDLE)
|
||||
|
||||
if(A.has_gravity)
|
||||
A.gravitychange(0)
|
||||
@@ -377,4 +377,4 @@
|
||||
linkedholodeck.gravitychange(1)
|
||||
|
||||
active = 0
|
||||
use_power = USE_POWER_IDLE
|
||||
update_use_power(USE_POWER_IDLE)
|
||||
|
||||
@@ -31,9 +31,9 @@
|
||||
overlays += "bees3"
|
||||
|
||||
/obj/machinery/beehive/examine(var/mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(!closed)
|
||||
to_chat(user, "The lid is open.")
|
||||
. += "The lid is open."
|
||||
|
||||
/obj/machinery/beehive/attackby(var/obj/item/I, var/mob/user)
|
||||
if(I.is_crowbar())
|
||||
|
||||
@@ -2,4 +2,7 @@
|
||||
plantname = "ambrosia"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus
|
||||
plantname = "ambrosiadeus"
|
||||
plantname = "ambrosiadeus"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/sifpod
|
||||
plantname = "sifbulb"
|
||||
|
||||
@@ -292,6 +292,26 @@
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#FFDD00")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#D6B44D")
|
||||
|
||||
/datum/seed/apple/sif
|
||||
name = "sifbulb"
|
||||
seed_name = "sivian tree"
|
||||
display_name = "sivian tree"
|
||||
kitchen_tag = "apple"
|
||||
chems = list("nutriment" = list(1,5),"sifsap" = list(10,20))
|
||||
|
||||
/datum/seed/apple/sif/New()
|
||||
..()
|
||||
set_trait(TRAIT_HARVEST_REPEAT,1)
|
||||
set_trait(TRAIT_MATURATION,3)
|
||||
set_trait(TRAIT_PRODUCTION,10)
|
||||
set_trait(TRAIT_YIELD,3)
|
||||
set_trait(TRAIT_POTENCY,12)
|
||||
set_trait(TRAIT_PRODUCT_ICON,"alien3")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#0720c3")
|
||||
set_trait(TRAIT_PLANT_ICON,"tree5")
|
||||
set_trait(TRAIT_FLESH_COLOUR,"#05157d")
|
||||
set_trait(TRAIT_IDEAL_LIGHT, 1)
|
||||
|
||||
//Ambrosia/varieties.
|
||||
/datum/seed/ambrosia
|
||||
name = "ambrosia"
|
||||
|
||||
@@ -60,9 +60,9 @@ GLOBAL_LIST_BOILERPLATE(all_seed_packs, /obj/item/seeds)
|
||||
src.desc = "It's labelled as coming from [seed.display_name]."
|
||||
|
||||
/obj/item/seeds/examine(mob/user)
|
||||
..(user)
|
||||
. = ..()
|
||||
if(seed && !seed.roundstart)
|
||||
to_chat(user, "It's tagged as variety #[seed.uid].")
|
||||
. += "It's tagged as variety #[seed.uid]."
|
||||
|
||||
/obj/item/seeds/cutting
|
||||
name = "cuttings"
|
||||
@@ -334,3 +334,6 @@ GLOBAL_LIST_BOILERPLATE(all_seed_packs, /obj/item/seeds)
|
||||
|
||||
/obj/item/seeds/gnomes
|
||||
seed_type = "gnomes"
|
||||
|
||||
/obj/item/seeds/sifbulb
|
||||
seed_type = "sifbulb"
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/obj/machinery/portable_atmospherics/hydroponics
|
||||
name = "hydroponics tray"
|
||||
desc = "A tray usually full of fluid for growing plants."
|
||||
icon = 'icons/obj/hydroponics_machines.dmi'
|
||||
icon_state = "hydrotray3"
|
||||
density = 1
|
||||
@@ -607,32 +608,31 @@
|
||||
else if(dead)
|
||||
remove_dead(user)
|
||||
|
||||
/obj/machinery/portable_atmospherics/hydroponics/examine()
|
||||
|
||||
..()
|
||||
/obj/machinery/portable_atmospherics/hydroponics/examine(mob/user)
|
||||
. = ..()
|
||||
|
||||
if(seed)
|
||||
to_chat(usr, "<span class='notice'>[seed.display_name] are growing here.</span>")
|
||||
. += "<span class='notice'>[seed.display_name] are growing here.</span>"
|
||||
else
|
||||
to_chat(usr, "[src] is empty.")
|
||||
. += "It is empty."
|
||||
|
||||
if(!Adjacent(usr))
|
||||
return
|
||||
if(!Adjacent(user))
|
||||
return .
|
||||
|
||||
to_chat(usr, "Water: [round(waterlevel,0.1)]/100")
|
||||
to_chat(usr, "Nutrient: [round(nutrilevel,0.1)]/10")
|
||||
. += "Water: [round(waterlevel,0.1)]/100"
|
||||
. += "Nutrient: [round(nutrilevel,0.1)]/10"
|
||||
|
||||
if(seed)
|
||||
if(weedlevel >= 5)
|
||||
to_chat(usr, "\The [src] is <span class='danger'>infested with weeds</span>!")
|
||||
. += "It is <span class='danger'>infested with weeds</span>!"
|
||||
if(pestlevel >= 5)
|
||||
to_chat(usr, "\The [src] is <span class='danger'>infested with tiny worms</span>!")
|
||||
. += "It is <span class='danger'>infested with tiny worms</span>!"
|
||||
if(dead)
|
||||
to_chat(usr, "<span class='danger'>The plant is dead.</span>")
|
||||
. += "It has <span class='danger'>a dead plant</span>!"
|
||||
else if(health <= (seed.get_trait(TRAIT_ENDURANCE)/ 2))
|
||||
to_chat(usr, "The plant looks <span class='danger'>unhealthy</span>.")
|
||||
. += "It has <span class='danger'>an unhealthy plant</span>!"
|
||||
if(frozen == 1)
|
||||
to_chat(usr, "<span class='notice'>It is cryogenically frozen.</span>")
|
||||
. += "<span class='notice'>It is cryogenically frozen.</span>"
|
||||
if(mechanical)
|
||||
var/turf/T = loc
|
||||
var/datum/gas_mixture/environment
|
||||
@@ -655,7 +655,7 @@
|
||||
var/light_available = T.get_lumcount() * 5
|
||||
light_string = "a light level of [light_available] lumens"
|
||||
|
||||
to_chat(usr, "The tray's sensor suite is reporting [light_string] and a temperature of [environment.temperature]K at [environment.return_pressure()] kPa in the [environment_type] environment")
|
||||
. += "The tray's sensor suite is reporting [light_string] and a temperature of [environment.temperature]K at [environment.return_pressure()] kPa in the [environment_type] environment."
|
||||
|
||||
/obj/machinery/portable_atmospherics/hydroponics/verb/close_lid_verb()
|
||||
set name = "Toggle Tray Lid"
|
||||
|
||||
@@ -172,13 +172,10 @@
|
||||
return id_card
|
||||
|
||||
/obj/item/device/electronic_assembly/examine(mob/user)
|
||||
. = ..(user, 1)
|
||||
if(.)
|
||||
. = ..()
|
||||
if(Adjacent(user))
|
||||
for(var/obj/item/integrated_circuit/IC in contents)
|
||||
IC.external_examine(user)
|
||||
// for(var/obj/item/integrated_circuit/output/screen/S in contents)
|
||||
// if(S.stuff_to_display)
|
||||
// to_chat(user, "There's a little screen labeled '[S.name]', which displays '[S.stuff_to_display]'.")
|
||||
. += IC.external_examine(user)
|
||||
if(opened)
|
||||
interact(user)
|
||||
|
||||
|
||||
@@ -47,9 +47,9 @@
|
||||
..()
|
||||
|
||||
/obj/item/clothing/examine(mob/user)
|
||||
. = ..()
|
||||
if(IC)
|
||||
IC.examine(user)
|
||||
..()
|
||||
. += IC.examine(user)
|
||||
|
||||
/obj/item/clothing/CtrlShiftClick(mob/user)
|
||||
var/turf/T = get_turf(src)
|
||||
|
||||
@@ -46,10 +46,10 @@
|
||||
return
|
||||
|
||||
/obj/item/device/assembly/electronic_assembly/examine(mob/user)
|
||||
.=..(user, 1)
|
||||
. = ..()
|
||||
if(EA)
|
||||
for(var/obj/item/integrated_circuit/IC in EA.contents)
|
||||
IC.external_examine(user)
|
||||
. += IC.external_examine(user)
|
||||
|
||||
/obj/item/device/assembly/electronic_assembly/verb/toggle()
|
||||
set src in usr
|
||||
|
||||
@@ -4,28 +4,29 @@ a creative player the means to solve many problems. Circuits are held inside an
|
||||
*/
|
||||
|
||||
/obj/item/integrated_circuit/examine(mob/user)
|
||||
interact(user)
|
||||
external_examine(user)
|
||||
. = ..()
|
||||
. += external_examine(user)
|
||||
interact(user)
|
||||
|
||||
// This should be used when someone is examining while the case is opened.
|
||||
/obj/item/integrated_circuit/proc/internal_examine(mob/user)
|
||||
to_chat(user, "This board has [inputs.len] input pin\s, [outputs.len] output pin\s and [activators.len] activation pin\s.")
|
||||
. = list()
|
||||
. += "This board has [inputs.len] input pin\s, [outputs.len] output pin\s and [activators.len] activation pin\s."
|
||||
for(var/datum/integrated_io/I in inputs)
|
||||
if(I.linked.len)
|
||||
to_chat(user, "The '[I]' is connected to [I.get_linked_to_desc()].")
|
||||
. += "The '[I]' is connected to [I.get_linked_to_desc()]."
|
||||
for(var/datum/integrated_io/O in outputs)
|
||||
if(O.linked.len)
|
||||
to_chat(user, "The '[O]' is connected to [O.get_linked_to_desc()].")
|
||||
. += "The '[O]' is connected to [O.get_linked_to_desc()]."
|
||||
for(var/datum/integrated_io/activate/A in activators)
|
||||
if(A.linked.len)
|
||||
to_chat(user, "The '[A]' is connected to [A.get_linked_to_desc()].")
|
||||
any_examine(user)
|
||||
. += "The '[A]' is connected to [A.get_linked_to_desc()]."
|
||||
. += any_examine(user)
|
||||
interact(user)
|
||||
|
||||
// This should be used when someone is examining from an 'outside' perspective, e.g. reading a screen or LED.
|
||||
/obj/item/integrated_circuit/proc/external_examine(mob/user)
|
||||
any_examine(user)
|
||||
return any_examine(user)
|
||||
|
||||
/obj/item/integrated_circuit/proc/any_examine(mob/user)
|
||||
return
|
||||
|
||||
@@ -527,13 +527,15 @@
|
||||
listening_objects -= src
|
||||
return ..()
|
||||
|
||||
/obj/item/integrated_circuit/input/microphone/hear_talk(mob/living/M, msg, var/verb="says", datum/language/speaking=null)
|
||||
/obj/item/integrated_circuit/input/microphone/hear_talk(mob/M, list/message_pieces, verb)
|
||||
var/msg = multilingual_to_message(message_pieces, requires_machine_understands = TRUE)
|
||||
|
||||
var/translated = FALSE
|
||||
if(M && msg)
|
||||
if(speaking)
|
||||
if(!speaking.machine_understands)
|
||||
msg = speaking.scramble(msg)
|
||||
if(!istype(speaking, /datum/language/common))
|
||||
for(var/datum/multilingual_say_piece/S in message_pieces)
|
||||
// S.speaking && here is not redundant, it's preventing `S.speaking = null` from flagging
|
||||
// as a translation, when it is not.
|
||||
if(S.speaking && !istype(S.speaking, /datum/language/common))
|
||||
translated = TRUE
|
||||
set_pin_data(IC_OUTPUT, 1, M.GetVoice())
|
||||
set_pin_data(IC_OUTPUT, 2, msg)
|
||||
@@ -577,25 +579,41 @@
|
||||
var/datum/language/newlang = GLOB.all_languages[lang]
|
||||
my_langs |= newlang
|
||||
|
||||
/obj/item/integrated_circuit/input/microphone/sign/hear_talk(mob/living/M, msg, var/verb="says", datum/language/speaking=null)
|
||||
/obj/item/integrated_circuit/input/microphone/sign/hear_talk(mob/M, list/message_pieces, verb)
|
||||
var/msg = multilingual_to_message(message_pieces)
|
||||
|
||||
var/translated = FALSE
|
||||
if(M && msg)
|
||||
if(speaking)
|
||||
if(!((speaking.flags & NONVERBAL) || (speaking.flags & SIGNLANG)))
|
||||
translated = TRUE
|
||||
msg = speaking.scramble(msg, my_langs)
|
||||
for(var/datum/multilingual_say_piece/S in message_pieces)
|
||||
if(S.speaking)
|
||||
if(!((S.speaking.flags & NONVERBAL) || (S.speaking.flags & SIGNLANG)))
|
||||
translated = TRUE
|
||||
msg = stars(msg)
|
||||
break
|
||||
set_pin_data(IC_OUTPUT, 1, M.GetVoice())
|
||||
set_pin_data(IC_OUTPUT, 2, msg)
|
||||
|
||||
push_data()
|
||||
if(!translated)
|
||||
activate_pin(1)
|
||||
if(translated)
|
||||
else
|
||||
activate_pin(2)
|
||||
|
||||
/obj/item/integrated_circuit/input/microphone/sign/hear_signlang(text, verb, datum/language/speaking, mob/M as mob)
|
||||
hear_talk(M, text, verb, speaking)
|
||||
return
|
||||
var/translated = FALSE
|
||||
if(M && text)
|
||||
if(speaking)
|
||||
if(!((speaking.flags & NONVERBAL) || (speaking.flags & SIGNLANG)))
|
||||
translated = TRUE
|
||||
text = speaking.scramble(text, my_langs)
|
||||
set_pin_data(IC_OUTPUT, 1, M.GetVoice())
|
||||
set_pin_data(IC_OUTPUT, 2, text)
|
||||
|
||||
push_data()
|
||||
if(!translated)
|
||||
activate_pin(1)
|
||||
else
|
||||
activate_pin(2)
|
||||
|
||||
/obj/item/integrated_circuit/input/sensor
|
||||
name = "sensor"
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
..()
|
||||
|
||||
/obj/item/integrated_circuit/memory/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
var/i
|
||||
for(i = 1, i <= outputs.len, i++)
|
||||
var/datum/integrated_io/O = outputs[i]
|
||||
@@ -30,7 +30,7 @@
|
||||
data = "[d]"
|
||||
else if(!isnull(O.data))
|
||||
data = O.data
|
||||
to_chat(user, "\The [src] has [data] saved to address [i].")
|
||||
. += "\The [src] has [data] saved to address [i]."
|
||||
|
||||
/obj/item/integrated_circuit/memory/do_work()
|
||||
for(var/i = 1 to inputs.len)
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
stuff_to_display = null
|
||||
|
||||
/obj/item/integrated_circuit/output/screen/any_examine(mob/user)
|
||||
to_chat(user, "There is a little screen labeled '[name]', which displays [!isnull(stuff_to_display) ? "'[stuff_to_display]'" : "nothing"].")
|
||||
return "There is a little screen labeled '[name]', which displays [!isnull(stuff_to_display) ? "'[stuff_to_display]'" : "nothing"]."
|
||||
|
||||
/obj/item/integrated_circuit/output/screen/do_work()
|
||||
var/datum/integrated_io/I = inputs[1]
|
||||
@@ -333,7 +333,7 @@
|
||||
else
|
||||
text_output += "\an ["\improper[initial_name]"] labeled '[name]'"
|
||||
text_output += " which is currently [get_pin_data(IC_INPUT, 1) ? "lit <font color=[led_color]>¤</font>" : "unlit."]"
|
||||
to_chat(user,jointext(text_output,null))
|
||||
return jointext(text_output,null)
|
||||
|
||||
/obj/item/integrated_circuit/output/led/red
|
||||
name = "red LED"
|
||||
|
||||
@@ -470,6 +470,7 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f
|
||||
*/
|
||||
/obj/machinery/libraryscanner
|
||||
name = "scanner"
|
||||
desc = "A scanner for scanning in books and papers."
|
||||
icon = 'icons/obj/library.dmi'
|
||||
icon_state = "bigscanner"
|
||||
anchored = 1
|
||||
|
||||
@@ -386,6 +386,9 @@
|
||||
strict_color_stacking = TRUE
|
||||
drop_sound = 'sound/items/drop/clothing.ogg'
|
||||
|
||||
/obj/item/stack/material/cloth/diyaab
|
||||
color = "#c6ccf0"
|
||||
|
||||
/obj/item/stack/material/resin
|
||||
name = "resin"
|
||||
icon_state = "sheet-resin"
|
||||
|
||||
@@ -70,6 +70,11 @@
|
||||
if(!department)
|
||||
return
|
||||
for(var/mob/M in player_list)
|
||||
// Do not count AI's shells
|
||||
if(isrobot(M))
|
||||
var/mob/living/silicon/robot/R = M
|
||||
if(R.shell)
|
||||
continue
|
||||
if(department != DEPARTMENT_EVERYONE && guess_department(M) != department) // Ignore people outside the department we're counting.
|
||||
continue
|
||||
if(assess_player_activity(M) < cutoff)
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
new/obj/item/weapon/bikehorn(src)
|
||||
//new/obj/item/weapon/stamp/clown(src) I'd add it, but only clowns can use it
|
||||
new/obj/item/weapon/pen/crayon/rainbow(src)
|
||||
new/obj/item/toy/waterflower(src)
|
||||
new/obj/item/weapon/reagent_containers/spray/waterflower(src)
|
||||
if(95)
|
||||
new/obj/item/clothing/under/mime(src)
|
||||
new/obj/item/clothing/shoes/black(src)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user