job quirk restriction system (#1187)

This commit is contained in:
Azarak
2020-10-08 22:17:17 +01:00
committed by GitHub
parent b91afb4d1b
commit 218f7d455c
8 changed files with 96 additions and 0 deletions
+4
View File
@@ -0,0 +1,4 @@
#define JOB_UNAVAILABLE_QUIRK 6
#define SEC_RESTRICTED_QUIRKS "Blind" = TRUE, "Blood Deficiency" = TRUE, "Brain Tumor" = TRUE, "Deaf" = TRUE, "Paraplegic" = TRUE, "Mute" = TRUE, "Foreigner" = TRUE, "Pacifist" = TRUE
#define HEAD_RESTRICTED_QUIRKS "Blind" = TRUE, "Deaf" = TRUE, "Mute" = TRUE, "Foreigner" = TRUE
+21
View File
@@ -85,6 +85,10 @@ SUBSYSTEM_DEF(job)
return FALSE
if(!job.player_old_enough(player.client))
return FALSE
//SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION
if(job.has_banned_quirk(player.client.prefs))
return FALSE
//SKYRAT EDIT END
if(job.required_playtime_remaining(player.client))
return FALSE
var/position_limit = job.total_positions
@@ -109,6 +113,11 @@ SUBSYSTEM_DEF(job)
if(!job.player_old_enough(player.client))
JobDebug("FOC player not old enough, Player: [player]")
continue
//SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION
if(job.has_banned_quirk(player.client.prefs))
JobDebug("FOC job not compatible with quirks, Player: [player]")
continue
//SKYRAT EDIT END
if(job.required_playtime_remaining(player.client))
JobDebug("FOC player not enough xp, Player: [player]")
continue
@@ -147,6 +156,12 @@ SUBSYSTEM_DEF(job)
JobDebug("GRJ player not old enough, Player: [player]")
continue
//SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION
if(job.has_banned_quirk(player.client.prefs))
JobDebug("GRJ player has incompatible quirk, Player: [player]")
continue
//SKYRAT EDIT END
if(job.required_playtime_remaining(player.client))
JobDebug("GRJ player not enough xp, Player: [player]")
continue
@@ -327,6 +342,12 @@ SUBSYSTEM_DEF(job)
JobDebug("DO player not old enough, Player: [player], Job:[job.title]")
continue
//SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION
if(job.has_banned_quirk(player.client.prefs))
JobDebug("DO player has incompatible quirk, Player: [player], Job:[job.title]")
continue
//SKYRAT EDIT END
if(job.required_playtime_remaining(player.client))
JobDebug("DO player not enough xp, Player: [player], Job:[job.title]")
continue
@@ -255,6 +255,10 @@
return "Your account is not old enough for [jobtitle]."
if(JOB_UNAVAILABLE_SLOTFULL)
return "[jobtitle] is already filled to capacity."
//SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION
if(JOB_UNAVAILABLE_QUIRK)
return "[jobtitle] is restricted from your quirks."
//SKYRAT EDIT END
return "Error: Unknown job availability."
/mob/dead/new_player/proc/IsJobUnavailable(rank, latejoin = FALSE)
@@ -278,6 +282,10 @@
return JOB_UNAVAILABLE_ACCOUNTAGE
if(job.required_playtime_remaining(client))
return JOB_UNAVAILABLE_PLAYTIME
//SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION
if(job.has_banned_quirk(client.prefs))
return JOB_UNAVAILABLE_QUIRK
//SKYRAT EDIT END
if(latejoin && !job.special_check_latejoin(client))
return JOB_UNAVAILABLE_GENERIC
return JOB_AVAILABLE
@@ -0,0 +1,15 @@
/datum/quirk/mute
name = "Mute"
desc = "Due to some accident, medical condition, or simply by choice, you are completely unable to speak."
value = -2 //HALP MAINTS
gain_text = "<span class='danger'>You find yourself unable to speak!</span>"
lose_text = "<span class='notice'>You feel a growing strength in your vocal chords.</span>"
medical_record_text = "Functionally mute, patient is unable to use their voice in any capacity."
/datum/quirk/mute/add()
var/mob/living/carbon/human/H = quirk_holder
H.gain_trauma(new /datum/brain_trauma/severe/mute, TRAUMA_RESILIENCE_ABSOLUTE)
/datum/quirk/mute/remove()
var/mob/living/carbon/human/H = quirk_holder
H?.cure_trauma_type(/datum/brain_trauma/severe/mute, TRAUMA_RESILIENCE_ABSOLUTE)
@@ -1213,6 +1213,9 @@
var/available_in_days = job.available_in_days(user.client)
HTML += "<font color=red>[rank]</font></td><td><font color=red> \[IN [(available_in_days)] DAYS\]</font></td></tr>"
continue
if(job.has_banned_quirk(src))
HTML += "<font color=red>[rank]</font></td><td><font color=red> \[BAD QUIRKS\]</font></td></tr>"
continue
if((job_preferences[SSjob.overflow_role] == JP_LOW) && (rank != SSjob.overflow_role) && !is_banned_from(user.ckey, SSjob.overflow_role))
HTML += "<font color=orange>[rank]</font></td><td></td></tr>"
continue
@@ -1,7 +1,47 @@
/datum/job
///With this set to TRUE, the loadout will be applied before a job clothing will be
var/no_dresscode
//List of banned quirks in their names(dont blame me, that's how they're stored), players can't join as the job if they have the quirk. Associative for the purposes of performance
var/list/banned_quirks
/datum/job/proc/has_banned_quirk(datum/preferences/pref)
if(!pref) //No preferences? We'll let you pass, this time (just a precautionary check,you dont wanna mess up gamemode setting logic)
return FALSE
if(banned_quirks)
for(var/Q in pref.all_quirks)
if(banned_quirks[Q])
return TRUE
return FALSE
/datum/job/assistant
no_dresscode = TRUE
/datum/job/officer
banned_quirks = list(SEC_RESTRICTED_QUIRKS)
/datum/job/detective
banned_quirks = list(SEC_RESTRICTED_QUIRKS)
/datum/job/warden
banned_quirks = list(SEC_RESTRICTED_QUIRKS)
/datum/job/blueshield
banned_quirks = list(SEC_RESTRICTED_QUIRKS)
/datum/job/hos
banned_quirks = list(SEC_RESTRICTED_QUIRKS, HEAD_RESTRICTED_QUIRKS)
/datum/job/cmo
banned_quirks = list(HEAD_RESTRICTED_QUIRKS)
/datum/job/chief_engineer
banned_quirks = list(HEAD_RESTRICTED_QUIRKS, "Paraplegic" = TRUE)
/datum/job/rd
banned_quirks = list(HEAD_RESTRICTED_QUIRKS)
/datum/job/hop
banned_quirks = list(HEAD_RESTRICTED_QUIRKS)
/datum/job/qm
banned_quirks = list(HEAD_RESTRICTED_QUIRKS)
@@ -41,6 +41,9 @@ Re-writes how mutant bodyparts exist and how they're handled. Adds in a per limb
./code/modules/mob/living/carbon/human/species.dm > /datum/species/regenerate_organs() > APPENDED
./code/controllers/subsystem/job.dm > /datum/controller/subsystem/job/proc/FindOccupationCandidates(), /datum/controller/subsystem/job/proc/GiveRandomJob(), /datum/controller/subsystem/job/proc/DivideOccupations(), /datum/controller/subsystem/job/proc/AssignRole()
./code/modules/mob/dead/new_player/new_player.dm > /mob/dead/new_player/proc/IsJobUnavailable(), /proc/get_job_unavailable_error_message()
### Defines:
./code/modules/surgery/organs/tongue.dm > var/static/list/languages_possible_base - added 2 languages
+2
View File
@@ -133,6 +133,7 @@
#include "code\__DEFINES\research\anomalies.dm"
#include "code\__DEFINES\~skyrat_defines\blueshield.dm"
#include "code\__DEFINES\~skyrat_defines\DNA.dm"
#include "code\__DEFINES\~skyrat_defines\jobs.dm"
#include "code\__DEFINES\~skyrat_defines\keybindings.dm"
#include "code\__DEFINES\~skyrat_defines\logging.dm"
#include "code\__DEFINES\~skyrat_defines\obj_flags.dm"
@@ -3306,6 +3307,7 @@
#include "modular_skyrat\modules\customization\datums\dna.dm"
#include "modular_skyrat\modules\customization\datums\elements\polychromic.dm"
#include "modular_skyrat\modules\customization\datums\keybinding\communication.dm"
#include "modular_skyrat\modules\customization\datums\traits\negative.dm"
#include "modular_skyrat\modules\customization\game\objects\items\balls.dm"
#include "modular_skyrat\modules\customization\game\objects\items\storage\rings.dm"
#include "modular_skyrat\modules\customization\game\objects\items\tanks\n2_tanks.dm"