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