Daily reset for LimitShopData.

Contributed by nasseka.
This commit is contained in:
MobiusDevelopment 2022-01-27 16:27:13 +00:00
parent 06f6886c6a
commit 8f0bcc4396
16 changed files with 164 additions and 111 deletions

View File

@ -31,15 +31,18 @@ import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.commons.util.Chronos;
import org.l2jmobius.gameserver.data.sql.ClanTable;
import org.l2jmobius.gameserver.data.xml.LimitShopData;
import org.l2jmobius.gameserver.data.xml.TimedHuntingZoneData;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.stat.PlayerStat;
import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.clan.ClanMember;
import org.l2jmobius.gameserver.model.holders.LimitShopProductHolder;
import org.l2jmobius.gameserver.model.holders.SubClassHolder;
import org.l2jmobius.gameserver.model.holders.TimedHuntingZoneHolder;
import org.l2jmobius.gameserver.model.olympiad.Olympiad;
import org.l2jmobius.gameserver.model.variables.AccountVariables;
import org.l2jmobius.gameserver.model.variables.PlayerVariables;
import org.l2jmobius.gameserver.network.serverpackets.ExVoteSystemInfo;
import org.l2jmobius.gameserver.network.serverpackets.ExWorldChatCnt;
@ -100,10 +103,10 @@ public class DailyTaskManager
if (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY)
{
clanLeaderApply();
resetVitalityWeekly();
resetClanContribution();
resetDailyMissionRewards();
resetTimedHuntingZonesWeekly();
resetVitalityWeekly();
}
else // All days, except Wednesday.
{
@ -111,14 +114,15 @@ public class DailyTaskManager
}
// Daily tasks.
resetDailySkills();
resetWorldChatPoints();
resetRecommends();
resetTrainingCamp();
resetThroneOfHeroes();
resetTimedHuntingZones();
resetHomunculusResetPoints();
resetAttendanceRewards();
resetDailySkills();
resetDailyLimitShopData();
resetHomunculusResetPoints();
resetRecommends();
resetTimedHuntingZones();
resetThroneOfHeroes();
resetTrainingCamp();
resetWorldChatPoints();
}
private void onSave()
@ -590,6 +594,32 @@ public class DailyTaskManager
}
}
public void resetDailyLimitShopData()
{
for (LimitShopProductHolder holder : LimitShopData.getInstance().getProducts())
{
// Update data for offline players.
try (Connection con = DatabaseFactory.getConnection();
PreparedStatement ps = con.prepareStatement("DELETE FROM account_gsdata WHERE var=?"))
{
ps.setString(1, AccountVariables.LCOIN_SHOP_PRODUCT_DAILY_COUNT + holder.getProductionId());
ps.executeUpdate();
}
catch (Exception e)
{
LOGGER.log(Level.SEVERE, getClass().getSimpleName() + ": Could not reset LimitShopData: " + e);
}
// Update data for online players.
for (Player player : World.getInstance().getPlayers())
{
player.getVariables().remove(AccountVariables.LCOIN_SHOP_PRODUCT_DAILY_COUNT + holder.getProductionId());
player.getAccountVariables().storeMe();
}
}
LOGGER.info("LimitShopData has been resetted.");
}
public static DailyTaskManager getInstance()
{
return SingletonHolder.INSTANCE;

View File

@ -41,8 +41,8 @@ public class AccountVariables extends AbstractVariables
// Public variable names
public static final String HWID = "HWID";
public static final String HWIDSLIT_VAR = " ";
public static final String LCOIN_SHOP_PRODUCT_TIME = "LCSTime";
public static final String LCOIN_SHOP_PRODUCT_COUNT = "LCSCount";
public static final String LCOIN_SHOP_PRODUCT_DAILY_COUNT = "LCSDailyCount";
private final String _accountName;

View File

@ -21,7 +21,6 @@ import java.util.Collection;
import java.util.List;
import org.l2jmobius.commons.network.PacketReader;
import org.l2jmobius.commons.util.Chronos;
import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.data.xml.LimitShopCraftData;
import org.l2jmobius.gameserver.data.xml.LimitShopData;
@ -115,16 +114,11 @@ public class RequestPurchaseLimitShopItemBuy implements IClientIncomingPacket
// Check limits.
if (_product.getAccountDailyLimit() > 0) // Sale period.
{
if (player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_COUNT + _product.getProductionId(), 0) >= (_product.getAccountDailyLimit() * _amount))
if (player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_DAILY_COUNT + _product.getProductionId(), 0) >= (_product.getAccountDailyLimit() * _amount))
{
if ((player.getAccountVariables().getLong(AccountVariables.LCOIN_SHOP_PRODUCT_TIME + _product.getProductionId(), 0) + 86400000) > Chronos.currentTimeMillis())
{
player.sendMessage("You have reached your daily limit."); // TODO: Retail system message?
player.removeRequest(PrimeShopRequest.class);
return;
}
// Reset limit.
player.getAccountVariables().set(AccountVariables.LCOIN_SHOP_PRODUCT_COUNT + _product.getProductionId(), 0);
player.sendMessage("You have reached your daily limit."); // TODO: Retail system message?
player.removeRequest(PrimeShopRequest.class);
return;
}
}
else if (_product.getAccountBuyLimit() > 0) // Count limit.
@ -251,8 +245,7 @@ public class RequestPurchaseLimitShopItemBuy implements IClientIncomingPacket
// Update account variables.
if (_product.getAccountDailyLimit() > 0)
{
player.getAccountVariables().set(AccountVariables.LCOIN_SHOP_PRODUCT_TIME + _product.getProductionId(), Chronos.currentTimeMillis());
player.getAccountVariables().set(AccountVariables.LCOIN_SHOP_PRODUCT_COUNT + _product.getProductionId(), player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_COUNT + _product.getProductionId(), 0) + _amount);
player.getAccountVariables().set(AccountVariables.LCOIN_SHOP_PRODUCT_DAILY_COUNT + _product.getProductionId(), player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_DAILY_COUNT + _product.getProductionId(), 0) + _amount);
}
else if (_product.getAccountBuyLimit() > 0)
{

View File

@ -20,7 +20,6 @@ import java.util.Collection;
import java.util.Collections;
import org.l2jmobius.commons.network.PacketWriter;
import org.l2jmobius.commons.util.Chronos;
import org.l2jmobius.gameserver.data.xml.LimitShopCraftData;
import org.l2jmobius.gameserver.data.xml.LimitShopData;
import org.l2jmobius.gameserver.model.actor.Player;
@ -91,21 +90,13 @@ public class ExPurchaseLimitShopItemListNew implements IClientOutgoingPacket
// Check limits.
if (product.getAccountDailyLimit() > 0) // Sale period.
{
if (_player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_COUNT + product.getProductionId(), 0) >= product.getAccountDailyLimit())
if (_player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_DAILY_COUNT + product.getProductionId(), 0) >= product.getAccountDailyLimit())
{
if ((_player.getAccountVariables().getLong(AccountVariables.LCOIN_SHOP_PRODUCT_TIME + product.getProductionId(), 0) + 86400000) > Chronos.currentTimeMillis())
{
packet.writeD(0);
}
else // Reset limit.
{
_player.getAccountVariables().remove(AccountVariables.LCOIN_SHOP_PRODUCT_COUNT + product.getProductionId());
packet.writeD(product.getAccountDailyLimit());
}
packet.writeD(0);
}
else
{
packet.writeD(product.getAccountDailyLimit() - _player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_COUNT + product.getProductionId(), 0));
packet.writeD(product.getAccountDailyLimit() - _player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_DAILY_COUNT + product.getProductionId(), 0));
}
}
else if (product.getAccountBuyLimit() > 0) // Count limit.

View File

@ -30,6 +30,7 @@ import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.commons.util.Chronos;
import org.l2jmobius.gameserver.data.sql.ClanTable;
import org.l2jmobius.gameserver.data.xml.DailyMissionData;
import org.l2jmobius.gameserver.data.xml.LimitShopData;
import org.l2jmobius.gameserver.data.xml.TimedHuntingZoneData;
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
import org.l2jmobius.gameserver.model.World;
@ -37,6 +38,7 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.stat.PlayerStat;
import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.clan.ClanMember;
import org.l2jmobius.gameserver.model.holders.LimitShopProductHolder;
import org.l2jmobius.gameserver.model.holders.SubClassHolder;
import org.l2jmobius.gameserver.model.holders.TimedHuntingZoneHolder;
import org.l2jmobius.gameserver.model.olympiad.Olympiad;
@ -102,8 +104,8 @@ public class DailyTaskManager
if (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY)
{
clanLeaderApply();
resetVitalityWeekly();
resetTimedHuntingZonesWeekly();
resetVitalityWeekly();
}
else // All days, except Wednesday.
{
@ -113,6 +115,7 @@ public class DailyTaskManager
// Daily tasks.
resetClanBonus();
resetDailySkills();
resetDailyLimitShopData();
resetWorldChatPoints();
resetRecommends();
resetTrainingCamp();
@ -493,6 +496,32 @@ public class DailyTaskManager
}
}
public void resetDailyLimitShopData()
{
for (LimitShopProductHolder holder : LimitShopData.getInstance().getProducts())
{
// Update data for offline players.
try (Connection con = DatabaseFactory.getConnection();
PreparedStatement ps = con.prepareStatement("DELETE FROM account_gsdata WHERE var=?"))
{
ps.setString(1, AccountVariables.LCOIN_SHOP_PRODUCT_DAILY_COUNT + holder.getProductionId());
ps.executeUpdate();
}
catch (Exception e)
{
LOGGER.log(Level.SEVERE, getClass().getSimpleName() + ": Could not reset LimitShopData: " + e);
}
// Update data for online players.
for (Player player : World.getInstance().getPlayers())
{
player.getVariables().remove(AccountVariables.LCOIN_SHOP_PRODUCT_DAILY_COUNT + holder.getProductionId());
player.getAccountVariables().storeMe();
}
}
LOGGER.info("LimitShopData has been resetted.");
}
public static DailyTaskManager getInstance()
{
return SingletonHolder.INSTANCE;

View File

@ -42,8 +42,8 @@ public class AccountVariables extends AbstractVariables
// Public variable names
public static final String HWID = "HWID";
public static final String HWIDSLIT_VAR = " ";
public static final String LCOIN_SHOP_PRODUCT_TIME = "LCSTime";
public static final String LCOIN_SHOP_PRODUCT_COUNT = "LCSCount";
public static final String LCOIN_SHOP_PRODUCT_DAILY_COUNT = "LCSDailyCount";
public static final String VIP_POINTS = "VipPoints";
public static final String VIP_TIER = "VipTier";
public static final String VIP_EXPIRATION = "VipExpiration";

View File

@ -22,7 +22,6 @@ import java.util.List;
import org.l2jmobius.Config;
import org.l2jmobius.commons.network.PacketReader;
import org.l2jmobius.commons.util.Chronos;
import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.data.xml.LimitShopCraftData;
import org.l2jmobius.gameserver.data.xml.LimitShopData;
@ -115,16 +114,11 @@ public class RequestPurchaseLimitShopItemBuy implements IClientIncomingPacket
// Check limits.
if (_product.getAccountDailyLimit() > 0) // Sale period.
{
if (player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_COUNT + _product.getProductionId(), 0) >= (_product.getAccountDailyLimit() * _amount))
if (player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_DAILY_COUNT + _product.getProductionId(), 0) >= (_product.getAccountDailyLimit() * _amount))
{
if ((player.getAccountVariables().getLong(AccountVariables.LCOIN_SHOP_PRODUCT_TIME + _product.getProductionId(), 0) + 86400000) > Chronos.currentTimeMillis())
{
player.sendMessage("You have reached your daily limit."); // TODO: Retail system message?
player.removeRequest(PrimeShopRequest.class);
return;
}
// Reset limit.
player.getAccountVariables().set(AccountVariables.LCOIN_SHOP_PRODUCT_COUNT + _product.getProductionId(), 0);
player.sendMessage("You have reached your daily limit."); // TODO: Retail system message?
player.removeRequest(PrimeShopRequest.class);
return;
}
}
else if (_product.getAccountBuyLimit() > 0) // Count limit.
@ -242,8 +236,7 @@ public class RequestPurchaseLimitShopItemBuy implements IClientIncomingPacket
// Update account variables.
if (_product.getAccountDailyLimit() > 0)
{
player.getAccountVariables().set(AccountVariables.LCOIN_SHOP_PRODUCT_TIME + _product.getProductionId(), Chronos.currentTimeMillis());
player.getAccountVariables().set(AccountVariables.LCOIN_SHOP_PRODUCT_COUNT + _product.getProductionId(), player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_COUNT + _product.getProductionId(), 0) + _amount);
player.getAccountVariables().set(AccountVariables.LCOIN_SHOP_PRODUCT_DAILY_COUNT + _product.getProductionId(), player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_DAILY_COUNT + _product.getProductionId(), 0) + _amount);
}
else if (_product.getAccountBuyLimit() > 0)
{

View File

@ -20,7 +20,6 @@ import java.util.Collection;
import java.util.Collections;
import org.l2jmobius.commons.network.PacketWriter;
import org.l2jmobius.commons.util.Chronos;
import org.l2jmobius.gameserver.data.xml.LimitShopCraftData;
import org.l2jmobius.gameserver.data.xml.LimitShopData;
import org.l2jmobius.gameserver.model.actor.Player;
@ -83,21 +82,13 @@ public class ExPurchaseLimitShopItemListNew implements IClientOutgoingPacket
// Check limits.
if (product.getAccountDailyLimit() > 0) // Sale period.
{
if (_player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_COUNT + product.getProductionId(), 0) >= product.getAccountDailyLimit())
if (_player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_DAILY_COUNT + product.getProductionId(), 0) >= product.getAccountDailyLimit())
{
if ((_player.getAccountVariables().getLong(AccountVariables.LCOIN_SHOP_PRODUCT_TIME + product.getProductionId(), 0) + 86400000) > Chronos.currentTimeMillis())
{
packet.writeD(0);
}
else // Reset limit.
{
_player.getAccountVariables().remove(AccountVariables.LCOIN_SHOP_PRODUCT_COUNT + product.getProductionId());
packet.writeD(product.getAccountDailyLimit());
}
packet.writeD(0);
}
else
{
packet.writeD(product.getAccountDailyLimit() - _player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_COUNT + product.getProductionId(), 0));
packet.writeD(product.getAccountDailyLimit() - _player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_DAILY_COUNT + product.getProductionId(), 0));
}
}
else if (product.getAccountBuyLimit() > 0) // Count limit.

View File

@ -30,6 +30,7 @@ import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.commons.util.Chronos;
import org.l2jmobius.gameserver.data.sql.ClanTable;
import org.l2jmobius.gameserver.data.xml.DailyMissionData;
import org.l2jmobius.gameserver.data.xml.LimitShopData;
import org.l2jmobius.gameserver.data.xml.TimedHuntingZoneData;
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
import org.l2jmobius.gameserver.model.World;
@ -37,6 +38,7 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.stat.PlayerStat;
import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.clan.ClanMember;
import org.l2jmobius.gameserver.model.holders.LimitShopProductHolder;
import org.l2jmobius.gameserver.model.holders.SubClassHolder;
import org.l2jmobius.gameserver.model.holders.TimedHuntingZoneHolder;
import org.l2jmobius.gameserver.model.olympiad.Olympiad;
@ -102,9 +104,9 @@ public class DailyTaskManager
if (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY)
{
clanLeaderApply();
resetVitalityWeekly();
resetMonsterArenaWeekly();
resetTimedHuntingZonesWeekly();
resetVitalityWeekly();
}
else // All days, except Wednesday.
{
@ -116,6 +118,7 @@ public class DailyTaskManager
resetClanContributionList();
resetClanDonationPoints();
resetDailySkills();
resetDailyLimitShopData();
resetWorldChatPoints();
resetRecommends();
resetTrainingCamp();
@ -533,6 +536,32 @@ public class DailyTaskManager
}
}
public void resetDailyLimitShopData()
{
for (LimitShopProductHolder holder : LimitShopData.getInstance().getProducts())
{
// Update data for offline players.
try (Connection con = DatabaseFactory.getConnection();
PreparedStatement ps = con.prepareStatement("DELETE FROM account_gsdata WHERE var=?"))
{
ps.setString(1, AccountVariables.LCOIN_SHOP_PRODUCT_DAILY_COUNT + holder.getProductionId());
ps.executeUpdate();
}
catch (Exception e)
{
LOGGER.log(Level.SEVERE, getClass().getSimpleName() + ": Could not reset LimitShopData: " + e);
}
// Update data for online players.
for (Player player : World.getInstance().getPlayers())
{
player.getVariables().remove(AccountVariables.LCOIN_SHOP_PRODUCT_DAILY_COUNT + holder.getProductionId());
player.getAccountVariables().storeMe();
}
}
LOGGER.info("LimitShopData has been resetted.");
}
public static DailyTaskManager getInstance()
{
return SingletonHolder.INSTANCE;

View File

@ -42,8 +42,8 @@ public class AccountVariables extends AbstractVariables
// Public variable names
public static final String HWID = "HWID";
public static final String HWIDSLIT_VAR = " ";
public static final String LCOIN_SHOP_PRODUCT_TIME = "LCSTime";
public static final String LCOIN_SHOP_PRODUCT_COUNT = "LCSCount";
public static final String LCOIN_SHOP_PRODUCT_DAILY_COUNT = "LCSDailyCount";
public static final String VIP_POINTS = "VipPoints";
public static final String VIP_TIER = "VipTier";
public static final String VIP_EXPIRATION = "VipExpiration";

View File

@ -22,7 +22,6 @@ import java.util.List;
import org.l2jmobius.Config;
import org.l2jmobius.commons.network.PacketReader;
import org.l2jmobius.commons.util.Chronos;
import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.data.xml.LimitShopClanData;
import org.l2jmobius.gameserver.data.xml.LimitShopCraftData;
@ -122,16 +121,11 @@ public class RequestPurchaseLimitShopItemBuy implements IClientIncomingPacket
// Check limits.
if (_product.getAccountDailyLimit() > 0) // Sale period.
{
if (player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_COUNT + _product.getProductionId(), 0) >= (_product.getAccountDailyLimit() * _amount))
if (player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_DAILY_COUNT + _product.getProductionId(), 0) >= (_product.getAccountDailyLimit() * _amount))
{
if ((player.getAccountVariables().getLong(AccountVariables.LCOIN_SHOP_PRODUCT_TIME + _product.getProductionId(), 0) + 86400000) > Chronos.currentTimeMillis())
{
player.sendMessage("You have reached your daily limit."); // TODO: Retail system message?
player.removeRequest(PrimeShopRequest.class);
return;
}
// Reset limit.
player.getAccountVariables().set(AccountVariables.LCOIN_SHOP_PRODUCT_COUNT + _product.getProductionId(), 0);
player.sendMessage("You have reached your daily limit."); // TODO: Retail system message?
player.removeRequest(PrimeShopRequest.class);
return;
}
}
else if (_product.getAccountBuyLimit() > 0) // Count limit.
@ -262,8 +256,7 @@ public class RequestPurchaseLimitShopItemBuy implements IClientIncomingPacket
// Update account variables.
if (_product.getAccountDailyLimit() > 0)
{
player.getAccountVariables().set(AccountVariables.LCOIN_SHOP_PRODUCT_TIME + _product.getProductionId(), Chronos.currentTimeMillis());
player.getAccountVariables().set(AccountVariables.LCOIN_SHOP_PRODUCT_COUNT + _product.getProductionId(), player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_COUNT + _product.getProductionId(), 0) + _amount);
player.getAccountVariables().set(AccountVariables.LCOIN_SHOP_PRODUCT_DAILY_COUNT + _product.getProductionId(), player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_DAILY_COUNT + _product.getProductionId(), 0) + _amount);
}
else if (_product.getAccountBuyLimit() > 0)
{

View File

@ -20,7 +20,6 @@ import java.util.Collection;
import java.util.Collections;
import org.l2jmobius.commons.network.PacketWriter;
import org.l2jmobius.commons.util.Chronos;
import org.l2jmobius.gameserver.data.xml.LimitShopClanData;
import org.l2jmobius.gameserver.data.xml.LimitShopCraftData;
import org.l2jmobius.gameserver.data.xml.LimitShopData;
@ -97,21 +96,13 @@ public class ExPurchaseLimitShopItemListNew implements IClientOutgoingPacket
// Check limits.
if (product.getAccountDailyLimit() > 0) // Sale period.
{
if (_player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_COUNT + product.getProductionId(), 0) >= product.getAccountDailyLimit())
if (_player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_DAILY_COUNT + product.getProductionId(), 0) >= product.getAccountDailyLimit())
{
if ((_player.getAccountVariables().getLong(AccountVariables.LCOIN_SHOP_PRODUCT_TIME + product.getProductionId(), 0) + 86400000) > Chronos.currentTimeMillis())
{
packet.writeD(0);
}
else // Reset limit.
{
_player.getAccountVariables().remove(AccountVariables.LCOIN_SHOP_PRODUCT_COUNT + product.getProductionId());
packet.writeD(product.getAccountDailyLimit());
}
packet.writeD(0);
}
else
{
packet.writeD(product.getAccountDailyLimit() - _player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_COUNT + product.getProductionId(), 0));
packet.writeD(product.getAccountDailyLimit() - _player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_DAILY_COUNT + product.getProductionId(), 0));
}
}
else if (product.getAccountBuyLimit() > 0) // Count limit.

View File

@ -30,6 +30,7 @@ import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.commons.util.Chronos;
import org.l2jmobius.gameserver.data.sql.ClanTable;
import org.l2jmobius.gameserver.data.xml.DailyMissionData;
import org.l2jmobius.gameserver.data.xml.LimitShopData;
import org.l2jmobius.gameserver.data.xml.TimedHuntingZoneData;
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
import org.l2jmobius.gameserver.model.World;
@ -37,6 +38,7 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.stat.PlayerStat;
import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.clan.ClanMember;
import org.l2jmobius.gameserver.model.holders.LimitShopProductHolder;
import org.l2jmobius.gameserver.model.holders.SubClassHolder;
import org.l2jmobius.gameserver.model.holders.TimedHuntingZoneHolder;
import org.l2jmobius.gameserver.model.olympiad.Olympiad;
@ -102,9 +104,9 @@ public class DailyTaskManager
if (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY)
{
clanLeaderApply();
resetVitalityWeekly();
resetMonsterArenaWeekly();
resetTimedHuntingZonesWeekly();
resetVitalityWeekly();
}
else // All days, except Wednesday.
{
@ -116,6 +118,7 @@ public class DailyTaskManager
resetClanContributionList();
resetClanDonationPoints();
resetDailySkills();
resetDailyLimitShopData();
resetWorldChatPoints();
resetRecommends();
resetTrainingCamp();
@ -533,6 +536,32 @@ public class DailyTaskManager
}
}
public void resetDailyLimitShopData()
{
for (LimitShopProductHolder holder : LimitShopData.getInstance().getProducts())
{
// Update data for offline players.
try (Connection con = DatabaseFactory.getConnection();
PreparedStatement ps = con.prepareStatement("DELETE FROM account_gsdata WHERE var=?"))
{
ps.setString(1, AccountVariables.LCOIN_SHOP_PRODUCT_DAILY_COUNT + holder.getProductionId());
ps.executeUpdate();
}
catch (Exception e)
{
LOGGER.log(Level.SEVERE, getClass().getSimpleName() + ": Could not reset LimitShopData: " + e);
}
// Update data for online players.
for (Player player : World.getInstance().getPlayers())
{
player.getVariables().remove(AccountVariables.LCOIN_SHOP_PRODUCT_DAILY_COUNT + holder.getProductionId());
player.getAccountVariables().storeMe();
}
}
LOGGER.info("LimitShopData has been resetted.");
}
public static DailyTaskManager getInstance()
{
return SingletonHolder.INSTANCE;

View File

@ -42,8 +42,8 @@ public class AccountVariables extends AbstractVariables
// Public variable names
public static final String HWID = "HWID";
public static final String HWIDSLIT_VAR = " ";
public static final String LCOIN_SHOP_PRODUCT_TIME = "LCSTime";
public static final String LCOIN_SHOP_PRODUCT_COUNT = "LCSCount";
public static final String LCOIN_SHOP_PRODUCT_DAILY_COUNT = "LCSDailyCount";
public static final String VIP_POINTS = "VipPoints";
public static final String VIP_TIER = "VipTier";
public static final String VIP_EXPIRATION = "VipExpiration";

View File

@ -22,7 +22,6 @@ import java.util.List;
import org.l2jmobius.Config;
import org.l2jmobius.commons.network.PacketReader;
import org.l2jmobius.commons.util.Chronos;
import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.data.xml.LimitShopClanData;
import org.l2jmobius.gameserver.data.xml.LimitShopCraftData;
@ -122,16 +121,11 @@ public class RequestPurchaseLimitShopItemBuy implements IClientIncomingPacket
// Check limits.
if (_product.getAccountDailyLimit() > 0) // Sale period.
{
if (player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_COUNT + _product.getProductionId(), 0) >= (_product.getAccountDailyLimit() * _amount))
if (player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_DAILY_COUNT + _product.getProductionId(), 0) >= (_product.getAccountDailyLimit() * _amount))
{
if ((player.getAccountVariables().getLong(AccountVariables.LCOIN_SHOP_PRODUCT_TIME + _product.getProductionId(), 0) + 86400000) > Chronos.currentTimeMillis())
{
player.sendMessage("You have reached your daily limit."); // TODO: Retail system message?
player.removeRequest(PrimeShopRequest.class);
return;
}
// Reset limit.
player.getAccountVariables().set(AccountVariables.LCOIN_SHOP_PRODUCT_COUNT + _product.getProductionId(), 0);
player.sendMessage("You have reached your daily limit."); // TODO: Retail system message?
player.removeRequest(PrimeShopRequest.class);
return;
}
}
else if (_product.getAccountBuyLimit() > 0) // Count limit.
@ -262,8 +256,7 @@ public class RequestPurchaseLimitShopItemBuy implements IClientIncomingPacket
// Update account variables.
if (_product.getAccountDailyLimit() > 0)
{
player.getAccountVariables().set(AccountVariables.LCOIN_SHOP_PRODUCT_TIME + _product.getProductionId(), Chronos.currentTimeMillis());
player.getAccountVariables().set(AccountVariables.LCOIN_SHOP_PRODUCT_COUNT + _product.getProductionId(), player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_COUNT + _product.getProductionId(), 0) + _amount);
player.getAccountVariables().set(AccountVariables.LCOIN_SHOP_PRODUCT_DAILY_COUNT + _product.getProductionId(), player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_DAILY_COUNT + _product.getProductionId(), 0) + _amount);
}
else if (_product.getAccountBuyLimit() > 0)
{

View File

@ -20,7 +20,6 @@ import java.util.Collection;
import java.util.Collections;
import org.l2jmobius.commons.network.PacketWriter;
import org.l2jmobius.commons.util.Chronos;
import org.l2jmobius.gameserver.data.xml.LimitShopClanData;
import org.l2jmobius.gameserver.data.xml.LimitShopCraftData;
import org.l2jmobius.gameserver.data.xml.LimitShopData;
@ -97,21 +96,13 @@ public class ExPurchaseLimitShopItemListNew implements IClientOutgoingPacket
// Check limits.
if (product.getAccountDailyLimit() > 0) // Sale period.
{
if (_player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_COUNT + product.getProductionId(), 0) >= product.getAccountDailyLimit())
if (_player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_DAILY_COUNT + product.getProductionId(), 0) >= product.getAccountDailyLimit())
{
if ((_player.getAccountVariables().getLong(AccountVariables.LCOIN_SHOP_PRODUCT_TIME + product.getProductionId(), 0) + 86400000) > Chronos.currentTimeMillis())
{
packet.writeD(0);
}
else // Reset limit.
{
_player.getAccountVariables().remove(AccountVariables.LCOIN_SHOP_PRODUCT_COUNT + product.getProductionId());
packet.writeD(product.getAccountDailyLimit());
}
packet.writeD(0);
}
else
{
packet.writeD(product.getAccountDailyLimit() - _player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_COUNT + product.getProductionId(), 0));
packet.writeD(product.getAccountDailyLimit() - _player.getAccountVariables().getInt(AccountVariables.LCOIN_SHOP_PRODUCT_DAILY_COUNT + product.getProductionId(), 0));
}
}
else if (product.getAccountBuyLimit() > 0) // Count limit.