Fixed Plunder effect.

This commit is contained in:
MobiusDevelopment 2019-03-20 00:27:18 +00:00
parent 7ca4b242c5
commit 3c6ad12888
22 changed files with 315 additions and 176 deletions

View File

@ -90,32 +90,32 @@ public final class Plunder extends AbstractEffect
return;
}
monster.setPlundered(player);
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
{
return;
}
monster.setSpoilerObjectId(effector.getObjectId());
if (monster.isSweepActive())
final Collection<ItemHolder> items = monster.takeSweep();
if (items != null)
{
final Collection<ItemHolder> items = monster.takeSweep();
if (items != null)
final boolean lucky = player.tryLuck();
for (ItemHolder sweepedItem : items)
{
for (ItemHolder sweepedItem : items)
final ItemHolder rewardedItem = new ItemHolder(sweepedItem.getId(), sweepedItem.getCount() * (lucky ? 1 : 2));
final L2Party party = effector.getParty();
if (party != null)
{
final L2Party party = effector.getParty();
if (party != null)
{
party.distributeItem(player, sweepedItem, true, monster);
}
else
{
player.addItem("Plunder", sweepedItem, effected, true);
}
party.distributeItem(player, rewardedItem, true, monster);
}
else
{
player.addItem("Plunder", rewardedItem, effected, true);
}
}
}
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
}
}

View File

@ -100,6 +100,7 @@ public class L2Attackable extends L2Npc
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
// Spoil
private int _spoilerObjectId;
private boolean _plundered = false;
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
// Over-hit
private boolean _overhit;
@ -1028,7 +1029,7 @@ public class L2Attackable extends L2Npc
npcTemplate.getExtendDrop().stream().map(ExtendDropData.getInstance()::getExtendDropById).filter(Objects::nonNull).forEach(e -> e.reward(player, this));
if (isSpoiled())
if (isSpoiled() && !_plundered)
{
_sweepItems.set(npcTemplate.calculateDrops(DropType.SPOIL, this, player));
}
@ -1484,6 +1485,7 @@ public class L2Attackable extends L2Npc
// Clear Harvester reward
_harvestItem.set(null);
_sweepItems.set(null);
_plundered = false;
// fake players
if (isFakePlayer())
@ -1566,6 +1568,17 @@ public class L2Attackable extends L2Npc
_spoilerObjectId = spoilerObjectId;
}
/**
* Sets state of the mob to plundered.
* @param player
*/
public void setPlundered(L2PcInstance player)
{
_plundered = true;
_spoilerObjectId = player.getObjectId();
_sweepItems.set(getTemplate().calculateDrops(DropType.SPOIL, this, player));
}
/**
* Sets state of the mob to seeded. Parameters needed to be set before.
* @param seeder

View File

@ -90,32 +90,32 @@ public final class Plunder extends AbstractEffect
return;
}
monster.setPlundered(player);
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
{
return;
}
monster.setSpoilerObjectId(effector.getObjectId());
if (monster.isSweepActive())
final Collection<ItemHolder> items = monster.takeSweep();
if (items != null)
{
final Collection<ItemHolder> items = monster.takeSweep();
if (items != null)
final boolean lucky = player.tryLuck();
for (ItemHolder sweepedItem : items)
{
for (ItemHolder sweepedItem : items)
final ItemHolder rewardedItem = new ItemHolder(sweepedItem.getId(), sweepedItem.getCount() * (lucky ? 1 : 2));
final L2Party party = effector.getParty();
if (party != null)
{
final L2Party party = effector.getParty();
if (party != null)
{
party.distributeItem(player, sweepedItem, true, monster);
}
else
{
player.addItem("Plunder", sweepedItem, effected, true);
}
party.distributeItem(player, rewardedItem, true, monster);
}
else
{
player.addItem("Plunder", rewardedItem, effected, true);
}
}
}
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
}
}

View File

@ -99,6 +99,7 @@ public class L2Attackable extends L2Npc
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
// Spoil
private int _spoilerObjectId;
private boolean _plundered = false;
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
// Over-hit
private boolean _overhit;
@ -1024,7 +1025,7 @@ public class L2Attackable extends L2Npc
npcTemplate.getExtendDrop().stream().map(ExtendDropData.getInstance()::getExtendDropById).filter(Objects::nonNull).forEach(e -> e.reward(player, this));
if (isSpoiled())
if (isSpoiled() && !_plundered)
{
_sweepItems.set(npcTemplate.calculateDrops(DropType.SPOIL, this, player));
}
@ -1430,6 +1431,7 @@ public class L2Attackable extends L2Npc
// Clear Harvester reward
_harvestItem.set(null);
_sweepItems.set(null);
_plundered = false;
// fake players
if (isFakePlayer())
@ -1512,6 +1514,17 @@ public class L2Attackable extends L2Npc
_spoilerObjectId = spoilerObjectId;
}
/**
* Sets state of the mob to plundered.
* @param player
*/
public void setPlundered(L2PcInstance player)
{
_plundered = true;
_spoilerObjectId = player.getObjectId();
_sweepItems.set(getTemplate().calculateDrops(DropType.SPOIL, this, player));
}
/**
* Sets state of the mob to seeded. Parameters needed to be set before.
* @param seeder

View File

@ -90,32 +90,32 @@ public final class Plunder extends AbstractEffect
return;
}
monster.setPlundered(player);
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
{
return;
}
monster.setSpoilerObjectId(effector.getObjectId());
if (monster.isSweepActive())
final Collection<ItemHolder> items = monster.takeSweep();
if (items != null)
{
final Collection<ItemHolder> items = monster.takeSweep();
if (items != null)
final boolean lucky = player.tryLuck();
for (ItemHolder sweepedItem : items)
{
for (ItemHolder sweepedItem : items)
final ItemHolder rewardedItem = new ItemHolder(sweepedItem.getId(), sweepedItem.getCount() * (lucky ? 1 : 2));
final L2Party party = effector.getParty();
if (party != null)
{
final L2Party party = effector.getParty();
if (party != null)
{
party.distributeItem(player, sweepedItem, true, monster);
}
else
{
player.addItem("Plunder", sweepedItem, effected, true);
}
party.distributeItem(player, rewardedItem, true, monster);
}
else
{
player.addItem("Plunder", rewardedItem, effected, true);
}
}
}
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
}
}

View File

@ -99,6 +99,7 @@ public class L2Attackable extends L2Npc
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
// Spoil
private int _spoilerObjectId;
private boolean _plundered = false;
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
// Over-hit
private boolean _overhit;
@ -1024,7 +1025,7 @@ public class L2Attackable extends L2Npc
npcTemplate.getExtendDrop().stream().map(ExtendDropData.getInstance()::getExtendDropById).filter(Objects::nonNull).forEach(e -> e.reward(player, this));
if (isSpoiled())
if (isSpoiled() && !_plundered)
{
_sweepItems.set(npcTemplate.calculateDrops(DropType.SPOIL, this, player));
}
@ -1430,6 +1431,7 @@ public class L2Attackable extends L2Npc
// Clear Harvester reward
_harvestItem.set(null);
_sweepItems.set(null);
_plundered = false;
// fake players
if (isFakePlayer())
@ -1512,6 +1514,17 @@ public class L2Attackable extends L2Npc
_spoilerObjectId = spoilerObjectId;
}
/**
* Sets state of the mob to plundered.
* @param player
*/
public void setPlundered(L2PcInstance player)
{
_plundered = true;
_spoilerObjectId = player.getObjectId();
_sweepItems.set(getTemplate().calculateDrops(DropType.SPOIL, this, player));
}
/**
* Sets state of the mob to seeded. Parameters needed to be set before.
* @param seeder

View File

@ -90,32 +90,32 @@ public final class Plunder extends AbstractEffect
return;
}
monster.setPlundered(player);
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
{
return;
}
monster.setSpoilerObjectId(effector.getObjectId());
if (monster.isSweepActive())
final Collection<ItemHolder> items = monster.takeSweep();
if (items != null)
{
final Collection<ItemHolder> items = monster.takeSweep();
if (items != null)
final boolean lucky = player.tryLuck();
for (ItemHolder sweepedItem : items)
{
for (ItemHolder sweepedItem : items)
final ItemHolder rewardedItem = new ItemHolder(sweepedItem.getId(), sweepedItem.getCount() * (lucky ? 1 : 2));
final L2Party party = effector.getParty();
if (party != null)
{
final L2Party party = effector.getParty();
if (party != null)
{
party.distributeItem(player, sweepedItem, true, monster);
}
else
{
player.addItem("Plunder", sweepedItem, effected, true);
}
party.distributeItem(player, rewardedItem, true, monster);
}
else
{
player.addItem("Plunder", rewardedItem, effected, true);
}
}
}
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
}
}

View File

@ -99,6 +99,7 @@ public class L2Attackable extends L2Npc
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
// Spoil
private int _spoilerObjectId;
private boolean _plundered = false;
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
// Over-hit
private boolean _overhit;
@ -1024,7 +1025,7 @@ public class L2Attackable extends L2Npc
npcTemplate.getExtendDrop().stream().map(ExtendDropData.getInstance()::getExtendDropById).filter(Objects::nonNull).forEach(e -> e.reward(player, this));
if (isSpoiled())
if (isSpoiled() && !_plundered)
{
_sweepItems.set(npcTemplate.calculateDrops(DropType.SPOIL, this, player));
}
@ -1430,6 +1431,7 @@ public class L2Attackable extends L2Npc
// Clear Harvester reward
_harvestItem.set(null);
_sweepItems.set(null);
_plundered = false;
// fake players
if (isFakePlayer())
@ -1512,6 +1514,17 @@ public class L2Attackable extends L2Npc
_spoilerObjectId = spoilerObjectId;
}
/**
* Sets state of the mob to plundered.
* @param player
*/
public void setPlundered(L2PcInstance player)
{
_plundered = true;
_spoilerObjectId = player.getObjectId();
_sweepItems.set(getTemplate().calculateDrops(DropType.SPOIL, this, player));
}
/**
* Sets state of the mob to seeded. Parameters needed to be set before.
* @param seeder

View File

@ -90,32 +90,32 @@ public final class Plunder extends AbstractEffect
return;
}
monster.setPlundered(player);
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
{
return;
}
monster.setSpoilerObjectId(effector.getObjectId());
if (monster.isSweepActive())
final Collection<ItemHolder> items = monster.takeSweep();
if (items != null)
{
final Collection<ItemHolder> items = monster.takeSweep();
if (items != null)
final boolean lucky = player.tryLuck();
for (ItemHolder sweepedItem : items)
{
for (ItemHolder sweepedItem : items)
final ItemHolder rewardedItem = new ItemHolder(sweepedItem.getId(), sweepedItem.getCount() * (lucky ? 1 : 2));
final L2Party party = effector.getParty();
if (party != null)
{
final L2Party party = effector.getParty();
if (party != null)
{
party.distributeItem(player, sweepedItem, true, monster);
}
else
{
player.addItem("Plunder", sweepedItem, effected, true);
}
party.distributeItem(player, rewardedItem, true, monster);
}
else
{
player.addItem("Plunder", rewardedItem, effected, true);
}
}
}
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
}
}

View File

@ -99,6 +99,7 @@ public class L2Attackable extends L2Npc
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
// Spoil
private int _spoilerObjectId;
private boolean _plundered = false;
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
// Over-hit
private boolean _overhit;
@ -1024,7 +1025,7 @@ public class L2Attackable extends L2Npc
npcTemplate.getExtendDrop().stream().map(ExtendDropData.getInstance()::getExtendDropById).filter(Objects::nonNull).forEach(e -> e.reward(player, this));
if (isSpoiled())
if (isSpoiled() && !_plundered)
{
_sweepItems.set(npcTemplate.calculateDrops(DropType.SPOIL, this, player));
}
@ -1430,6 +1431,7 @@ public class L2Attackable extends L2Npc
// Clear Harvester reward
_harvestItem.set(null);
_sweepItems.set(null);
_plundered = false;
// fake players
if (isFakePlayer())
@ -1512,6 +1514,17 @@ public class L2Attackable extends L2Npc
_spoilerObjectId = spoilerObjectId;
}
/**
* Sets state of the mob to plundered.
* @param player
*/
public void setPlundered(L2PcInstance player)
{
_plundered = true;
_spoilerObjectId = player.getObjectId();
_sweepItems.set(getTemplate().calculateDrops(DropType.SPOIL, this, player));
}
/**
* Sets state of the mob to seeded. Parameters needed to be set before.
* @param seeder

View File

@ -90,32 +90,32 @@ public final class Plunder extends AbstractEffect
return;
}
monster.setPlundered(player);
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
{
return;
}
monster.setSpoilerObjectId(effector.getObjectId());
if (monster.isSweepActive())
final Collection<ItemHolder> items = monster.takeSweep();
if (items != null)
{
final Collection<ItemHolder> items = monster.takeSweep();
if (items != null)
final boolean lucky = player.tryLuck();
for (ItemHolder sweepedItem : items)
{
for (ItemHolder sweepedItem : items)
final ItemHolder rewardedItem = new ItemHolder(sweepedItem.getId(), sweepedItem.getCount() * (lucky ? 1 : 2));
final L2Party party = effector.getParty();
if (party != null)
{
final L2Party party = effector.getParty();
if (party != null)
{
party.distributeItem(player, sweepedItem, true, monster);
}
else
{
player.addItem("Plunder", sweepedItem, effected, true);
}
party.distributeItem(player, rewardedItem, true, monster);
}
else
{
player.addItem("Plunder", rewardedItem, effected, true);
}
}
}
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
}
}

View File

@ -99,6 +99,7 @@ public class L2Attackable extends L2Npc
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
// Spoil
private int _spoilerObjectId;
private boolean _plundered = false;
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
// Over-hit
private boolean _overhit;
@ -1024,7 +1025,7 @@ public class L2Attackable extends L2Npc
npcTemplate.getExtendDrop().stream().map(ExtendDropData.getInstance()::getExtendDropById).filter(Objects::nonNull).forEach(e -> e.reward(player, this));
if (isSpoiled())
if (isSpoiled() && !_plundered)
{
_sweepItems.set(npcTemplate.calculateDrops(DropType.SPOIL, this, player));
}
@ -1430,6 +1431,7 @@ public class L2Attackable extends L2Npc
// Clear Harvester reward
_harvestItem.set(null);
_sweepItems.set(null);
_plundered = false;
// fake players
if (isFakePlayer())
@ -1512,6 +1514,17 @@ public class L2Attackable extends L2Npc
_spoilerObjectId = spoilerObjectId;
}
/**
* Sets state of the mob to plundered.
* @param player
*/
public void setPlundered(L2PcInstance player)
{
_plundered = true;
_spoilerObjectId = player.getObjectId();
_sweepItems.set(getTemplate().calculateDrops(DropType.SPOIL, this, player));
}
/**
* Sets state of the mob to seeded. Parameters needed to be set before.
* @param seeder

View File

@ -90,32 +90,32 @@ public final class Plunder extends AbstractEffect
return;
}
monster.setPlundered(player);
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
{
return;
}
monster.setSpoilerObjectId(effector.getObjectId());
if (monster.isSweepActive())
final Collection<ItemHolder> items = monster.takeSweep();
if (items != null)
{
final Collection<ItemHolder> items = monster.takeSweep();
if (items != null)
final boolean lucky = player.tryLuck();
for (ItemHolder sweepedItem : items)
{
for (ItemHolder sweepedItem : items)
final ItemHolder rewardedItem = new ItemHolder(sweepedItem.getId(), sweepedItem.getCount() * (lucky ? 1 : 2));
final L2Party party = effector.getParty();
if (party != null)
{
final L2Party party = effector.getParty();
if (party != null)
{
party.distributeItem(player, sweepedItem, true, monster);
}
else
{
player.addItem("Plunder", sweepedItem, effected, true);
}
party.distributeItem(player, rewardedItem, true, monster);
}
else
{
player.addItem("Plunder", rewardedItem, effected, true);
}
}
}
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
}
}

View File

@ -99,6 +99,7 @@ public class L2Attackable extends L2Npc
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
// Spoil
private int _spoilerObjectId;
private boolean _plundered = false;
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
// Over-hit
private boolean _overhit;
@ -1024,7 +1025,7 @@ public class L2Attackable extends L2Npc
npcTemplate.getExtendDrop().stream().map(ExtendDropData.getInstance()::getExtendDropById).filter(Objects::nonNull).forEach(e -> e.reward(player, this));
if (isSpoiled())
if (isSpoiled() && !_plundered)
{
_sweepItems.set(npcTemplate.calculateDrops(DropType.SPOIL, this, player));
}
@ -1430,6 +1431,7 @@ public class L2Attackable extends L2Npc
// Clear Harvester reward
_harvestItem.set(null);
_sweepItems.set(null);
_plundered = false;
// fake players
if (isFakePlayer())
@ -1512,6 +1514,17 @@ public class L2Attackable extends L2Npc
_spoilerObjectId = spoilerObjectId;
}
/**
* Sets state of the mob to plundered.
* @param player
*/
public void setPlundered(L2PcInstance player)
{
_plundered = true;
_spoilerObjectId = player.getObjectId();
_sweepItems.set(getTemplate().calculateDrops(DropType.SPOIL, this, player));
}
/**
* Sets state of the mob to seeded. Parameters needed to be set before.
* @param seeder

View File

@ -90,32 +90,31 @@ public final class Plunder extends AbstractEffect
return;
}
monster.setPlundered(player);
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
{
return;
}
monster.setSpoilerObjectId(effector.getObjectId());
if (monster.isSweepActive())
final Collection<ItemHolder> items = monster.takeSweep();
if (items != null)
{
final Collection<ItemHolder> items = monster.takeSweep();
if (items != null)
for (ItemHolder sweepedItem : items)
{
for (ItemHolder sweepedItem : items)
final ItemHolder rewardedItem = new ItemHolder(sweepedItem.getId(), sweepedItem.getCount());
final L2Party party = effector.getParty();
if (party != null)
{
final L2Party party = effector.getParty();
if (party != null)
{
party.distributeItem(player, sweepedItem, true, monster);
}
else
{
player.addItem("Plunder", sweepedItem, effected, true);
}
party.distributeItem(player, rewardedItem, true, monster);
}
else
{
player.addItem("Plunder", rewardedItem, effected, true);
}
}
}
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
}
}

View File

@ -99,6 +99,7 @@ public class L2Attackable extends L2Npc
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
// Spoil
private int _spoilerObjectId;
private boolean _plundered = false;
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
// Over-hit
private boolean _overhit;
@ -1024,7 +1025,7 @@ public class L2Attackable extends L2Npc
npcTemplate.getExtendDrop().stream().map(ExtendDropData.getInstance()::getExtendDropById).filter(Objects::nonNull).forEach(e -> e.reward(player, this));
if (isSpoiled())
if (isSpoiled() && !_plundered)
{
_sweepItems.set(npcTemplate.calculateDrops(DropType.SPOIL, this, player));
}
@ -1420,6 +1421,7 @@ public class L2Attackable extends L2Npc
// Clear Harvester reward
_harvestItem.set(null);
_sweepItems.set(null);
_plundered = false;
// fake players
if (isFakePlayer())
@ -1502,6 +1504,17 @@ public class L2Attackable extends L2Npc
_spoilerObjectId = spoilerObjectId;
}
/**
* Sets state of the mob to plundered.
* @param player
*/
public void setPlundered(L2PcInstance player)
{
_plundered = true;
_spoilerObjectId = player.getObjectId();
_sweepItems.set(getTemplate().calculateDrops(DropType.SPOIL, this, player));
}
/**
* Sets state of the mob to seeded. Parameters needed to be set before.
* @param seeder

View File

@ -90,32 +90,31 @@ public final class Plunder extends AbstractEffect
return;
}
monster.setPlundered(player);
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
{
return;
}
monster.setSpoilerObjectId(effector.getObjectId());
if (monster.isSweepActive())
final Collection<ItemHolder> items = monster.takeSweep();
if (items != null)
{
final Collection<ItemHolder> items = monster.takeSweep();
if (items != null)
for (ItemHolder sweepedItem : items)
{
for (ItemHolder sweepedItem : items)
final ItemHolder rewardedItem = new ItemHolder(sweepedItem.getId(), sweepedItem.getCount());
final L2Party party = effector.getParty();
if (party != null)
{
final L2Party party = effector.getParty();
if (party != null)
{
party.distributeItem(player, sweepedItem, true, monster);
}
else
{
player.addItem("Plunder", sweepedItem, effected, true);
}
party.distributeItem(player, rewardedItem, true, monster);
}
else
{
player.addItem("Plunder", rewardedItem, effected, true);
}
}
}
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
}
}

View File

@ -99,6 +99,7 @@ public class L2Attackable extends L2Npc
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
// Spoil
private int _spoilerObjectId;
private boolean _plundered = false;
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
// Over-hit
private boolean _overhit;
@ -1024,7 +1025,7 @@ public class L2Attackable extends L2Npc
npcTemplate.getExtendDrop().stream().map(ExtendDropData.getInstance()::getExtendDropById).filter(Objects::nonNull).forEach(e -> e.reward(player, this));
if (isSpoiled())
if (isSpoiled() && !_plundered)
{
_sweepItems.set(npcTemplate.calculateDrops(DropType.SPOIL, this, player));
}
@ -1420,6 +1421,7 @@ public class L2Attackable extends L2Npc
// Clear Harvester reward
_harvestItem.set(null);
_sweepItems.set(null);
_plundered = false;
// fake players
if (isFakePlayer())
@ -1502,6 +1504,17 @@ public class L2Attackable extends L2Npc
_spoilerObjectId = spoilerObjectId;
}
/**
* Sets state of the mob to plundered.
* @param player
*/
public void setPlundered(L2PcInstance player)
{
_plundered = true;
_spoilerObjectId = player.getObjectId();
_sweepItems.set(getTemplate().calculateDrops(DropType.SPOIL, this, player));
}
/**
* Sets state of the mob to seeded. Parameters needed to be set before.
* @param seeder

View File

@ -90,32 +90,31 @@ public final class Plunder extends AbstractEffect
return;
}
monster.setPlundered(player);
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
{
return;
}
monster.setSpoilerObjectId(effector.getObjectId());
if (monster.isSweepActive())
final Collection<ItemHolder> items = monster.takeSweep();
if (items != null)
{
final Collection<ItemHolder> items = monster.takeSweep();
if (items != null)
for (ItemHolder sweepedItem : items)
{
for (ItemHolder sweepedItem : items)
final ItemHolder rewardedItem = new ItemHolder(sweepedItem.getId(), sweepedItem.getCount());
final L2Party party = effector.getParty();
if (party != null)
{
final L2Party party = effector.getParty();
if (party != null)
{
party.distributeItem(player, sweepedItem, true, monster);
}
else
{
player.addItem("Plunder", sweepedItem, effected, true);
}
party.distributeItem(player, rewardedItem, true, monster);
}
else
{
player.addItem("Plunder", rewardedItem, effected, true);
}
}
}
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
}
}

View File

@ -99,6 +99,7 @@ public class L2Attackable extends L2Npc
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
// Spoil
private int _spoilerObjectId;
private boolean _plundered = false;
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
// Over-hit
private boolean _overhit;
@ -1024,7 +1025,7 @@ public class L2Attackable extends L2Npc
npcTemplate.getExtendDrop().stream().map(ExtendDropData.getInstance()::getExtendDropById).filter(Objects::nonNull).forEach(e -> e.reward(player, this));
if (isSpoiled())
if (isSpoiled() && !_plundered)
{
_sweepItems.set(npcTemplate.calculateDrops(DropType.SPOIL, this, player));
}
@ -1420,6 +1421,7 @@ public class L2Attackable extends L2Npc
// Clear Harvester reward
_harvestItem.set(null);
_sweepItems.set(null);
_plundered = false;
// fake players
if (isFakePlayer())
@ -1502,6 +1504,17 @@ public class L2Attackable extends L2Npc
_spoilerObjectId = spoilerObjectId;
}
/**
* Sets state of the mob to plundered.
* @param player
*/
public void setPlundered(L2PcInstance player)
{
_plundered = true;
_spoilerObjectId = player.getObjectId();
_sweepItems.set(getTemplate().calculateDrops(DropType.SPOIL, this, player));
}
/**
* Sets state of the mob to seeded. Parameters needed to be set before.
* @param seeder

View File

@ -90,32 +90,31 @@ public final class Plunder extends AbstractEffect
return;
}
monster.setPlundered(player);
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
{
return;
}
monster.setSpoilerObjectId(effector.getObjectId());
if (monster.isSweepActive())
final Collection<ItemHolder> items = monster.takeSweep();
if (items != null)
{
final Collection<ItemHolder> items = monster.takeSweep();
if (items != null)
for (ItemHolder sweepedItem : items)
{
for (ItemHolder sweepedItem : items)
final ItemHolder rewardedItem = new ItemHolder(sweepedItem.getId(), sweepedItem.getCount());
final L2Party party = effector.getParty();
if (party != null)
{
final L2Party party = effector.getParty();
if (party != null)
{
party.distributeItem(player, sweepedItem, true, monster);
}
else
{
player.addItem("Plunder", sweepedItem, effected, true);
}
party.distributeItem(player, rewardedItem, true, monster);
}
else
{
player.addItem("Plunder", rewardedItem, effected, true);
}
}
}
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
}
}

View File

@ -99,6 +99,7 @@ public class L2Attackable extends L2Npc
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
// Spoil
private int _spoilerObjectId;
private boolean _plundered = false;
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
// Over-hit
private boolean _overhit;
@ -1024,7 +1025,7 @@ public class L2Attackable extends L2Npc
npcTemplate.getExtendDrop().stream().map(ExtendDropData.getInstance()::getExtendDropById).filter(Objects::nonNull).forEach(e -> e.reward(player, this));
if (isSpoiled())
if (isSpoiled() && !_plundered)
{
_sweepItems.set(npcTemplate.calculateDrops(DropType.SPOIL, this, player));
}
@ -1420,6 +1421,7 @@ public class L2Attackable extends L2Npc
// Clear Harvester reward
_harvestItem.set(null);
_sweepItems.set(null);
_plundered = false;
// fake players
if (isFakePlayer())
@ -1502,6 +1504,17 @@ public class L2Attackable extends L2Npc
_spoilerObjectId = spoilerObjectId;
}
/**
* Sets state of the mob to plundered.
* @param player
*/
public void setPlundered(L2PcInstance player)
{
_plundered = true;
_spoilerObjectId = player.getObjectId();
_sweepItems.set(getTemplate().calculateDrops(DropType.SPOIL, this, player));
}
/**
* Sets state of the mob to seeded. Parameters needed to be set before.
* @param seeder