Skip to main content
Staff members are employees that maintain and operate the park. Access them using map.getAllEntities('staff').

Staff Types

There are four types of staff:
  • "handyman" - Sweeps litter, mows lawns, waters gardens, empties bins
  • "mechanic" - Inspects and fixes rides
  • "security" - Stops vandals
  • "entertainer" - Entertains guests
const staff = map.getAllEntities('staff');
staff.forEach(member => {
  console.log(`${member.name}: ${member.staffType}`);
});

Base Staff Properties

name
string
Name of the staff member.
member.name = 'Bob the Handyman';
staffType
StaffType
The type of staff member.
console.log(`Type: ${member.staffType}`);
colour
number
Colour of the staff member (0-31). Not applicable to entertainers.
member.colour = 10; // Change uniform color
orders
number
The enabled jobs the staff can do (bitmask).For handymen:
  • 1 (0001): Sweeping
  • 2 (0010): Watering flowers
  • 4 (0100): Empty bins
  • 8 (1000): Mowing
For mechanics:
  • 1 (0001): Inspect rides
  • 2 (0010): Fix rides
member.orders = 15; // Enable all handyman tasks (1+2+4+8)
member.orders = 3;  // Enable both mechanic tasks (1+2)
costume
StaffCostume | string | number
The staff member’s costume. Primarily for entertainers.Available costumes: “panda”, “tiger”, “elephant”, “roman”, “gorilla”, “snowman”, “knight”, “astronaut”, “bandit”, “sheriff”, “pirate”
member.costume = 'panda';
availableCostumes
StaffCostume[]
Array of costumes available to this staff member.
console.log('Available costumes:', member.availableCostumes);

Location

x
number
The x-coordinate in game units.
y
number
The y-coordinate in game units.
z
number
The z-coordinate in game units.
destination
CoordsXY
The staff member’s direct destination.
console.log(`Going to: (${member.destination.x}, ${member.destination.y})`);
direction
Direction
The staff member’s orthogonal direction (0-3).
energy
number
How tired the staff member is (32-128). Lower is more tired.
energyTarget
number
The target energy value.

Patrol Area

patrolArea
PatrolArea
Gets the patrol area for the staff member.
The patrol area object has these methods:

tiles

Gets or sets all individual tiles in the patrol area.
// Get all patrol tiles
const tiles = member.patrolArea.tiles;
console.log(`Patrol area has ${tiles.length} tiles`);

// Set patrol tiles
member.patrolArea.tiles = [
  { x: 32, y: 32 },
  { x: 33, y: 32 },
  { x: 34, y: 32 }
];
Fetching all patrol area tiles can degrade performance for large areas.

clear()

Clears all tiles from the patrol area.
member.patrolArea.clear();

add()

Adds coordinates or a map range to the patrol area.
coords
CoordsXY[] | MapRange
required
Array of coordinates or a map range to add.
// Add individual tiles
member.patrolArea.add([
  { x: 32, y: 32 },
  { x: 33, y: 32 }
]);

// Add a rectangular range
member.patrolArea.add({
  leftTop: { x: 10, y: 10 },
  rightBottom: { x: 20, y: 20 }
});

remove()

Removes coordinates or a map range from the patrol area.
coords
CoordsXY[] | MapRange
required
Array of coordinates or a map range to remove.
member.patrolArea.remove([
  { x: 32, y: 32 }
]);

member.patrolArea.remove({
  leftTop: { x: 10, y: 10 },
  rightBottom: { x: 15, y: 15 }
});

contains()

Checks whether a coordinate is within the patrol area.
coord
CoordsXY
required
The coordinate to check.
if (member.patrolArea.contains({ x: 32, y: 32 })) {
  console.log('Tile is in patrol area');
}

Handyman

Handymen clean and maintain the park.
lawnsMown
number
The number of lawns mown by the handyman.
console.log(`Lawns mown: ${handyman.lawnsMown}`);
gardensWatered
number
The number of gardens watered by the handyman.
console.log(`Gardens watered: ${handyman.gardensWatered}`);
litterSwept
number
The number of litter swept by the handyman.
console.log(`Litter swept: ${handyman.litterSwept}`);
binsEmptied
number
The number of bins emptied by the handyman.
console.log(`Bins emptied: ${handyman.binsEmptied}`);

Mechanic

Mechanics inspect and fix rides.
ridesFixed
number
The number of rides fixed by the mechanic.
console.log(`Rides fixed: ${mechanic.ridesFixed}`);
ridesInspected
number
The number of inspections performed by the mechanic.
console.log(`Inspections: ${mechanic.ridesInspected}`);

Security Guard

Security guards stop vandals.
vandalsStopped
number
The number of vandals stopped by the security guard.
console.log(`Vandals stopped: ${security.vandalsStopped}`);

Animations

availableAnimations
StaffAnimation[]
The animations available to this staff member.
animation
StaffAnimation
The animation the staff member is currently exhibiting. Animations include: “walking”, “watchRide”, “wave”, “staffMower”, “staffSweep”, “staffAnswerCall”, “staffCheckBoard”, “staffFix”, “staffWatering”, “staffEmptyBin”, etc.
animationOffset
number
The frame offset in the current animation.
animationLength
number
The total number of frames in the current animation.

getAnimationSpriteIds()

Gets sprite IDs for a staff animation.
animation
StaffAnimation
required
The animation to get sprites for.
rotation
number
required
The rotation (0-7).
const sprites = member.getAnimationSpriteIds('staffSweep', 0);

getCostumeStrings()

Returns an array of costume strings with inline sprites.
const costumes = member.getCostumeStrings();
console.log('Costumes:', costumes);

Usage Examples

Hire Staff

// Hire a handyman
context.executeAction('staffhire', {
  autoPosition: true,
  staffType: 0, // Handyman
  costumeIndex: 0,
  staffOrders: 15 // All tasks enabled
}, (result) => {
  if (result.error === 0) {
    const staffId = result.peep;
    const staff = map.getEntity(staffId);
    console.log(`Hired ${staff.name}`);
  }
});

// Hire a mechanic
context.executeAction('staffhire', {
  autoPosition: true,
  staffType: 1, // Mechanic
  costumeIndex: 0,
  staffOrders: 3 // Inspect and fix
});

Staff Performance Report

function staffPerformanceReport() {
  const staff = map.getAllEntities('staff');
  
  console.log('=== Staff Performance ===');
  
  staff.forEach(member => {
    console.log(`\n${member.name} (${member.staffType})`);
    
    if (member.staffType === 'handyman') {
      console.log(`  Lawns mown: ${member.lawnsMown}`);
      console.log(`  Gardens watered: ${member.gardensWatered}`);
      console.log(`  Litter swept: ${member.litterSwept}`);
      console.log(`  Bins emptied: ${member.binsEmptied}`);
    } else if (member.staffType === 'mechanic') {
      console.log(`  Rides fixed: ${member.ridesFixed}`);
      console.log(`  Inspections: ${member.ridesInspected}`);
    } else if (member.staffType === 'security') {
      console.log(`  Vandals stopped: ${member.vandalsStopped}`);
    }
  });
}

Set Patrol Areas

function setPatrolArea(staff, area) {
  staff.patrolArea.clear();
  staff.patrolArea.add(area);
  console.log(`Set patrol area for ${staff.name}`);
}

// Set rectangular patrol area
const handyman = map.getAllEntities('staff')
  .find(s => s.staffType === 'handyman');

if (handyman) {
  setPatrolArea(handyman, {
    leftTop: { x: 10, y: 10 },
    rightBottom: { x: 30, y: 30 }
  });
}

Fire Inefficient Staff

function fireInefficientStaff() {
  const staff = map.getAllEntities('staff');
  
  staff.forEach(member => {
    let shouldFire = false;
    
    if (member.staffType === 'handyman') {
      const total = member.lawnsMown + member.gardensWatered + 
                   member.litterSwept + member.binsEmptied;
      if (total < 10) shouldFire = true;
    } else if (member.staffType === 'mechanic') {
      if (member.ridesFixed + member.ridesInspected < 5) {
        shouldFire = true;
      }
    }
    
    if (shouldFire) {
      console.log(`Firing ${member.name} for poor performance`);
      context.executeAction('stafffire', { id: member.id });
    }
  });
}

Change Staff Uniforms

function changeUniformColors() {
  const staff = map.getAllEntities('staff');
  
  staff.forEach(member => {
    if (member.staffType === 'handyman') {
      member.colour = 2; // Green
    } else if (member.staffType === 'mechanic') {
      member.colour = 10; // Blue
    } else if (member.staffType === 'security') {
      member.colour = 0; // Black
    }
  });
}

Auto-Assign Patrol Areas

function autoAssignPatrolAreas() {
  const handymen = map.getAllEntities('staff')
    .filter(s => s.staffType === 'handyman');
  
  const mapSize = map.size;
  const sections = handymen.length;
  const sectionWidth = Math.floor(mapSize.x / sections);
  
  handymen.forEach((handyman, index) => {
    const startX = index * sectionWidth;
    const endX = (index + 1) * sectionWidth - 1;
    
    handyman.patrolArea.clear();
    handyman.patrolArea.add({
      leftTop: { x: startX, y: 0 },
      rightBottom: { x: endX, y: mapSize.y - 1 }
    });
    
    console.log(`${handyman.name} assigned section ${index + 1}`);
  });
}