Read item race/class/disc requirements from the cache template
ValidRace/ValidClass/ValidDiscipline use the single req set plus the restrict flag (true = blacklist, false = whitelist) instead of the legacy req/res split. Offline parity (p15c.py, 7586 rows): 0 differences in restrict or set for race, class and disc. Value changes: none for equip checks. The legacy disc blacklist branch was inverted (passed only when a listed disc was held); the new check passes when none is held. No ITEM has a disc blacklist (only 19 RUNEs), and ValidDiscipline has no callers. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
0688cf231f
commit
c7d8483d55
1 file changed
+20
-40
@@ -21,66 +21,46 @@ public enum ItemManager {
|
||||
|
||||
public static final AtomicInteger lastNegativeID = new AtomicInteger(0);
|
||||
|
||||
// restrict true: the set is a blacklist; false: a whitelist. An empty set allows everyone.
|
||||
|
||||
public static Boolean ValidRace(Item item, mbEnums.MonsterType race) {
|
||||
|
||||
if (item.template.item_race_req.isEmpty() && item.template.item_race_res.isEmpty())
|
||||
EnumSet<mbEnums.MonsterType> races = item.template.cacheTemplate.getItemRaceReq();
|
||||
boolean restrict = item.template.cacheTemplate.getItemRaceReqRestrict();
|
||||
|
||||
if (races.isEmpty())
|
||||
return true;
|
||||
|
||||
if (item.template.item_race_req.isEmpty() == false)
|
||||
if (item.template.item_race_req.contains(race))
|
||||
return true;
|
||||
|
||||
if (item.template.item_race_res.isEmpty() == false)
|
||||
if (item.template.item_race_res.contains(race) == false)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
return races.contains(race) != restrict;
|
||||
}
|
||||
|
||||
public static Boolean ValidClass(Item item, mbEnums.ClassType base, mbEnums.ClassType profession) {
|
||||
|
||||
// Early exit if no entry
|
||||
EnumSet<mbEnums.ClassType> classes = item.template.cacheTemplate.getItemClassReq();
|
||||
boolean restrict = item.template.cacheTemplate.getItemClassReqRestrict();
|
||||
boolean listed;
|
||||
|
||||
if (item.template.item_class_req.isEmpty() && item.template.item_class_res.isEmpty())
|
||||
if (classes.isEmpty())
|
||||
return true;
|
||||
|
||||
if (item.template.item_class_req.isEmpty() == false)
|
||||
if (item.template.item_class_req.contains(base) || item.template.item_class_req.contains(profession))
|
||||
return true;
|
||||
listed = classes.contains(base) || classes.contains(profession);
|
||||
|
||||
if (item.template.item_class_res.isEmpty() == false)
|
||||
if (item.template.item_class_res.contains(base) == false && item.template.item_class_res.contains(profession) == false)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
return listed != restrict;
|
||||
}
|
||||
|
||||
public static Boolean ValidDiscipline(Item item, EnumSet<mbEnums.DisciplineType> discs) {
|
||||
|
||||
// Early exit if no entry
|
||||
EnumSet<mbEnums.DisciplineType> disciplines = item.template.cacheTemplate.getItemDiscReq();
|
||||
boolean restrict = item.template.cacheTemplate.getItemDiscReqRestrict();
|
||||
EnumSet<mbEnums.DisciplineType> workSet;
|
||||
|
||||
if (item.template.item_disc_req.isEmpty() && item.template.item_disc_res.isEmpty())
|
||||
if (disciplines.isEmpty())
|
||||
return true;
|
||||
|
||||
EnumSet<mbEnums.DisciplineType> workSet = EnumSet.copyOf(discs);
|
||||
workSet = EnumSet.copyOf(discs);
|
||||
workSet.retainAll(disciplines);
|
||||
|
||||
if (item.template.item_disc_req.isEmpty() == false) {
|
||||
|
||||
workSet.retainAll(item.template.item_disc_req);
|
||||
|
||||
if (workSet.isEmpty() == false)
|
||||
return true;
|
||||
}
|
||||
|
||||
if (item.template.item_disc_res.isEmpty() == false) {
|
||||
|
||||
workSet.retainAll(item.template.item_disc_res);
|
||||
|
||||
if (workSet.isEmpty() == false)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return workSet.isEmpty() == restrict;
|
||||
}
|
||||
|
||||
public static Boolean canCharacterEquip(Item item, AbstractCharacter character) {
|
||||
|
||||
Reference in new issue
Block a user