Ver código fonte

Move logic to general base class and remove duplicate code.

HorridoJoho 10 anos atrás
pai
commit
ec01c37793

+ 6 - 32
L2J_Server/java/com/l2jserver/gameserver/model/drops/CorpseDropItem.java

@@ -19,7 +19,6 @@
 package com.l2jserver.gameserver.model.drops;
 
 import com.l2jserver.Config;
-import com.l2jserver.gameserver.model.actor.L2Character;
 
 /**
  * @author Nos
@@ -39,46 +38,21 @@ public class CorpseDropItem extends GeneralDropItem
 	
 	/*
 	 * (non-Javadoc)
-	 * @see com.l2jserver.gameserver.model.drops.GeneralDropItem#getMin(com.l2jserver.gameserver.model.actor.L2Character, com.l2jserver.gameserver.model.actor.L2Character)
+	 * @see com.l2jserver.gameserver.model.drops.GeneralDropItem#getGlobalAmountMultiplier()
 	 */
 	@Override
-	public long getMin(L2Character victim, L2Character killer)
+	protected double getGlobalAmountMultiplier()
 	{
-		final long min = super.getMin(victim, killer);
-		if (Config.RATE_DROP_AMOUNT_MULTIPLIER.containsKey(getItemId()))
-		{
-			return min;
-		}
-		return (long) (min * Config.RATE_CORPSE_DROP_AMOUNT_MULTIPLIER);
+		return Config.RATE_CORPSE_DROP_AMOUNT_MULTIPLIER;
 	}
 	
 	/*
 	 * (non-Javadoc)
-	 * @see com.l2jserver.gameserver.model.drops.GeneralDropItem#getMax(com.l2jserver.gameserver.model.actor.L2Character, com.l2jserver.gameserver.model.actor.L2Character)
+	 * @see com.l2jserver.gameserver.model.drops.GeneralDropItem#getGlobalChanceMultiplier()
 	 */
 	@Override
-	public long getMax(L2Character victim, L2Character killer)
+	protected double getGlobalChanceMultiplier()
 	{
-		final long max = super.getMax(victim, killer);
-		if (Config.RATE_DROP_AMOUNT_MULTIPLIER.containsKey(getItemId()))
-		{
-			return max;
-		}
-		return (long) (max * Config.RATE_CORPSE_DROP_AMOUNT_MULTIPLIER);
-	}
-	
-	/*
-	 * (non-Javadoc)
-	 * @see com.l2jserver.gameserver.model.drops.GeneralDropItem#getChance(com.l2jserver.gameserver.model.actor.L2Character, com.l2jserver.gameserver.model.actor.L2Character)
-	 */
-	@Override
-	public double getChance(L2Character victim, L2Character killer)
-	{
-		final double chance = super.getChance(victim, killer);
-		if (Config.RATE_DROP_CHANCE_MULTIPLIER.containsKey(getItemId()))
-		{
-			return chance;
-		}
-		return chance * Config.RATE_CORPSE_DROP_CHANCE_MULTIPLIER;
+		return Config.RATE_CORPSE_DROP_CHANCE_MULTIPLIER;
 	}
 }

+ 6 - 52
L2J_Server/java/com/l2jserver/gameserver/model/drops/DeathDropItem.java

@@ -19,9 +19,6 @@
 package com.l2jserver.gameserver.model.drops;
 
 import com.l2jserver.Config;
-import com.l2jserver.gameserver.datatables.ItemTable;
-import com.l2jserver.gameserver.model.actor.L2Character;
-import com.l2jserver.gameserver.model.items.L2Item;
 
 /**
  * @author Nos
@@ -41,64 +38,21 @@ public class DeathDropItem extends GeneralDropItem
 	
 	/*
 	 * (non-Javadoc)
-	 * @see com.l2jserver.gameserver.model.drops.GeneralDropItem#getMin(com.l2jserver.gameserver.model.actor.L2Character, com.l2jserver.gameserver.model.actor.L2Character)
+	 * @see com.l2jserver.gameserver.model.drops.GeneralDropItem#getGlobalAmountMultiplier()
 	 */
 	@Override
-	public long getMin(L2Character victim, L2Character killer)
+	protected double getGlobalAmountMultiplier()
 	{
-		final long min = super.getMin(victim, killer);
-		if (Config.RATE_DROP_AMOUNT_MULTIPLIER.containsKey(getItemId()))
-		{
-			return min;
-		}
-		
-		L2Item item = ItemTable.getInstance().getTemplate(getItemId());
-		if ((item != null) && item.hasExImmediateEffect())
-		{
-			return (long) (min * Config.RATE_HERB_DROP_AMOUNT_MULTIPLIER);
-		}
-		return (long) (min * Config.RATE_DEATH_DROP_AMOUNT_MULTIPLIER);
+		return Config.RATE_DEATH_DROP_AMOUNT_MULTIPLIER;
 	}
 	
 	/*
 	 * (non-Javadoc)
-	 * @see com.l2jserver.gameserver.model.drops.GeneralDropItem#getMax(com.l2jserver.gameserver.model.actor.L2Character, com.l2jserver.gameserver.model.actor.L2Character)
+	 * @see com.l2jserver.gameserver.model.drops.GeneralDropItem#getGlobalChanceMultiplier()
 	 */
 	@Override
-	public long getMax(L2Character victim, L2Character killer)
+	protected double getGlobalChanceMultiplier()
 	{
-		final long max = super.getMax(victim, killer);
-		if (Config.RATE_DROP_AMOUNT_MULTIPLIER.containsKey(getItemId()))
-		{
-			return max;
-		}
-		
-		final L2Item item = ItemTable.getInstance().getTemplate(getItemId());
-		if ((item != null) && item.hasExImmediateEffect())
-		{
-			return (long) (max * Config.RATE_HERB_DROP_AMOUNT_MULTIPLIER);
-		}
-		return (long) (max * Config.RATE_DEATH_DROP_AMOUNT_MULTIPLIER);
-	}
-	
-	/*
-	 * (non-Javadoc)
-	 * @see com.l2jserver.gameserver.model.drops.GeneralDropItem#getChance(com.l2jserver.gameserver.model.actor.L2Character, com.l2jserver.gameserver.model.actor.L2Character)
-	 */
-	@Override
-	public double getChance(L2Character victim, L2Character killer)
-	{
-		final double chance = super.getChance(victim, killer);
-		if (Config.RATE_DROP_CHANCE_MULTIPLIER.containsKey(getItemId()))
-		{
-			return chance;
-		}
-		
-		final L2Item item = ItemTable.getInstance().getTemplate(getItemId());
-		if ((item != null) && item.hasExImmediateEffect())
-		{
-			return chance * Config.RATE_HERB_DROP_CHANCE_MULTIPLIER;
-		}
-		return chance * Config.RATE_DEATH_DROP_CHANCE_MULTIPLIER;
+		return Config.RATE_DEATH_DROP_CHANCE_MULTIPLIER;
 	}
 }

+ 80 - 28
L2J_Server/java/com/l2jserver/gameserver/model/drops/GeneralDropItem.java

@@ -22,9 +22,11 @@ import java.util.ArrayList;
 import java.util.List;
 
 import com.l2jserver.Config;
+import com.l2jserver.gameserver.datatables.ItemTable;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.holders.ItemHolder;
 import com.l2jserver.gameserver.model.itemcontainer.Inventory;
+import com.l2jserver.gameserver.model.items.L2Item;
 import com.l2jserver.gameserver.util.Util;
 import com.l2jserver.util.Rnd;
 
@@ -52,6 +54,52 @@ public class GeneralDropItem implements IDropItem
 		_chance = chance;
 	}
 	
+	protected double getGlobalChanceMultiplier()
+	{
+		return 1.;
+	}
+	
+	protected double getGlobalAmountMultiplier()
+	{
+		return 1.;
+	}
+	
+	private final long getMinMax(L2Character victim, L2Character killer, long val)
+	{
+		double multiplier = 1;
+		
+		// individual drop amount
+		Float individualDropAmountMultiplier = Config.RATE_DROP_AMOUNT_MULTIPLIER.get(getItemId());
+		if (individualDropAmountMultiplier != null)
+		{
+			// individual amount list multiplier
+			multiplier *= individualDropAmountMultiplier;
+		}
+		else
+		{
+			final L2Item item = ItemTable.getInstance().getTemplate(getItemId());
+			// global amount multiplier
+			if ((item != null) && item.hasExImmediateEffect())
+			{
+				// global herb amount multiplier
+				multiplier *= Config.RATE_HERB_DROP_AMOUNT_MULTIPLIER;
+			}
+			else
+			{
+				// drop type specific amount multiplier
+				multiplier *= getGlobalAmountMultiplier();
+			}
+		}
+		
+		// global champions amount multiplier
+		if (victim.isChampion())
+		{
+			multiplier *= getItemId() != Inventory.ADENA_ID ? Config.L2JMOD_CHAMPION_REWARDS : Config.L2JMOD_CHAMPION_ADENAS_REWARDS;
+		}
+		
+		return (long) (val * multiplier);
+	}
+	
 	/**
 	 * Gets the item id
 	 * @return the item id
@@ -78,17 +126,7 @@ public class GeneralDropItem implements IDropItem
 	 */
 	public long getMin(L2Character victim, L2Character killer)
 	{
-		double multiplier = 1;
-		if (victim.isChampion())
-		{
-			multiplier *= getItemId() != Inventory.ADENA_ID ? Config.L2JMOD_CHAMPION_REWARDS : Config.L2JMOD_CHAMPION_ADENAS_REWARDS;
-		}
-		Float dropChanceMultiplier = Config.RATE_DROP_AMOUNT_MULTIPLIER.get(getItemId());
-		if (dropChanceMultiplier != null)
-		{
-			multiplier *= dropChanceMultiplier;
-		}
-		return (long) (getMin() * multiplier);
+		return getMinMax(victim, killer, getMin());
 	}
 	
 	/**
@@ -108,17 +146,7 @@ public class GeneralDropItem implements IDropItem
 	 */
 	public long getMax(L2Character victim, L2Character killer)
 	{
-		double multiplier = 1;
-		if (victim.isChampion())
-		{
-			multiplier *= getItemId() != Inventory.ADENA_ID ? Config.L2JMOD_CHAMPION_REWARDS : Config.L2JMOD_CHAMPION_ADENAS_REWARDS;
-		}
-		Float dropChanceMultiplier = Config.RATE_DROP_AMOUNT_MULTIPLIER.get(getItemId());
-		if (dropChanceMultiplier != null)
-		{
-			multiplier *= dropChanceMultiplier;
-		}
-		return (long) (getMax() * multiplier);
+		return getMinMax(victim, killer, getMax());
 	}
 	
 	/**
@@ -138,13 +166,36 @@ public class GeneralDropItem implements IDropItem
 	 */
 	public double getChance(L2Character victim, L2Character killer)
 	{
-		float multiplier = 1;
-		Float dropChanceMultiplier = Config.RATE_DROP_CHANCE_MULTIPLIER.get(getItemId());
-		if (dropChanceMultiplier != null)
+		double multiplier = 1;
+		
+		// individual drop chance
+		Float individualDropChanceMultiplier = Config.RATE_DROP_CHANCE_MULTIPLIER.get(getItemId());
+		if (individualDropChanceMultiplier != null)
+		{
+			multiplier *= individualDropChanceMultiplier;
+		}
+		else
 		{
-			multiplier *= dropChanceMultiplier;
+			final L2Item item = ItemTable.getInstance().getTemplate(getItemId());
+			if ((item != null) && item.hasExImmediateEffect())
+			{
+				multiplier *= Config.RATE_HERB_DROP_CHANCE_MULTIPLIER;
+			}
+			else
+			{
+				multiplier *= getGlobalChanceMultiplier();
+			}
 		}
-		return getChance() * multiplier;
+		
+		// global champions chance multiplier, there is no such option yet
+		// @formatter:off
+		/*if (victim.isChampion())
+		{
+			multiplier *= getItemId() != Inventory.ADENA_ID ? Config.L2JMOD_CHAMPION_REWARDS_CHANCE : Config.L2JMOD_CHAMPION_ADENAS_REWARDS_CHANCE;
+		}*/
+		// @formatter:on
+		
+		return (getChance() * multiplier);
 	}
 	
 	/*
@@ -174,9 +225,10 @@ public class GeneralDropItem implements IDropItem
 		if (getChance(victim, killer) > (Rnd.nextDouble() * 100))
 		{
 			final long amount = Rnd.get(getMin(victim, killer), getMax(victim, killer));
-			
 			final List<ItemHolder> items = new ArrayList<>(1);
+			
 			items.add(new ItemHolder(getItemId(), amount));
+			
 			return items;
 		}
 		

+ 3 - 4
L2J_Server/java/com/l2jserver/gameserver/model/drops/GroupedCorpseDropItem.java

@@ -19,7 +19,6 @@
 package com.l2jserver.gameserver.model.drops;
 
 import com.l2jserver.Config;
-import com.l2jserver.gameserver.model.actor.L2Character;
 
 /**
  * @author Nos
@@ -36,11 +35,11 @@ public class GroupedCorpseDropItem extends GroupedGeneralDropItem
 	
 	/*
 	 * (non-Javadoc)
-	 * @see com.l2jserver.gameserver.model.drops.GroupedGeneralDropItem#getChance(com.l2jserver.gameserver.model.actor.L2Character, com.l2jserver.gameserver.model.actor.L2Character)
+	 * @see com.l2jserver.gameserver.model.drops.GroupedGeneralDropItem#getGlobalChanceMultiplier()
 	 */
 	@Override
-	public double getChance(L2Character victim, L2Character killer)
+	protected double getGlobalChanceMultiplier()
 	{
-		return super.getChance(victim, killer) * Config.RATE_CORPSE_DROP_CHANCE_MULTIPLIER;
+		return Config.RATE_CORPSE_DROP_CHANCE_MULTIPLIER;
 	}
 }

+ 3 - 15
L2J_Server/java/com/l2jserver/gameserver/model/drops/GroupedDeathDropItem.java

@@ -19,9 +19,6 @@
 package com.l2jserver.gameserver.model.drops;
 
 import com.l2jserver.Config;
-import com.l2jserver.gameserver.datatables.ItemTable;
-import com.l2jserver.gameserver.model.actor.L2Character;
-import com.l2jserver.gameserver.model.items.L2Item;
 
 /**
  * @author Nos
@@ -38,20 +35,11 @@ public class GroupedDeathDropItem extends GroupedGeneralDropItem
 	
 	/*
 	 * (non-Javadoc)
-	 * @see com.l2jserver.gameserver.model.drops.GroupedGeneralDropItem#getChance(com.l2jserver.gameserver.model.actor.L2Character, com.l2jserver.gameserver.model.actor.L2Character)
+	 * @see com.l2jserver.gameserver.model.drops.GroupedGeneralDropItem#getGlobalChanceMultiplier()
 	 */
 	@Override
-	public double getChance(L2Character victim, L2Character killer)
+	protected double getGlobalChanceMultiplier()
 	{
-		for (final GeneralDropItem gdi : getItems())
-		{
-			final L2Item item = ItemTable.getInstance().getTemplate(gdi.getItemId());
-			if ((item == null) || !item.hasExImmediateEffect())
-			{
-				return super.getChance(victim, killer) * Config.RATE_DEATH_DROP_CHANCE_MULTIPLIER;
-			}
-		}
-		
-		return super.getChance(victim, killer) * Config.RATE_HERB_DROP_CHANCE_MULTIPLIER;
+		return Config.RATE_DEATH_DROP_CHANCE_MULTIPLIER;
 	}
 }

+ 17 - 1
L2J_Server/java/com/l2jserver/gameserver/model/drops/GroupedGeneralDropItem.java

@@ -23,9 +23,11 @@ import java.util.Collections;
 import java.util.List;
 
 import com.l2jserver.Config;
+import com.l2jserver.gameserver.datatables.ItemTable;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2RaidBossInstance;
 import com.l2jserver.gameserver.model.holders.ItemHolder;
+import com.l2jserver.gameserver.model.items.L2Item;
 import com.l2jserver.gameserver.util.Util;
 import com.l2jserver.util.Rnd;
 
@@ -45,6 +47,11 @@ public class GroupedGeneralDropItem implements IDropItem
 		_chance = chance;
 	}
 	
+	protected double getGlobalChanceMultiplier()
+	{
+		return 1.;
+	}
+	
 	/**
 	 * Gets the chance of this drop item.
 	 * @return the chance
@@ -62,7 +69,16 @@ public class GroupedGeneralDropItem implements IDropItem
 	 */
 	public double getChance(L2Character victim, L2Character killer)
 	{
-		return getChance();
+		for (final GeneralDropItem gdi : getItems())
+		{
+			final L2Item item = ItemTable.getInstance().getTemplate(gdi.getItemId());
+			if ((item == null) || !item.hasExImmediateEffect())
+			{
+				return getChance() * getGlobalChanceMultiplier();
+			}
+		}
+		
+		return getChance() * Config.RATE_HERB_DROP_CHANCE_MULTIPLIER;
 	}
 	
 	/**