diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm index 1c7596651e..bda09a66de 100644 --- a/code/__DEFINES/jobs.dm +++ b/code/__DEFINES/jobs.dm @@ -1,3 +1,4 @@ +#define get_job_playtime(client, job) ((client.prefs.exp[job]) ? client.prefs.exp[job] MINUTES_TO_DECISECOND : 0) #define JOB_AVAILABLE 0 #define JOB_UNAVAILABLE_GENERIC 1 @@ -11,10 +12,13 @@ #define JOB_UNAVAILABLE_SPECIES_LIMITED 9 #define JOB_UNAVAILABLE_CLAN 10 #define JOB_UNAVAILABLE_AGE 11 +#define JOB_UNAVAILABE_TIME_LOCK 12 #define DEFAULT_RELIGION "Christianity" #define DEFAULT_DEITY "Space Jesus" +// Job Display on preference + #define JOB_DISPLAY_ORDER_DEFAULT 0 #define JOB_DISPLAY_ORDER_CITIZEN 1 @@ -45,13 +49,141 @@ #define JOB_DISPLAY_ORDER_ARCHIVIST 26 #define JOB_DISPLAY_ORDER_GIOVANNI 27 #define JOB_DISPLAY_ORDER_POLICE_CHIEF 28 -#define JOB_DISPLAY_ORDER_POLICE 29 -#define JOB_DISPLAY_ORDER_POLICE_SERGEANT 30 +#define JOB_DISPLAY_ORDER_POLICE_SERGEANT 29 +#define JOB_DISPLAY_ORDER_POLICE 30 #define JOB_DISPLAY_ORDER_FBI 31 #define JOB_DISPLAY_ORDER_VOIVODE 32 #define JOB_DISPLAY_ORDER_BOGATYR 33 #define JOB_DISPLAY_ORDER_ZADRUGA 34 +// Job Titles +#define JOB_LIVING_ROLES /datum/timelock/living + +#define JOB_CIVILIAN "Citizen" + +#define JOB_UNALIGNED_ROLES /datum/timelock/unaligned +#define JOB_UNALIGNED_ROLES_LIST list(JOB_CIVILIAN) + +#define JOB_PRINCE "Prince" +#define JOB_CLERK "Seneschal" +#define JOB_SHERIFF "Sheriff" +#define JOB_HOUND "Hound" + +#define JOB_CAMARILLA_AUTHORITIES_ROLES /datum/timelock/camarilla_authorities +#define JOB_CAMARILLA_AUTHORITIES_ROLES_LIST list(JOB_SHERIFF, JOB_HOUND, JOB_CLERK, JOB_PRINCE) + + +#define JOB_BRUJAH "Primogen Brujah" +#define JOB_MALKAVIAN "Primogen Malkavian" +#define JOB_NOSFERATU "Primogen Nosferatu" +#define JOB_TOREADOR "Primogen Toreador" +#define JOB_VENTRUE "Primogen Ventrue" + +#define JOB_CAMARILLA_COUNCIL_ROLES /datum/timelock/camarilla_council +#define JOB_CAMARILLA_COUNCIL_ROLES_LIST list(JOB_BRUJAH, JOB_MALKAVIAN,JOB_NOSFERATU, JOB_TOREADOR, JOB_VENTRUE) + + +#define JOB_PRIEST "Priest" + +#define JOB_CHURCH_ROLES /datum/timelock/church +#define JOB_CHURCH_ROLES_LIST list(JOB_PRIEST) + + +#define JOB_GRAVEYARD "Graveyard Keeper" +#define JOB_STREETJAN "Street Janitor" +#define JOB_STRIP "Stripper" +#define JOB_TAXI "Taxi Driver" + + +#define JOB_CITY_SERVICES_ROLES /datum/timelock/city_services +#define JOB_CITY_SERVICES_ROLES_LIST list(JOB_GRAVEYARD,JOB_STREETJAN, JOB_STRIP, JOB_TAXI) + + +#define JOB_CLINIC_DIRECTOR "Clinic Director" +#define JOB_DOCTOR "Doctor" + + +#define JOB_CLINIC_ROLES /datum/timelock/clinic +#define JOB_CLINIC_ROLES_LIST list(JOB_CLINIC_DIRECTOR,JOB_DOCTOR) + + +#define JOB_TRIAD_GANGSTER "Triad Soldier" + +#define JOB_GANG_ROLES /datum/timelock/gang +#define JOB_GANG_ROLES_LIST list(JOB_TRIAD_GANGSTER) + +#define JOB_BARKEEPER "Baron" +#define JOB_EMISSARY "Emissary" +#define JOB_BRUISER "Bruiser" +#define JOB_SWEEPER "Sweeper" + + +#define JOB_ANARCH_ROLES /datum/timelock/anarch +#define JOB_ANARCH_ROLES_LIST list(JOB_BARKEEPER,JOB_EMISSARY,JOB_BRUISER,JOB_SWEEPER) + +#define JOB_DEALER "Dealer" +#define JOB_SUPPLY "Supply Technician" + +#define JOB_WAREHOUSE_ROLES /datum/timelock/warehouse +#define JOB_WAREHOUSE_ROLES_LIST list(JOB_DEALER,JOB_SUPPLY) + +#define JOB_REGENT "Chantry Regent" +#define JOB_ARCHIVIST "Chantry Archivist" + +#define JOB_TREMERE_ROLES /datum/timelock/tremere +#define JOB_TREMERE_ROLES_LIST list(JOB_REGENT,JOB_ARCHIVIST) + +#define JOB_GIOVANNI_CAPO "Capo" +#define JOB_GIOVANNI_SQUADRA "La Squadra" +#define JOB_GIOVANNI_FAMIGLIA "La Famiglia" + +#define JOB_GIOVANNI_ROLES /datum/timelock/giovanni_family +#define JOB_GIOVANNI_ROLES_LIST list(JOB_GIOVANNI_CAPO,JOB_GIOVANNI_SQUADRA,JOB_GIOVANNI_FAMIGLIA) + +#define JOB_POLICE_CHIEF "Police Chief" +#define JOB_POLICE_SERGEANT "Police Sergeant" +#define JOB_POLICE "Police Officer" +#define JOB_DISPATCHER "Emergency Dispatcher" + +#define JOB_POLICE_ROLES /datum/timelock/police_force +#define JOB_POLICE_ROLES_LIST list(JOB_POLICE_CHIEF,JOB_POLICE_SERGEANT,JOB_POLICE,JOB_DISPATCHER) + +#define JOB_FBI "Federal Investigator" + +#define JOB_NATIONAL_SECURITY_ROLES /datum/timelock/national_security +#define JOB_NATIONAL_SECURITY_ROLES_LIST list(JOB_FBI) + +#define JOB_VOIVODE "Voivode" +#define JOB_BOGATYR "Bogatyr" +#define JOB_ZADRUGA "Zadruga" + +#define JOB_TZIMISCE_MANSION_ROLES /datum/timelock/tzimisce_mansion_v +#define JOB_TZIMISCE_MANSION_ROLES_LIST list(JOB_VOIVODE,JOB_BOGATYR,JOB_ZADRUGA) + + + +#define TIMELOCK_JOB(role_id, hours) new/datum/timelock(role_id, hours, role_id) + + + +// Used to add a timelock to a job. Will be passed onto derivatives +#define AddTimelock(Path, timelockList) \ +##Path/setup_requirements(list/L){\ + L += timelockList;\ + . = ..(L);\ +} + +// Used to add a timelock to a job. Will be passed onto derivates. Will not include the parent's timelocks. +#define OverrideTimelock(Path, timelockList) \ +##Path/setup_requirements(list/L){\ + L = timelockList;\ + . = ..(L);\ +} + + + + + // #define JOB_DISPLAY_ORDER_INVESTIGATOR 25 // #define JOB_DISPLAY_ORDER_CHAPLAIN 26 /* diff --git a/code/__DEFINES/time.dm b/code/__DEFINES/time.dm index 6cad79b8c0..b6233828f6 100644 --- a/code/__DEFINES/time.dm +++ b/code/__DEFINES/time.dm @@ -45,6 +45,8 @@ When using time2text(), please use "DDD" to find the weekday. Refrain from using #define HOURS MINUTES*60 +#define MINUTES_TO_DECISECOND *600 + #define TICKS *world.tick_lag #define DS2TICKS(DS) ((DS)/world.tick_lag) diff --git a/code/__HELPERS/time.dm b/code/__HELPERS/time.dm index d9a6b5bf90..0cb96b5c8a 100644 --- a/code/__HELPERS/time.dm +++ b/code/__HELPERS/time.dm @@ -27,6 +27,17 @@ else SSticker.gametime_offset = CEILING(SSticker.gametime_offset, 3600) +/proc/deciseconds_to_time_text(deciseconds) + var/total_seconds = round(deciseconds / 10) + var/total_minutes = total_seconds / 60 + var/hours = total_minutes / 60 + var/minutes = total_minutes % 60 + + return "[round(hours)]:[minutes < 10 ? "0[minutes]" : minutes] Hours" + +/proc/duration2text_custom(deciseconds) + return deciseconds_to_time_text(deciseconds) + //returns timestamp in a sql and a not-quite-compliant ISO 8601 friendly format /proc/SQLtime(timevar) return time2text(timevar || world.timeofday, "YYYY-MM-DD hh:mm:ss") diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index bf1e4be88b..6ca6021150 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -99,7 +99,7 @@ SUBSYSTEM_DEF(job) return FALSE if(!job.player_old_enough(player.client) && !bypass) return FALSE - if(job.required_playtime_remaining(player.client) && !bypass) + if(job.can_play_role(player.client) && !bypass) return FALSE if((player.client.prefs.generation > job.minimal_generation) && !bypass) return FALSE @@ -136,9 +136,8 @@ SUBSYSTEM_DEF(job) if(!job.player_old_enough(player.client) && !bypass) JobDebug("FOC player not old enough, Player: [player]") continue - if(job.required_playtime_remaining(player.client) && !bypass) - JobDebug("FOC player not enough xp, Player: [player]") - continue + if(!job.can_play_role(player.client) && !bypass) + JobDebug("FOC player don't got enough hours(TIMELOCK), Player: [player], Job:[job.title]") if((player.client.prefs.generation > job.minimal_generation) && !bypass) JobDebug("FOC player not enough generation, Player: [player]") continue @@ -195,9 +194,8 @@ SUBSYSTEM_DEF(job) JobDebug("GRJ player not old enough, Player: [player]") continue - if(job.required_playtime_remaining(player.client)) - JobDebug("GRJ player not enough xp, Player: [player]") - continue + if(!job.can_play_role(player.client)) + JobDebug("GRJ player not enough playtime (TIMELOCK), Player: [player], Job:[job.title]") if(player.client.prefs.generation > job.minimal_generation) JobDebug("GRJ player not enough generation, Player: [player]") @@ -405,10 +403,8 @@ SUBSYSTEM_DEF(job) JobDebug("DO player not old enough, Player: [player], Job:[job.title]") continue - if(job.required_playtime_remaining(player.client) && !bypass) - JobDebug("DO player not enough xp, Player: [player], Job:[job.title]") - continue - + if(!job.can_play_role(player.client) && !bypass) + JobDebug("DO player not enough playtime (TIMELOCK), Player: [player], Job:[job.title]") if((player.client.prefs.generation > job.minimal_generation) && !bypass) JobDebug("DO player not enough generation, Player: [player]") continue diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 1e7f63c90f..dfd3a1a7cb 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1298,7 +1298,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) popup.open(FALSE) onclose(user, "capturekeypress", src) -/datum/preferences/proc/SetChoices(mob/user, limit = 17, list/splitJobs = list("Chief Engineer"), widthPerColumn = 295, height = 620) +/datum/preferences/proc/SetChoices(mob/user, limit = 17, list/splitJobs = list("Chief Engineer"), widthPerColumn = 400, height = 700) if(!SSjob) return @@ -1349,21 +1349,11 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(is_banned_from(user.ckey, rank)) HTML += "[rank] BANNED" continue - var/required_playtime_remaining = job.required_playtime_remaining(user.client) //text (Zamenil potomu chto slishkom rezhet glaza - if(required_playtime_remaining && !bypass) - HTML += "[rank] \[ [get_exp_format(required_playtime_remaining)] as [job.get_exp_req_type()] \]" - continue if(!job.player_old_enough(user.client) && !bypass) var/available_in_days = job.available_in_days(user.client) HTML += "[rank] \[IN [(available_in_days)] DAYS\]" continue - if((generation > job.minimal_generation) && !bypass) - HTML += "[rank] \[FROM [job.minimal_generation] GENERATION AND OLDER\]" - continue - if((masquerade < job.minimal_masquerade) && !bypass) - HTML += "[rank] \[[job.minimal_masquerade] MASQUERADE POINTS REQUIRED\]" - continue if(!job.allowed_species.Find(pref_species.name) && !bypass) HTML += "[rank] \[[pref_species.name] RESTRICTED\]" continue @@ -1376,6 +1366,24 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(!alloww && !bypass) HTML += "[rank] \[[clane.name] RESTRICTED\]" continue + if((generation > job.minimal_generation) && !bypass) + HTML += "[rank] \[FROM [job.minimal_generation] GENERATION AND OLDER\]" + continue + if((masquerade < job.minimal_masquerade) && !bypass) + HTML += "[rank] \[[job.minimal_masquerade] MASQUERADE POINTS REQUIRED\]" + continue + if(!job.can_play_role(user.client) && !bypass) + var/list/missing_requirements = job.get_role_requirements(user.client) + HTML += "[rank] \[TIMELOCKED\]" + + HTML += "" + for(var/r in missing_requirements) + var/datum/timelock/T = r + var/requirement_message = "Lacking : [duration2text_custom(missing_requirements[r])]" + HTML += "" + + HTML += "
[T.name][requirement_message]
" + continue if((job_preferences[SSjob.overflow_role] == JP_LOW) && (rank != SSjob.overflow_role) && !is_banned_from(user.ckey, SSjob.overflow_role)) HTML += "[rank]" continue @@ -1384,7 +1392,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) else HTML += "[rank]" - HTML += "" + HTML += "" var/prefLevelLabel = "ERROR" var/prefLevelColor = "pink" diff --git a/code/modules/jobs/job_exp.dm b/code/modules/jobs/job_exp.dm index 0593b2867f..c5ffbe5e2d 100644 --- a/code/modules/jobs/job_exp.dm +++ b/code/modules/jobs/job_exp.dm @@ -223,3 +223,10 @@ GLOBAL_PROTECT(exp_to_update) prefs.db_flags = 0 //This PROBABLY won't happen, but better safe than sorry. qdel(flags_read) return TRUE + +//This one is used for the timelock +client/proc/get_time_living() + if(!prefs.exp || !prefs.exp[EXP_TYPE_LIVING]) + return 0 + var/exp_living = text2num(prefs.exp[EXP_TYPE_LIVING]) MINUTES_TO_DECISECOND + return exp_living diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index cf526ab215..e8d3f27e30 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -91,9 +91,17 @@ var/duty var/v_duty + + var/list/minimum_playtimes + + var/minimum_playtime_as_job = 1 HOURS + /datum/job/New() . = ..() var/list/jobs_changes = GetMapChanges() + + minimum_playtimes = setup_requirements(list()) + if(!jobs_changes) return if(isnum(jobs_changes["additional_access"])) @@ -347,3 +355,67 @@ if(CONFIG_GET(flag/security_has_maint_access)) return list(ACCESS_MAINT_TUNNELS) return list() + +/datum/timelock + var/name + var/time_required + var/roles + +/datum/timelock/New(name, time_required, list/roles) + . = ..() + if(name) src.name = name + if(time_required) src.time_required = time_required + if(roles) src.roles = roles + +/datum/job/proc/setup_requirements(list/L) + var/list/to_return = list() + for(var/PT in L) + if(ispath(PT)) + LAZYADD(to_return, new PT(time_required = L[PT])) + else + LAZYADD(to_return, TIMELOCK_JOB(PT, L[PT])) + + return to_return + +/datum/timelock/proc/can_play(client/C) + if(islist(roles)) + var/total = 0 + for(var/role_required in roles) + total += get_job_playtime(C, role_required) + + return total >= time_required + else + return get_job_playtime(C, roles) >= time_required + +/datum/timelock/proc/get_role_requirement(client/C) + if(islist(roles)) + var/total = 0 + for(var/role_required in roles) + total += get_job_playtime(C, role_required) + + return time_required - total + else + return time_required - get_job_playtime(C, roles) + +/datum/job/proc/can_play_role(client/client) + + + if(get_job_playtime(client, title) > minimum_playtime_as_job) + return TRUE + + for(var/prereq in minimum_playtimes) + var/datum/timelock/T = prereq + if(!T.can_play(client)) + return FALSE + + return TRUE + +/datum/job/proc/get_role_requirements(client/C) + var/list/return_requirements = list() + for(var/prereq in minimum_playtimes) + var/datum/timelock/T = prereq + var/time_required = T.get_role_requirement(C) + if(time_required > 0) + return_requirements[T] = time_required + + return return_requirements diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 8dff718a84..23903fccda 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -290,8 +290,8 @@ return "[jobtitle] is unavailable." if(JOB_UNAVAILABLE_BANNED) return "You are currently banned from [jobtitle]." - if(JOB_UNAVAILABLE_PLAYTIME) - return "You do not have enough relevant playtime for [jobtitle]." + if(JOB_UNAVAILABE_TIME_LOCK) + return "You do not have enough hours in some roles for [jobtitle]." if(JOB_UNAVAILABLE_ACCOUNTAGE) return "Your account is not old enough for [jobtitle]." if(JOB_UNAVAILABLE_SLOTFULL) @@ -321,8 +321,8 @@ return JOB_UNAVAILABLE_GENERIC if(!job.player_old_enough(client) && !bypass) return JOB_UNAVAILABLE_ACCOUNTAGE - if(job.required_playtime_remaining(client) && !bypass) - return JOB_UNAVAILABLE_PLAYTIME + if(!job.can_play_role(client) && !bypass ) + return JOB_UNAVAILABE_TIME_LOCK if(latejoin && !job.special_check_latejoin(client)) return JOB_UNAVAILABLE_GENERIC if((client.prefs.generation > job.minimal_generation) && !bypass) diff --git a/code/modules/vtmb/jobs/anarch/anarch.dm b/code/modules/vtmb/jobs/anarch/anarch.dm new file mode 100644 index 0000000000..e069a3d7fd --- /dev/null +++ b/code/modules/vtmb/jobs/anarch/anarch.dm @@ -0,0 +1,21 @@ +/datum/job/vamp/anarch + supervisors = "the Anarchs and the Traditions" + total_positions = 1 + spawn_positions = 1 + +/datum/timelock/anarch + name = "Anarch Roles" + +/datum/timelock/anarch/New(name, time_required, list/roles) + . = ..() + src.roles = JOB_ANARCH_ROLES_LIST + + +/datum/timelock/living + name = "Living Roles" + +/datum/timelock/living/can_play(client/C) + return C.get_time_living() >= time_required + +/datum/timelock/living/get_role_requirement(client/C) + return time_required - C.get_time_living() diff --git a/code/modules/vtmb/jobs/anarchs/baron.dm b/code/modules/vtmb/jobs/anarch/baron.dm similarity index 90% rename from code/modules/vtmb/jobs/anarchs/baron.dm rename to code/modules/vtmb/jobs/anarch/baron.dm index 25df239688..dd86a1bb0d 100644 --- a/code/modules/vtmb/jobs/anarchs/baron.dm +++ b/code/modules/vtmb/jobs/anarch/baron.dm @@ -1,6 +1,6 @@ -/datum/job/vamp/barkeeper - title = "Baron" +/datum/job/vamp/anarch/barkeeper + title = JOB_BARKEEPER department_head = list("Justicar") faction = "Vampire" total_positions = 1 @@ -31,9 +31,15 @@ allowed_bloodlines = list("Daughters of Cacophony", "True Brujah", "Brujah", "Nosferatu", "Gangrel", "Toreador", "Malkavian", "Ventrue", "Lasombra", "Gargoyle", "Ministry") experience_addition = 20 + +AddTimelock(/datum/job/vamp/anarch/barkeeper, list( + JOB_ANARCH_ROLES = 15 HOURS, + JOB_LIVING_ROLES = 2 HOURS, +)) + /datum/outfit/job/barkeeper name = "Baron" - jobtype = /datum/job/vamp/barkeeper + jobtype = /datum/job/vamp/anarch/barkeeper id = /obj/item/card/id/anarch glasses = /obj/item/clothing/glasses/vampire/sun diff --git a/code/modules/vtmb/jobs/anarchs/bouncer.dm b/code/modules/vtmb/jobs/anarch/bouncer.dm similarity index 90% rename from code/modules/vtmb/jobs/anarchs/bouncer.dm rename to code/modules/vtmb/jobs/anarch/bouncer.dm index 3adc068257..97c9a5490b 100644 --- a/code/modules/vtmb/jobs/anarchs/bouncer.dm +++ b/code/modules/vtmb/jobs/anarch/bouncer.dm @@ -1,6 +1,6 @@ -/datum/job/vamp/bruiser - title = "Bruiser" +/datum/job/vamp/anarch/bruiser + title = JOB_BRUISER department_head = list("Baron") faction = "Vampire" total_positions = 7 @@ -26,9 +26,13 @@ minimal_masquerade = 2 experience_addition = 15 +AddTimelock(/datum/job/vamp/anarch/bruiser, list( + JOB_LIVING_ROLES = 2 HOURS, +)) + /datum/outfit/job/bruiser name = "Bruiser" - jobtype = /datum/job/vamp/bruiser + jobtype = /datum/job/vamp/anarch/bruiser id = /obj/item/card/id/anarch uniform = /obj/item/clothing/under/vampire/bouncer diff --git a/code/modules/vtmb/jobs/anarchs/emissary.dm b/code/modules/vtmb/jobs/anarch/emissary.dm similarity index 90% rename from code/modules/vtmb/jobs/anarchs/emissary.dm rename to code/modules/vtmb/jobs/anarch/emissary.dm index fe54a2a4f1..158c2677c0 100644 --- a/code/modules/vtmb/jobs/anarchs/emissary.dm +++ b/code/modules/vtmb/jobs/anarch/emissary.dm @@ -1,6 +1,6 @@ -/datum/job/vamp/emissary - title = "Emissary" +/datum/job/vamp/anarch/emissary + title = JOB_EMISSARY department_head = list("Baron") faction = "Vampire" total_positions = 1 @@ -26,9 +26,13 @@ minimal_masquerade = 2 experience_addition = 15 +AddTimelock(/datum/job/vamp/anarch/emissary, list( + JOB_LIVING_ROLES = 2 HOURS, +)) + /datum/outfit/job/emissary name = "emissary" - jobtype = /datum/job/vamp/emissary + jobtype = /datum/job/vamp/anarch/emissary id = /obj/item/card/id/anarch uniform = /obj/item/clothing/under/vampire/bouncer diff --git a/code/modules/vtmb/jobs/anarchs/sweeper.dm b/code/modules/vtmb/jobs/anarch/sweeper.dm similarity index 90% rename from code/modules/vtmb/jobs/anarchs/sweeper.dm rename to code/modules/vtmb/jobs/anarch/sweeper.dm index a21c1da98c..850ece117e 100644 --- a/code/modules/vtmb/jobs/anarchs/sweeper.dm +++ b/code/modules/vtmb/jobs/anarch/sweeper.dm @@ -1,6 +1,6 @@ -/datum/job/vamp/sweeper - title = "Sweeper" +/datum/job/vamp/anarch/sweeper + title = JOB_SWEEPER department_head = list("Baron") faction = "Vampire" total_positions = 3 @@ -26,9 +26,13 @@ minimal_masquerade = 2 experience_addition = 15 +AddTimelock(/datum/job/vamp/anarch/sweeper, list( + JOB_LIVING_ROLES = 2 HOURS, +)) + /datum/outfit/job/sweeper name = "Sweeper" - jobtype = /datum/job/vamp/sweeper + jobtype = /datum/job/vamp/anarch/sweeper id = /obj/item/card/id/anarch uniform = /obj/item/clothing/under/vampire/bouncer diff --git a/code/modules/vtmb/jobs/caitiff.dm b/code/modules/vtmb/jobs/antags/caitiff.dm similarity index 100% rename from code/modules/vtmb/jobs/caitiff.dm rename to code/modules/vtmb/jobs/antags/caitiff.dm diff --git a/code/modules/vtmb/jobs/hunter.dm b/code/modules/vtmb/jobs/antags/hunter.dm similarity index 100% rename from code/modules/vtmb/jobs/hunter.dm rename to code/modules/vtmb/jobs/antags/hunter.dm diff --git a/code/modules/vtmb/jobs/sabbat.dm b/code/modules/vtmb/jobs/antags/sabbat.dm similarity index 100% rename from code/modules/vtmb/jobs/sabbat.dm rename to code/modules/vtmb/jobs/antags/sabbat.dm diff --git a/code/modules/vtmb/jobs/camarilla/camarilla.dm b/code/modules/vtmb/jobs/camarilla/camarilla.dm new file mode 100644 index 0000000000..74db403b9f --- /dev/null +++ b/code/modules/vtmb/jobs/camarilla/camarilla.dm @@ -0,0 +1,28 @@ +/datum/job/vamp/camarilla + supervisors = "the Camarilla and the Traditions" + total_positions = 1 + spawn_positions = 1 + +/datum/timelock/camarilla_authorities + name = "Camarilla Authorities Roles" + +/datum/timelock/camarilla_authorities/New(name, time_required, list/roles) + . = ..() + src.roles = JOB_CAMARILLA_AUTHORITIES_ROLES_LIST + +/datum/timelock/camarilla_council + name = "Camarilla Council Roles" + +/datum/timelock/camarilla_council/New(name, time_required, list/roles) + . = ..() + src.roles = JOB_CAMARILLA_COUNCIL_ROLES_LIST + + +/datum/timelock/living + name = "Living Roles" + +/datum/timelock/living/can_play(client/C) + return C.get_time_living() >= time_required + +/datum/timelock/living/get_role_requirement(client/C) + return time_required - C.get_time_living() diff --git a/code/modules/vtmb/jobs/hound.dm b/code/modules/vtmb/jobs/camarilla/camarilla_authorities/hound.dm similarity index 92% rename from code/modules/vtmb/jobs/hound.dm rename to code/modules/vtmb/jobs/camarilla/camarilla_authorities/hound.dm index 6e88a1d33b..9fba12018c 100644 --- a/code/modules/vtmb/jobs/hound.dm +++ b/code/modules/vtmb/jobs/camarilla/camarilla_authorities/hound.dm @@ -1,6 +1,6 @@ -/datum/job/vamp/hound - title = "Hound" +/datum/job/vamp/camarilla/hound + title = JOB_HOUND auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY department_head = list("Prince") faction = "Vampire" @@ -31,9 +31,13 @@ experience_addition = 10 allowed_bloodlines = list("True Brujah", "Daughters of Cacophony", "Brujah", "Tremere", "Ventrue", "Nosferatu", "Gangrel", "Toreador", "Malkavian", "Banu Haqim", "Giovanni", "Ministry", "Lasombra", "Gargoyle", "Kiasyd", "Cappadocian") +AddTimelock(/datum/job/vamp/camarilla/agent, list( + JOB_LIVING_ROLES = 2 HOURS, +)) + /datum/outfit/job/hound name = "Hound" - jobtype = /datum/job/vamp/hound + jobtype = /datum/job/vamp/camarilla/hound ears = /obj/item/p25radio id = /obj/item/card/id/camarilla diff --git a/code/modules/vtmb/jobs/prince.dm b/code/modules/vtmb/jobs/camarilla/camarilla_authorities/prince.dm similarity index 92% rename from code/modules/vtmb/jobs/prince.dm rename to code/modules/vtmb/jobs/camarilla/camarilla_authorities/prince.dm index 847d1fe7e5..aad794a577 100644 --- a/code/modules/vtmb/jobs/prince.dm +++ b/code/modules/vtmb/jobs/camarilla/camarilla_authorities/prince.dm @@ -1,5 +1,5 @@ -/datum/job/vamp/prince - title = "Prince" +/datum/job/vamp/camarilla/prince + title = JOB_PRINCE auto_deadmin_role_flags = DEADMIN_POSITION_HEAD|DEADMIN_POSITION_SECURITY department_head = list("Justicar") faction = "Vampire" @@ -42,13 +42,19 @@ v_duty = "You are the top dog of this city. You hold Praxis over San Francisco, and your word is law. Make sure the Masquerade is upheld, and your status is respected." experience_addition = 25 + +AddTimelock(/datum/job/vamp/camarilla/prince, list( + JOB_CAMARILLA_AUTHORITIES_ROLES = 15 HOURS, + JOB_LIVING_ROLES = 2 HOURS, +)) + /datum/job/vamp/prince/announce(mob/living/carbon/human/H) ..() SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, PROC_REF(minor_announce), "Prince [H.real_name] is in the city!")) /datum/outfit/job/prince name = "Prince" - jobtype = /datum/job/vamp/prince + jobtype = /datum/job/vamp/camarilla/prince ears = /obj/item/p25radio id = /obj/item/card/id/prince diff --git a/code/modules/vtmb/jobs/seneschal.dm b/code/modules/vtmb/jobs/camarilla/camarilla_authorities/seneschal.dm similarity index 95% rename from code/modules/vtmb/jobs/seneschal.dm rename to code/modules/vtmb/jobs/camarilla/camarilla_authorities/seneschal.dm index 323a4eae5a..5e48cdcd0f 100644 --- a/code/modules/vtmb/jobs/seneschal.dm +++ b/code/modules/vtmb/jobs/camarilla/camarilla_authorities/seneschal.dm @@ -1,6 +1,6 @@ -/datum/job/vamp/clerk - title = "Seneschal" +/datum/job/vamp/camarilla/clerk + title = JOB_CLERK auto_deadmin_role_flags = DEADMIN_POSITION_HEAD department_head = list("Prince") head_announce = list(RADIO_CHANNEL_SUPPLY, RADIO_CHANNEL_SERVICE) @@ -50,9 +50,14 @@ experience_addition = 15 allowed_bloodlines = list("Daughters of Cacophony", "True Brujah", "Brujah", "Tremere", "Ventrue", "Nosferatu", "Gangrel", "Toreador", "Malkavian", "Banu Haqim", "Giovanni", "Ministry", "Lasombra", "Gargoyle", "Kiasyd") + +AddTimelock(/datum/job/vamp/camarilla/clerk, list( + JOB_LIVING_ROLES = 2 HOURS, +)) + /datum/outfit/job/clerk name = "Seneschal" - jobtype = /datum/job/vamp/clerk + jobtype = /datum/job/vamp/camarilla/clerk ears = /obj/item/p25radio id = /obj/item/card/id/clerk diff --git a/code/modules/vtmb/jobs/sheriff.dm b/code/modules/vtmb/jobs/camarilla/camarilla_authorities/sheriff.dm similarity index 93% rename from code/modules/vtmb/jobs/sheriff.dm rename to code/modules/vtmb/jobs/camarilla/camarilla_authorities/sheriff.dm index dfff822ad9..aacfb3d357 100644 --- a/code/modules/vtmb/jobs/sheriff.dm +++ b/code/modules/vtmb/jobs/camarilla/camarilla_authorities/sheriff.dm @@ -1,5 +1,5 @@ -/datum/job/vamp/sheriff - title = "Sheriff" +/datum/job/vamp/camarilla/sheriff + title = JOB_SHERIFF auto_deadmin_role_flags = DEADMIN_POSITION_HEAD|DEADMIN_POSITION_SECURITY department_head = list("Prince") head_announce = list(RADIO_CHANNEL_SECURITY) @@ -44,9 +44,15 @@ v_duty = "Protect the Prince and the Masquerade. You are their sword." experience_addition = 20 +AddTimelock(/datum/job/vamp/camarilla/sheriff, list( + JOB_CAMARILLA_AUTHORITIES_ROLES = 5 HOURS, + JOB_LIVING_ROLES = 2 HOURS, +)) + + /datum/outfit/job/sheriff name = "Sheriff" - jobtype = /datum/job/vamp/sheriff + jobtype = /datum/job/vamp/camarilla/sheriff ears = /obj/item/p25radio id = /obj/item/card/id/sheriff diff --git a/code/modules/vtmb/jobs/primogen.dm b/code/modules/vtmb/jobs/camarilla/camarilla_primogen_council/primogen.dm similarity index 86% rename from code/modules/vtmb/jobs/primogen.dm rename to code/modules/vtmb/jobs/camarilla/camarilla_primogen_council/primogen.dm index 2098f945c1..3184ca8a3c 100644 --- a/code/modules/vtmb/jobs/primogen.dm +++ b/code/modules/vtmb/jobs/camarilla/camarilla_primogen_council/primogen.dm @@ -1,5 +1,5 @@ -/datum/job/vamp/primogen_malkavian - title = "Primogen Malkavian" +/datum/job/vamp/camarilla/primogen_malkavian + title = JOB_MALKAVIAN department_head = list("Justicar") faction = "Vampire" total_positions = 1 @@ -26,9 +26,15 @@ my_contact_is_important = TRUE known_contacts = list("Prince") +AddTimelock(/datum/job/vamp/camarilla/primogen_malkavian, list( + JOB_CAMARILLA_AUTHORITIES_ROLES = 5 HOURS, + JOB_LIVING_ROLES = 2 HOURS, +)) + + /datum/outfit/job/malkav name = "Primogen Malkavian" - jobtype = /datum/job/vamp/primogen_malkavian + jobtype = /datum/job/vamp/camarilla/primogen_malkavian ears = /obj/item/p25radio id = /obj/item/card/id/primogen @@ -49,8 +55,8 @@ uniform = /obj/item/clothing/under/vampire/primogen_malkavian/female shoes = /obj/item/clothing/shoes/vampire/heels -/datum/job/vamp/primogen_nosferatu - title = "Primogen Nosferatu" +/datum/job/vamp/camarilla/primogen_nosferatu + title = JOB_NOSFERATU department_head = list("Justicar") faction = "Vampire" total_positions = 1 @@ -77,9 +83,14 @@ my_contact_is_important = TRUE known_contacts = list("Prince") +AddTimelock(/datum/job/vamp/camarilla/primogen_nosferatu, list( + JOB_CAMARILLA_AUTHORITIES_ROLES = 5 HOURS, + JOB_LIVING_ROLES = 2 HOURS, +)) + /datum/outfit/job/nosferatu name = "Primogen Nosferatu" - jobtype = /datum/job/vamp/primogen_nosferatu + jobtype = /datum/job/vamp/camarilla/primogen_nosferatu id = /obj/item/card/id/primogen mask = /obj/item/clothing/mask/vampire/shemagh @@ -96,8 +107,8 @@ if(H.gender == FEMALE) shoes = /obj/item/clothing/shoes/vampire/heels -/datum/job/vamp/primogen_ventrue - title = "Primogen Ventrue" +/datum/job/vamp/camarilla/primogen_ventrue + title = JOB_VENTRUE department_head = list("Justicar") faction = "Vampire" total_positions = 1 @@ -126,7 +137,7 @@ /datum/outfit/job/ventrue name = "Primogen Ventrue" - jobtype = /datum/job/vamp/primogen_ventrue + jobtype = /datum/job/vamp/camarilla/primogen_ventrue id = /obj/item/card/id/primogen glasses = /obj/item/clothing/glasses/vampire/sun @@ -142,8 +153,14 @@ if(H.gender == FEMALE) shoes = /obj/item/clothing/shoes/vampire/heels -/datum/job/vamp/primogen_toreador - title = "Primogen Toreador" + +AddTimelock(/datum/job/vamp/camarilla/primogen_ventrue, list( + JOB_CAMARILLA_AUTHORITIES_ROLES = 5 HOURS, + JOB_LIVING_ROLES = 2 HOURS, +)) + +/datum/job/vamp/camarilla/primogen_toreador + title = JOB_TOREADOR department_head = list("Justicar") faction = "Vampire" total_positions = 1 @@ -170,9 +187,14 @@ my_contact_is_important = TRUE known_contacts = list("Prince") +AddTimelock(/datum/job/vamp/camarilla/primogen_toreador, list( + JOB_CAMARILLA_AUTHORITIES_ROLES = 5 HOURS, + JOB_LIVING_ROLES = 2 HOURS, +)) + /datum/outfit/job/toreador name = "Primogen Toreador" - jobtype = /datum/job/vamp/primogen_toreador + jobtype = /datum/job/vamp/camarilla/primogen_toreador id = /obj/item/card/id/primogen glasses = /obj/item/clothing/glasses/vampire/sun @@ -190,8 +212,8 @@ shoes = /obj/item/clothing/shoes/vampire/heels/red -/datum/job/vamp/primogen_brujah - title = "Primogen Brujah" +/datum/job/vamp/camarilla/primogen_brujah + title = JOB_BRUJAH department_head = list("Justicar") faction = "Vampire" total_positions = 1 @@ -218,9 +240,15 @@ my_contact_is_important = TRUE known_contacts = list("Prince") + +AddTimelock(/datum/job/vamp/camarilla/primogen_brujah, list( + JOB_CAMARILLA_AUTHORITIES_ROLES = 5 HOURS, + JOB_LIVING_ROLES = 2 HOURS, +)) + /datum/outfit/job/brujah name = "Primogen Brujah" - jobtype = /datum/job/vamp/primogen_brujah + jobtype = /datum/job/vamp/camarilla/primogen_brujah id = /obj/item/card/id/primogen glasses = /obj/item/clothing/glasses/vampire/yellow @@ -230,3 +258,4 @@ l_pocket = /obj/item/vamp/phone/brujah r_pocket = /obj/item/cockclock backpack_contents = list(/obj/item/vamp/keys/brujah/primogen=1, /obj/item/melee/vampirearms/eguitar=1, /obj/item/passport=1, /obj/item/flashlight=1, /obj/item/vamp/creditcard/elder=1, /obj/item/card/id/whip, /obj/item/card/id/steward, /obj/item/card/id/myrmidon) + diff --git a/code/modules/vtmb/jobs/church/church.dm b/code/modules/vtmb/jobs/church/church.dm new file mode 100644 index 0000000000..ab5cf754b5 --- /dev/null +++ b/code/modules/vtmb/jobs/church/church.dm @@ -0,0 +1,21 @@ +/datum/job/vamp/church + supervisors = "God" + total_positions = 1 + spawn_positions = 1 + +/datum/timelock/church + name = "Church Roles" + +/datum/timelock/church/New(name, time_required, list/roles) + . = ..() + src.roles = JOB_CHURCH_ROLES_LIST + + +/datum/timelock/living + name = "Living Roles" + +/datum/timelock/living/can_play(client/C) + return C.get_time_living() >= time_required + +/datum/timelock/living/get_role_requirement(client/C) + return time_required - C.get_time_living() diff --git a/code/modules/vtmb/jobs/priest.dm b/code/modules/vtmb/jobs/church/priest.dm similarity index 93% rename from code/modules/vtmb/jobs/priest.dm rename to code/modules/vtmb/jobs/church/priest.dm index 8c6abac2a1..f1c1430a73 100644 --- a/code/modules/vtmb/jobs/priest.dm +++ b/code/modules/vtmb/jobs/church/priest.dm @@ -1,6 +1,6 @@ -/datum/job/vamp/priest - title = "Priest" +/datum/job/vamp/church/priest + title = JOB_PRIEST department_head = list("Bishop") faction = "Vampire" total_positions = 2 @@ -25,9 +25,14 @@ minimal_masquerade = 0 my_contact_is_important = FALSE +AddTimelock(/datum/job/vamp/church/priest, list( + JOB_LIVING_ROLES = 2 HOURS, +)) + + /datum/outfit/job/priest name = "Priest" - jobtype = /datum/job/vamp/priest + jobtype = /datum/job/vamp/church/priest uniform = /obj/item/clothing/under/vampire/graveyard shoes = /obj/item/clothing/shoes/vampire/jackboots diff --git a/code/modules/vtmb/jobs/city_services/city_services.dm b/code/modules/vtmb/jobs/city_services/city_services.dm new file mode 100644 index 0000000000..466c6808e6 --- /dev/null +++ b/code/modules/vtmb/jobs/city_services/city_services.dm @@ -0,0 +1,21 @@ +/datum/job/vamp/city_services + supervisors = "Your Boss" + total_positions = 1 + spawn_positions = 1 + +/datum/timelock/city_services + name = "City Services Roles" + +/datum/timelock/city_services/New(name, time_required, list/roles) + . = ..() + src.roles = JOB_CITY_SERVICES_ROLES_LIST + + +/datum/timelock/living + name = "Living Roles" + +/datum/timelock/living/can_play(client/C) + return C.get_time_living() >= time_required + +/datum/timelock/living/get_role_requirement(client/C) + return time_required - C.get_time_living() diff --git a/code/modules/vtmb/jobs/graveyard_keeper.dm b/code/modules/vtmb/jobs/city_services/graveyard_keeper.dm similarity index 91% rename from code/modules/vtmb/jobs/graveyard_keeper.dm rename to code/modules/vtmb/jobs/city_services/graveyard_keeper.dm index 433bdfa166..fa7f08a16d 100644 --- a/code/modules/vtmb/jobs/graveyard_keeper.dm +++ b/code/modules/vtmb/jobs/city_services/graveyard_keeper.dm @@ -1,6 +1,6 @@ -/datum/job/vamp/graveyard - title = "Graveyard Keeper" +/datum/job/vamp/city_services/graveyard + title = JOB_GRAVEYARD department_head = list("Seneschal") faction = "Vampire" total_positions = 6 @@ -26,9 +26,13 @@ allowed_species = list("Vampire", "Ghoul", "Kuei-Jin") allowed_bloodlines = list("True Brujah", "Daughters of Cacophony", "Salubri", "Baali", "Brujah", "Tremere", "Ventrue", "Nosferatu", "Gangrel", "Toreador", "Malkavian", "Banu Haqim", "Giovanni", "Ministry", "Tzimisce", "Lasombra", "Caitiff", "Cappadocian") +AddTimelock(/datum/job/vamp/city_services/graveyard, list( + JOB_LIVING_ROLES = 2 HOURS, +)) + /datum/outfit/job/graveyard name = "Graveyard Keeper" - jobtype = /datum/job/vamp/graveyard + jobtype = /datum/job/vamp/city_services/graveyard id = /obj/item/card/id/graveyard shoes = /obj/item/clothing/shoes/vampire/jackboots diff --git a/code/modules/vtmb/jobs/janitor.dm b/code/modules/vtmb/jobs/city_services/janitor.dm similarity index 93% rename from code/modules/vtmb/jobs/janitor.dm rename to code/modules/vtmb/jobs/city_services/janitor.dm index e546ccc2c0..2859894019 100644 --- a/code/modules/vtmb/jobs/janitor.dm +++ b/code/modules/vtmb/jobs/city_services/janitor.dm @@ -1,6 +1,6 @@ -/datum/job/vamp/vjanitor - title = "Street Janitor" +/datum/job/vamp/city_services/vjanitor + title = JOB_STREETJAN department_head = list("Prince") faction = "Vampire" total_positions = 6 @@ -27,7 +27,7 @@ /datum/outfit/job/vjanitor name = "Street Janitor" - jobtype = /datum/job/vamp/vjanitor + jobtype = /datum/job/vamp/city_services/vjanitor id = /obj/item/card/id/cleaning uniform = /obj/item/clothing/under/vampire/janitor diff --git a/code/modules/vtmb/jobs/stripper.dm b/code/modules/vtmb/jobs/city_services/stripper.dm similarity index 93% rename from code/modules/vtmb/jobs/stripper.dm rename to code/modules/vtmb/jobs/city_services/stripper.dm index df8dc9ea4e..41add37aaf 100644 --- a/code/modules/vtmb/jobs/stripper.dm +++ b/code/modules/vtmb/jobs/city_services/stripper.dm @@ -1,6 +1,6 @@ -/datum/job/vamp/strip - title = "Stripper" +/datum/job/vamp/city_services/strip + title = JOB_STRIP faction = "Vampire" total_positions = 4 spawn_positions = 4 @@ -25,7 +25,7 @@ /datum/outfit/job/strip name = "Stripper" - jobtype = /datum/job/vamp/citizen + jobtype = /datum/job/vamp/city_services/strip l_pocket = /obj/item/vamp/phone r_pocket = /obj/item/vamp/keys/strip id = /obj/item/cockclock diff --git a/code/modules/vtmb/jobs/taxi.dm b/code/modules/vtmb/jobs/city_services/taxi.dm similarity index 95% rename from code/modules/vtmb/jobs/taxi.dm rename to code/modules/vtmb/jobs/city_services/taxi.dm index 48c73beaad..af84bf09f9 100644 --- a/code/modules/vtmb/jobs/taxi.dm +++ b/code/modules/vtmb/jobs/city_services/taxi.dm @@ -1,5 +1,5 @@ -/datum/job/vamp/taxi - title = "Taxi Driver" +/datum/job/vamp/city_services/taxi + title = JOB_TAXI department_head = list("Justicar") faction = "Vampire" total_positions = 3 @@ -30,7 +30,7 @@ /datum/outfit/job/taxi name = "Taxi Driver" - jobtype = /datum/job/vamp/taxi + jobtype = /datum/job/vamp/city_services/taxi id = /obj/item/cockclock glasses = /obj/item/clothing/glasses/vampire/sun diff --git a/code/modules/vtmb/jobs/clinic/clinic.dm b/code/modules/vtmb/jobs/clinic/clinic.dm new file mode 100644 index 0000000000..f26aca18b7 --- /dev/null +++ b/code/modules/vtmb/jobs/clinic/clinic.dm @@ -0,0 +1,21 @@ +/datum/job/vamp/clinic + supervisors = "Your Boss" + total_positions = 1 + spawn_positions = 1 + +/datum/timelock/clinic + name = "Clinic Roles" + +/datum/timelock/clinic/New(name, time_required, list/roles) + . = ..() + src.roles = JOB_CLINIC_ROLES_LIST + + +/datum/timelock/living + name = "Living Roles" + +/datum/timelock/living/can_play(client/C) + return C.get_time_living() >= time_required + +/datum/timelock/living/get_role_requirement(client/C) + return time_required - C.get_time_living() diff --git a/code/modules/vtmb/jobs/doctor.dm b/code/modules/vtmb/jobs/clinic/doctor.dm similarity index 91% rename from code/modules/vtmb/jobs/doctor.dm rename to code/modules/vtmb/jobs/clinic/doctor.dm index e872a8f052..ed3c9adc81 100644 --- a/code/modules/vtmb/jobs/doctor.dm +++ b/code/modules/vtmb/jobs/clinic/doctor.dm @@ -1,6 +1,6 @@ -/datum/job/vamp/vdoctor - title = "Doctor" +/datum/job/vamp/clinic/vdoctor + title = JOB_DOCTOR department_head = list("Clinic Director") faction = "Vampire" total_positions = 4 @@ -29,9 +29,13 @@ allowed_bloodlines = list("Daughters of Cacophony", "Salubri", "Baali", "Brujah", "Tremere", "Ventrue", "Nosferatu", "Gangrel", "Toreador", "Malkavian", "Banu Haqim", "Giovanni", "Ministry", "Tzimisce", "Lasombra", "Caitiff", "Kiasyd") known_contacts = list("Clinic Director") +AddTimelock(/datum/job/vamp/clinic/vdoctor, list( + JOB_LIVING_ROLES = 2 HOURS, +)) + /datum/outfit/job/vdoctor name = "Doctor" - jobtype = /datum/job/vamp/vdoctor + jobtype = /datum/job/vamp/clinic/vdoctor ears = /obj/item/p25radio id = /obj/item/card/id/clinic @@ -54,7 +58,7 @@ icon_state = "Doctor" -/datum/job/vamp/vdirector +/datum/job/vamp/clinic/vdirector title = "Clinic Director" department_head = list("Seneschal") faction = "Vampire" @@ -83,9 +87,14 @@ experience_addition = 15 allowed_bloodlines = list("Daughters of Cacophony", "Salubri", "Baali", "Brujah", "Tremere", "Ventrue", "Nosferatu", "Gangrel", "Toreador", "Malkavian", "Banu Haqim", "Giovanni", "Ministry", "Tzimisce", "Lasombra", "Caitiff", "Kiasyd") +AddTimelock(/datum/job/vamp/clinic/vdirector, list( + JOB_LIVING_ROLES = 2 HOURS, + JOB_CLINIC_ROLES = 10 HOURS, +)) + /datum/outfit/job/vdirector - name = "Clinic Director" - jobtype = /datum/job/vamp/vdirector + name = JOB_CLINIC_DIRECTOR + jobtype = /datum/job/vamp/clinic/vdirector ears = /obj/item/p25radio id = /obj/item/card/id/clinic/director diff --git a/code/modules/vtmb/jobs/gangs/gangs.dm b/code/modules/vtmb/jobs/gangs/gangs.dm new file mode 100644 index 0000000000..571a659491 --- /dev/null +++ b/code/modules/vtmb/jobs/gangs/gangs.dm @@ -0,0 +1,21 @@ +/datum/job/vamp/gangs + supervisors = "Your Gang" + total_positions = 1 + spawn_positions = 1 + +/datum/timelock/gangs + name = "Gangs Roles" + +/datum/timelock/gangs/New(name, time_required, list/roles) + . = ..() + src.roles = JOB_GANG_ROLES_LIST + + +/datum/timelock/living + name = "Living Roles" + +/datum/timelock/living/can_play(client/C) + return C.get_time_living() >= time_required + +/datum/timelock/living/get_role_requirement(client/C) + return time_required - C.get_time_living() diff --git a/code/modules/vtmb/jobs/triad.dm b/code/modules/vtmb/jobs/gangs/triad.dm similarity index 90% rename from code/modules/vtmb/jobs/triad.dm rename to code/modules/vtmb/jobs/gangs/triad.dm index b20d111c8a..a63aa35eb2 100644 --- a/code/modules/vtmb/jobs/triad.dm +++ b/code/modules/vtmb/jobs/gangs/triad.dm @@ -1,6 +1,6 @@ -/datum/job/vamp/triad_soldier - title = "Triad Soldier" +/datum/job/vamp/gangs/triad_soldier + title = JOB_TRIAD_GANGSTER department_head = list("Triad Leadership") faction = "Vampire" total_positions = 8 @@ -25,6 +25,10 @@ minimal_masquerade = 0 my_contact_is_important = FALSE +AddTimelock(/datum/job/vamp/gangs/triad_soldier, list( + JOB_LIVING_ROLES = 2 HOURS, +)) + /datum/outfit/job/triad_soldier/pre_equip(mob/living/carbon/human/H) ..() H.grant_language(/datum/language/cantonese) @@ -34,7 +38,7 @@ /datum/outfit/job/triad_soldier name = "Triad Soldier" - jobtype = /datum/job/vamp/triad_soldier + jobtype = /datum/job/vamp/gangs/triad_soldier uniform = /obj/item/clothing/under/vampire/suit shoes = /obj/item/clothing/shoes/vampire/jackboots // suit = /obj/item/clothing/suit/vampire/vest diff --git a/code/modules/vtmb/jobs/giovanni.dm b/code/modules/vtmb/jobs/giovanni_family/giovanni.dm similarity index 87% rename from code/modules/vtmb/jobs/giovanni.dm rename to code/modules/vtmb/jobs/giovanni_family/giovanni.dm index edde10c575..b916b288e4 100644 --- a/code/modules/vtmb/jobs/giovanni.dm +++ b/code/modules/vtmb/jobs/giovanni_family/giovanni.dm @@ -1,5 +1,5 @@ -/datum/job/vamp/giovannielder - title = "Capo" +/datum/job/vamp/giovanni_family/giovannielder + title = JOB_GIOVANNI_CAPO department_head = list("Uncle Augie") faction = "Vampire" total_positions = 1 @@ -24,9 +24,14 @@ allowed_species = list("Vampire") allowed_bloodlines = list("Giovanni", "Cappadocian") +AddTimelock(/datum/job/vamp/giovanni_family/giovannielder, list( + JOB_GIOVANNI_ROLES = 10 HOURS, + JOB_LIVING_ROLES = 2 HOURS, +)) + /datum/outfit/job/giovannielder name = "Capo" - jobtype = /datum/job/vamp/giovannielder + jobtype = /datum/job/vamp/giovanni_family/giovannielder id = /obj/item/cockclock glasses = /obj/item/clothing/glasses/vampire/sun @@ -46,8 +51,8 @@ /obj/effect/landmark/start/giovannielder name = "Capo" -/datum/job/vamp/giovanni - title = "La Squadra" +/datum/job/vamp/giovanni_family/giovanni + title = JOB_GIOVANNI_SQUADRA department_head = list("Capo") faction = "Vampire" total_positions = 10 @@ -70,9 +75,13 @@ allowed_species = list("Vampire") allowed_bloodlines = list("Giovanni", "Cappadocian") +AddTimelock(/datum/job/vamp/giovanni_family/giovanni, list( + JOB_LIVING_ROLES = 2 HOURS, +)) + /datum/outfit/job/giovanni name = "La Squadra" - jobtype = /datum/job/vamp/giovanni + jobtype = /datum/job/vamp/giovanni_family/giovanni id = /obj/item/cockclock glasses = /obj/item/clothing/glasses/vampire/sun @@ -92,8 +101,8 @@ /obj/effect/landmark/start/giovanni name = "La Squadra" -/datum/job/vamp/giovannimafia - title = "La Famiglia" +/datum/job/vamp/giovanni_family/giovannimafia + title = JOB_GIOVANNI_FAMIGLIA department_head = list("Capo") faction = "Vampire" total_positions = 10 @@ -118,9 +127,13 @@ experience_addition = 10 +AddTimelock(/datum/job/vamp/giovanni_family/giovannimafia, list( + JOB_LIVING_ROLES = 2 HOURS, +)) + /datum/outfit/job/giovannimafia name = "La Famiglia" - jobtype = /datum/job/vamp/giovannimafia + jobtype = /datum/job/vamp/giovanni_family/giovannimafia id = /obj/item/cockclock glasses = /obj/item/clothing/glasses/vampire/sun uniform = /obj/item/clothing/under/vampire/suit diff --git a/code/modules/vtmb/jobs/giovanni_family/giovanni_family.dm b/code/modules/vtmb/jobs/giovanni_family/giovanni_family.dm new file mode 100644 index 0000000000..9c214f4ac9 --- /dev/null +++ b/code/modules/vtmb/jobs/giovanni_family/giovanni_family.dm @@ -0,0 +1,21 @@ +/datum/job/vamp/giovanni_family + supervisors = "the Family and the Traditions" + total_positions = 1 + spawn_positions = 1 + +/datum/timelock/giovanni_family + name = "Giovanni Family Roles" + +/datum/timelock/giovanni_family/New(name, time_required, list/roles) + . = ..() + src.roles = JOB_GIOVANNI_ROLES_LIST + + +/datum/timelock/living + name = "Living Roles" + +/datum/timelock/living/can_play(client/C) + return C.get_time_living() >= time_required + +/datum/timelock/living/get_role_requirement(client/C) + return time_required - C.get_time_living() diff --git a/code/modules/vtmb/jobs/fbi.dm b/code/modules/vtmb/jobs/national_security/fbi.dm similarity index 88% rename from code/modules/vtmb/jobs/fbi.dm rename to code/modules/vtmb/jobs/national_security/fbi.dm index 41f21b6dc0..ef498b5822 100644 --- a/code/modules/vtmb/jobs/fbi.dm +++ b/code/modules/vtmb/jobs/national_security/fbi.dm @@ -1,6 +1,6 @@ -/datum/job/vamp/fbi - title = "Federal Investigator" +/datum/job/vamp/national_security/fbi + title = JOB_FBI department_head = list("Federal Bureau of Investigation") faction = "Vampire" total_positions = 2 @@ -25,9 +25,14 @@ my_contact_is_important = FALSE known_contacts = list("Police Chief") +AddTimelock(/datum/job/vamp/national_security/fbi, list( + JOB_POLICE_ROLES = 15 HOURS, + JOB_LIVING_ROLES = 2 HOURS, +)) + /datum/outfit/job/fbi name = "Federal Investigator" - jobtype = /datum/job/vamp/fbi + jobtype = /datum/job/vamp/national_security/fbi ears = /obj/item/p25radio/police/government uniform = /obj/item/clothing/under/vampire/office diff --git a/code/modules/vtmb/jobs/national_guard.dm b/code/modules/vtmb/jobs/national_security/national_guard.dm similarity index 100% rename from code/modules/vtmb/jobs/national_guard.dm rename to code/modules/vtmb/jobs/national_security/national_guard.dm diff --git a/code/modules/vtmb/jobs/national_security/national_security.dm b/code/modules/vtmb/jobs/national_security/national_security.dm new file mode 100644 index 0000000000..ce0dbaf6b7 --- /dev/null +++ b/code/modules/vtmb/jobs/national_security/national_security.dm @@ -0,0 +1,21 @@ +/datum/job/vamp/national_security + supervisors = "Your Country and respective supervisors" + total_positions = 1 + spawn_positions = 1 + +/datum/timelock/national_security + name = "National Security Roles" + +/datum/timelock/national_security/New(name, time_required, list/roles) + . = ..() + src.roles = JOB_NATIONAL_SECURITY_ROLES_LIST + + +/datum/timelock/living + name = "Living Roles" + +/datum/timelock/living/can_play(client/C) + return C.get_time_living() >= time_required + +/datum/timelock/living/get_role_requirement(client/C) + return time_required - C.get_time_living() diff --git a/code/modules/vtmb/jobs/swat.dm b/code/modules/vtmb/jobs/national_security/swat.dm similarity index 100% rename from code/modules/vtmb/jobs/swat.dm rename to code/modules/vtmb/jobs/national_security/swat.dm diff --git a/code/modules/vtmb/jobs/dispatcher.dm b/code/modules/vtmb/jobs/police_force/dispatcher.dm similarity index 82% rename from code/modules/vtmb/jobs/dispatcher.dm rename to code/modules/vtmb/jobs/police_force/dispatcher.dm index b91c13acd0..e61e0da0c1 100644 --- a/code/modules/vtmb/jobs/dispatcher.dm +++ b/code/modules/vtmb/jobs/police_force/dispatcher.dm @@ -1,6 +1,6 @@ -/datum/job/vamp/dispatcher - title = "Emergency Dispatcher" +/datum/job/vamp/police_force/dispatcher + title = JOB_DISPATCHER faction = "Vampire" total_positions = 2 spawn_positions = 2 @@ -20,10 +20,12 @@ minimal_masquerade = 0 known_contacts = list("Police Chief") - +AddTimelock(/datum/job/vamp/police_force/dispatcher, list( + JOB_LIVING_ROLES = 2 HOURS, +)) /datum/outfit/job/dispatcher name = "Dispatcher" - jobtype = /datum/job/vamp/dispatcher + jobtype = /datum/job/vamp/police_force/dispatcher uniform = /obj/item/clothing/under/vampire/office ears = /obj/item/p25radio/police/dispatch shoes = /obj/item/clothing/shoes/vampire/businessblack diff --git a/code/modules/vtmb/jobs/police.dm b/code/modules/vtmb/jobs/police_force/police.dm similarity index 87% rename from code/modules/vtmb/jobs/police.dm rename to code/modules/vtmb/jobs/police_force/police.dm index fe1f9f0013..58e9ef6fe9 100644 --- a/code/modules/vtmb/jobs/police.dm +++ b/code/modules/vtmb/jobs/police_force/police.dm @@ -1,6 +1,6 @@ -/datum/job/vamp/police_officer - title = "Police Officer" +/datum/job/vamp/police_force/police_officer + title = JOB_POLICE department_head = list("Police Department") faction = "Vampire" total_positions = 5 @@ -25,9 +25,13 @@ my_contact_is_important = FALSE known_contacts = list("Police Chief") +AddTimelock(/datum/job/vamp/police_force/police_officer, list( + JOB_LIVING_ROLES = 2 HOURS, +)) + /datum/outfit/job/police_officer name = "Police Officer" - jobtype = /datum/job/vamp/police_officer + jobtype = /datum/job/vamp/police_force/police_officer ears = /obj/item/p25radio/police uniform = /obj/item/clothing/under/vampire/police @@ -40,8 +44,8 @@ r_pocket = /obj/item/vamp/keys/police backpack_contents = list(/obj/item/passport=1, /obj/item/implant/radio=1, /obj/item/vamp/creditcard=1, /obj/item/ammo_box/vampire/c9mm = 1, /obj/item/restraints/handcuffs = 1,/obj/item/melee/classic_baton/vampire = 1, /obj/item/storage/firstaid/ifak = 1) -/datum/job/vamp/police_sergeant - title = "Police Sergeant" +/datum/job/vamp/police_force/police_sergeant + title = JOB_POLICE_SERGEANT department_head = list("Police Department") faction = "Vampire" total_positions = 2 @@ -65,9 +69,14 @@ my_contact_is_important = FALSE known_contacts = list("Police Chief") +AddTimelock(/datum/job/vamp/police_force/police_sergeant, list( + JOB_POLICE_ROLES = 5 HOURS, + JOB_LIVING_ROLES = 2 HOURS, +)) + /datum/outfit/job/police_sergeant name = "Police Sergeant" - jobtype = /datum/job/vamp/police_sergeant + jobtype = /datum/job/vamp/police_force/police_sergeant ears = /obj/item/p25radio/police/supervisor uniform = /obj/item/clothing/under/vampire/police @@ -80,8 +89,8 @@ r_pocket = /obj/item/vamp/keys/police/secure backpack_contents = list(/obj/item/passport=1, /obj/item/implant/radio=1, /obj/item/vamp/creditcard=1, /obj/item/ammo_box/vampire/c9mm = 1, /obj/item/restraints/handcuffs = 1,/obj/item/melee/classic_baton/vampire = 1, /obj/item/storage/firstaid/ifak = 1) -/datum/job/vamp/police_chief - title = "Police Chief" +/datum/job/vamp/police_force/police_chief + title = JOB_POLICE_CHIEF department_head = list("Police Department") faction = "Vampire" total_positions = 1 @@ -105,9 +114,14 @@ my_contact_is_important = FALSE // known_contacts = list("Investigator") +AddTimelock(/datum/job/vamp/police_force/police_chief, list( + JOB_POLICE_ROLES = 10 HOURS, + JOB_LIVING_ROLES = 2 HOURS, +)) + /datum/outfit/job/police_chief name = "Police Chief" - jobtype = /datum/job/vamp/police_chief + jobtype = /datum/job/vamp/police_force/police_chief ears = /obj/item/p25radio/police/command uniform = /obj/item/clothing/under/vampire/police diff --git a/code/modules/vtmb/jobs/police_force/police_force.dm b/code/modules/vtmb/jobs/police_force/police_force.dm new file mode 100644 index 0000000000..c8a5826f6f --- /dev/null +++ b/code/modules/vtmb/jobs/police_force/police_force.dm @@ -0,0 +1,21 @@ +/datum/job/vamp/police_force + supervisors = "the SFPD" + total_positions = 1 + spawn_positions = 1 + +/datum/timelock/police_force + name = "Police Force Roles" + +/datum/timelock/police_force/New(name, time_required, list/roles) + . = ..() + src.roles = JOB_POLICE_ROLES_LIST + + +/datum/timelock/living + name = "Living Roles" + +/datum/timelock/living/can_play(client/C) + return C.get_time_living() >= time_required + +/datum/timelock/living/get_role_requirement(client/C) + return time_required - C.get_time_living() diff --git a/code/modules/vtmb/jobs/archivist.dm b/code/modules/vtmb/jobs/tremere/archivist.dm similarity index 90% rename from code/modules/vtmb/jobs/archivist.dm rename to code/modules/vtmb/jobs/tremere/archivist.dm index 901bf286f7..c6ed5d6b57 100644 --- a/code/modules/vtmb/jobs/archivist.dm +++ b/code/modules/vtmb/jobs/tremere/archivist.dm @@ -1,6 +1,6 @@ -/datum/job/vamp/archivist - title = "Chantry Archivist" +/datum/job/vamp/tremere/archivist + title = JOB_ARCHIVIST department_head = list("Prince") faction = "Vampire" total_positions = 4 @@ -25,9 +25,13 @@ known_contacts = list("Tremere Regent") experience_addition = 15 +AddTimelock(/datum/job/vamp/tremere/archivist, list( + JOB_LIVING_ROLES = 2 HOURS, +)) + /datum/outfit/job/archivist name = "Archivist" - jobtype = /datum/job/vamp/archivist + jobtype = /datum/job/vamp/tremere/archivist id = /obj/item/card/id/archive glasses = /obj/item/clothing/glasses/vampire/perception diff --git a/code/modules/vtmb/jobs/regent.dm b/code/modules/vtmb/jobs/tremere/regent.dm similarity index 89% rename from code/modules/vtmb/jobs/regent.dm rename to code/modules/vtmb/jobs/tremere/regent.dm index 9323e8c5a5..9b1b3209e7 100644 --- a/code/modules/vtmb/jobs/regent.dm +++ b/code/modules/vtmb/jobs/tremere/regent.dm @@ -1,6 +1,6 @@ -/datum/job/vamp/regent - title = "Chantry Regent" +/datum/job/vamp/tremere/regent + title = JOB_REGENT department_head = list("Prince") faction = "Vampire" total_positions = 1 @@ -26,9 +26,14 @@ experience_addition = 20 known_contacts = list("Prince") +AddTimelock(/datum/job/vamp/tremere/regent, list( + JOB_TREMERE_ROLES = 10 HOURS, + JOB_LIVING_ROLES = 2 HOURS, +)) + /datum/outfit/job/regent name = "Chantry Regent" - jobtype = /datum/job/vamp/regent + jobtype = /datum/job/vamp/tremere/regent id = /obj/item/card/id/regent glasses = /obj/item/clothing/glasses/vampire/perception diff --git a/code/modules/vtmb/jobs/tremere/tremere.dm b/code/modules/vtmb/jobs/tremere/tremere.dm new file mode 100644 index 0000000000..5feca1b936 --- /dev/null +++ b/code/modules/vtmb/jobs/tremere/tremere.dm @@ -0,0 +1,21 @@ +/datum/job/vamp/tremere + supervisors = "the Pyramid" + total_positions = 1 + spawn_positions = 1 + +/datum/timelock/tremere + name = "Tremere Roles" + +/datum/timelock/tremere/New(name, time_required, list/roles) + . = ..() + src.roles = JOB_TREMERE_ROLES_LIST + + +/datum/timelock/living + name = "Living Roles" + +/datum/timelock/living/can_play(client/C) + return C.get_time_living() >= time_required + +/datum/timelock/living/get_role_requirement(client/C) + return time_required - C.get_time_living() diff --git a/code/modules/vtmb/jobs/bogatyr.dm b/code/modules/vtmb/jobs/tzimisce_mansion/bogatyr.dm similarity index 90% rename from code/modules/vtmb/jobs/bogatyr.dm rename to code/modules/vtmb/jobs/tzimisce_mansion/bogatyr.dm index 26b1dce3a4..cb1be8e47c 100644 --- a/code/modules/vtmb/jobs/bogatyr.dm +++ b/code/modules/vtmb/jobs/tzimisce_mansion/bogatyr.dm @@ -1,6 +1,6 @@ -/datum/job/vamp/bogatyr - title = "Bogatyr" +/datum/job/vamp/tzimisce_mansion_v/bogatyr + title = JOB_BOGATYR department_head = list("Voivode") faction = "Vampire" total_positions = 4 @@ -27,6 +27,10 @@ my_contact_is_important = TRUE known_contacts = list("Prince", "Baron", "Sheriff") +AddTimelock(/datum/job/vamp/tzimisce_mansion_v/bogatyr, list( + JOB_LIVING_ROLES = 2 HOURS, +)) + /datum/outfit/job/bogatyr/pre_equip(mob/living/carbon/human/H) ..() if(H.gender == FEMALE) @@ -36,7 +40,7 @@ /datum/outfit/job/bogatyr name = "Bogatyr" - jobtype = /datum/job/vamp/bogatyr + jobtype = /datum/job/vamp/tzimisce_mansion_v/bogatyr id = /obj/item/card/id/bogatyr //glasses = /obj/item/clothing/glasses/vampire/yellow uniform = /obj/item/clothing/under/vampire/bogatyr diff --git a/code/modules/vtmb/jobs/tzimisce_mansion/tzimisce_mansion_v.dm b/code/modules/vtmb/jobs/tzimisce_mansion/tzimisce_mansion_v.dm new file mode 100644 index 0000000000..daa9e39c51 --- /dev/null +++ b/code/modules/vtmb/jobs/tzimisce_mansion/tzimisce_mansion_v.dm @@ -0,0 +1,21 @@ +/datum/job/vamp/tzimisce_mansion_v + supervisors = "the Laws of Hospitality" + total_positions = 1 + spawn_positions = 1 + +/datum/timelock/tzimisce_mansion_v + name = "Tzismice Mansion Roles" + +/datum/timelock/tzimisce_mansion_v/New(name, time_required, list/roles) + . = ..() + src.roles = JOB_TZIMISCE_MANSION_ROLES_LIST + + +/datum/timelock/living + name = "Living Roles" + +/datum/timelock/living/can_play(client/C) + return C.get_time_living() >= time_required + +/datum/timelock/living/get_role_requirement(client/C) + return time_required - C.get_time_living() diff --git a/code/modules/vtmb/jobs/voivode.dm b/code/modules/vtmb/jobs/tzimisce_mansion/voivode.dm similarity index 87% rename from code/modules/vtmb/jobs/voivode.dm rename to code/modules/vtmb/jobs/tzimisce_mansion/voivode.dm index c8a67cac84..3a6899aab4 100644 --- a/code/modules/vtmb/jobs/voivode.dm +++ b/code/modules/vtmb/jobs/tzimisce_mansion/voivode.dm @@ -1,5 +1,5 @@ -/datum/job/vamp/voivode - title = "Voivode" +/datum/job/vamp/tzimisce_mansion_v/voivode + title = JOB_VOIVODE department_head = list("Eldest") faction = "Vampire" total_positions = 1 @@ -26,11 +26,14 @@ my_contact_is_important = TRUE known_contacts = list("Prince", "Baron", "Sheriff") - +AddTimelock(/datum/job/vamp/tzimisce_mansion_v/voivode, list( + JOB_TZIMISCE_MANSION_ROLES = 10 HOURS, + JOB_LIVING_ROLES = 2 HOURS, +)) /datum/outfit/job/voivode name = "Voivode" - jobtype = /datum/job/vamp/voivode + jobtype = /datum/job/vamp/tzimisce_mansion_v/voivode id = /obj/item/card/id/voivode //glasses = /obj/item/clothing/glasses/vampire/yellow uniform = /obj/item/clothing/under/vampire/voivode diff --git a/code/modules/vtmb/jobs/zadruga.dm b/code/modules/vtmb/jobs/tzimisce_mansion/zadruga.dm similarity index 86% rename from code/modules/vtmb/jobs/zadruga.dm rename to code/modules/vtmb/jobs/tzimisce_mansion/zadruga.dm index 33c179121e..82066abf9c 100644 --- a/code/modules/vtmb/jobs/zadruga.dm +++ b/code/modules/vtmb/jobs/tzimisce_mansion/zadruga.dm @@ -1,5 +1,5 @@ -/datum/job/vamp/zadruga - title = "Zadruga" +/datum/job/vamp/tzimisce_mansion_v/zadruga + title = JOB_ZADRUGA department_head = list("Voivode") faction = "Ghoul" //[Lucifernix] - Change this to vampire when I actually fix this. total_positions = 2 @@ -26,12 +26,15 @@ my_contact_is_important = FALSE known_contacts = list("Prince", "Baron", "Sheriff") - +AddTimelock(/datum/job/vamp/tzimisce_mansion_v/zadruga, list( + JOB_TZIMISCE_MANSION_ROLES = 5 HOURS, + JOB_LIVING_ROLES = 2 HOURS, +)) /datum/outfit/job/zadruga name = "zadruga" - jobtype = /datum/job/vamp/zadruga + jobtype = /datum/job/vamp/tzimisce_mansion_v/zadruga id = /obj/item/card/id/bogatyr //glasses = /obj/item/clothing/glasses/vampire/yellow uniform = /obj/item/clothing/under/vampire/bogatyr diff --git a/code/modules/vtmb/jobs/citizen.dm b/code/modules/vtmb/jobs/unaligned/citizen.dm similarity index 95% rename from code/modules/vtmb/jobs/citizen.dm rename to code/modules/vtmb/jobs/unaligned/citizen.dm index d4bb74cde5..da54b7dbbc 100644 --- a/code/modules/vtmb/jobs/citizen.dm +++ b/code/modules/vtmb/jobs/unaligned/citizen.dm @@ -1,6 +1,6 @@ -/datum/job/vamp/citizen - title = "Citizen" +/datum/job/vamp/unaligned/citizen + title = JOB_CIVILIAN faction = "Vampire" total_positions = -1 spawn_positions = -1 @@ -27,7 +27,7 @@ /datum/outfit/job/citizen name = "Citizen" - jobtype = /datum/job/vamp/citizen + jobtype = /datum/job/vamp/unaligned/citizen l_pocket = /obj/item/vamp/phone id = /obj/item/cockclock diff --git a/code/modules/vtmb/jobs/unaligned/unaligned.dm b/code/modules/vtmb/jobs/unaligned/unaligned.dm new file mode 100644 index 0000000000..9bcd79fb87 --- /dev/null +++ b/code/modules/vtmb/jobs/unaligned/unaligned.dm @@ -0,0 +1,21 @@ +/datum/job/vamp/unaligned + supervisors = "Yourself" + total_positions = 1 + spawn_positions = 1 + +/datum/timelock/unaligned + name = "Unaligned Roles" + +/datum/timelock/unaligned/New(name, time_required, list/roles) + . = ..() + src.roles = JOB_UNALIGNED_ROLES_LIST + + +/datum/timelock/living + name = "Living Roles" + +/datum/timelock/living/can_play(client/C) + return C.get_time_living() >= time_required + +/datum/timelock/living/get_role_requirement(client/C) + return time_required - C.get_time_living() diff --git a/code/modules/vtmb/jobs/dealer.dm b/code/modules/vtmb/jobs/warehouse/dealer.dm similarity index 91% rename from code/modules/vtmb/jobs/dealer.dm rename to code/modules/vtmb/jobs/warehouse/dealer.dm index 4f66ed393e..5e5c135654 100644 --- a/code/modules/vtmb/jobs/dealer.dm +++ b/code/modules/vtmb/jobs/warehouse/dealer.dm @@ -1,6 +1,6 @@ -/datum/job/vamp/dealer - title = "Dealer" +/datum/job/vamp/warehouse/dealer + title = JOB_DEALER department_head = list("Yourself") faction = "Vampire" total_positions = 1 @@ -32,9 +32,15 @@ allowed_species = list("Vampire", "Werewolf", "Kuei-Jin") experience_addition = 20 +AddTimelock(/datum/job/vamp/warehouse/dealer, list( + JOB_WAREHOUSE_ROLES = 5 HOURS, + JOB_LIVING_ROLES = 2 HOURS, +)) + + /datum/outfit/job/dealer name = "Dealer" - jobtype = /datum/job/vamp/dealer + jobtype = /datum/job/vamp/warehouse/dealer id = /obj/item/card/id/dealer uniform = /obj/item/clothing/under/vampire/suit diff --git a/code/modules/vtmb/jobs/supply_assistant.dm b/code/modules/vtmb/jobs/warehouse/supply_assistant.dm similarity index 91% rename from code/modules/vtmb/jobs/supply_assistant.dm rename to code/modules/vtmb/jobs/warehouse/supply_assistant.dm index 59fcf9955e..f9dac220b6 100644 --- a/code/modules/vtmb/jobs/supply_assistant.dm +++ b/code/modules/vtmb/jobs/warehouse/supply_assistant.dm @@ -1,6 +1,6 @@ -/datum/job/vamp/supply - title = "Supply Technician" +/datum/job/vamp/warehouse/supply + title = JOB_SUPPLY department_head = list("Dealer") faction = "Vampire" total_positions = 4 @@ -26,9 +26,13 @@ minimal_masquerade = 2 experience_addition = 15 +AddTimelock(/datum/job/vamp/warehouse/supply, list( + JOB_LIVING_ROLES = 2 HOURS, +)) + /datum/outfit/job/supply name = "Supply Technician" - jobtype = /datum/job/vamp/supply + jobtype = /datum/job/vamp/warehouse/supply id = /obj/item/card/id/supplytech uniform = /obj/item/clothing/under/vampire/supply diff --git a/code/modules/vtmb/jobs/warehouse/warehouse.dm b/code/modules/vtmb/jobs/warehouse/warehouse.dm new file mode 100644 index 0000000000..9cec8b4574 --- /dev/null +++ b/code/modules/vtmb/jobs/warehouse/warehouse.dm @@ -0,0 +1,21 @@ +/datum/job/vamp/warehouse + supervisors = "None. You are beholden only to yourself." + total_positions = 1 + spawn_positions = 1 + +/datum/timelock/warehouse + name = "Warehouse Roles" + +/datum/timelock/warehouse/New(name, time_required, list/roles) + . = ..() + src.roles = JOB_WAREHOUSE_ROLES_LIST + + +/datum/timelock/living + name = "Living Roles" + +/datum/timelock/living/can_play(client/C) + return C.get_time_living() >= time_required + +/datum/timelock/living/get_role_requirement(client/C) + return time_required - C.get_time_living() diff --git a/tgstation.dme b/tgstation.dme index 1ae420f64f..f09bd3a52f 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3366,40 +3366,53 @@ #include "code\modules\vtmb\gamemodes\masquerade.dm" #include "code\modules\vtmb\gamemodes\sarcophagus.dm" #include "code\modules\vtmb\gamemodes\subsystem.dm" -#include "code\modules\vtmb\jobs\archivist.dm" -#include "code\modules\vtmb\jobs\bogatyr.dm" -#include "code\modules\vtmb\jobs\caitiff.dm" -#include "code\modules\vtmb\jobs\citizen.dm" -#include "code\modules\vtmb\jobs\dealer.dm" -#include "code\modules\vtmb\jobs\dispatcher.dm" -#include "code\modules\vtmb\jobs\doctor.dm" -#include "code\modules\vtmb\jobs\fbi.dm" -#include "code\modules\vtmb\jobs\giovanni.dm" -#include "code\modules\vtmb\jobs\graveyard_keeper.dm" -#include "code\modules\vtmb\jobs\hound.dm" -#include "code\modules\vtmb\jobs\hunter.dm" -#include "code\modules\vtmb\jobs\janitor.dm" +#include "code\modules\vtmb\jobs\tremere\archivist.dm" +#include "code\modules\vtmb\jobs\tzimisce_mansion\bogatyr.dm" +#include "code\modules\vtmb\jobs\antags\caitiff.dm" +#include "code\modules\vtmb\jobs\unaligned\citizen.dm" +#include "code\modules\vtmb\jobs\warehouse\dealer.dm" +#include "code\modules\vtmb\jobs\police_force\dispatcher.dm" +#include "code\modules\vtmb\jobs\clinic\doctor.dm" +#include "code\modules\vtmb\jobs\national_security\fbi.dm" +#include "code\modules\vtmb\jobs\giovanni_family\giovanni.dm" +#include "code\modules\vtmb\jobs\city_services\graveyard_keeper.dm" +#include "code\modules\vtmb\jobs\antags\hunter.dm" +#include "code\modules\vtmb\jobs\city_services\janitor.dm" #include "code\modules\vtmb\jobs\jobs.dm" -#include "code\modules\vtmb\jobs\national_guard.dm" -#include "code\modules\vtmb\jobs\police.dm" -#include "code\modules\vtmb\jobs\priest.dm" -#include "code\modules\vtmb\jobs\primogen.dm" -#include "code\modules\vtmb\jobs\prince.dm" -#include "code\modules\vtmb\jobs\regent.dm" -#include "code\modules\vtmb\jobs\sabbat.dm" -#include "code\modules\vtmb\jobs\seneschal.dm" -#include "code\modules\vtmb\jobs\sheriff.dm" -#include "code\modules\vtmb\jobs\stripper.dm" -#include "code\modules\vtmb\jobs\supply_assistant.dm" -#include "code\modules\vtmb\jobs\swat.dm" -#include "code\modules\vtmb\jobs\taxi.dm" -#include "code\modules\vtmb\jobs\triad.dm" -#include "code\modules\vtmb\jobs\voivode.dm" -#include "code\modules\vtmb\jobs\zadruga.dm" -#include "code\modules\vtmb\jobs\anarchs\baron.dm" -#include "code\modules\vtmb\jobs\anarchs\bouncer.dm" -#include "code\modules\vtmb\jobs\anarchs\emissary.dm" -#include "code\modules\vtmb\jobs\anarchs\sweeper.dm" +#include "code\modules\vtmb\jobs\national_security\national_guard.dm" +#include "code\modules\vtmb\jobs\police_force\police.dm" +#include "code\modules\vtmb\jobs\church\priest.dm" +#include "code\modules\vtmb\jobs\camarilla\camarilla_primogen_council\primogen.dm" +#include "code\modules\vtmb\jobs\tremere\regent.dm" +#include "code\modules\vtmb\jobs\antags\sabbat.dm" +#include "code\modules\vtmb\jobs\city_services\stripper.dm" +#include "code\modules\vtmb\jobs\warehouse\supply_assistant.dm" +#include "code\modules\vtmb\jobs\city_services\taxi.dm" +#include "code\modules\vtmb\jobs\gangs\triad.dm" +#include "code\modules\vtmb\jobs\tzimisce_mansion\voivode.dm" +#include "code\modules\vtmb\jobs\tzimisce_mansion\zadruga.dm" +#include "code\modules\vtmb\jobs\camarilla\camarilla_authorities\prince.dm" +#include "code\modules\vtmb\jobs\camarilla\camarilla_authorities\hound.dm" +#include "code\modules\vtmb\jobs\camarilla\camarilla_authorities\seneschal.dm" +#include "code\modules\vtmb\jobs\camarilla\camarilla_authorities\sheriff.dm" +#include "code\modules\vtmb\jobs\camarilla\camarilla.dm" +#include "code\modules\vtmb\jobs\anarch\anarch.dm" +#include "code\modules\vtmb\jobs\warehouse\warehouse.dm" +#include "code\modules\vtmb\jobs\gangs\gangs.dm" +#include "code\modules\vtmb\jobs\city_services\city_services.dm" +#include "code\modules\vtmb\jobs\clinic\clinic.dm" +#include "code\modules\vtmb\jobs\police_force\police_force.dm" +#include "code\modules\vtmb\jobs\national_security\swat.dm" +#include "code\modules\vtmb\jobs\church\church.dm" +#include "code\modules\vtmb\jobs\national_security\national_security.dm" +#include "code\modules\vtmb\jobs\giovanni_family\giovanni_family.dm" +#include "code\modules\vtmb\jobs\unaligned\unaligned.dm" +#include "code\modules\vtmb\jobs\tremere\tremere.dm" +#include "code\modules\vtmb\jobs\tzimisce_mansion\tzimisce_mansion_v.dm" +#include "code\modules\vtmb\jobs\anarch\baron.dm" +#include "code\modules\vtmb\jobs\anarch\bouncer.dm" +#include "code\modules\vtmb\jobs\anarch\emissary.dm" +#include "code\modules\vtmb\jobs\anarch\sweeper.dm" #include "code\modules\vtmb\magic\mysticism.dm" #include "code\modules\vtmb\magic\pyramid.dm" #include "code\modules\vtmb\npc\beastmaster.dm"