Updated item database job mask to 64 bit
* Expands job mask values to higher range for future use. Thanks to HerculesWS/Hercules@5399666!
This commit is contained in:
131
src/map/itemdb.c
131
src/map/itemdb.c
@@ -281,79 +281,84 @@ const char* itemdb_typename(enum item_types type)
|
||||
return "Unknown Type";
|
||||
}
|
||||
|
||||
/*==========================================
|
||||
* Converts the jobid from the format in itemdb
|
||||
* to the format used by the map server. [Skotlex]
|
||||
*------------------------------------------*/
|
||||
static void itemdb_jobid2mapid(unsigned int *bclass, unsigned int jobmask)
|
||||
/**
|
||||
* Converts the jobmask from the format in itemdb to the format used by the map server.
|
||||
* @param bclass: Pointer to store itemdb format
|
||||
* @param jobmask: Job Mask to convert
|
||||
* @author: Skotlex
|
||||
*/
|
||||
static void itemdb_jobid2mapid(uint64 *bclass, uint64 jobmask)
|
||||
{
|
||||
int i;
|
||||
bclass[0]= bclass[1]= bclass[2]= 0;
|
||||
|
||||
bclass[0] = bclass[1] = bclass[2] = 0;
|
||||
|
||||
//Base classes
|
||||
if (jobmask & 1<<JOB_NOVICE)
|
||||
{ //Both Novice/Super-Novice are counted with the same ID
|
||||
bclass[0] |= 1<<MAPID_NOVICE;
|
||||
bclass[1] |= 1<<MAPID_NOVICE;
|
||||
if (jobmask & 1ULL<<JOB_NOVICE) {
|
||||
//Both Novice/Super-Novice are counted with the same ID
|
||||
bclass[0] |= 1ULL<<MAPID_NOVICE;
|
||||
bclass[1] |= 1ULL<<MAPID_NOVICE;
|
||||
}
|
||||
for (i = JOB_NOVICE+1; i <= JOB_THIEF; i++)
|
||||
{
|
||||
if (jobmask & 1<<i)
|
||||
bclass[0] |= 1<<(MAPID_NOVICE+i);
|
||||
for (i = JOB_NOVICE + 1; i <= JOB_THIEF; i++) {
|
||||
if (jobmask & 1ULL <<i)
|
||||
bclass[0] |= 1ULL<<(MAPID_NOVICE + i);
|
||||
}
|
||||
//2-1 classes
|
||||
if (jobmask & 1<<JOB_KNIGHT)
|
||||
bclass[1] |= 1<<MAPID_SWORDMAN;
|
||||
if (jobmask & 1<<JOB_PRIEST)
|
||||
bclass[1] |= 1<<MAPID_ACOLYTE;
|
||||
if (jobmask & 1<<JOB_WIZARD)
|
||||
bclass[1] |= 1<<MAPID_MAGE;
|
||||
if (jobmask & 1<<JOB_BLACKSMITH)
|
||||
bclass[1] |= 1<<MAPID_MERCHANT;
|
||||
if (jobmask & 1<<JOB_HUNTER)
|
||||
bclass[1] |= 1<<MAPID_ARCHER;
|
||||
if (jobmask & 1<<JOB_ASSASSIN)
|
||||
bclass[1] |= 1<<MAPID_THIEF;
|
||||
if (jobmask & 1ULL<<JOB_KNIGHT)
|
||||
bclass[1] |= 1ULL<<MAPID_SWORDMAN;
|
||||
if (jobmask & 1ULL<<JOB_PRIEST)
|
||||
bclass[1] |= 1ULL<<MAPID_ACOLYTE;
|
||||
if (jobmask & 1ULL<<JOB_WIZARD)
|
||||
bclass[1] |= 1ULL<<MAPID_MAGE;
|
||||
if (jobmask & 1ULL<<JOB_BLACKSMITH)
|
||||
bclass[1] |= 1ULL<<MAPID_MERCHANT;
|
||||
if (jobmask & 1ULL<<JOB_HUNTER)
|
||||
bclass[1] |= 1ULL<<MAPID_ARCHER;
|
||||
if (jobmask & 1ULL<<JOB_ASSASSIN)
|
||||
bclass[1] |= 1ULL<<MAPID_THIEF;
|
||||
//2-2 classes
|
||||
if (jobmask & 1<<JOB_CRUSADER)
|
||||
bclass[2] |= 1<<MAPID_SWORDMAN;
|
||||
if (jobmask & 1<<JOB_MONK)
|
||||
bclass[2] |= 1<<MAPID_ACOLYTE;
|
||||
if (jobmask & 1<<JOB_SAGE)
|
||||
bclass[2] |= 1<<MAPID_MAGE;
|
||||
if (jobmask & 1<<JOB_ALCHEMIST)
|
||||
bclass[2] |= 1<<MAPID_MERCHANT;
|
||||
if (jobmask & 1<<JOB_BARD)
|
||||
bclass[2] |= 1<<MAPID_ARCHER;
|
||||
if (jobmask & 1ULL<<JOB_CRUSADER)
|
||||
bclass[2] |= 1ULL<<MAPID_SWORDMAN;
|
||||
if (jobmask & 1ULL<<JOB_MONK)
|
||||
bclass[2] |= 1ULL<<MAPID_ACOLYTE;
|
||||
if (jobmask & 1ULL<<JOB_SAGE)
|
||||
bclass[2] |= 1ULL<<MAPID_MAGE;
|
||||
if (jobmask & 1ULL<<JOB_ALCHEMIST)
|
||||
bclass[2] |= 1ULL<<MAPID_MERCHANT;
|
||||
if (jobmask & 1ULL<<JOB_BARD)
|
||||
bclass[2] |= 1ULL<<MAPID_ARCHER;
|
||||
// Bard/Dancer share the same slot now.
|
||||
// if (jobmask & 1<<JOB_DANCER)
|
||||
// bclass[2] |= 1<<MAPID_ARCHER;
|
||||
if (jobmask & 1<<JOB_ROGUE)
|
||||
bclass[2] |= 1<<MAPID_THIEF;
|
||||
// if (jobmask & 1ULL<<JOB_DANCER)
|
||||
// bclass[2] |= 1ULL<<MAPID_ARCHER;
|
||||
if (jobmask & 1ULL<<JOB_ROGUE)
|
||||
bclass[2] |= 1ULL<<MAPID_THIEF;
|
||||
//Special classes that don't fit above.
|
||||
if (jobmask & 1<<21) //Taekwon boy
|
||||
bclass[0] |= 1<<MAPID_TAEKWON;
|
||||
if (jobmask & 1<<22) //Star Gladiator
|
||||
bclass[1] |= 1<<MAPID_TAEKWON;
|
||||
if (jobmask & 1<<23) //Soul Linker
|
||||
bclass[2] |= 1<<MAPID_TAEKWON;
|
||||
if (jobmask & 1<<JOB_GUNSLINGER)
|
||||
bclass[0] |= 1<<MAPID_GUNSLINGER;
|
||||
if (jobmask & 1<<JOB_NINJA) { //Kagerou/Oboro jobs can equip Ninja equips. [Rytech]
|
||||
bclass[0] |= 1<<MAPID_NINJA;
|
||||
bclass[1] |= 1<<MAPID_NINJA;
|
||||
if (jobmask & 1ULL<<21) //Taekwon
|
||||
bclass[0] |= 1ULL<<MAPID_TAEKWON;
|
||||
if (jobmask & 1ULL<<22) //Star Gladiator
|
||||
bclass[1] |= 1ULL<<MAPID_TAEKWON;
|
||||
if (jobmask & 1ULL<<23) //Soul Linker
|
||||
bclass[2] |= 1ULL<<MAPID_TAEKWON;
|
||||
if (jobmask & 1ULL<<JOB_GUNSLINGER) { // Rebellion job can equip Gunslinger equips.
|
||||
bclass[0] |= 1ULL<<MAPID_GUNSLINGER;
|
||||
bclass[1] |= 1ULL<<MAPID_GUNSLINGER;
|
||||
}
|
||||
if (jobmask & 1<<26) //Bongun/Munak
|
||||
bclass[0] |= 1<<MAPID_GANGSI;
|
||||
if (jobmask & 1<<27) //Death Knight
|
||||
bclass[1] |= 1<<MAPID_GANGSI;
|
||||
if (jobmask & 1<<28) //Dark Collector
|
||||
bclass[2] |= 1<<MAPID_GANGSI;
|
||||
if (jobmask & 1<<29) //Kagerou / Oboro
|
||||
bclass[1] |= 1<<MAPID_NINJA;
|
||||
if (jobmask & 1<<30) //Rebellion
|
||||
bclass[1] |= 1<<MAPID_GUNSLINGER;
|
||||
if (jobmask & 1<<31) //Summoner
|
||||
bclass[0] |= 1<<MAPID_SUMMONER;
|
||||
if (jobmask & 1ULL<<JOB_NINJA) { //Kagerou/Oboro jobs can equip Ninja equips. [Rytech]
|
||||
bclass[0] |= 1ULL<<MAPID_NINJA;
|
||||
bclass[1] |= 1ULL<<MAPID_NINJA;
|
||||
}
|
||||
if (jobmask & 1ULL<<26) //Bongun/Munak
|
||||
bclass[0] |= 1ULL<<MAPID_GANGSI;
|
||||
if (jobmask & 1ULL<<27) //Death Knight
|
||||
bclass[1] |= 1ULL<<MAPID_GANGSI;
|
||||
if (jobmask & 1ULL<<28) //Dark Collector
|
||||
bclass[2] |= 1ULL<<MAPID_GANGSI;
|
||||
if (jobmask & 1ULL<<29) //Kagerou / Oboro
|
||||
bclass[1] |= 1ULL<<MAPID_NINJA;
|
||||
if (jobmask & 1ULL<<30) //Rebellion
|
||||
bclass[1] |= 1ULL<<MAPID_GUNSLINGER;
|
||||
if (jobmask & 1ULL<<31) //Summoner
|
||||
bclass[0] |= 1ULL<<MAPID_SUMMONER;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -408,7 +408,7 @@ struct item_data
|
||||
int delay;
|
||||
//Lupus: I rearranged order of these fields due to compatibility with ITEMINFO script command
|
||||
// some script commands should be revised as well...
|
||||
unsigned int class_base[3]; //Specifies if the base can wear this item (split in 3 indexes per type: 1-1, 2-1, 2-2)
|
||||
uint64 class_base[3]; //Specifies if the base can wear this item (split in 3 indexes per type: 1-1, 2-1, 2-2)
|
||||
unsigned class_upper : 6; //Specifies if the class-type can equip it (0x01: normal, 0x02: trans, 0x04: baby, 0x08:third, 0x10:trans-third, 0x20-third-baby)
|
||||
struct {
|
||||
int chance;
|
||||
|
||||
@@ -1047,7 +1047,7 @@ uint8 pc_isequip(struct map_session_data *sd,int n)
|
||||
return ITEM_EQUIP_ACK_FAIL;
|
||||
|
||||
//Not equipable by class. [Skotlex]
|
||||
if (!(1<<(sd->class_&MAPID_BASEMASK)&item->class_base[(sd->class_&JOBL_2_1)?1:((sd->class_&JOBL_2_2)?2:0)]))
|
||||
if (!(1ULL<<(sd->class_&MAPID_BASEMASK)&item->class_base[(sd->class_&JOBL_2_1)?1:((sd->class_&JOBL_2_2)?2:0)]))
|
||||
return ITEM_EQUIP_ACK_FAIL;
|
||||
|
||||
if (!pc_isItemClass(sd,item))
|
||||
@@ -4783,7 +4783,7 @@ bool pc_isUseitem(struct map_session_data *sd,int n)
|
||||
|
||||
//Not equipable by class. [Skotlex]
|
||||
if (!(
|
||||
(1<<(sd->class_&MAPID_BASEMASK)) &
|
||||
(1ULL<<(sd->class_&MAPID_BASEMASK)) &
|
||||
(item->class_base[sd->class_&JOBL_2_1?1:(sd->class_&JOBL_2_2?2:0)])
|
||||
))
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user