Merge pull request #7723 from VOREStation/aro-playtimedept

Add department playtime requirement config, code
This commit is contained in:
Aronai Sieyes
2020-05-10 19:00:38 -04:00
committed by GitHub
17 changed files with 83 additions and 13 deletions

View File

@@ -1,12 +1,14 @@
/datum/job/captain
disallow_jobhop = TRUE
pto_type = PTO_CIVILIAN
//dept_time_required = 60 //Pending something more complicated
/datum/job/hop
disallow_jobhop = TRUE
pto_type = PTO_CIVILIAN
departments = list(DEPARTMENT_COMMAND, DEPARTMENT_CIVILIAN)
departments_managed = list(DEPARTMENT_CIVILIAN, DEPARTMENT_CARGO, DEPARTMENT_PLANET)
dept_time_required = 60
alt_titles = list("Crew Resources Officer" = /datum/alt_title/cro,
"Deputy Director" = /datum/alt_title/deputy_director)

View File

@@ -12,6 +12,7 @@
/datum/job/qm
pto_type = PTO_CARGO
dept_time_required = 20
/datum/job/cargo_tech
total_positions = 3

View File

@@ -1,6 +1,7 @@
/datum/job/chief_engineer
disallow_jobhop = TRUE
pto_type = PTO_ENGINEERING
dept_time_required = 60
/datum/job/engineer
pto_type = PTO_ENGINEERING

View File

@@ -44,6 +44,7 @@ var/const/SAR =(1<<14)
economic_modifier = 8
minimal_player_age = 7
pto_type = PTO_EXPLORATION
dept_time_required = 20
access = list(access_eva, access_maint_tunnels, access_external_airlocks, access_pilot, access_explorer, access_gateway)
minimal_access = list(access_eva, access_maint_tunnels, access_external_airlocks, access_pilot, access_explorer, access_gateway)

View File

@@ -14,6 +14,17 @@
//Disallow joining as this job midround from off-duty position via going on-duty
var/disallow_jobhop = FALSE
//Time required in the department as other jobs before playing this one (in hours)
var/dept_time_required = 0
// Check client-specific availability rules.
/datum/job/proc/player_has_enough_pto(client/C)
return timeoff_factor >= 0 || (C && LAZYACCESS(C.department_hours, pto_type) > 0)
/datum/job/proc/player_has_enough_playtime(client/C)
return (available_in_playhours(C) == 0)
/datum/job/proc/available_in_playhours(client/C)
if(C && config.use_playtime_restriction_for_jobs && isnum(C.play_hours[pto_type]) && dept_time_required > 0)
return max(0, dept_time_required - C.play_hours[pto_type])
return 0

View File

@@ -1,6 +1,7 @@
/datum/job/cmo
disallow_jobhop = TRUE
pto_type = PTO_MEDICAL
dept_time_required = 60
/datum/job/doctor
spawn_positions = 5

View File

@@ -1,6 +1,7 @@
/datum/job/rd
disallow_jobhop = TRUE
pto_type = PTO_SCIENCE
dept_time_required = 60
access = list(access_rd, access_heads, access_tox, access_genetics, access_morgue,
access_tox_storage, access_teleporter, access_sec_doors,

View File

@@ -1,6 +1,7 @@
/datum/job/hos
disallow_jobhop = TRUE
pto_type = PTO_SECURITY
dept_time_required = 60
access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory,
access_forensics_lockers, access_morgue, access_maint_tunnels, access_all_personal_lockers,
@@ -13,6 +14,7 @@
/datum/job/warden
pto_type = PTO_SECURITY
dept_time_required = 20
/datum/job/detective
pto_type = PTO_SECURITY

View File

@@ -60,8 +60,12 @@ var/global/datum/controller/occupations/job_master
return 0
if(!job.player_old_enough(player.client))
return 0
if(!is_job_whitelisted(player, rank)) //VOREStation Code
//VOREStation Add
if(!job.player_has_enough_playtime(player.client))
return 0
if(!is_job_whitelisted(player, rank))
return 0
//VOREStation Add End
var/position_limit = job.total_positions
if(!latejoin)
@@ -97,6 +101,9 @@ var/global/datum/controller/occupations/job_master
Debug("FOC character not old enough, Player: [player]")
continue
//VOREStation Code Start
if(!job.player_has_enough_playtime(player.client))
Debug("FOC character not enough playtime, Player: [player]")
continue
if(!is_job_whitelisted(player, job.title))
Debug("FOC is_job_whitelisted failed, Player: [player]")
continue
@@ -133,6 +140,9 @@ var/global/datum/controller/occupations/job_master
continue
//VOREStation Code Start
if(!job.player_has_enough_playtime(player.client))
Debug("GRJ player not enough playtime, Player: [player]")
continue
if(!is_job_whitelisted(player, job.title))
Debug("GRJ player not whitelisted for this job, Player: [player], Job: [job.title]")
continue
@@ -283,6 +293,12 @@ var/global/datum/controller/occupations/job_master
Debug("DO player not old enough, Player: [player], Job:[job.title]")
continue
//VOREStation Add
if(!job.player_has_enough_playtime(player.client))
Debug("DO player not enough playtime, Player: [player]")
continue
//VOREStation Add End
// If the player wants that job on this level, then try give it to him.
if(player.client.prefs.GetJobDepartment(job, level) & job.flag)
@@ -610,6 +626,11 @@ var/global/datum/controller/occupations/job_master
if(!job.player_old_enough(player.client))
level6++
continue
//VOREStation Add
if(!job.player_has_enough_playtime(player.client))
level6++
continue
//VOREStation Add End
if(player.client.prefs.GetJobDepartment(job, 1) & job.flag)
level1++
else if(player.client.prefs.GetJobDepartment(job, 2) & job.flag)

View File

@@ -154,6 +154,7 @@
&& !job.whitelist_only \
&& !jobban_isbanned(user,job.title) \
&& job.player_old_enough(user.client) \
&& job.player_has_enough_playtime(user.client) \
&& job.pto_type == department \
&& !job.disallow_jobhop \
&& job.timeoff_factor > 0