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:
izac112
2020-05-06 21:53:03 +02:00
1099 changed files with 63850 additions and 118586 deletions
+10 -14
View File
@@ -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>"
+1 -1
View File
@@ -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]")
+5 -5
View File
@@ -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 -5
View File
@@ -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()
+4 -4
View File
@@ -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
+4 -4
View File
@@ -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
+531
View File
@@ -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
)
+28 -583
View File
@@ -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.")
+210 -210
View File
@@ -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>"
+3 -3
View File
@@ -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)
+6 -6
View File
@@ -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
View File
@@ -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)
+1 -1
View File
@@ -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>")
+10 -10
View File
@@ -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)
+33 -3
View File
@@ -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")
+8 -8
View File
@@ -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>")
+80 -82
View File
@@ -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)
+5 -6
View File
@@ -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>")
+6 -6
View File
@@ -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"
+2 -8
View File
@@ -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))
+3 -4
View File
@@ -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
+72 -19
View File
@@ -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
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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()
+3 -1
View File
@@ -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()
+19 -30
View File
@@ -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 ..()
+25 -26
View File
@@ -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
+2 -2
View File
@@ -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)
+3 -5
View File
@@ -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
+8 -8
View File
@@ -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"
+4 -1
View File
@@ -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()
+2 -2
View File
@@ -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)
+2 -2
View File
@@ -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
+2 -1
View File
@@ -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
+3 -3
View File
@@ -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
@@ -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",
"Fantme",
"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")
+7 -7
View File
@@ -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 ones craft \
walks of life display a tendency towards perfectionism, and mastery of ones 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 2280s by a black lab studying alien \
the synthetic species. Half-developed and half-discovered in the 2280s 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
+76
View File
@@ -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
-1
View File
@@ -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"
+16 -2
View File
@@ -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!
+41 -5
View File
@@ -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
+3 -3
View File
@@ -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"
+17
View File
@@ -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'
+35 -35
View File
@@ -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."
+5 -8
View File
@@ -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
+3 -3
View File
@@ -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)
+7 -16
View File
@@ -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'
+9 -1
View File
@@ -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)
+6 -6
View File
@@ -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"
+6
View File
@@ -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
/*
+34 -34
View File
@@ -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."
+15
View File
@@ -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"
+21 -21
View File
@@ -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)
+3 -3
View File
@@ -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>"
+4 -4
View File
@@ -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)
+2 -3
View File
@@ -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>"
+38
View File
@@ -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")
+2 -2
View File
@@ -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