implement server side restrictions

This commit is contained in:
2024-02-13 20:35:25 -06:00
parent 7fcbfba7e0
commit 8a769c60f2
4 changed files with 63 additions and 38 deletions
+44 -35
View File
@@ -486,13 +486,7 @@ public class ItemBase {
if (!validForSkills(abstractCharacter.getSkills()))
return false;
if (!validRace(item.getItemBase(), abstractCharacter))
return false;
if (!validClass(item.getItemBase(), abstractCharacter))
return false;
if (!validDisc(item.getItemBase(), abstractCharacter))
if(this.canCharacterEquip(abstractCharacter) == false)
return false;
return item.getItemBase().value != 0 || Kit.IsNoobGear(item.getItemBase().uuid);
@@ -502,34 +496,6 @@ public class ItemBase {
return true; //Mobiles and NPC's don't need to check equip
}
public static boolean validRace(ItemBase ib, AbstractCharacter absChar){
if(ib.requiredRaces == null || ib.requiredRaces.isEmpty())
if(ib.restrictedRaces == null || ib.restrictedRaces.isEmpty())
return true;
return ib.requiredRaces.contains(absChar.absRace) && !ib.restrictedRaces.contains(absChar.absRace);
}
public static boolean validClass(ItemBase ib, AbstractCharacter absChar){
if(ib.requiredClasses == null || ib.requiredClasses.isEmpty())
if(ib.restrictedClasses == null || ib.restrictedClasses.isEmpty())
return true;
return ib.requiredClasses.contains(absChar.absClass) && !ib.restrictedClasses.contains(absChar.absClass);
}
public static boolean validDisc(ItemBase ib, AbstractCharacter absChar){
if(ib.requiredDiscs == null || ib.requiredDiscs.isEmpty())
if(ib.restrictedDiscs == null || ib.restrictedDiscs.isEmpty())
return true;
for(CharacterRune rune : absChar.runes)
if(ib.requiredDiscs.contains(rune.getRuneBaseID()) == true && ib.restrictedDiscs.contains(rune.getRuneBaseID()) == false)
return true;
return false;
}
public int getValidSlot() {
int slotValue = 0;
@@ -985,5 +951,48 @@ public class ItemBase {
return false;
}
public Boolean canCharacterEquip(AbstractCharacter character){
return ValidRace(character.absRace) && ValidClass(character.absBaseClass,character.absPromotionClass) && ValidDiscipline(character.absDisciplines);
}
public Boolean ValidRace(Enum.MonsterType race){
if(this.requiredRaces.isEmpty() && this.restrictedRaces.isEmpty())
return true;
if(this.requiredRaces.isEmpty() == false && race.elementOf(this.requiredRaces) == true)
return true;
if(this.restrictedRaces.isEmpty() == false && race.elementOf(this.restrictedRaces) == false)
return true;
return false;
}
public Boolean ValidClass(Enum.ClassType base,Enum.ClassType profession){
if(this.requiredClasses.isEmpty() && this.restrictedClasses.isEmpty())
return true;
if(this.requiredClasses.isEmpty() == false)
if(this.requiredClasses.contains(base) || this.requiredClasses.contains(profession))
return true;
if(this.restrictedClasses.isEmpty() == false)
if(this.restrictedClasses.contains(base) == false && this.restrictedClasses.contains(profession) == false)
return true;
return false;
}
public Boolean ValidDiscipline(EnumSet<Enum.DisciplineType> discs){
if(this.requiredDiscs.isEmpty() && this.restrictedDiscs.isEmpty())
return true;
for(Enum.DisciplineType disc : discs){
if(this.requiredDiscs.isEmpty() == false && this.requiredDiscs.contains(disc))
return true;
if(this.restrictedDiscs.isEmpty() == false && this.restrictedDiscs.contains(disc))
return false;
}
return false;
}
}