From 0f64cdbf4259d925f75bcf73e664d0b2abbc11bd Mon Sep 17 00:00:00 2001 From: MobiusDev <8391001+MobiusDevelopment@users.noreply.github.com> Date: Sat, 18 Nov 2017 22:20:23 +0000 Subject: [PATCH] Load premium account status on player login. --- .../admincommandhandlers/AdminPremium.java | 2 +- .../instancemanager/PremiumManager.java | 52 +++++++++---------- .../admincommandhandlers/AdminPremium.java | 2 +- .../instancemanager/PremiumManager.java | 52 +++++++++---------- .../admincommandhandlers/AdminPremium.java | 2 +- .../instancemanager/PremiumManager.java | 52 +++++++++---------- .../admincommandhandlers/AdminPremium.java | 2 +- .../instancemanager/PremiumManager.java | 52 +++++++++---------- .../admincommandhandlers/AdminPremium.java | 2 +- .../instancemanager/PremiumManager.java | 51 +++++++++--------- .../admincommandhandlers/AdminPremium.java | 2 +- .../instancemanager/PremiumManager.java | 52 +++++++++---------- 12 files changed, 150 insertions(+), 173 deletions(-) diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminPremium.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminPremium.java index 8e0358ffc7..d32d9539e0 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminPremium.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminPremium.java @@ -151,7 +151,7 @@ public class AdminPremium implements IAdminCommandHandler if (PremiumManager.getInstance().getPremiumExpiration(accountName) > 0) { - PremiumManager.getInstance().removePremiumStatus(accountName); + PremiumManager.getInstance().removePremiumStatus(accountName, true); admin.sendMessage("Account " + accountName + " has no longer premium status."); } else diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/instancemanager/PremiumManager.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/instancemanager/PremiumManager.java index 93eca615a9..a00a108524 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/instancemanager/PremiumManager.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/instancemanager/PremiumManager.java @@ -25,7 +25,6 @@ import java.util.Map; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; -import java.util.logging.Logger; import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.gameserver.ThreadPoolManager; @@ -37,19 +36,15 @@ import com.l2jmobius.gameserver.model.events.ListenersContainer; import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerLogin; import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerLogout; import com.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; -import com.l2jmobius.gameserver.network.serverpackets.ExBrPremiumState; /** * @author Mobius */ public class PremiumManager { - private static final Logger LOGGER = Logger.getLogger(PremiumManager.class.getName()); - // SQL Statement - private static final String LOAD_SQL = "SELECT account_name,enddate FROM account_premium"; - private static final String UPDATE_SQL = "UPDATE account_premium SET enddate = ? WHERE account_name = ?"; - private static final String ADD_SQL = "INSERT INTO account_premium (enddate,account_name) VALUE (?,?)"; + private static final String LOAD_SQL = "SELECT account_name,enddate FROM account_premium WHERE account_name = ?"; + private static final String UPDATE_SQL = "REPLACE INTO account_premium (enddate,account_name) VALUE (?,?)"; private static final String DELETE_SQL = "DELETE FROM account_premium WHERE account_name = ?"; class PremiumExpireTask implements Runnable @@ -65,7 +60,6 @@ public class PremiumManager public void run() { player.setPremiumStatus(false); - player.sendPacket(new ExBrPremiumState(player)); } } @@ -82,15 +76,19 @@ public class PremiumManager { final L2PcInstance player = event.getActiveChar(); final String accountName = player.getAccountName(); + loadPremiumData(accountName); final long now = System.currentTimeMillis(); final long premiumExpiration = getPremiumExpiration(accountName); player.setPremiumStatus(premiumExpiration > now); - player.sendPacket(new ExBrPremiumState(player)); if (player.hasPremiumStatus()) { startExpireTask(player, premiumExpiration - now); } + else + { + removePremiumStatus(accountName, false); + } }; private final Consumer playerLogoutEvent = (event) -> @@ -101,7 +99,6 @@ public class PremiumManager protected PremiumManager() { - loadPremiumData(); listenerContainer.addListener(new ConsumerEventListener(listenerContainer, EventType.ON_PLAYER_LOGIN, playerLoginEvent, this)); listenerContainer.addListener(new ConsumerEventListener(listenerContainer, EventType.ON_PLAYER_LOGOUT, playerLogoutEvent, this)); } @@ -129,24 +126,24 @@ public class PremiumManager } } - private void loadPremiumData() + private void loadPremiumData(String accountName) { try (Connection con = DatabaseFactory.getInstance().getConnection(); - PreparedStatement statement = con.prepareStatement(LOAD_SQL); - ResultSet rset = statement.executeQuery()) + PreparedStatement stmt = con.prepareStatement(LOAD_SQL)) { - while (rset.next()) + stmt.setString(1, accountName); + try (ResultSet rset = stmt.executeQuery()) { - premiumData.put(rset.getString(1), rset.getLong(2)); + while (rset.next()) + { + premiumData.put(rset.getString(1), rset.getLong(2)); + } } } catch (SQLException e) { e.printStackTrace(); } - - long expiredData = premiumData.values().stream().filter(d -> d < System.currentTimeMillis()).count(); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + premiumData.size() + " premium data (" + expiredData + " have expired)"); } public long getPremiumExpiration(String accountName) @@ -162,11 +159,9 @@ public class PremiumManager long oldPremiumExpiration = Math.max(now, getPremiumExpiration(accountName)); long newPremiumExpiration = oldPremiumExpiration + addTime; - String sqlCmd = premiumData.containsKey(accountName) ? UPDATE_SQL : ADD_SQL; - // UPDATE DATABASE try (Connection con = DatabaseFactory.getInstance().getConnection(); - PreparedStatement stmt = con.prepareStatement(sqlCmd)) + PreparedStatement stmt = con.prepareStatement(UPDATE_SQL)) { stmt.setLong(1, newPremiumExpiration); stmt.setString(2, accountName); @@ -190,19 +185,20 @@ public class PremiumManager if (!playerOnline.hasPremiumStatus()) { playerOnline.setPremiumStatus(true); - playerOnline.sendPacket(new ExBrPremiumState(playerOnline)); } } } - public void removePremiumStatus(String accountName) + public void removePremiumStatus(String accountName, boolean checkOnline) { - L2PcInstance playerOnline = L2World.getInstance().getPlayers().stream().filter(p -> accountName.equals(p.getAccountName())).findFirst().orElse(null); - if ((playerOnline != null) && playerOnline.hasPremiumStatus()) + if (checkOnline) { - playerOnline.setPremiumStatus(false); - playerOnline.sendPacket(new ExBrPremiumState(playerOnline)); - stopExpireTask(playerOnline); + L2PcInstance playerOnline = L2World.getInstance().getPlayers().stream().filter(p -> accountName.equals(p.getAccountName())).findFirst().orElse(null); + if ((playerOnline != null) && playerOnline.hasPremiumStatus()) + { + playerOnline.setPremiumStatus(false); + stopExpireTask(playerOnline); + } } // UPDATE CACHE diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminPremium.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminPremium.java index 8e0358ffc7..d32d9539e0 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminPremium.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminPremium.java @@ -151,7 +151,7 @@ public class AdminPremium implements IAdminCommandHandler if (PremiumManager.getInstance().getPremiumExpiration(accountName) > 0) { - PremiumManager.getInstance().removePremiumStatus(accountName); + PremiumManager.getInstance().removePremiumStatus(accountName, true); admin.sendMessage("Account " + accountName + " has no longer premium status."); } else diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/instancemanager/PremiumManager.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/instancemanager/PremiumManager.java index 93eca615a9..a00a108524 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/instancemanager/PremiumManager.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/instancemanager/PremiumManager.java @@ -25,7 +25,6 @@ import java.util.Map; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; -import java.util.logging.Logger; import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.gameserver.ThreadPoolManager; @@ -37,19 +36,15 @@ import com.l2jmobius.gameserver.model.events.ListenersContainer; import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerLogin; import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerLogout; import com.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; -import com.l2jmobius.gameserver.network.serverpackets.ExBrPremiumState; /** * @author Mobius */ public class PremiumManager { - private static final Logger LOGGER = Logger.getLogger(PremiumManager.class.getName()); - // SQL Statement - private static final String LOAD_SQL = "SELECT account_name,enddate FROM account_premium"; - private static final String UPDATE_SQL = "UPDATE account_premium SET enddate = ? WHERE account_name = ?"; - private static final String ADD_SQL = "INSERT INTO account_premium (enddate,account_name) VALUE (?,?)"; + private static final String LOAD_SQL = "SELECT account_name,enddate FROM account_premium WHERE account_name = ?"; + private static final String UPDATE_SQL = "REPLACE INTO account_premium (enddate,account_name) VALUE (?,?)"; private static final String DELETE_SQL = "DELETE FROM account_premium WHERE account_name = ?"; class PremiumExpireTask implements Runnable @@ -65,7 +60,6 @@ public class PremiumManager public void run() { player.setPremiumStatus(false); - player.sendPacket(new ExBrPremiumState(player)); } } @@ -82,15 +76,19 @@ public class PremiumManager { final L2PcInstance player = event.getActiveChar(); final String accountName = player.getAccountName(); + loadPremiumData(accountName); final long now = System.currentTimeMillis(); final long premiumExpiration = getPremiumExpiration(accountName); player.setPremiumStatus(premiumExpiration > now); - player.sendPacket(new ExBrPremiumState(player)); if (player.hasPremiumStatus()) { startExpireTask(player, premiumExpiration - now); } + else + { + removePremiumStatus(accountName, false); + } }; private final Consumer playerLogoutEvent = (event) -> @@ -101,7 +99,6 @@ public class PremiumManager protected PremiumManager() { - loadPremiumData(); listenerContainer.addListener(new ConsumerEventListener(listenerContainer, EventType.ON_PLAYER_LOGIN, playerLoginEvent, this)); listenerContainer.addListener(new ConsumerEventListener(listenerContainer, EventType.ON_PLAYER_LOGOUT, playerLogoutEvent, this)); } @@ -129,24 +126,24 @@ public class PremiumManager } } - private void loadPremiumData() + private void loadPremiumData(String accountName) { try (Connection con = DatabaseFactory.getInstance().getConnection(); - PreparedStatement statement = con.prepareStatement(LOAD_SQL); - ResultSet rset = statement.executeQuery()) + PreparedStatement stmt = con.prepareStatement(LOAD_SQL)) { - while (rset.next()) + stmt.setString(1, accountName); + try (ResultSet rset = stmt.executeQuery()) { - premiumData.put(rset.getString(1), rset.getLong(2)); + while (rset.next()) + { + premiumData.put(rset.getString(1), rset.getLong(2)); + } } } catch (SQLException e) { e.printStackTrace(); } - - long expiredData = premiumData.values().stream().filter(d -> d < System.currentTimeMillis()).count(); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + premiumData.size() + " premium data (" + expiredData + " have expired)"); } public long getPremiumExpiration(String accountName) @@ -162,11 +159,9 @@ public class PremiumManager long oldPremiumExpiration = Math.max(now, getPremiumExpiration(accountName)); long newPremiumExpiration = oldPremiumExpiration + addTime; - String sqlCmd = premiumData.containsKey(accountName) ? UPDATE_SQL : ADD_SQL; - // UPDATE DATABASE try (Connection con = DatabaseFactory.getInstance().getConnection(); - PreparedStatement stmt = con.prepareStatement(sqlCmd)) + PreparedStatement stmt = con.prepareStatement(UPDATE_SQL)) { stmt.setLong(1, newPremiumExpiration); stmt.setString(2, accountName); @@ -190,19 +185,20 @@ public class PremiumManager if (!playerOnline.hasPremiumStatus()) { playerOnline.setPremiumStatus(true); - playerOnline.sendPacket(new ExBrPremiumState(playerOnline)); } } } - public void removePremiumStatus(String accountName) + public void removePremiumStatus(String accountName, boolean checkOnline) { - L2PcInstance playerOnline = L2World.getInstance().getPlayers().stream().filter(p -> accountName.equals(p.getAccountName())).findFirst().orElse(null); - if ((playerOnline != null) && playerOnline.hasPremiumStatus()) + if (checkOnline) { - playerOnline.setPremiumStatus(false); - playerOnline.sendPacket(new ExBrPremiumState(playerOnline)); - stopExpireTask(playerOnline); + L2PcInstance playerOnline = L2World.getInstance().getPlayers().stream().filter(p -> accountName.equals(p.getAccountName())).findFirst().orElse(null); + if ((playerOnline != null) && playerOnline.hasPremiumStatus()) + { + playerOnline.setPremiumStatus(false); + stopExpireTask(playerOnline); + } } // UPDATE CACHE diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminPremium.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminPremium.java index 8e0358ffc7..d32d9539e0 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminPremium.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminPremium.java @@ -151,7 +151,7 @@ public class AdminPremium implements IAdminCommandHandler if (PremiumManager.getInstance().getPremiumExpiration(accountName) > 0) { - PremiumManager.getInstance().removePremiumStatus(accountName); + PremiumManager.getInstance().removePremiumStatus(accountName, true); admin.sendMessage("Account " + accountName + " has no longer premium status."); } else diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/instancemanager/PremiumManager.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/instancemanager/PremiumManager.java index 93eca615a9..a00a108524 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/instancemanager/PremiumManager.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/instancemanager/PremiumManager.java @@ -25,7 +25,6 @@ import java.util.Map; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; -import java.util.logging.Logger; import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.gameserver.ThreadPoolManager; @@ -37,19 +36,15 @@ import com.l2jmobius.gameserver.model.events.ListenersContainer; import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerLogin; import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerLogout; import com.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; -import com.l2jmobius.gameserver.network.serverpackets.ExBrPremiumState; /** * @author Mobius */ public class PremiumManager { - private static final Logger LOGGER = Logger.getLogger(PremiumManager.class.getName()); - // SQL Statement - private static final String LOAD_SQL = "SELECT account_name,enddate FROM account_premium"; - private static final String UPDATE_SQL = "UPDATE account_premium SET enddate = ? WHERE account_name = ?"; - private static final String ADD_SQL = "INSERT INTO account_premium (enddate,account_name) VALUE (?,?)"; + private static final String LOAD_SQL = "SELECT account_name,enddate FROM account_premium WHERE account_name = ?"; + private static final String UPDATE_SQL = "REPLACE INTO account_premium (enddate,account_name) VALUE (?,?)"; private static final String DELETE_SQL = "DELETE FROM account_premium WHERE account_name = ?"; class PremiumExpireTask implements Runnable @@ -65,7 +60,6 @@ public class PremiumManager public void run() { player.setPremiumStatus(false); - player.sendPacket(new ExBrPremiumState(player)); } } @@ -82,15 +76,19 @@ public class PremiumManager { final L2PcInstance player = event.getActiveChar(); final String accountName = player.getAccountName(); + loadPremiumData(accountName); final long now = System.currentTimeMillis(); final long premiumExpiration = getPremiumExpiration(accountName); player.setPremiumStatus(premiumExpiration > now); - player.sendPacket(new ExBrPremiumState(player)); if (player.hasPremiumStatus()) { startExpireTask(player, premiumExpiration - now); } + else + { + removePremiumStatus(accountName, false); + } }; private final Consumer playerLogoutEvent = (event) -> @@ -101,7 +99,6 @@ public class PremiumManager protected PremiumManager() { - loadPremiumData(); listenerContainer.addListener(new ConsumerEventListener(listenerContainer, EventType.ON_PLAYER_LOGIN, playerLoginEvent, this)); listenerContainer.addListener(new ConsumerEventListener(listenerContainer, EventType.ON_PLAYER_LOGOUT, playerLogoutEvent, this)); } @@ -129,24 +126,24 @@ public class PremiumManager } } - private void loadPremiumData() + private void loadPremiumData(String accountName) { try (Connection con = DatabaseFactory.getInstance().getConnection(); - PreparedStatement statement = con.prepareStatement(LOAD_SQL); - ResultSet rset = statement.executeQuery()) + PreparedStatement stmt = con.prepareStatement(LOAD_SQL)) { - while (rset.next()) + stmt.setString(1, accountName); + try (ResultSet rset = stmt.executeQuery()) { - premiumData.put(rset.getString(1), rset.getLong(2)); + while (rset.next()) + { + premiumData.put(rset.getString(1), rset.getLong(2)); + } } } catch (SQLException e) { e.printStackTrace(); } - - long expiredData = premiumData.values().stream().filter(d -> d < System.currentTimeMillis()).count(); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + premiumData.size() + " premium data (" + expiredData + " have expired)"); } public long getPremiumExpiration(String accountName) @@ -162,11 +159,9 @@ public class PremiumManager long oldPremiumExpiration = Math.max(now, getPremiumExpiration(accountName)); long newPremiumExpiration = oldPremiumExpiration + addTime; - String sqlCmd = premiumData.containsKey(accountName) ? UPDATE_SQL : ADD_SQL; - // UPDATE DATABASE try (Connection con = DatabaseFactory.getInstance().getConnection(); - PreparedStatement stmt = con.prepareStatement(sqlCmd)) + PreparedStatement stmt = con.prepareStatement(UPDATE_SQL)) { stmt.setLong(1, newPremiumExpiration); stmt.setString(2, accountName); @@ -190,19 +185,20 @@ public class PremiumManager if (!playerOnline.hasPremiumStatus()) { playerOnline.setPremiumStatus(true); - playerOnline.sendPacket(new ExBrPremiumState(playerOnline)); } } } - public void removePremiumStatus(String accountName) + public void removePremiumStatus(String accountName, boolean checkOnline) { - L2PcInstance playerOnline = L2World.getInstance().getPlayers().stream().filter(p -> accountName.equals(p.getAccountName())).findFirst().orElse(null); - if ((playerOnline != null) && playerOnline.hasPremiumStatus()) + if (checkOnline) { - playerOnline.setPremiumStatus(false); - playerOnline.sendPacket(new ExBrPremiumState(playerOnline)); - stopExpireTask(playerOnline); + L2PcInstance playerOnline = L2World.getInstance().getPlayers().stream().filter(p -> accountName.equals(p.getAccountName())).findFirst().orElse(null); + if ((playerOnline != null) && playerOnline.hasPremiumStatus()) + { + playerOnline.setPremiumStatus(false); + stopExpireTask(playerOnline); + } } // UPDATE CACHE diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/admincommandhandlers/AdminPremium.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/admincommandhandlers/AdminPremium.java index 8e0358ffc7..d32d9539e0 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/admincommandhandlers/AdminPremium.java +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/admincommandhandlers/AdminPremium.java @@ -151,7 +151,7 @@ public class AdminPremium implements IAdminCommandHandler if (PremiumManager.getInstance().getPremiumExpiration(accountName) > 0) { - PremiumManager.getInstance().removePremiumStatus(accountName); + PremiumManager.getInstance().removePremiumStatus(accountName, true); admin.sendMessage("Account " + accountName + " has no longer premium status."); } else diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/instancemanager/PremiumManager.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/instancemanager/PremiumManager.java index 93eca615a9..a00a108524 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/instancemanager/PremiumManager.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/instancemanager/PremiumManager.java @@ -25,7 +25,6 @@ import java.util.Map; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; -import java.util.logging.Logger; import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.gameserver.ThreadPoolManager; @@ -37,19 +36,15 @@ import com.l2jmobius.gameserver.model.events.ListenersContainer; import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerLogin; import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerLogout; import com.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; -import com.l2jmobius.gameserver.network.serverpackets.ExBrPremiumState; /** * @author Mobius */ public class PremiumManager { - private static final Logger LOGGER = Logger.getLogger(PremiumManager.class.getName()); - // SQL Statement - private static final String LOAD_SQL = "SELECT account_name,enddate FROM account_premium"; - private static final String UPDATE_SQL = "UPDATE account_premium SET enddate = ? WHERE account_name = ?"; - private static final String ADD_SQL = "INSERT INTO account_premium (enddate,account_name) VALUE (?,?)"; + private static final String LOAD_SQL = "SELECT account_name,enddate FROM account_premium WHERE account_name = ?"; + private static final String UPDATE_SQL = "REPLACE INTO account_premium (enddate,account_name) VALUE (?,?)"; private static final String DELETE_SQL = "DELETE FROM account_premium WHERE account_name = ?"; class PremiumExpireTask implements Runnable @@ -65,7 +60,6 @@ public class PremiumManager public void run() { player.setPremiumStatus(false); - player.sendPacket(new ExBrPremiumState(player)); } } @@ -82,15 +76,19 @@ public class PremiumManager { final L2PcInstance player = event.getActiveChar(); final String accountName = player.getAccountName(); + loadPremiumData(accountName); final long now = System.currentTimeMillis(); final long premiumExpiration = getPremiumExpiration(accountName); player.setPremiumStatus(premiumExpiration > now); - player.sendPacket(new ExBrPremiumState(player)); if (player.hasPremiumStatus()) { startExpireTask(player, premiumExpiration - now); } + else + { + removePremiumStatus(accountName, false); + } }; private final Consumer playerLogoutEvent = (event) -> @@ -101,7 +99,6 @@ public class PremiumManager protected PremiumManager() { - loadPremiumData(); listenerContainer.addListener(new ConsumerEventListener(listenerContainer, EventType.ON_PLAYER_LOGIN, playerLoginEvent, this)); listenerContainer.addListener(new ConsumerEventListener(listenerContainer, EventType.ON_PLAYER_LOGOUT, playerLogoutEvent, this)); } @@ -129,24 +126,24 @@ public class PremiumManager } } - private void loadPremiumData() + private void loadPremiumData(String accountName) { try (Connection con = DatabaseFactory.getInstance().getConnection(); - PreparedStatement statement = con.prepareStatement(LOAD_SQL); - ResultSet rset = statement.executeQuery()) + PreparedStatement stmt = con.prepareStatement(LOAD_SQL)) { - while (rset.next()) + stmt.setString(1, accountName); + try (ResultSet rset = stmt.executeQuery()) { - premiumData.put(rset.getString(1), rset.getLong(2)); + while (rset.next()) + { + premiumData.put(rset.getString(1), rset.getLong(2)); + } } } catch (SQLException e) { e.printStackTrace(); } - - long expiredData = premiumData.values().stream().filter(d -> d < System.currentTimeMillis()).count(); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + premiumData.size() + " premium data (" + expiredData + " have expired)"); } public long getPremiumExpiration(String accountName) @@ -162,11 +159,9 @@ public class PremiumManager long oldPremiumExpiration = Math.max(now, getPremiumExpiration(accountName)); long newPremiumExpiration = oldPremiumExpiration + addTime; - String sqlCmd = premiumData.containsKey(accountName) ? UPDATE_SQL : ADD_SQL; - // UPDATE DATABASE try (Connection con = DatabaseFactory.getInstance().getConnection(); - PreparedStatement stmt = con.prepareStatement(sqlCmd)) + PreparedStatement stmt = con.prepareStatement(UPDATE_SQL)) { stmt.setLong(1, newPremiumExpiration); stmt.setString(2, accountName); @@ -190,19 +185,20 @@ public class PremiumManager if (!playerOnline.hasPremiumStatus()) { playerOnline.setPremiumStatus(true); - playerOnline.sendPacket(new ExBrPremiumState(playerOnline)); } } } - public void removePremiumStatus(String accountName) + public void removePremiumStatus(String accountName, boolean checkOnline) { - L2PcInstance playerOnline = L2World.getInstance().getPlayers().stream().filter(p -> accountName.equals(p.getAccountName())).findFirst().orElse(null); - if ((playerOnline != null) && playerOnline.hasPremiumStatus()) + if (checkOnline) { - playerOnline.setPremiumStatus(false); - playerOnline.sendPacket(new ExBrPremiumState(playerOnline)); - stopExpireTask(playerOnline); + L2PcInstance playerOnline = L2World.getInstance().getPlayers().stream().filter(p -> accountName.equals(p.getAccountName())).findFirst().orElse(null); + if ((playerOnline != null) && playerOnline.hasPremiumStatus()) + { + playerOnline.setPremiumStatus(false); + stopExpireTask(playerOnline); + } } // UPDATE CACHE diff --git a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/admincommandhandlers/AdminPremium.java b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/admincommandhandlers/AdminPremium.java index d871e74ac7..5f095603af 100644 --- a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/admincommandhandlers/AdminPremium.java +++ b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/admincommandhandlers/AdminPremium.java @@ -151,7 +151,7 @@ public class AdminPremium implements IAdminCommandHandler if (PremiumManager.getInstance().getPremiumExpiration(accountName) > 0) { - PremiumManager.getInstance().removePremiumStatus(accountName); + PremiumManager.getInstance().removePremiumStatus(accountName, true); admin.sendMessage("Account " + accountName + " has no longer premium status."); } else diff --git a/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/instancemanager/PremiumManager.java b/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/instancemanager/PremiumManager.java index f44ab075b5..a00a108524 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/instancemanager/PremiumManager.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/instancemanager/PremiumManager.java @@ -25,7 +25,6 @@ import java.util.Map; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; -import java.util.logging.Logger; import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.gameserver.ThreadPoolManager; @@ -43,12 +42,9 @@ import com.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; */ public class PremiumManager { - private static final Logger LOGGER = Logger.getLogger(PremiumManager.class.getName()); - // SQL Statement - private static final String LOAD_SQL = "SELECT account_name,enddate FROM account_premium"; - private static final String UPDATE_SQL = "UPDATE account_premium SET enddate = ? WHERE account_name = ?"; - private static final String ADD_SQL = "INSERT INTO account_premium (enddate,account_name) VALUE (?,?)"; + private static final String LOAD_SQL = "SELECT account_name,enddate FROM account_premium WHERE account_name = ?"; + private static final String UPDATE_SQL = "REPLACE INTO account_premium (enddate,account_name) VALUE (?,?)"; private static final String DELETE_SQL = "DELETE FROM account_premium WHERE account_name = ?"; class PremiumExpireTask implements Runnable @@ -64,7 +60,6 @@ public class PremiumManager public void run() { player.setPremiumStatus(false); - // player.sendPacket(new ExBrPremiumState(player)); } } @@ -81,15 +76,19 @@ public class PremiumManager { final L2PcInstance player = event.getActiveChar(); final String accountName = player.getAccountName(); + loadPremiumData(accountName); final long now = System.currentTimeMillis(); final long premiumExpiration = getPremiumExpiration(accountName); player.setPremiumStatus(premiumExpiration > now); - // player.sendPacket(new ExBrPremiumState(player)); if (player.hasPremiumStatus()) { startExpireTask(player, premiumExpiration - now); } + else + { + removePremiumStatus(accountName, false); + } }; private final Consumer playerLogoutEvent = (event) -> @@ -100,7 +99,6 @@ public class PremiumManager protected PremiumManager() { - loadPremiumData(); listenerContainer.addListener(new ConsumerEventListener(listenerContainer, EventType.ON_PLAYER_LOGIN, playerLoginEvent, this)); listenerContainer.addListener(new ConsumerEventListener(listenerContainer, EventType.ON_PLAYER_LOGOUT, playerLogoutEvent, this)); } @@ -128,24 +126,24 @@ public class PremiumManager } } - private void loadPremiumData() + private void loadPremiumData(String accountName) { try (Connection con = DatabaseFactory.getInstance().getConnection(); - PreparedStatement statement = con.prepareStatement(LOAD_SQL); - ResultSet rset = statement.executeQuery()) + PreparedStatement stmt = con.prepareStatement(LOAD_SQL)) { - while (rset.next()) + stmt.setString(1, accountName); + try (ResultSet rset = stmt.executeQuery()) { - premiumData.put(rset.getString(1), rset.getLong(2)); + while (rset.next()) + { + premiumData.put(rset.getString(1), rset.getLong(2)); + } } } catch (SQLException e) { e.printStackTrace(); } - - long expiredData = premiumData.values().stream().filter(d -> d < System.currentTimeMillis()).count(); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + premiumData.size() + " premium data (" + expiredData + " have expired)"); } public long getPremiumExpiration(String accountName) @@ -161,11 +159,9 @@ public class PremiumManager long oldPremiumExpiration = Math.max(now, getPremiumExpiration(accountName)); long newPremiumExpiration = oldPremiumExpiration + addTime; - String sqlCmd = premiumData.containsKey(accountName) ? UPDATE_SQL : ADD_SQL; - // UPDATE DATABASE try (Connection con = DatabaseFactory.getInstance().getConnection(); - PreparedStatement stmt = con.prepareStatement(sqlCmd)) + PreparedStatement stmt = con.prepareStatement(UPDATE_SQL)) { stmt.setLong(1, newPremiumExpiration); stmt.setString(2, accountName); @@ -189,19 +185,20 @@ public class PremiumManager if (!playerOnline.hasPremiumStatus()) { playerOnline.setPremiumStatus(true); - // playerOnline.sendPacket(new ExBrPremiumState(playerOnline)); } } } - public void removePremiumStatus(String accountName) + public void removePremiumStatus(String accountName, boolean checkOnline) { - L2PcInstance playerOnline = L2World.getInstance().getPlayers().stream().filter(p -> accountName.equals(p.getAccountName())).findFirst().orElse(null); - if ((playerOnline != null) && playerOnline.hasPremiumStatus()) + if (checkOnline) { - playerOnline.setPremiumStatus(false); - // playerOnline.sendPacket(new ExBrPremiumState(playerOnline)); - stopExpireTask(playerOnline); + L2PcInstance playerOnline = L2World.getInstance().getPlayers().stream().filter(p -> accountName.equals(p.getAccountName())).findFirst().orElse(null); + if ((playerOnline != null) && playerOnline.hasPremiumStatus()) + { + playerOnline.setPremiumStatus(false); + stopExpireTask(playerOnline); + } } // UPDATE CACHE diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/admincommandhandlers/AdminPremium.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/admincommandhandlers/AdminPremium.java index 8e0358ffc7..d32d9539e0 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/admincommandhandlers/AdminPremium.java +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/admincommandhandlers/AdminPremium.java @@ -151,7 +151,7 @@ public class AdminPremium implements IAdminCommandHandler if (PremiumManager.getInstance().getPremiumExpiration(accountName) > 0) { - PremiumManager.getInstance().removePremiumStatus(accountName); + PremiumManager.getInstance().removePremiumStatus(accountName, true); admin.sendMessage("Account " + accountName + " has no longer premium status."); } else diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/instancemanager/PremiumManager.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/instancemanager/PremiumManager.java index 93eca615a9..a00a108524 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/instancemanager/PremiumManager.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/instancemanager/PremiumManager.java @@ -25,7 +25,6 @@ import java.util.Map; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; -import java.util.logging.Logger; import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.gameserver.ThreadPoolManager; @@ -37,19 +36,15 @@ import com.l2jmobius.gameserver.model.events.ListenersContainer; import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerLogin; import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerLogout; import com.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; -import com.l2jmobius.gameserver.network.serverpackets.ExBrPremiumState; /** * @author Mobius */ public class PremiumManager { - private static final Logger LOGGER = Logger.getLogger(PremiumManager.class.getName()); - // SQL Statement - private static final String LOAD_SQL = "SELECT account_name,enddate FROM account_premium"; - private static final String UPDATE_SQL = "UPDATE account_premium SET enddate = ? WHERE account_name = ?"; - private static final String ADD_SQL = "INSERT INTO account_premium (enddate,account_name) VALUE (?,?)"; + private static final String LOAD_SQL = "SELECT account_name,enddate FROM account_premium WHERE account_name = ?"; + private static final String UPDATE_SQL = "REPLACE INTO account_premium (enddate,account_name) VALUE (?,?)"; private static final String DELETE_SQL = "DELETE FROM account_premium WHERE account_name = ?"; class PremiumExpireTask implements Runnable @@ -65,7 +60,6 @@ public class PremiumManager public void run() { player.setPremiumStatus(false); - player.sendPacket(new ExBrPremiumState(player)); } } @@ -82,15 +76,19 @@ public class PremiumManager { final L2PcInstance player = event.getActiveChar(); final String accountName = player.getAccountName(); + loadPremiumData(accountName); final long now = System.currentTimeMillis(); final long premiumExpiration = getPremiumExpiration(accountName); player.setPremiumStatus(premiumExpiration > now); - player.sendPacket(new ExBrPremiumState(player)); if (player.hasPremiumStatus()) { startExpireTask(player, premiumExpiration - now); } + else + { + removePremiumStatus(accountName, false); + } }; private final Consumer playerLogoutEvent = (event) -> @@ -101,7 +99,6 @@ public class PremiumManager protected PremiumManager() { - loadPremiumData(); listenerContainer.addListener(new ConsumerEventListener(listenerContainer, EventType.ON_PLAYER_LOGIN, playerLoginEvent, this)); listenerContainer.addListener(new ConsumerEventListener(listenerContainer, EventType.ON_PLAYER_LOGOUT, playerLogoutEvent, this)); } @@ -129,24 +126,24 @@ public class PremiumManager } } - private void loadPremiumData() + private void loadPremiumData(String accountName) { try (Connection con = DatabaseFactory.getInstance().getConnection(); - PreparedStatement statement = con.prepareStatement(LOAD_SQL); - ResultSet rset = statement.executeQuery()) + PreparedStatement stmt = con.prepareStatement(LOAD_SQL)) { - while (rset.next()) + stmt.setString(1, accountName); + try (ResultSet rset = stmt.executeQuery()) { - premiumData.put(rset.getString(1), rset.getLong(2)); + while (rset.next()) + { + premiumData.put(rset.getString(1), rset.getLong(2)); + } } } catch (SQLException e) { e.printStackTrace(); } - - long expiredData = premiumData.values().stream().filter(d -> d < System.currentTimeMillis()).count(); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + premiumData.size() + " premium data (" + expiredData + " have expired)"); } public long getPremiumExpiration(String accountName) @@ -162,11 +159,9 @@ public class PremiumManager long oldPremiumExpiration = Math.max(now, getPremiumExpiration(accountName)); long newPremiumExpiration = oldPremiumExpiration + addTime; - String sqlCmd = premiumData.containsKey(accountName) ? UPDATE_SQL : ADD_SQL; - // UPDATE DATABASE try (Connection con = DatabaseFactory.getInstance().getConnection(); - PreparedStatement stmt = con.prepareStatement(sqlCmd)) + PreparedStatement stmt = con.prepareStatement(UPDATE_SQL)) { stmt.setLong(1, newPremiumExpiration); stmt.setString(2, accountName); @@ -190,19 +185,20 @@ public class PremiumManager if (!playerOnline.hasPremiumStatus()) { playerOnline.setPremiumStatus(true); - playerOnline.sendPacket(new ExBrPremiumState(playerOnline)); } } } - public void removePremiumStatus(String accountName) + public void removePremiumStatus(String accountName, boolean checkOnline) { - L2PcInstance playerOnline = L2World.getInstance().getPlayers().stream().filter(p -> accountName.equals(p.getAccountName())).findFirst().orElse(null); - if ((playerOnline != null) && playerOnline.hasPremiumStatus()) + if (checkOnline) { - playerOnline.setPremiumStatus(false); - playerOnline.sendPacket(new ExBrPremiumState(playerOnline)); - stopExpireTask(playerOnline); + L2PcInstance playerOnline = L2World.getInstance().getPlayers().stream().filter(p -> accountName.equals(p.getAccountName())).findFirst().orElse(null); + if ((playerOnline != null) && playerOnline.hasPremiumStatus()) + { + playerOnline.setPremiumStatus(false); + stopExpireTask(playerOnline); + } } // UPDATE CACHE