forked from MagicBane/Server
server side race/cass restrictions
This commit is contained in:
@@ -10,6 +10,7 @@ package engine;
|
|||||||
|
|
||||||
import ch.claude_martin.enumbitset.EnumBitSetHelper;
|
import ch.claude_martin.enumbitset.EnumBitSetHelper;
|
||||||
import engine.gameManager.ConfigManager;
|
import engine.gameManager.ConfigManager;
|
||||||
|
import engine.gameManager.DbManager;
|
||||||
import engine.gameManager.PowersManager;
|
import engine.gameManager.PowersManager;
|
||||||
import engine.gameManager.ZoneManager;
|
import engine.gameManager.ZoneManager;
|
||||||
import engine.math.Vector2f;
|
import engine.math.Vector2f;
|
||||||
@@ -2518,11 +2519,17 @@ public class Enum {
|
|||||||
private final String name;
|
private final String name;
|
||||||
private final String[][] ranks; //Stored Rank#->Gender(M,F)
|
private final String[][] ranks; //Stored Rank#->Gender(M,F)
|
||||||
private final String[] leadershipTypes;
|
private final String[] leadershipTypes;
|
||||||
|
public final ArrayList<PromoteType> requiredClasses;
|
||||||
|
public final ArrayList<MonsterType> requiredRaces;
|
||||||
|
public final SexType sexRequired;
|
||||||
|
|
||||||
GuildType(String name, String[][] ranks, String[] leadershipTypes) {
|
GuildType(String name, String[][] ranks, String[] leadershipTypes) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.ranks = ranks;
|
this.ranks = ranks;
|
||||||
this.leadershipTypes = leadershipTypes;
|
this.leadershipTypes = leadershipTypes;
|
||||||
|
this.requiredClasses = DbManager.GuildQueries.LOAD_CHARTER_CLASS_RESTRICTIONS(this.name);
|
||||||
|
this.requiredRaces = DbManager.GuildQueries.LOAD_CHARTER_RACE_RESTRICTIONS(this.name);
|
||||||
|
this.sexRequired = DbManager.GuildQueries.LOAD_CHARTER_SEX_RESTRICTIONS(this.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static GuildType getGuildTypeFromCharter(ItemBase itemBase) {
|
public static GuildType getGuildTypeFromCharter(ItemBase itemBase) {
|
||||||
|
|||||||
@@ -714,5 +714,68 @@ public class dbGuildHandler extends dbHandlerBase {
|
|||||||
//
|
//
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
public ArrayList<Enum.MonsterType> LOAD_CHARTER_RACE_RESTRICTIONS(String name){
|
||||||
|
ArrayList<Enum.MonsterType> reqRaces= new ArrayList<>();
|
||||||
|
try (Connection connection = DbManager.getConnection();
|
||||||
|
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM `lore_charter_restrictions` WHERE `GUILDTYPE` = ?")) {
|
||||||
|
|
||||||
|
preparedStatement.setString(1, name);
|
||||||
|
ResultSet rs = preparedStatement.executeQuery();
|
||||||
|
|
||||||
|
while (rs.next()) {
|
||||||
|
String read = rs.getString("RACE_REQUIRED");
|
||||||
|
if(read != null){
|
||||||
|
for(String entry : read.split(";"))
|
||||||
|
reqRaces.add(Enum.MonsterType.valueOf(entry.replace("-","")));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (SQLException e) {
|
||||||
|
Logger.error(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return reqRaces;
|
||||||
|
}
|
||||||
|
public ArrayList<Enum.PromoteType> LOAD_CHARTER_CLASS_RESTRICTIONS(String name){
|
||||||
|
ArrayList<Enum.PromoteType> reqClasses= new ArrayList<>();
|
||||||
|
try (Connection connection = DbManager.getConnection();
|
||||||
|
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM `lore_charter_restrictions` WHERE `GUILDTYPE` = ?")) {
|
||||||
|
|
||||||
|
preparedStatement.setString(1, name);
|
||||||
|
ResultSet rs = preparedStatement.executeQuery();
|
||||||
|
|
||||||
|
while (rs.next()) {
|
||||||
|
String read = rs.getString("CLASS_REQUIRED");
|
||||||
|
if(read != null){
|
||||||
|
for(String entry : read.split(";"))
|
||||||
|
reqClasses.add(Enum.PromoteType.valueOf(entry));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (SQLException e) {
|
||||||
|
Logger.error(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return reqClasses;
|
||||||
|
}
|
||||||
|
public Enum.SexType LOAD_CHARTER_SEX_RESTRICTIONS(String name){
|
||||||
|
try (Connection connection = DbManager.getConnection();
|
||||||
|
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM `lore_charter_restrictions` WHERE `GUILDTYPE` = ?")) {
|
||||||
|
|
||||||
|
preparedStatement.setString(1, name);
|
||||||
|
ResultSet rs = preparedStatement.executeQuery();
|
||||||
|
|
||||||
|
while (rs.next()) {
|
||||||
|
String read = rs.getString("SEX_REQUIRED");
|
||||||
|
if(read != null){
|
||||||
|
if(read == "Female")
|
||||||
|
return Enum.SexType.FEMALE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (SQLException e) {
|
||||||
|
Logger.error(e);
|
||||||
|
}
|
||||||
|
return Enum.SexType.NONE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -86,6 +86,7 @@ public class dbItemBaseHandler extends dbHandlerBase {
|
|||||||
while (rs.next()) {
|
while (rs.next()) {
|
||||||
recordsRead++;
|
recordsRead++;
|
||||||
itemBase = new ItemBase(rs);
|
itemBase = new ItemBase(rs);
|
||||||
|
|
||||||
ItemBase.addToCache(itemBase);
|
ItemBase.addToCache(itemBase);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,7 +96,19 @@ public class dbItemBaseHandler extends dbHandlerBase {
|
|||||||
|
|
||||||
Logger.info("read: " + recordsRead + " cached: " + ItemBase.getUUIDCache().size());
|
Logger.info("read: " + recordsRead + " cached: " + ItemBase.getUUIDCache().size());
|
||||||
}
|
}
|
||||||
|
public void LOAD_ALL_ITEM_REQUIREMENTS(){
|
||||||
|
for(ItemBase itemBase : ItemBase._itemBaseByUUID.values())
|
||||||
|
try (Connection connection = DbManager.getConnection();
|
||||||
|
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM static_item_requirements WHERE 'itemID' = ?")) {
|
||||||
|
preparedStatement.setInt(1, itemBase.getUUID());
|
||||||
|
ResultSet rs = preparedStatement.executeQuery();
|
||||||
|
while(rs.next()) {
|
||||||
|
itemBase.LoadRequirements(rs.getString("racesRequired"),rs.getString("racesRestricted"),rs.getString("classesRequired"),rs.getString("classesRestricted"),rs.getString("discsRequired"),rs.getString("discsRestricted"));
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
Logger.error("No Entry In static_item_requirements for item UUID: " + itemBase.getUUID());
|
||||||
|
}
|
||||||
|
}
|
||||||
public HashMap<Integer, ArrayList<Integer>> LOAD_RUNES_FOR_NPC_AND_MOBS() {
|
public HashMap<Integer, ArrayList<Integer>> LOAD_RUNES_FOR_NPC_AND_MOBS() {
|
||||||
|
|
||||||
HashMap<Integer, ArrayList<Integer>> runeSets = new HashMap<>();
|
HashMap<Integer, ArrayList<Integer>> runeSets = new HashMap<>();
|
||||||
|
|||||||
@@ -125,6 +125,11 @@ public abstract class AbstractCharacter extends AbstractWorldObject {
|
|||||||
|
|
||||||
public ArrayList<CharacterRune> runes;
|
public ArrayList<CharacterRune> runes;
|
||||||
|
|
||||||
|
public Enum.MonsterType absRace = null;
|
||||||
|
public Enum.PromoteType absClass = null;
|
||||||
|
|
||||||
|
public Enum.SexType absGender = null;
|
||||||
|
|
||||||
public AbstractCharacter() {
|
public AbstractCharacter() {
|
||||||
super();
|
super();
|
||||||
this.firstName = "";
|
this.firstName = "";
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
package engine.objects;
|
package engine.objects;
|
||||||
|
|
||||||
|
import engine.Enum;
|
||||||
import engine.Enum.DamageType;
|
import engine.Enum.DamageType;
|
||||||
import engine.Enum.GameObjectType;
|
import engine.Enum.GameObjectType;
|
||||||
import engine.Enum.ItemType;
|
import engine.Enum.ItemType;
|
||||||
@@ -77,6 +78,15 @@ public class ItemBase {
|
|||||||
private ArrayList<Integer> offHandAnimations = new ArrayList<>();
|
private ArrayList<Integer> offHandAnimations = new ArrayList<>();
|
||||||
private boolean autoID = false;
|
private boolean autoID = false;
|
||||||
|
|
||||||
|
//requirements/restrictions
|
||||||
|
public ArrayList<Enum.MonsterType> restrictedRaces;
|
||||||
|
public ArrayList<Enum.MonsterType> requiredRaces;
|
||||||
|
public ArrayList<Enum.PromoteType> restrictedClasses;
|
||||||
|
public ArrayList<Enum.PromoteType> requiredClasses;
|
||||||
|
public ArrayList<Integer> requiredDiscs;
|
||||||
|
public ArrayList<Integer> restrictedDiscs;
|
||||||
|
public Enum.SexType requiredSex;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ResultSet Constructor
|
* ResultSet Constructor
|
||||||
*/
|
*/
|
||||||
@@ -212,6 +222,7 @@ public class ItemBase {
|
|||||||
|
|
||||||
public static void loadAllItemBases() {
|
public static void loadAllItemBases() {
|
||||||
DbManager.ItemBaseQueries.LOAD_ALL_ITEMBASES();
|
DbManager.ItemBaseQueries.LOAD_ALL_ITEMBASES();
|
||||||
|
DbManager.ItemBaseQueries.LOAD_ALL_ITEM_REQUIREMENTS();
|
||||||
AnniverseryGifts.add(971000);
|
AnniverseryGifts.add(971000);
|
||||||
AnniverseryGifts.add(971001);
|
AnniverseryGifts.add(971001);
|
||||||
AnniverseryGifts.add(971002);
|
AnniverseryGifts.add(971002);
|
||||||
@@ -468,6 +479,15 @@ public class ItemBase {
|
|||||||
if (!validForSkills(abstractCharacter.getSkills()))
|
if (!validForSkills(abstractCharacter.getSkills()))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if (!validRace(item.getItemBase(), abstractCharacter))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (!validClass(item.getItemBase(), abstractCharacter))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (!validDisc(item.getItemBase(), abstractCharacter))
|
||||||
|
return false;
|
||||||
|
|
||||||
return item.getItemBase().value != 0 || Kit.IsNoobGear(item.getItemBase().uuid);
|
return item.getItemBase().value != 0 || Kit.IsNoobGear(item.getItemBase().uuid);
|
||||||
//players can't wear 0 value items.
|
//players can't wear 0 value items.
|
||||||
|
|
||||||
@@ -476,6 +496,33 @@ public class ItemBase {
|
|||||||
return true; //Mobiles and NPC's don't need to check equip
|
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() {
|
public int getValidSlot() {
|
||||||
int slotValue = 0;
|
int slotValue = 0;
|
||||||
|
|
||||||
@@ -931,4 +978,43 @@ public class ItemBase {
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void LoadRequirements(String racesRequired, String racesRestricted, String classesRequired, String classesRestricted, String discsRequired, String discsRestricted){
|
||||||
|
this.requiredRaces = new ArrayList<>();
|
||||||
|
this.restrictedRaces = new ArrayList<>();
|
||||||
|
this.requiredClasses = new ArrayList<>();
|
||||||
|
this.restrictedClasses = new ArrayList<>();
|
||||||
|
this.requiredDiscs = new ArrayList<>();
|
||||||
|
this.restrictedDiscs = new ArrayList<>();
|
||||||
|
if(racesRequired != null){
|
||||||
|
for(String entry : racesRequired.split(";")){
|
||||||
|
requiredRaces.add(Enum.MonsterType.valueOf(entry));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(racesRestricted != null){
|
||||||
|
for(String entry : racesRestricted.split(";")){
|
||||||
|
restrictedRaces.add(Enum.MonsterType.valueOf(entry));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(classesRequired != null){
|
||||||
|
for(String entry : classesRequired.split(";")){
|
||||||
|
requiredClasses.add(Enum.PromoteType.valueOf(entry));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(classesRestricted != null){
|
||||||
|
for(String entry : classesRestricted.split(";")){
|
||||||
|
restrictedClasses.add(Enum.PromoteType.valueOf(entry));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(discsRequired != null){
|
||||||
|
for(String entry : discsRequired.split(";")){
|
||||||
|
//TODO find way to load disc runebaseID from name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(discsRestricted != null){
|
||||||
|
for(String entry : discsRestricted.split(";")) {
|
||||||
|
//TODO find way to load disc runebaseID from name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4559,6 +4559,17 @@ public class PlayerCharacter extends AbstractCharacter {
|
|||||||
Bounds playerBounds = Bounds.borrow();
|
Bounds playerBounds = Bounds.borrow();
|
||||||
playerBounds.setBounds(this.getLoc());
|
playerBounds.setBounds(this.getLoc());
|
||||||
this.setBounds(playerBounds);
|
this.setBounds(playerBounds);
|
||||||
|
|
||||||
|
//assign enum values for restrictions
|
||||||
|
this.absRace = Enum.MonsterType.valueOf(this.getRace().getName().replace("-",""));
|
||||||
|
|
||||||
|
if(this.promotionClass != null)
|
||||||
|
this.absClass = Enum.PromoteType.valueOf(this.getPromotionClass().getName());
|
||||||
|
|
||||||
|
if(this.isMale())
|
||||||
|
this.absGender = SexType.MALE;
|
||||||
|
else
|
||||||
|
this.absGender = SexType.FEMALE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user