Release Update

Merge branch 'release' of https://github.com/VOREStation/VOREStation into voreupdate

# Conflicts:
#	code/__defines/machinery.dm
#	code/controllers/configuration.dm
#	code/game/jobs/jobs.dm
#	code/game/machinery/doors/blast_door.dm
#	code/game/machinery/pipe/pipe_recipes.dm
#	code/game/objects/items/devices/radio/radio_vr.dm
#	code/modules/client/preferences_vr.dm
#	code/modules/clothing/glasses/hud_vr.dm
#	code/modules/clothing/under/accessories/accessory_vr.dm
#	code/modules/events/event_container_vr.dm
#	code/modules/gamemaster/actions/planet_weather_change.dm
#	code/modules/projectiles/guns/energy/netgun_vr.dm
#	code/modules/projectiles/guns/energy/protector_vr.dm
#	code/modules/vore/appearance/sprite_accessories_taur_vr.dm
#	code/modules/vore/appearance/sprite_accessories_vr.dm
#	code/modules/vore/fluffstuff/custom_guns_vr.dm
#	icons/obj/power.dmi
#	vorestation.dme
This commit is contained in:
Repede
2020-04-16 21:07:33 -04:00
657 changed files with 195131 additions and 226215 deletions
+21 -16
View File
@@ -871,21 +871,26 @@ var/datum/announcement/minor/admin_min_announcer = new
/datum/admins/proc/startnow()
set category = "Server"
set desc="Start the round RIGHT NOW"
set desc="Start the round ASAP"
set name="Start Now"
if(!ticker)
alert("Unable to start the game as it is not set up.")
if(!check_rights(R_SERVER|R_EVENT))
return
if(ticker.current_state == GAME_STATE_PREGAME)
ticker.current_state = GAME_STATE_SETTING_UP
Master.SetRunLevel(RUNLEVEL_SETUP)
log_admin("[usr.key] has started the game.")
message_admins("<font color='blue'>[usr.key] has started the game.</font>")
feedback_add_details("admin_verb","SN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return 1
else
if(SSticker.current_state > GAME_STATE_PREGAME)
to_chat(usr, "<font color='red'>Error: Start Now: Game has already started.</font>")
return 0
return
if(!SSticker.start_immediately)
SSticker.start_immediately = TRUE
var/msg = ""
if(SSticker.current_state == GAME_STATE_INIT)
msg = " (The server is still setting up, but the round will be started as soon as possible.)"
log_admin("[key_name(usr)] has started the game.[msg]")
message_admins("<font color='blue'>[key_name_admin(usr)] has started the game.[msg]</font>")
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>")
log_and_message_admins("cancelled immediate game start.")
/datum/admins/proc/toggleenter()
set category = "Server"
@@ -952,10 +957,10 @@ var/datum/announcement/minor/admin_min_announcer = new
set name="Delay"
if(!check_rights(R_SERVER|R_EVENT)) return
if (!ticker || ticker.current_state != GAME_STATE_PREGAME)
ticker.delay_end = !ticker.delay_end
log_admin("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].")
message_admins("<font color='blue'>[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].</font>", 1)
if (SSticker.current_state >= GAME_STATE_PLAYING)
SSticker.delay_end = !SSticker.delay_end
log_admin("[key_name(usr)] [SSticker.delay_end ? "delayed the round end" : "has made the round end normally"].")
message_admins("<font color='blue'>[key_name(usr)] [SSticker.delay_end ? "delayed the round end" : "has made the round end normally"].</font>", 1)
return //alert("Round end delayed", null, null, null, null, null)
round_progressing = !round_progressing
if (!round_progressing)
+2 -5
View File
@@ -221,7 +221,6 @@ var/list/admin_verbs_debug = list(
/client/proc/enable_debug_verbs,
/client/proc/callproc,
/client/proc/callproc_datum,
/client/proc/debug_process, //VOREStation Add,
/client/proc/SDQL2_query,
/client/proc/Jump,
/client/proc/debug_rogueminer,
@@ -231,7 +230,7 @@ var/list/admin_verbs_debug = list(
/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,
// /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,
@@ -242,7 +241,6 @@ var/list/admin_verbs_debug = list(
var/list/admin_verbs_paranoid_debug = list(
/client/proc/callproc,
/client/proc/callproc_datum,
/client/proc/debug_process, //VOREStation Add,
/client/proc/debug_controller
)
@@ -313,7 +311,6 @@ var/list/admin_verbs_hideable = list(
/client/proc/cmd_admin_list_open_jobs,
/client/proc/callproc,
/client/proc/callproc_datum,
/client/proc/debug_process, //VOREStation Add,
/client/proc/Debug2,
/client/proc/reload_admins,
/client/proc/kill_air,
@@ -407,7 +404,7 @@ var/list/admin_verbs_event_manager = list(
/client/proc/callproc,
/client/proc/callproc_datum,
/client/proc/debug_controller,
/client/proc/show_gm_status,
// /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,
@@ -16,7 +16,7 @@
return
gravity_is_on = !gravity_is_on
for(var/area/A in all_areas)
for(var/area/A in world)
A.gravitychange(gravity_is_on)
feedback_inc("admin_secrets_fun_used",1)
+1 -1
View File
@@ -25,7 +25,7 @@
to_chat(usr, "<span class='danger'>Error: You cannot request spice (muted from adminhelps).</span>")
return
if(alert(usr, "Are you sure you want to request the admins spice things up for you? You accept the consequences if you do.",,"No","Yes") != "No")
if(alert(usr, "Are you sure you want to request the admins spice things up for you? You accept the consequences if you do.",,"Yes","No") != "No")
message_admins("[ADMIN_FULLMONTY(usr)] has requested the round be spiced up a little.")
to_chat(usr, "<span class='notice'>You have requested some more spice in your round.</span>")
else
+12 -10
View File
@@ -13,7 +13,7 @@
if(config.allow_admin_jump)
usr.on_mob_jump()
usr.loc = pick(get_area_turfs(A))
usr.forceMove(pick(get_area_turfs(A)))
log_admin("[key_name(usr)] jumped to [A]")
message_admins("[key_name_admin(usr)] jumped to [A]", 1)
@@ -30,7 +30,7 @@
log_admin("[key_name(usr)] jumped to [T.x],[T.y],[T.z] in [T.loc]")
message_admins("[key_name_admin(usr)] jumped to [T.x],[T.y],[T.z] in [T.loc]", 1)
usr.on_mob_jump()
usr.loc = T
usr.forceMove(T)
feedback_add_details("admin_verb","JT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
else
alert("Admin jumping disabled")
@@ -53,7 +53,7 @@
if(T && isturf(T))
feedback_add_details("admin_verb","JM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
A.on_mob_jump()
A.loc = T
A.forceMove(T)
else
to_chat(A, "This mob is not located in the game world.")
else
@@ -70,9 +70,11 @@
if(src.mob)
var/mob/A = src.mob
A.on_mob_jump()
A.x = tx
A.y = ty
A.z = tz
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
A.forceMove(T)
feedback_add_details("admin_verb","JC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
message_admins("[key_name_admin(usr)] jumped to coordinates [tx], [ty], [tz]")
@@ -98,7 +100,7 @@
log_admin("[key_name(usr)] jumped to [key_name(M)]")
message_admins("[key_name_admin(usr)] jumped to [key_name_admin(M)]", 1)
usr.on_mob_jump()
usr.loc = M.loc
usr.forceMove(get_turf(M))
feedback_add_details("admin_verb","JK") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
else
alert("Admin jumping disabled")
@@ -115,7 +117,7 @@
message_admins(msg)
admin_ticket_log(M, msg)
M.on_mob_jump()
M.loc = get_turf(usr)
M.forceMove(get_turf(usr))
feedback_add_details("admin_verb","GM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
else
alert("Admin jumping disabled")
@@ -145,7 +147,7 @@
admin_ticket_log(M, msg)
if(M)
M.on_mob_jump()
M.loc = get_turf(usr)
M.forceMove(get_turf(usr))
feedback_add_details("admin_verb","GK") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
else
alert("Admin jumping disabled")
@@ -159,7 +161,7 @@
if(A)
if(config.allow_admin_jump)
M.on_mob_jump()
M.loc = pick(get_area_turfs(A))
M.forceMove(pick(get_area_turfs(A)))
feedback_add_details("admin_verb","SMOB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] teleported [key_name(M)]")
+1 -1
View File
@@ -341,7 +341,7 @@
var/list/areas_with_intercom = list()
var/list/areas_with_camera = list()
for(var/area/A in all_areas)
for(var/area/A in world)
if(!(A.type in areas_all))
areas_all.Add(A.type)
-1
View File
@@ -164,7 +164,6 @@ var/list/debug_verbs = list (
,/datum/admins/proc/setup_supermatter
,/client/proc/atmos_toggle_debug
,/client/proc/spawn_tanktransferbomb
,/client/proc/debug_process_scheduler // VOREStation Edit - Nice
,/client/proc/take_picture
)
+1 -1
View File
@@ -525,7 +525,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
//If we're announcing their arrival
if(announce)
AnnounceArrival(new_character, new_character.mind.assigned_role)
AnnounceArrival(new_character, new_character.mind.assigned_role, "Common", new_character.z)
log_admin("[admin] has spawned [player_key]'s character [new_character.real_name].")
message_admins("[admin] has spawned [player_key]'s character [new_character.real_name].", 1)
+52 -2
View File
@@ -8,7 +8,7 @@
if(!istype(target))
return
var/list/smite_types = list(SMITE_SHADEKIN_ATTACK,SMITE_SHADEKIN_NOMF,SMITE_REDSPACE_ABDUCT)
var/list/smite_types = list(SMITE_SHADEKIN_ATTACK,SMITE_SHADEKIN_NOMF,SMITE_REDSPACE_ABDUCT,SMITE_AUTOSAVE,SMITE_AUTOSAVE_WIDE)
var/smite_choice = input("Select the type of SMITE for [target]","SMITE Type Choice") as null|anything in smite_types
if(!smite_choice)
@@ -50,7 +50,7 @@
shadekin.death()
if(SMITE_SHADEKIN_NOMF)
var/list/kin_types = list(
var/static/list/kin_types = list(
"Red Eyes (Dark)" = /mob/living/simple_mob/shadekin/red/dark,
"Red Eyes (Light)" = /mob/living/simple_mob/shadekin/red/white,
"Red Eyes (Brown)" = /mob/living/simple_mob/shadekin/red/brown,
@@ -122,6 +122,12 @@
if(SMITE_REDSPACE_ABDUCT)
redspace_abduction(target, src)
if(SMITE_AUTOSAVE)
fake_autosave(target, src)
if(SMITE_AUTOSAVE_WIDE)
fake_autosave(target, src, TRUE)
else
return //Injection? Don't print any messages.
@@ -211,3 +217,47 @@ var/redspace_abduction_z
to_chat(user,"<span class='notice'>The mob has been moved. ([admin_jump_link(target,usr.client.holder)])</span>")
target.transforming = FALSE
/proc/fake_autosave(var/mob/living/target, var/client/user, var/wide)
if(!istype(target) || !target.client)
to_chat(user, "<span class='warning'>Skipping [target] because they are not a /mob/living or have no client.</span>")
return
if(wide)
for(var/mob/living/L in orange(user.view, user.mob))
fake_autosave(L, user)
return
target.move_delay = 99999999
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'
var/static/list/bad_tips = list(
"Did you know that black shoes protect you from electrocution while hacking?",
"Did you know that airlocks always have a wire that disables ID checks?",
"You can always find at least 3 pairs of glowing purple gloves in maint!",
"Phoron is not toxic if you've had a soda within 30 seconds of exposure!",
"Space Mountain Wind makes you immune to damage from space for 30 seconds!",
"A mask and air tank are all you need to be safe in space!",
"When exploring maintenance, wearing no shoes makes you move faster!",
"Did you know that the bartender's shotgun is loaded with harmless ammo?",
"Did you know that the tesla and singulo only need containment for 5 minutes?")
var/tip = pick(bad_tips)
to_chat(target, "<span class='notice' style='font: small-caps bold large monospace!important'>Tip of the day:</span><br><span class='notice'>[tip]</span>")
var/obj/screen/loader = new(target)
loader.name = "Autosaving..."
loader.desc = "A disc icon that represents your game autosaving. Please wait."
loader.icon = 'icons/obj/discs_vr.dmi'
loader.icon_state = "quicksave"
loader.screen_loc = "NORTH-1, EAST-1"
target.client.screen += loader
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
@@ -8,7 +8,7 @@
name = DA[name] //name is really the index until this line
else
value = DA[name]
header = "<li style='backgroundColor:white'>(<a href='?_src_=vars;listedit=\ref[DA];index=[index]'>E</a>) (<a href='?_src_=vars;listchange=\ref[DA];index=[index]'>C</a>) (<a href='?_src_=vars;listremove=\ref[DA];index=[index]'>-</a>) "
header = "<li style='backgroundColor:white'>(<a href='?_src_=vars;[VV_HK_LIST_EDIT]=1;target=\ref[DA];index=[index]'>E</a>) (<a href='?_src_=vars;[VV_HK_LIST_CHANGE]=1;target=\ref[DA];index=[index]'>C</a>) (<a href='?_src_=vars;[VV_HK_LIST_REMOVE]=1;target=\ref[DA];index=[index]'>-</a>) "
else
header = "<li style='backgroundColor:white'>(<a href='?_src_=vars;datumedit=\ref[DA];varnameedit=[name]'>E</a>) (<a href='?_src_=vars;datumchange=\ref[DA];varnamechange=[name]'>C</a>) (<a href='?_src_=vars;datummass=\ref[DA];varnamemass=[name]'>M</a>) "
else
@@ -97,9 +97,10 @@ GLOBAL_PROTECT(VVpixelmovement)
L += var_value
switch(alert("Would you like to associate a value with the list entry?",,"Yes","No"))
if("Yes")
L[var_value] = mod_list_add_ass(O) //hehe
if(IS_VALID_ASSOC_KEY(var_value))
switch(alert("Would you like to associate a value with the list entry?",,"Yes","No"))
if("Yes")
L[var_value] = mod_list_add_ass(O) //hehe
if (O)
if (O.vv_edit_var(objectvar, L) == FALSE)
to_chat(src, "Your edit was rejected by the object.")
@@ -179,12 +180,13 @@ GLOBAL_PROTECT(VVpixelmovement)
if (index == null)
return
var/assoc = 0
var/prompt = alert(src, "Do you want to edit the key or its assigned value?", "Associated List", "Key", "Assigned Value", "Cancel")
if (prompt == "Cancel")
return
if (prompt == "Assigned Value")
assoc = 1
assoc_key = L[index]
if(IS_VALID_ASSOC_KEY(L[index]))
var/prompt = alert(src, "Do you want to edit the key or its assigned value?", "Associated List", "Key", "Assigned Value", "Cancel")
if (prompt == "Cancel")
return
if (prompt == "Assigned Value")
assoc = 1
assoc_key = L[index]
var/default
var/variable
var/old_assoc_value //EXPERIMENTAL - Keep old associated value while modifying key, if any
@@ -193,9 +195,10 @@ GLOBAL_PROTECT(VVpixelmovement)
else
variable = L[index]
//EXPERIMENTAL - Keep old associated value while modifying key, if any
var/found = L[variable]
if(!isnull(found))
old_assoc_value = found
if(IS_VALID_ASSOC_KEY(variable))
var/found = L[variable]
if(!isnull(found))
old_assoc_value = found
//
default = vv_get_class(objectvar, variable)
+4 -2
View File
@@ -4,8 +4,10 @@
if((usr.client != src) || !src.holder)
return
var/datum/target = locate(href_list["target"])
if(target)
if(istype(target))
target.vv_do_topic(href_list)
else if(islist(target))
vv_do_list(target, href_list)
if(href_list["Vars"])
debug_variables(locate(href_list["Vars"]))
@@ -519,6 +521,6 @@
if(href_list["datumrefresh"])
var/datum/DAT = locate(href_list["datumrefresh"])
if(istype(DAT, /datum) || istype(DAT, /client))
if(istype(DAT, /datum) || istype(DAT, /client) || islist(DAT))
debug_variables(DAT)
@@ -0,0 +1,44 @@
//LISTS - CAN NOT DO VV_DO_TOPIC BECAUSE LISTS AREN'T DATUMS :(
/client/proc/vv_do_list(list/target, href_list)
if(!check_rights(R_VAREDIT))
return
var/target_index = text2num(href_list["index"])
if(target_index)
if(href_list[VV_HK_LIST_EDIT])
mod_list(target, null, "list", "contents", target_index, autodetect_class = TRUE)
if(href_list[VV_HK_LIST_CHANGE])
mod_list(target, null, "list", "contents", target_index, autodetect_class = FALSE)
if(href_list[VV_HK_LIST_REMOVE])
var/variable = target[target_index]
var/prompt = alert("Do you want to remove item number [target_index] from list?", "Confirm", "Yes", "No")
if (prompt != "Yes")
return
target.Cut(target_index, target_index+1)
log_world("### ListVarEdit by [src]: /list's contents: REMOVED=[html_encode("[variable]")]")
log_admin("[key_name(src)] modified list's contents: REMOVED=[variable]")
message_admins("[key_name_admin(src)] modified list's contents: REMOVED=[variable]")
if(href_list[VV_HK_LIST_ADD])
mod_list_add(target, null, "list", "contents")
if(href_list[VV_HK_LIST_ERASE_DUPES])
uniqueList_inplace(target)
log_world("### ListVarEdit by [src]: /list contents: CLEAR DUPES")
log_admin("[key_name(src)] modified list's contents: CLEAR DUPES")
message_admins("[key_name_admin(src)] modified list's contents: CLEAR DUPES")
if(href_list[VV_HK_LIST_ERASE_NULLS])
listclearnulls(target)
log_world("### ListVarEdit by [src]: /list contents: CLEAR NULLS")
log_admin("[key_name(src)] modified list's contents: CLEAR NULLS")
message_admins("[key_name_admin(src)] modified list's contents: CLEAR NULLS")
if(href_list[VV_HK_LIST_SET_LENGTH])
var/value = vv_get_value(VV_NUM)
if (value["class"] != VV_NUM || value["value"] > max(5000, target.len)) //safety - would rather someone not put an extra 0 and erase the server's memory lmao.
return
target.len = value["value"]
log_world("### ListVarEdit by [src]: /list len: [target.len]")
log_admin("[key_name(src)] modified list's len: [target.len]")
message_admins("[key_name_admin(src)] modified list's len: [target.len]")
if(href_list[VV_HK_LIST_SHUFFLE])
shuffle_inplace(target)
log_world("### ListVarEdit by [src]: /list contents: SHUFFLE")
log_admin("[key_name(src)] modified list's contents: SHUFFLE")
message_admins("[key_name_admin(src)] modified list's contents: SHUFFLE")
@@ -55,12 +55,12 @@
if (islist)
dropdownoptions = list(
"---",
"Add Item" = "?_src_=vars;listadd=[refid]",
"Remove Nulls" = "?_src_=vars;listnulls=[refid]",
"Remove Dupes" = "?_src_=vars;listdupes=[refid]",
"Set len" = "?_src_=vars;listlen=[refid]",
"Shuffle" = "?_src_=vars;listshuffle=[refid]",
"Show VV To Player" = "?_src_=vars;expose=[refid]"
"Add Item" = "?_src_=vars;[VV_HK_LIST_ADD]=TRUE;target=[refid]",
"Remove Nulls" = "?_src_=vars;[VV_HK_LIST_ERASE_NULLS]=TRUE;target=[refid]",
"Remove Dupes" = "?_src_=vars;[VV_HK_LIST_ERASE_DUPES]=TRUE;target=[refid]",
"Set len" = "?_src_=vars;[VV_HK_LIST_SET_LENGTH]=TRUE;target=[refid]",
"Shuffle" = "?_src_=vars;[VV_HK_LIST_SHUFFLE]=TRUE;target=[refid]",
// "Show VV To Player" = "?_src_=vars;[VV_HK_EXPOSE]=TRUE;target=[refid]" // TODO - Not yet implemented for lists
)
autoconvert_dropdown = TRUE
else
@@ -88,7 +88,7 @@
for (var/i in 1 to L.len)
var/key = L[i]
var/value
if (IS_NORMAL_LIST(L) && !isnum(key))
if (IS_NORMAL_LIST(L) && IS_VALID_ASSOC_KEY(key))
value = L[key]
variable_html += debug_variable(i, value, 0, D)
else