diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 5b8dee959de..b9fd5d3e4a3 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -256,7 +256,9 @@ datum/preferences
var/HTML = "
"
HTML += "Choose occupation chances
"
+ HTML += "Left-click to raise an occupation preference, right-click to lower it.
"
HTML += "Done
" // Easier to press up here.
+ HTML += ""
HTML += "" // Table within a table for alignment, also allows you to easily add more colomns.
HTML += ""
var/index = -1
@@ -296,7 +298,7 @@ datum/preferences
HTML += ""
- HTML += ""
+ HTML += ""
if(rank == "Assistant")//Assistant is special
if(job_civilian_low & ASSISTANT)
@@ -331,9 +333,78 @@ datum/preferences
popup.open(0)
return
+ proc/SetJobPreferenceLevel(var/datum/job/job, var/level)
+ if (!job)
+ return 0
- proc/SetJob(mob/user, role)
+ if (level == 1) // set all current high preferred to medium
+ job_civilian_med |= job_civilian_high
+ job_engsec_med |= job_engsec_high
+ job_medsci_med |= job_medsci_high
+ job_civilian_high = 0
+ job_engsec_high = 0
+ job_medsci_high = 0
+
+ if (job.department_flag == CIVILIAN)
+ job_civilian_low &= ~job.flag
+ job_civilian_med &= ~job.flag
+ job_civilian_high &= ~job.flag
+
+ switch(level)
+ if (1)
+ job_civilian_high |= job.flag
+ if (2)
+ job_civilian_med |= job.flag
+ if (3)
+ job_civilian_low |= job.flag
+
+ return 1
+ else if (job.department_flag == ENGSEC)
+ job_engsec_low &= ~job.flag
+ job_engsec_med &= ~job.flag
+ job_engsec_high &= ~job.flag
+
+ switch(level)
+ if (1)
+ job_engsec_high |= job.flag
+ if (2)
+ job_engsec_med |= job.flag
+ if (3)
+ job_engsec_low |= job.flag
+
+ return 1
+ else if (job.department_flag == MEDSCI)
+ job_medsci_low &= ~job.flag
+ job_medsci_med &= ~job.flag
+ job_medsci_high &= ~job.flag
+
+ switch(level)
+ if (1)
+ job_medsci_high |= job.flag
+ if (2)
+ job_medsci_med |= job.flag
+ if (3)
+ job_medsci_low |= job.flag
+
+ return 1
+
+ return 0
+
+ proc/GetJobLevel(var/datum/job/job)
+ if (!job) return 0
+
+ if (job.flag & (job_civilian_high | job_engsec_high | job_medsci_high))
+ return 1
+ else if (job.flag & (job_civilian_med | job_engsec_med | job_medsci_med))
+ return 2
+ else if (job.flag & (job_civilian_low | job_engsec_low | job_medsci_low))
+ return 3
+
+ return 0
+
+ proc/UpdateJobPreference(mob/user, role, upOrDown)
var/datum/job/job = job_master.GetJob(role)
+
if(!job)
user << browse(null, "window=mob_occupation")
ShowChoices(user)
@@ -347,18 +418,26 @@ datum/preferences
SetChoices(user)
return 1
- if(GetJobDepartment(job, 1) & job.flag)
- SetJobDepartment(job, 1)
- else if(GetJobDepartment(job, 2) & job.flag)
- SetJobDepartment(job, 2)
- else if(GetJobDepartment(job, 3) & job.flag)
- SetJobDepartment(job, 3)
- else//job = Never
- SetJobDepartment(job, 4)
+ var/targetLvl = GetJobLevel(job)
+ if (upOrDown == 1) // increasing from low to high, i.e. lowering the level value
+ if (targetLvl == 0)
+ targetLvl = 3 // low
+ else
+ targetLvl = targetLvl - 1
+ else // decreasing from high to low, i.e. raising the level value
+ if (targetLvl == 3)
+ targetLvl = 0
+ else
+ targetLvl = targetLvl + 1
+
+
+ SetJobPreferenceLevel(job, targetLvl)
SetChoices(user)
+
return 1
+
proc/ResetJobs()
job_civilian_high = 0
@@ -403,57 +482,6 @@ datum/preferences
return job_engsec_low
return 0
-
- proc/SetJobDepartment(var/datum/job/job, var/level)
- if(!job || !level) return 0
- switch(level)
- if(1)//Only one of these should ever be active at once so clear them all here
- job_civilian_high = 0
- job_medsci_high = 0
- job_engsec_high = 0
- return 1
- if(2)//Set current highs to med, then reset them
- job_civilian_med |= job_civilian_high
- job_medsci_med |= job_medsci_high
- job_engsec_med |= job_engsec_high
- job_civilian_high = 0
- job_medsci_high = 0
- job_engsec_high = 0
-
- switch(job.department_flag)
- if(CIVILIAN)
- switch(level)
- if(2)
- job_civilian_high = job.flag
- job_civilian_med &= ~job.flag
- if(3)
- job_civilian_med |= job.flag
- job_civilian_low &= ~job.flag
- else
- job_civilian_low |= job.flag
- if(MEDSCI)
- switch(level)
- if(2)
- job_medsci_high = job.flag
- job_medsci_med &= ~job.flag
- if(3)
- job_medsci_med |= job.flag
- job_medsci_low &= ~job.flag
- else
- job_medsci_low |= job.flag
- if(ENGSEC)
- switch(level)
- if(2)
- job_engsec_high = job.flag
- job_engsec_med &= ~job.flag
- if(3)
- job_engsec_med |= job.flag
- job_engsec_low &= ~job.flag
- else
- job_engsec_low |= job.flag
- return 1
-
-
proc/process_link(mob/user, list/href_list)
if(!istype(user, /mob/new_player)) return
@@ -468,8 +496,10 @@ datum/preferences
if("random")
userandomjob = !userandomjob
SetChoices(user)
- if("input")
- SetJob(user, href_list["text"])
+ if("increaseJobLevel")
+ UpdateJobPreference(user, href_list["text"], 1)
+ if ("decreaseJobLevel")
+ UpdateJobPreference(user, href_list["text"], -1)
else
SetChoices(user)
return 1
diff --git a/html/changelog.html b/html/changelog.html
index c8e10be403e..1679a99c2d6 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -51,7 +51,16 @@ should be listed in the changelog upon commit tho. Thanks. -->
-
+
+
+
+ 16 June 2013
+ Khub updated:
+
+ - Job preferences menu now not only allows you to left-click the level (i.e. [Medium]) to raise it, but also to right-click it to lower it. That means you don't have to cycle through all the levels to get rid of a [Low].
+
+
+
15 June 2013
| |