Fixed max clan mission count, also DailyTaskManager and PlayerVariables cleanup.
Thanks to nasseka.
This commit is contained in:
		@@ -34,9 +34,10 @@ import org.l2jmobius.gameserver.model.DailyMissionPlayerEntry;
 | 
			
		||||
import org.l2jmobius.gameserver.model.actor.Player;
 | 
			
		||||
import org.l2jmobius.gameserver.model.events.ListenersContainer;
 | 
			
		||||
import org.l2jmobius.gameserver.model.holders.ItemHolder;
 | 
			
		||||
import org.l2jmobius.gameserver.model.variables.PlayerVariables;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author Sdw
 | 
			
		||||
 * @author Sdw, NasSeKa
 | 
			
		||||
 */
 | 
			
		||||
public abstract class AbstractDailyMissionHandler extends ListenersContainer
 | 
			
		||||
{
 | 
			
		||||
@@ -77,7 +78,7 @@ public abstract class AbstractDailyMissionHandler extends ListenersContainer
 | 
			
		||||
		return entry != null ? entry.getProgress() : 0;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public boolean getRecentlyCompleted(Player player)
 | 
			
		||||
	public boolean isRecentlyCompleted(Player player)
 | 
			
		||||
	{
 | 
			
		||||
		final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
 | 
			
		||||
		return (entry != null) && entry.getRecentlyCompleted();
 | 
			
		||||
@@ -114,7 +115,17 @@ public abstract class AbstractDailyMissionHandler extends ListenersContainer
 | 
			
		||||
			giveRewards(player);
 | 
			
		||||
			
 | 
			
		||||
			final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
 | 
			
		||||
			entry.setStatus(DailyMissionStatus.COMPLETED);
 | 
			
		||||
			if (!_holder.isOneTime())
 | 
			
		||||
			{
 | 
			
		||||
				int doneDailyMissions = player.getVariables().getInt(PlayerVariables.DAILY_MISSION_COUNT, 0);
 | 
			
		||||
				player.getVariables().set(PlayerVariables.DAILY_MISSION_COUNT, doneDailyMissions + 1);
 | 
			
		||||
				entry.setStatus(DailyMissionStatus.NOT_AVAILABLE);
 | 
			
		||||
				entry.setProgress(0);
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				entry.setStatus(DailyMissionStatus.COMPLETED);
 | 
			
		||||
			}
 | 
			
		||||
			entry.setLastCompleted(Chronos.currentTimeMillis());
 | 
			
		||||
			entry.setRecentlyCompleted(true);
 | 
			
		||||
			storePlayerEntry(entry);
 | 
			
		||||
 
 | 
			
		||||
@@ -27,8 +27,6 @@ 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.DailyMissionData;
 | 
			
		||||
import org.l2jmobius.gameserver.model.DailyMissionDataHolder;
 | 
			
		||||
import org.l2jmobius.gameserver.model.World;
 | 
			
		||||
import org.l2jmobius.gameserver.model.actor.Player;
 | 
			
		||||
import org.l2jmobius.gameserver.model.actor.stat.PlayerStat;
 | 
			
		||||
@@ -80,6 +78,7 @@ public class DailyTaskManager
 | 
			
		||||
			clanLeaderApply();
 | 
			
		||||
			resetVitalityWeekly();
 | 
			
		||||
			resetClanContribution();
 | 
			
		||||
			resetDailyMissionRewards();
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
@@ -90,7 +89,6 @@ public class DailyTaskManager
 | 
			
		||||
		resetWorldChatPoints();
 | 
			
		||||
		resetRecommends();
 | 
			
		||||
		resetTrainingCamp();
 | 
			
		||||
		resetDailyMissionRewards();
 | 
			
		||||
		resetAttendanceRewards();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
@@ -243,12 +241,12 @@ public class DailyTaskManager
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		// Update data for online players.
 | 
			
		||||
		World.getInstance().getPlayers().stream().forEach(player ->
 | 
			
		||||
		for (Player player : World.getInstance().getPlayers())
 | 
			
		||||
		{
 | 
			
		||||
			player.setWorldChatUsed(0);
 | 
			
		||||
			player.sendPacket(new ExWorldChatCnt(player));
 | 
			
		||||
			player.getVariables().storeMe();
 | 
			
		||||
		});
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		LOGGER.info("Daily world chat points has been resetted.");
 | 
			
		||||
	}
 | 
			
		||||
@@ -274,13 +272,13 @@ public class DailyTaskManager
 | 
			
		||||
			LOGGER.log(Level.SEVERE, "Could not reset Recommendations System: ", e);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		World.getInstance().getPlayers().stream().forEach(player ->
 | 
			
		||||
		for (Player player : World.getInstance().getPlayers())
 | 
			
		||||
		{
 | 
			
		||||
			player.setRecomLeft(0);
 | 
			
		||||
			player.setRecomHave(player.getRecomHave() - 20);
 | 
			
		||||
			player.sendPacket(new ExVoteSystemInfo(player));
 | 
			
		||||
			player.broadcastUserInfo();
 | 
			
		||||
		});
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	private void resetTrainingCamp()
 | 
			
		||||
@@ -300,11 +298,11 @@ public class DailyTaskManager
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			// Update data for online players.
 | 
			
		||||
			World.getInstance().getPlayers().stream().forEach(player ->
 | 
			
		||||
			for (Player player : World.getInstance().getPlayers())
 | 
			
		||||
			{
 | 
			
		||||
				player.resetTraingCampDuration();
 | 
			
		||||
				player.getAccountVariables().storeMe();
 | 
			
		||||
			});
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			LOGGER.info("Training Camp daily time has been resetted.");
 | 
			
		||||
		}
 | 
			
		||||
@@ -312,7 +310,26 @@ public class DailyTaskManager
 | 
			
		||||
	
 | 
			
		||||
	private void resetDailyMissionRewards()
 | 
			
		||||
	{
 | 
			
		||||
		DailyMissionData.getInstance().getDailyMissionData().forEach(DailyMissionDataHolder::reset);
 | 
			
		||||
		// Update data for offline players.
 | 
			
		||||
		try (Connection con = DatabaseFactory.getConnection();
 | 
			
		||||
			PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var=?"))
 | 
			
		||||
		{
 | 
			
		||||
			ps.setString(1, PlayerVariables.DAILY_MISSION_COUNT);
 | 
			
		||||
			ps.executeUpdate();
 | 
			
		||||
		}
 | 
			
		||||
		catch (Exception e)
 | 
			
		||||
		{
 | 
			
		||||
			LOGGER.log(Level.SEVERE, "Could not reset Clan Mission Rewards: ", e);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		// Update data for online players.
 | 
			
		||||
		for (Player player : World.getInstance().getPlayers())
 | 
			
		||||
		{
 | 
			
		||||
			player.getVariables().remove(PlayerVariables.DAILY_MISSION_COUNT);
 | 
			
		||||
			player.getVariables().storeMe();
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		LOGGER.info("Clan Mission Rewards has been resetted.");
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	private void resetClanContribution()
 | 
			
		||||
 
 | 
			
		||||
@@ -136,7 +136,7 @@ public class DailyMissionDataHolder
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		// Show only if its repeatable, recently completed or incompleted that has met the checks above.
 | 
			
		||||
		return (!_isOneTime || getRecentlyCompleted(player) || (status != DailyMissionStatus.COMPLETED.getClientId()));
 | 
			
		||||
		return (!_isOneTime || isRecentlyCompleted(player) || (status != DailyMissionStatus.COMPLETED.getClientId()));
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public void requestReward(Player player)
 | 
			
		||||
@@ -157,9 +157,9 @@ public class DailyMissionDataHolder
 | 
			
		||||
		return _handler != null ? _handler.getProgress(player) : DailyMissionStatus.NOT_AVAILABLE.getClientId();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public boolean getRecentlyCompleted(Player player)
 | 
			
		||||
	public boolean isRecentlyCompleted(Player player)
 | 
			
		||||
	{
 | 
			
		||||
		return (_handler != null) && _handler.getRecentlyCompleted(player);
 | 
			
		||||
		return (_handler != null) && _handler.isRecentlyCompleted(player);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public boolean isLevelUpMission()
 | 
			
		||||
 
 | 
			
		||||
@@ -20,17 +20,11 @@ import java.sql.Connection;
 | 
			
		||||
import java.sql.PreparedStatement;
 | 
			
		||||
import java.sql.ResultSet;
 | 
			
		||||
import java.sql.SQLException;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map.Entry;
 | 
			
		||||
import java.util.logging.Level;
 | 
			
		||||
import java.util.logging.Logger;
 | 
			
		||||
 | 
			
		||||
import org.l2jmobius.commons.database.DatabaseFactory;
 | 
			
		||||
import org.l2jmobius.gameserver.model.World;
 | 
			
		||||
import org.l2jmobius.gameserver.model.actor.Player;
 | 
			
		||||
import org.l2jmobius.gameserver.util.Util;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author UnAfraid
 | 
			
		||||
@@ -51,7 +45,7 @@ public class PlayerVariables extends AbstractVariables
 | 
			
		||||
	public static final String VITALITY_ITEMS_USED_VARIABLE_NAME = "VITALITY_ITEMS_USED";
 | 
			
		||||
	public static final String ATTENDANCE_DATE = "ATTENDANCE_DATE";
 | 
			
		||||
	public static final String ATTENDANCE_INDEX = "ATTENDANCE_INDEX";
 | 
			
		||||
	private static final String DAILY_MISSION_REWARDS = "DAILY_MISSION_REWARDS";
 | 
			
		||||
	public static final String DAILY_MISSION_COUNT = "DAILY_MISSION_COUNT";
 | 
			
		||||
	public static final String CEREMONY_OF_CHAOS_SCORE = "CEREMONY_OF_CHAOS_SCORE";
 | 
			
		||||
	public static final String CEREMONY_OF_CHAOS_MARKS = "CEREMONY_OF_CHAOS_MARKS";
 | 
			
		||||
	public static final String ABILITY_POINTS_MAIN_CLASS = "ABILITY_POINTS";
 | 
			
		||||
@@ -95,7 +89,7 @@ public class PlayerVariables extends AbstractVariables
 | 
			
		||||
		}
 | 
			
		||||
		catch (SQLException e)
 | 
			
		||||
		{
 | 
			
		||||
			LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't restore variables for: " + getPlayer(), e);
 | 
			
		||||
			LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't restore variables for: " + _objectId, e);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
		finally
 | 
			
		||||
@@ -138,7 +132,7 @@ public class PlayerVariables extends AbstractVariables
 | 
			
		||||
		}
 | 
			
		||||
		catch (SQLException e)
 | 
			
		||||
		{
 | 
			
		||||
			LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't update variables for: " + getPlayer(), e);
 | 
			
		||||
			LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't update variables for: " + _objectId, e);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
		finally
 | 
			
		||||
@@ -165,85 +159,9 @@ public class PlayerVariables extends AbstractVariables
 | 
			
		||||
		}
 | 
			
		||||
		catch (Exception e)
 | 
			
		||||
		{
 | 
			
		||||
			LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't delete variables for: " + getPlayer(), e);
 | 
			
		||||
			LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't delete variables for: " + _objectId, e);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public Player getPlayer()
 | 
			
		||||
	{
 | 
			
		||||
		return World.getInstance().getPlayer(_objectId);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public void addDailyMissionReward(int rewardId)
 | 
			
		||||
	{
 | 
			
		||||
		String result = getString(DAILY_MISSION_REWARDS, "");
 | 
			
		||||
		if (result.isEmpty())
 | 
			
		||||
		{
 | 
			
		||||
			result = Integer.toString(rewardId);
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			result += "," + rewardId;
 | 
			
		||||
		}
 | 
			
		||||
		set(DAILY_MISSION_REWARDS, result);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public void removeDailyMissionReward(int rewardId)
 | 
			
		||||
	{
 | 
			
		||||
		String result = "";
 | 
			
		||||
		final String data = getString(DAILY_MISSION_REWARDS, "");
 | 
			
		||||
		for (String s : data.split(","))
 | 
			
		||||
		{
 | 
			
		||||
			if (s.equals(Integer.toString(rewardId)))
 | 
			
		||||
			{
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
			if (result.isEmpty())
 | 
			
		||||
			{
 | 
			
		||||
				result = s;
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				result += "," + s;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		set(DAILY_MISSION_REWARDS, result);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public boolean hasDailyMissionReward(int rewardId)
 | 
			
		||||
	{
 | 
			
		||||
		final String data = getString(DAILY_MISSION_REWARDS, "");
 | 
			
		||||
		for (String s : data.split(","))
 | 
			
		||||
		{
 | 
			
		||||
			if (s.equals(Integer.toString(rewardId)))
 | 
			
		||||
			{
 | 
			
		||||
				return true;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public List<Integer> getDailyMissionRewards()
 | 
			
		||||
	{
 | 
			
		||||
		List<Integer> rewards = null;
 | 
			
		||||
		final String data = getString(DAILY_MISSION_REWARDS, "");
 | 
			
		||||
		if (!data.isEmpty())
 | 
			
		||||
		{
 | 
			
		||||
			for (String s : getString(DAILY_MISSION_REWARDS, "").split(","))
 | 
			
		||||
			{
 | 
			
		||||
				if (Util.isDigit(s))
 | 
			
		||||
				{
 | 
			
		||||
					final int rewardId = Integer.parseInt(s);
 | 
			
		||||
					if (rewards == null)
 | 
			
		||||
					{
 | 
			
		||||
						rewards = new ArrayList<>();
 | 
			
		||||
					}
 | 
			
		||||
					rewards.add(rewardId);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return rewards != null ? rewards : Collections.emptyList();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -65,7 +65,7 @@ public class ExPledgeMissionInfo implements IClientOutgoingPacket
 | 
			
		||||
				}
 | 
			
		||||
				else
 | 
			
		||||
				{
 | 
			
		||||
					status = reward.getRecentlyCompleted(_player) ? 0 : 3;
 | 
			
		||||
					status = reward.isRecentlyCompleted(_player) ? 0 : 3;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			else if (status == 1)
 | 
			
		||||
 
 | 
			
		||||
@@ -17,13 +17,13 @@
 | 
			
		||||
package org.l2jmobius.gameserver.network.serverpackets.pledgeV2;
 | 
			
		||||
 | 
			
		||||
import org.l2jmobius.commons.network.PacketWriter;
 | 
			
		||||
import org.l2jmobius.gameserver.data.xml.DailyMissionData;
 | 
			
		||||
import org.l2jmobius.gameserver.model.actor.Player;
 | 
			
		||||
import org.l2jmobius.gameserver.model.variables.PlayerVariables;
 | 
			
		||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
 | 
			
		||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author Bonux (bonuxq@gmail.com)
 | 
			
		||||
 * @author Bonux (bonuxq@gmail.com), NasSeKa
 | 
			
		||||
 * @date 29.09.2019
 | 
			
		||||
 **/
 | 
			
		||||
public class ExPledgeMissionRewardCount implements IClientOutgoingPacket
 | 
			
		||||
@@ -33,8 +33,8 @@ public class ExPledgeMissionRewardCount implements IClientOutgoingPacket
 | 
			
		||||
	
 | 
			
		||||
	public ExPledgeMissionRewardCount(Player player)
 | 
			
		||||
	{
 | 
			
		||||
		_doneMissionsCount = (int) DailyMissionData.getInstance().getDailyMissionData(player).stream().filter(d -> d.getRecentlyCompleted(player)).count();
 | 
			
		||||
		_availableMissionsCount = (int) DailyMissionData.getInstance().getDailyMissionData(player).stream().filter(d -> d.getStatus(player) == 1).count();
 | 
			
		||||
		_doneMissionsCount = player.getVariables().getInt(PlayerVariables.DAILY_MISSION_COUNT, 0);
 | 
			
		||||
		_availableMissionsCount = player.getNobleLevel() == 1 ? 18 : player.getNobleLevel() >= 2 ? 20 : 16;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user