Purge rework and new additions.

Contributed by Serenitty.
This commit is contained in:
MobiusDevelopment
2022-08-03 11:54:16 +00:00
parent 930f8f0655
commit 6f25a4d677
111 changed files with 3756 additions and 4558 deletions

View File

@@ -4,5 +4,6 @@ CREATE TABLE IF NOT EXISTS `character_purge` (
`category` int(3) UNSIGNED NOT NULL DEFAULT 0,
`points` int(10) UNSIGNED NOT NULL DEFAULT 0,
`keys` int(10) UNSIGNED NOT NULL DEFAULT 0,
`remainingKeys` int(10) UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (`charId`,`category`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

View File

@@ -23,16 +23,18 @@ import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.holders.PurgePlayerHolder;
import org.l2jmobius.gameserver.model.holders.SubjugationHolder;
import org.l2jmobius.gameserver.model.variables.PlayerVariables;
import org.l2jmobius.gameserver.network.serverpackets.subjugation.ExSubjugationSidebar;
import ai.AbstractNpcAI;
/**
* Written by Berezkin Nikolay, on 13.04.2021
* Written by Berezkin Nikolay, Serenitty
*/
public class CrumaTowerPurge extends AbstractNpcAI
{
private static final int CATEGORY = 1;
private static final int MAX_KEYS = 40;
private static final int PURGE_MAX_POINT = 1000000;
private static final SubjugationHolder PURGE_DATA = SubjugationData.getInstance().getSubjugation(CATEGORY);
@@ -60,9 +62,11 @@ public class CrumaTowerPurge extends AbstractNpcAI
final int pointsForMob = isHotTime ? PURGE_DATA.getNpcs().get(npc.getId()) * 2 : PURGE_DATA.getNpcs().get(npc.getId());
final int currentPurgePoints = (killer.getPurgePoints().get(CATEGORY) == null) ? 0 : killer.getPurgePoints().get(CATEGORY).getPoints();
final int currentKeys = (killer.getPurgePoints().get(CATEGORY) == null) ? 0 : killer.getPurgePoints().get(CATEGORY).getKeys();
killer.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(Math.min(PURGE_MAX_POINT, currentPurgePoints + pointsForMob), currentKeys));
final int remainingKeys = (killer.getPurgePoints().get(CATEGORY) == null) ? 0 : killer.getPurgePoints().get(CATEGORY).getMaxPeriodicKeys();
killer.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(Math.min(PURGE_MAX_POINT, currentPurgePoints + pointsForMob), currentKeys, remainingKeys));
lastCategory(killer);
checkPurgeComplete(killer);
killer.sendPacket(new ExSubjugationSidebar(CATEGORY, killer.getPurgePoints().get(CATEGORY)));
killer.sendPacket(new ExSubjugationSidebar(killer, killer.getPurgePoints().get(CATEGORY)));
}
return super.onKill(npc, killer, isSummon);
}
@@ -71,12 +75,22 @@ public class CrumaTowerPurge extends AbstractNpcAI
{
final int points = player.getPurgePoints().get(CATEGORY).getPoints();
final int keys = player.getPurgePoints().get(CATEGORY).getKeys();
if ((points >= PURGE_MAX_POINT) && (keys < 70))
if ((points >= PURGE_MAX_POINT) && (keys < MAX_KEYS))
{
player.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(points - PURGE_MAX_POINT, keys + 1));
player.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(points - PURGE_MAX_POINT, keys + 1, player.getPurgePoints().get(CATEGORY).getMaxPeriodicKeys() - 1));
}
}
private void lastCategory(Player player)
{
if (player.getPurgeLastCategory() == CATEGORY)
{
return;
}
player.getVariables().remove(PlayerVariables.PURGE_LAST_CATEGORY);
player.getVariables().set(PlayerVariables.PURGE_LAST_CATEGORY, CATEGORY);
}
public static void main(String[] args)
{
new CrumaTowerPurge();

View File

@@ -23,16 +23,18 @@ import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.holders.PurgePlayerHolder;
import org.l2jmobius.gameserver.model.holders.SubjugationHolder;
import org.l2jmobius.gameserver.model.variables.PlayerVariables;
import org.l2jmobius.gameserver.network.serverpackets.subjugation.ExSubjugationSidebar;
import ai.AbstractNpcAI;
/**
* Written by Berezkin Nikolay, on 13.04.2021
* Written by Berezkin Nikolay, Serenitty
*/
public class DragonValleyPurge extends AbstractNpcAI
{
private static final int CATEGORY = 5;
private static final int MAX_KEYS = 40;
private static final int PURGE_MAX_POINT = 1000000;
private static final SubjugationHolder PURGE_DATA = SubjugationData.getInstance().getSubjugation(CATEGORY);
@@ -60,9 +62,11 @@ public class DragonValleyPurge extends AbstractNpcAI
final int pointsForMob = isHotTime ? PURGE_DATA.getNpcs().get(npc.getId()) * 2 : PURGE_DATA.getNpcs().get(npc.getId());
final int currentPurgePoints = (killer.getPurgePoints().get(CATEGORY) == null) ? 0 : killer.getPurgePoints().get(CATEGORY).getPoints();
final int currentKeys = (killer.getPurgePoints().get(CATEGORY) == null) ? 0 : killer.getPurgePoints().get(CATEGORY).getKeys();
killer.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(Math.min(PURGE_MAX_POINT, currentPurgePoints + pointsForMob), currentKeys));
final int remainingKeys = (killer.getPurgePoints().get(CATEGORY) == null) ? 0 : killer.getPurgePoints().get(CATEGORY).getMaxPeriodicKeys();
killer.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(Math.min(PURGE_MAX_POINT, currentPurgePoints + pointsForMob), currentKeys, remainingKeys));
lastCategory(killer);
checkPurgeComplete(killer);
killer.sendPacket(new ExSubjugationSidebar(CATEGORY, killer.getPurgePoints().get(CATEGORY)));
killer.sendPacket(new ExSubjugationSidebar(killer, killer.getPurgePoints().get(CATEGORY)));
}
return super.onKill(npc, killer, isSummon);
}
@@ -71,12 +75,22 @@ public class DragonValleyPurge extends AbstractNpcAI
{
final int points = player.getPurgePoints().get(CATEGORY).getPoints();
final int keys = player.getPurgePoints().get(CATEGORY).getKeys();
if ((points >= PURGE_MAX_POINT) && (keys < 70))
if ((points >= PURGE_MAX_POINT) && (keys < MAX_KEYS))
{
player.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(points - PURGE_MAX_POINT, keys + 1));
player.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(points - PURGE_MAX_POINT, keys + 1, player.getPurgePoints().get(CATEGORY).getMaxPeriodicKeys() - 1));
}
}
private void lastCategory(Player player)
{
if (player.getPurgeLastCategory() == CATEGORY)
{
return;
}
player.getVariables().remove(PlayerVariables.PURGE_LAST_CATEGORY);
player.getVariables().set(PlayerVariables.PURGE_LAST_CATEGORY, CATEGORY);
}
public static void main(String[] args)
{
new DragonValleyPurge();

View File

@@ -23,16 +23,18 @@ import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.holders.PurgePlayerHolder;
import org.l2jmobius.gameserver.model.holders.SubjugationHolder;
import org.l2jmobius.gameserver.model.variables.PlayerVariables;
import org.l2jmobius.gameserver.network.serverpackets.subjugation.ExSubjugationSidebar;
import ai.AbstractNpcAI;
/**
* Written by Berezkin Nikolay, on 13.04.2021
* Written by Berezkin Nikolay, Serenitty
*/
public class OrcBarracksPurge extends AbstractNpcAI
{
private static final int CATEGORY = 7;
private static final int MAX_KEYS = 40;
private static final int PURGE_MAX_POINT = 1000000;
private static final SubjugationHolder PURGE_DATA = SubjugationData.getInstance().getSubjugation(CATEGORY);
@@ -60,9 +62,11 @@ public class OrcBarracksPurge extends AbstractNpcAI
final int pointsForMob = isHotTime ? PURGE_DATA.getNpcs().get(npc.getId()) * 2 : PURGE_DATA.getNpcs().get(npc.getId());
final int currentPurgePoints = (killer.getPurgePoints().get(CATEGORY) == null) ? 0 : killer.getPurgePoints().get(CATEGORY).getPoints();
final int currentKeys = (killer.getPurgePoints().get(CATEGORY) == null) ? 0 : killer.getPurgePoints().get(CATEGORY).getKeys();
killer.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(Math.min(PURGE_MAX_POINT, currentPurgePoints + pointsForMob), currentKeys));
final int remainingKeys = (killer.getPurgePoints().get(CATEGORY) == null) ? 0 : killer.getPurgePoints().get(CATEGORY).getMaxPeriodicKeys();
killer.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(Math.min(PURGE_MAX_POINT, currentPurgePoints + pointsForMob), currentKeys, remainingKeys));
lastCategory(killer);
checkPurgeComplete(killer);
killer.sendPacket(new ExSubjugationSidebar(CATEGORY, killer.getPurgePoints().get(CATEGORY)));
killer.sendPacket(new ExSubjugationSidebar(killer, killer.getPurgePoints().get(CATEGORY)));
}
return super.onKill(npc, killer, isSummon);
}
@@ -71,12 +75,22 @@ public class OrcBarracksPurge extends AbstractNpcAI
{
final int points = player.getPurgePoints().get(CATEGORY).getPoints();
final int keys = player.getPurgePoints().get(CATEGORY).getKeys();
if ((points >= PURGE_MAX_POINT) && (keys < 70))
if ((points >= PURGE_MAX_POINT) && (keys < MAX_KEYS))
{
player.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(points - PURGE_MAX_POINT, keys + 1));
player.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(points - PURGE_MAX_POINT, keys + 1, player.getPurgePoints().get(CATEGORY).getMaxPeriodicKeys() - 1));
}
}
private void lastCategory(Player player)
{
if (player.getPurgeLastCategory() == CATEGORY)
{
return;
}
player.getVariables().remove(PlayerVariables.PURGE_LAST_CATEGORY);
player.getVariables().set(PlayerVariables.PURGE_LAST_CATEGORY, CATEGORY);
}
public static void main(String[] args)
{
new OrcBarracksPurge();

View File

@@ -23,16 +23,18 @@ import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.holders.PurgePlayerHolder;
import org.l2jmobius.gameserver.model.holders.SubjugationHolder;
import org.l2jmobius.gameserver.model.variables.PlayerVariables;
import org.l2jmobius.gameserver.network.serverpackets.subjugation.ExSubjugationSidebar;
import ai.AbstractNpcAI;
/**
* Written by Berezkin Nikolay, on 13.04.2021
* Written by Berezkin Nikolay, Serenitty
*/
public class PlainsOfTheLizardmenPurge extends AbstractNpcAI
{
private static final int CATEGORY = 3;
private static final int MAX_KEYS = 40;
private static final int PURGE_MAX_POINT = 1000000;
private static final SubjugationHolder PURGE_DATA = SubjugationData.getInstance().getSubjugation(CATEGORY);
@@ -60,9 +62,11 @@ public class PlainsOfTheLizardmenPurge extends AbstractNpcAI
final int pointsForMob = isHotTime ? PURGE_DATA.getNpcs().get(npc.getId()) * 2 : PURGE_DATA.getNpcs().get(npc.getId());
final int currentPurgePoints = (killer.getPurgePoints().get(CATEGORY) == null) ? 0 : killer.getPurgePoints().get(CATEGORY).getPoints();
final int currentKeys = (killer.getPurgePoints().get(CATEGORY) == null) ? 0 : killer.getPurgePoints().get(CATEGORY).getKeys();
killer.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(Math.min(PURGE_MAX_POINT, currentPurgePoints + pointsForMob), currentKeys));
final int remainingKeys = (killer.getPurgePoints().get(CATEGORY) == null) ? 0 : killer.getPurgePoints().get(CATEGORY).getMaxPeriodicKeys();
killer.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(Math.min(PURGE_MAX_POINT, currentPurgePoints + pointsForMob), currentKeys, remainingKeys));
lastCategory(killer);
checkPurgeComplete(killer);
killer.sendPacket(new ExSubjugationSidebar(CATEGORY, killer.getPurgePoints().get(CATEGORY)));
killer.sendPacket(new ExSubjugationSidebar(killer, killer.getPurgePoints().get(CATEGORY)));
}
return super.onKill(npc, killer, isSummon);
}
@@ -71,12 +75,22 @@ public class PlainsOfTheLizardmenPurge extends AbstractNpcAI
{
final int points = player.getPurgePoints().get(CATEGORY).getPoints();
final int keys = player.getPurgePoints().get(CATEGORY).getKeys();
if ((points >= PURGE_MAX_POINT) && (keys < 70))
if ((points >= PURGE_MAX_POINT) && (keys < MAX_KEYS))
{
player.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(points - PURGE_MAX_POINT, keys + 1));
player.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(points - PURGE_MAX_POINT, keys + 1, player.getPurgePoints().get(CATEGORY).getMaxPeriodicKeys() - 1));
}
}
private void lastCategory(Player player)
{
if (player.getPurgeLastCategory() == CATEGORY)
{
return;
}
player.getVariables().remove(PlayerVariables.PURGE_LAST_CATEGORY);
player.getVariables().set(PlayerVariables.PURGE_LAST_CATEGORY, CATEGORY);
}
public static void main(String[] args)
{
new PlainsOfTheLizardmenPurge();

View File

@@ -23,16 +23,18 @@ import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.holders.PurgePlayerHolder;
import org.l2jmobius.gameserver.model.holders.SubjugationHolder;
import org.l2jmobius.gameserver.model.variables.PlayerVariables;
import org.l2jmobius.gameserver.network.serverpackets.subjugation.ExSubjugationSidebar;
import ai.AbstractNpcAI;
/**
* Written by Berezkin Nikolay, on 13.04.2021
* Written by Berezkin Nikolay, Serenitty
*/
public class SelMahumBasePurge extends AbstractNpcAI
{
private static final int CATEGORY = 6;
private static final int MAX_KEYS = 40;
private static final int PURGE_MAX_POINT = 1000000;
private static final SubjugationHolder PURGE_DATA = SubjugationData.getInstance().getSubjugation(CATEGORY);
@@ -60,9 +62,11 @@ public class SelMahumBasePurge extends AbstractNpcAI
final int pointsForMob = isHotTime ? PURGE_DATA.getNpcs().get(npc.getId()) * 2 : PURGE_DATA.getNpcs().get(npc.getId());
final int currentPurgePoints = (killer.getPurgePoints().get(CATEGORY) == null) ? 0 : killer.getPurgePoints().get(CATEGORY).getPoints();
final int currentKeys = (killer.getPurgePoints().get(CATEGORY) == null) ? 0 : killer.getPurgePoints().get(CATEGORY).getKeys();
killer.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(Math.min(PURGE_MAX_POINT, currentPurgePoints + pointsForMob), currentKeys));
final int remainingKeys = (killer.getPurgePoints().get(CATEGORY) == null) ? 0 : killer.getPurgePoints().get(CATEGORY).getMaxPeriodicKeys();
killer.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(Math.min(PURGE_MAX_POINT, currentPurgePoints + pointsForMob), currentKeys, remainingKeys));
lastCategory(killer);
checkPurgeComplete(killer);
killer.sendPacket(new ExSubjugationSidebar(CATEGORY, killer.getPurgePoints().get(CATEGORY)));
killer.sendPacket(new ExSubjugationSidebar(killer, killer.getPurgePoints().get(CATEGORY)));
}
return super.onKill(npc, killer, isSummon);
}
@@ -71,12 +75,22 @@ public class SelMahumBasePurge extends AbstractNpcAI
{
final int points = player.getPurgePoints().get(CATEGORY).getPoints();
final int keys = player.getPurgePoints().get(CATEGORY).getKeys();
if ((points >= PURGE_MAX_POINT) && (keys < 70))
if ((points >= PURGE_MAX_POINT) && (keys < MAX_KEYS))
{
player.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(points - PURGE_MAX_POINT, keys + 1));
player.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(points - PURGE_MAX_POINT, keys + 1, player.getPurgePoints().get(CATEGORY).getMaxPeriodicKeys() - 1));
}
}
private void lastCategory(Player player)
{
if (player.getPurgeLastCategory() == CATEGORY)
{
return;
}
player.getVariables().remove(PlayerVariables.PURGE_LAST_CATEGORY);
player.getVariables().set(PlayerVariables.PURGE_LAST_CATEGORY, CATEGORY);
}
public static void main(String[] args)
{
new SelMahumBasePurge();

View File

@@ -23,16 +23,18 @@ import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.holders.PurgePlayerHolder;
import org.l2jmobius.gameserver.model.holders.SubjugationHolder;
import org.l2jmobius.gameserver.model.variables.PlayerVariables;
import org.l2jmobius.gameserver.network.serverpackets.subjugation.ExSubjugationSidebar;
import ai.AbstractNpcAI;
/**
* Written by Berezkin Nikolay, on 13.04.2021
* Written by Berezkin Nikolay, Serenitty
*/
public class SilentValleyPurge extends AbstractNpcAI
{
private static final int CATEGORY = 2;
private static final int MAX_KEYS = 40;
private static final int PURGE_MAX_POINT = 1000000;
private static final SubjugationHolder PURGE_DATA = SubjugationData.getInstance().getSubjugation(CATEGORY);
@@ -60,9 +62,11 @@ public class SilentValleyPurge extends AbstractNpcAI
final int pointsForMob = isHotTime ? PURGE_DATA.getNpcs().get(npc.getId()) * 2 : PURGE_DATA.getNpcs().get(npc.getId());
final int currentPurgePoints = (killer.getPurgePoints().get(CATEGORY) == null) ? 0 : killer.getPurgePoints().get(CATEGORY).getPoints();
final int currentKeys = (killer.getPurgePoints().get(CATEGORY) == null) ? 0 : killer.getPurgePoints().get(CATEGORY).getKeys();
killer.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(Math.min(PURGE_MAX_POINT, currentPurgePoints + pointsForMob), currentKeys));
final int remainingKeys = (killer.getPurgePoints().get(CATEGORY) == null) ? 0 : killer.getPurgePoints().get(CATEGORY).getMaxPeriodicKeys();
killer.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(Math.min(PURGE_MAX_POINT, currentPurgePoints + pointsForMob), currentKeys, remainingKeys));
lastCategory(killer);
checkPurgeComplete(killer);
killer.sendPacket(new ExSubjugationSidebar(CATEGORY, killer.getPurgePoints().get(CATEGORY)));
killer.sendPacket(new ExSubjugationSidebar(killer, killer.getPurgePoints().get(CATEGORY)));
}
return super.onKill(npc, killer, isSummon);
}
@@ -71,12 +75,22 @@ public class SilentValleyPurge extends AbstractNpcAI
{
final int points = player.getPurgePoints().get(CATEGORY).getPoints();
final int keys = player.getPurgePoints().get(CATEGORY).getKeys();
if ((points >= PURGE_MAX_POINT) && (keys < 70))
if ((points >= PURGE_MAX_POINT) && (keys < MAX_KEYS))
{
player.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(points - PURGE_MAX_POINT, keys + 1));
player.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(points - PURGE_MAX_POINT, keys + 1, player.getPurgePoints().get(CATEGORY).getMaxPeriodicKeys() - 1));
}
}
private void lastCategory(Player player)
{
if (player.getPurgeLastCategory() == CATEGORY)
{
return;
}
player.getVariables().remove(PlayerVariables.PURGE_LAST_CATEGORY);
player.getVariables().set(PlayerVariables.PURGE_LAST_CATEGORY, CATEGORY);
}
public static void main(String[] args)
{
new SilentValleyPurge();

View File

@@ -23,16 +23,18 @@ import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.holders.PurgePlayerHolder;
import org.l2jmobius.gameserver.model.holders.SubjugationHolder;
import org.l2jmobius.gameserver.model.variables.PlayerVariables;
import org.l2jmobius.gameserver.network.serverpackets.subjugation.ExSubjugationSidebar;
import ai.AbstractNpcAI;
/**
* Written by Berezkin Nikolay, on 13.04.2021
* Written by Berezkin Nikolay, Serenitty
*/
public class TowerOfInsolencePurge extends AbstractNpcAI
{
private static final int CATEGORY = 4;
private static final int MAX_KEYS = 40;
private static final int PURGE_MAX_POINT = 1000000;
private static final SubjugationHolder PURGE_DATA = SubjugationData.getInstance().getSubjugation(CATEGORY);
@@ -60,9 +62,11 @@ public class TowerOfInsolencePurge extends AbstractNpcAI
final int pointsForMob = isHotTime ? PURGE_DATA.getNpcs().get(npc.getId()) * 2 : PURGE_DATA.getNpcs().get(npc.getId());
final int currentPurgePoints = (killer.getPurgePoints().get(CATEGORY) == null) ? 0 : killer.getPurgePoints().get(CATEGORY).getPoints();
final int currentKeys = (killer.getPurgePoints().get(CATEGORY) == null) ? 0 : killer.getPurgePoints().get(CATEGORY).getKeys();
killer.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(Math.min(PURGE_MAX_POINT, currentPurgePoints + pointsForMob), currentKeys));
final int remainingKeys = (killer.getPurgePoints().get(CATEGORY) == null) ? 0 : killer.getPurgePoints().get(CATEGORY).getMaxPeriodicKeys();
killer.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(Math.min(PURGE_MAX_POINT, currentPurgePoints + pointsForMob), currentKeys, remainingKeys));
lastCategory(killer);
checkPurgeComplete(killer);
killer.sendPacket(new ExSubjugationSidebar(CATEGORY, killer.getPurgePoints().get(CATEGORY)));
killer.sendPacket(new ExSubjugationSidebar(killer, killer.getPurgePoints().get(CATEGORY)));
}
return super.onKill(npc, killer, isSummon);
}
@@ -71,12 +75,22 @@ public class TowerOfInsolencePurge extends AbstractNpcAI
{
final int points = player.getPurgePoints().get(CATEGORY).getPoints();
final int keys = player.getPurgePoints().get(CATEGORY).getKeys();
if ((points >= PURGE_MAX_POINT) && (keys < 70))
if ((points >= PURGE_MAX_POINT) && (keys < MAX_KEYS))
{
player.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(points - PURGE_MAX_POINT, keys + 1));
player.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(points - PURGE_MAX_POINT, keys + 1, player.getPurgePoints().get(CATEGORY).getMaxPeriodicKeys() - 1));
}
}
private void lastCategory(Player player)
{
if (player.getPurgeLastCategory() == CATEGORY)
{
return;
}
player.getVariables().remove(PlayerVariables.PURGE_LAST_CATEGORY);
player.getVariables().set(PlayerVariables.PURGE_LAST_CATEGORY, CATEGORY);
}
public static void main(String[] args)
{
new TowerOfInsolencePurge();

View File

@@ -137,6 +137,7 @@ public class DailyTaskManager
resetRecommends();
resetTrainingCamp();
resetTimedHuntingZones();
resetMorgosMilitaryBase();
resetDailyMissionRewards();
resetAttendanceRewards();
resetVip();
@@ -699,6 +700,32 @@ public class DailyTaskManager
LOGGER.info("Daily payment resurrection count for player has been resetted.");
}
private void resetMorgosMilitaryBase()
{
// Update data for offline players.
try (Connection con = DatabaseFactory.getConnection())
{
try (PreparedStatement ps = con.prepareStatement("DELETE FROM character_variables WHERE var=?"))
{
ps.setString(1, "MORGOS_MILITARY_FREE");
ps.execute();
}
}
catch (Exception e)
{
LOGGER.log(Level.SEVERE, getClass().getSimpleName() + ": Could not reset MorgosMilitaryBase: " + e);
}
// Update data for online players.
for (Player player : World.getInstance().getPlayers())
{
player.getAccountVariables().remove("MORGOS_MILITARY_FREE");
player.getAccountVariables().storeMe();
}
LOGGER.info("MorgosMilitaryBase has been resetted.");
}
public static DailyTaskManager getInstance()
{
return SingletonHolder.INSTANCE;

View File

@@ -150,7 +150,7 @@ public class PurgeRankingManager
if (onlinePlayer != null)
{
onlinePlayer.getPurgePoints().clear();
onlinePlayer.sendPacket(new ExSubjugationSidebar(category, new PurgePlayerHolder(0, 0)));
onlinePlayer.sendPacket(new ExSubjugationSidebar(null, new PurgePlayerHolder(0, 0, 0)));
}
counter++;

View File

@@ -456,7 +456,7 @@ public class Player extends Playable
// Purge list:
private static final String DELETE_SUBJUGATION = "DELETE FROM character_purge WHERE charId=?";
private static final String INSERT_SUBJUGATION = "REPLACE INTO character_purge (`charId`, `category`, `points`, `keys`) VALUES (?, ?, ?, ?)";
private static final String INSERT_SUBJUGATION = "REPLACE INTO character_purge (`charId`, `category`, `points`, `keys`, `remainingKeys`) VALUES (?, ?, ?, ?, ?)";
private static final String RESTORE_SUBJUGATION = "SELECT * FROM character_purge WHERE charId=?";
// Elemental Spirits:
@@ -15349,6 +15349,7 @@ public class Player extends Playable
st.setInt(2, category);
st.setInt(3, data.getPoints());
st.setInt(4, data.getKeys());
st.setInt(5, data.getMaxPeriodicKeys());
st.addBatch();
}
catch (Exception e)
@@ -15381,7 +15382,7 @@ public class Player extends Playable
{
while (rset.next())
{
_purgePoints.put(rset.getInt("category"), new PurgePlayerHolder(rset.getInt("points"), rset.getInt("keys")));
_purgePoints.put(rset.getInt("category"), new PurgePlayerHolder(rset.getInt("points"), rset.getInt("keys"), rset.getInt("remainingKeys")));
}
}
@@ -15392,6 +15393,16 @@ public class Player extends Playable
}
}
public int getPurgeLastCategory()
{
return getVariables().getInt(PlayerVariables.PURGE_LAST_CATEGORY, 1);
}
public void setPurgeLastCategory(int category)
{
getVariables().set(PlayerVariables.PURGE_LAST_CATEGORY, category);
}
public int getClanDonationPoints()
{
return getVariables().getInt(PlayerVariables.CLAN_DONATION_POINTS, 3);

View File

@@ -17,17 +17,19 @@
package org.l2jmobius.gameserver.model.holders;
/**
* Written by Berezkin Nikolay, on 04.05.2021
* Written by Berezkin Nikolay, Serenitty
*/
public class PurgePlayerHolder
{
private final int _points;
private final int _keys;
private int _getMaxPeriodicKeys;
public PurgePlayerHolder(int points, int keys)
public PurgePlayerHolder(int points, int keys, int remainingKeys)
{
_points = points;
_keys = keys;
_getMaxPeriodicKeys = remainingKeys;
}
public int getPoints()
@@ -39,4 +41,13 @@ public class PurgePlayerHolder
{
return _keys;
}
public int getMaxPeriodicKeys()
{
if ((_keys == 0) && (_getMaxPeriodicKeys == 0))
{
_getMaxPeriodicKeys += 40;
}
return _getMaxPeriodicKeys;
}
}

View File

@@ -80,6 +80,7 @@ public class PlayerVariables extends AbstractVariables
public static final String STAT_WIT = "STAT_WIT";
public static final String STAT_MEN = "STAT_MEN";
public static final String RESURRECT_BY_PAYMENT_COUNT = "RESURRECT_BY_PAYMENT_COUNT";
public static final String PURGE_LAST_CATEGORY = "PURGE_LAST_CATEGORY";
public static final String CLAN_JOIN_TIME = "CLAN_JOIN_TIME";
public static final String CLAN_DONATION_POINTS = "CLAN_DONATION_POINTS";

View File

@@ -678,7 +678,7 @@ public class EnterWorld implements IClientIncomingPacket
player.sendPacket(new ExCollectionInfo(player, category));
}
player.sendPacket(new ExSubjugationSidebar(1, player.getPurgePoints().get(1)));
player.sendPacket(new ExSubjugationSidebar(player, player.getPurgePoints().get(player.getPurgeLastCategory())));
player.sendPacket(new ItemDeletionInfo());

View File

@@ -61,7 +61,7 @@ public class RequestSubjugationGacha implements IClientIncomingPacket
{
player.getInventory().reduceAdena("Purge Gacha", 20000L * _amount, player, null);
final int curKeys = playerKeys.getKeys() - _amount;
player.getPurgePoints().put(_category, new PurgePlayerHolder(playerKeys.getPoints(), curKeys));
player.getPurgePoints().put(_category, new PurgePlayerHolder(playerKeys.getPoints(), curKeys, 0));
Map<Integer, Integer> rewards = new HashMap<>();
for (int i = 0; i < _amount; i++)
{

View File

@@ -27,7 +27,7 @@ import org.l2jmobius.gameserver.network.OutgoingPackets;
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
/**
* Written by Berezkin Nikolay, on 13.04.2021 01 00 00 00 //category 01 00 00 00 1901 00 00 //points 00 00 00 00 4600 00 00 //70 max keys ?
* Written by Berezkin Nikolay, 40 keys max according to retail.
*/
public class ExSubjugationList implements IClientOutgoingPacket
{
@@ -48,7 +48,7 @@ public class ExSubjugationList implements IClientOutgoingPacket
packet.writeD(integerPurgePlayerHolderEntry.getKey());
packet.writeD(integerPurgePlayerHolderEntry.getValue() != null ? integerPurgePlayerHolderEntry.getValue().getPoints() : 0);
packet.writeD(integerPurgePlayerHolderEntry.getValue() != null ? integerPurgePlayerHolderEntry.getValue().getKeys() : 0);
packet.writeD(70);
packet.writeD(integerPurgePlayerHolderEntry.getValue() != null ? integerPurgePlayerHolderEntry.getValue().getMaxPeriodicKeys() : 40);
}
return true;
}

View File

@@ -17,21 +17,22 @@
package org.l2jmobius.gameserver.network.serverpackets.subjugation;
import org.l2jmobius.commons.network.PacketWriter;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.holders.PurgePlayerHolder;
import org.l2jmobius.gameserver.network.OutgoingPackets;
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
/**
* Written by Berezkin Nikolay, on 13.04.2021 01 00 00 00 19 01 00 00 0000 0000
* Written by Berezkin Nikolay, Serenitty
*/
public class ExSubjugationSidebar implements IClientOutgoingPacket
{
private final Player _player;
private final PurgePlayerHolder _purgeData;
private final int _category;
public ExSubjugationSidebar(int category, PurgePlayerHolder purgeData)
public ExSubjugationSidebar(Player player, PurgePlayerHolder purgeData)
{
_category = category;
_player = player;
_purgeData = purgeData;
}
@@ -39,9 +40,9 @@ public class ExSubjugationSidebar implements IClientOutgoingPacket
public boolean write(PacketWriter packet)
{
OutgoingPackets.EX_SUBJUGATION_SIDEBAR.writeId(packet);
packet.writeD(_category); // key size
packet.writeD(_purgeData != null ? _purgeData.getPoints() : 0); // 1000000 = 100 percent
packet.writeD(_purgeData != null ? _purgeData.getKeys() : 0);
packet.writeD(_player == null ? 0 : _player.getPurgeLastCategory());
packet.writeD(_purgeData == null ? 0 : _purgeData.getPoints()); // 1000000 = 100 percent
packet.writeD(_purgeData == null ? 0 : _purgeData.getKeys());
packet.writeD(0);
return true;
}