mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-22 12:41:09 +01:00
job quirk restriction system (#1187)
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user