Load premium account status on player login.
This commit is contained in:
@@ -151,7 +151,7 @@ public class AdminPremium implements IAdminCommandHandler
|
|||||||
|
|
||||||
if (PremiumManager.getInstance().getPremiumExpiration(accountName) > 0)
|
if (PremiumManager.getInstance().getPremiumExpiration(accountName) > 0)
|
||||||
{
|
{
|
||||||
PremiumManager.getInstance().removePremiumStatus(accountName);
|
PremiumManager.getInstance().removePremiumStatus(accountName, true);
|
||||||
admin.sendMessage("Account " + accountName + " has no longer premium status.");
|
admin.sendMessage("Account " + accountName + " has no longer premium status.");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@@ -25,7 +25,6 @@ import java.util.Map;
|
|||||||
import java.util.concurrent.ScheduledFuture;
|
import java.util.concurrent.ScheduledFuture;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import com.l2jmobius.commons.database.DatabaseFactory;
|
import com.l2jmobius.commons.database.DatabaseFactory;
|
||||||
import com.l2jmobius.gameserver.ThreadPoolManager;
|
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.OnPlayerLogin;
|
||||||
import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerLogout;
|
import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerLogout;
|
||||||
import com.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
|
import com.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.ExBrPremiumState;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Mobius
|
* @author Mobius
|
||||||
*/
|
*/
|
||||||
public class PremiumManager
|
public class PremiumManager
|
||||||
{
|
{
|
||||||
private static final Logger LOGGER = Logger.getLogger(PremiumManager.class.getName());
|
|
||||||
|
|
||||||
// SQL Statement
|
// SQL Statement
|
||||||
private static final String LOAD_SQL = "SELECT account_name,enddate FROM account_premium";
|
private static final String LOAD_SQL = "SELECT account_name,enddate FROM account_premium WHERE account_name = ?";
|
||||||
private static final String UPDATE_SQL = "UPDATE account_premium SET enddate = ? WHERE account_name = ?";
|
private static final String UPDATE_SQL = "REPLACE INTO account_premium (enddate,account_name) VALUE (?,?)";
|
||||||
private static final String ADD_SQL = "INSERT INTO account_premium (enddate,account_name) VALUE (?,?)";
|
|
||||||
private static final String DELETE_SQL = "DELETE FROM account_premium WHERE account_name = ?";
|
private static final String DELETE_SQL = "DELETE FROM account_premium WHERE account_name = ?";
|
||||||
|
|
||||||
class PremiumExpireTask implements Runnable
|
class PremiumExpireTask implements Runnable
|
||||||
@@ -65,7 +60,6 @@ public class PremiumManager
|
|||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
player.setPremiumStatus(false);
|
player.setPremiumStatus(false);
|
||||||
player.sendPacket(new ExBrPremiumState(player));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,15 +76,19 @@ public class PremiumManager
|
|||||||
{
|
{
|
||||||
final L2PcInstance player = event.getActiveChar();
|
final L2PcInstance player = event.getActiveChar();
|
||||||
final String accountName = player.getAccountName();
|
final String accountName = player.getAccountName();
|
||||||
|
loadPremiumData(accountName);
|
||||||
final long now = System.currentTimeMillis();
|
final long now = System.currentTimeMillis();
|
||||||
final long premiumExpiration = getPremiumExpiration(accountName);
|
final long premiumExpiration = getPremiumExpiration(accountName);
|
||||||
player.setPremiumStatus(premiumExpiration > now);
|
player.setPremiumStatus(premiumExpiration > now);
|
||||||
player.sendPacket(new ExBrPremiumState(player));
|
|
||||||
|
|
||||||
if (player.hasPremiumStatus())
|
if (player.hasPremiumStatus())
|
||||||
{
|
{
|
||||||
startExpireTask(player, premiumExpiration - now);
|
startExpireTask(player, premiumExpiration - now);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
removePremiumStatus(accountName, false);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
private final Consumer<OnPlayerLogout> playerLogoutEvent = (event) ->
|
private final Consumer<OnPlayerLogout> playerLogoutEvent = (event) ->
|
||||||
@@ -101,7 +99,6 @@ public class PremiumManager
|
|||||||
|
|
||||||
protected PremiumManager()
|
protected PremiumManager()
|
||||||
{
|
{
|
||||||
loadPremiumData();
|
|
||||||
listenerContainer.addListener(new ConsumerEventListener(listenerContainer, EventType.ON_PLAYER_LOGIN, playerLoginEvent, this));
|
listenerContainer.addListener(new ConsumerEventListener(listenerContainer, EventType.ON_PLAYER_LOGIN, playerLoginEvent, this));
|
||||||
listenerContainer.addListener(new ConsumerEventListener(listenerContainer, EventType.ON_PLAYER_LOGOUT, playerLogoutEvent, 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();
|
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||||
PreparedStatement statement = con.prepareStatement(LOAD_SQL);
|
PreparedStatement stmt = con.prepareStatement(LOAD_SQL))
|
||||||
ResultSet rset = statement.executeQuery())
|
{
|
||||||
|
stmt.setString(1, accountName);
|
||||||
|
try (ResultSet rset = stmt.executeQuery())
|
||||||
{
|
{
|
||||||
while (rset.next())
|
while (rset.next())
|
||||||
{
|
{
|
||||||
premiumData.put(rset.getString(1), rset.getLong(2));
|
premiumData.put(rset.getString(1), rset.getLong(2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
catch (SQLException e)
|
catch (SQLException e)
|
||||||
{
|
{
|
||||||
e.printStackTrace();
|
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)
|
public long getPremiumExpiration(String accountName)
|
||||||
@@ -162,11 +159,9 @@ public class PremiumManager
|
|||||||
long oldPremiumExpiration = Math.max(now, getPremiumExpiration(accountName));
|
long oldPremiumExpiration = Math.max(now, getPremiumExpiration(accountName));
|
||||||
long newPremiumExpiration = oldPremiumExpiration + addTime;
|
long newPremiumExpiration = oldPremiumExpiration + addTime;
|
||||||
|
|
||||||
String sqlCmd = premiumData.containsKey(accountName) ? UPDATE_SQL : ADD_SQL;
|
|
||||||
|
|
||||||
// UPDATE DATABASE
|
// UPDATE DATABASE
|
||||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||||
PreparedStatement stmt = con.prepareStatement(sqlCmd))
|
PreparedStatement stmt = con.prepareStatement(UPDATE_SQL))
|
||||||
{
|
{
|
||||||
stmt.setLong(1, newPremiumExpiration);
|
stmt.setLong(1, newPremiumExpiration);
|
||||||
stmt.setString(2, accountName);
|
stmt.setString(2, accountName);
|
||||||
@@ -190,20 +185,21 @@ public class PremiumManager
|
|||||||
if (!playerOnline.hasPremiumStatus())
|
if (!playerOnline.hasPremiumStatus())
|
||||||
{
|
{
|
||||||
playerOnline.setPremiumStatus(true);
|
playerOnline.setPremiumStatus(true);
|
||||||
playerOnline.sendPacket(new ExBrPremiumState(playerOnline));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removePremiumStatus(String accountName)
|
public void removePremiumStatus(String accountName, boolean checkOnline)
|
||||||
|
{
|
||||||
|
if (checkOnline)
|
||||||
{
|
{
|
||||||
L2PcInstance playerOnline = L2World.getInstance().getPlayers().stream().filter(p -> accountName.equals(p.getAccountName())).findFirst().orElse(null);
|
L2PcInstance playerOnline = L2World.getInstance().getPlayers().stream().filter(p -> accountName.equals(p.getAccountName())).findFirst().orElse(null);
|
||||||
if ((playerOnline != null) && playerOnline.hasPremiumStatus())
|
if ((playerOnline != null) && playerOnline.hasPremiumStatus())
|
||||||
{
|
{
|
||||||
playerOnline.setPremiumStatus(false);
|
playerOnline.setPremiumStatus(false);
|
||||||
playerOnline.sendPacket(new ExBrPremiumState(playerOnline));
|
|
||||||
stopExpireTask(playerOnline);
|
stopExpireTask(playerOnline);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// UPDATE CACHE
|
// UPDATE CACHE
|
||||||
premiumData.remove(accountName);
|
premiumData.remove(accountName);
|
||||||
|
@@ -151,7 +151,7 @@ public class AdminPremium implements IAdminCommandHandler
|
|||||||
|
|
||||||
if (PremiumManager.getInstance().getPremiumExpiration(accountName) > 0)
|
if (PremiumManager.getInstance().getPremiumExpiration(accountName) > 0)
|
||||||
{
|
{
|
||||||
PremiumManager.getInstance().removePremiumStatus(accountName);
|
PremiumManager.getInstance().removePremiumStatus(accountName, true);
|
||||||
admin.sendMessage("Account " + accountName + " has no longer premium status.");
|
admin.sendMessage("Account " + accountName + " has no longer premium status.");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@@ -25,7 +25,6 @@ import java.util.Map;
|
|||||||
import java.util.concurrent.ScheduledFuture;
|
import java.util.concurrent.ScheduledFuture;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import com.l2jmobius.commons.database.DatabaseFactory;
|
import com.l2jmobius.commons.database.DatabaseFactory;
|
||||||
import com.l2jmobius.gameserver.ThreadPoolManager;
|
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.OnPlayerLogin;
|
||||||
import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerLogout;
|
import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerLogout;
|
||||||
import com.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
|
import com.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.ExBrPremiumState;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Mobius
|
* @author Mobius
|
||||||
*/
|
*/
|
||||||
public class PremiumManager
|
public class PremiumManager
|
||||||
{
|
{
|
||||||
private static final Logger LOGGER = Logger.getLogger(PremiumManager.class.getName());
|
|
||||||
|
|
||||||
// SQL Statement
|
// SQL Statement
|
||||||
private static final String LOAD_SQL = "SELECT account_name,enddate FROM account_premium";
|
private static final String LOAD_SQL = "SELECT account_name,enddate FROM account_premium WHERE account_name = ?";
|
||||||
private static final String UPDATE_SQL = "UPDATE account_premium SET enddate = ? WHERE account_name = ?";
|
private static final String UPDATE_SQL = "REPLACE INTO account_premium (enddate,account_name) VALUE (?,?)";
|
||||||
private static final String ADD_SQL = "INSERT INTO account_premium (enddate,account_name) VALUE (?,?)";
|
|
||||||
private static final String DELETE_SQL = "DELETE FROM account_premium WHERE account_name = ?";
|
private static final String DELETE_SQL = "DELETE FROM account_premium WHERE account_name = ?";
|
||||||
|
|
||||||
class PremiumExpireTask implements Runnable
|
class PremiumExpireTask implements Runnable
|
||||||
@@ -65,7 +60,6 @@ public class PremiumManager
|
|||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
player.setPremiumStatus(false);
|
player.setPremiumStatus(false);
|
||||||
player.sendPacket(new ExBrPremiumState(player));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,15 +76,19 @@ public class PremiumManager
|
|||||||
{
|
{
|
||||||
final L2PcInstance player = event.getActiveChar();
|
final L2PcInstance player = event.getActiveChar();
|
||||||
final String accountName = player.getAccountName();
|
final String accountName = player.getAccountName();
|
||||||
|
loadPremiumData(accountName);
|
||||||
final long now = System.currentTimeMillis();
|
final long now = System.currentTimeMillis();
|
||||||
final long premiumExpiration = getPremiumExpiration(accountName);
|
final long premiumExpiration = getPremiumExpiration(accountName);
|
||||||
player.setPremiumStatus(premiumExpiration > now);
|
player.setPremiumStatus(premiumExpiration > now);
|
||||||
player.sendPacket(new ExBrPremiumState(player));
|
|
||||||
|
|
||||||
if (player.hasPremiumStatus())
|
if (player.hasPremiumStatus())
|
||||||
{
|
{
|
||||||
startExpireTask(player, premiumExpiration - now);
|
startExpireTask(player, premiumExpiration - now);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
removePremiumStatus(accountName, false);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
private final Consumer<OnPlayerLogout> playerLogoutEvent = (event) ->
|
private final Consumer<OnPlayerLogout> playerLogoutEvent = (event) ->
|
||||||
@@ -101,7 +99,6 @@ public class PremiumManager
|
|||||||
|
|
||||||
protected PremiumManager()
|
protected PremiumManager()
|
||||||
{
|
{
|
||||||
loadPremiumData();
|
|
||||||
listenerContainer.addListener(new ConsumerEventListener(listenerContainer, EventType.ON_PLAYER_LOGIN, playerLoginEvent, this));
|
listenerContainer.addListener(new ConsumerEventListener(listenerContainer, EventType.ON_PLAYER_LOGIN, playerLoginEvent, this));
|
||||||
listenerContainer.addListener(new ConsumerEventListener(listenerContainer, EventType.ON_PLAYER_LOGOUT, playerLogoutEvent, 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();
|
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||||
PreparedStatement statement = con.prepareStatement(LOAD_SQL);
|
PreparedStatement stmt = con.prepareStatement(LOAD_SQL))
|
||||||
ResultSet rset = statement.executeQuery())
|
{
|
||||||
|
stmt.setString(1, accountName);
|
||||||
|
try (ResultSet rset = stmt.executeQuery())
|
||||||
{
|
{
|
||||||
while (rset.next())
|
while (rset.next())
|
||||||
{
|
{
|
||||||
premiumData.put(rset.getString(1), rset.getLong(2));
|
premiumData.put(rset.getString(1), rset.getLong(2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
catch (SQLException e)
|
catch (SQLException e)
|
||||||
{
|
{
|
||||||
e.printStackTrace();
|
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)
|
public long getPremiumExpiration(String accountName)
|
||||||
@@ -162,11 +159,9 @@ public class PremiumManager
|
|||||||
long oldPremiumExpiration = Math.max(now, getPremiumExpiration(accountName));
|
long oldPremiumExpiration = Math.max(now, getPremiumExpiration(accountName));
|
||||||
long newPremiumExpiration = oldPremiumExpiration + addTime;
|
long newPremiumExpiration = oldPremiumExpiration + addTime;
|
||||||
|
|
||||||
String sqlCmd = premiumData.containsKey(accountName) ? UPDATE_SQL : ADD_SQL;
|
|
||||||
|
|
||||||
// UPDATE DATABASE
|
// UPDATE DATABASE
|
||||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||||
PreparedStatement stmt = con.prepareStatement(sqlCmd))
|
PreparedStatement stmt = con.prepareStatement(UPDATE_SQL))
|
||||||
{
|
{
|
||||||
stmt.setLong(1, newPremiumExpiration);
|
stmt.setLong(1, newPremiumExpiration);
|
||||||
stmt.setString(2, accountName);
|
stmt.setString(2, accountName);
|
||||||
@@ -190,20 +185,21 @@ public class PremiumManager
|
|||||||
if (!playerOnline.hasPremiumStatus())
|
if (!playerOnline.hasPremiumStatus())
|
||||||
{
|
{
|
||||||
playerOnline.setPremiumStatus(true);
|
playerOnline.setPremiumStatus(true);
|
||||||
playerOnline.sendPacket(new ExBrPremiumState(playerOnline));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removePremiumStatus(String accountName)
|
public void removePremiumStatus(String accountName, boolean checkOnline)
|
||||||
|
{
|
||||||
|
if (checkOnline)
|
||||||
{
|
{
|
||||||
L2PcInstance playerOnline = L2World.getInstance().getPlayers().stream().filter(p -> accountName.equals(p.getAccountName())).findFirst().orElse(null);
|
L2PcInstance playerOnline = L2World.getInstance().getPlayers().stream().filter(p -> accountName.equals(p.getAccountName())).findFirst().orElse(null);
|
||||||
if ((playerOnline != null) && playerOnline.hasPremiumStatus())
|
if ((playerOnline != null) && playerOnline.hasPremiumStatus())
|
||||||
{
|
{
|
||||||
playerOnline.setPremiumStatus(false);
|
playerOnline.setPremiumStatus(false);
|
||||||
playerOnline.sendPacket(new ExBrPremiumState(playerOnline));
|
|
||||||
stopExpireTask(playerOnline);
|
stopExpireTask(playerOnline);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// UPDATE CACHE
|
// UPDATE CACHE
|
||||||
premiumData.remove(accountName);
|
premiumData.remove(accountName);
|
||||||
|
@@ -151,7 +151,7 @@ public class AdminPremium implements IAdminCommandHandler
|
|||||||
|
|
||||||
if (PremiumManager.getInstance().getPremiumExpiration(accountName) > 0)
|
if (PremiumManager.getInstance().getPremiumExpiration(accountName) > 0)
|
||||||
{
|
{
|
||||||
PremiumManager.getInstance().removePremiumStatus(accountName);
|
PremiumManager.getInstance().removePremiumStatus(accountName, true);
|
||||||
admin.sendMessage("Account " + accountName + " has no longer premium status.");
|
admin.sendMessage("Account " + accountName + " has no longer premium status.");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@@ -25,7 +25,6 @@ import java.util.Map;
|
|||||||
import java.util.concurrent.ScheduledFuture;
|
import java.util.concurrent.ScheduledFuture;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import com.l2jmobius.commons.database.DatabaseFactory;
|
import com.l2jmobius.commons.database.DatabaseFactory;
|
||||||
import com.l2jmobius.gameserver.ThreadPoolManager;
|
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.OnPlayerLogin;
|
||||||
import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerLogout;
|
import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerLogout;
|
||||||
import com.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
|
import com.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.ExBrPremiumState;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Mobius
|
* @author Mobius
|
||||||
*/
|
*/
|
||||||
public class PremiumManager
|
public class PremiumManager
|
||||||
{
|
{
|
||||||
private static final Logger LOGGER = Logger.getLogger(PremiumManager.class.getName());
|
|
||||||
|
|
||||||
// SQL Statement
|
// SQL Statement
|
||||||
private static final String LOAD_SQL = "SELECT account_name,enddate FROM account_premium";
|
private static final String LOAD_SQL = "SELECT account_name,enddate FROM account_premium WHERE account_name = ?";
|
||||||
private static final String UPDATE_SQL = "UPDATE account_premium SET enddate = ? WHERE account_name = ?";
|
private static final String UPDATE_SQL = "REPLACE INTO account_premium (enddate,account_name) VALUE (?,?)";
|
||||||
private static final String ADD_SQL = "INSERT INTO account_premium (enddate,account_name) VALUE (?,?)";
|
|
||||||
private static final String DELETE_SQL = "DELETE FROM account_premium WHERE account_name = ?";
|
private static final String DELETE_SQL = "DELETE FROM account_premium WHERE account_name = ?";
|
||||||
|
|
||||||
class PremiumExpireTask implements Runnable
|
class PremiumExpireTask implements Runnable
|
||||||
@@ -65,7 +60,6 @@ public class PremiumManager
|
|||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
player.setPremiumStatus(false);
|
player.setPremiumStatus(false);
|
||||||
player.sendPacket(new ExBrPremiumState(player));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,15 +76,19 @@ public class PremiumManager
|
|||||||
{
|
{
|
||||||
final L2PcInstance player = event.getActiveChar();
|
final L2PcInstance player = event.getActiveChar();
|
||||||
final String accountName = player.getAccountName();
|
final String accountName = player.getAccountName();
|
||||||
|
loadPremiumData(accountName);
|
||||||
final long now = System.currentTimeMillis();
|
final long now = System.currentTimeMillis();
|
||||||
final long premiumExpiration = getPremiumExpiration(accountName);
|
final long premiumExpiration = getPremiumExpiration(accountName);
|
||||||
player.setPremiumStatus(premiumExpiration > now);
|
player.setPremiumStatus(premiumExpiration > now);
|
||||||
player.sendPacket(new ExBrPremiumState(player));
|
|
||||||
|
|
||||||
if (player.hasPremiumStatus())
|
if (player.hasPremiumStatus())
|
||||||
{
|
{
|
||||||
startExpireTask(player, premiumExpiration - now);
|
startExpireTask(player, premiumExpiration - now);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
removePremiumStatus(accountName, false);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
private final Consumer<OnPlayerLogout> playerLogoutEvent = (event) ->
|
private final Consumer<OnPlayerLogout> playerLogoutEvent = (event) ->
|
||||||
@@ -101,7 +99,6 @@ public class PremiumManager
|
|||||||
|
|
||||||
protected PremiumManager()
|
protected PremiumManager()
|
||||||
{
|
{
|
||||||
loadPremiumData();
|
|
||||||
listenerContainer.addListener(new ConsumerEventListener(listenerContainer, EventType.ON_PLAYER_LOGIN, playerLoginEvent, this));
|
listenerContainer.addListener(new ConsumerEventListener(listenerContainer, EventType.ON_PLAYER_LOGIN, playerLoginEvent, this));
|
||||||
listenerContainer.addListener(new ConsumerEventListener(listenerContainer, EventType.ON_PLAYER_LOGOUT, playerLogoutEvent, 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();
|
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||||
PreparedStatement statement = con.prepareStatement(LOAD_SQL);
|
PreparedStatement stmt = con.prepareStatement(LOAD_SQL))
|
||||||
ResultSet rset = statement.executeQuery())
|
{
|
||||||
|
stmt.setString(1, accountName);
|
||||||
|
try (ResultSet rset = stmt.executeQuery())
|
||||||
{
|
{
|
||||||
while (rset.next())
|
while (rset.next())
|
||||||
{
|
{
|
||||||
premiumData.put(rset.getString(1), rset.getLong(2));
|
premiumData.put(rset.getString(1), rset.getLong(2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
catch (SQLException e)
|
catch (SQLException e)
|
||||||
{
|
{
|
||||||
e.printStackTrace();
|
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)
|
public long getPremiumExpiration(String accountName)
|
||||||
@@ -162,11 +159,9 @@ public class PremiumManager
|
|||||||
long oldPremiumExpiration = Math.max(now, getPremiumExpiration(accountName));
|
long oldPremiumExpiration = Math.max(now, getPremiumExpiration(accountName));
|
||||||
long newPremiumExpiration = oldPremiumExpiration + addTime;
|
long newPremiumExpiration = oldPremiumExpiration + addTime;
|
||||||
|
|
||||||
String sqlCmd = premiumData.containsKey(accountName) ? UPDATE_SQL : ADD_SQL;
|
|
||||||
|
|
||||||
// UPDATE DATABASE
|
// UPDATE DATABASE
|
||||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||||
PreparedStatement stmt = con.prepareStatement(sqlCmd))
|
PreparedStatement stmt = con.prepareStatement(UPDATE_SQL))
|
||||||
{
|
{
|
||||||
stmt.setLong(1, newPremiumExpiration);
|
stmt.setLong(1, newPremiumExpiration);
|
||||||
stmt.setString(2, accountName);
|
stmt.setString(2, accountName);
|
||||||
@@ -190,20 +185,21 @@ public class PremiumManager
|
|||||||
if (!playerOnline.hasPremiumStatus())
|
if (!playerOnline.hasPremiumStatus())
|
||||||
{
|
{
|
||||||
playerOnline.setPremiumStatus(true);
|
playerOnline.setPremiumStatus(true);
|
||||||
playerOnline.sendPacket(new ExBrPremiumState(playerOnline));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removePremiumStatus(String accountName)
|
public void removePremiumStatus(String accountName, boolean checkOnline)
|
||||||
|
{
|
||||||
|
if (checkOnline)
|
||||||
{
|
{
|
||||||
L2PcInstance playerOnline = L2World.getInstance().getPlayers().stream().filter(p -> accountName.equals(p.getAccountName())).findFirst().orElse(null);
|
L2PcInstance playerOnline = L2World.getInstance().getPlayers().stream().filter(p -> accountName.equals(p.getAccountName())).findFirst().orElse(null);
|
||||||
if ((playerOnline != null) && playerOnline.hasPremiumStatus())
|
if ((playerOnline != null) && playerOnline.hasPremiumStatus())
|
||||||
{
|
{
|
||||||
playerOnline.setPremiumStatus(false);
|
playerOnline.setPremiumStatus(false);
|
||||||
playerOnline.sendPacket(new ExBrPremiumState(playerOnline));
|
|
||||||
stopExpireTask(playerOnline);
|
stopExpireTask(playerOnline);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// UPDATE CACHE
|
// UPDATE CACHE
|
||||||
premiumData.remove(accountName);
|
premiumData.remove(accountName);
|
||||||
|
@@ -151,7 +151,7 @@ public class AdminPremium implements IAdminCommandHandler
|
|||||||
|
|
||||||
if (PremiumManager.getInstance().getPremiumExpiration(accountName) > 0)
|
if (PremiumManager.getInstance().getPremiumExpiration(accountName) > 0)
|
||||||
{
|
{
|
||||||
PremiumManager.getInstance().removePremiumStatus(accountName);
|
PremiumManager.getInstance().removePremiumStatus(accountName, true);
|
||||||
admin.sendMessage("Account " + accountName + " has no longer premium status.");
|
admin.sendMessage("Account " + accountName + " has no longer premium status.");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@@ -25,7 +25,6 @@ import java.util.Map;
|
|||||||
import java.util.concurrent.ScheduledFuture;
|
import java.util.concurrent.ScheduledFuture;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import com.l2jmobius.commons.database.DatabaseFactory;
|
import com.l2jmobius.commons.database.DatabaseFactory;
|
||||||
import com.l2jmobius.gameserver.ThreadPoolManager;
|
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.OnPlayerLogin;
|
||||||
import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerLogout;
|
import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerLogout;
|
||||||
import com.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
|
import com.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.ExBrPremiumState;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Mobius
|
* @author Mobius
|
||||||
*/
|
*/
|
||||||
public class PremiumManager
|
public class PremiumManager
|
||||||
{
|
{
|
||||||
private static final Logger LOGGER = Logger.getLogger(PremiumManager.class.getName());
|
|
||||||
|
|
||||||
// SQL Statement
|
// SQL Statement
|
||||||
private static final String LOAD_SQL = "SELECT account_name,enddate FROM account_premium";
|
private static final String LOAD_SQL = "SELECT account_name,enddate FROM account_premium WHERE account_name = ?";
|
||||||
private static final String UPDATE_SQL = "UPDATE account_premium SET enddate = ? WHERE account_name = ?";
|
private static final String UPDATE_SQL = "REPLACE INTO account_premium (enddate,account_name) VALUE (?,?)";
|
||||||
private static final String ADD_SQL = "INSERT INTO account_premium (enddate,account_name) VALUE (?,?)";
|
|
||||||
private static final String DELETE_SQL = "DELETE FROM account_premium WHERE account_name = ?";
|
private static final String DELETE_SQL = "DELETE FROM account_premium WHERE account_name = ?";
|
||||||
|
|
||||||
class PremiumExpireTask implements Runnable
|
class PremiumExpireTask implements Runnable
|
||||||
@@ -65,7 +60,6 @@ public class PremiumManager
|
|||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
player.setPremiumStatus(false);
|
player.setPremiumStatus(false);
|
||||||
player.sendPacket(new ExBrPremiumState(player));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,15 +76,19 @@ public class PremiumManager
|
|||||||
{
|
{
|
||||||
final L2PcInstance player = event.getActiveChar();
|
final L2PcInstance player = event.getActiveChar();
|
||||||
final String accountName = player.getAccountName();
|
final String accountName = player.getAccountName();
|
||||||
|
loadPremiumData(accountName);
|
||||||
final long now = System.currentTimeMillis();
|
final long now = System.currentTimeMillis();
|
||||||
final long premiumExpiration = getPremiumExpiration(accountName);
|
final long premiumExpiration = getPremiumExpiration(accountName);
|
||||||
player.setPremiumStatus(premiumExpiration > now);
|
player.setPremiumStatus(premiumExpiration > now);
|
||||||
player.sendPacket(new ExBrPremiumState(player));
|
|
||||||
|
|
||||||
if (player.hasPremiumStatus())
|
if (player.hasPremiumStatus())
|
||||||
{
|
{
|
||||||
startExpireTask(player, premiumExpiration - now);
|
startExpireTask(player, premiumExpiration - now);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
removePremiumStatus(accountName, false);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
private final Consumer<OnPlayerLogout> playerLogoutEvent = (event) ->
|
private final Consumer<OnPlayerLogout> playerLogoutEvent = (event) ->
|
||||||
@@ -101,7 +99,6 @@ public class PremiumManager
|
|||||||
|
|
||||||
protected PremiumManager()
|
protected PremiumManager()
|
||||||
{
|
{
|
||||||
loadPremiumData();
|
|
||||||
listenerContainer.addListener(new ConsumerEventListener(listenerContainer, EventType.ON_PLAYER_LOGIN, playerLoginEvent, this));
|
listenerContainer.addListener(new ConsumerEventListener(listenerContainer, EventType.ON_PLAYER_LOGIN, playerLoginEvent, this));
|
||||||
listenerContainer.addListener(new ConsumerEventListener(listenerContainer, EventType.ON_PLAYER_LOGOUT, playerLogoutEvent, 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();
|
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||||
PreparedStatement statement = con.prepareStatement(LOAD_SQL);
|
PreparedStatement stmt = con.prepareStatement(LOAD_SQL))
|
||||||
ResultSet rset = statement.executeQuery())
|
{
|
||||||
|
stmt.setString(1, accountName);
|
||||||
|
try (ResultSet rset = stmt.executeQuery())
|
||||||
{
|
{
|
||||||
while (rset.next())
|
while (rset.next())
|
||||||
{
|
{
|
||||||
premiumData.put(rset.getString(1), rset.getLong(2));
|
premiumData.put(rset.getString(1), rset.getLong(2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
catch (SQLException e)
|
catch (SQLException e)
|
||||||
{
|
{
|
||||||
e.printStackTrace();
|
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)
|
public long getPremiumExpiration(String accountName)
|
||||||
@@ -162,11 +159,9 @@ public class PremiumManager
|
|||||||
long oldPremiumExpiration = Math.max(now, getPremiumExpiration(accountName));
|
long oldPremiumExpiration = Math.max(now, getPremiumExpiration(accountName));
|
||||||
long newPremiumExpiration = oldPremiumExpiration + addTime;
|
long newPremiumExpiration = oldPremiumExpiration + addTime;
|
||||||
|
|
||||||
String sqlCmd = premiumData.containsKey(accountName) ? UPDATE_SQL : ADD_SQL;
|
|
||||||
|
|
||||||
// UPDATE DATABASE
|
// UPDATE DATABASE
|
||||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||||
PreparedStatement stmt = con.prepareStatement(sqlCmd))
|
PreparedStatement stmt = con.prepareStatement(UPDATE_SQL))
|
||||||
{
|
{
|
||||||
stmt.setLong(1, newPremiumExpiration);
|
stmt.setLong(1, newPremiumExpiration);
|
||||||
stmt.setString(2, accountName);
|
stmt.setString(2, accountName);
|
||||||
@@ -190,20 +185,21 @@ public class PremiumManager
|
|||||||
if (!playerOnline.hasPremiumStatus())
|
if (!playerOnline.hasPremiumStatus())
|
||||||
{
|
{
|
||||||
playerOnline.setPremiumStatus(true);
|
playerOnline.setPremiumStatus(true);
|
||||||
playerOnline.sendPacket(new ExBrPremiumState(playerOnline));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removePremiumStatus(String accountName)
|
public void removePremiumStatus(String accountName, boolean checkOnline)
|
||||||
|
{
|
||||||
|
if (checkOnline)
|
||||||
{
|
{
|
||||||
L2PcInstance playerOnline = L2World.getInstance().getPlayers().stream().filter(p -> accountName.equals(p.getAccountName())).findFirst().orElse(null);
|
L2PcInstance playerOnline = L2World.getInstance().getPlayers().stream().filter(p -> accountName.equals(p.getAccountName())).findFirst().orElse(null);
|
||||||
if ((playerOnline != null) && playerOnline.hasPremiumStatus())
|
if ((playerOnline != null) && playerOnline.hasPremiumStatus())
|
||||||
{
|
{
|
||||||
playerOnline.setPremiumStatus(false);
|
playerOnline.setPremiumStatus(false);
|
||||||
playerOnline.sendPacket(new ExBrPremiumState(playerOnline));
|
|
||||||
stopExpireTask(playerOnline);
|
stopExpireTask(playerOnline);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// UPDATE CACHE
|
// UPDATE CACHE
|
||||||
premiumData.remove(accountName);
|
premiumData.remove(accountName);
|
||||||
|
@@ -151,7 +151,7 @@ public class AdminPremium implements IAdminCommandHandler
|
|||||||
|
|
||||||
if (PremiumManager.getInstance().getPremiumExpiration(accountName) > 0)
|
if (PremiumManager.getInstance().getPremiumExpiration(accountName) > 0)
|
||||||
{
|
{
|
||||||
PremiumManager.getInstance().removePremiumStatus(accountName);
|
PremiumManager.getInstance().removePremiumStatus(accountName, true);
|
||||||
admin.sendMessage("Account " + accountName + " has no longer premium status.");
|
admin.sendMessage("Account " + accountName + " has no longer premium status.");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@@ -25,7 +25,6 @@ import java.util.Map;
|
|||||||
import java.util.concurrent.ScheduledFuture;
|
import java.util.concurrent.ScheduledFuture;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import com.l2jmobius.commons.database.DatabaseFactory;
|
import com.l2jmobius.commons.database.DatabaseFactory;
|
||||||
import com.l2jmobius.gameserver.ThreadPoolManager;
|
import com.l2jmobius.gameserver.ThreadPoolManager;
|
||||||
@@ -43,12 +42,9 @@ import com.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
|
|||||||
*/
|
*/
|
||||||
public class PremiumManager
|
public class PremiumManager
|
||||||
{
|
{
|
||||||
private static final Logger LOGGER = Logger.getLogger(PremiumManager.class.getName());
|
|
||||||
|
|
||||||
// SQL Statement
|
// SQL Statement
|
||||||
private static final String LOAD_SQL = "SELECT account_name,enddate FROM account_premium";
|
private static final String LOAD_SQL = "SELECT account_name,enddate FROM account_premium WHERE account_name = ?";
|
||||||
private static final String UPDATE_SQL = "UPDATE account_premium SET enddate = ? WHERE account_name = ?";
|
private static final String UPDATE_SQL = "REPLACE INTO account_premium (enddate,account_name) VALUE (?,?)";
|
||||||
private static final String ADD_SQL = "INSERT INTO account_premium (enddate,account_name) VALUE (?,?)";
|
|
||||||
private static final String DELETE_SQL = "DELETE FROM account_premium WHERE account_name = ?";
|
private static final String DELETE_SQL = "DELETE FROM account_premium WHERE account_name = ?";
|
||||||
|
|
||||||
class PremiumExpireTask implements Runnable
|
class PremiumExpireTask implements Runnable
|
||||||
@@ -64,7 +60,6 @@ public class PremiumManager
|
|||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
player.setPremiumStatus(false);
|
player.setPremiumStatus(false);
|
||||||
// player.sendPacket(new ExBrPremiumState(player));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,15 +76,19 @@ public class PremiumManager
|
|||||||
{
|
{
|
||||||
final L2PcInstance player = event.getActiveChar();
|
final L2PcInstance player = event.getActiveChar();
|
||||||
final String accountName = player.getAccountName();
|
final String accountName = player.getAccountName();
|
||||||
|
loadPremiumData(accountName);
|
||||||
final long now = System.currentTimeMillis();
|
final long now = System.currentTimeMillis();
|
||||||
final long premiumExpiration = getPremiumExpiration(accountName);
|
final long premiumExpiration = getPremiumExpiration(accountName);
|
||||||
player.setPremiumStatus(premiumExpiration > now);
|
player.setPremiumStatus(premiumExpiration > now);
|
||||||
// player.sendPacket(new ExBrPremiumState(player));
|
|
||||||
|
|
||||||
if (player.hasPremiumStatus())
|
if (player.hasPremiumStatus())
|
||||||
{
|
{
|
||||||
startExpireTask(player, premiumExpiration - now);
|
startExpireTask(player, premiumExpiration - now);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
removePremiumStatus(accountName, false);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
private final Consumer<OnPlayerLogout> playerLogoutEvent = (event) ->
|
private final Consumer<OnPlayerLogout> playerLogoutEvent = (event) ->
|
||||||
@@ -100,7 +99,6 @@ public class PremiumManager
|
|||||||
|
|
||||||
protected PremiumManager()
|
protected PremiumManager()
|
||||||
{
|
{
|
||||||
loadPremiumData();
|
|
||||||
listenerContainer.addListener(new ConsumerEventListener(listenerContainer, EventType.ON_PLAYER_LOGIN, playerLoginEvent, this));
|
listenerContainer.addListener(new ConsumerEventListener(listenerContainer, EventType.ON_PLAYER_LOGIN, playerLoginEvent, this));
|
||||||
listenerContainer.addListener(new ConsumerEventListener(listenerContainer, EventType.ON_PLAYER_LOGOUT, playerLogoutEvent, 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();
|
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||||
PreparedStatement statement = con.prepareStatement(LOAD_SQL);
|
PreparedStatement stmt = con.prepareStatement(LOAD_SQL))
|
||||||
ResultSet rset = statement.executeQuery())
|
{
|
||||||
|
stmt.setString(1, accountName);
|
||||||
|
try (ResultSet rset = stmt.executeQuery())
|
||||||
{
|
{
|
||||||
while (rset.next())
|
while (rset.next())
|
||||||
{
|
{
|
||||||
premiumData.put(rset.getString(1), rset.getLong(2));
|
premiumData.put(rset.getString(1), rset.getLong(2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
catch (SQLException e)
|
catch (SQLException e)
|
||||||
{
|
{
|
||||||
e.printStackTrace();
|
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)
|
public long getPremiumExpiration(String accountName)
|
||||||
@@ -161,11 +159,9 @@ public class PremiumManager
|
|||||||
long oldPremiumExpiration = Math.max(now, getPremiumExpiration(accountName));
|
long oldPremiumExpiration = Math.max(now, getPremiumExpiration(accountName));
|
||||||
long newPremiumExpiration = oldPremiumExpiration + addTime;
|
long newPremiumExpiration = oldPremiumExpiration + addTime;
|
||||||
|
|
||||||
String sqlCmd = premiumData.containsKey(accountName) ? UPDATE_SQL : ADD_SQL;
|
|
||||||
|
|
||||||
// UPDATE DATABASE
|
// UPDATE DATABASE
|
||||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||||
PreparedStatement stmt = con.prepareStatement(sqlCmd))
|
PreparedStatement stmt = con.prepareStatement(UPDATE_SQL))
|
||||||
{
|
{
|
||||||
stmt.setLong(1, newPremiumExpiration);
|
stmt.setLong(1, newPremiumExpiration);
|
||||||
stmt.setString(2, accountName);
|
stmt.setString(2, accountName);
|
||||||
@@ -189,20 +185,21 @@ public class PremiumManager
|
|||||||
if (!playerOnline.hasPremiumStatus())
|
if (!playerOnline.hasPremiumStatus())
|
||||||
{
|
{
|
||||||
playerOnline.setPremiumStatus(true);
|
playerOnline.setPremiumStatus(true);
|
||||||
// playerOnline.sendPacket(new ExBrPremiumState(playerOnline));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removePremiumStatus(String accountName)
|
public void removePremiumStatus(String accountName, boolean checkOnline)
|
||||||
|
{
|
||||||
|
if (checkOnline)
|
||||||
{
|
{
|
||||||
L2PcInstance playerOnline = L2World.getInstance().getPlayers().stream().filter(p -> accountName.equals(p.getAccountName())).findFirst().orElse(null);
|
L2PcInstance playerOnline = L2World.getInstance().getPlayers().stream().filter(p -> accountName.equals(p.getAccountName())).findFirst().orElse(null);
|
||||||
if ((playerOnline != null) && playerOnline.hasPremiumStatus())
|
if ((playerOnline != null) && playerOnline.hasPremiumStatus())
|
||||||
{
|
{
|
||||||
playerOnline.setPremiumStatus(false);
|
playerOnline.setPremiumStatus(false);
|
||||||
// playerOnline.sendPacket(new ExBrPremiumState(playerOnline));
|
|
||||||
stopExpireTask(playerOnline);
|
stopExpireTask(playerOnline);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// UPDATE CACHE
|
// UPDATE CACHE
|
||||||
premiumData.remove(accountName);
|
premiumData.remove(accountName);
|
||||||
|
@@ -151,7 +151,7 @@ public class AdminPremium implements IAdminCommandHandler
|
|||||||
|
|
||||||
if (PremiumManager.getInstance().getPremiumExpiration(accountName) > 0)
|
if (PremiumManager.getInstance().getPremiumExpiration(accountName) > 0)
|
||||||
{
|
{
|
||||||
PremiumManager.getInstance().removePremiumStatus(accountName);
|
PremiumManager.getInstance().removePremiumStatus(accountName, true);
|
||||||
admin.sendMessage("Account " + accountName + " has no longer premium status.");
|
admin.sendMessage("Account " + accountName + " has no longer premium status.");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@@ -25,7 +25,6 @@ import java.util.Map;
|
|||||||
import java.util.concurrent.ScheduledFuture;
|
import java.util.concurrent.ScheduledFuture;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import com.l2jmobius.commons.database.DatabaseFactory;
|
import com.l2jmobius.commons.database.DatabaseFactory;
|
||||||
import com.l2jmobius.gameserver.ThreadPoolManager;
|
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.OnPlayerLogin;
|
||||||
import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerLogout;
|
import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerLogout;
|
||||||
import com.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
|
import com.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
|
||||||
import com.l2jmobius.gameserver.network.serverpackets.ExBrPremiumState;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Mobius
|
* @author Mobius
|
||||||
*/
|
*/
|
||||||
public class PremiumManager
|
public class PremiumManager
|
||||||
{
|
{
|
||||||
private static final Logger LOGGER = Logger.getLogger(PremiumManager.class.getName());
|
|
||||||
|
|
||||||
// SQL Statement
|
// SQL Statement
|
||||||
private static final String LOAD_SQL = "SELECT account_name,enddate FROM account_premium";
|
private static final String LOAD_SQL = "SELECT account_name,enddate FROM account_premium WHERE account_name = ?";
|
||||||
private static final String UPDATE_SQL = "UPDATE account_premium SET enddate = ? WHERE account_name = ?";
|
private static final String UPDATE_SQL = "REPLACE INTO account_premium (enddate,account_name) VALUE (?,?)";
|
||||||
private static final String ADD_SQL = "INSERT INTO account_premium (enddate,account_name) VALUE (?,?)";
|
|
||||||
private static final String DELETE_SQL = "DELETE FROM account_premium WHERE account_name = ?";
|
private static final String DELETE_SQL = "DELETE FROM account_premium WHERE account_name = ?";
|
||||||
|
|
||||||
class PremiumExpireTask implements Runnable
|
class PremiumExpireTask implements Runnable
|
||||||
@@ -65,7 +60,6 @@ public class PremiumManager
|
|||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
player.setPremiumStatus(false);
|
player.setPremiumStatus(false);
|
||||||
player.sendPacket(new ExBrPremiumState(player));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,15 +76,19 @@ public class PremiumManager
|
|||||||
{
|
{
|
||||||
final L2PcInstance player = event.getActiveChar();
|
final L2PcInstance player = event.getActiveChar();
|
||||||
final String accountName = player.getAccountName();
|
final String accountName = player.getAccountName();
|
||||||
|
loadPremiumData(accountName);
|
||||||
final long now = System.currentTimeMillis();
|
final long now = System.currentTimeMillis();
|
||||||
final long premiumExpiration = getPremiumExpiration(accountName);
|
final long premiumExpiration = getPremiumExpiration(accountName);
|
||||||
player.setPremiumStatus(premiumExpiration > now);
|
player.setPremiumStatus(premiumExpiration > now);
|
||||||
player.sendPacket(new ExBrPremiumState(player));
|
|
||||||
|
|
||||||
if (player.hasPremiumStatus())
|
if (player.hasPremiumStatus())
|
||||||
{
|
{
|
||||||
startExpireTask(player, premiumExpiration - now);
|
startExpireTask(player, premiumExpiration - now);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
removePremiumStatus(accountName, false);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
private final Consumer<OnPlayerLogout> playerLogoutEvent = (event) ->
|
private final Consumer<OnPlayerLogout> playerLogoutEvent = (event) ->
|
||||||
@@ -101,7 +99,6 @@ public class PremiumManager
|
|||||||
|
|
||||||
protected PremiumManager()
|
protected PremiumManager()
|
||||||
{
|
{
|
||||||
loadPremiumData();
|
|
||||||
listenerContainer.addListener(new ConsumerEventListener(listenerContainer, EventType.ON_PLAYER_LOGIN, playerLoginEvent, this));
|
listenerContainer.addListener(new ConsumerEventListener(listenerContainer, EventType.ON_PLAYER_LOGIN, playerLoginEvent, this));
|
||||||
listenerContainer.addListener(new ConsumerEventListener(listenerContainer, EventType.ON_PLAYER_LOGOUT, playerLogoutEvent, 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();
|
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||||
PreparedStatement statement = con.prepareStatement(LOAD_SQL);
|
PreparedStatement stmt = con.prepareStatement(LOAD_SQL))
|
||||||
ResultSet rset = statement.executeQuery())
|
{
|
||||||
|
stmt.setString(1, accountName);
|
||||||
|
try (ResultSet rset = stmt.executeQuery())
|
||||||
{
|
{
|
||||||
while (rset.next())
|
while (rset.next())
|
||||||
{
|
{
|
||||||
premiumData.put(rset.getString(1), rset.getLong(2));
|
premiumData.put(rset.getString(1), rset.getLong(2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
catch (SQLException e)
|
catch (SQLException e)
|
||||||
{
|
{
|
||||||
e.printStackTrace();
|
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)
|
public long getPremiumExpiration(String accountName)
|
||||||
@@ -162,11 +159,9 @@ public class PremiumManager
|
|||||||
long oldPremiumExpiration = Math.max(now, getPremiumExpiration(accountName));
|
long oldPremiumExpiration = Math.max(now, getPremiumExpiration(accountName));
|
||||||
long newPremiumExpiration = oldPremiumExpiration + addTime;
|
long newPremiumExpiration = oldPremiumExpiration + addTime;
|
||||||
|
|
||||||
String sqlCmd = premiumData.containsKey(accountName) ? UPDATE_SQL : ADD_SQL;
|
|
||||||
|
|
||||||
// UPDATE DATABASE
|
// UPDATE DATABASE
|
||||||
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
try (Connection con = DatabaseFactory.getInstance().getConnection();
|
||||||
PreparedStatement stmt = con.prepareStatement(sqlCmd))
|
PreparedStatement stmt = con.prepareStatement(UPDATE_SQL))
|
||||||
{
|
{
|
||||||
stmt.setLong(1, newPremiumExpiration);
|
stmt.setLong(1, newPremiumExpiration);
|
||||||
stmt.setString(2, accountName);
|
stmt.setString(2, accountName);
|
||||||
@@ -190,20 +185,21 @@ public class PremiumManager
|
|||||||
if (!playerOnline.hasPremiumStatus())
|
if (!playerOnline.hasPremiumStatus())
|
||||||
{
|
{
|
||||||
playerOnline.setPremiumStatus(true);
|
playerOnline.setPremiumStatus(true);
|
||||||
playerOnline.sendPacket(new ExBrPremiumState(playerOnline));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removePremiumStatus(String accountName)
|
public void removePremiumStatus(String accountName, boolean checkOnline)
|
||||||
|
{
|
||||||
|
if (checkOnline)
|
||||||
{
|
{
|
||||||
L2PcInstance playerOnline = L2World.getInstance().getPlayers().stream().filter(p -> accountName.equals(p.getAccountName())).findFirst().orElse(null);
|
L2PcInstance playerOnline = L2World.getInstance().getPlayers().stream().filter(p -> accountName.equals(p.getAccountName())).findFirst().orElse(null);
|
||||||
if ((playerOnline != null) && playerOnline.hasPremiumStatus())
|
if ((playerOnline != null) && playerOnline.hasPremiumStatus())
|
||||||
{
|
{
|
||||||
playerOnline.setPremiumStatus(false);
|
playerOnline.setPremiumStatus(false);
|
||||||
playerOnline.sendPacket(new ExBrPremiumState(playerOnline));
|
|
||||||
stopExpireTask(playerOnline);
|
stopExpireTask(playerOnline);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// UPDATE CACHE
|
// UPDATE CACHE
|
||||||
premiumData.remove(accountName);
|
premiumData.remove(accountName);
|
||||||
|
Reference in New Issue
Block a user