All pastes #42664 Raw Edit

Something

public text v1 · immutable
#42664 ·published 2006-02-21 15:59 UTC
rendered paste body
Index: D:/Source/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/actor/instance/L2PlayableInstance.java
===================================================================
--- D:/Source/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/actor/instance/L2PlayableInstance.java	(revision 1508)
+++ D:/Source/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/actor/instance/L2PlayableInstance.java	(working copy)
@@ -1,12 +1,21 @@
 package net.sf.l2j.gameserver.model.actor.instance;
 
+import net.sf.l2j.gameserver.serverpackets.StatusUpdate;
 import net.sf.l2j.gameserver.model.actor.knownlist.PlayableKnownList;
 import net.sf.l2j.gameserver.model.actor.stat.PlayableStat;
 import net.sf.l2j.gameserver.model.actor.status.PlayableStatus;
 import net.sf.l2j.gameserver.model.L2Character;
 import net.sf.l2j.gameserver.model.L2ItemInstance;
 import net.sf.l2j.gameserver.model.L2Summon;
+import net.sf.l2j.gameserver.model.L2Attackable;
+import net.sf.l2j.gameserver.model.L2Skill;
+import net.sf.l2j.gameserver.ClientScheduler;
 import net.sf.l2j.gameserver.templates.L2CharTemplate;
+import net.sf.l2j.gameserver.instancemanager.ZoneManager;
+import net.sf.l2j.Config;
+import java.util.concurrent.Future;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 /**
  * This class represents all Playable characters in the world.<BR><BR>
@@ -41,7 +50,44 @@
     public PlayableKnownList getKnownList() { return (PlayableKnownList)super.getKnownList(); }
     public PlayableStat getStat() { return (PlayableStat)super.getStat(); }
     public PlayableStatus getStatus() { return (PlayableStatus)super.getStatus(); }
+    private Future _PvPRegTask;
 
+    private long _lastPvpAttack;
+    protected static final Logger _log = Logger.getLogger(L2PlayableInstance.class.getName());
+
+    /** Task lauching the function stopPvPFlag() */
+    class PvPFlag implements Runnable
+    {
+        public void run()
+        {
+            try
+            {
+                // _log.fine("Checking pvp time: " + getlastPvpAttack());
+                // "lastattack: " _lastAttackTime "currenttime: "
+                // System.currentTimeMillis());
+                if (Math.abs(System.currentTimeMillis()-getlastPvpAttack()) > Config.PVP_TIME)
+                {
+                    //  _log.fine("Stopping PvP");
+                    stopPvPFlag();
+                }
+                else if (Math.abs(System.currentTimeMillis()-getlastPvpAttack()) > Config.PVP_TIME - 5000)
+                {
+                    updatePvPFlag(2);
+                }
+                else
+                {
+                    updatePvPFlag(1);
+                    // Start a new PvP timer check
+                    //checkPvPFlag();
+                }
+            }
+            catch (Exception e)
+            {
+                _log.log(Level.WARNING, "error in pvp flag task:", e);
+            }
+        }
+    }
+    
     public void doDie(L2Character killer)
     {
         if (killer != null)
@@ -57,7 +103,118 @@
 
         super.doDie(killer);
     }
+    
+    protected void doAttack(L2Character target)
+    {
+    	super.doAttack(target);
+    	
+    	// do pvp things here....
+    	updatePvPStatus(target);
+    }
+    
+    public void checkCastPvpFlag(L2Skill skill, L2Character target)
+    {
+ 	   L2PlayableInstance activeChar = (L2PlayableInstance) this;
+       
+	   // buffing, healing, etc of mobs should turn your pvp flags on 
+	   if (!(skill.isOffensive()) && !(target instanceof L2PlayableInstance))
+	   		activeChar.updatePvPStatus();
+	   else if (skill.isOffensive())
+       {
+           if (target instanceof L2PcInstance) activeChar.updatePvPStatus(target); //update also checks if pvp.
+       }
+       else
+       {
+           if (target instanceof L2PcInstance)
+           {
+               // Casting non offensive skill on player with pvp flag set or with karma
+               if (
+                       ((L2PcInstance)target).getPvpFlag() > 0 ||
+                       ((L2PcInstance)target).getKarma() > 0) activeChar.updatePvPStatus();
+           }
+           else if (target instanceof L2Attackable)
+               activeChar.updatePvPStatus();
+       }
+    }
 
+    public void setlastPvpAttack(long time)
+    {
+        _lastPvpAttack = time;
+    }
+
+    public long getlastPvpAttack()
+    {
+        return _lastPvpAttack;
+    }
+
+    public void startPvPFlag()
+    {
+        updatePvPFlag(1);
+
+        _PvPRegTask = ClientScheduler.getInstance().scheduleLowAtFixedRate(
+                new PvPFlag(), 1000, 1000);
+    }
+
+    public void stopPvPFlag() {
+        if (_PvPRegTask != null) _PvPRegTask.cancel(false);
+
+        updatePvPFlag(0);
+
+        _PvPRegTask = null;
+    }
+
+    public void updatePvPFlag(int value) {
+        L2PcInstance player = null;
+        if (this instanceof L2Summon)
+     	   player = ((L2Summon)this).getOwner();
+        if (this instanceof L2PcInstance)
+     	   player = (L2PcInstance)this;
+        if (player.getPvpFlag() == value)
+            return;
+        player.setPvpFlag(value);
+
+        if (player.getKarma() < 1)
+        {
+        StatusUpdate su = new StatusUpdate(getObjectId());
+        su.addAttribute(StatusUpdate.PVP_FLAG, value);
+        sendPacket(su);
+        broadcastPacket(su);
+        }
+        else return;
+    }
+
+//  public void checkPvPFlag()
+//    {
+//      if (Config.DEBUG) _log.fine("Checking PvpFlag");
+//      _PvPRegTask = ClientScheduler.getInstance().scheduleLowAtFixedRate(
+//              new PvPFlag(), 1000, 5000);
+//      _PvPRegActive = true;
+//      //  _log.fine("PvP recheck");
+//  }
+ //
+
+    public void updatePvPStatus()
+    {
+    	L2PcInstance player = null;
+    	if (this instanceof L2PcInstance) 
+    		player = (L2PcInstance) this;
+    	if (this instanceof L2Summon)
+    		player = ((L2Summon)this).getOwner();
+        if (player.getPvpFlag() == 0) startPvPFlag();
+        if (player.getPvpFlag() != 0) setlastPvpAttack (System.currentTimeMillis()); //update last pvp ATTACK controller
+    }
+
+    public void updatePvPStatus(L2Character target)
+    {
+        if (
+                checkIfPvP(target) &&
+                (
+                        !ZoneManager.getInstance().checkIfInZonePvP(this) ||       // Player is not inside pvp zone or
+                        !ZoneManager.getInstance().checkIfInZonePvP(target)        // Target player is not inside pvp zone
+                )
+            ) updatePvPStatus();
+    }
+
     public boolean checkIfPvP(L2Character target)
     {
         if (target == null) return false;                                               // Target is null
Index: D:/Source/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- D:/Source/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java	(revision 1508)
+++ D:/Source/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java	(working copy)
@@ -2754,23 +2754,6 @@
         return karmaLost;
     }
     
-    public void updatePvPStatus()
-    {
-        if (getPvpFlag() == 0) startPvPFlag();
-        if (getPvpFlag() != 0) setlastPvpAttack (System.currentTimeMillis()); //update last pvp ATTACK controller
-    }
-
-    public void updatePvPStatus(L2Character target)
-    {
-        if (
-                checkIfPvP(target) &&
-                (
-                        !ZoneManager.getInstance().checkIfInZonePvP(this) ||       // Player is not inside pvp zone or
-                        !ZoneManager.getInstance().checkIfInZonePvP(target)        // Target player is not inside pvp zone
-                )
-            ) updatePvPStatus();
-    }
-
     /**
      * Restore the specified % of experience this L2PcInstance has
      * lost and sends a Server->Client StatusUpdate packet.<BR><BR>
Index: D:/Source/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/L2Character.java
===================================================================
--- D:/Source/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/L2Character.java	(revision 1508)
+++ D:/Source/trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/L2Character.java	(working copy)
@@ -51,6 +51,7 @@
 import net.sf.l2j.gameserver.model.actor.instance.L2DoorInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2MonsterInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2NpcInstance;
+import net.sf.l2j.gameserver.model.actor.instance.L2PlayableInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2PetInstance;
 import net.sf.l2j.gameserver.model.actor.knownlist.CharKnownList;
@@ -1569,38 +1570,7 @@
         }
     }
 
-    /** Task lauching the function stopPvPFlag() */
-    class PvPFlag implements Runnable
-    {
-        public void run()
-        {
-            try
-            {
-                // _log.fine("Checking pvp time: " + getlastPvpAttack());
-                // "lastattack: " _lastAttackTime "currenttime: "
-                // System.currentTimeMillis());
-                if (Math.abs(System.currentTimeMillis()-getlastPvpAttack()) > Config.PVP_TIME)
-                {
-                    //  _log.fine("Stopping PvP");
-                    stopPvPFlag();
-                }
-                else if (Math.abs(System.currentTimeMillis()-getlastPvpAttack()) > Config.PVP_TIME - 5000)
-                {
-                    updatePvPFlag(2);
-                }
-                else
-                {
-                    updatePvPFlag(1);
-                    // Start a new PvP timer check
-                    //checkPvPFlag();
-                }
-            }
-            catch (Exception e)
-            {
-                _log.log(Level.WARNING, "error in pvp flag task:", e);
-            }
-        }
-    }
+
     // =========================================================
 
 
@@ -4174,27 +4144,8 @@
                    if (player.isRaid() && getLevel() > player.getLevel() + 8)
                        SkillTable.getInstance().getInfo(4515, 99).getEffects(player, this);
 
-                   if(this instanceof L2PcInstance)
-                   {
-                       L2PcInstance activeChar = (L2PcInstance) this;
-                       
-                       if (skill.isOffensive())
-                       {
-                           if (player instanceof L2PcInstance && activeChar.checkIfPvP(player)) activeChar.updatePvPStatus(player);
-                       }
-                       else
-                       {
-                           if (player instanceof L2PcInstance)
-                           {
-                               // Casting non offensive skill on player with pvp flag set or with karma
-                               if (
-                                       ((L2PcInstance)player).getPvpFlag() > 0 ||
-                                       ((L2PcInstance)player).getKarma() > 0) activeChar.updatePvPStatus();
-                           }
-                           else if (player instanceof L2Attackable)
-                               activeChar.updatePvPStatus();
-                       }
-                   }
+                   if(this instanceof L2PlayableInstance)
+                	   ((L2PlayableInstance) this).checkCastPvpFlag(skill, player);
                }
            }
 
@@ -4296,64 +4247,7 @@
    {
    }
 
-   private Future _PvPRegTask;
-
-   private long _lastPvpAttack;
-
-   public void setlastPvpAttack(long time)
-   {
-       _lastPvpAttack = time;
-   }
-
-   public long getlastPvpAttack()
-   {
-       return _lastPvpAttack;
-   }
-
-   public void startPvPFlag()
-   {
-       updatePvPFlag(1);
-
-       _PvPRegTask = ClientScheduler.getInstance().scheduleLowAtFixedRate(
-               new PvPFlag(), 1000, 1000);
-   }
-
-   public void stopPvPFlag() {
-       if (_PvPRegTask != null) _PvPRegTask.cancel(false);
-
-       updatePvPFlag(0);
-
-       _PvPRegTask = null;
-   }
-
-   public void updatePvPFlag(int value) {
-       if (!(this instanceof L2PcInstance))
-           return;
-       L2PcInstance player = (L2PcInstance)this;
-       if (player.getPvpFlag() == value)
-           return;
-       player.setPvpFlag(value);
-
-       if (player.getKarma() < 1)
-       {
-       StatusUpdate su = new StatusUpdate(getObjectId());
-       su.addAttribute(StatusUpdate.PVP_FLAG, value);
-       sendPacket(su);
-       broadcastPacket(su);
-       }
-       else return;
-   }
-
-// public void checkPvPFlag()
-//   {
-//     if (Config.DEBUG) _log.fine("Checking PvpFlag");
-//     _PvPRegTask = ClientScheduler.getInstance().scheduleLowAtFixedRate(
-//             new PvPFlag(), 1000, 5000);
-//     _PvPRegActive = true;
-//     //  _log.fine("PvP recheck");
-// }
-//
-
+   
    /**
     * Return a Random Damage in function of the weapon.<BR><BR>
     */