Merge remote-tracking branch 'ParadiseSS13/master' into brutal-part1

This commit is contained in:
AffectedArc07
2021-03-11 18:41:17 +00:00
1118 changed files with 25570 additions and 65816 deletions
+15 -6
View File
@@ -23,8 +23,7 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts
ROLE_BORER = 21,
ROLE_NINJA = 21,
ROLE_GSPIDER = 21,
ROLE_ABDUCTOR = 30,
ROLE_DEVIL = 14
ROLE_ABDUCTOR = 30
))
/proc/player_old_enough_antag(client/C, role)
@@ -184,8 +183,18 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts
var/slot_name = ""
var/saved = FALSE // Indicates whether the character comes from the database or not
// jukebox volume
var/volume = 100
/// Volume mixer, indexed by channel as TEXT (numerical indexes will not work). Volume goes from 0 to 100.
var/list/volume_mixer = list(
"1024" = 100, // CHANNEL_LOBBYMUSIC
"1023" = 100, // CHANNEL_ADMIN
"1022" = 100, // CHANNEL_VOX
"1021" = 100, // CHANNEL_JUKEBOX
"1020" = 100, // CHANNEL_HEARTBEAT
"1019" = 100, // CHANNEL_BUZZ
"1018" = 100, // CHANNEL_AMBIENCE
)
/// The volume mixer save timer handle. Used to debounce the DB call to save, to avoid spamming.
var/volume_mixer_saving = null
// BYOND membership
var/unlock_content = 0
@@ -867,7 +876,7 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts
HTML += ShowDisabilityState(user, DISABILITY_FLAG_BLIND, "Blind")
HTML += ShowDisabilityState(user, DISABILITY_FLAG_DEAF, "Deaf")
HTML += ShowDisabilityState(user, DISABILITY_FLAG_MUTE, "Mute")
if(!(NO_OBESITY in S.species_traits))
if(!(TRAIT_NOFAT in S.inherent_traits))
HTML += ShowDisabilityState(user, DISABILITY_FLAG_FAT, "Obese")
HTML += ShowDisabilityState(user, DISABILITY_FLAG_NERVOUS, "Stutter")
HTML += ShowDisabilityState(user, DISABILITY_FLAG_SWEDISH, "Swedish accent")
@@ -2291,7 +2300,7 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts
if(character.dna.dirtySE)
character.dna.UpdateSE()
domutcheck(character, null, MUTCHK_FORCED) //'Activates' all the above disabilities.
domutcheck(character, MUTCHK_FORCED) //'Activates' all the above disabilities.
character.dna.ready_dna(character, flatten_SE = 0)
character.sync_organ_dna(assimilate=1)
@@ -10,7 +10,7 @@
toggles,
toggles_2,
sound,
volume,
volume_mixer,
lastchangelog,
exp,
clientfps,
@@ -38,7 +38,7 @@
toggles = text2num(query.item[7])
toggles2 = text2num(query.item[8])
sound = text2num(query.item[9])
volume = text2num(query.item[10])
volume_mixer = deserialize_volume_mixer(query.item[10])
lastchangelog = query.item[11]
exp = query.item[12]
clientfps = text2num(query.item[13])
@@ -57,7 +57,6 @@
sound = sanitize_integer(sound, 0, 65535, initial(sound))
UI_style_color = sanitize_hexcolor(UI_style_color, initial(UI_style_color))
UI_style_alpha = sanitize_integer(UI_style_alpha, 0, 255, initial(UI_style_alpha))
volume = sanitize_integer(volume, 0, 100, initial(volume))
lastchangelog = sanitize_text(lastchangelog, initial(lastchangelog))
exp = sanitize_text(exp, initial(exp))
clientfps = sanitize_integer(clientfps, 0, 1000, initial(clientfps))
@@ -74,6 +73,11 @@
log_runtime(EXCEPTION("[C.key] had a malformed role entry: '[role]'. Removing!"), src)
be_special -= role
// We're saving volume_mixer here as well, so no point in keeping the timer running
if(volume_mixer_saving)
deltimer(volume_mixer_saving)
volume_mixer_saving = null
var/datum/db_query/query = SSdbcore.NewQuery({"UPDATE [format_table_name("player")]
SET
ooccolor=:ooccolour,
@@ -86,7 +90,7 @@
toggles_2=:toggles2,
atklog=:atklog,
sound=:sound,
volume=:volume,
volume_mixer=:volume_mixer,
lastchangelog=:lastchangelog,
clientfps=:clientfps,
parallax=:parallax
@@ -103,7 +107,7 @@
"toggles2" = num2text(toggles2, CEILING(log(10, (TOGGLES_2_TOTAL)), 1)),
"atklog" = atklog,
"sound" = sound,
"volume" = volume,
"volume_mixer" = serialize_volume_mixer(volume_mixer),
"lastchangelog" = lastchangelog,
"clientfps" = clientfps,
"parallax" = parallax,
@@ -436,7 +440,7 @@
"f_style" = f_style,
"markingstyleslist" = markingstyleslist,
"ha_style" = ha_style,
"alt_head" = alt_head,
"alt_head" = alt_head || "",
"e_colour" = e_colour,
"underwear" = underwear,
"undershirt" = undershirt,
@@ -657,3 +661,24 @@
saved = FALSE
return TRUE
/**
* Saves [/datum/preferences/proc/volume_mixer] for the current client.
*/
/datum/preferences/proc/save_volume_mixer()
volume_mixer_saving = null
var/datum/db_query/update_query = SSdbcore.NewQuery(
"UPDATE [format_table_name("player")] SET volume_mixer=:volume_mixer WHERE ckey=:ckey",
list(
"volume_mixer" = serialize_volume_mixer(volume_mixer),
"ckey" = parent.ckey
)
)
if(!update_query.warn_execute())
qdel(update_query)
return FALSE
qdel(update_query)
return TRUE
@@ -179,6 +179,7 @@
else
to_chat(src, "You will no longer hear ambient sounds.")
usr.stop_sound_channel(CHANNEL_AMBIENCE)
update_ambience_pref()
SSblackbox.record_feedback("tally", "toggle_verbs", 1, "Toggle Ambience") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/Toggle_Buzz() //No more headaches because headphones bump up shipambience.ogg to insanity levels.
@@ -277,15 +278,15 @@
return
/client/verb/numpad_target()
set name = "Toggle Numpad targetting"
set name = "Toggle Numpad Targeting"
set category = "Preferences"
set desc = "This button will allow you to enable or disable Numpad Targetting"
set desc = "This button will allow you to enable or disable Numpad Targeting"
prefs.toggles ^= PREFTOGGLE_NUMPAD_TARGET
prefs.save_preferences(src)
if (prefs.toggles & PREFTOGGLE_NUMPAD_TARGET)
to_chat(usr, "<span class='notice'>You have enabled Numpad Targetting.")
to_chat(usr, "<span class='notice'>You have enabled Numpad Targeting.")
else
to_chat(usr, "<span class='notice'>You have disabled Numpad Targetting.")
to_chat(usr, "<span class='notice'>You have disabled Numpad Targeting.")
return
/client/verb/azerty_toggle()
@@ -331,3 +332,11 @@
prefs.toggles2 ^= PREFTOGGLE_2_DEATHMESSAGE
prefs.save_preferences(src)
to_chat(src, "You will [(prefs.toggles2 & PREFTOGGLE_2_DEATHMESSAGE) ? "now" : "no longer"] see a notification in deadchat when a player dies.")
/client/verb/toggle_reverb()
set name = "Enable/Disable Reverb"
set category = "Preferences"
set desc = "Toggle ingame reverb effects"
prefs.toggles2 ^= PREFTOGGLE_2_REVERB_DISABLE
prefs.save_preferences(src)
to_chat(src, "You will [(prefs.toggles2 & PREFTOGGLE_2_REVERB_DISABLE) ? "no longer" : "now"] get reverb on ingame sounds.")
@@ -0,0 +1,84 @@
/**
* Returns a DB-friendly version of a volume mixer list.
*
* Arguments
* * vm - The volume mixer list to serialize.
*/
/datum/preferences/proc/serialize_volume_mixer(list/vm)
var/list/temp = list()
for(var/channel in vm)
if(!get_channel_name(text2num(channel)))
continue
temp["[channel]"] = vm[channel]
return json_encode(temp)
/**
* Returns a volume mixer list from text, usually from the DB.
*
* Failure to deserialize will return the current value.
*
* Arguments
* * vmt - The volume mixer list to deserialize.
*/
/datum/preferences/proc/deserialize_volume_mixer(vmt)
if(!istext(vmt))
return volume_mixer
var/list/vm = json_decode(vmt)
if(!islist(vm))
return volume_mixer
var/list/temp = list()
// Ensure the default values are present
for(var/channel in volume_mixer)
temp[channel] = volume_mixer[channel]
for(var/channel in vm)
if(!get_channel_name(text2num(channel)))
continue
temp[channel] = vm[channel]
return temp
/**
* Changes a channel's volume then queues it for DB save.
*
* Arguments:
* * channel - The channel whose volume to change.
* * volume - The new volume, clamped between 0 and 100.
* * debounce_save - Whether to debounce the save call to prevent spamming of DB calls.
*/
/datum/preferences/proc/set_channel_volume(channel, volume, debounce_save = TRUE)
if(!get_channel_name(channel))
return
// Set the volume
volume = clamp(volume, 0, 100)
volume_mixer["[channel]"] = volume
// Update the sound channel
var/sound/S = sound(null, channel = channel, volume = volume)
S.status = SOUND_UPDATE
SEND_SOUND(parent, S)
// Save it
if(debounce_save)
volume_mixer_saving = addtimer(CALLBACK(src, .proc/save_volume_mixer), 3 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_STOPPABLE)
else
if(volume_mixer_saving)
deltimer(volume_mixer_saving)
save_volume_mixer()
/**
* Returns a volume multiplier for the given channel, from 0 to 1 (default).
*
* Arguments:
* * channel - The channel whose volume to get.
*/
/datum/preferences/proc/get_channel_volume(channel)
if(!istext(channel))
channel = "[channel]"
if(isnull(volume_mixer[channel]))
return 1
return clamp(volume_mixer[channel] / 100, 0, 1)
/client/verb/volume_mixer()
set name = "Open Volume Mixer"
set category = "Preferences"
set hidden = TRUE
var/datum/ui_module/volume_mixer/VM = new()
VM.ui_interact(usr)