mirror of
https://github.com/Yawn-Wider/YWPolarisVore.git
synced 2026-08-21 20:18:15 +01:00
Merge branch 'release' of https://github.com/VOREStation/VOREStation into izac-voreupdate
All conflicts resolved Signed-off-by: izac112 <izac10@live.com>
This commit is contained in:
@@ -83,7 +83,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)
|
||||
|
||||
|
||||
@@ -137,17 +137,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)
|
||||
@@ -173,7 +173,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)
|
||||
@@ -205,12 +205,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)
|
||||
|
||||
@@ -232,11 +228,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))
|
||||
@@ -272,7 +268,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))
|
||||
@@ -877,7 +877,7 @@ var/datum/announcement/minor/admin_min_announcer = new
|
||||
if(!check_rights(R_SERVER|R_EVENT))
|
||||
return
|
||||
if(SSticker.current_state > GAME_STATE_PREGAME)
|
||||
to_chat(usr, "<font color='red'>Error: Start Now: Game has already started.</font>")
|
||||
to_chat(usr, "<span class='warning'>Error: Start Now: Game has already started.</span>")
|
||||
return
|
||||
if(!SSticker.start_immediately)
|
||||
SSticker.start_immediately = TRUE
|
||||
@@ -885,11 +885,11 @@ var/datum/announcement/minor/admin_min_announcer = new
|
||||
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("<font color='blue'>[key_name_admin(usr)] has started the game.[msg]</font>")
|
||||
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!
|
||||
else
|
||||
SSticker.start_immediately = FALSE
|
||||
to_chat(world, "<b>Immediate game start canceled. Normal startup resumed.</b>")
|
||||
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()
|
||||
|
||||
@@ -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
|
||||
@@ -0,0 +1,531 @@
|
||||
//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/quick_nif, //VOREStation Add,
|
||||
/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/smite_vr, //VOREStation Add,
|
||||
/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/spawn_character_mob, //VOREStation Add,
|
||||
/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, // VOREStation Edit - We don't use SSgame_master yet.
|
||||
/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, // VOREStation Edit - We don't use SSgame_master yet.
|
||||
/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,537 +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/SetCKey, //set the ckey of a mob
|
||||
// /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/quick_nif, //VOREStation Add,
|
||||
/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_vr, //VOREStation Add,
|
||||
/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/spawn_character_mob, //VOREStation Add,
|
||||
/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/debug_rogueminer,
|
||||
/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, // VOREStation Edit - We don't use SSgame_master yet.
|
||||
/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_admin_say, //VOREStation Edit - Event managers can use asay,
|
||||
/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, // VOREStation Edit - We don't use SSgame_master yet.
|
||||
/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)
|
||||
control_freak = CONTROL_FREAK_SKIN | CONTROL_FREAK_MACROS
|
||||
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"
|
||||
@@ -539,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
|
||||
|
||||
@@ -550,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
|
||||
|
||||
@@ -561,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!
|
||||
|
||||
|
||||
@@ -575,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
|
||||
@@ -600,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)
|
||||
|
||||
|
||||
@@ -722,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
|
||||
@@ -734,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
|
||||
@@ -743,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.")
|
||||
@@ -758,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.")
|
||||
@@ -881,19 +346,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)
|
||||
@@ -906,7 +367,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()
|
||||
@@ -918,7 +379,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!
|
||||
|
||||
@@ -927,12 +388,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"
|
||||
@@ -994,7 +451,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"))
|
||||
@@ -1037,7 +494,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")
|
||||
@@ -1125,28 +582,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"
|
||||
@@ -1156,8 +601,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)
|
||||
@@ -1170,7 +615,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.")
|
||||
|
||||
@@ -1,210 +1,210 @@
|
||||
/client/proc/callproc()
|
||||
set category = "Debug"
|
||||
set name = "Advanced ProcCall"
|
||||
set waitfor = 0
|
||||
|
||||
if(!check_rights(R_DEBUG))
|
||||
return
|
||||
|
||||
var/datum/target = null
|
||||
var/targetselected = 0
|
||||
var/returnval = null
|
||||
|
||||
switch(alert("Proc owned by something?",,"Yes","No"))
|
||||
if("Yes")
|
||||
targetselected = 1
|
||||
var/list/value = vv_get_value(default_class = VV_ATOM_REFERENCE, classes = list(VV_ATOM_REFERENCE, VV_DATUM_REFERENCE, VV_MOB_REFERENCE, VV_CLIENT))
|
||||
if (!value["class"] || !value["value"])
|
||||
return
|
||||
target = value["value"]
|
||||
if("No")
|
||||
target = null
|
||||
targetselected = 0
|
||||
|
||||
var/procname = input("Proc path, eg: /proc/fake_blood","Path:", null) as text|null
|
||||
if(!procname)
|
||||
return
|
||||
|
||||
//hascall() doesn't support proc paths (eg: /proc/gib(), it only supports "gib")
|
||||
var/testname = procname
|
||||
if(targetselected)
|
||||
//Find one of the 3 possible ways they could have written /proc/PROCNAME
|
||||
if(findtext(procname, "/proc/"))
|
||||
testname = replacetext(procname, "/proc/", "")
|
||||
else if(findtext(procname, "/proc"))
|
||||
testname = replacetext(procname, "/proc", "")
|
||||
else if(findtext(procname, "proc/"))
|
||||
testname = replacetext(procname, "proc/", "")
|
||||
//Clear out any parenthesis if they're a dummy
|
||||
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>")
|
||||
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>")
|
||||
return
|
||||
var/list/lst = get_callproc_args()
|
||||
if(!lst)
|
||||
return
|
||||
|
||||
if(targetselected)
|
||||
if(!target)
|
||||
to_chat(usr, "<font color='red'>Error: callproc(): owner of proc no longer exists.</font>")
|
||||
return
|
||||
var/msg = "[key_name(src)] called [target]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"]."
|
||||
log_admin(msg)
|
||||
//message_admins(msg) //Proccall announce removed.
|
||||
admin_ticket_log(target, msg)
|
||||
returnval = WrapAdminProcCall(target, procname, lst) // Pass the lst as an argument list to the proc
|
||||
else
|
||||
//this currently has no hascall protection. wasn't able to get it working.
|
||||
log_admin("[key_name(src)] called [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].")
|
||||
//message_admins("[key_name(src)] called [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].") //Proccall announce removed.
|
||||
returnval = WrapAdminProcCall(GLOBAL_PROC, procname, lst) // Pass the lst as an argument list to the proc
|
||||
. = get_callproc_returnval(returnval, procname)
|
||||
if(.)
|
||||
to_chat(usr, .)
|
||||
feedback_add_details("admin_verb","APC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
GLOBAL_VAR(AdminProcCaller)
|
||||
GLOBAL_PROTECT(AdminProcCaller)
|
||||
GLOBAL_VAR_INIT(AdminProcCallCount, 0)
|
||||
GLOBAL_PROTECT(AdminProcCallCount)
|
||||
GLOBAL_VAR(LastAdminCalledTargetRef)
|
||||
GLOBAL_PROTECT(LastAdminCalledTargetRef)
|
||||
GLOBAL_VAR(LastAdminCalledTarget)
|
||||
GLOBAL_PROTECT(LastAdminCalledTarget)
|
||||
GLOBAL_VAR(LastAdminCalledProc)
|
||||
GLOBAL_PROTECT(LastAdminCalledProc)
|
||||
GLOBAL_LIST_EMPTY(AdminProcCallSpamPrevention)
|
||||
GLOBAL_PROTECT(AdminProcCallSpamPrevention)
|
||||
|
||||
/proc/WrapAdminProcCall(datum/target, procname, list/arguments)
|
||||
if(target && procname == "Del")
|
||||
to_chat(usr, "Calling Del() is not allowed")
|
||||
return
|
||||
|
||||
if(target != GLOBAL_PROC && !target.CanProcCall(procname))
|
||||
to_chat(usr, "Proccall on [target.type]/proc/[procname] is disallowed!")
|
||||
return
|
||||
var/current_caller = GLOB.AdminProcCaller
|
||||
var/ckey = usr ? usr.client.ckey : GLOB.AdminProcCaller
|
||||
if(!ckey)
|
||||
CRASH("WrapAdminProcCall with no ckey: [target] [procname] [english_list(arguments)]")
|
||||
if(current_caller && current_caller != ckey)
|
||||
if(!GLOB.AdminProcCallSpamPrevention[ckey])
|
||||
to_chat(usr, "<span class='adminnotice'>Another set of admin called procs are still running, your proc will be run after theirs finish.</span>")
|
||||
GLOB.AdminProcCallSpamPrevention[ckey] = TRUE
|
||||
UNTIL(!GLOB.AdminProcCaller)
|
||||
to_chat(usr, "<span class='adminnotice'>Running your proc</span>")
|
||||
GLOB.AdminProcCallSpamPrevention -= ckey
|
||||
else
|
||||
UNTIL(!GLOB.AdminProcCaller)
|
||||
GLOB.LastAdminCalledProc = procname
|
||||
if(target != GLOBAL_PROC)
|
||||
GLOB.LastAdminCalledTargetRef = "\ref[target]"
|
||||
GLOB.AdminProcCaller = ckey //if this runtimes, too bad for you
|
||||
++GLOB.AdminProcCallCount
|
||||
. = world.WrapAdminProcCall(target, procname, arguments)
|
||||
if(--GLOB.AdminProcCallCount == 0)
|
||||
GLOB.AdminProcCaller = null
|
||||
|
||||
//adv proc call this, ya nerds
|
||||
/world/proc/WrapAdminProcCall(datum/target, procname, list/arguments)
|
||||
if(target == GLOBAL_PROC)
|
||||
return call(procname)(arglist(arguments))
|
||||
else if(target != world)
|
||||
return call(target, procname)(arglist(arguments))
|
||||
else
|
||||
log_admin("[key_name(usr)] attempted to call world/proc/[procname] with arguments: [english_list(arguments)]")
|
||||
|
||||
/proc/IsAdminAdvancedProcCall()
|
||||
#ifdef TESTING
|
||||
return FALSE
|
||||
#else
|
||||
return usr && usr.client && GLOB.AdminProcCaller == usr.client.ckey
|
||||
#endif
|
||||
|
||||
/client/proc/callproc_datum(datum/A as null|area|mob|obj|turf)
|
||||
set category = "Debug"
|
||||
set name = "Atom ProcCall"
|
||||
set waitfor = 0
|
||||
|
||||
if(!check_rights(R_DEBUG))
|
||||
return
|
||||
|
||||
var/procname = input("Proc name, eg: fake_blood","Proc:", null) as text|null
|
||||
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>")
|
||||
return
|
||||
var/list/lst = get_callproc_args()
|
||||
if(!lst)
|
||||
return
|
||||
|
||||
if(!A || !IsValidSrc(A))
|
||||
to_chat(usr, "<span class='warning'>Error: callproc_datum(): owner of proc no longer exists.</span>")
|
||||
return
|
||||
var/msg = "[key_name(src)] called [A]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"]."
|
||||
log_admin(msg)
|
||||
//message_admins(msg)
|
||||
admin_ticket_log(A, msg)
|
||||
feedback_add_details("admin_verb","TPC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
var/returnval = WrapAdminProcCall(A, procname, lst) // Pass the lst as an argument list to the proc
|
||||
. = get_callproc_returnval(returnval,procname)
|
||||
if(.)
|
||||
to_chat(usr, .)
|
||||
|
||||
/client/proc/get_callproc_args()
|
||||
var/argnum = input("Number of arguments","Number:",0) as num|null
|
||||
if(isnull(argnum))
|
||||
return null //Cancel
|
||||
|
||||
. = list()
|
||||
//var/list/named_args = list() //Named arguments are removed, due to them making proccalling take too long.
|
||||
while(argnum--)
|
||||
/* //Named arguments are removed, due to them making proccalling take too long.
|
||||
var/named_arg = input("Leave blank for positional argument. Positional arguments will be considered as if they were added first.", "Named argument") as text|null
|
||||
if(isnull(named_arg))
|
||||
return null //Cancel
|
||||
*/
|
||||
var/value = vv_get_value(restricted_classes = list(VV_RESTORE_DEFAULT))
|
||||
if (!value["class"])
|
||||
return null //Cancel
|
||||
/* //Named arguments are removed, due to them making proccalling take too long.
|
||||
if(named_arg)
|
||||
named_args[named_arg] = value["value"]
|
||||
else
|
||||
. += value["value"]
|
||||
if(LAZYLEN(named_args))
|
||||
. += named_args
|
||||
*/
|
||||
. += value["value"]
|
||||
|
||||
/client/proc/get_callproc_returnval(returnval,procname)
|
||||
. = ""
|
||||
if(islist(returnval))
|
||||
var/list/returnedlist = returnval
|
||||
. = "<font color='blue'>"
|
||||
if(returnedlist.len)
|
||||
var/assoc_check = returnedlist[1]
|
||||
if(istext(assoc_check) && (returnedlist[assoc_check] != null))
|
||||
. += "[procname] returned an associative list:"
|
||||
for(var/key in returnedlist)
|
||||
. += "\n[key] = [returnedlist[key]]"
|
||||
|
||||
else
|
||||
. += "[procname] returned a list:"
|
||||
for(var/elem in returnedlist)
|
||||
. += "\n[elem]"
|
||||
else
|
||||
. = "[procname] returned an empty list"
|
||||
. += "</font>"
|
||||
|
||||
else
|
||||
. = "<font color='blue'>[procname] returned: [!isnull(returnval) ? returnval : "null"]</font>"
|
||||
/client/proc/callproc()
|
||||
set category = "Debug"
|
||||
set name = "Advanced ProcCall"
|
||||
set waitfor = 0
|
||||
|
||||
if(!check_rights(R_DEBUG))
|
||||
return
|
||||
|
||||
var/datum/target = null
|
||||
var/targetselected = 0
|
||||
var/returnval = null
|
||||
|
||||
switch(alert("Proc owned by something?",,"Yes","No"))
|
||||
if("Yes")
|
||||
targetselected = 1
|
||||
var/list/value = vv_get_value(default_class = VV_ATOM_REFERENCE, classes = list(VV_ATOM_REFERENCE, VV_DATUM_REFERENCE, VV_MOB_REFERENCE, VV_CLIENT))
|
||||
if (!value["class"] || !value["value"])
|
||||
return
|
||||
target = value["value"]
|
||||
if("No")
|
||||
target = null
|
||||
targetselected = 0
|
||||
|
||||
var/procname = input("Proc path, eg: /proc/fake_blood","Path:", null) as text|null
|
||||
if(!procname)
|
||||
return
|
||||
|
||||
//hascall() doesn't support proc paths (eg: /proc/gib(), it only supports "gib")
|
||||
var/testname = procname
|
||||
if(targetselected)
|
||||
//Find one of the 3 possible ways they could have written /proc/PROCNAME
|
||||
if(findtext(procname, "/proc/"))
|
||||
testname = replacetext(procname, "/proc/", "")
|
||||
else if(findtext(procname, "/proc"))
|
||||
testname = replacetext(procname, "/proc", "")
|
||||
else if(findtext(procname, "proc/"))
|
||||
testname = replacetext(procname, "proc/", "")
|
||||
//Clear out any parenthesis if they're a dummy
|
||||
testname = replacetext(testname, "()", "")
|
||||
|
||||
if(targetselected && !hascall(target,testname))
|
||||
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, "<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)
|
||||
return
|
||||
|
||||
if(targetselected)
|
||||
if(!target)
|
||||
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)
|
||||
//message_admins(msg) //Proccall announce removed.
|
||||
admin_ticket_log(target, msg)
|
||||
returnval = WrapAdminProcCall(target, procname, lst) // Pass the lst as an argument list to the proc
|
||||
else
|
||||
//this currently has no hascall protection. wasn't able to get it working.
|
||||
log_admin("[key_name(src)] called [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].")
|
||||
//message_admins("[key_name(src)] called [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].") //Proccall announce removed.
|
||||
returnval = WrapAdminProcCall(GLOBAL_PROC, procname, lst) // Pass the lst as an argument list to the proc
|
||||
. = get_callproc_returnval(returnval, procname)
|
||||
if(.)
|
||||
to_chat(usr, .)
|
||||
feedback_add_details("admin_verb","APC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
GLOBAL_VAR(AdminProcCaller)
|
||||
GLOBAL_PROTECT(AdminProcCaller)
|
||||
GLOBAL_VAR_INIT(AdminProcCallCount, 0)
|
||||
GLOBAL_PROTECT(AdminProcCallCount)
|
||||
GLOBAL_VAR(LastAdminCalledTargetRef)
|
||||
GLOBAL_PROTECT(LastAdminCalledTargetRef)
|
||||
GLOBAL_VAR(LastAdminCalledTarget)
|
||||
GLOBAL_PROTECT(LastAdminCalledTarget)
|
||||
GLOBAL_VAR(LastAdminCalledProc)
|
||||
GLOBAL_PROTECT(LastAdminCalledProc)
|
||||
GLOBAL_LIST_EMPTY(AdminProcCallSpamPrevention)
|
||||
GLOBAL_PROTECT(AdminProcCallSpamPrevention)
|
||||
|
||||
/proc/WrapAdminProcCall(datum/target, procname, list/arguments)
|
||||
if(target && procname == "Del")
|
||||
to_chat(usr, "<span class='filter_adminlog'>Calling Del() is not allowed</span>")
|
||||
return
|
||||
|
||||
if(target != GLOBAL_PROC && !target.CanProcCall(procname))
|
||||
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
|
||||
if(!ckey)
|
||||
CRASH("WrapAdminProcCall with no ckey: [target] [procname] [english_list(arguments)]")
|
||||
if(current_caller && current_caller != ckey)
|
||||
if(!GLOB.AdminProcCallSpamPrevention[ckey])
|
||||
to_chat(usr, "<span class='adminnotice'>Another set of admin called procs are still running, your proc will be run after theirs finish.</span>")
|
||||
GLOB.AdminProcCallSpamPrevention[ckey] = TRUE
|
||||
UNTIL(!GLOB.AdminProcCaller)
|
||||
to_chat(usr, "<span class='adminnotice'>Running your proc</span>")
|
||||
GLOB.AdminProcCallSpamPrevention -= ckey
|
||||
else
|
||||
UNTIL(!GLOB.AdminProcCaller)
|
||||
GLOB.LastAdminCalledProc = procname
|
||||
if(target != GLOBAL_PROC)
|
||||
GLOB.LastAdminCalledTargetRef = "\ref[target]"
|
||||
GLOB.AdminProcCaller = ckey //if this runtimes, too bad for you
|
||||
++GLOB.AdminProcCallCount
|
||||
. = world.WrapAdminProcCall(target, procname, arguments)
|
||||
if(--GLOB.AdminProcCallCount == 0)
|
||||
GLOB.AdminProcCaller = null
|
||||
|
||||
//adv proc call this, ya nerds
|
||||
/world/proc/WrapAdminProcCall(datum/target, procname, list/arguments)
|
||||
if(target == GLOBAL_PROC)
|
||||
return call(procname)(arglist(arguments))
|
||||
else if(target != world)
|
||||
return call(target, procname)(arglist(arguments))
|
||||
else
|
||||
log_admin("[key_name(usr)] attempted to call world/proc/[procname] with arguments: [english_list(arguments)]")
|
||||
|
||||
/proc/IsAdminAdvancedProcCall()
|
||||
#ifdef TESTING
|
||||
return FALSE
|
||||
#else
|
||||
return usr && usr.client && GLOB.AdminProcCaller == usr.client.ckey
|
||||
#endif
|
||||
|
||||
/client/proc/callproc_datum(datum/A as null|area|mob|obj|turf)
|
||||
set category = "Debug"
|
||||
set name = "Atom ProcCall"
|
||||
set waitfor = 0
|
||||
|
||||
if(!check_rights(R_DEBUG))
|
||||
return
|
||||
|
||||
var/procname = input("Proc name, eg: fake_blood","Proc:", null) as text|null
|
||||
if(!procname)
|
||||
return
|
||||
if(!hascall(A,procname))
|
||||
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)
|
||||
return
|
||||
|
||||
if(!A || !IsValidSrc(A))
|
||||
to_chat(usr, "<span class='warning'>Error: callproc_datum(): owner of proc no longer exists.</span>")
|
||||
return
|
||||
var/msg = "[key_name(src)] called [A]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"]."
|
||||
log_admin(msg)
|
||||
//message_admins(msg)
|
||||
admin_ticket_log(A, msg)
|
||||
feedback_add_details("admin_verb","TPC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
var/returnval = WrapAdminProcCall(A, procname, lst) // Pass the lst as an argument list to the proc
|
||||
. = get_callproc_returnval(returnval,procname)
|
||||
if(.)
|
||||
to_chat(usr, .)
|
||||
|
||||
/client/proc/get_callproc_args()
|
||||
var/argnum = input("Number of arguments","Number:",0) as num|null
|
||||
if(isnull(argnum))
|
||||
return null //Cancel
|
||||
|
||||
. = list()
|
||||
//var/list/named_args = list() //Named arguments are removed, due to them making proccalling take too long.
|
||||
while(argnum--)
|
||||
/* //Named arguments are removed, due to them making proccalling take too long.
|
||||
var/named_arg = input("Leave blank for positional argument. Positional arguments will be considered as if they were added first.", "Named argument") as text|null
|
||||
if(isnull(named_arg))
|
||||
return null //Cancel
|
||||
*/
|
||||
var/value = vv_get_value(restricted_classes = list(VV_RESTORE_DEFAULT))
|
||||
if (!value["class"])
|
||||
return null //Cancel
|
||||
/* //Named arguments are removed, due to them making proccalling take too long.
|
||||
if(named_arg)
|
||||
named_args[named_arg] = value["value"]
|
||||
else
|
||||
. += value["value"]
|
||||
if(LAZYLEN(named_args))
|
||||
. += named_args
|
||||
*/
|
||||
. += value["value"]
|
||||
|
||||
/client/proc/get_callproc_returnval(returnval,procname)
|
||||
. = ""
|
||||
if(islist(returnval))
|
||||
var/list/returnedlist = returnval
|
||||
. = "<font color='blue'>"
|
||||
if(returnedlist.len)
|
||||
var/assoc_check = returnedlist[1]
|
||||
if(istext(assoc_check) && (returnedlist[assoc_check] != null))
|
||||
. += "[procname] returned an associative list:"
|
||||
for(var/key in returnedlist)
|
||||
. += "\n[key] = [returnedlist[key]]"
|
||||
|
||||
else
|
||||
. += "[procname] returned a list:"
|
||||
for(var/elem in returnedlist)
|
||||
. += "\n[elem]"
|
||||
else
|
||||
. = "[procname] returned an empty list"
|
||||
. += "</font>"
|
||||
|
||||
else
|
||||
. = "<font color='blue'>[procname] returned: [!isnull(returnval) ? returnval : "null"]</font>"
|
||||
|
||||
@@ -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>")
|
||||
@@ -0,0 +1,34 @@
|
||||
/**********
|
||||
* Gravity *
|
||||
**********/
|
||||
/datum/admin_secret_item/random_event/gravity
|
||||
name = "Toggle Station Artificial Gravity"
|
||||
|
||||
/datum/admin_secret_item/random_event/gravity/can_execute(var/mob/user)
|
||||
if(!(ticker && ticker.mode))
|
||||
return 0
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/admin_secret_item/random_event/gravity/execute(var/mob/user)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
|
||||
gravity_is_on = !gravity_is_on
|
||||
for(var/obj/machinery/gravity_generator/main/GG in machines)
|
||||
if(GG.z in using_map.station_levels)
|
||||
GG.breaker = gravity_is_on
|
||||
GG.set_power()
|
||||
GG.charge_count = gravity_is_on ? 90 : 10
|
||||
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","Grav")
|
||||
if(gravity_is_on)
|
||||
log_admin("[key_name(user)] toggled gravity on.", 1)
|
||||
message_admins("<span class='notice'>[key_name_admin(user)] toggled gravity on.</span>", 1)
|
||||
command_announcement.Announce("Gravity generators are again functioning within normal parameters. Sorry for any inconvenience.")
|
||||
else
|
||||
log_admin("[key_name(user)] toggled gravity off.", 1)
|
||||
message_admins("<span class='notice'>[key_name_admin(usr)] toggled gravity off.</span>", 1)
|
||||
command_announcement.Announce("Feedback surge detected in mass-distributions systems. Artificial gravity has been disabled. Please wait for the system to reinitialize, or contact your engineering department.", "Gravity Failure")
|
||||
+94
-92
@@ -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 = ""
|
||||
@@ -631,16 +631,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
|
||||
@@ -649,7 +649,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.
|
||||
@@ -726,16 +726,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)
|
||||
@@ -755,9 +755,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")
|
||||
@@ -776,9 +776,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")
|
||||
@@ -788,7 +788,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
|
||||
@@ -809,7 +809,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!
|
||||
@@ -823,7 +823,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
|
||||
@@ -874,15 +874,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
|
||||
@@ -901,12 +901,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.")
|
||||
@@ -992,7 +992,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)]")
|
||||
@@ -1004,7 +1004,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)]")
|
||||
@@ -1016,7 +1016,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
|
||||
@@ -1033,10 +1033,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)
|
||||
@@ -1061,7 +1061,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)
|
||||
|
||||
@@ -1071,11 +1071,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")
|
||||
@@ -1096,10 +1096,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)
|
||||
@@ -1109,7 +1109,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)
|
||||
|
||||
@@ -1121,10 +1121,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)
|
||||
@@ -1134,7 +1134,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)
|
||||
|
||||
@@ -1146,17 +1146,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)
|
||||
|
||||
@@ -1168,10 +1168,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)
|
||||
@@ -1185,7 +1185,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)
|
||||
|
||||
@@ -1194,7 +1194,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)
|
||||
@@ -1202,14 +1202,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)
|
||||
@@ -1221,7 +1221,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)
|
||||
@@ -1231,7 +1231,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)
|
||||
@@ -1241,7 +1241,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)
|
||||
@@ -1260,7 +1260,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)
|
||||
@@ -1303,7 +1303,7 @@
|
||||
for(var/client/X in admins)
|
||||
if((R_ADMIN|R_MOD|R_SERVER) & X.holder.rights) //VOREStation Edit
|
||||
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>")
|
||||
// VoreStation Edit Start
|
||||
if (config.chat_webhook_url)
|
||||
spawn(0)
|
||||
@@ -1334,7 +1334,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 = ""
|
||||
@@ -1374,19 +1374,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 )
|
||||
@@ -1403,14 +1404,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)
|
||||
@@ -1420,7 +1421,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")
|
||||
@@ -1431,14 +1432,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))
|
||||
@@ -1448,24 +1449,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"])
|
||||
@@ -1487,7 +1489,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"])
|
||||
@@ -1559,7 +1561,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)
|
||||
|
||||
@@ -1583,7 +1585,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
|
||||
@@ -1643,24 +1645,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
|
||||
@@ -1912,17 +1914,17 @@
|
||||
if(check_rights(R_SPAWN)) //VOREStation Edit
|
||||
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>")
|
||||
|
||||
|
||||
|
||||
@@ -273,7 +273,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)
|
||||
@@ -297,9 +297,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)]."
|
||||
@@ -314,9 +314,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)]"
|
||||
@@ -332,9 +332,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)]"
|
||||
@@ -348,9 +348,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)
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
A.on_mob_jump()
|
||||
A.forceMove(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")
|
||||
|
||||
@@ -94,7 +94,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)]")
|
||||
@@ -169,4 +169,34 @@
|
||||
message_admins(msg)
|
||||
admin_ticket_log(M, msg)
|
||||
else
|
||||
alert("Admin jumping disabled")
|
||||
alert("Admin jumping disabled")
|
||||
|
||||
/client/proc/cmd_admin_move_atom(var/atom/movable/AM, tx as num, ty as num, tz as num)
|
||||
set category = "Admin"
|
||||
set name = "Move Atom to Coordinate"
|
||||
|
||||
if(!check_rights(R_ADMIN|R_DEBUG|R_EVENT))
|
||||
return
|
||||
|
||||
if(config.allow_admin_jump)
|
||||
if(isnull(tx))
|
||||
tx = input("Select X coordinate", "Move Atom", null, null) as null|num
|
||||
if(!tx) return
|
||||
if(isnull(ty))
|
||||
ty = input("Select Y coordinate", "Move Atom", null, null) as null|num
|
||||
if(!ty) return
|
||||
if(isnull(tz))
|
||||
tz = input("Select Z coordinate", "Move Atom", null, null) as null|num
|
||||
if(!tz) return
|
||||
var/turf/T = locate(tx, ty, tz)
|
||||
if(!T)
|
||||
to_chat(usr, "<span class='warning'>Those coordinates are outside the boundaries of the map.</span>")
|
||||
return
|
||||
if(ismob(AM))
|
||||
var/mob/M = AM
|
||||
M.on_mob_jump()
|
||||
AM.forceMove(T)
|
||||
feedback_add_details("admin_verb", "MA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
message_admins("[key_name_admin(usr)] jumped [AM] to coordinates [tx], [ty], [tz]")
|
||||
else
|
||||
alert("Admin jumping disabled")
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -56,18 +56,12 @@
|
||||
return
|
||||
|
||||
BSACooldown = 1
|
||||
spawn(50)
|
||||
BSACooldown = 0
|
||||
VARSET_IN(global, BSACooldown, FALSE, 5 SECONDS)
|
||||
|
||||
to_chat(target,"You've been hit by bluespace artillery!")
|
||||
log_and_message_admins("[key_name(target)] has been hit by Bluespace Artillery fired by [key_name(user ? user : usr)]")
|
||||
|
||||
var/obj/effect/stop/S
|
||||
S = new /obj/effect/stop
|
||||
S.victim = target
|
||||
S.loc = target.loc
|
||||
spawn(20)
|
||||
qdel(S)
|
||||
target.setMoveCooldown(2 SECONDS)
|
||||
|
||||
var/turf/simulated/floor/T = get_turf(target)
|
||||
if(istype(T))
|
||||
|
||||
@@ -228,7 +228,7 @@ var/redspace_abduction_z
|
||||
fake_autosave(L, user)
|
||||
return
|
||||
|
||||
target.move_delay = 99999999
|
||||
target.setMoveCooldown(10 SECONDS)
|
||||
|
||||
to_chat(target, "<span class='notice' style='font: small-caps bold large monospace!important'>Autosaving your progress, please wait...</span>")
|
||||
target << 'sound/effects/ding.ogg'
|
||||
@@ -257,7 +257,6 @@ var/redspace_abduction_z
|
||||
|
||||
spawn(10 SECONDS)
|
||||
if(target)
|
||||
target.move_delay = 0
|
||||
to_chat(target, "<span class='notice' style='font: small-caps bold large monospace!important'>Autosave complete!</span>")
|
||||
if(target.client)
|
||||
target.client.screen -= loader
|
||||
if(target.client)
|
||||
target.client.screen -= loader
|
||||
|
||||
@@ -142,6 +142,7 @@
|
||||
hostile = FALSE
|
||||
retaliate = FALSE
|
||||
cooperative = FALSE
|
||||
holder.a_intent = I_HELP
|
||||
|
||||
// The holder's attack changes based on intent. This lets the AI choose what effect is desired.
|
||||
/datum/ai_holder/simple_mob/xenobio_slime/pre_melee_attack(atom/A)
|
||||
@@ -178,6 +179,7 @@
|
||||
if(!(H in grudges)) // Unless they're an ass.
|
||||
return FALSE
|
||||
if(discipline && !rabid)
|
||||
holder.a_intent = I_HELP
|
||||
return FALSE // We're a good slime.
|
||||
|
||||
/datum/ai_holder/simple_mob/xenobio_slime/react_to_attack(atom/movable/attacker)
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
/datum/ai_holder/simple_mob/xenobio_slime/post_melee_attack(atom/A)
|
||||
var/mob/living/simple_mob/slime/xenobio/my_slime = holder
|
||||
my_slime.a_intent = I_HELP // Return back to help after attacking
|
||||
@@ -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,21 @@
|
||||
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,
|
||||
STANCE_DISABLED
|
||||
)
|
||||
var/list/static/noprocess_stances = list(
|
||||
STANCE_SLEEP
|
||||
)
|
||||
|
||||
|
||||
/datum/ai_holder/hostile
|
||||
@@ -40,16 +62,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 +118,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 +128,6 @@
|
||||
if(!should_wake())
|
||||
return
|
||||
set_stance(STANCE_IDLE)
|
||||
SSai.processing += src
|
||||
update_paused_hud()
|
||||
|
||||
/datum/ai_holder/proc/should_wake()
|
||||
@@ -122,12 +160,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 +216,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 +277,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 +341,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)
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
/datum/ai_holder/can_see_target(atom/movable/the_target, view_range = vision_range)
|
||||
if(the_target && isbelly(the_target.loc))
|
||||
return FALSE
|
||||
|
||||
return ..()
|
||||
@@ -7,12 +7,12 @@
|
||||
return FALSE
|
||||
|
||||
/mob/living/simple_mob/IAttack(atom/A)
|
||||
if(!canClick()) // Still on cooldown from a "click".
|
||||
if(!checkClickCooldown()) // Still on cooldown from a "click".
|
||||
return ATTACK_ON_COOLDOWN
|
||||
return attack_target(A) // This will set click cooldown.
|
||||
|
||||
/mob/living/carbon/human/IAttack(atom/A)
|
||||
if(!canClick()) // Still on cooldown from a "click".
|
||||
if(!checkClickCooldown()) // Still on cooldown from a "click".
|
||||
return FALSE
|
||||
return ClickOn(A) // Except this is an actual fake "click".
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
return FALSE
|
||||
|
||||
/mob/living/simple_mob/IRangedAttack(atom/A)
|
||||
if(!canClick()) // Still on cooldown from a "click".
|
||||
if(!checkClickCooldown()) // Still on cooldown from a "click".
|
||||
return ATTACK_ON_COOLDOWN
|
||||
return shoot_target(A)
|
||||
|
||||
@@ -74,30 +74,29 @@
|
||||
// Respects move cooldowns as if it had a client.
|
||||
// Also tries to avoid being superdumb with moving into certain tiles (unless that's desired).
|
||||
/mob/living/proc/IMove(turf/newloc, safety = TRUE)
|
||||
if(check_move_cooldown())
|
||||
// if(!newdir)
|
||||
// newdir = get_dir(get_turf(src), newloc)
|
||||
if(!checkMoveCooldown())
|
||||
return MOVEMENT_ON_COOLDOWN
|
||||
|
||||
// Check to make sure moving to newloc won't actually kill us. e.g. we're a slime and trying to walk onto water.
|
||||
if(istype(newloc))
|
||||
if(safety && !newloc.is_safe_to_enter(src))
|
||||
return MOVEMENT_FAILED
|
||||
|
||||
// Move()ing to another tile successfully returns 32 because BYOND. Would rather deal with TRUE/FALSE-esque terms.
|
||||
// Note that moving to the same tile will be 'successful'.
|
||||
var/turf/old_T = get_turf(src)
|
||||
|
||||
// An adjacency check to avoid mobs phasing diagonally past windows.
|
||||
// This might be better in general movement code but I'm too scared to add it, and most things don't move diagonally anyways.
|
||||
if(!old_T.Adjacent(newloc))
|
||||
// Check to make sure moving to newloc won't actually kill us. e.g. we're a slime and trying to walk onto water.
|
||||
if(istype(newloc))
|
||||
if(safety && !newloc.is_safe_to_enter(src))
|
||||
return MOVEMENT_FAILED
|
||||
|
||||
. = SelfMove(newloc) ? MOVEMENT_SUCCESSFUL : MOVEMENT_FAILED
|
||||
if(. == MOVEMENT_SUCCESSFUL)
|
||||
set_dir(get_dir(old_T, newloc))
|
||||
// Apply movement delay.
|
||||
// Player movement has more factors but its all in the client and fixing that would be its own project.
|
||||
setMoveCooldown(movement_delay())
|
||||
return
|
||||
// Move()ing to another tile successfully returns 32 because BYOND. Would rather deal with TRUE/FALSE-esque terms.
|
||||
// Note that moving to the same tile will be 'successful'.
|
||||
var/turf/old_T = get_turf(src)
|
||||
|
||||
. = MOVEMENT_ON_COOLDOWN // To avoid superfast mobs that aren't meant to be superfast. Is actually -1.
|
||||
// An adjacency check to avoid mobs phasing diagonally past windows.
|
||||
// This might be better in general movement code but I'm too scared to add it, and most things don't move diagonally anyways.
|
||||
if(!old_T.Adjacent(newloc))
|
||||
return MOVEMENT_FAILED
|
||||
|
||||
var/delay_will_be = movement_delay()
|
||||
|
||||
. = SelfMove(newloc, get_dir(loc,newloc), delay_will_be) ? MOVEMENT_SUCCESSFUL : MOVEMENT_FAILED
|
||||
if(. == MOVEMENT_SUCCESSFUL)
|
||||
set_dir(get_dir(old_T, newloc))
|
||||
// Apply movement delay.
|
||||
// Player movement has more factors but its all in the client and fixing that would be its own project.
|
||||
setMoveCooldown(delay_will_be)
|
||||
return
|
||||
@@ -5,7 +5,7 @@
|
||||
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 && (z && !(A.origin?.z in map_levels)))
|
||||
if(z && !(A.origin?.z in map_levels))
|
||||
continue
|
||||
if(A.max_severity() > 1)
|
||||
major_alarms.Add(A)
|
||||
@@ -15,7 +15,7 @@
|
||||
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 && (z && !(A.origin?.z in map_levels)))
|
||||
if(z && !(A.origin?.z in map_levels))
|
||||
continue
|
||||
if(A.max_severity() == 1)
|
||||
minor_alarms.Add(A)
|
||||
|
||||
@@ -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)
|
||||
@@ -84,8 +84,8 @@
|
||||
if(a_right)
|
||||
a_right.on_found(finder)
|
||||
|
||||
/obj/item/device/assembly_holder/Move()
|
||||
..()
|
||||
/obj/item/device/assembly_holder/Moved(atom/old_loc, direction, forced = FALSE)
|
||||
. = ..()
|
||||
if(a_left && a_right)
|
||||
a_left.holder_movement()
|
||||
a_right.holder_movement()
|
||||
@@ -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"
|
||||
|
||||
@@ -79,8 +79,11 @@
|
||||
|
||||
/obj/item/device/assembly/infra/Move()
|
||||
var/t = dir
|
||||
..()
|
||||
. = ..()
|
||||
set_dir(t)
|
||||
|
||||
/obj/item/device/assembly/infra/Moved(atom/old_loc, direction, forced = FALSE)
|
||||
. = ..()
|
||||
QDEL_LIST_NULL(i_beams)
|
||||
|
||||
/obj/item/device/assembly/infra/holder_movement()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -88,8 +88,8 @@
|
||||
var/obj/item/weapon/grenade/chem_grenade/grenade = holder.loc
|
||||
grenade.primed(scanning)
|
||||
|
||||
/obj/item/device/assembly/prox_sensor/Move()
|
||||
..()
|
||||
/obj/item/device/assembly/prox_sensor/Moved(atom/old_loc, direction, forced = FALSE)
|
||||
. = ..()
|
||||
sense()
|
||||
|
||||
/obj/item/device/assembly/prox_sensor/interact(mob/user as mob)//TODO: Change this to the wires thingy
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
+168
-206
@@ -61,12 +61,12 @@
|
||||
name = "NanoTrasen Incorporated"
|
||||
short_name = "NanoTrasen"
|
||||
acronym = "NT"
|
||||
desc = "NanoTrasen is one of the foremost research and development companies in SolGov space. \
|
||||
desc = "NanoTrasen is one of the foremost research and development companies in Commonwealth space. \
|
||||
Originally focused on consumer products, their swift move into the field of Phoron has lead to \
|
||||
them being the foremost experts on the substance and its uses. In the modern day, NanoTrasen prides \
|
||||
itself on being an early adopter to as many new technologies as possible, often offering the newest \
|
||||
products to their employees. In an effort to combat complaints about being 'guinea pigs', Nanotrasen \
|
||||
also offers one of the most comprehensive medical plans in SolGov space, up to and including cloning \
|
||||
also offers one of the most comprehensive medical plans in Commonwealth space, up to and including cloning \
|
||||
and therapy.\
|
||||
<br><br>\
|
||||
NT's most well known products are its phoron based creations, especially those used in Cryotherapy. \
|
||||
@@ -113,9 +113,9 @@
|
||||
"NAB Smythside Central Headquarters in Sol",
|
||||
"NAS Zeus orbiting Virgo-Prime",
|
||||
"NIB Posideon in Alpha Centauri",
|
||||
"NTB An-Nur on Virgo-Prime",
|
||||
"NTB Anur on Virgo-Prime",
|
||||
"the ruins of Virgo-3B", //YW EDIT
|
||||
"the NanoTrasen phoron refinery in Vilous",
|
||||
"the phoron refinery in Vilous",
|
||||
"a dockyard orbiting Virgo-Prime",
|
||||
"an asteroid orbiting Virgo 3",
|
||||
)
|
||||
@@ -137,7 +137,7 @@
|
||||
desc = "Hephaestus Industries is the largest supplier of arms, ammunition, and small millitary vehicles in Sol space. \
|
||||
Hephaestus products have a reputation for reliability, and the corporation itself has a noted tendency to stay removed \
|
||||
from corporate politics. They enforce their neutrality with the help of a fairly large asset-protection contingent which \
|
||||
prevents any contracting polities from using their own materiel against them. SolGov itself is one of Hephastus’ largest \
|
||||
prevents any contracting polities from using their own materiel against them. The Terran Commonwealth and the Salthan Fyrds are of Hephastus’ largest \
|
||||
bulk contractors owing to the above factors."
|
||||
history = ""
|
||||
work = "arms manufacturer"
|
||||
@@ -164,7 +164,7 @@
|
||||
"Tyr"
|
||||
)
|
||||
destination_names = list(
|
||||
"a SolGov dockyard on Luna",
|
||||
"a SolCom dockyard on Luna",
|
||||
"a Fleet outpost in the Almach Rim",
|
||||
"a Fleet outpost on the Moghes border"
|
||||
)
|
||||
@@ -173,13 +173,13 @@
|
||||
name = "Vey-Medical"
|
||||
short_name = "Vey-Med"
|
||||
acronym = "VM"
|
||||
desc = "Vey-Med is one of the newer TSCs on the block and is notable for being largely owned and opperated by Skrell. \
|
||||
Despite the suspicion and prejudice leveled at them for their alien origin, Vey-Med has obtained market dominance in \
|
||||
desc = "Vey-Med is one of the newer TSCs on the block and is notable for being largely owned and opperated by Skrell and Elysians. \
|
||||
Despite the suspicion and prejudice leveled at them for their origin, Vey-Med has obtained market dominance in \
|
||||
the sale of medical equipment-- from surgical tools to large medical devices to the Oddyseus trauma response mecha \
|
||||
and everything in between. Their equipment tends to be top-of-the-line, most obviously shown by their incredibly \
|
||||
human-like FBP designs. Vey’s rise to stardom came from their introduction of ressurective cloning, although in \
|
||||
recent years they’ve been forced to diversify as their patents expired and NanoTrasen-made medications became \
|
||||
essential to modern cloning."
|
||||
human-like FBP designs. Vey’s rise to stardom came from their introduction of ressurective cloning, although in \
|
||||
recent years they’ve been forced to diversify as their patents expired and NanoTrasen-made medications became \
|
||||
essential in bulk cloning."
|
||||
history = ""
|
||||
work = "medical equipment supplier"
|
||||
headquarters = ""
|
||||
@@ -214,8 +214,8 @@
|
||||
acronym = "ZH"
|
||||
desc = "Zeng-Hu is an old TSC, based in the Sol system. Until the discovery of Phoron, Zeng-Hu maintained a stranglehold \
|
||||
on the market for medications, and many household names are patentted by Zeng-Hu-- Bicaridyne, Dylovene, Tricordrizine, \
|
||||
and Dexalin all came from a Zeng-Hu medical laboratory. Zeng-Hu’s fortunes have been in decline as Nanotrasen’s near monopoly \
|
||||
on phoron research cuts into their R&D and Vey-Med’s superior medical equipment effectively decimated their own equipment \
|
||||
and Dexalin all came from a Zeng-Hu medical laboratory. Zeng-Hu’s fortunes have been in decline as Nanotrasen’s development of \
|
||||
mass cloning medication cuts into their R&D and Vey-Med’s superior medical equipment effectively decimated their own equipment \
|
||||
interests. The three-way rivalry between these companies for dominance in the medical field is well-known and a matter of \
|
||||
constant economic speculation."
|
||||
history = ""
|
||||
@@ -233,8 +233,8 @@
|
||||
desc = "Ward-Takahashi focuses on the sale of small consumer electronics, with its computers, communicators, \
|
||||
and even mid-class automobiles a fixture of many households. Less famously, Ward-Takahashi also supplies most \
|
||||
of the AI cores on which vital control systems are mounted, and it is this branch of their industry that has \
|
||||
led to their tertiary interest in the development and sale of high-grade AI systems. Ward-Takahashi’s economies \
|
||||
of scale frequently steal market share from Nanotrasen’s high-price products, leading to a bitter rivalry in the \
|
||||
led to their tertiary interest in the development and sale of high-grade AI systems. Ward-Takahashi’s economies \
|
||||
of scale frequently steal market share from Nanotrasen’s high-price products, leading to a bitter rivalry in the \
|
||||
consumer electronics market."
|
||||
history = ""
|
||||
work = "electronics manufacturer"
|
||||
@@ -261,10 +261,10 @@
|
||||
name = "Bishop Cybernetics"
|
||||
short_name = "Bishop"
|
||||
acronym = "BC"
|
||||
desc = "Bishop’s focus is on high-class, stylish cybernetics. A favorite among transhumanists (and a bête noire for \
|
||||
desc = "Bishop's focus is on high-class, stylish cybernetics. A favorite among transhumanists (and a byte noire for \
|
||||
bioconservatives), Bishop manufactures not only prostheses but also brain augmentation, synthetic organ replacements, \
|
||||
and odds and ends like implanted wrist-watches. Their business model tends towards smaller, boutique operations, giving \
|
||||
it a reputation for high price and luxury, with Bishop cyberware often rivalling Vey-Med’s for cost. Bishop’s reputation \
|
||||
it a reputation for high price and luxury, with Bishop cyberware often rivalling Vey-Med’s for cost. Bishop’s reputation \
|
||||
for catering towards the interests of human augmentation enthusiasts instead of positronics have earned it ire from the \
|
||||
Positronic Rights Group and puts it in ideological (but not economic) comptetition with Morpheus Cyberkinetics."
|
||||
history = ""
|
||||
@@ -389,10 +389,10 @@
|
||||
/datum/lore/organization/tsc/xion
|
||||
name = "Xion Manufacturing Group"
|
||||
short_name = "Xion"
|
||||
desc = "Xion, quietly, controls most of the market for industrial equipment. Their portfolio includes mining exosuits, \
|
||||
desc = "Xion, quietly, controls most of the market for industrial equipment on the frontier. Their portfolio includes mining exosuits, \
|
||||
factory equipment, rugged positronic chassis, and other pieces of equipment vital to the function of the economy. Xion \
|
||||
keeps its control of the market by leasing, not selling, their equipment, and through infamous and bloody patent protection \
|
||||
lawsuits. Xion are noted to be a favorite contractor for SolGov engineers, owing to their low cost and rugged design."
|
||||
lawsuits. Xion are noted to be a favorite contractor for Rim engineers, owing to their low cost and rugged design."
|
||||
history = ""
|
||||
work = "industrial equipment manufacturer"
|
||||
headquarters = ""
|
||||
@@ -429,29 +429,21 @@
|
||||
destination_names = list()
|
||||
|
||||
/datum/lore/organization/gov/solgov
|
||||
name = "Solar Central Government"
|
||||
short_name = "SolGov"
|
||||
acronym = "SCG"
|
||||
desc = "SolGov is a federation of human governmental entities based on Earth, Sol, which defines top-level law for their member systems. \
|
||||
Member systems receive various benefits such as defensive pacts, trade agreements, social support and funding, and being able to participate \
|
||||
in the Colonial Assembly. The majority, but not all human territories are members of SolGov. As such, SolGov is a major power and \
|
||||
generally represents humanity on the galactic stage."
|
||||
history = "A Unified Earth Government was formed in the wake of the Sol Interplanetary War and other conflicts of the 2160s. \
|
||||
With numerous Earth governments fighting independent battles against factions of both Facist and Communist forces, the UN became \
|
||||
involved, eventually using the war to absorb most, if not all Earth governments into itself, forming a global government to combat \
|
||||
the terrorists and stabilize the planet and its other world colonies. The UN won the war and the Unified Earth Government was formed, \
|
||||
with its' primary defense, scientific and exploratory force being the newly formed USDF. Although the UEG seemed to have complete \
|
||||
control over Earth and Sol's colonies, the UN still existed as an organization and a political entity to continue mediating between \
|
||||
countries and colonies. In 2291, Tobias Shaw and Wallace Fujikawa invented a device that could transition normal matter into slipspace \
|
||||
(bluespace), and FTL travel became possible. As humanity expanded beyond the Solar System, the UEG reorganized its self to become the \
|
||||
centralized government of humanity known today; Sol Central. Organizations like the USDF would continue to exist as a peacekeeping \
|
||||
force to protect most of humanity's interests across the galaxy."
|
||||
work = "governing body of humanity's colonies"
|
||||
name = "Commonwealth of Sol-Procyon"
|
||||
short_name = "SolCom"
|
||||
acronym = "CWS"
|
||||
desc = "The Commonwealth of Sol-Procyon is the evolution of the many nation states of Earth and the outlying colonies \
|
||||
having spread amongst the stars. While not quite the hegemon of all Humanity, a narrow majority of them follow \
|
||||
the flag of the Commonwealth. The constant tug and pull of government versus corporation, democracy and power \
|
||||
troubles this federation of deeply entrenched human colonies much like it did in the 21st century. Some things \
|
||||
never change. However, they are economically and culturally quite dominant, although not everyone likes that fact."
|
||||
history = ""
|
||||
work = "rump state of humanity's colonies"
|
||||
headquarters = "Paris, Earth"
|
||||
motto = ""
|
||||
autogenerate_destination_names = TRUE
|
||||
|
||||
ship_prefixes = list("SCG-T" = "transportation", "SCG-D" = "diplomatic", "SCG-F" = "freight")
|
||||
ship_prefixes = list("CWS-T" = "transportation", "CWS-D" = "diplomatic", "CWS-F" = "freight")
|
||||
destination_names = list(
|
||||
"Mercury",
|
||||
"Venus",
|
||||
@@ -460,44 +452,10 @@
|
||||
"Mars",
|
||||
"Titan",
|
||||
"Europa",
|
||||
"the SolGov embassy in Virgo-Erigone",
|
||||
"the SolGov embassy in Vilous"
|
||||
"the SolCom embassy in Virgo-Erigone",
|
||||
"the SolCom embassy in Vilous"
|
||||
)// autogen will add a lot of other places as well.
|
||||
|
||||
/* YW EDIT START, We're not on Virgo anymore
|
||||
/datum/lore/organization/gov/virgov // Overrides Polaris stuff
|
||||
name = "Virgo-Erigone Governmental Authority"
|
||||
short_name = ""
|
||||
desc = "Existing far outside the reach of SolGov space, the only governing body of the Virgo-Erigone system is the Virgo-Prime Governmental \
|
||||
Authority, also known as VEGA. It is a Technocracy founded and operated by NanoTrasen, using company appointed experts hired to see \
|
||||
to the comfort and well being of Virgo's citizens; most of whom are also NanoTrasen employees. VEGA provides basic social services \
|
||||
such as law enforcement, emergency services, medical care, education, and infrastructure. VEGA's operations are based on the world \
|
||||
of Virgo-Prime, within the spaceport city of Anur. Although the government is an entity of NanoTrasen, some elements of democracy \
|
||||
are still practiced, such as voting on changes to local law, policy, or public works."
|
||||
history = "VEGA was founded in 2556, shortly after the Virgo-Erigone system was colonized by a population of 1000. That population has \
|
||||
multiplied many times since then as wealth and commerce come and go from this frontier star system."
|
||||
work = "governing body of Virgo-Erigone"
|
||||
headquarters = "Anur, Virgo-Prime"
|
||||
motto = "Reach for the Stars."
|
||||
autogenerate_destination_names = FALSE
|
||||
|
||||
ship_prefixes = list("VEFD" = "fire rescue", "VEPD" = "patrol", "VEGA" = "administrative", "SAR" = "medivac")
|
||||
destination_names = list(
|
||||
"the colony at Virgo-3B",
|
||||
"the VORE-1 debris field",
|
||||
"a mining colony on Virgo-2",
|
||||
"the Anur Spaceport",
|
||||
"to a local distress beacon",
|
||||
"NAS Zeus orbiting Virgo-Prime",
|
||||
"NTB An-Nur on Virgo-Prime",
|
||||
"the colony at Virgo-3B",
|
||||
"a dockyard orbiting Virgo-Prime",
|
||||
"an asteroid orbiting Virgo 3",
|
||||
"a telecommunications satellite near Virgo-3B",
|
||||
"a telecommunications satellite near Virgo-Prime"
|
||||
*///YW Edit End
|
||||
|
||||
/* // Waiting for lore to be updated.
|
||||
/* // Waiting for Joan to do their thing.
|
||||
/datum/lore/organization/gov/federation
|
||||
name = "United Federation of Planets"
|
||||
short_name = "Federation"
|
||||
@@ -517,7 +475,6 @@
|
||||
work = "governing body"
|
||||
headquarters = ""
|
||||
motto = ""
|
||||
|
||||
//Star Trek ship names!
|
||||
ship_prefixes = list("SCV" = "military", "STV" = "trading", "SDV" = "diplomatic")
|
||||
ship_names = list("Kestrel",
|
||||
@@ -570,28 +527,13 @@
|
||||
/datum/lore/organization/mil/usdf
|
||||
name = "United Sol Defense Force"
|
||||
short_name = "" // This is blank on purpose. Otherwise they call the ships "USDF USDF Name"
|
||||
desc = "The USDF is the dedicated military force of SolGov, originally formed by the United Nations. It is the \
|
||||
dominant superpower of the Orion Spur, and is able to project its influence well into parts of the Perseus and \
|
||||
Sagittarius arms of the galaxy. However, regions beyond that are too far for the USDF to be a major player."
|
||||
history = "Earth's clashes with dissident political movements, the most important of which were the \"Red Faction\" and \"Storm Front,\" \
|
||||
began the crisis that led to the formation of the USDF. The Storm Front movement was a fascist organization based on the Jovian \
|
||||
Moons, a group that received backing from some corporations operating in the Federal Republic of Germany on Earth. Their \
|
||||
ideological opponents, the Red Faction, formed a Marxist-Leninist group on Mars centered around the leadership of Vladimir Koslov \
|
||||
around the same time. The USDF was commissioned in 2163 as a military force primarily composed of Naval and Marine \
|
||||
forces. In July 2164, the USDF partook in its first battle. From this point, the USDF was used by the UN in conflicts, \
|
||||
including the Interplanetary War. When the conflicts of Sol ended, a newly powerful Unified Earth Government (later SolGov) \
|
||||
and USDF began to expand into the stars. The apex of human expansion would come in 2490, when more than 600 worlds were \
|
||||
considered part of SolGov's territory, many developing into full-fledged colonies. By this time, a ring of Outer colonies \
|
||||
was providing SolGov with the raw materials that made the macro-economy function; with the political power remaining with \
|
||||
the Inner colonies. The massive difference in wealth distribution and political power, which became a hallmark of humanity \
|
||||
by this period, led to new threats of secession from the outer ring. In 2492, the colony of Far Isle was razed by nuclear \
|
||||
weapons after a massive uprising, creating a new found reason to rebel. SolGov began to wage a bloody struggle against \
|
||||
groups of terrorists (or freedom fighters) called the Insurrectionists, who wanted independence. The USDF continues to battle \
|
||||
sepratists to this day. The USDF's operations meanwhile focus on curbing piracy operations, as well as providing a deterrent \
|
||||
against other major military powers such as the Moghes Hegemony."
|
||||
desc = "The USDF is the dedicated military force of the Commonwealth of Sol-Procyon, originally formed by a council of the Supranations. It is a \
|
||||
considerable tool of military power projection, and is able to effectively police a vast amount of space within the Orion Spur. \
|
||||
However, regions beyond that are too far for the USDF to be a major player."
|
||||
history = ""
|
||||
work = "peacekeeping and piracy suppression"
|
||||
headquarters = "Paris, Earth"
|
||||
motto = "Per Mare, Per Terras, Per Constellatum." // Stolen from Halo because fuck you that's why. -Ace
|
||||
motto = "pax in terra et astra" // Peace on Earth and Stars
|
||||
ship_prefixes = list("USDF" = "military", "USDF" = "anti-piracy", "USDF" = "escort", "USDF" = "humanitarian", "USDF" = "peacekeeping", "USDF" = "search-and-rescue", "USDF" = "war game") // It's all USDF but let's mix up what missions they do.
|
||||
ship_names = list("Aegis Fate",
|
||||
"Ain't No Sunshine",
|
||||
@@ -651,7 +593,7 @@
|
||||
"Two for Flinching")
|
||||
destination_names = list("San Francisco on Earth",
|
||||
"Gateway One above Luna",
|
||||
"SolGov Headquarters on Earth",
|
||||
"SolCom Headquarters on Earth",
|
||||
"Olympus City on Mars",
|
||||
"Hermes Naval Shipyard above Mars",
|
||||
"Cairo Station above Earth",
|
||||
@@ -663,12 +605,12 @@
|
||||
"a settlement on Ceti IV-B",
|
||||
"a colony ship around Ceti IV-B",
|
||||
"a naval station above Ceti IV-B",
|
||||
"a classified location in SolGov territory",
|
||||
"a classified location in SolCom territory",
|
||||
"a classified location in uncharted space",
|
||||
"an emergency nav bouy",
|
||||
"the USDF Naval Academy on Earth",
|
||||
"Fort Rain on Tal")
|
||||
|
||||
//YW Change start, as we are not planning on removing sol gov like vore, we will keep this here until we know what to do with it.
|
||||
/datum/lore/organization/mil/oni
|
||||
name = "SolGov Office of Naval Intelligence"
|
||||
short_name = "" // This is blank on purpose. Otherwise they call the ships "ONI ONI Name"
|
||||
@@ -687,7 +629,7 @@
|
||||
motto = "The truth will set you free."
|
||||
ship_prefixes = list("ONI" = "classified", "ONI" = "archeological", "ONI" = "exploration", "ONI" = "logistic") // It's all ONI but let's mix up what missions they do.
|
||||
ship_names = list("Bastille",
|
||||
"Fantôme",
|
||||
"Fant�me",
|
||||
"Harpocrates",
|
||||
"Hoenir",
|
||||
"Mata Hari",
|
||||
@@ -704,6 +646,7 @@
|
||||
"if told you I'd have to kill you",
|
||||
"... wait, why am I even telling you this? Just let me pass",
|
||||
"stop asking questions")
|
||||
//YW Change stop
|
||||
/* Space foxes: deleted. Keeping them commented for historical reasons. -YW
|
||||
/datum/lore/organization/gov/kitsuhana
|
||||
name = "Kitsuhana Heavy Industries"
|
||||
@@ -763,14 +706,14 @@
|
||||
/datum/lore/organization/gov/ares
|
||||
name = "Ares Confederation"
|
||||
short_name = "ArCon"
|
||||
desc = "A rebel faction in the Cygnus Arm that renounced the government of both SolGov and their corporate overlords. \
|
||||
The Confederation has two fleets; a regular United Fleet Host comprised of professional crewmen and officers, and the Free Host \
|
||||
of the Confederation which uses privateers, volunteers and former pirates. The Ares Confederation only holds a few dozen star \
|
||||
systems, but they will fiercely defend against any incursion upon their territory, especially by the USDF."
|
||||
history = "Originally only a strike of miners on the dusty, arid planet of Ares in the year 2540, the Ares Confederation was quickly \
|
||||
established under the leadership of retired USDF Colonel Rodrick Gellaume, who is now Prime Minister."
|
||||
work = "rebel fringe government"
|
||||
headquarters = "Paraiso a Àstrea"
|
||||
desc = "A loose coalition of socialist and communist movements on the fringes of the human diaspora \
|
||||
the Ares Confederation is a government-in-exile from the original uprisings of Mars to stop \
|
||||
the government of corporations and capitalist interests over Humanity. While they failed twice \
|
||||
they have made their own home far beyond the reach of an effective military response by the \
|
||||
Commonwealth. They have become renowned engineers and terraforming experts, mostly due to necessity."
|
||||
history = ""
|
||||
work = "idealist socialist government"
|
||||
headquarters = "Paraiso a Àstrea"
|
||||
motto = "Liberty to the Stars!"
|
||||
|
||||
ship_prefixes = list("UFHV" = "military", "FFHV" = "shady")
|
||||
@@ -782,7 +725,25 @@
|
||||
"Fiery Justice",
|
||||
"Fist of Ares",
|
||||
"Freedom",
|
||||
"Fuck The Captain",
|
||||
"Marx Was Right",
|
||||
"Endstage Capitalism",
|
||||
"Neoluddism Is The Answer Guys",
|
||||
"Anarchocapitalism Is A Joke",
|
||||
"One Of Ours, Captain!",
|
||||
"Is This Thing On?",
|
||||
"Front Toward Enemy",
|
||||
"Path of Prosperity",
|
||||
"Freedom Cry",
|
||||
"Rebel Yell",
|
||||
"We Will Return To Mars",
|
||||
"According To Our Abilities",
|
||||
"Posadism Gang",
|
||||
"Accelerationism Doesn't Work In A Vaccuum",
|
||||
"Don't Shoot, We're Unarmed I Think",
|
||||
"The Big Stick For Speaking Softly",
|
||||
"Bull Moose",
|
||||
"Engels Needs Some Love Too",
|
||||
"The Icepick",
|
||||
"Gauntlet",
|
||||
"Gellaume",
|
||||
"Hero of the Revolution",
|
||||
@@ -806,110 +767,111 @@
|
||||
"Torch")
|
||||
destination_names = list("Drydocks of the Ares Confederation",
|
||||
"a classified location",
|
||||
"a Homestead on Paraiso a Àstrea",
|
||||
"a Homestead on Paraiso a Àstrea",
|
||||
"a contested sector of ArCon space",
|
||||
"one of our free colonies",
|
||||
"the Gateway 98-C at Arest",
|
||||
"the Gateway 98-C at Ares",
|
||||
"Sars Mara on Ares",
|
||||
"Listening Post Maryland-Sigma",
|
||||
"an emergency nav bouy",
|
||||
"New Berlin on Nov-Ferrum",
|
||||
"a settlement needing our help",
|
||||
"Forward Base Sigma-Alpha in ArCon space")
|
||||
|
||||
/datum/lore/organization/gov/elysian
|
||||
name = "The Elysian Colonies"
|
||||
short_name = "Demi-Monde"
|
||||
acronym = "ECS"
|
||||
desc = "The Elysian Colonies, located spinwards from the Commonwealth, are a disunited bunch of \
|
||||
vanity states, utopia projects and personal autocracies, whose only unifying characteristic is \
|
||||
a general disregard of 'normal' social conventions of Humanity as well as their inherent desire \
|
||||
to keep to their ways, in which cases they do sometimes unite to fight off an outside threat. \
|
||||
The Elysian Colonies are one of the few places where true slavery is not only accepted, but sadly also \
|
||||
rather commonplace if you go to the wrong worlds. Not that they don't internally have at least a dozen would-be liberators."
|
||||
history = ""
|
||||
work = "fracturous vanity colonies"
|
||||
headquarters = ""
|
||||
motto = ""
|
||||
|
||||
/datum/lore/organization/gov/imperial
|
||||
name = "Auream Imperium"
|
||||
short_name = "Imperial"
|
||||
desc = "Also known as the \"Golden Empire\", Auream Imperium is a superpower of elf-like humanoid beings who thrive in the southern \
|
||||
galaxy, presumably somewhere in the mid Centaurus Arm. Having existed in the observation shadow of the galactic core, this \
|
||||
galactic superpower had remained undiscovered by humanity despite its size until only recently. First contact was made on \
|
||||
June 15th 2561, when Imperial Navy cartographers stumbled upon the Virgo-Erigone system, far from the influence of the USDF. \
|
||||
Though little is currently known about the Golden Empire, their scholars have been willing to share some information. They \
|
||||
are currently ruled by a woman referred to as Empress Gutamir who is allegedly hundreds of years old. Images and portraits \
|
||||
of the empress depict a tall woman with an idealized figure of beauty as might have been seen in ancient Roman or Greek \
|
||||
works of art. She has white hair, silvery eyes, and a fair complexion. Whether or not these images are an authentic or \
|
||||
even an accurate depiction remains unknown. Vessels of the Golden Empire utilize technology unlike anything humans have ever \
|
||||
seen. Although they use bluespace for FTL travel, the methods in which they tap into bluespace has yet to be studied in any \
|
||||
detail by human scientists. Their kind hails from a binary system of Earth-like worlds called Sanctum and Venio, though the \
|
||||
exact location of these worlds is not known due to a culture of secrecy toward outsiders."
|
||||
history = "According to Imperial scholars, the Golden Empire is a civilization that has existed for at least 10,000 Earth years. \
|
||||
Their home system is said to host not one but two Earth-like worlds, both of which have been home to elves as far as their \
|
||||
records go back. How the elves were able to travel between these worlds is currently unknown, but apparently they have been \
|
||||
doing so for at least the last 2000 years. However, from what is understood, until only 300 years ago, these accomplishments \
|
||||
were only made possible by a very limited number of ships apparently using borrowed technology from an undiscovered \
|
||||
civilization they call \"Architectus.\" Curiously, the Golden Empire's primary language is strikingly similar to ancient \
|
||||
Latin on Earth, indicating that they may have somehow come into contact with Earth at some point in their history. However, \
|
||||
this contradicts what historical records they have been willing to share with us, as it would predate the timeline of space \
|
||||
travel they have given us so far."
|
||||
work = "rule over the southern galaxy in an uncharted region they call Segmentum Obscurum"
|
||||
headquarters = "Sanctum and Venio"
|
||||
motto = "Aut inveniam viam aut faciam"
|
||||
ship_prefixes = list("ECS" = "military", "ECS" = "Transport", "ECS" = "Special Transport", "ECS" = "Diplomat") //The Special Transport is SLAAAAVES.
|
||||
ship_names = list("Bring Me Wine!",
|
||||
"I Can't Believe You",
|
||||
"More Wives Your Grace?",
|
||||
"Daddy Bought Me This",
|
||||
"What Do You Mean It's Unethical",
|
||||
"Libertine Ideals",
|
||||
"The True Free",
|
||||
"Unbound",
|
||||
"No Man Shackled",
|
||||
"All Men Shackled",
|
||||
"All Women Shackled",
|
||||
"All Hermaphrodites Shackled",
|
||||
"You Know We Just Shackle Anyone",
|
||||
"Nobody Deserves Shackles",
|
||||
"Debt Slavery Is Ethical",
|
||||
"Fashioned After Tradition",
|
||||
"Sic Vic Pacem",
|
||||
"Cultivate This",
|
||||
"We Demand Self-Governance",
|
||||
"A Thousand Cultures",
|
||||
"There Is a Character Limit?",
|
||||
"Slave Galley I",
|
||||
"The Unconquered CCXXII"
|
||||
|
||||
)
|
||||
destination_names = list("Cygnus",
|
||||
"The Ultra Dome of Brutal Kill Death",
|
||||
"Sanctum",
|
||||
"Infernum",
|
||||
"The Most Esteemed Estates of Fred Fredson, Heir of the Fred Throne and All its illustrious Fredpendencies",
|
||||
"Priory Melana",
|
||||
"The Clone Pits of Meridiem Five",
|
||||
"Forward Base Mara Alpha",
|
||||
"a very tasty looking distress call",
|
||||
"a liberation intervention",
|
||||
"a nav bouy within Cygnus Space",
|
||||
"a Elysian only refuel outpost",
|
||||
"to a killer party the Fredperor is holding right now")
|
||||
|
||||
|
||||
/datum/lore/organization/gov/fyrds
|
||||
name = "Unitary Alliance of Salthan Fyrds"
|
||||
short_name = "Fyrds"
|
||||
acronym = "SMS"
|
||||
desc = "Born out of neglect, the Salthan Fyrds are cast-off colonies of the Commonwealth after giving up on \
|
||||
pacifying the wartorn region and fighting off the stray Unathi Raiders after the Hegemony War. \
|
||||
In the end they self-organized into military pacts and have formed a militaristic society, in which \
|
||||
every person, be it organic or robot, is a soldier for the continued cause in serving as aegis against \
|
||||
another Unathi Incursion. They are very no-nonsense."
|
||||
history = ""
|
||||
work = "human stratocracy"
|
||||
headquarters = "The Pact,Myria"
|
||||
motto = ""
|
||||
|
||||
ship_prefixes = list("Bellator" = "naval", "Mercator" = "trade", "Benefactori" = "mercy", "Salvator" = "search-and-rescue", "Rimor" = "exploration", "Legatus" = "diplomatic") // It's all HMS but let's mix up what they do.
|
||||
ship_names = list("Ambition",
|
||||
"Aurora",
|
||||
"Argo",
|
||||
"Behemoth",
|
||||
"Beholder",
|
||||
"Boreas",
|
||||
"Bulwark",
|
||||
"Calypso",
|
||||
"Cerberus",
|
||||
"Chimera",
|
||||
"Chronos",
|
||||
"Civitas",
|
||||
"Colossus",
|
||||
"Covenant",
|
||||
"Cyrus",
|
||||
"Destiny",
|
||||
"Epimetheus",
|
||||
"Eternal",
|
||||
"Excalibur",
|
||||
"Forerunner",
|
||||
"Fortitude",
|
||||
"Hellion",
|
||||
"Hussar",
|
||||
"Hyperion",
|
||||
"Illustria",
|
||||
"Immortal",
|
||||
"Infinitum",
|
||||
"Inquisitor",
|
||||
"Invictus",
|
||||
"Judgment",
|
||||
"Juggernaut",
|
||||
"Knossos",
|
||||
"Legacy",
|
||||
"Leviathan",
|
||||
"Marathon",
|
||||
"Megalith",
|
||||
"Mobius",
|
||||
"Nemesis",
|
||||
"Nightingale",
|
||||
"Oblivion",
|
||||
"Octavius",
|
||||
"Orthrus",
|
||||
"Pandora",
|
||||
"Phalanx",
|
||||
"Revenant",
|
||||
"Rhapsody",
|
||||
"Scylla",
|
||||
"Seraphim",
|
||||
"Starfall",
|
||||
"Stargazer",
|
||||
"Starhammer",
|
||||
"Templar",
|
||||
"Thundrus",
|
||||
"Titan",
|
||||
"Triarius",
|
||||
"Trident",
|
||||
"Tyrannus",
|
||||
"Ulysses",
|
||||
"Valkyrie",
|
||||
"Victoria",
|
||||
"Vindicator",
|
||||
"Wreath")
|
||||
destination_names = list("uncharted space",
|
||||
"Cor Galaxia",
|
||||
"near Cor Galaxia",
|
||||
"Segmentum Obscurum", // Basically their home territory, where our telescopes can't see. They prefer to keep it that way. They call it something else internally.
|
||||
)
|
||||
ship_prefixes = list("SMS" = "Military") // The Salthans don't do anything else.
|
||||
ship_names = list("Yi Sun-sin",
|
||||
"Horatio Nelson",
|
||||
"Scipio Africanus",
|
||||
"Hannibal Barca",
|
||||
"Hamilcar Barca",
|
||||
"Caesar",
|
||||
"Belisarius",
|
||||
"Aggripa",
|
||||
"Pericles",
|
||||
"Alexander",
|
||||
"Napoleon Bonaparte",
|
||||
"Charles XI",
|
||||
"Blas de Lezo",
|
||||
"Ivan Sirko",
|
||||
"Frederick the Great",
|
||||
"William of Normandy",
|
||||
"Shaka Zulu",
|
||||
"Patton",
|
||||
"MacArthur",
|
||||
"Rommel")
|
||||
destination_names = list("Base Alpha-Romero",
|
||||
"Base Zeta-Xray",
|
||||
"Base Epsilon-Epsilon",
|
||||
"Base Xray-Beta",
|
||||
"Base Gamma-Delta",
|
||||
"Base Yotta-Epsilon")
|
||||
@@ -139,7 +139,7 @@ GLOBAL_DATUM_INIT(catalogue_data, /datum/category_collection/catalogue, new)
|
||||
<br><br>\
|
||||
Humanity is the primary driving force for rapid space expansion, owing to their strong, expansionist central \
|
||||
government and opportunistic Trans-Stellar Corporations. The prejudices of the 21st century have mostly \
|
||||
given way to bitter divides on the most important issue of the times– technological expansionism, \
|
||||
given way to bitter divides on the most important issue of the times� technological expansionism, \
|
||||
with the major human factions squabbling over their approach to technology in the face of a \
|
||||
looming singularity.\
|
||||
<br><br>\
|
||||
@@ -170,7 +170,7 @@ GLOBAL_DATUM_INIT(catalogue_data, /datum/category_collection/catalogue, new)
|
||||
desc = "The Unathi are a species of large reptilian humanoids hailing from Moghes, in the \
|
||||
Uueoa-Esa binary star system. Most Unathi live in a semi-rigid clan system, and clan \
|
||||
enclaves dot the surface of their homeworld. Proud and long-lived, Unathi of all \
|
||||
walks of life display a tendency towards perfectionism, and mastery of one’s craft \
|
||||
walks of life display a tendency towards perfectionism, and mastery of one�s craft \
|
||||
is greatly respected among them. Despite the aggressive nature of their contact, \
|
||||
Unathi seem willing, if not eager, to reconcile with humanity, though mutual \
|
||||
distrust runs rampant among individuals of both groups."
|
||||
@@ -181,7 +181,7 @@ GLOBAL_DATUM_INIT(catalogue_data, /datum/category_collection/catalogue, new)
|
||||
desc = "Tajaran are a race of humanoid mammalian aliens from Meralar, the fourth planet \
|
||||
of the Rarkajar star system. Thickly furred and protected from cold, they thrive on \
|
||||
their subartic planet, where the only terran temperate areas spread across the \
|
||||
equator and “tropical belt.”\
|
||||
equator and �tropical belt.�\
|
||||
<br><br>\
|
||||
With their own share of bloody wars and great technological advances, the Tajaran are a \
|
||||
proud kind. They fiercely believe they belong among the stars and consider themselves \
|
||||
@@ -273,11 +273,11 @@ GLOBAL_DATUM_INIT(catalogue_data, /datum/category_collection/catalogue, new)
|
||||
desc = "A Positronic being, often an Android, Gynoid, or Robot, is an individual with a positronic brain, \
|
||||
manufactured and fostered amongst organic life Positronic brains enjoy the same legal status as a humans, \
|
||||
although discrimination is still common, are considered sapient on all accounts, and can be considered \
|
||||
the “synthetic species”. Half-developed and half-discovered in the 2280’s by a black lab studying alien \
|
||||
the �synthetic species�. Half-developed and half-discovered in the 2280�s by a black lab studying alien \
|
||||
artifacts, the first positronic brain was an inch-wide cube of palladium-iridium alloy, nano-etched with \
|
||||
billions upon billions of conduits and connections. Upon activation, hard-booted by way of an emitter \
|
||||
laser, the brain issued a single sentence before the neural pathways collapsed and it became an inert \
|
||||
lump of platinum: “What is my purpose?”."
|
||||
lump of platinum: �What is my purpose?�."
|
||||
value = CATALOGUER_REWARD_TRIVIAL
|
||||
|
||||
/datum/category_item/catalogue/technology/cyborgs
|
||||
@@ -356,11 +356,11 @@ GLOBAL_DATUM_INIT(catalogue_data, /datum/category_collection/catalogue, new)
|
||||
name = "Government - Solar Confederate Government"
|
||||
datum_to_copy = /datum/lore/organization/gov/solgov
|
||||
|
||||
/* YW EDIT start
|
||||
/* //VOREStation Removal
|
||||
/datum/category_item/catalogue/information/organization/virgov
|
||||
name = "Government - Vir Governmental Authority"
|
||||
datum_to_copy = /datum/lore/organization/gov/virgov
|
||||
*/// YW EDIT end
|
||||
*/
|
||||
|
||||
/datum/category_item/catalogue/anomalous
|
||||
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
/datum/category_item/catalogue/information/organization/solgov
|
||||
name = "Government - Commonwealth of Sol-Procyon"
|
||||
|
||||
//TODO: VIRGO_LORE_WRITING_WIP - this whole file
|
||||
|
||||
/datum/category_item/catalogue/fauna/akula
|
||||
|
||||
@@ -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
|
||||
@@ -270,3 +334,15 @@ You can set verify to TRUE if you want send() to sleep until the client has the
|
||||
|
||||
send_asset_list(client, uncommon)
|
||||
send_asset_list(client, common)
|
||||
|
||||
|
||||
// VOREStation Add Start - pipes iconsheet asset
|
||||
/datum/asset/iconsheet/pipes
|
||||
name = "pipes"
|
||||
|
||||
/datum/asset/iconsheet/pipes/register()
|
||||
var/list/sprites = list()
|
||||
for (var/each in list('icons/obj/pipe-item.dmi', 'icons/obj/pipes/disposal.dmi'))
|
||||
sprites += build_sprite_list(each, global.alldirs)
|
||||
..(sprites)
|
||||
// VOREStation Add End
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
//OTHER//
|
||||
/////////
|
||||
var/datum/preferences/prefs = null
|
||||
//var/move_delay = 1
|
||||
var/moving = null
|
||||
var/adminobs = null
|
||||
var/area = null
|
||||
|
||||
@@ -5,17 +5,23 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
|
||||
"operative" = 1, // 1
|
||||
"changeling" = 1, // 2
|
||||
"wizard" = 1, // 3
|
||||
"malf AI" = 1, // 4
|
||||
"malf AI" = 1, // 4
|
||||
"revolutionary" = 1, // 5
|
||||
"alien candidate" = 1, // 6
|
||||
"positronic brain" = 1, // 7
|
||||
"cultist" = 1, // 8
|
||||
"renegade" = 1, // 9
|
||||
"ninja" = 1, // 10
|
||||
"renegade" = 1, // 9
|
||||
"ninja" = 1, // 10
|
||||
"raider" = 1, // 11
|
||||
"diona" = 1, // 12
|
||||
"loyalist" = 1, // 13
|
||||
"pAI candidate" = 1, // -- TLE // 14
|
||||
"diona" = 1, // 12
|
||||
"mutineer" = 1, // 13
|
||||
"loyalist" = 1, // 14
|
||||
"pAI candidate" = 1, // 15
|
||||
//VOREStation Add
|
||||
"lost drone" = 1, // 16
|
||||
"maint pred" = 1, // 17
|
||||
"morph" = 1, // 18
|
||||
//VOREStation Add End
|
||||
)
|
||||
|
||||
/datum/category_item/player_setup_item/antagonism/candidacy
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/category_item/player_setup_item/general/language
|
||||
name = "Language"
|
||||
sort_order = 2
|
||||
var/static/list/forbidden_prefixes = list(";", ":", ".", "!", "*", "^", "-")
|
||||
|
||||
/datum/category_item/player_setup_item/general/language/load_character(var/savefile/S)
|
||||
S["language"] >> pref.alternate_languages
|
||||
@@ -18,6 +19,9 @@
|
||||
pref.alternate_languages.len = S.num_alternate_languages // Truncate to allowed length
|
||||
if(isnull(pref.language_prefixes) || !pref.language_prefixes.len)
|
||||
pref.language_prefixes = config.language_prefixes.Copy()
|
||||
for(var/prefix in pref.language_prefixes)
|
||||
if(prefix in forbidden_prefixes)
|
||||
pref.language_prefixes -= prefix
|
||||
|
||||
/datum/category_item/player_setup_item/general/language/content()
|
||||
. += "<b>Languages</b><br>"
|
||||
@@ -79,7 +83,7 @@
|
||||
alert(user, "Only single characters allowed.", "Error", "Ok")
|
||||
else if(char in list(";", ":", "."))
|
||||
alert(user, "Radio character. Rejected.", "Error", "Ok")
|
||||
else if(char in list("!","*", "^"))
|
||||
else if(char in list("!","*","^","-"))
|
||||
alert(user, "Say character. Rejected.", "Error", "Ok")
|
||||
else if(contains_az09(char))
|
||||
alert(user, "Non-special character. Rejected.", "Error", "Ok")
|
||||
|
||||
@@ -104,6 +104,12 @@ var/list/_client_preferences_by_type
|
||||
key = "EMOTE_NOISES"
|
||||
enabled_description = "Noisy"
|
||||
disabled_description = "Silent"
|
||||
/datum/client_preference/whisubtle_vis
|
||||
description = "Whi/Subtles Ghost Visible"
|
||||
key = "WHISUBTLE_VIS"
|
||||
enabled_description = "Visible"
|
||||
disabled_description = "Hidden"
|
||||
enabled_by_default = FALSE
|
||||
//VOREStation Add End
|
||||
/datum/client_preference/weather_sounds
|
||||
description ="Weather sounds"
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
// Collars
|
||||
|
||||
/datum/gear/choker //A colorable choker
|
||||
display_name = "choker (colorable, tagless)"
|
||||
path = /obj/item/clothing/accessory/choker
|
||||
slot = slot_tie
|
||||
sort_category = "Accessories"
|
||||
|
||||
/datum/gear/choker/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
|
||||
/datum/gear/collar
|
||||
display_name = "collar, silver"
|
||||
path = /obj/item/clothing/accessory/collar/silver
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
// Note for newly added fluff items: Ckeys should not contain any spaces, underscores or capitalizations,
|
||||
// or else the item will not be usable.
|
||||
// Example: Someone whose username is "Master Pred_Man" should be written as "masterpredman" instead
|
||||
// Note: Do not use characters such as # in the display_name. It will cause the item to be unable to be selected.
|
||||
|
||||
/datum/gear/fluff
|
||||
path = /obj/item
|
||||
@@ -88,6 +89,13 @@
|
||||
ckeywhitelist = list("azurachitin")
|
||||
character_name = list("Azura Chitin")
|
||||
|
||||
/datum/gear/fluff/aurora
|
||||
path = /obj/item/clothing/accessory/solgov/department/security/aurora
|
||||
display_name = "Aurora's keepsake"
|
||||
description = "An old solgov sec insignia given to Aurora"
|
||||
ckeywhitelist = list("storesund97")
|
||||
character_name = list("Aurora")
|
||||
|
||||
// B CKEYS
|
||||
/datum/gear/fluff/yuuko_kimono
|
||||
path = /obj/item/clothing/under/fluff/sakura_hokkaido_kimono
|
||||
@@ -674,6 +682,12 @@
|
||||
ckeywhitelist = list("nickcrazy")
|
||||
character_name = list("Damon Bones Xrim")
|
||||
|
||||
/datum/gear/fluff/damon_jacket
|
||||
path = /obj/item/clothing/suit/storage/toggle/bomber/bombersec
|
||||
display_name = "Damon's Bomber Jacket"
|
||||
ckeywhitelist = list("nickcrazy")
|
||||
character_name = list("Damon Bones Xrim")
|
||||
|
||||
/datum/gear/fluff/kt_fishing_rod
|
||||
path = /obj/item/weapon/material/fishing_rod/modern/strong
|
||||
display_name = "K't's fishing rod"
|
||||
@@ -731,6 +745,13 @@
|
||||
ckeywhitelist = list("phoenixgamma7")
|
||||
character_name = list("Jamie Findlay")
|
||||
|
||||
/datum/gear/fluff/scylla_shades
|
||||
path = /obj/item/clothing/glasses/fluff/scylla
|
||||
display_name = "Scylla's Shades"
|
||||
description = "These cherry-red cat-eye shades give you an inclination to eat chalk."
|
||||
ckeywhitelist = list("pimientopyro")
|
||||
character_name = list("Scylla Casmus")
|
||||
|
||||
// Q CKEYS
|
||||
|
||||
// R CKEYS
|
||||
@@ -804,11 +825,18 @@
|
||||
|
||||
/datum/gear/fluff/nthasd_modkit //Converts a Security suit's sprite
|
||||
path = /obj/item/device/modkit_conversion/hasd
|
||||
display_name = "NT-HASD #556's Modkit"
|
||||
display_name = "NT-HASD 556's Modkit"
|
||||
ckeywhitelist = list("silencedmp5a5")
|
||||
character_name = list("NT-HASD #556")
|
||||
allowed_roles = list("Colony Director", "Head of Personnel", "Security Officer", "Warden", "Head of Security","Detective")
|
||||
|
||||
/datum/gear/fluff/serdykov_modkit //Also converts a Security suit's sprite
|
||||
path = /obj/item/device/modkit_conversion/fluff/serdykit
|
||||
display_name = "Serdykov Antoz's Modkit"
|
||||
ckeywhitelist = list("silencedmp5a5")
|
||||
character_name = list("Serdykov Antoz")
|
||||
allowed_roles = list("Colony Director", "Head of Personnel", "Security Officer", "Warden", "Head of Security","Detective")
|
||||
|
||||
/datum/gear/fluff/tasy_clownuniform
|
||||
path = /obj/item/clothing/under/sexyclown
|
||||
display_name = "Tasy's Clown Uniform"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -179,3 +179,18 @@ Swimsuits
|
||||
display_name = "sleek modern coat, detective"
|
||||
path = /obj/item/clothing/under/detective_alt
|
||||
allowed_roles = list("Head of Security", "Detective")
|
||||
|
||||
/*
|
||||
Qipao
|
||||
*/
|
||||
/datum/gear/uniform/qipao
|
||||
display_name = "qipao, black"
|
||||
path = /obj/item/clothing/under/dress/qipao
|
||||
|
||||
/datum/gear/uniform/qipao_red
|
||||
display_name = "qipao, red"
|
||||
path = /obj/item/clothing/under/dress/qipao/red
|
||||
|
||||
/datum/gear/uniform/qipao_white
|
||||
display_name = "qipao, white"
|
||||
path = /obj/item/clothing/under/dress/qipao/white
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -1,7 +1,3 @@
|
||||
/datum/gear/shoes/footwraps/New() //Give color pick option for footwraps
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
|
||||
/datum/gear/uniform/voxcasual
|
||||
display_name = "casual wear (Vox)"
|
||||
path = /obj/item/clothing/under/vox/vox_casual
|
||||
@@ -88,4 +84,4 @@
|
||||
/datum/gear/suit/taur/white_dress
|
||||
display_name = "white wedding dress (Wolf/Horse-taur)"
|
||||
path = /obj/item/clothing/suit/taur_dress/white
|
||||
sort_category = "Xenowear"
|
||||
sort_category = "Xenowear"
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
//TFF 5/8/19 - minor refactoring of this thing from 09_misc.dm to call this for preferences.
|
||||
datum/preferences
|
||||
/datum/preferences
|
||||
var/show_in_directory = 1 //Show in Character Directory
|
||||
var/sensorpref = 5 //Set character's suit sensor level
|
||||
var/job_talon_high = 0
|
||||
@@ -53,3 +52,18 @@ datum/preferences
|
||||
SScharacter_setup.queue_preferences_save(prefs)
|
||||
|
||||
feedback_add_details("admin_verb","TEmoteNoise") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/verb/toggle_ghost_quiets()
|
||||
set name = "Whisper/Subtle Vis"
|
||||
set category = "Preferences"
|
||||
set desc = "Toggle ghosts viewing your subtles/whispers."
|
||||
|
||||
var/pref_path = /datum/client_preference/whisubtle_vis
|
||||
|
||||
toggle_preference(pref_path)
|
||||
|
||||
to_chat(src, "Ghosts will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear subtles/whispers made by you.")
|
||||
|
||||
SScharacter_setup.queue_preferences_save(prefs)
|
||||
|
||||
feedback_add_details("admin_verb","TWhisubtleVis") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
@@ -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
|
||||
@@ -854,16 +890,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
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/obj/item/clothing/head/helmet/solgov
|
||||
name = "\improper Solar Central Government helmet"
|
||||
name = "peacekeeper helmet"
|
||||
desc = "A helmet painted in Peacekeeper blue. Stands out like a sore thumb."
|
||||
|
||||
/obj/item/clothing/head/helmet/solgov/command
|
||||
name = "\improper Solar Central commander helmet"
|
||||
desc = "A helmet with 'Solar Central Government' printed on the back in gold lettering."
|
||||
name = "peacekeeper commander helmet"
|
||||
desc = "A more sophisticated helmet painted in Peacekeeper blue. Stands out like a sore thumb."
|
||||
|
||||
/obj/item/clothing/head/helmet/combat/USDF
|
||||
name = "marine helmet"
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
/obj/item/clothing/head/centhat/customs
|
||||
desc = "A formal hat for SolCom Customs Officers."
|
||||
|
||||
/obj/item/clothing/head/fish
|
||||
name = "fish skull"
|
||||
desc = "You... you're not actually going to wear that, right?"
|
||||
@@ -5,3 +8,17 @@
|
||||
icon = 'icons/obj/clothing/hats_vr.dmi'
|
||||
icon_override = 'icons/mob/head_vr.dmi'
|
||||
flags_inv = HIDEEARS|BLOCKHAIR
|
||||
|
||||
/obj/item/clothing/head/crown
|
||||
name = "crown"
|
||||
desc = "How regal!"
|
||||
icon_state = "crown"
|
||||
icon = 'icons/obj/clothing/hats_vr.dmi'
|
||||
icon_override = 'icons/mob/head_vr.dmi'
|
||||
|
||||
/obj/item/clothing/head/fancy_crown
|
||||
name = "fancy crown"
|
||||
desc = "How extraordinarily regal!"
|
||||
icon_state = "fancycrown"
|
||||
icon = 'icons/obj/clothing/hats_vr.dmi'
|
||||
icon_override = 'icons/mob/head_vr.dmi'
|
||||
|
||||
@@ -2,16 +2,16 @@
|
||||
|
||||
//Utility
|
||||
/obj/item/clothing/head/soft/sol
|
||||
name = "\improper SolGov cap"
|
||||
desc = "It's a blue ballcap in Solar Central Government colors."
|
||||
name = "\improper SolCom cap"
|
||||
desc = "It's a blue ballcap in Terran Commonwealth Government colors."
|
||||
|
||||
/obj/item/clothing/head/soft/sol/expedition
|
||||
name = "explorer's cap"
|
||||
desc = "It's a black ballcap bearing a Society of Universal Cartographers crest."
|
||||
name = "\improper Explorer corps cap"
|
||||
desc = "It's a black ballcap bearing a Terran Commonwealth Explorer Corps crest."
|
||||
|
||||
/obj/item/clothing/head/soft/sol/fleet
|
||||
name = "fleet cap"
|
||||
desc = "It's a navy blue ballcap with a USDF Fleet crest."
|
||||
desc = "It's a navy blue ballcap with a TCG Fleet crest."
|
||||
|
||||
/obj/item/clothing/head/utility
|
||||
name = "utility cover"
|
||||
@@ -19,23 +19,23 @@
|
||||
|
||||
/obj/item/clothing/head/utility/fleet
|
||||
name = "fleet utility cover"
|
||||
desc = "A navy blue utility cover bearing the crest of a USDF Fleet."
|
||||
desc = "A navy blue utility cover bearing the crest of a TCG Fleet."
|
||||
|
||||
/obj/item/clothing/head/utility/marine
|
||||
name = "marine utility cover"
|
||||
desc = "A grey utility cover bearing the crest of the USDF Marine Corps."
|
||||
desc = "A grey utility cover bearing the crest of the TCG Marine Corps."
|
||||
|
||||
/obj/item/clothing/head/utility/marine/tan
|
||||
name = "tan utility cover"
|
||||
desc = "A tan utility cover bearing the crest of the USDF Marine Corps."
|
||||
desc = "A tan utility cover bearing the crest of the TCG Marine Corps."
|
||||
|
||||
/obj/item/clothing/head/utility/marine/green
|
||||
name = "green utility cover"
|
||||
desc = "A green utility cover bearing the crest of the USDF Marine Corps."
|
||||
desc = "A green utility cover bearing the crest of the TCG Marine Corps."
|
||||
|
||||
/obj/item/clothing/head/utility/marine/green/officer // "And YOU told me you were gonna wear something nice!"
|
||||
name = "\improper officer's cap"
|
||||
desc = "A green utility cover bearing the crest of the USDF Marine Corps. This one has an officer's emblem."
|
||||
desc = "A green utility cover bearing the crest of the TCG Marine Corps. This one has an officer's emblem."
|
||||
icon_state = "UNSCsoft"
|
||||
icon = 'icons/obj/clothing/hats_vr.dmi'
|
||||
icon_override = 'icons/mob/head_vr.dmi'
|
||||
@@ -48,60 +48,60 @@
|
||||
|
||||
/obj/item/clothing/head/service/marine
|
||||
name = "marine wheel cover"
|
||||
desc = "A green service uniform cover with an USDF Marine Corps crest."
|
||||
desc = "A green service uniform cover with an TCG Marine Corps crest."
|
||||
|
||||
/obj/item/clothing/head/service/marine/command
|
||||
name = "marine officer's wheel cover"
|
||||
desc = "A green service uniform cover with an USDF Marine Corps crest and gold stripe."
|
||||
desc = "A green service uniform cover with an TCG Marine Corps crest and gold stripe."
|
||||
|
||||
/obj/item/clothing/head/service/marine/garrison
|
||||
name = "marine garrison cap"
|
||||
desc = "A green garrison cap belonging to the USDF Marine Corps."
|
||||
desc = "A green garrison cap belonging to the TCG Marine Corps."
|
||||
|
||||
/obj/item/clothing/head/service/marine/garrison/command
|
||||
name = "marine officer's garrison cap"
|
||||
desc = "A green garrison cap belonging to the USDF Marine Corps. This one has a gold pin."
|
||||
desc = "A green garrison cap belonging to the TCG Marine Corps. This one has a gold pin."
|
||||
|
||||
/obj/item/clothing/head/service/marine/campaign
|
||||
name = "campaign cover"
|
||||
desc = "A green campaign cover with an USDF Marine Corps crest. Only found on the heads of Drill Instructors."
|
||||
desc = "A green campaign cover with an TCG Marine Corps crest. Only found on the heads of Drill Instructors."
|
||||
icon_state = "greendrill"
|
||||
|
||||
//Dress
|
||||
|
||||
/obj/item/clothing/head/dress/expedition
|
||||
name = "explorer's dress cap"
|
||||
desc = "A peaked grey dress uniform cap belonging to the Society of Universal Cartographers."
|
||||
desc = "A peaked grey dress uniform cap belonging to the Terran Commonwealth Explorer Corps."
|
||||
|
||||
/obj/item/clothing/head/dress/expedition/command
|
||||
name = "explorer's command dress cap"
|
||||
desc = "A peaked grey dress uniform cap belonging to the Society of Universal Cartographers. This one is trimmed in gold."
|
||||
desc = "A peaked grey dress uniform cap belonging to the Terran Commonwealth Explorer Corps. This one is trimmed in gold."
|
||||
|
||||
/obj/item/clothing/head/dress/fleet
|
||||
name = "fleet dress wheel cover"
|
||||
desc = "A white dress uniform cover. This one has an USDF Fleet crest."
|
||||
desc = "A white dress uniform cover. This one has an TCG Fleet crest."
|
||||
|
||||
/obj/item/clothing/head/dress/fleet/command
|
||||
name = "fleet command dress wheel cover"
|
||||
desc = "A white dress uniform cover. This one has a gold stripe and an USDF Fleet crest."
|
||||
desc = "A white dress uniform cover. This one has a gold stripe and an TCG Fleet crest."
|
||||
|
||||
/obj/item/clothing/head/dress/marine
|
||||
name = "marine dress wheel cover"
|
||||
desc = "A white dress uniform cover with an USDF Marine Corps crest."
|
||||
desc = "A white dress uniform cover with an TCG Marine Corps crest."
|
||||
|
||||
/obj/item/clothing/head/dress/marine/command
|
||||
name = "marine officer's dress wheel cover"
|
||||
desc = "A white dress uniform cover with an USDF Marine Corps crest and gold stripe."
|
||||
desc = "A white dress uniform cover with an TCG Marine Corps crest and gold stripe."
|
||||
|
||||
/obj/item/clothing/head/dress/marine/command/admiral
|
||||
name = "admiral's dress wheel cover"
|
||||
desc = "A white dress uniform cover with an USDF Navy crest and gold stripe."
|
||||
desc = "A white dress uniform cover with an TCG Navy crest and gold stripe."
|
||||
|
||||
//Berets
|
||||
|
||||
/obj/item/clothing/head/beret/sol
|
||||
name = "peacekeeper beret"
|
||||
desc = "A beret in Solar Central Government colors. For peacekeepers that are more inclined towards style than safety."
|
||||
desc = "A beret in Terran Commonwealth colors. For peacekeepers that are more inclined towards style than safety."
|
||||
|
||||
/obj/item/clothing/head/beret/sol/gateway
|
||||
name = "gateway administration beret"
|
||||
@@ -125,48 +125,48 @@
|
||||
|
||||
/obj/item/clothing/head/beret/sol/expedition
|
||||
name = "explorer's beret"
|
||||
desc = "A black beret belonging to the Society of Universal Cartographers. For personnel that are more inclined towards style than safety."
|
||||
desc = "A black beret belonging to the Terran Commonwealth explorer corps. For personnel that are more inclined towards style than safety."
|
||||
|
||||
/obj/item/clothing/head/beret/sol/expedition/security
|
||||
name = "explorer's security beret"
|
||||
desc = "A Society of Universal Cartographers beret with a security crest. For personnel that are more inclined towards style than safety."
|
||||
desc = "A Terran Commonwealth Explorer Corps beret with a security crest. For personnel that are more inclined towards style than safety."
|
||||
|
||||
/obj/item/clothing/head/beret/sol/expedition/medical
|
||||
name = "explorer's medical beret"
|
||||
desc = "A Society of Universal Cartographers beret with a medical crest. For personnel that are more inclined towards style than safety."
|
||||
desc = "A Terran Commonwealth Explorer Corps beret with a medical crest. For personnel that are more inclined towards style than safety."
|
||||
|
||||
/obj/item/clothing/head/beret/sol/expedition/engineering
|
||||
name = "explorer's engineering beret"
|
||||
desc = "A Society of Universal Cartographers beret with an engineering crest. For personnel that are more inclined towards style than safety."
|
||||
desc = "A Terran Commonwealth Explorer Corps beret with an engineering crest. For personnel that are more inclined towards style than safety."
|
||||
|
||||
/obj/item/clothing/head/beret/sol/expedition/supply
|
||||
name = "explorer's supply beret"
|
||||
desc = "A Society of Universal Cartographers beret with a supply crest. For personnel that are more inclined towards style than safety."
|
||||
desc = "A Terran Commonwealth Explorer Corps beret with a supply crest. For personnel that are more inclined towards style than safety."
|
||||
|
||||
/obj/item/clothing/head/beret/sol/expedition/command
|
||||
name = "explorer's command beret"
|
||||
desc = "A Society of Universal Cartographers beret with a command crest. For personnel that are more inclined towards style than safety."
|
||||
desc = "A Terran Commonwealth Explorer Corps beret with a command crest. For personnel that are more inclined towards style than safety."
|
||||
|
||||
/obj/item/clothing/head/beret/sol/fleet
|
||||
name = "fleet beret"
|
||||
desc = "A navy blue beret belonging to the USDF Fleet. For personnel that are more inclined towards style than safety."
|
||||
desc = "A navy blue beret belonging to the TCG Fleet. For personnel that are more inclined towards style than safety."
|
||||
|
||||
/obj/item/clothing/head/beret/sol/fleet/security
|
||||
name = "fleet security beret"
|
||||
desc = "An USDF Fleet beret with a security crest. For personnel that are more inclined towards style than safety."
|
||||
desc = "An TCG Fleet beret with a security crest. For personnel that are more inclined towards style than safety."
|
||||
|
||||
/obj/item/clothing/head/beret/sol/fleet/medical
|
||||
name = "fleet medical beret"
|
||||
desc = "An USDF Fleet beret with a medical crest. For personnel that are more inclined towards style than safety."
|
||||
desc = "An TCG Fleet beret with a medical crest. For personnel that are more inclined towards style than safety."
|
||||
|
||||
/obj/item/clothing/head/beret/sol/fleet/engineering
|
||||
name = "fleet engineering beret"
|
||||
desc = "An USDF Fleet with an engineering crest. For personnel that are more inclined towards style than safety."
|
||||
desc = "An TCG Fleet with an engineering crest. For personnel that are more inclined towards style than safety."
|
||||
|
||||
/obj/item/clothing/head/beret/sol/fleet/supply
|
||||
name = "fleet supply beret"
|
||||
desc = "An USDF Fleet beret with a supply crest. For personnel that are more inclined towards style than safety."
|
||||
desc = "An TCG Fleet beret with a supply crest. For personnel that are more inclined towards style than safety."
|
||||
|
||||
/obj/item/clothing/head/beret/sol/fleet/command
|
||||
name = "fleet command beret"
|
||||
desc = "An USDF Fleet beret with a command crest. For personnel that are more inclined towards style than safety."
|
||||
desc = "An TCG Fleet beret with a command crest. For personnel that are more inclined towards style than safety."
|
||||
@@ -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.
|
||||
@@ -4,7 +4,7 @@
|
||||
icon_state = "griffinboots"
|
||||
item_state = "griffinboots"
|
||||
icon = 'icons/obj/clothing/shoes_vr.dmi'
|
||||
icon_override = 'icons/mob/feet_vr.dmi' // This appends "_r" "_l" to icon state
|
||||
icon_override = 'icons/mob/feet_vr.dmi'
|
||||
|
||||
/obj/item/clothing/shoes/bhop
|
||||
name = "jump boots"
|
||||
@@ -12,7 +12,7 @@
|
||||
icon_state = "jetboots"
|
||||
item_state = "jetboots"
|
||||
icon = 'icons/obj/clothing/shoes_vr.dmi'
|
||||
icon_override = 'icons/mob/feet_vr.dmi' // This appends "_r" "_l" to icon state
|
||||
icon_override = 'icons/mob/feet_vr.dmi'
|
||||
// resistance_flags = FIRE_PROOF
|
||||
action_button_name = "Activate Jump Boots"
|
||||
permeability_coefficient = 0.05
|
||||
@@ -40,3 +40,22 @@
|
||||
user.visible_message("<span class='warning'>[user] dashes forward into the air!</span>")
|
||||
user.throw_at(target, jumpdistance, jumpspeed)
|
||||
recharging_time = world.time + recharging_rate
|
||||
|
||||
/obj/item/clothing/shoes/magboots/adv
|
||||
name = "advanced magboots"
|
||||
desc = "Advanced magnetic boots for a trained user. They have a lower magnetic force, allowing the user to move more quickly."
|
||||
icon = 'icons/obj/clothing/shoes_vr.dmi'
|
||||
icon_override = 'icons/mob/feet_vr.dmi'
|
||||
|
||||
icon_state = "advmag0"
|
||||
item_flags = PHORONGUARD
|
||||
item_state_slots = list(slot_r_hand_str = "magboots", slot_l_hand_str = "magboots")
|
||||
icon_base = "advmag"
|
||||
|
||||
/obj/item/clothing/shoes/magboots/adv/set_slowdown()
|
||||
if(magpulse)
|
||||
slowdown = shoes ? max(SHOES_SLOWDOWN, shoes.slowdown) : SHOES_SLOWDOWN //So you can't put on magboots to make you walk faster.
|
||||
else if(shoes)
|
||||
slowdown = shoes.slowdown
|
||||
else
|
||||
slowdown = SHOES_SLOWDOWN
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -95,22 +95,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()
|
||||
..()
|
||||
@@ -997,14 +996,6 @@
|
||||
if(wearer.transforming || !wearer.canmove)
|
||||
return
|
||||
|
||||
if(locate(/obj/effect/stop/, wearer.loc))
|
||||
for(var/obj/effect/stop/S in wearer.loc)
|
||||
if(S.victim == wearer)
|
||||
return
|
||||
|
||||
if(!wearer.lastarea)
|
||||
wearer.lastarea = get_area(wearer.loc)
|
||||
|
||||
if((istype(wearer.loc, /turf/space)) || (wearer.lastarea.has_gravity == 0))
|
||||
if(!wearer.Process_Spacemove(0))
|
||||
return 0
|
||||
|
||||
@@ -46,5 +46,14 @@
|
||||
flags = PHORONGUARD //YAWN Edit
|
||||
|
||||
/obj/item/clothing/suit/space/rig
|
||||
species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_TAJ, SPECIES_UNATHI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_PROMETHEAN, SPECIES_XENOHYBRID, SPECIES_VOX, SPECIES_TESHARI, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_ALRAUNE, SPECIES_GREY_YW/*ywedit*/)
|
||||
flags = PHORONGUARD //YAWN Edit
|
||||
species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_TAJ, SPECIES_UNATHI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_PROMETHEAN, SPECIES_VOX, SPECIES_TESHARI, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_ALRAUNE, SPECIES_FENNEC, SPECIES_XENOHYBRID SPECIES_GREY_YW/*ywedit*/)
|
||||
|
||||
/obj/item/clothing/shoes/magboots/rig/ce
|
||||
name = "advanced boots"
|
||||
/obj/item/clothing/shoes/magboots/rig/ce/set_slowdown()
|
||||
if(magpulse)
|
||||
slowdown = shoes ? max(SHOES_SLOWDOWN, shoes.slowdown) : SHOES_SLOWDOWN //So you can't put on magboots to make you walk faster.
|
||||
else if(shoes)
|
||||
slowdown = shoes.slowdown
|
||||
else
|
||||
slowdown = SHOES_SLOWDOWN
|
||||
|
||||
@@ -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
|
||||
)
|
||||
@@ -162,12 +161,13 @@
|
||||
|
||||
helm_type = /obj/item/clothing/head/helmet/space/rig/ce
|
||||
glove_type = /obj/item/clothing/gloves/gauntlets/rig/ce
|
||||
boot_type = /obj/item/clothing/shoes/magboots/rig/ce //VOREStation Add
|
||||
|
||||
allowed = list(
|
||||
/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
|
||||
)
|
||||
@@ -215,7 +215,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,
|
||||
@@ -225,8 +225,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()
|
||||
@@ -268,7 +268,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
|
||||
@@ -308,7 +308,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"
|
||||
|
||||
@@ -212,7 +212,6 @@
|
||||
armor = list(melee = 30, bullet = 40, laser = 40, energy = 25, bomb = 60, bio = 100, rad = 50)
|
||||
icon_state = "rig0-secalt"
|
||||
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."
|
||||
|
||||
@@ -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)
|
||||
..()
|
||||
|
||||
@@ -65,3 +65,72 @@
|
||||
// This variable is normally used to set the icon_override when the suit is refitted,
|
||||
// however the species spritesheet now means we no longer need that anyway!
|
||||
sprite_sheets_refit = list()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/heck
|
||||
name = "\improper H.E.C.K. helmet"
|
||||
desc = "Hostile Environiment Cross-Kinetic Helmet: A helmet designed to withstand the wide variety of hazards from \[REDACTED\]. It wasn't enough for its last owner."
|
||||
icon_state = "hostile_env"
|
||||
item_state = "hostile_env"
|
||||
icon = 'icons/obj/clothing/hats_vr.dmi'
|
||||
icon_override = 'icons/mob/head_vr.dmi'
|
||||
armor = list(melee = 60, bullet = 35, laser = 35, energy = 15, bomb = 55, bio = 100, rad = 20)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/heck/Initialize()
|
||||
. = ..()
|
||||
var/mutable_appearance/glass_overlay = mutable_appearance(icon, "hostile_env_glass")
|
||||
glass_overlay.appearance_flags = RESET_COLOR
|
||||
add_overlay(glass_overlay)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/heck/apply_accessories(var/image/standing)
|
||||
. = ..()
|
||||
var/mutable_appearance/glass_overlay = mutable_appearance(icon_override, "hostile_env_glass")
|
||||
glass_overlay.appearance_flags = KEEP_APART|RESET_COLOR
|
||||
standing.add_overlay(glass_overlay)
|
||||
return standing
|
||||
|
||||
/obj/item/clothing/suit/space/void/heck
|
||||
name = "\improper H.E.C.K. suit"
|
||||
desc = "Hostile Environment Cross-Kinetic Suit: A suit designed to withstand the wide variety of hazards from \[REDACTED\]. It wasn't enough for its last owner."
|
||||
icon_state = "hostile_env"
|
||||
item_state = "hostile_env"
|
||||
icon = 'icons/obj/clothing/suits_vr.dmi'
|
||||
icon_override = 'icons/mob/suit_vr.dmi'
|
||||
slowdown = 1.5
|
||||
armor = list(melee = 60, bullet = 35, laser = 35, energy = 15, bomb = 55, bio = 100, rad = 20)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/syndicate_contract
|
||||
name = "syndicate contract helmet"
|
||||
desc = "A free helmet, gifted you by your new not-quite-corporate master!"
|
||||
icon_state = "syndicate-contract"
|
||||
item_state = "syndicate-contract"
|
||||
icon = 'icons/obj/clothing/hats_vr.dmi'
|
||||
icon_override = 'icons/mob/head_vr.dmi'
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 60)
|
||||
siemens_coefficient = 0.6
|
||||
camera_networks = list(NETWORK_MERCENARY)
|
||||
|
||||
/obj/item/clothing/suit/space/void/syndicate_contract
|
||||
name = "syndicate contract suit"
|
||||
desc = "A free suit, gifted you by your new not-quite-corporate master!"
|
||||
icon_state = "syndicate-contract"
|
||||
item_state = "syndicate-contract"
|
||||
icon = 'icons/obj/clothing/suits_vr.dmi'
|
||||
icon_override = 'icons/mob/suit_vr.dmi'
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 60)
|
||||
siemens_coefficient = 0.6
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/chrono
|
||||
name = "chrono-helmet"
|
||||
desc = "From out of space and time, this helmet will protect you while you perform your duties."
|
||||
icon_state = "chronohelmet"
|
||||
item_state = "chronohelmet"
|
||||
icon = 'icons/obj/clothing/hats_vr.dmi'
|
||||
icon_override = 'icons/mob/head_vr.dmi'
|
||||
|
||||
/obj/item/clothing/suit/space/void/chrono
|
||||
name = "chrono-suit"
|
||||
desc = "From out of space and time, this helmet will protect you while you perform your duties."
|
||||
icon_state = "chronosuit"
|
||||
item_state = "chronosuit"
|
||||
icon = 'icons/obj/clothing/suits_vr.dmi'
|
||||
icon_override = 'icons/mob/suit_vr.dmi'
|
||||
@@ -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)
|
||||
|
||||
@@ -42,20 +42,20 @@
|
||||
|
||||
// Override Polaris's "confederate" naming convention. I hate it.
|
||||
/obj/item/clothing/suit/storage/vest/solgov
|
||||
name = "\improper Solar Central Government armored vest"
|
||||
desc = "A synthetic armor vest. This one is marked with the crest of the Solar Central Government."
|
||||
name = "peacekeeper armored vest"
|
||||
desc = "A synthetic armor vest. This one is marked with the crest of the Terran Commonwealth Government."
|
||||
|
||||
/obj/item/clothing/suit/storage/vest/solgov/heavy
|
||||
name = "\improper Solar Central Government heavy armored vest"
|
||||
desc = "A synthetic armor vest with SECURITY printed in distinctive blue lettering on the chest. This one has added webbing and ballistic plates." // USDF does peacekeeping, not these guys.
|
||||
name = "peacekeeper heavy armored vest"
|
||||
desc = "A synthetic armor vest with PEACEKEEPER printed in distinctive blue lettering on the chest. This one has added webbing and ballistic plates."
|
||||
|
||||
/obj/item/clothing/suit/storage/vest/solgov/security
|
||||
name = "master at arms heavy armored vest"
|
||||
desc = "A synthetic armor vest with MASTER AT ARMS printed in silver lettering on the chest. This one has added webbing and ballistic plates."
|
||||
|
||||
/obj/item/clothing/suit/storage/vest/solgov/command
|
||||
name = "command heavy armored vest"
|
||||
desc = "A synthetic armor vest with Solar Central Government printed in detailed gold lettering on the chest. This one has added webbing and ballistic plates."
|
||||
name = "commander heavy armored vest"
|
||||
desc = "A synthetic armor vest with COMMANDER printed in detailed gold lettering on the chest. This one has added webbing and ballistic plates."
|
||||
|
||||
/obj/item/clothing/suit/armor/combat/USDF
|
||||
name = "marine body armor"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
/obj/item/clothing/suit/customs
|
||||
desc = "A standard SolCom Customs formal jacket."
|
||||
|
||||
//HERE BE TAUR RELATED CLOTHES
|
||||
|
||||
/*
|
||||
|
||||
@@ -2,99 +2,99 @@
|
||||
|
||||
//Service
|
||||
/obj/item/clothing/suit/storage/service/sifguard
|
||||
name = "explorer's jacket"
|
||||
desc = "A uniform service jacket belonging to the Society of Universal Cartographers. It has silver buttons."
|
||||
name = "\improper SolCom jacket"
|
||||
desc = "A uniform service jacket belonging to the Terran Commonwealth Explorer Corps. It has silver buttons."
|
||||
|
||||
/obj/item/clothing/suit/storage/service/sifguard/medical
|
||||
name = "explorer's medical jacket"
|
||||
desc = "A uniform service jacket belonging to the Society of Universal Cartographers. It has silver buttons and blue trim."
|
||||
name = "\improper SolCom medical jacket"
|
||||
desc = "A uniform service jacket belonging to the Terran Commonwealth Explorer Corps. It has silver buttons and blue trim."
|
||||
|
||||
/obj/item/clothing/suit/storage/service/sifguard/medical/command
|
||||
name = "explorer's medical command jacket"
|
||||
desc = "A uniform service jacket belonging to the Society of Universal Cartographers. It has gold buttons and blue trim."
|
||||
name = "\improper SolCom medical command jacket"
|
||||
desc = "A uniform service jacket belonging to the Terran Commonwealth Explorer Corps. It has gold buttons and blue trim."
|
||||
|
||||
/obj/item/clothing/suit/storage/service/sifguard/engineering
|
||||
name = "explorer's engineering jacket"
|
||||
desc = "A uniform service jacket belonging to the Society of Universal Cartographers. It has silver buttons and orange trim."
|
||||
name = "\improper SolCom engineering jacket"
|
||||
desc = "A uniform service jacket belonging to the Terran Commonwealth Explorer Corps. It has silver buttons and orange trim."
|
||||
|
||||
/obj/item/clothing/suit/storage/service/sifguard/engineering/command
|
||||
name = "explorer's engineering command jacket"
|
||||
desc = "A uniform service jacket belonging to the Society of Universal Cartographers. It has gold buttons and orange trim."
|
||||
name = "\improper SolCom engineering command jacket"
|
||||
desc = "A uniform service jacket belonging to the Terran Commonwealth Explorer Corps. It has gold buttons and orange trim."
|
||||
|
||||
/obj/item/clothing/suit/storage/service/sifguard/supply
|
||||
name = "explorer's supply jacket"
|
||||
desc = "A uniform service jacket belonging to the Society of Universal Cartographers. It has silver buttons and brown trim."
|
||||
name = "\improper SolCom supply jacket"
|
||||
desc = "A uniform service jacket belonging to the Terran Commonwealth Explorer Corps. It has silver buttons and brown trim."
|
||||
|
||||
/obj/item/clothing/suit/storage/service/sifguard/security
|
||||
name = "explorer's security jacket"
|
||||
desc = "A uniform service jacket belonging to the Society of Universal Cartographers. It has silver buttons and red trim."
|
||||
name = "\improper SolCom security jacket"
|
||||
desc = "A uniform service jacket belonging to the Terran Commonwealth Explorer Corps. It has silver buttons and red trim."
|
||||
|
||||
/obj/item/clothing/suit/storage/service/sifguard/security/command
|
||||
name = "explorer's security command jacket"
|
||||
desc = "A uniform service jacket belonging to the Society of Universal Cartographers. It has gold buttons and red trim."
|
||||
name = "\improper SolCom security command jacket"
|
||||
desc = "A uniform service jacket belonging to the Terran Commonwealth Explorer Corps. It has gold buttons and red trim."
|
||||
|
||||
/obj/item/clothing/suit/storage/service/sifguard/command
|
||||
name = "explorer's command jacket"
|
||||
desc = "A uniform service jacket belonging to the Society of Universal Cartographers. It has gold buttons and gold trim."
|
||||
name = "\improper SolCom command jacket"
|
||||
desc = "A uniform service jacket belonging to the Terran Commonwealth Explorer Corps. It has gold buttons and gold trim."
|
||||
|
||||
/obj/item/clothing/suit/storage/service/marine
|
||||
name = "marine coat"
|
||||
desc = "An USDF Marine Corps service coat. Green and undecorated."
|
||||
desc = "An TCG Marine Corps service coat. Green and undecorated."
|
||||
|
||||
/obj/item/clothing/suit/storage/service/marine/medical
|
||||
name = "marine medical jacket"
|
||||
desc = "An USDF Marine Corps service coat. This one has blue markings."
|
||||
desc = "An TCG Marine Corps service coat. This one has blue markings."
|
||||
|
||||
/obj/item/clothing/suit/storage/service/marine/medical/command
|
||||
name = "marine medical command jacket"
|
||||
desc = "An USDF Marine Corps service coat. This one has blue and gold markings."
|
||||
desc = "An TCG Marine Corps service coat. This one has blue and gold markings."
|
||||
|
||||
/obj/item/clothing/suit/storage/service/marine/engineering
|
||||
name = "marine engineering jacket"
|
||||
desc = "An USDF Marine Corps service coat. This one has orange markings."
|
||||
desc = "An TCG Marine Corps service coat. This one has orange markings."
|
||||
|
||||
/obj/item/clothing/suit/storage/service/marine/engineering/command
|
||||
name = "marine engineering command jacket"
|
||||
desc = "An USDF Marine Corps service coat. This one has orange and gold markings."
|
||||
desc = "An TCG Marine Corps service coat. This one has orange and gold markings."
|
||||
|
||||
/obj/item/clothing/suit/storage/service/marine/supply
|
||||
name = "marine supply jacket"
|
||||
desc = "An USDF Marine Corps service coat. This one has brown markings."
|
||||
desc = "An TCG Marine Corps service coat. This one has brown markings."
|
||||
|
||||
/obj/item/clothing/suit/storage/service/marine/security
|
||||
name = "marine security jacket"
|
||||
desc = "An USDF Marine Corps service coat. This one has red markings."
|
||||
desc = "An TCG Marine Corps service coat. This one has red markings."
|
||||
|
||||
/obj/item/clothing/suit/storage/service/marine/security/command
|
||||
name = "marine security command jacket"
|
||||
desc = "An USDF Marine Corps service coat. This one has red and gold markings."
|
||||
desc = "An TCG Marine Corps service coat. This one has red and gold markings."
|
||||
|
||||
/obj/item/clothing/suit/storage/service/marine/command
|
||||
name = "marine command jacket"
|
||||
desc = "An USDF Marine Corps service coat. This one has gold markings."
|
||||
desc = "An TCG Marine Corps service coat. This one has gold markings."
|
||||
|
||||
//Dress
|
||||
|
||||
/obj/item/clothing/suit/dress/expedition
|
||||
name = "explorer's dress jacket"
|
||||
desc = "A silver and grey dress jacket belonging to the Society of Universal Cartographers. Fashionable, for the 25th century at least."
|
||||
name = "SolCom dress jacket"
|
||||
desc = "A silver and grey dress jacket belonging to the Terran Commonwealth Explorer Corps. Fashionable, for the 24th century at least."
|
||||
|
||||
/obj/item/clothing/suit/dress/expedition/command
|
||||
name = "explorer's command dress jacket"
|
||||
desc = "A gold and grey dress jacket belonging to the Society of Universal Cartographers. The height of fashion."
|
||||
desc = "A gold and grey dress jacket belonging to the Terran Commonwealth Explorer Corps. The height of fashion."
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/dress/fleet
|
||||
name = "fleet dress jacket"
|
||||
desc = "A crisp white USDF Fleet dress jacket with blue and gold accents. Don't get near pasta sauce or vox."
|
||||
desc = "A crisp white TCG Fleet dress jacket with blue and gold accents. Don't get near pasta sauce or vox."
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/dress/fleet/command
|
||||
name = "fleet command dress jacket"
|
||||
desc = "A crisp white USDF Fleet dress jacket dripping with gold accents. So bright it's blinding."
|
||||
desc = "A crisp white TCG Fleet dress jacket dripping with gold accents. So bright it's blinding."
|
||||
|
||||
/obj/item/clothing/suit/dress/marine
|
||||
name = "marine dress jacket"
|
||||
desc = "A tailored black USDF Marine Corps dress jacket with red trim. So sexy it hurts."
|
||||
desc = "A tailored black TCG Marine Corps dress jacket with red trim. So sexy it hurts."
|
||||
|
||||
/obj/item/clothing/suit/dress/marine/command
|
||||
name = "marine command dress jacket"
|
||||
desc = "A tailored black USDF Marine Corps dress jacket with gold trim. Smells like ceremony."
|
||||
desc = "A tailored black TCG Marine Corps dress jacket with gold trim. Smells like ceremony."
|
||||
@@ -1,3 +1,18 @@
|
||||
/obj/item/clothing/head/bomb_hood/security
|
||||
icon_state = "bombsuitsec"
|
||||
body_parts_covered = HEAD
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/paramedic
|
||||
name = "paramedic vest"
|
||||
desc = "A vest that protects against minor chemical spills."
|
||||
icon = 'icons/obj/clothing/suits_vr.dmi'
|
||||
icon_override = 'icons/mob/suit_vr.dmi'
|
||||
icon_state = "paramedic-vest"
|
||||
item_state = "paramedic-vest"
|
||||
item_state_slots = list(slot_r_hand_str = "blue_labcoat", slot_l_hand_str = "blue_labcoat")
|
||||
blood_overlay_type = "coat"
|
||||
body_parts_covered = UPPER_TORSO
|
||||
flags_inv = HIDEHOLSTER
|
||||
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0)
|
||||
index = 1
|
||||
@@ -2,6 +2,29 @@
|
||||
// Collars and such like that
|
||||
//
|
||||
|
||||
/obj/item/clothing/accessory/choker //A colorable, tagless choker
|
||||
name = "plain choker"
|
||||
slot_flags = SLOT_TIE | SLOT_OCLOTHING
|
||||
desc = "A simple, plain choker. Or maybe it's a collar? Use in-hand to customize it."
|
||||
icon = 'icons/obj/clothing/ties_vr.dmi'
|
||||
icon_override = 'icons/mob/ties_vr.dmi'
|
||||
icon_state = "choker_cst"
|
||||
item_state = "choker_cst"
|
||||
overlay_state = "choker_cst"
|
||||
var/customized = 0
|
||||
|
||||
/obj/item/clothing/accessory/choker/attack_self(mob/user as mob)
|
||||
if(!customized)
|
||||
var/design = input(user,"Descriptor?","Pick descriptor","") in list("plain","simple","ornate","elegant","opulent")
|
||||
var/material = input(user,"Material?","Pick material","") in list("leather","velvet","lace","fabric","latex","plastic","metal","chain","silver","gold","platinum","steel","bead","ruby","sapphire","emerald","diamond")
|
||||
var/type = input(user,"Type?","Pick type","") in list("choker","collar","necklace")
|
||||
name = "[design] [material] [type]"
|
||||
desc = "A [type], made of [material]. It's rather [design]."
|
||||
customized = 1
|
||||
to_chat(usr,"<span class='notice'>[src] has now been customized.</span>")
|
||||
else
|
||||
to_chat(usr,"<span class='notice'>[src] has already been customized!</span>")
|
||||
|
||||
/obj/item/clothing/accessory/collar
|
||||
slot_flags = SLOT_TIE | SLOT_OCLOTHING
|
||||
icon = 'icons/obj/clothing/ties_vr.dmi'
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -88,11 +88,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)
|
||||
..()
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
/obj/item/clothing/accessory/permit/drone
|
||||
desc = "A card issued by the EIO, indicating that the owner is a Drone Intelligence. Drones are mandated to carry this card within SolCom space, by law."
|
||||
|
||||
/obj/item/clothing/accessory/permit/gun/planetside
|
||||
name = "explorer gun permit"
|
||||
desc = "A card indicating that the owner is allowed to carry a firearm during active exploration missions."
|
||||
|
||||
@@ -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"
|
||||
@@ -1,23 +1,194 @@
|
||||
/obj/item/clothing/accessory/solgov/department/command
|
||||
desc = "Insignia denoting assignment to the command department. These fit Society of Universal Cartographers uniforms."
|
||||
/*****
|
||||
medals
|
||||
*****/
|
||||
/obj/item/clothing/accessory/medal/solgov/iron/star
|
||||
name = "iron star medal"
|
||||
desc = "An iron star awarded to members of the TCG for meritorious achievement or service in a combat zone."
|
||||
|
||||
/obj/item/clothing/accessory/solgov/department/engineering
|
||||
desc = "Insignia denoting assignment to the engineering department. These fit Society of Universal Cartographers uniforms."
|
||||
/obj/item/clothing/accessory/medal/solgov/iron/sol
|
||||
name = "\improper Terran expeditionary medal"
|
||||
desc = "An iron medal awarded to members of the TCG for service outside of the borders of the Terran Commonwealth Government."
|
||||
|
||||
/obj/item/clothing/accessory/solgov/department/security
|
||||
desc = "Insignia denoting assignment to the security department. These fit Society of Universal Cartographers uniforms."
|
||||
/obj/item/clothing/accessory/medal/solgov/bronze/heart
|
||||
name = "bronze heart medal"
|
||||
desc = "A bronze heart awarded to members of the TCG for injury or death in the line of duty."
|
||||
|
||||
/obj/item/clothing/accessory/solgov/department/medical
|
||||
desc = "Insignia denoting assignment to the medical department. These fit Society of Universal Cartographers uniforms."
|
||||
/obj/item/clothing/accessory/medal/solgov/bronze/sol
|
||||
name = "\improper Terran defensive operations medal"
|
||||
desc = "A bronze medal awarded for members of the TCG for service defending the border regions."
|
||||
|
||||
/obj/item/clothing/accessory/solgov/department/supply
|
||||
desc = "Insignia denoting assignment to the supply department. These fit Society of Universal Cartographers uniforms."
|
||||
/obj/item/clothing/accessory/medal/solgov/silver/sword
|
||||
name = "combat action medal"
|
||||
desc = "A silver medal awarded to members of the TCG for honorable service while under enemy fire."
|
||||
|
||||
/obj/item/clothing/accessory/solgov/department/exploration
|
||||
desc = "Insignia denoting assignment to the exploration department. These fit Society of Universal Cartographers uniforms."
|
||||
/obj/item/clothing/accessory/medal/solgov/silver/sol
|
||||
name = "\improper Terran valor medal"
|
||||
desc = "A silver medal awarded for members of the TCG for acts of exceptional valor."
|
||||
|
||||
/obj/item/clothing/accessory/solgov/department/research
|
||||
desc = "Insignia denoting assignment to the research department. These fit Society of Universal Cartographers uniforms."
|
||||
/obj/item/clothing/accessory/medal/solgov/gold/star
|
||||
name = "gold star medal"
|
||||
desc = "A gold star awarded to members of the TCG for acts of heroism in a combat zone."
|
||||
|
||||
/obj/item/clothing/accessory/solgov/department/service
|
||||
desc = "Insignia denoting assignment to the service department. These fit Society of Universal Cartographers uniforms."
|
||||
/obj/item/clothing/accessory/medal/solgov/gold/sun
|
||||
name = "solar service medal"
|
||||
desc = "A gold medal awarded to members of the TCG by the Secretary General for significant contributions to the Sol Central Government."
|
||||
|
||||
/obj/item/clothing/accessory/medal/solgov/gold/crest
|
||||
name = "solar honor medal"
|
||||
desc = "A gold medal awarded to members of the Defense Forces by the Secretary General for personal acts of valor and heroism above and beyond the call of duty."
|
||||
|
||||
/obj/item/clothing/accessory/medal/solgov/gold/sol
|
||||
name = "\improper Terran sapientarian medal"
|
||||
desc = "A gold medal awarded for members of the TCG for significant contributions to sapient rights."
|
||||
|
||||
/obj/item/clothing/accessory/medal/solgov/heart
|
||||
name = "medical medal"
|
||||
desc = "A white heart emblazoned with a red cross awarded to members of the SCG for service as a medical professional in a combat zone."
|
||||
|
||||
/obj/item/clothing/accessory/solgov/torch_patch
|
||||
name = "\improper Torch mission patch"
|
||||
desc = "A fire resistant shoulder patch, worn by the personnel involved in the Torch Project."
|
||||
|
||||
/obj/item/clothing/accessory/solgov/ec_patch
|
||||
name = "\improper Observatory patch"
|
||||
desc = "A laminated shoulder patch, carrying the symbol of the Terran Commonwealth Expeditionary Corps Observatory, or TCGEO for short, the eyes and ears of the Expeditionary Corps' missions."
|
||||
|
||||
/obj/item/clothing/accessory/solgov/ec_patch/fieldops
|
||||
name = "\improper Field Operations patch"
|
||||
desc = "A radiation-shielded shoulder patch, carrying the symbol of the Terran Commonwealth Expeditionary Corps Field Operations, or TCGECFO for short, the hands-on workers of every Expeditionary Corps mission."
|
||||
|
||||
/obj/item/clothing/accessory/solgov/cultex_patch
|
||||
name = "\improper Cultural Exchange patch"
|
||||
desc = "A radiation-shielded shoulder patch, denoting service in the the Terran Commonwealth Expeditionary Corps Cultural Exchange program."
|
||||
|
||||
/obj/item/clothing/accessory/solgov/fleet_patch
|
||||
name = "\improper First Fleet patch"
|
||||
desc = "A fancy shoulder patch carrying insignia of First Fleet, the Sol Guard, stationed in Sol."
|
||||
|
||||
/obj/item/clothing/accessory/solgov/fleet_patch/second
|
||||
name = "\improper Second Fleet patch"
|
||||
desc = "A well-worn shoulder patch carrying insignia of Second Fleet, the Home Guard, tasked with defense of Terran territories."
|
||||
|
||||
/obj/item/clothing/accessory/solgov/fleet_patch/third
|
||||
name = "\improper Third Fleet patch"
|
||||
desc = "A scuffed shoulder patch carrying insignia of Third Fleet, the Border Guard, guarding borders of Terran territory against Vox and pirates."
|
||||
|
||||
/obj/item/clothing/accessory/solgov/fleet_patch/fourth
|
||||
name = "\improper Fourth Fleet patch"
|
||||
desc = "A pristine shoulder patch carrying insignia of Fourth Fleet, stationed on Skrell border."
|
||||
|
||||
/obj/item/clothing/accessory/solgov/fleet_patch/fifth
|
||||
name = "\improper Fifth Fleet patch"
|
||||
desc = "A tactical shoulder patch carrying insignia of Fifth Fleet, the Quick Reaction Force, recently formed and outfited with last tech."
|
||||
|
||||
/******
|
||||
ribbons
|
||||
******/
|
||||
/obj/item/clothing/accessory/ribbon/solgov/marksman
|
||||
name = "marksmanship ribbon"
|
||||
desc = "A military decoration awarded to members of the TCG for good marksmanship scores in training. Common in the days of energy weapons."
|
||||
|
||||
/obj/item/clothing/accessory/ribbon/solgov/peace
|
||||
name = "peacekeeping ribbon"
|
||||
desc = "A military decoration awarded to members of the TCG for service during a peacekeeping operation."
|
||||
|
||||
/obj/item/clothing/accessory/ribbon/solgov/frontier
|
||||
name = "frontier ribbon"
|
||||
desc = "A military decoration awarded to members of the TCG for service along the frontier."
|
||||
|
||||
/obj/item/clothing/accessory/ribbon/solgov/instructor
|
||||
name = "instructor ribbon"
|
||||
desc = "A military decoration awarded to members of the TCG for service as an instructor."
|
||||
|
||||
/*************
|
||||
specialty pins
|
||||
*************/
|
||||
/obj/item/clothing/accessory/solgov/specialty/janitor
|
||||
name = "custodial blazes"
|
||||
desc = "Purple blazes denoting a custodial technician."
|
||||
|
||||
/obj/item/clothing/accessory/solgov/specialty/brig
|
||||
name = "brig blazes"
|
||||
desc = "Red blazes denoting a brig officer."
|
||||
|
||||
/obj/item/clothing/accessory/solgov/specialty/forensic
|
||||
name = "forensics blazes"
|
||||
desc = "Steel blazes denoting a forensic technician."
|
||||
|
||||
/obj/item/clothing/accessory/solgov/specialty/atmos
|
||||
name = "atmospherics blazes"
|
||||
desc = "Turquoise blazes denoting an atmospheric technician."
|
||||
|
||||
/obj/item/clothing/accessory/solgov/specialty/counselor
|
||||
name = "counselor blazes"
|
||||
desc = "Blue blazes denoting a counselor."
|
||||
|
||||
/obj/item/clothing/accessory/solgov/specialty/chemist
|
||||
name = "chemistry blazes"
|
||||
desc = "Orange blazes denoting a chemist."
|
||||
|
||||
/obj/item/clothing/accessory/solgov/specialty/enlisted
|
||||
name = "enlisted qualification pin"
|
||||
desc = "An iron pin denoting some special qualification."
|
||||
|
||||
/obj/item/clothing/accessory/solgov/specialty/officer
|
||||
name = "officer's qualification pin"
|
||||
desc = "A golden pin denoting some special qualification."
|
||||
|
||||
/obj/item/clothing/accessory/solgov/specialty/pilot
|
||||
name = "pilot's qualification pin"
|
||||
desc = "An iron pin denoting the qualification to fly TCG spacecraft."
|
||||
|
||||
/*****
|
||||
badges
|
||||
*****/
|
||||
/obj/item/clothing/accessory/badge/solgov/representative
|
||||
name = "representative's badge"
|
||||
desc = "A leather-backed plastic badge with a variety of information printed on it. Belongs to a representative of the Terran Commonwealth."
|
||||
badge_string = "Terran Commonwealth"
|
||||
|
||||
/*******
|
||||
armbands
|
||||
*******/
|
||||
/obj/item/clothing/accessory/armband/solgov/mp
|
||||
name = "military police brassard"
|
||||
desc = "An armlet, worn by the crew to display which department they're assigned to. This one is black with 'MP' in white."
|
||||
|
||||
/obj/item/clothing/accessory/armband/solgov/ma
|
||||
name = "master at arms brassard"
|
||||
desc = "An armlet, worn by the crew to display which department they're assigned to. This one is white with 'MA' in navy blue."
|
||||
|
||||
/*****************
|
||||
armour attachments
|
||||
*****************/
|
||||
/obj/item/clothing/accessory/armor/tag/solgov
|
||||
name = "\improper TCG Flag"
|
||||
desc = "An emblem depicting the Terran Commonwealth's flag."
|
||||
|
||||
/obj/item/clothing/accessory/armor/tag/solgov/ec
|
||||
name = "\improper Expeditionary Corps crest"
|
||||
desc = "An emblem depicting the crest of the TCG Expeditionary Corps."
|
||||
|
||||
/obj/item/clothing/accessory/armor/tag/solgov/sec
|
||||
name = "\improper POLICE tag"
|
||||
desc = "An armor tag with the word POLICE printed in silver lettering on it."
|
||||
|
||||
/obj/item/clothing/accessory/armor/tag/solgov/medic
|
||||
name = "\improper MEDIC tag"
|
||||
desc = "An armor tag with the word MEDIC printed in red lettering on it."
|
||||
|
||||
/obj/item/clothing/accessory/armor/tag/solgov/agent
|
||||
name = "\improper OCIE AGENT tag"
|
||||
desc = "An armor tag with the word OCIE AGENT printed in gold lettering on it."
|
||||
|
||||
/obj/item/clothing/accessory/armor/tag/solgov/com
|
||||
name = "\improper TCG tag"
|
||||
desc = "An armor tag with the words COMMONWEALTH OF SOL-PROCYON printed in gold lettering on it."
|
||||
|
||||
/obj/item/clothing/accessory/armor/tag/solgov/com/sec
|
||||
name = "\improper POLICE tag"
|
||||
desc = "An armor tag with the words POLICE printed in gold lettering on it."
|
||||
|
||||
/obj/item/clothing/accessory/armor/helmcover/blue/sol
|
||||
name = "peacekeeper helmet cover"
|
||||
desc = "A fabric cover for armored helmets. This one is in TCG peacekeeper colors."
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
/obj/item/clothing/under/customs
|
||||
desc = "A standard SolCom customs uniform. Complete with epaulettes."
|
||||
|
||||
/obj/item/clothing/var/hides_bulges = FALSE // OwO wats this?
|
||||
|
||||
/obj/item/clothing/under/permit
|
||||
@@ -108,4 +111,21 @@
|
||||
|
||||
//Same as Nanotrasen Security Uniforms
|
||||
/obj/item/clothing/under/ert
|
||||
armor = list(melee = 5, bullet = 10, laser = 10, energy = 5, bomb = 5, bio = 0, rad = 0)
|
||||
armor = list(melee = 5, bullet = 10, laser = 10, energy = 5, bomb = 5, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/under/dress/qipao
|
||||
name = "qipao"
|
||||
icon = 'icons/obj/clothing/uniforms_vr.dmi'
|
||||
icon_override = 'icons/mob/uniform_vr.dmi'
|
||||
icon_state = "qipao"
|
||||
item_state = "qipao"
|
||||
|
||||
/obj/item/clothing/under/dress/qipao/white
|
||||
name = "white qipao"
|
||||
icon_state = "qipao_white"
|
||||
item_state = "qipao_white"
|
||||
|
||||
/obj/item/clothing/under/dress/qipao/red
|
||||
name = "red qipao"
|
||||
icon_state = "qipao_red"
|
||||
item_state = "qipao_red"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
//PT
|
||||
/obj/item/clothing/under/solgov/pt/sifguard
|
||||
name = "explorer's pt uniform"
|
||||
desc = "A baggy shirt bearing the seal of the Society of Universal Cartographers and some dorky looking blue shorts."
|
||||
name = "\improper SolCom pt uniform"
|
||||
desc = "A baggy shirt bearing the seal of the Terran Commonwealth Explorer Corps and some dorky looking blue shorts."
|
||||
|
||||
/obj/item/clothing/under/solgov/pt/fleet
|
||||
name = "fleet pt uniform"
|
||||
@@ -21,33 +21,33 @@
|
||||
desc = "A comfortable turtleneck and black utility trousers."
|
||||
|
||||
/obj/item/clothing/under/solgov/utility/sifguard
|
||||
name = "explorer's uniform"
|
||||
desc = "The utility uniform of the Society of Universal Cartographers, made from biohazard resistant material. This one has silver trim."
|
||||
name = "\improper SolCom uniform"
|
||||
desc = "The utility uniform of the Terran Commonwealth Explorer Corps, made from biohazard resistant material. This one has silver trim."
|
||||
|
||||
/obj/item/clothing/under/solgov/utility/sifguard/officer
|
||||
name = "explorer's officer uniform"
|
||||
desc = "The utility uniform of the Society of Universal Cartographers, made from biohazard resistant material. This one has gold trim."
|
||||
name = "\improper SolCom officer uniform"
|
||||
desc = "The utility uniform of the Terran Commonwealth Explorer Corps, made from biohazard resistant material. This one has gold trim."
|
||||
|
||||
|
||||
/obj/item/clothing/under/solgov/utility/fleet
|
||||
name = "fleet coveralls"
|
||||
desc = "The utility uniform of the USDF Fleet, made from an insulated material."
|
||||
desc = "The utility uniform of the TCG Fleet, made from an insulated material."
|
||||
|
||||
/obj/item/clothing/under/solgov/utility/marine
|
||||
name = "marine fatigues"
|
||||
desc = "The utility uniform of the USDF Marine Corps, made from durable material."
|
||||
desc = "The utility uniform of the TCG Marine Corps, made from durable material."
|
||||
|
||||
/obj/item/clothing/under/solgov/utility/marine/green
|
||||
name = "green fatigues"
|
||||
desc = "A green version of the USDF marine utility uniform, made from durable material."
|
||||
desc = "A green version of the TCG marine utility uniform, made from durable material."
|
||||
|
||||
/obj/item/clothing/under/solgov/utility/marine/tan
|
||||
name = "tan fatigues"
|
||||
desc = "A tan version of the USDF marine utility uniform, made from durable material."
|
||||
desc = "A tan version of the TCG marine utility uniform, made from durable material."
|
||||
|
||||
/obj/item/clothing/under/solgov/utility/marine/olive
|
||||
name = "olive fatigues"
|
||||
desc = "An olive version of the USDF marine utility uniform, made from durable material."
|
||||
desc = "An olive version of the TCG marine utility uniform, made from durable material."
|
||||
icon = 'icons/obj/clothing/uniforms_vr.dmi'
|
||||
icon_override = 'icons/mob/uniform_vr.dmi'
|
||||
icon_state = "bdu_olive"
|
||||
@@ -55,7 +55,7 @@
|
||||
|
||||
/obj/item/clothing/under/solgov/utility/marine/desert
|
||||
name = "desert fatigues"
|
||||
desc = "A desert version of the USDF marine utility uniform, made from durable material."
|
||||
desc = "A desert version of the TCG marine utility uniform, made from durable material."
|
||||
icon = 'icons/obj/clothing/uniforms_vr.dmi'
|
||||
icon_override = 'icons/mob/uniform_vr.dmi'
|
||||
icon_state = "bdu_olive"
|
||||
@@ -65,29 +65,29 @@
|
||||
|
||||
/obj/item/clothing/under/solgov/service/fleet
|
||||
name = "fleet service uniform"
|
||||
desc = "The service uniform of the USDF Fleet, made from immaculate white fabric."
|
||||
desc = "The service uniform of the TCG Fleet, made from immaculate white fabric."
|
||||
|
||||
/obj/item/clothing/under/solgov/service/marine
|
||||
name = "marine service uniform"
|
||||
desc = "The service uniform of the USDF Marine Corps. Slimming."
|
||||
desc = "The service uniform of the TCG Marine Corps. Slimming."
|
||||
worn_state = "greenservice"
|
||||
|
||||
/obj/item/clothing/under/solgov/service/marine/command
|
||||
name = "marine command service uniform"
|
||||
desc = "The service uniform of the USDF Marine Corps. Slimming and stylish."
|
||||
desc = "The service uniform of the TCG Marine Corps. Slimming and stylish."
|
||||
|
||||
/obj/item/clothing/under/solgov/mildress/expeditionary
|
||||
name = "explorer's dress uniform"
|
||||
desc = "The dress uniform of the Society of Universal Cartographers in silver trim."
|
||||
name = "\improper SolCom dress uniform"
|
||||
desc = "The dress uniform of the Terran Commonwealth Explorer Corps in silver trim."
|
||||
|
||||
/obj/item/clothing/under/solgov/mildress/expeditionary/command
|
||||
name = "explorer's command dress uniform"
|
||||
desc = "The dress uniform of the Society of Universal Cartographers in gold trim."
|
||||
name = "\improper SolCom command dress uniform"
|
||||
desc = "The dress uniform of the Terran Commonwealth Explorer Corps in gold trim."
|
||||
|
||||
/obj/item/clothing/under/solgov/mildress/marine
|
||||
name = "marine dress uniform"
|
||||
desc = "The dress uniform of the USDF Marine Corps, class given form."
|
||||
desc = "The dress uniform of the TCG Marine Corps, class given form."
|
||||
|
||||
/obj/item/clothing/under/solgov/mildress/marine/command
|
||||
name = "marine command dress uniform"
|
||||
desc = "The dress uniform of the USDF Marine Corps, even classier in gold."
|
||||
desc = "The dress uniform of the TCG Marine Corps, even classier in gold."
|
||||
@@ -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)
|
||||
|
||||
@@ -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>"
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
/datum/event/gravity
|
||||
announceWhen = 5
|
||||
var/list/zLevels
|
||||
var/list/generators = list()
|
||||
|
||||
/datum/event/gravity/setup()
|
||||
endWhen = rand(5 MINUTES, 20 MINUTES)
|
||||
// Setup which levels we will disrupt gravit on.
|
||||
zLevels = using_map.station_levels.Copy()
|
||||
for(var/datum/planet/P in SSplanets.planets)
|
||||
zLevels -= P.expected_z_levels
|
||||
|
||||
/datum/event/gravity/announce()
|
||||
command_announcement.Announce("Feedback surge detected in mass-distributions systems. Artificial gravity has been disabled. Please wait for the system to reinitialize, or contact your engineering department.", "Gravity Failure")
|
||||
|
||||
/datum/event/gravity/start()
|
||||
gravity_is_on = 0
|
||||
|
||||
for(var/obj/machinery/gravity_generator/main/GG in machines)
|
||||
if((GG.z in zLevels) && GG.on)
|
||||
generators += GG
|
||||
GG.breaker = FALSE
|
||||
GG.set_power()
|
||||
GG.charge_count = 10
|
||||
|
||||
/datum/event/gravity/end()
|
||||
gravity_is_on = 1
|
||||
|
||||
var/did_anything = FALSE
|
||||
for(var/obj/machinery/gravity_generator/main/GG in generators)
|
||||
if(!GG.on)
|
||||
GG.breaker = TRUE
|
||||
GG.set_power()
|
||||
GG.charge_count = 90
|
||||
did_anything = TRUE
|
||||
|
||||
if(did_anything)
|
||||
command_announcement.Announce("Gravity generators are again functioning within normal parameters. Sorry for any inconvenience.", "Gravity Restored")
|
||||
@@ -4,8 +4,8 @@
|
||||
endWhen = 3
|
||||
|
||||
/datum/event/ianstorm/announce()
|
||||
command_announcement.Announce("It has come to our attention that the station passed through an ion storm. Please monitor all electronic equipment for malfunctions.", "Anomaly Alert")
|
||||
spawn(rand(50, 300))
|
||||
command_announcement.Announce("It has come to our attention that the station passed through an ion storm. Please monitor all electronic equipment for malfunctions.", "Anomaly Alert", 'sound/AI/ian_storm.ogg')
|
||||
spawn(7 SECONDS)
|
||||
command_announcement.Announce("Wait. No, thats wrong. The station passed through an IAN storm!.", "Ian Alert")
|
||||
|
||||
/datum/event/ianstorm/start()
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user