All pastes #45489 Raw Edit

Spoil Lock Fix

public text v1 · immutable
#45489 ·published 2006-03-13 20:12 UTC
rendered paste body
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) {