7 // First plain fighters, then religious fighters, then spell-casting
8 // fighters, then primary spell-casters, then stabbers and shooters. (MM)
9 static job_type jobs_order
[] = {
11 JOB_FIGHTER
, JOB_GLADIATOR
,
12 JOB_MONK
, JOB_BERSERKER
,
13 // religious professions (incl. Berserker above)
14 JOB_PALADIN
, JOB_PRIEST
,
15 JOB_HEALER
, JOB_CHAOS_KNIGHT
,
17 // general and niche spellcasters (incl. Crusader above)
18 JOB_REAVER
, JOB_WARPER
,
19 JOB_WIZARD
, JOB_CONJURER
,
20 JOB_ENCHANTER
, JOB_SUMMONER
,
21 JOB_NECROMANCER
, JOB_TRANSMUTER
,
22 JOB_FIRE_ELEMENTALIST
, JOB_ICE_ELEMENTALIST
,
23 JOB_AIR_ELEMENTALIST
, JOB_EARTH_ELEMENTALIST
,
24 // poison specialists and stabbers
25 JOB_VENOM_MAGE
, JOB_STALKER
,
27 JOB_HUNTER
, JOB_ARTIFICER
,
28 JOB_ARCANE_MARKSMAN
, JOB_WANDERER
31 job_type
get_job(const int index
)
33 if (index
< 0 || index
>= ng_num_jobs())
36 return (jobs_order
[index
]);
39 static const char * Job_Abbrev_List
[ NUM_JOBS
] =
41 "Gl", "Ne", "Pa", "As", "Be", "Hu",
42 "Cj", "En", "FE", "IE", "Su", "AE", "EE", "Cr",
44 "CK", "Tm", "He", "Re", "St", "Mo", "Wr", "Wn", "Ar", "AM" };
46 static const char * Job_Name_List
[ NUM_JOBS
] =
47 { "Fighter", "Wizard", "Priest",
48 "Gladiator", "Necromancer",
49 "Paladin", "Assassin", "Berserker", "Hunter", "Conjurer", "Enchanter",
50 "Fire Elementalist", "Ice Elementalist", "Summoner", "Air Elementalist",
51 "Earth Elementalist", "Crusader",
53 "Chaos Knight", "Transmuter", "Healer", "Reaver", "Stalker",
54 "Monk", "Warper", "Wanderer", "Artificer", "Arcane Marksman" };
56 const char *get_job_abbrev(int which_job
)
58 COMPILE_CHECK(ARRAYSZ(Job_Abbrev_List
) == NUM_JOBS
, c1
);
59 ASSERT(which_job
>= 0 && which_job
< NUM_JOBS
);
61 return (Job_Abbrev_List
[which_job
]);
64 job_type
get_job_by_abbrev(const char *abbrev
)
68 for (i
= 0; i
< NUM_JOBS
; i
++)
70 if (tolower(abbrev
[0]) == tolower(Job_Abbrev_List
[i
][0])
71 && tolower(abbrev
[1]) == tolower(Job_Abbrev_List
[i
][1]))
77 return ((i
< NUM_JOBS
) ? static_cast<job_type
>(i
) : JOB_UNKNOWN
);
80 const char *get_job_name(int which_job
)
82 COMPILE_CHECK(ARRAYSZ(Job_Name_List
) == NUM_JOBS
, c1
);
83 ASSERT(which_job
>= 0 && which_job
< NUM_JOBS
);
85 return (Job_Name_List
[which_job
]);
88 job_type
get_job_by_name(const char *name
)
91 job_type cl
= JOB_UNKNOWN
;
94 char lowered_buff
[80];
97 strncpy(lowered_buff
, name
, sizeof(lowered_buff
));
100 for (i
= 0; i
< NUM_JOBS
; i
++)
102 strncpy(lowered_job
, Job_Name_List
[i
], sizeof(lowered_job
));
105 ptr
= strstr(lowered_job
, lowered_buff
);
108 cl
= static_cast<job_type
>(i
);
109 if (ptr
== lowered_job
) // prefix takes preference
119 // The list musn't be longer than the number of actual jobs.
120 COMPILE_CHECK(ARRAYSZ(jobs_order
) <= NUM_JOBS
, c1
);
121 return ARRAYSZ(jobs_order
);
124 bool is_valid_job(job_type job
)
126 return (job
>= 0 && job
< NUM_JOBS
);