Addition of purge system.

Contributed by iDesy.
This commit is contained in:
MobiusDevelopment
2021-05-19 21:23:03 +00:00
parent 4024c3bbb5
commit 2dc01faa53
34 changed files with 1956 additions and 8 deletions

View File

@@ -658,6 +658,14 @@ EnableAutoBuff = True
EnableAutoItem = True
# ---------------------------------------------------------------------------
# Purge Settings
# ---------------------------------------------------------------------------
# Purge reward mail message.
SubjugationTopicHeader = Purge reward
SubjugationTopicBody = Reward for being in the top of the best players in clearing the lands of Aden
# ---------------------------------------------------------------------------
# Developer Settings
# ---------------------------------------------------------------------------

View File

@@ -0,0 +1,128 @@
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/Subjugation.xsd">
<purge name="Cruma Tower Purge" category="1" hottimes="12-14;19-23">
<npc id="22200" points="200" /> <!-- Porta -->
<npc id="22201" points="200" /> <!-- Excuro -->
<npc id="22202" points="200" /> <!-- Mordeo -->
<npc id="22203" points="200" /> <!-- Ricenseo -->
<npc id="22204" points="200" /> <!-- Krator -->
<npc id="22205" points="200" /> <!-- Catherok -->
<npc id="22206" points="200" /> <!-- Premo -->
<npc id="22207" points="200" /> <!-- Validus -->
<npc id="22208" points="200" /> <!-- Dicor -->
<npc id="22209" points="200" /> <!-- Perum -->
<npc id="22210" points="200" /> <!-- Torfe -->
<npc id="29006" points="200" /> <!-- Core -->
<npc id="29007" points="200" /> <!-- Death Knight -->
<npc id="29008" points="200" /> <!-- Doom Wraith -->
</purge>
<purge name="Silent Valley Purge" category="2" hottimes="12-14;19-23">
<npc id="20968" points="300" /> <!-- Forgotten Face -->
<npc id="20969" points="300" /> <!-- Giant's Shadow -->
<npc id="20971" points="300" /> <!-- Warrior of Ancient Times -->
<npc id="20972" points="300" /> <!-- Shaman of Ancient Times -->
<npc id="20973" points="300" /> <!-- Forgotten Ancient Creature -->
</purge>
<purge name="Plains of the Lizardmen Purge" category="3" hottimes="12-14;19-23">
<npc id="22151" points="400" /> <!-- Tanta Lizardman -->
<npc id="22152" points="400" /> <!-- Tanta Lizardman Warrior -->
<npc id="22153" points="400" /> <!-- Tanta Lizardman Berserker -->
<npc id="22154" points="400" /> <!-- Tanta Lizardman Archer -->
<npc id="22156" points="400" /> <!-- Greg -->
</purge>
<purge name="Tower of Insolence Purge" category="4" hottimes="12-14;19-23">
<npc id="21989" points="400" /> <!-- Ghost of the Tower -->
<npc id="21990" points="400" /> <!-- Tower Watchman -->
<npc id="21991" points="400" /> <!-- Ghastly Warrior -->
<npc id="21992" points="400" /> <!-- Archer of Despair -->
<npc id="21994" points="400" /> <!-- Crendion -->
<npc id="21995" points="400" /> <!-- Swordsman of Ordeal -->
<npc id="21996" points="400" /> <!-- Hound of Destruction -->
<npc id="21997" points="400" /> <!-- Royal Guard of Insolence -->
<npc id="21998" points="400" /> <!-- Archer of Insolence -->
<npc id="21999" points="400" /> <!-- Haughty Judge -->
<npc id="22001" points="400" /> <!-- Corrupted Sage -->
<npc id="22000" points="400" /> <!-- Corrupted Ghost -->
<npc id="22002" points="400" /> <!-- Corrupted Warrior -->
<npc id="22003" points="400" /> <!-- Archer of Abyss -->
<npc id="22004" points="400" /> <!-- Hound of Grief -->
<npc id="22005" points="400" /> <!-- Hallate's Inspector -->
<npc id="22006" points="400" /> <!-- Hallate's Knight -->
<npc id="22007" points="400" /> <!-- Hallate's Commander -->
<npc id="22008" points="400" /> <!-- Hallate's Maid -->
<npc id="22009" points="400" /> <!-- Erin Ediunce -->
<npc id="22010" points="400" /> <!-- Platinum Tribe Soldier -->
<npc id="22011" points="400" /> <!-- Platinum Tribe Shaman -->
<npc id="22012" points="400" /> <!-- Platinum Tribe Guard -->
<npc id="22013" points="400" /> <!-- Platinum Tribe Knight -->
<npc id="22014" points="400" /> <!-- Platinum Tribe Officer -->
<npc id="22015" points="400" /> <!-- Platinum Tribe Warrior -->
<npc id="22016" points="400" /> <!-- Platinum Tribe Elite Soldier -->
<npc id="22017" points="400" /> <!-- Platinum Tribe Archer -->
<npc id="22018" points="400" /> <!-- Platinum Tribe Gladiator -->
<npc id="22019" points="400" /> <!-- Platinum Tribe Prefect -->
<npc id="22020" points="400" /> <!-- Guardian Angel -->
<npc id="22021" points="400" /> <!-- Guardian Archangel -->
<npc id="22022" points="400" /> <!-- Guardian Angel Messenger -->
<npc id="22024" points="400" /> <!-- Angel Messenger of Insolence -->
<npc id="22025" points="400" /> <!-- Prime Messenger of Insolence -->
<npc id="22026" points="400" /> <!-- Wise Messenger of Insolence -->
<npc id="22028" points="400" /> <!-- Virtuous Guardian Angel -->
<npc id="22029" points="400" /> <!-- Messenger Commander -->
<npc id="22030" points="400" /> <!-- Messenger Scout -->
<npc id="22032" points="400" /> <!-- Sealed Angel -->
<npc id="22033" points="400" /> <!-- Sealed Guardian Angel -->
<npc id="22035" points="400" /> <!-- Tower Guardian Archangel -->
<npc id="22038" points="400" /> <!-- Tower Guardian Shaman -->
<npc id="22039" points="400" /> <!-- Tower Guardian Messenger -->
</purge>
<purge name="Dragon Valley Purge" category="5" hottimes="12-14;19-23">
<npc id="22309" points="400" /> <!-- Dragontroop Wizard -->
<npc id="22308" points="400" /> <!-- Dragontroop Minion -->
<npc id="22306" points="400" /> <!-- Dragontroop Lancer -->
<npc id="22307" points="400" /> <!-- Dragontroop Berserker -->
<npc id="22305" points="400" /> <!-- Dragontroop Soldier -->
<npc id="22310" points="400" /> <!-- Dragontroop Elite Wizard -->
<npc id="22311" points="400" /> <!-- Drake Minion -->
<npc id="22312" points="400" /> <!-- Mutated Drake -->
<npc id="22310" points="400" /> <!-- Dragontroop Elite Wizard -->
<npc id="20239" points="400" /> <!-- Cave Servant Captain -->
<npc id="20238" points="400" /> <!-- Cave Servant Warrior -->
<npc id="20236" points="400" /> <!-- Cave Servant -->
<npc id="20237" points="400" /> <!-- Cave Servant Archer -->
<npc id="20235" points="400" /> <!-- Convict -->
<npc id="20146" points="400" /> <!-- Headless Knight -->
<npc id="20412" points="400" /> <!-- Cave Banshee -->
<npc id="20246" points="400" /> <!-- Cave Keeper -->
<npc id="20240" points="400" /> <!-- Royal Cave Servant -->
<npc id="20241" points="400" /> <!-- Gargoyle Hunter -->
<npc id="20242" points="400" /> <!-- Dustwind Gargoyle -->
<npc id="20243" points="400" /> <!-- Thunder Wyrm -->
<npc id="20244" points="400" /> <!-- Maluk Succubus -->
<npc id="20247" points="400" /> <!-- ??? -->
</purge>
<purge name="Sel Mahum Base Purge" category="6" hottimes="12-14;19-23">
<npc id="22238" points="400" /> <!-- Sel Mahum Raider -->
<npc id="22237" points="400" /> <!-- Sel Mahum Sniper -->
<npc id="22239" points="400" /> <!-- Sel Mahum Berserker -->
<npc id="22240" points="400" /> <!-- Sel Mahum Mage -->
<npc id="22241" points="400" /> <!-- Sel Mahum Thief -->
<npc id="22242" points="400" /> <!-- Sel Mahum Wizard -->
<npc id="22243" points="400" /> <!-- Sel Mahum Knight -->
<npc id="22244" points="400" /> <!-- Sel Mahum Footman -->
<npc id="22245" points="400" /> <!-- Sel Mahum Bowman -->
<npc id="22254" points="400" /> <!-- Sel Mahum Knight Captain -->
<npc id="22253" points="400" /> <!-- Sel Mahum Elder -->
<npc id="22255" points="400" /> <!-- Sel Mahum Escort Captain -->
<npc id="22256" points="400" /> <!-- Sel Mahum Archer -->
</purge>
<purge name="Orc Barracks Purge" category="7" hottimes="12-14;19-23">
<npc id="22135" points="400" /> <!-- Turek Orc -->
<npc id="22137" points="400" /> <!-- Turek Orc Marksman -->
<npc id="22138" points="400" /> <!-- Turek Orc Warrior -->
<npc id="22139" points="400" /> <!-- Turek Orc Shaman -->
<npc id="22141" points="400" /> <!-- Turek Orc Elite -->
<npc id="22143" points="400" /> <!-- Turek Orc Sniper -->
<npc id="22144" points="400" /> <!-- Turek Orc Prefect -->
<npc id="22145" points="400" /> <!-- Turek Orc Elder -->
</purge>
</list>

View File

@@ -0,0 +1,58 @@
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/SubjugationGacha.xsd">
<purge category="1">
<item id="95432" rate="10.0"/> <!-- Excuro's Staff -->
<item id="95433" rate="10.0"/> <!-- Torfe's Claw -->
<item id="95481" rate="20.0"/> <!-- Aden Purge Crystal -->
<item id="95482" rate="20.0"/> <!-- Recipe: Cruma Tower Purge Equipment -->
<item id="95474" rate="20.0"/> <!-- High-grade Supply Box - Cruma Tower Purge -->
<item id="95467" rate="20.0"/> <!-- Low-grade Supply Box - Cruma Tower Purge -->
</purge>
<purge category="2">
<item id="95434" rate="10.0"/> <!-- Giants' Club -->
<item id="95435" rate="10.0"/> <!-- Ancient Rapier -->
<item id="95481" rate="20.0"/> <!-- Aden Purge Crystal -->
<item id="95483" rate="20.0"/> <!-- Recipe: Silent Valley Purge Equipment -->
<item id="95475" rate="20.0"/> <!-- High-grade Supply Box - Silent Valley Purge -->
<item id="95468" rate="20.0"/> <!-- Low-grade Supply Box - Silent Valley Purge -->
</purge>
<purge category="3">
<item id="95438" rate="10.0"/> <!-- Lizardman Shaman's Staff -->
<item id="95439" rate="10.0"/> <!-- Lizard Slayer -->
<item id="95481" rate="20.0"/> <!-- Aden Purge Crystal -->
<item id="95485" rate="20.0"/> <!-- Recipe: Plains of the Lizardmen Purge Equipment -->
<item id="95477" rate="20.0"/> <!-- High-grade Supply Box - Plains of the Lizardmen Purge -->
<item id="95470" rate="20.0"/> <!-- Low-grade Supply Box - Plains of the Lizardmen Purge -->
</purge>
<purge category="4">
<item id="95436" rate="10.0"/> <!-- Guardian Messenger's Spear -->
<item id="95437" rate="10.0"/> <!-- Sealed Angel's Hammer -->
<item id="95481" rate="20.0"/> <!-- Aden Purge Crystal -->
<item id="95484" rate="20.0"/> <!-- Recipe: Tower of Insolence Purge Equipment -->
<item id="95476" rate="20.0"/> <!-- High-grade Supply Box - Tower of Insolence Purge -->
<item id="95469" rate="20.0"/> <!-- Low-grade Supply Box - Tower of Insolence Purge -->
</purge>
<purge category="5">
<item id="95440" rate="10.0"/> <!-- Deadman's Dagger -->
<item id="95441" rate="10.0"/> <!-- Dragon Bone Blade -->
<item id="95481" rate="20.0"/> <!-- Aden Purge Crystal -->
<item id="95486" rate="20.0"/> <!-- Recipe: Dragon Valley Purge Equipment -->
<item id="95478" rate="20.0"/> <!-- High-grade Supply Box - Dragon Valley Purge -->
<item id="95471" rate="20.0"/> <!-- Low-grade Supply Box - Dragon Valley Purge -->
</purge>
<purge category="6">
<item id="95442" rate="10.0"/> <!-- Berserker's Sword -->
<item id="95443" rate="10.0"/> <!-- Sel Mahum Sniper -->
<item id="95481" rate="20.0"/> <!-- Aden Purge Crystal -->
<item id="95487" rate="20.0"/> <!-- Recipe: Sel Mahum Base Purge Equipment -->
<item id="95479" rate="20.0"/> <!-- High-grade Supply Box - Sel Mahum Base Purge -->
<item id="95472" rate="20.0"/> <!-- Low-grade Supply Box - Sel Mahum Base Purge -->
</purge>
<purge category="7">
<item id="95444" rate="10.0"/> <!-- Turek Orc Prefect's Dual Swords -->
<item id="95445" rate="10.0"/> <!-- Butcher's Long Sword -->
<item id="95481" rate="20.0"/> <!-- Aden Purge Crystal -->
<item id="95488" rate="20.0"/> <!-- Recipe: Orc Barracks Purge Equipment -->
<item id="95480" rate="20.0"/> <!-- High-grade Supply Box - Orc Barracks Purge -->
<item id="95473" rate="20.0"/> <!-- Low-grade Supply Box - Orc Barracks Purge -->
</purge>
</list>

View File

@@ -0,0 +1,84 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package ai.others.Subjugation;
import java.util.Calendar;
import org.l2jmobius.gameserver.data.xml.SubjugationData;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.PurgePlayerHolder;
import org.l2jmobius.gameserver.model.holders.SubjugationHolder;
import org.l2jmobius.gameserver.network.serverpackets.subjugation.ExSubjugationSidebar;
import ai.AbstractNpcAI;
/**
* Written by Berezkin Nikolay, on 13.04.2021
*/
public class CrumaTowerPurge extends AbstractNpcAI
{
private static final int CATEGORY = 1;
private static final int PURGE_MAX_POINT = 1000000;
private static final SubjugationHolder PURGE_DATA = SubjugationData.getInstance().getSubjugation(CATEGORY);
private CrumaTowerPurge()
{
addKillId(PURGE_DATA.getNpcs().keySet().stream().mapToInt(it -> it).toArray());
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
if (killer.getVitalityPoints() > 0)
{
boolean isHotTime = false;
for (int[] it : SubjugationData.getInstance().getSubjugation(CATEGORY).getHottimes())
{
final int minHour = it[0];
final int maxHour = it[1];
final int currentHour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
if ((currentHour >= minHour) && (maxHour > currentHour))
{
isHotTime = true;
}
}
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));
checkPurgeComplete(killer);
killer.sendPacket(new ExSubjugationSidebar(CATEGORY, killer.getPurgePoints().get(CATEGORY)));
}
return super.onKill(npc, killer, isSummon);
}
private void checkPurgeComplete(PlayerInstance player)
{
final int points = player.getPurgePoints().get(CATEGORY).getPoints();
final int keys = player.getPurgePoints().get(CATEGORY).getKeys();
if ((points >= PURGE_MAX_POINT) && (keys < 70))
{
player.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(points - PURGE_MAX_POINT, keys + 1));
}
}
public static void main(String[] args)
{
new CrumaTowerPurge();
}
}

View File

@@ -0,0 +1,84 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package ai.others.Subjugation;
import java.util.Calendar;
import org.l2jmobius.gameserver.data.xml.SubjugationData;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.PurgePlayerHolder;
import org.l2jmobius.gameserver.model.holders.SubjugationHolder;
import org.l2jmobius.gameserver.network.serverpackets.subjugation.ExSubjugationSidebar;
import ai.AbstractNpcAI;
/**
* Written by Berezkin Nikolay, on 13.04.2021
*/
public class DragonValleyPurge extends AbstractNpcAI
{
private static final int CATEGORY = 5;
private static final int PURGE_MAX_POINT = 1000000;
private static final SubjugationHolder PURGE_DATA = SubjugationData.getInstance().getSubjugation(CATEGORY);
private DragonValleyPurge()
{
addKillId(PURGE_DATA.getNpcs().keySet().stream().mapToInt(it -> it).toArray());
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
if (killer.getVitalityPoints() > 0)
{
boolean isHotTime = false;
for (int[] it : SubjugationData.getInstance().getSubjugation(CATEGORY).getHottimes())
{
final int minHour = it[0];
final int maxHour = it[1];
final int currentHour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
if ((currentHour >= minHour) && (maxHour > currentHour))
{
isHotTime = true;
}
}
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));
checkPurgeComplete(killer);
killer.sendPacket(new ExSubjugationSidebar(CATEGORY, killer.getPurgePoints().get(CATEGORY)));
}
return super.onKill(npc, killer, isSummon);
}
private void checkPurgeComplete(PlayerInstance player)
{
final int points = player.getPurgePoints().get(CATEGORY).getPoints();
final int keys = player.getPurgePoints().get(CATEGORY).getKeys();
if ((points >= PURGE_MAX_POINT) && (keys < 70))
{
player.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(points - PURGE_MAX_POINT, keys + 1));
}
}
public static void main(String[] args)
{
new DragonValleyPurge();
}
}

View File

@@ -0,0 +1,84 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package ai.others.Subjugation;
import java.util.Calendar;
import org.l2jmobius.gameserver.data.xml.SubjugationData;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.PurgePlayerHolder;
import org.l2jmobius.gameserver.model.holders.SubjugationHolder;
import org.l2jmobius.gameserver.network.serverpackets.subjugation.ExSubjugationSidebar;
import ai.AbstractNpcAI;
/**
* Written by Berezkin Nikolay, on 13.04.2021
*/
public class OrcBarracksPurge extends AbstractNpcAI
{
private static final int CATEGORY = 7;
private static final int PURGE_MAX_POINT = 1000000;
private static final SubjugationHolder PURGE_DATA = SubjugationData.getInstance().getSubjugation(CATEGORY);
private OrcBarracksPurge()
{
addKillId(PURGE_DATA.getNpcs().keySet().stream().mapToInt(it -> it).toArray());
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
if (killer.getVitalityPoints() > 0)
{
boolean isHotTime = false;
for (int[] it : SubjugationData.getInstance().getSubjugation(CATEGORY).getHottimes())
{
final int minHour = it[0];
final int maxHour = it[1];
final int currentHour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
if ((currentHour >= minHour) && (maxHour > currentHour))
{
isHotTime = true;
}
}
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));
checkPurgeComplete(killer);
killer.sendPacket(new ExSubjugationSidebar(CATEGORY, killer.getPurgePoints().get(CATEGORY)));
}
return super.onKill(npc, killer, isSummon);
}
private void checkPurgeComplete(PlayerInstance player)
{
final int points = player.getPurgePoints().get(CATEGORY).getPoints();
final int keys = player.getPurgePoints().get(CATEGORY).getKeys();
if ((points >= PURGE_MAX_POINT) && (keys < 70))
{
player.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(points - PURGE_MAX_POINT, keys + 1));
}
}
public static void main(String[] args)
{
new OrcBarracksPurge();
}
}

View File

@@ -0,0 +1,84 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package ai.others.Subjugation;
import java.util.Calendar;
import org.l2jmobius.gameserver.data.xml.SubjugationData;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.PurgePlayerHolder;
import org.l2jmobius.gameserver.model.holders.SubjugationHolder;
import org.l2jmobius.gameserver.network.serverpackets.subjugation.ExSubjugationSidebar;
import ai.AbstractNpcAI;
/**
* Written by Berezkin Nikolay, on 13.04.2021
*/
public class PlainsOfTheLizardmenPurge extends AbstractNpcAI
{
private static final int CATEGORY = 3;
private static final int PURGE_MAX_POINT = 1000000;
private static final SubjugationHolder PURGE_DATA = SubjugationData.getInstance().getSubjugation(CATEGORY);
private PlainsOfTheLizardmenPurge()
{
addKillId(PURGE_DATA.getNpcs().keySet().stream().mapToInt(it -> it).toArray());
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
if (killer.getVitalityPoints() > 0)
{
boolean isHotTime = false;
for (int[] it : SubjugationData.getInstance().getSubjugation(CATEGORY).getHottimes())
{
final int minHour = it[0];
final int maxHour = it[1];
final int currentHour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
if ((currentHour >= minHour) && (maxHour > currentHour))
{
isHotTime = true;
}
}
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));
checkPurgeComplete(killer);
killer.sendPacket(new ExSubjugationSidebar(CATEGORY, killer.getPurgePoints().get(CATEGORY)));
}
return super.onKill(npc, killer, isSummon);
}
private void checkPurgeComplete(PlayerInstance player)
{
final int points = player.getPurgePoints().get(CATEGORY).getPoints();
final int keys = player.getPurgePoints().get(CATEGORY).getKeys();
if ((points >= PURGE_MAX_POINT) && (keys < 70))
{
player.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(points - PURGE_MAX_POINT, keys + 1));
}
}
public static void main(String[] args)
{
new PlainsOfTheLizardmenPurge();
}
}

View File

@@ -0,0 +1,84 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package ai.others.Subjugation;
import java.util.Calendar;
import org.l2jmobius.gameserver.data.xml.SubjugationData;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.PurgePlayerHolder;
import org.l2jmobius.gameserver.model.holders.SubjugationHolder;
import org.l2jmobius.gameserver.network.serverpackets.subjugation.ExSubjugationSidebar;
import ai.AbstractNpcAI;
/**
* Written by Berezkin Nikolay, on 13.04.2021
*/
public class SelMahumBasePurge extends AbstractNpcAI
{
private static final int CATEGORY = 6;
private static final int PURGE_MAX_POINT = 1000000;
private static final SubjugationHolder PURGE_DATA = SubjugationData.getInstance().getSubjugation(CATEGORY);
private SelMahumBasePurge()
{
addKillId(PURGE_DATA.getNpcs().keySet().stream().mapToInt(it -> it).toArray());
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
if (killer.getVitalityPoints() > 0)
{
boolean isHotTime = false;
for (int[] it : SubjugationData.getInstance().getSubjugation(CATEGORY).getHottimes())
{
final int minHour = it[0];
final int maxHour = it[1];
final int currentHour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
if ((currentHour >= minHour) && (maxHour > currentHour))
{
isHotTime = true;
}
}
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));
checkPurgeComplete(killer);
killer.sendPacket(new ExSubjugationSidebar(CATEGORY, killer.getPurgePoints().get(CATEGORY)));
}
return super.onKill(npc, killer, isSummon);
}
private void checkPurgeComplete(PlayerInstance player)
{
final int points = player.getPurgePoints().get(CATEGORY).getPoints();
final int keys = player.getPurgePoints().get(CATEGORY).getKeys();
if ((points >= PURGE_MAX_POINT) && (keys < 70))
{
player.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(points - PURGE_MAX_POINT, keys + 1));
}
}
public static void main(String[] args)
{
new SelMahumBasePurge();
}
}

View File

@@ -0,0 +1,84 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package ai.others.Subjugation;
import java.util.Calendar;
import org.l2jmobius.gameserver.data.xml.SubjugationData;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.PurgePlayerHolder;
import org.l2jmobius.gameserver.model.holders.SubjugationHolder;
import org.l2jmobius.gameserver.network.serverpackets.subjugation.ExSubjugationSidebar;
import ai.AbstractNpcAI;
/**
* Written by Berezkin Nikolay, on 13.04.2021
*/
public class SilentValleyPurge extends AbstractNpcAI
{
private static final int CATEGORY = 2;
private static final int PURGE_MAX_POINT = 1000000;
private static final SubjugationHolder PURGE_DATA = SubjugationData.getInstance().getSubjugation(CATEGORY);
private SilentValleyPurge()
{
addKillId(PURGE_DATA.getNpcs().keySet().stream().mapToInt(it -> it).toArray());
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
if (killer.getVitalityPoints() > 0)
{
boolean isHotTime = false;
for (int[] it : SubjugationData.getInstance().getSubjugation(CATEGORY).getHottimes())
{
final int minHour = it[0];
final int maxHour = it[1];
final int currentHour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
if ((currentHour >= minHour) && (maxHour > currentHour))
{
isHotTime = true;
}
}
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));
checkPurgeComplete(killer);
killer.sendPacket(new ExSubjugationSidebar(CATEGORY, killer.getPurgePoints().get(CATEGORY)));
}
return super.onKill(npc, killer, isSummon);
}
private void checkPurgeComplete(PlayerInstance player)
{
final int points = player.getPurgePoints().get(CATEGORY).getPoints();
final int keys = player.getPurgePoints().get(CATEGORY).getKeys();
if ((points >= PURGE_MAX_POINT) && (keys < 70))
{
player.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(points - PURGE_MAX_POINT, keys + 1));
}
}
public static void main(String[] args)
{
new SilentValleyPurge();
}
}

View File

@@ -0,0 +1,84 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package ai.others.Subjugation;
import java.util.Calendar;
import org.l2jmobius.gameserver.data.xml.SubjugationData;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.holders.PurgePlayerHolder;
import org.l2jmobius.gameserver.model.holders.SubjugationHolder;
import org.l2jmobius.gameserver.network.serverpackets.subjugation.ExSubjugationSidebar;
import ai.AbstractNpcAI;
/**
* Written by Berezkin Nikolay, on 13.04.2021
*/
public class TowerOfInsolencePurge extends AbstractNpcAI
{
private static final int CATEGORY = 4;
private static final int PURGE_MAX_POINT = 1000000;
private static final SubjugationHolder PURGE_DATA = SubjugationData.getInstance().getSubjugation(CATEGORY);
private TowerOfInsolencePurge()
{
addKillId(PURGE_DATA.getNpcs().keySet().stream().mapToInt(it -> it).toArray());
}
@Override
public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
{
if (killer.getVitalityPoints() > 0)
{
boolean isHotTime = false;
for (int[] it : SubjugationData.getInstance().getSubjugation(CATEGORY).getHottimes())
{
final int minHour = it[0];
final int maxHour = it[1];
final int currentHour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
if ((currentHour >= minHour) && (maxHour > currentHour))
{
isHotTime = true;
}
}
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));
checkPurgeComplete(killer);
killer.sendPacket(new ExSubjugationSidebar(CATEGORY, killer.getPurgePoints().get(CATEGORY)));
}
return super.onKill(npc, killer, isSummon);
}
private void checkPurgeComplete(PlayerInstance player)
{
final int points = player.getPurgePoints().get(CATEGORY).getPoints();
final int keys = player.getPurgePoints().get(CATEGORY).getKeys();
if ((points >= PURGE_MAX_POINT) && (keys < 70))
{
player.getPurgePoints().put(CATEGORY, new PurgePlayerHolder(points - PURGE_MAX_POINT, keys + 1));
}
}
public static void main(String[] args)
{
new TowerOfInsolencePurge();
}
}

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="list">
<xs:complexType>
<xs:sequence minOccurs="1" maxOccurs="1">
<xs:element name="purge" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence minOccurs="1" maxOccurs="1">
<xs:element name="npc" minOccurs="1" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="id" type="xs:integer" use="required" />
<xs:attribute name="points" type="xs:integer" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="name" type="xs:normalizedString" use="required" />
<xs:attribute name="category" type="xs:integer" use="required" />
<xs:attribute name="hottimes" type="xs:normalizedString" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="list">
<xs:complexType>
<xs:sequence minOccurs="1" maxOccurs="1">
<xs:element name="purge" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence minOccurs="1" maxOccurs="1">
<xs:element name="item" minOccurs="1" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="id" type="xs:integer" use="required" />
<xs:attribute name="rate" type="xs:double" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="category" type="xs:integer" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>