rendered paste bodyIndex: 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>
*/