diff --git a/src/004-base/facility.js b/src/004-base/facility.js index e7ee3b917e044a04abc91478acc48fe6f5394748..164512d72f6428e295216beb99071e409f97174e 100644 --- a/src/004-base/facility.js +++ b/src/004-base/facility.js @@ -258,7 +258,11 @@ App.Entity.Facilities.ManagingJob = class extends App.Entity.Facilities.Job { /** @returns {App.Entity.SlaveState} */ get currentEmployee() { - const obj = State.variables[capFirstChar(this.desc.position)]; + let obj = slaveStateById(V[`${capFirstChar(this.desc.position)}ID`]); + // TODO Remove when all facility head migrate to IDs + if (!obj) { + obj = V[capFirstChar(this.desc.position)]; + } return obj === undefined || obj === 0 ? null : obj; } diff --git a/src/js/assignJS.js b/src/js/assignJS.js index 3524622ddee6a712d65ca75f03c8accbcf0fa225..a9b182499f72a9f08cdc424732ff8d5029342599 100644 --- a/src/js/assignJS.js +++ b/src/js/assignJS.js @@ -22,13 +22,26 @@ globalThis.assignJob = function(slave, job) { removeJob(slave, slave.assignment, true); const idx = V.slaveIndices[slave.ID]; - const uniqueJob = function(propName) { - // this helper makes sure global references ($HeadGirl, etc) are set correctly - if (V[propName] !== 0 && V[propName].ID !== slave.ID) { - removeJob(V[propName], job, true); + /** + * this helper makes sure global references ($HeadGirl, etc) or global IDs ($AttendantID, etc) are set correctly + * @param {string} propName + */ + function uniqueJob(propName) { + if (App.Data.defaultGameStateVariables.hasOwnProperty(propName)) { + // TODO remove this branch when all special slaves migrate to IDs + if (V[propName] !== 0 && V[propName].ID !== slave.ID) { + removeJob(V[propName], job, true); + } + V[propName] = slave; + } else { + const specialIDProp = `${propName}ID`; + const prevAssigneeID = V[specialIDProp]; + if (prevAssigneeID !== slave.ID) { + removeJob(slaveStateById(prevAssigneeID), job, true); + } + V[specialIDProp] = slave.ID; } - V[propName] = slave; - }; + } /* Tracking for the following cases: */ if (oldJob !== job && V.assignmentRecords[slave.ID] !== job && oldJob !== "rest") { // Check that there is a real change happening. Sometimes when you send someone to a classroom or something, this fires twice.