diff --git a/l2jserver2-common/src/main/java/com/l2jserver/service/database/orientdb/AbstractOrientDatabaseService.java b/l2jserver2-common/src/main/java/com/l2jserver/service/database/orientdb/AbstractOrientDatabaseService.java index ccef28889..dabb2bb86 100644 --- a/l2jserver2-common/src/main/java/com/l2jserver/service/database/orientdb/AbstractOrientDatabaseService.java +++ b/l2jserver2-common/src/main/java/com/l2jserver/service/database/orientdb/AbstractOrientDatabaseService.java @@ -1069,7 +1069,7 @@ public abstract class AbstractOrientDatabaseService extends @Override public boolean filter(OQueryContextNative record) { - record = query(record); + record = query(record, entity); if (record == null) return true; return record.go(); @@ -1084,8 +1084,11 @@ public abstract class AbstractOrientDatabaseService extends * * @param record * the document record + * @param e + * the entity * @return the record instance or null */ - protected abstract OQueryContextNative query(OQueryContextNative record); + protected abstract OQueryContextNative query( + OQueryContextNative record, E e); } } diff --git a/l2jserver2-common/src/main/java/com/l2jserver/service/database/sql/AbstractSQLDatabaseService.java b/l2jserver2-common/src/main/java/com/l2jserver/service/database/sql/AbstractSQLDatabaseService.java index b5da03520..82fd5ad77 100644 --- a/l2jserver2-common/src/main/java/com/l2jserver/service/database/sql/AbstractSQLDatabaseService.java +++ b/l2jserver2-common/src/main/java/com/l2jserver/service/database/sql/AbstractSQLDatabaseService.java @@ -1094,7 +1094,7 @@ public abstract class AbstractSQLDatabaseService extends SQLQueryFactory, ?, ?, ?, ?, ?> factory, DatabaseService database) { final AbstractSQLQuery count = factory.query().from(entity); - query(count); + query(count, entity); return (int) count.count(); } @@ -1103,7 +1103,8 @@ public abstract class AbstractSQLDatabaseService extends * * @param q * the query clause + * @param e the entity */ - protected abstract void query(AbstractSQLQuery q); + protected abstract void query(AbstractSQLQuery q, E e); } } diff --git a/l2jserver2-gameserver/src/main/java/com/l2jserver/model/dao/CharacterDAO.java b/l2jserver2-gameserver/src/main/java/com/l2jserver/model/dao/CharacterDAO.java index 75d11a51b..d3bf75566 100644 --- a/l2jserver2-gameserver/src/main/java/com/l2jserver/model/dao/CharacterDAO.java +++ b/l2jserver2-gameserver/src/main/java/com/l2jserver/model/dao/CharacterDAO.java @@ -58,4 +58,13 @@ public interface CharacterDAO extends * characters. */ List selectByAccount(AccountID account); + + /** + * Counts the amount of characters for an given account. + * + * @param account + * the account id + * @return the number of characters for that account + */ + int countByAccount(AccountID account); } diff --git a/l2jserver2-gameserver/src/main/java/com/l2jserver/service/database/dao/orientdb/OrientDBCharacterDAO.java b/l2jserver2-gameserver/src/main/java/com/l2jserver/service/database/dao/orientdb/OrientDBCharacterDAO.java index f27dcd0f6..754de88e0 100644 --- a/l2jserver2-gameserver/src/main/java/com/l2jserver/service/database/dao/orientdb/OrientDBCharacterDAO.java +++ b/l2jserver2-gameserver/src/main/java/com/l2jserver/service/database/dao/orientdb/OrientDBCharacterDAO.java @@ -29,6 +29,7 @@ import com.l2jserver.service.database.DatabaseService; import com.l2jserver.service.database.mapper.CharacterMapper; import com.l2jserver.service.database.model.QCharacter; import com.l2jserver.service.database.orientdb.AbstractOrientDBDAO; +import com.l2jserver.service.database.orientdb.AbstractOrientDatabaseService.CountQuery; import com.l2jserver.service.database.orientdb.AbstractOrientDatabaseService.DeleteQuery; import com.l2jserver.service.database.orientdb.AbstractOrientDatabaseService.InsertQuery; import com.l2jserver.service.database.orientdb.AbstractOrientDatabaseService.SelectListQuery; @@ -117,6 +118,17 @@ public class OrientDBCharacterDAO extends }); } + @Override + public int countByAccount(final AccountID account) { + return database.query(new CountQuery(QCharacter.character) { + @Override + protected OQueryContextNative query(OQueryContextNative record, + QCharacter e) { + return record.field(name(e.accountId)).eq(account.getID()); + } + }); + } + @Override public List selectIDs() { return database @@ -145,7 +157,8 @@ public class OrientDBCharacterDAO extends @Override protected OQueryContextNative query(OQueryContextNative record, L2Character o) { - return record.field(name(entity.characterId)).eq(o.getID().getID()); + return record.field(name(entity.characterId)).eq( + o.getID().getID()); } }); } @@ -157,7 +170,8 @@ public class OrientDBCharacterDAO extends @Override protected OQueryContextNative query(OQueryContextNative record, L2Character o) { - return record.field(name(entity.characterId)).eq(o.getID().getID()); + return record.field(name(entity.characterId)).eq( + o.getID().getID()); } }); } diff --git a/l2jserver2-gameserver/src/main/java/com/l2jserver/service/database/dao/sql/SQLCharacterDAO.java b/l2jserver2-gameserver/src/main/java/com/l2jserver/service/database/dao/sql/SQLCharacterDAO.java index 5fcfa18d7..3e675ff2b 100644 --- a/l2jserver2-gameserver/src/main/java/com/l2jserver/service/database/dao/sql/SQLCharacterDAO.java +++ b/l2jserver2-gameserver/src/main/java/com/l2jserver/service/database/dao/sql/SQLCharacterDAO.java @@ -29,6 +29,7 @@ import com.l2jserver.service.database.DatabaseService; import com.l2jserver.service.database.mapper.CharacterMapper; import com.l2jserver.service.database.model.QCharacter; import com.l2jserver.service.database.sql.AbstractSQLDAO; +import com.l2jserver.service.database.sql.AbstractSQLDatabaseService.CountQuery; import com.l2jserver.service.database.sql.AbstractSQLDatabaseService.DeleteQuery; import com.l2jserver.service.database.sql.AbstractSQLDatabaseService.InsertQuery; import com.l2jserver.service.database.sql.AbstractSQLDatabaseService.SelectListQuery; @@ -113,6 +114,16 @@ public class SQLCharacterDAO extends AbstractSQLDAO }); } + @Override + public int countByAccount(final AccountID account) { + return database.query(new CountQuery(QCharacter.character) { + @Override + protected void query(AbstractSQLQuery q, QCharacter e) { + q.where(e.accountId.eq(account.getID())); + } + }); + } + @Override public List selectIDs() { return database diff --git a/l2jserver2-gameserver/src/main/java/com/l2jserver/service/game/character/CharacterServiceImpl.java b/l2jserver2-gameserver/src/main/java/com/l2jserver/service/game/character/CharacterServiceImpl.java index db0a445f4..86641c951 100644 --- a/l2jserver2-gameserver/src/main/java/com/l2jserver/service/game/character/CharacterServiceImpl.java +++ b/l2jserver2-gameserver/src/main/java/com/l2jserver/service/game/character/CharacterServiceImpl.java @@ -161,10 +161,10 @@ public class CharacterServiceImpl extends */ @Inject public CharacterServiceImpl(BroadcastService broadcastService, - WorldEventDispatcherService eventDispatcher, SpawnService spawnService, - NPCService npcService, GameGuardService ggService, - CharacterDAO characterDao, ItemDAO itemDao, - CharacterShortcutDAO shortcutDao, + WorldEventDispatcherService eventDispatcher, + SpawnService spawnService, NPCService npcService, + GameGuardService ggService, CharacterDAO characterDao, + ItemDAO itemDao, CharacterShortcutDAO shortcutDao, CharacterTemplateIDProvider charTemplateIdProvider, CharacterIDProvider charIdProvider) { super(CharacterServiceConfiguration.class); @@ -184,7 +184,7 @@ public class CharacterServiceImpl extends public boolean canCreate(AccountID accountID) { if (!config.isCharacterCreationAllowed()) return false; - return characterDao.selectByAccount(accountID).size() < config + return characterDao.countByAccount(accountID) < config .getMaxCharactersPerAccount(); } @@ -199,7 +199,7 @@ public class CharacterServiceImpl extends CharacterInvalidSexException, TooManyCharactersException { if (!config.isCharacterCreationAllowed()) throw new CharacteCreationNotAllowedException(); - if(characterDao.selectByAccount(accountID).size() < config + if (characterDao.countByAccount(accountID) < config .getMaxCharactersPerAccount()) throw new TooManyCharactersException(); diff --git a/l2jserver2-tools/src/main/java/com/l2jserver/model/template/SkillTemplateConverter.java b/l2jserver2-tools/src/main/java/com/l2jserver/model/template/SkillTemplateConverter.java index e892812c1..4ac0f87ef 100644 --- a/l2jserver2-tools/src/main/java/com/l2jserver/model/template/SkillTemplateConverter.java +++ b/l2jserver2-tools/src/main/java/com/l2jserver/model/template/SkillTemplateConverter.java @@ -47,7 +47,6 @@ import com.l2jserver.util.factory.CollectionFactory; import com.sun.org.apache.xml.internal.serialize.OutputFormat; import com.sun.org.apache.xml.internal.serialize.XMLSerializer; -@SuppressWarnings("restriction") public class SkillTemplateConverter { private static final String JDBC_URL = "jdbc:mysql://localhost/l2jlegacy"; private static final String JDBC_USERNAME = "l2j";