Fixed Plunder effect.
This commit is contained in:
parent
7ca4b242c5
commit
3c6ad12888
@ -90,32 +90,32 @@ public final class Plunder extends AbstractEffect
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
monster.setPlundered(player);
|
||||||
|
|
||||||
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
|
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
monster.setSpoilerObjectId(effector.getObjectId());
|
|
||||||
|
|
||||||
if (monster.isSweepActive())
|
|
||||||
{
|
|
||||||
final Collection<ItemHolder> items = monster.takeSweep();
|
final Collection<ItemHolder> items = monster.takeSweep();
|
||||||
if (items != null)
|
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();
|
final L2Party party = effector.getParty();
|
||||||
if (party != null)
|
if (party != null)
|
||||||
{
|
{
|
||||||
party.distributeItem(player, sweepedItem, true, monster);
|
party.distributeItem(player, rewardedItem, true, monster);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
player.addItem("Plunder", sweepedItem, effected, true);
|
player.addItem("Plunder", rewardedItem, effected, true);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
|
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -100,6 +100,7 @@ public class L2Attackable extends L2Npc
|
|||||||
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
|
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
|
||||||
// Spoil
|
// Spoil
|
||||||
private int _spoilerObjectId;
|
private int _spoilerObjectId;
|
||||||
|
private boolean _plundered = false;
|
||||||
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
|
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
|
||||||
// Over-hit
|
// Over-hit
|
||||||
private boolean _overhit;
|
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));
|
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));
|
_sweepItems.set(npcTemplate.calculateDrops(DropType.SPOIL, this, player));
|
||||||
}
|
}
|
||||||
@ -1484,6 +1485,7 @@ public class L2Attackable extends L2Npc
|
|||||||
// Clear Harvester reward
|
// Clear Harvester reward
|
||||||
_harvestItem.set(null);
|
_harvestItem.set(null);
|
||||||
_sweepItems.set(null);
|
_sweepItems.set(null);
|
||||||
|
_plundered = false;
|
||||||
|
|
||||||
// fake players
|
// fake players
|
||||||
if (isFakePlayer())
|
if (isFakePlayer())
|
||||||
@ -1566,6 +1568,17 @@ public class L2Attackable extends L2Npc
|
|||||||
_spoilerObjectId = spoilerObjectId;
|
_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.
|
* Sets state of the mob to seeded. Parameters needed to be set before.
|
||||||
* @param seeder
|
* @param seeder
|
||||||
|
@ -90,32 +90,32 @@ public final class Plunder extends AbstractEffect
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
monster.setPlundered(player);
|
||||||
|
|
||||||
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
|
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
monster.setSpoilerObjectId(effector.getObjectId());
|
|
||||||
|
|
||||||
if (monster.isSweepActive())
|
|
||||||
{
|
|
||||||
final Collection<ItemHolder> items = monster.takeSweep();
|
final Collection<ItemHolder> items = monster.takeSweep();
|
||||||
if (items != null)
|
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();
|
final L2Party party = effector.getParty();
|
||||||
if (party != null)
|
if (party != null)
|
||||||
{
|
{
|
||||||
party.distributeItem(player, sweepedItem, true, monster);
|
party.distributeItem(player, rewardedItem, true, monster);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
player.addItem("Plunder", sweepedItem, effected, true);
|
player.addItem("Plunder", rewardedItem, effected, true);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
|
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -99,6 +99,7 @@ public class L2Attackable extends L2Npc
|
|||||||
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
|
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
|
||||||
// Spoil
|
// Spoil
|
||||||
private int _spoilerObjectId;
|
private int _spoilerObjectId;
|
||||||
|
private boolean _plundered = false;
|
||||||
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
|
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
|
||||||
// Over-hit
|
// Over-hit
|
||||||
private boolean _overhit;
|
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));
|
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));
|
_sweepItems.set(npcTemplate.calculateDrops(DropType.SPOIL, this, player));
|
||||||
}
|
}
|
||||||
@ -1430,6 +1431,7 @@ public class L2Attackable extends L2Npc
|
|||||||
// Clear Harvester reward
|
// Clear Harvester reward
|
||||||
_harvestItem.set(null);
|
_harvestItem.set(null);
|
||||||
_sweepItems.set(null);
|
_sweepItems.set(null);
|
||||||
|
_plundered = false;
|
||||||
|
|
||||||
// fake players
|
// fake players
|
||||||
if (isFakePlayer())
|
if (isFakePlayer())
|
||||||
@ -1512,6 +1514,17 @@ public class L2Attackable extends L2Npc
|
|||||||
_spoilerObjectId = spoilerObjectId;
|
_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.
|
* Sets state of the mob to seeded. Parameters needed to be set before.
|
||||||
* @param seeder
|
* @param seeder
|
||||||
|
@ -90,32 +90,32 @@ public final class Plunder extends AbstractEffect
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
monster.setPlundered(player);
|
||||||
|
|
||||||
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
|
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
monster.setSpoilerObjectId(effector.getObjectId());
|
|
||||||
|
|
||||||
if (monster.isSweepActive())
|
|
||||||
{
|
|
||||||
final Collection<ItemHolder> items = monster.takeSweep();
|
final Collection<ItemHolder> items = monster.takeSweep();
|
||||||
if (items != null)
|
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();
|
final L2Party party = effector.getParty();
|
||||||
if (party != null)
|
if (party != null)
|
||||||
{
|
{
|
||||||
party.distributeItem(player, sweepedItem, true, monster);
|
party.distributeItem(player, rewardedItem, true, monster);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
player.addItem("Plunder", sweepedItem, effected, true);
|
player.addItem("Plunder", rewardedItem, effected, true);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
|
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -99,6 +99,7 @@ public class L2Attackable extends L2Npc
|
|||||||
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
|
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
|
||||||
// Spoil
|
// Spoil
|
||||||
private int _spoilerObjectId;
|
private int _spoilerObjectId;
|
||||||
|
private boolean _plundered = false;
|
||||||
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
|
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
|
||||||
// Over-hit
|
// Over-hit
|
||||||
private boolean _overhit;
|
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));
|
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));
|
_sweepItems.set(npcTemplate.calculateDrops(DropType.SPOIL, this, player));
|
||||||
}
|
}
|
||||||
@ -1430,6 +1431,7 @@ public class L2Attackable extends L2Npc
|
|||||||
// Clear Harvester reward
|
// Clear Harvester reward
|
||||||
_harvestItem.set(null);
|
_harvestItem.set(null);
|
||||||
_sweepItems.set(null);
|
_sweepItems.set(null);
|
||||||
|
_plundered = false;
|
||||||
|
|
||||||
// fake players
|
// fake players
|
||||||
if (isFakePlayer())
|
if (isFakePlayer())
|
||||||
@ -1512,6 +1514,17 @@ public class L2Attackable extends L2Npc
|
|||||||
_spoilerObjectId = spoilerObjectId;
|
_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.
|
* Sets state of the mob to seeded. Parameters needed to be set before.
|
||||||
* @param seeder
|
* @param seeder
|
||||||
|
@ -90,32 +90,32 @@ public final class Plunder extends AbstractEffect
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
monster.setPlundered(player);
|
||||||
|
|
||||||
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
|
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
monster.setSpoilerObjectId(effector.getObjectId());
|
|
||||||
|
|
||||||
if (monster.isSweepActive())
|
|
||||||
{
|
|
||||||
final Collection<ItemHolder> items = monster.takeSweep();
|
final Collection<ItemHolder> items = monster.takeSweep();
|
||||||
if (items != null)
|
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();
|
final L2Party party = effector.getParty();
|
||||||
if (party != null)
|
if (party != null)
|
||||||
{
|
{
|
||||||
party.distributeItem(player, sweepedItem, true, monster);
|
party.distributeItem(player, rewardedItem, true, monster);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
player.addItem("Plunder", sweepedItem, effected, true);
|
player.addItem("Plunder", rewardedItem, effected, true);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
|
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -99,6 +99,7 @@ public class L2Attackable extends L2Npc
|
|||||||
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
|
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
|
||||||
// Spoil
|
// Spoil
|
||||||
private int _spoilerObjectId;
|
private int _spoilerObjectId;
|
||||||
|
private boolean _plundered = false;
|
||||||
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
|
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
|
||||||
// Over-hit
|
// Over-hit
|
||||||
private boolean _overhit;
|
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));
|
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));
|
_sweepItems.set(npcTemplate.calculateDrops(DropType.SPOIL, this, player));
|
||||||
}
|
}
|
||||||
@ -1430,6 +1431,7 @@ public class L2Attackable extends L2Npc
|
|||||||
// Clear Harvester reward
|
// Clear Harvester reward
|
||||||
_harvestItem.set(null);
|
_harvestItem.set(null);
|
||||||
_sweepItems.set(null);
|
_sweepItems.set(null);
|
||||||
|
_plundered = false;
|
||||||
|
|
||||||
// fake players
|
// fake players
|
||||||
if (isFakePlayer())
|
if (isFakePlayer())
|
||||||
@ -1512,6 +1514,17 @@ public class L2Attackable extends L2Npc
|
|||||||
_spoilerObjectId = spoilerObjectId;
|
_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.
|
* Sets state of the mob to seeded. Parameters needed to be set before.
|
||||||
* @param seeder
|
* @param seeder
|
||||||
|
@ -90,32 +90,32 @@ public final class Plunder extends AbstractEffect
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
monster.setPlundered(player);
|
||||||
|
|
||||||
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
|
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
monster.setSpoilerObjectId(effector.getObjectId());
|
|
||||||
|
|
||||||
if (monster.isSweepActive())
|
|
||||||
{
|
|
||||||
final Collection<ItemHolder> items = monster.takeSweep();
|
final Collection<ItemHolder> items = monster.takeSweep();
|
||||||
if (items != null)
|
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();
|
final L2Party party = effector.getParty();
|
||||||
if (party != null)
|
if (party != null)
|
||||||
{
|
{
|
||||||
party.distributeItem(player, sweepedItem, true, monster);
|
party.distributeItem(player, rewardedItem, true, monster);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
player.addItem("Plunder", sweepedItem, effected, true);
|
player.addItem("Plunder", rewardedItem, effected, true);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
|
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -99,6 +99,7 @@ public class L2Attackable extends L2Npc
|
|||||||
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
|
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
|
||||||
// Spoil
|
// Spoil
|
||||||
private int _spoilerObjectId;
|
private int _spoilerObjectId;
|
||||||
|
private boolean _plundered = false;
|
||||||
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
|
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
|
||||||
// Over-hit
|
// Over-hit
|
||||||
private boolean _overhit;
|
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));
|
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));
|
_sweepItems.set(npcTemplate.calculateDrops(DropType.SPOIL, this, player));
|
||||||
}
|
}
|
||||||
@ -1430,6 +1431,7 @@ public class L2Attackable extends L2Npc
|
|||||||
// Clear Harvester reward
|
// Clear Harvester reward
|
||||||
_harvestItem.set(null);
|
_harvestItem.set(null);
|
||||||
_sweepItems.set(null);
|
_sweepItems.set(null);
|
||||||
|
_plundered = false;
|
||||||
|
|
||||||
// fake players
|
// fake players
|
||||||
if (isFakePlayer())
|
if (isFakePlayer())
|
||||||
@ -1512,6 +1514,17 @@ public class L2Attackable extends L2Npc
|
|||||||
_spoilerObjectId = spoilerObjectId;
|
_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.
|
* Sets state of the mob to seeded. Parameters needed to be set before.
|
||||||
* @param seeder
|
* @param seeder
|
||||||
|
@ -90,32 +90,32 @@ public final class Plunder extends AbstractEffect
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
monster.setPlundered(player);
|
||||||
|
|
||||||
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
|
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
monster.setSpoilerObjectId(effector.getObjectId());
|
|
||||||
|
|
||||||
if (monster.isSweepActive())
|
|
||||||
{
|
|
||||||
final Collection<ItemHolder> items = monster.takeSweep();
|
final Collection<ItemHolder> items = monster.takeSweep();
|
||||||
if (items != null)
|
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();
|
final L2Party party = effector.getParty();
|
||||||
if (party != null)
|
if (party != null)
|
||||||
{
|
{
|
||||||
party.distributeItem(player, sweepedItem, true, monster);
|
party.distributeItem(player, rewardedItem, true, monster);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
player.addItem("Plunder", sweepedItem, effected, true);
|
player.addItem("Plunder", rewardedItem, effected, true);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
|
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -99,6 +99,7 @@ public class L2Attackable extends L2Npc
|
|||||||
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
|
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
|
||||||
// Spoil
|
// Spoil
|
||||||
private int _spoilerObjectId;
|
private int _spoilerObjectId;
|
||||||
|
private boolean _plundered = false;
|
||||||
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
|
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
|
||||||
// Over-hit
|
// Over-hit
|
||||||
private boolean _overhit;
|
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));
|
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));
|
_sweepItems.set(npcTemplate.calculateDrops(DropType.SPOIL, this, player));
|
||||||
}
|
}
|
||||||
@ -1430,6 +1431,7 @@ public class L2Attackable extends L2Npc
|
|||||||
// Clear Harvester reward
|
// Clear Harvester reward
|
||||||
_harvestItem.set(null);
|
_harvestItem.set(null);
|
||||||
_sweepItems.set(null);
|
_sweepItems.set(null);
|
||||||
|
_plundered = false;
|
||||||
|
|
||||||
// fake players
|
// fake players
|
||||||
if (isFakePlayer())
|
if (isFakePlayer())
|
||||||
@ -1512,6 +1514,17 @@ public class L2Attackable extends L2Npc
|
|||||||
_spoilerObjectId = spoilerObjectId;
|
_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.
|
* Sets state of the mob to seeded. Parameters needed to be set before.
|
||||||
* @param seeder
|
* @param seeder
|
||||||
|
@ -90,32 +90,32 @@ public final class Plunder extends AbstractEffect
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
monster.setPlundered(player);
|
||||||
|
|
||||||
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
|
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
monster.setSpoilerObjectId(effector.getObjectId());
|
|
||||||
|
|
||||||
if (monster.isSweepActive())
|
|
||||||
{
|
|
||||||
final Collection<ItemHolder> items = monster.takeSweep();
|
final Collection<ItemHolder> items = monster.takeSweep();
|
||||||
if (items != null)
|
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();
|
final L2Party party = effector.getParty();
|
||||||
if (party != null)
|
if (party != null)
|
||||||
{
|
{
|
||||||
party.distributeItem(player, sweepedItem, true, monster);
|
party.distributeItem(player, rewardedItem, true, monster);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
player.addItem("Plunder", sweepedItem, effected, true);
|
player.addItem("Plunder", rewardedItem, effected, true);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
|
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -99,6 +99,7 @@ public class L2Attackable extends L2Npc
|
|||||||
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
|
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
|
||||||
// Spoil
|
// Spoil
|
||||||
private int _spoilerObjectId;
|
private int _spoilerObjectId;
|
||||||
|
private boolean _plundered = false;
|
||||||
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
|
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
|
||||||
// Over-hit
|
// Over-hit
|
||||||
private boolean _overhit;
|
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));
|
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));
|
_sweepItems.set(npcTemplate.calculateDrops(DropType.SPOIL, this, player));
|
||||||
}
|
}
|
||||||
@ -1430,6 +1431,7 @@ public class L2Attackable extends L2Npc
|
|||||||
// Clear Harvester reward
|
// Clear Harvester reward
|
||||||
_harvestItem.set(null);
|
_harvestItem.set(null);
|
||||||
_sweepItems.set(null);
|
_sweepItems.set(null);
|
||||||
|
_plundered = false;
|
||||||
|
|
||||||
// fake players
|
// fake players
|
||||||
if (isFakePlayer())
|
if (isFakePlayer())
|
||||||
@ -1512,6 +1514,17 @@ public class L2Attackable extends L2Npc
|
|||||||
_spoilerObjectId = spoilerObjectId;
|
_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.
|
* Sets state of the mob to seeded. Parameters needed to be set before.
|
||||||
* @param seeder
|
* @param seeder
|
||||||
|
@ -90,32 +90,31 @@ public final class Plunder extends AbstractEffect
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
monster.setPlundered(player);
|
||||||
|
|
||||||
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
|
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
monster.setSpoilerObjectId(effector.getObjectId());
|
|
||||||
|
|
||||||
if (monster.isSweepActive())
|
|
||||||
{
|
|
||||||
final Collection<ItemHolder> items = monster.takeSweep();
|
final Collection<ItemHolder> items = monster.takeSweep();
|
||||||
if (items != null)
|
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();
|
final L2Party party = effector.getParty();
|
||||||
if (party != null)
|
if (party != null)
|
||||||
{
|
{
|
||||||
party.distributeItem(player, sweepedItem, true, monster);
|
party.distributeItem(player, rewardedItem, true, monster);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
player.addItem("Plunder", sweepedItem, effected, true);
|
player.addItem("Plunder", rewardedItem, effected, true);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
|
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -99,6 +99,7 @@ public class L2Attackable extends L2Npc
|
|||||||
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
|
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
|
||||||
// Spoil
|
// Spoil
|
||||||
private int _spoilerObjectId;
|
private int _spoilerObjectId;
|
||||||
|
private boolean _plundered = false;
|
||||||
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
|
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
|
||||||
// Over-hit
|
// Over-hit
|
||||||
private boolean _overhit;
|
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));
|
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));
|
_sweepItems.set(npcTemplate.calculateDrops(DropType.SPOIL, this, player));
|
||||||
}
|
}
|
||||||
@ -1420,6 +1421,7 @@ public class L2Attackable extends L2Npc
|
|||||||
// Clear Harvester reward
|
// Clear Harvester reward
|
||||||
_harvestItem.set(null);
|
_harvestItem.set(null);
|
||||||
_sweepItems.set(null);
|
_sweepItems.set(null);
|
||||||
|
_plundered = false;
|
||||||
|
|
||||||
// fake players
|
// fake players
|
||||||
if (isFakePlayer())
|
if (isFakePlayer())
|
||||||
@ -1502,6 +1504,17 @@ public class L2Attackable extends L2Npc
|
|||||||
_spoilerObjectId = spoilerObjectId;
|
_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.
|
* Sets state of the mob to seeded. Parameters needed to be set before.
|
||||||
* @param seeder
|
* @param seeder
|
||||||
|
@ -90,32 +90,31 @@ public final class Plunder extends AbstractEffect
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
monster.setPlundered(player);
|
||||||
|
|
||||||
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
|
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
monster.setSpoilerObjectId(effector.getObjectId());
|
|
||||||
|
|
||||||
if (monster.isSweepActive())
|
|
||||||
{
|
|
||||||
final Collection<ItemHolder> items = monster.takeSweep();
|
final Collection<ItemHolder> items = monster.takeSweep();
|
||||||
if (items != null)
|
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();
|
final L2Party party = effector.getParty();
|
||||||
if (party != null)
|
if (party != null)
|
||||||
{
|
{
|
||||||
party.distributeItem(player, sweepedItem, true, monster);
|
party.distributeItem(player, rewardedItem, true, monster);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
player.addItem("Plunder", sweepedItem, effected, true);
|
player.addItem("Plunder", rewardedItem, effected, true);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
|
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -99,6 +99,7 @@ public class L2Attackable extends L2Npc
|
|||||||
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
|
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
|
||||||
// Spoil
|
// Spoil
|
||||||
private int _spoilerObjectId;
|
private int _spoilerObjectId;
|
||||||
|
private boolean _plundered = false;
|
||||||
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
|
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
|
||||||
// Over-hit
|
// Over-hit
|
||||||
private boolean _overhit;
|
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));
|
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));
|
_sweepItems.set(npcTemplate.calculateDrops(DropType.SPOIL, this, player));
|
||||||
}
|
}
|
||||||
@ -1420,6 +1421,7 @@ public class L2Attackable extends L2Npc
|
|||||||
// Clear Harvester reward
|
// Clear Harvester reward
|
||||||
_harvestItem.set(null);
|
_harvestItem.set(null);
|
||||||
_sweepItems.set(null);
|
_sweepItems.set(null);
|
||||||
|
_plundered = false;
|
||||||
|
|
||||||
// fake players
|
// fake players
|
||||||
if (isFakePlayer())
|
if (isFakePlayer())
|
||||||
@ -1502,6 +1504,17 @@ public class L2Attackable extends L2Npc
|
|||||||
_spoilerObjectId = spoilerObjectId;
|
_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.
|
* Sets state of the mob to seeded. Parameters needed to be set before.
|
||||||
* @param seeder
|
* @param seeder
|
||||||
|
@ -90,32 +90,31 @@ public final class Plunder extends AbstractEffect
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
monster.setPlundered(player);
|
||||||
|
|
||||||
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
|
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
monster.setSpoilerObjectId(effector.getObjectId());
|
|
||||||
|
|
||||||
if (monster.isSweepActive())
|
|
||||||
{
|
|
||||||
final Collection<ItemHolder> items = monster.takeSweep();
|
final Collection<ItemHolder> items = monster.takeSweep();
|
||||||
if (items != null)
|
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();
|
final L2Party party = effector.getParty();
|
||||||
if (party != null)
|
if (party != null)
|
||||||
{
|
{
|
||||||
party.distributeItem(player, sweepedItem, true, monster);
|
party.distributeItem(player, rewardedItem, true, monster);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
player.addItem("Plunder", sweepedItem, effected, true);
|
player.addItem("Plunder", rewardedItem, effected, true);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
|
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -99,6 +99,7 @@ public class L2Attackable extends L2Npc
|
|||||||
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
|
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
|
||||||
// Spoil
|
// Spoil
|
||||||
private int _spoilerObjectId;
|
private int _spoilerObjectId;
|
||||||
|
private boolean _plundered = false;
|
||||||
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
|
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
|
||||||
// Over-hit
|
// Over-hit
|
||||||
private boolean _overhit;
|
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));
|
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));
|
_sweepItems.set(npcTemplate.calculateDrops(DropType.SPOIL, this, player));
|
||||||
}
|
}
|
||||||
@ -1420,6 +1421,7 @@ public class L2Attackable extends L2Npc
|
|||||||
// Clear Harvester reward
|
// Clear Harvester reward
|
||||||
_harvestItem.set(null);
|
_harvestItem.set(null);
|
||||||
_sweepItems.set(null);
|
_sweepItems.set(null);
|
||||||
|
_plundered = false;
|
||||||
|
|
||||||
// fake players
|
// fake players
|
||||||
if (isFakePlayer())
|
if (isFakePlayer())
|
||||||
@ -1502,6 +1504,17 @@ public class L2Attackable extends L2Npc
|
|||||||
_spoilerObjectId = spoilerObjectId;
|
_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.
|
* Sets state of the mob to seeded. Parameters needed to be set before.
|
||||||
* @param seeder
|
* @param seeder
|
||||||
|
@ -90,32 +90,31 @@ public final class Plunder extends AbstractEffect
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
monster.setPlundered(player);
|
||||||
|
|
||||||
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
|
if (!player.getInventory().checkInventorySlotsAndWeight(monster.getSpoilLootItems(), false, false))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
monster.setSpoilerObjectId(effector.getObjectId());
|
|
||||||
|
|
||||||
if (monster.isSweepActive())
|
|
||||||
{
|
|
||||||
final Collection<ItemHolder> items = monster.takeSweep();
|
final Collection<ItemHolder> items = monster.takeSweep();
|
||||||
if (items != null)
|
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();
|
final L2Party party = effector.getParty();
|
||||||
if (party != null)
|
if (party != null)
|
||||||
{
|
{
|
||||||
party.distributeItem(player, sweepedItem, true, monster);
|
party.distributeItem(player, rewardedItem, true, monster);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
player.addItem("Plunder", sweepedItem, effected, true);
|
player.addItem("Plunder", rewardedItem, effected, true);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
|
monster.getAI().notifyEvent(CtrlEvent.EVT_ATTACKED, effector);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -99,6 +99,7 @@ public class L2Attackable extends L2Npc
|
|||||||
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
|
private final AtomicReference<ItemHolder> _harvestItem = new AtomicReference<>();
|
||||||
// Spoil
|
// Spoil
|
||||||
private int _spoilerObjectId;
|
private int _spoilerObjectId;
|
||||||
|
private boolean _plundered = false;
|
||||||
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
|
private final AtomicReference<Collection<ItemHolder>> _sweepItems = new AtomicReference<>();
|
||||||
// Over-hit
|
// Over-hit
|
||||||
private boolean _overhit;
|
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));
|
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));
|
_sweepItems.set(npcTemplate.calculateDrops(DropType.SPOIL, this, player));
|
||||||
}
|
}
|
||||||
@ -1420,6 +1421,7 @@ public class L2Attackable extends L2Npc
|
|||||||
// Clear Harvester reward
|
// Clear Harvester reward
|
||||||
_harvestItem.set(null);
|
_harvestItem.set(null);
|
||||||
_sweepItems.set(null);
|
_sweepItems.set(null);
|
||||||
|
_plundered = false;
|
||||||
|
|
||||||
// fake players
|
// fake players
|
||||||
if (isFakePlayer())
|
if (isFakePlayer())
|
||||||
@ -1502,6 +1504,17 @@ public class L2Attackable extends L2Npc
|
|||||||
_spoilerObjectId = spoilerObjectId;
|
_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.
|
* Sets state of the mob to seeded. Parameters needed to be set before.
|
||||||
* @param seeder
|
* @param seeder
|
||||||
|
Loading…
Reference in New Issue
Block a user