Преглед на файлове

Fixed observer handling for traps. Also traps should not attack own team.

_DS_ преди 14 години
родител
ревизия
d4a64033f7
променени са 1 файла, в които са добавени 30 реда и са изтрити 3 реда
  1. 30 3
      L2J_Server/java/com/l2jserver/gameserver/model/actor/instance/L2TrapInstance.java

+ 30 - 3
L2J_Server/java/com/l2jserver/gameserver/model/actor/instance/L2TrapInstance.java

@@ -20,7 +20,6 @@ import javolution.util.FastList;
 
 import com.l2jserver.gameserver.model.L2Skill;
 import com.l2jserver.gameserver.model.actor.L2Character;
-import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.actor.L2Trap;
 import com.l2jserver.gameserver.model.olympiad.OlympiadGameManager;
 import com.l2jserver.gameserver.model.quest.Quest;
@@ -167,6 +166,20 @@ public class L2TrapInstance extends L2Trap
 			return false;
 		if (cha == _owner)
 			return true;
+
+		if (cha instanceof L2PcInstance)
+		{
+			// observers can't see trap
+			if (((L2PcInstance)cha).inObserverMode())
+				return false;
+
+			// olympiad competitors can't see trap
+			if (_owner.isInOlympiadMode()
+					&& ((L2PcInstance)cha).isInOlympiadMode()
+					&& ((L2PcInstance)cha).getOlympiadSide() != _owner.getOlympiadSide())
+				return false;
+		}
+
 		if (_isInArena)
 			return true;
 		
@@ -201,12 +214,26 @@ public class L2TrapInstance extends L2Trap
 	{
 		if (!L2Skill.checkForAreaOffensiveSkills(this, target, getSkill(), _isInArena))
 			return false;
-		
+
+		// observers
+		if (target instanceof L2PcInstance && ((L2PcInstance)target).inObserverMode())
+			return false;
+
+		// olympiad own team and their summons not attacked
+		if (_owner != null && _owner.isInOlympiadMode())
+		{
+			final L2PcInstance player = target.getActingPlayer();
+			if (player != null
+					&& player.isInOlympiadMode()
+					&& player.getOlympiadSide() == _owner.getOlympiadSide())
+				return false;
+		}
+
 		if (_isInArena)
 			return true;
 		
 		// trap owned by players not attack non-flagged players
-		if (_owner != null && target instanceof L2Playable)
+		if (_owner != null)
 		{
 			final L2PcInstance player = target.getActingPlayer();
 			if (player == null || (player.getPvpFlag() == 0 && player.getKarma() == 0))