Index: java/config/rates.properties =================================================================== --- java/config/rates.properties (revision 1798) +++ java/config/rates.properties (working copy) @@ -9,6 +9,7 @@ RateDropAdena = 1. RateConsumableCost = 1. RateDropItems = 1. +RateRaidDropItems = 1. RateDropSpoil = 1. RateDropManor = 1 # NOTE: this need quests to be rewritten in dp in order to work Index: java/net/sf/l2j/Config.java =================================================================== --- java/net/sf/l2j/Config.java (revision 1798) +++ java/net/sf/l2j/Config.java (working copy) @@ -617,6 +617,8 @@ public static float RATE_CONSUMABLE_COST; /** Rate for dropped items */ public static float RATE_DROP_ITEMS; + /** Rate for dropped items by Raid Bosses */ + public static float RATE_DROP_ITEMS_BY_RAID; /** Rate for spoiled items */ public static float RATE_DROP_SPOIL; /** Rate for manor items */ @@ -1429,6 +1431,7 @@ RATE_DROP_ADENA = Float.parseFloat(ratesSettings.getProperty("RateDropAdena", "1.")); RATE_CONSUMABLE_COST = Float.parseFloat(ratesSettings.getProperty("RateConsumableCost", "1.")); RATE_DROP_ITEMS = Float.parseFloat(ratesSettings.getProperty("RateDropItems", "1.")); + RATE_DROP_ITEMS_BY_RAID = Float.parseFloat(ratesSettings.getProperty("RateRaidDropItems", "1.")); RATE_DROP_SPOIL = Float.parseFloat(ratesSettings.getProperty("RateDropSpoil", "1.")); RATE_DROP_MANOR = Integer.parseInt(ratesSettings.getProperty("RateDropManor", "1")); RATE_DROP_QUEST = Float.parseFloat(ratesSettings.getProperty("RateDropQuest", "1.")); @@ -1826,6 +1829,7 @@ else if (pName.equalsIgnoreCase("RateDropAdena")) RATE_DROP_ADENA = Float.parseFloat(pValue); else if (pName.equalsIgnoreCase("RateConsumableCost")) RATE_CONSUMABLE_COST = Float.parseFloat(pValue); else if (pName.equalsIgnoreCase("RateDropItems")) RATE_DROP_ITEMS = Float.parseFloat(pValue); + else if (pName.equalsIgnoreCase("RateRaidDropItems")) RATE_DROP_ITEMS_BY_RAID = Float.parseFloat(pValue); else if (pName.equalsIgnoreCase("RateDropSpoil")) RATE_DROP_SPOIL = Float.parseFloat(pValue); else if (pName.equalsIgnoreCase("RateDropManor")) RATE_DROP_MANOR = Integer.parseInt(pValue); else if (pName.equalsIgnoreCase("RateDropQuest")) RATE_DROP_QUEST = Float.parseFloat(pValue); Index: java/net/sf/l2j/gameserver/model/L2Attackable.java =================================================================== --- java/net/sf/l2j/gameserver/model/L2Attackable.java (revision 1798) +++ java/net/sf/l2j/gameserver/model/L2Attackable.java (working copy) @@ -1030,7 +1030,7 @@ private RewardItem calculateRewardItem(L2PcInstance lastAttacker, L2DropData drop, int levelModifier, boolean isSweep) { // Get default drop chance - float dropChance = drop.getChance(); + float dropChance = drop.getChance(); int deepBlueDrop = 1; if (Config.DEEPBLUE_DROP_RULES) @@ -1040,7 +1040,7 @@ // We should multiply by the server's drop rate, so we always get a low chance of drop for deep blue mobs. // NOTE: This is valid only for adena drops! Others drops will still obey server's rate deepBlueDrop = 3; - if (drop.getItemId() == 57) deepBlueDrop *= (int)Config.RATE_DROP_ITEMS; + if (drop.getItemId() == 57) deepBlueDrop *= isRaid()? (int)Config.RATE_DROP_ITEMS_BY_RAID : (int)Config.RATE_DROP_ITEMS; } } @@ -1052,7 +1052,7 @@ // Applies Drop rates if (drop.getItemId() == 57) dropChance *= Config.RATE_DROP_ADENA; else if (isSweep) dropChance *= Config.RATE_DROP_SPOIL; - else dropChance *= Config.RATE_DROP_ITEMS; + else dropChance *= isRaid() ? Config.RATE_DROP_ITEMS_BY_RAID : Config.RATE_DROP_ITEMS; if (Config.L2JMOD_CHAMPION_ENABLE && isChampion()) dropChance *= Config.L2JMOD_CHAMPION_REWARDS; @@ -1139,7 +1139,7 @@ if (Config.DEEPBLUE_DROP_RULES) categoryDropChance = ((categoryDropChance - ((categoryDropChance * levelModifier)/100)) / deepBlueDrop); // Applies Drop rates - categoryDropChance *= Config.RATE_DROP_ITEMS; + categoryDropChance *= isRaid() ? Config.RATE_DROP_ITEMS_BY_RAID : Config.RATE_DROP_ITEMS; if (Config.L2JMOD_CHAMPION_ENABLE && isChampion()) categoryDropChance *= Config.L2JMOD_CHAMPION_REWARDS; @@ -1152,7 +1152,7 @@ // Check if an Item from this category must be dropped if (Rnd.get(L2DropData.MAX_CHANCE) < categoryDropChance) { - L2DropData drop = categoryDrops.dropOne(); + L2DropData drop = categoryDrops.dropOne(isRaid()); if (drop == null) return null; @@ -1170,7 +1170,7 @@ int dropChance = drop.getChance(); if (drop.getItemId() == 57) dropChance *= Config.RATE_DROP_ADENA; - else dropChance *= Config.RATE_DROP_ITEMS; + else dropChance *= isRaid() ? Config.RATE_DROP_ITEMS_BY_RAID : Config.RATE_DROP_ITEMS; if (Config.L2JMOD_CHAMPION_ENABLE && isChampion()) dropChance *= Config.L2JMOD_CHAMPION_REWARDS; Index: java/net/sf/l2j/gameserver/model/L2DropCategory.java =================================================================== --- java/net/sf/l2j/gameserver/model/L2DropCategory.java (revision 1798) +++ java/net/sf/l2j/gameserver/model/L2DropCategory.java (working copy) @@ -37,7 +37,7 @@ _categoryBalancedChance = 0; } - public void addDropData(L2DropData drop) + public void addDropData(L2DropData drop, boolean raid) { if (drop.isQuestDrop()) { // if (_questDrops == null) @@ -47,7 +47,7 @@ _drops.add(drop); _categoryChance += drop.getChance(); // for drop selection inside a category: max 100 % chance for getting an item, scaling all values to that. - _categoryBalancedChance += Math.min((drop.getChance()*Config.RATE_DROP_ITEMS),L2DropData.MAX_CHANCE); + _categoryBalancedChance += Math.min((drop.getChance()*(raid?Config.RATE_DROP_ITEMS_BY_RAID : Config.RATE_DROP_ITEMS)),L2DropData.MAX_CHANCE); } } @@ -159,13 +159,13 @@ * * @return selected drop from category, or null if nothing is dropped. */ - public synchronized L2DropData dropOne() + public synchronized L2DropData dropOne(boolean raid) { int randomIndex = Rnd.get(getCategoryBalancedChance()); int sum = 0; for (L2DropData drop : getAllDrops()) { - sum += Math.min((drop.getChance()*Config.RATE_DROP_ITEMS),L2DropData.MAX_CHANCE); + sum += Math.min((drop.getChance()*(raid?Config.RATE_DROP_ITEMS_BY_RAID : Config.RATE_DROP_ITEMS)),L2DropData.MAX_CHANCE); if (sum >= randomIndex) // drop this item and exit the function return drop; Index: java/net/sf/l2j/gameserver/templates/L2NpcTemplate.java =================================================================== --- java/net/sf/l2j/gameserver/templates/L2NpcTemplate.java (revision 1798) +++ java/net/sf/l2j/gameserver/templates/L2NpcTemplate.java (working copy) @@ -231,7 +231,7 @@ // if the category exists, add the drop to this category. if (cat.getCategoryType() == categoryType) { - cat.addDropData(drop); + cat.addDropData(drop, type.equalsIgnoreCase("L2RaidBoss") || type.equalsIgnoreCase("L2GrandBoss")); catExists = true; break; } @@ -239,7 +239,7 @@ if (!catExists) { L2DropCategory cat = new L2DropCategory(categoryType); - cat.addDropData(drop); + cat.addDropData(drop, type.equalsIgnoreCase("L2RaidBoss") || type.equalsIgnoreCase("L2GrandBoss")); _categories.add(cat); } }