瀏覽代碼

Danger Area support.

JIV 15 年之前
父節點
當前提交
fd23e4b2ba

+ 5 - 4
L2_GameServer/java/com/l2jserver/gameserver/model/actor/L2Character.java

@@ -207,8 +207,9 @@ public abstract class L2Character extends L2Object
 	public static final byte ZONE_TOWN = 15;
 	public static final byte ZONE_SCRIPT = 16;
 	public static final byte ZONE_NOHQ = 17;
+	public static final byte ZONE_DANGERAREA = 18;
 
-	private final byte[] _zones = new byte[18];
+	private final byte[] _zones = new byte[19];
 	protected byte _zoneValidateCounter = 4;
 
 	private boolean _isRaid = false;
@@ -3335,14 +3336,14 @@ public abstract class L2Character extends L2Object
 	 * <B><U> Concept</U> :</B><BR><BR>
 	 * All active skills effects in progress on the L2Character are identified in <B>_effects</B>.
 	 *
-	 * @param index The L2Skill Identifier of the L2Effect to return from the _effects
+	 * @param skillId The L2Skill Identifier of the L2Effect to return from the _effects
 	 *
 	 * @return The L2Effect corresponding to the L2Skill Identifier
 	 *
 	 */
-	public final L2Effect getFirstEffect(int index)
+	public final L2Effect getFirstEffect(int skillId)
 	{
-		return _effects.getFirstEffect(index);
+		return _effects.getFirstEffect(skillId);
 	}
 
 	/**

+ 14 - 1
L2_GameServer/java/com/l2jserver/gameserver/model/zone/type/L2PoisonZone.java

@@ -27,6 +27,7 @@ import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.zone.L2ZoneType;
+import com.l2jserver.gameserver.network.serverpackets.EtcStatusUpdate;
 import com.l2jserver.gameserver.util.StringUtil;
 import com.l2jserver.util.Rnd;
 
@@ -129,6 +130,11 @@ public class L2PoisonZone extends L2ZoneType
 				}
 			}
 		}
+		if (character instanceof L2PcInstance)
+		{
+			character.setInsideZone(L2Character.ZONE_DANGERAREA, true);
+			character.sendPacket(new EtcStatusUpdate((L2PcInstance) character));
+		}
 	}
 	
 	@Override
@@ -139,6 +145,12 @@ public class L2PoisonZone extends L2ZoneType
 			_task.cancel(true);
 			_task = null;
 		}
+		if (character instanceof L2PcInstance)
+		{
+			character.setInsideZone(L2Character.ZONE_DANGERAREA, false);
+			if (!character.isInsideZone(L2Character.ZONE_DANGERAREA))
+				character.sendPacket(new EtcStatusUpdate((L2PcInstance) character));
+		}
 	}
 	
 	public L2Skill getSkill(int skillId, int skillLvl)
@@ -199,7 +211,8 @@ public class L2PoisonZone extends L2ZoneType
 							for (int skillId : _skills.keys())
 							{
 								if (_bypassConditions || getSkill(skillId, _skills.get(skillId)).checkCondition(temp, temp, false))
-									getSkill(skillId, _skills.get(skillId)).getEffects(temp, temp);
+									if (temp.getFirstEffect(skillId) == null)
+										getSkill(skillId, _skills.get(skillId)).getEffects(temp, temp);
 							}
 						}
 					}

+ 2 - 1
L2_GameServer/java/com/l2jserver/gameserver/network/serverpackets/EtcStatusUpdate.java

@@ -14,6 +14,7 @@
  */
 package com.l2jserver.gameserver.network.serverpackets;
 
+import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 
 /* Packet format: F3 XX000000 YY000000 ZZ000000 */
@@ -43,7 +44,7 @@ public class EtcStatusUpdate extends L2GameServerPacket
 		writeD(_activeChar.getCharges()); // 1-7 increase force, lvl
 		writeD(_activeChar.getWeightPenalty()); // 1-4 weight penalty, lvl (1=50%, 2=66.6%, 3=80%, 4=100%)
 		writeD((_activeChar.getMessageRefusal() || _activeChar.isChatBanned() || _activeChar.isSilenceMode()) ? 1 : 0); // 1 = block all chat 
-		writeD(0x00); // 1 = danger area
+		writeD(_activeChar.isInsideZone(L2Character.ZONE_DANGERAREA) ? 1 : 0); // 1 = danger area
 		writeD(_activeChar.getExpertiseWeaponPenalty()); // Weapon Grade Penalty [1-4]
 		writeD(_activeChar.getExpertiseArmorPenalty()); // Armor Grade Penalty [1-4]
 		writeD(_activeChar.getCharmOfCourage() ? 1 : 0); // 1 = charm of courage (allows resurrection on the same spot upon death on the siege battlefield)

+ 1 - 0
L2_GameServer/java/com/l2jserver/gameserver/network/serverpackets/ExSetCompassZoneCode.java

@@ -22,6 +22,7 @@ public class ExSetCompassZoneCode extends L2GameServerPacket
 {
 	private static final String _S__FE_32_EXSETCOMPASSZONECODE = "[S] FE:33 ExSetCompassZoneCode";
 
+	public static final int ALTEREDZONE = 0x08;
 	public static final int SIEGEWARZONE1 = 0x0A;
 	public static final int SIEGEWARZONE2 = 0x0B;
 	public static final int PEACEZONE = 0x0C;