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 extends AbstractSQLQuery>, ?, ?, ?, ?, ?> 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";