Index: /java/net/sf/l2j/gameserver/model/actor/instance/L2NpcInstance.java =================================================================== --- /java/net/sf/l2j/gameserver/model/actor/instance/L2NpcInstance.java (revisione 1599) +++ /java/net/sf/l2j/gameserver/model/actor/instance/L2NpcInstance.java (copia locale) @@ -1801,7 +1801,9 @@ //_decayTask = ClientScheduler.getInstance().scheduleLow(new DecayTask(), 8500); //SpawnTable.getInstance().addDecayTask(this); DecayTaskManager.getInstance().addDecayTask(this); + ClientScheduler.scheduleEvent(new SpoilStatusDecayTask(this), 8500); + super.doDie(killer); } @@ -1896,5 +1898,19 @@ _decayTask.cancel(true); this.onDecay(); } - + + public class SpoilStatusDecayTask implements Runnable + { + L2NpcInstance actor; + + public SpoilStatusDecayTask(L2NpcInstance actor) + { + this.actor = actor; + } + + public void run() + { + actor.setIsSpoiledBy(0); + } + } } Index: /java/net/sf/l2j/gameserver/model/L2Character.java =================================================================== --- /java/net/sf/l2j/gameserver/model/L2Character.java (revisione 1599) +++ /java/net/sf/l2j/gameserver/model/L2Character.java (copia locale) @@ -137,6 +137,7 @@ private boolean _IsSleeping = false; // Cannot move/attack until sleep timed out or monster is attacked private boolean _IsStunned = false; // Cannot move/attack until stun timed out private boolean _IsTeleporting = false; + private int _isSpoiledBy = 0; private int _LastAttackChange = 0; private CharStat _Stat; private CharStatus _Status; @@ -1359,6 +1360,9 @@ public final boolean isStunned() { return _IsStunned; } public final void setIsStunned(boolean value) { _IsStunned = value; } + public final int getIsSpoiledBy() { return _isSpoiledBy; } + public final void setIsSpoiledBy(int value) { _isSpoiledBy = value; } + public final boolean isTeleporting() { return _IsTeleporting; } public final void setIsTeleporting(boolean value) { _IsTeleporting = value; } Index: /java/net/sf/l2j/gameserver/handler/skillhandlers/Sweep.java =================================================================== --- /java/net/sf/l2j/gameserver/handler/skillhandlers/Sweep.java (revisione 1599) +++ /java/net/sf/l2j/gameserver/handler/skillhandlers/Sweep.java (copia locale) @@ -55,7 +55,13 @@ { if (!(targets[index] instanceof L2Attackable)) continue; L2Attackable target = (L2Attackable)targets[index]; - + + if (activeChar.getObjectId() != target.getIsSpoiledBy()) + { + ((L2PcInstance)activeChar).sendMessage("Cannot use sweeper. Target already spoiled by another person."); + return; + } + if (target.isSweepActive()) { L2Attackable.RewardItem[] items = target.takeSweep(); @@ -72,9 +78,10 @@ SystemMessage smsg = new SystemMessage(SystemMessage.YOU_PICKED_UP_S1_S2); // you picked up $s1$s2 smsg.addNumber(ritem.getCount()); - smsg.addItemName(item.getItemId()); + smsg.addItemName(ritem.getItemId()); player.sendPacket(smsg); } + target.setIsSpoiledBy(0); } } target.endDecayTask(); Index: /java/net/sf/l2j/gameserver/handler/skillhandlers/Spoil.java =================================================================== --- /java/net/sf/l2j/gameserver/handler/skillhandlers/Spoil.java (revisione 1599) +++ /java/net/sf/l2j/gameserver/handler/skillhandlers/Spoil.java (copia locale) @@ -133,7 +133,11 @@ // now do randomization int randomSuccessRate = rand.nextInt(99); - if ( randomSuccessRate < rateOfSpoil ) spoil = true; + if ( randomSuccessRate < rateOfSpoil ) + { + spoil = true; + activeChar.setIsSpoiledBy(activeChar.getObjectId()); + } } if (spoil) {