Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions plugin/CactbotEventSource/FFXIVProcess.cs
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ public enum EntityJob : byte {
SGE = 40,
VPR = 41,
PCT = 42,
BST = 43,
};

static internal bool IsGatherer(EntityJob job) {
Expand Down
16 changes: 16 additions & 0 deletions resources/party.ts
Original file line number Diff line number Diff line change
Expand Up @@ -461,6 +461,14 @@ const jobLocalizedAbbr: Record<Job, LocaleText> = {
ko: '픽토',
tc: '繪靈',
},
BST: {
en: 'BST',
de: 'BST',
fr: 'DRE',
ja: 'BST', // FIXME
cn: 'BST', // FIXME
ko: '마수',
},
Comment on lines +464 to +471

@xiashtra xiashtra Sep 9, 2026

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://v2.xivapi.com/api/sheet/ClassJob/43?fields=Abbreviation,Abbreviation@de,Abbreviation@ja,Abbreviation@fr,Name,Name@de,Name@ja,Name@fr

  "schema": "exdschema@2:rev:83e965d091116f895d5b17573cc5d12909a5f407",
  "version": "f5af21155b99a524",
  "row_id": 43,
  "fields": {
    "Abbreviation": "BST",
    "Abbreviation@de": "BST",
    "Abbreviation@fr": "DRE",
    "Abbreviation@ja": "BST",
    "Name": "beastmaster",
    "Name@de": "Bestienbändiger",
    "Name@fr": "dresseur",
    "Name@ja": "魔獣使い"
  }
}

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems Japanese and Chinese do not use this abbreviation, so I added 'BST' with a FIXME comment.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Those translations come directly from the client data, so I'm not sure what you mean by JP using a different abbreviation.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  PCT: {
    en: 'PCT',
    de: 'PKT',
    fr: 'PIC',
    ja: 'ピクトマンサー',
    cn: '画家',
    ko: '픽토',
    tc: '繪靈',
  },

What I meant was that the abbreviations for the CJK are the ones used by the community, not the ones set in the client.

In all three regions, “PCT” is the abbreviation, and although the “NameFemale” column next to it contains the following, it does not match the current abbreviations.

# PCT
ja: ピ
ko: 픽
cn: 绘

};

const jobLocalizedFull: Record<Job, LocaleText> = {
Expand Down Expand Up @@ -851,6 +859,14 @@ const jobLocalizedFull: Record<Job, LocaleText> = {
ko: '픽토맨서',
tc: '繪靈法師',
},
BST: {
en: 'Beastmaster',
de: 'Bestienbändiger',
fr: 'dresseur',
ja: '魔獣使い',
cn: '驯兽师',
ko: '마수조련사',
},
Comment thread
Bing-su marked this conversation as resolved.
};

export default class PartyTracker {
Expand Down
24 changes: 18 additions & 6 deletions resources/util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,27 +56,39 @@ const nameToJobEnum: Record<Job, number> = {
SGE: 40,
VPR: 41,
PCT: 42,
BST: 43,
};

export const allJobs = Object.keys(nameToJobEnum) as Job[];
const allRoles = ['tank', 'healer', 'dps', 'crafter', 'gatherer', 'none'] as Role[];

export const tankJobs: Job[] = ['GLA', 'PLD', 'MRD', 'WAR', 'DRK', 'GNB'];
export const healerJobs: Job[] = ['CNJ', 'WHM', 'SCH', 'AST', 'SGE'];
export const meleeDpsJobs: Job[] = ['PGL', 'MNK', 'LNC', 'DRG', 'ROG', 'NIN', 'SAM', 'RPR', 'VPR'];
export const meleeDpsJobs: Job[] = [
'PGL',
'MNK',
'LNC',
'DRG',
'ROG',
'NIN',
'SAM',
'RPR',
'VPR',
'BST',
];
export const rangedDpsJobs: Job[] = ['ARC', 'BRD', 'DNC', 'MCH'];
export const casterDpsJobs: Job[] = ['BLU', 'RDM', 'BLM', 'SMN', 'ACN', 'THM', 'PCT'];
export const dpsJobs: Job[] = [...meleeDpsJobs, ...rangedDpsJobs, ...casterDpsJobs];
export const craftingJobs: Job[] = ['CRP', 'BSM', 'ARM', 'GSM', 'LTW', 'WVR', 'ALC', 'CUL'];
export const gatheringJobs: Job[] = ['MIN', 'BTN', 'FSH'];
export const limitedJobs: Job[] = ['BLU'];
export const limitedJobs: Job[] = ['BLU', 'BST'];

const stunJobs: Job[] = ['BLU', ...tankJobs, ...meleeDpsJobs];
const silenceJobs: Job[] = ['BLU', ...tankJobs, ...rangedDpsJobs];
const sleepJobs: Job[] = [...casterDpsJobs, ...healerJobs];
const feintJobs: Job[] = [...meleeDpsJobs];
const silenceJobs: Job[] = ['BLU', 'BST', ...tankJobs, ...rangedDpsJobs];
const sleepJobs: Job[] = ['BST', ...casterDpsJobs, ...healerJobs];
const feintJobs: Job[] = meleeDpsJobs.filter((job) => job !== 'BST');
const addleJobs: Job[] = [...casterDpsJobs];
const cleanseJobs: Job[] = ['BLU', 'BRD', ...healerJobs];
const cleanseJobs: Job[] = ['BLU', 'BRD', 'BST', ...healerJobs];

const jobToRoleMap: Map<Job, Role> = (() => {
const addToMap = (map: Map<Job, Role>, jobs: Job[], role: Role) => {
Expand Down
5 changes: 5 additions & 0 deletions test/unittests/util_test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,11 @@ const jobs: JobInfo[] = ((): JobInfo[] => {
'Stun',
);

// Beastmaster has its own utility actions instead of role actions.
const beastmaster = jobs.find((job) => job.name === 'BST');
if (beastmaster)
beastmaster.actions = ['Cleanse', 'Silence', 'Sleep', 'Stun'];

return jobs;
})();

Expand Down
3 changes: 2 additions & 1 deletion types/job.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ export type Job =
| 'RPR'
| 'SGE'
| 'VPR'
| 'PCT';
| 'PCT'
| 'BST';

export type Role = 'tank' | 'healer' | 'dps' | 'crafter' | 'gatherer' | 'none';
1 change: 1 addition & 0 deletions ui/jobs/components/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ const ComponentMap: Record<Job, typeof BaseComponent> = {
SAM: SAMComponent,
RPR: RPRComponent,
VPR: VPRComponent,
BST: BaseComponent,
// ranged dps
ARC: BRDComponent,
BRD: BRDComponent,
Expand Down
1 change: 1 addition & 0 deletions ui/raidboss/emulator/ui/EmulatedPartyInfo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ const jobOrder = [
'SAM',
'RPR',
'VPR',
'BST',
'BRD',
'MCH',
'DNC',
Expand Down