浏览代码

Grandbosses over ~74 lvl (Baium+) dont give raid curse.

JIV 15 年之前
父节点
当前提交
0cd797a746

+ 7 - 0
L2_GameServer/java/com/l2jserver/gameserver/ai/L2AttackableAI.java

@@ -671,6 +671,7 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 			// Go through all L2Object that belong to its faction
 			Collection<L2Object> objs = _actor.getKnownList().getKnownObjects().values();
 			//synchronized (_actor.getKnownList().getKnownObjects())
+			try
 			{
 				for (L2Object obj : objs)
 				{
@@ -726,6 +727,12 @@ public class L2AttackableAI extends L2CharacterAI implements Runnable
 					}
 				}
 			}
+			catch (NullPointerException e)
+			{
+				_log.info("L2AttackableAI: thinkAttack() faction call failed.");
+				if (Config.DEBUG)
+					e.printStackTrace();
+			}
 		}
 
 		/*

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

@@ -5171,7 +5171,7 @@ public abstract class L2Character extends L2Object
 			// Check Raidboss attack
 			// Character will be petrified if attacking a raid that's more
 			// than 8 levels lower
-			if (target.isRaid() && !Config.RAID_DISABLE_CURSE && getActingPlayer() != null)
+			if (target.isRaid() && target.giveRaidCurse() && !Config.RAID_DISABLE_CURSE && getActingPlayer() != null)
 			{
 				int level = getActingPlayer().getLevel();
 
@@ -6379,7 +6379,7 @@ public abstract class L2Character extends L2Object
 						targetsCastTarget = target.getAI().getCastTarget();
 					}
 					if (!Config.RAID_DISABLE_CURSE
-							&& ((target.isRaid() && getLevel() > target.getLevel() + 8)
+							&& ((target.isRaid() && target.giveRaidCurse() && getLevel() > target.getLevel() + 8)
 							||
 							(!skill.isOffensive() && targetsAttackTarget != null && targetsAttackTarget.isRaid() 
 									&& targetsAttackTarget.getAttackByList().contains(target) // has attacked raid

+ 57 - 48
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2GrandBossInstance.java

@@ -30,48 +30,48 @@ import com.l2jserver.util.Rnd;
  */
 public final class L2GrandBossInstance extends L2MonsterInstance
 {
-    private static final int BOSS_MAINTENANCE_INTERVAL = 10000;
-
-     /**
-     * Constructor for L2GrandBossInstance. This represent all grandbosses.
-     * 
-     * @param objectId ID of the instance
-     * @param template L2NpcTemplate of the instance
-     */
+	private static final int BOSS_MAINTENANCE_INTERVAL = 10000;
+ 
+	/**
+	 * Constructor for L2GrandBossInstance. This represent all grandbosses.
+	 * 
+	 * @param objectId ID of the instance
+	 * @param template L2NpcTemplate of the instance
+	 */
 	public L2GrandBossInstance(int objectId, L2NpcTemplate template)
 	{
 		super(objectId, template);
-    	setIsRaid(true);
+		setIsRaid(true);
 	}
-
-    @Override
+	
+	@Override
 	protected int getMaintenanceInterval() { return BOSS_MAINTENANCE_INTERVAL; }
-
-    @Override
+	
+	@Override
 	public void onSpawn()
-    {
-    	setIsNoRndWalk(true);
-    	if (getNpcId() == 29020 || getNpcId() == 29028) // baium and valakas are all the time in passive mode, theirs attack AI handled in AI scripts
-    		super.disableCoreAI(true);
-    	super.onSpawn();
-    }
-
-    /**
-     * Reduce the current HP of the L2Attackable, update its _aggroList and launch the doDie Task if necessary.<BR><BR>
-     *
-     */
-    @Override
+	{
+		setIsNoRndWalk(true);
+		if (getNpcId() == 29020 || getNpcId() == 29028) // baium and valakas are all the time in passive mode, theirs attack AI handled in AI scripts
+			super.disableCoreAI(true);
+		super.onSpawn();
+	}
+	
+	/**
+	 * Reduce the current HP of the L2Attackable, update its _aggroList and launch the doDie Task if necessary.<BR><BR>
+	 *
+	 */
+	@Override
 	public void reduceCurrentHp(double damage, L2Character attacker, boolean awake, boolean isDOT, L2Skill skill)
-    {
-        super.reduceCurrentHp(damage, attacker, awake, isDOT, skill);
-    }
-
-    /**
-     * 
-     * @see com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance#doDie(com.l2jserver.gameserver.model.actor.L2Character)
-     */
-    @Override
-    public boolean doDie(L2Character killer)
+	{
+		super.reduceCurrentHp(damage, attacker, awake, isDOT, skill);
+	}
+	
+	/**
+	 * 
+	 * @see com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance#doDie(com.l2jserver.gameserver.model.actor.L2Character)
+	 */
+	@Override
+	public boolean doDie(L2Character killer)
 	{
 		if (!super.doDie(killer))
 			return false;
@@ -85,7 +85,7 @@ public final class L2GrandBossInstance extends L2MonsterInstance
 		if (player != null)
 		{
 			broadcastPacket(new SystemMessage(SystemMessageId.RAID_WAS_SUCCESSFUL));
-	        if (player.getParty() != null)
+			if (player.getParty() != null)
 			{
 				for (L2PcInstance member : player.getParty().getPartyMembers())
 				{
@@ -97,16 +97,25 @@ public final class L2GrandBossInstance extends L2MonsterInstance
 		}
 		return true;
 	}
-
-    @Override
-    public float getVitalityPoints(int damage)
-    {
-    	return - super.getVitalityPoints(damage) / 100;
-    }
-
-    @Override
-    public boolean useVitalityRate()
-    {
-    	return false;
-    }
+	
+	@Override
+	public float getVitalityPoints(int damage)
+	{
+		return - super.getVitalityPoints(damage) / 100;
+	}
+	
+	@Override
+	public boolean useVitalityRate()
+	{
+		return false;
+	}
+	
+	/* (non-Javadoc)
+	 * @see com.l2jserver.gameserver.model.actor.L2Character#giveRaidCurse()
+	 */
+	@Override
+	public boolean giveRaidCurse()
+	{
+		return getLevel() < 74;
+	}
 }