diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/data/xml/RandomCraftData.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/data/xml/RandomCraftData.java index 2914ecf635..c330887853 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/data/xml/RandomCraftData.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/data/xml/RandomCraftData.java @@ -42,6 +42,9 @@ public class RandomCraftData implements IXmlReader private static final Map EXTRACT_DATA = new HashMap<>(); private static final Map REWARD_DATA = new HashMap<>(); + private List _randomRewards = null; + private int _randomRewardIndex = 0; + protected RandomCraftData() { load(); @@ -70,6 +73,8 @@ public class RandomCraftData implements IXmlReader LOGGER.info(getClass().getSimpleName() + ": Random craft rewards should be more than " + rewardCount + "."); REWARD_DATA.clear(); } + + randomizeRewards(); } @Override @@ -111,24 +116,32 @@ public class RandomCraftData implements IXmlReader return REWARD_DATA.isEmpty(); } - public RandomCraftRewardItemHolder getNewReward() + public synchronized RandomCraftRewardItemHolder getNewReward() { - final List rewards = new ArrayList<>(REWARD_DATA.values()); - Collections.shuffle(rewards); - - RandomCraftRewardItemHolder result = null; - while (result == null) + RandomCraftRewardDataHolder reward = null; + final double random = Rnd.get(100d); + while (!REWARD_DATA.isEmpty()) { - SEARCH: for (RandomCraftRewardDataHolder reward : rewards) + if (REWARD_DATA.size() == _randomRewardIndex) { - if (Rnd.get(100d) < reward.getChance()) - { - result = new RandomCraftRewardItemHolder(reward.getItemId(), reward.getCount(), false, 20); - break SEARCH; - } + randomizeRewards(); + } + _randomRewardIndex++; + + reward = _randomRewards.get(_randomRewardIndex); + if (random < reward.getChance()) + { + return new RandomCraftRewardItemHolder(reward.getItemId(), reward.getCount(), false, 20); } } - return result; + return null; + } + + private void randomizeRewards() + { + _randomRewardIndex = -1; + _randomRewards = new ArrayList<>(REWARD_DATA.values()); + Collections.shuffle(_randomRewards); } public boolean isAnnounce(int id) diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/data/xml/RandomCraftData.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/data/xml/RandomCraftData.java index 2914ecf635..c330887853 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/data/xml/RandomCraftData.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/data/xml/RandomCraftData.java @@ -42,6 +42,9 @@ public class RandomCraftData implements IXmlReader private static final Map EXTRACT_DATA = new HashMap<>(); private static final Map REWARD_DATA = new HashMap<>(); + private List _randomRewards = null; + private int _randomRewardIndex = 0; + protected RandomCraftData() { load(); @@ -70,6 +73,8 @@ public class RandomCraftData implements IXmlReader LOGGER.info(getClass().getSimpleName() + ": Random craft rewards should be more than " + rewardCount + "."); REWARD_DATA.clear(); } + + randomizeRewards(); } @Override @@ -111,24 +116,32 @@ public class RandomCraftData implements IXmlReader return REWARD_DATA.isEmpty(); } - public RandomCraftRewardItemHolder getNewReward() + public synchronized RandomCraftRewardItemHolder getNewReward() { - final List rewards = new ArrayList<>(REWARD_DATA.values()); - Collections.shuffle(rewards); - - RandomCraftRewardItemHolder result = null; - while (result == null) + RandomCraftRewardDataHolder reward = null; + final double random = Rnd.get(100d); + while (!REWARD_DATA.isEmpty()) { - SEARCH: for (RandomCraftRewardDataHolder reward : rewards) + if (REWARD_DATA.size() == _randomRewardIndex) { - if (Rnd.get(100d) < reward.getChance()) - { - result = new RandomCraftRewardItemHolder(reward.getItemId(), reward.getCount(), false, 20); - break SEARCH; - } + randomizeRewards(); + } + _randomRewardIndex++; + + reward = _randomRewards.get(_randomRewardIndex); + if (random < reward.getChance()) + { + return new RandomCraftRewardItemHolder(reward.getItemId(), reward.getCount(), false, 20); } } - return result; + return null; + } + + private void randomizeRewards() + { + _randomRewardIndex = -1; + _randomRewards = new ArrayList<>(REWARD_DATA.values()); + Collections.shuffle(_randomRewards); } public boolean isAnnounce(int id) diff --git a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/data/xml/RandomCraftData.java b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/data/xml/RandomCraftData.java index 2914ecf635..c330887853 100644 --- a/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/data/xml/RandomCraftData.java +++ b/L2J_Mobius_Essence_6.1_BattleChronicle/java/org/l2jmobius/gameserver/data/xml/RandomCraftData.java @@ -42,6 +42,9 @@ public class RandomCraftData implements IXmlReader private static final Map EXTRACT_DATA = new HashMap<>(); private static final Map REWARD_DATA = new HashMap<>(); + private List _randomRewards = null; + private int _randomRewardIndex = 0; + protected RandomCraftData() { load(); @@ -70,6 +73,8 @@ public class RandomCraftData implements IXmlReader LOGGER.info(getClass().getSimpleName() + ": Random craft rewards should be more than " + rewardCount + "."); REWARD_DATA.clear(); } + + randomizeRewards(); } @Override @@ -111,24 +116,32 @@ public class RandomCraftData implements IXmlReader return REWARD_DATA.isEmpty(); } - public RandomCraftRewardItemHolder getNewReward() + public synchronized RandomCraftRewardItemHolder getNewReward() { - final List rewards = new ArrayList<>(REWARD_DATA.values()); - Collections.shuffle(rewards); - - RandomCraftRewardItemHolder result = null; - while (result == null) + RandomCraftRewardDataHolder reward = null; + final double random = Rnd.get(100d); + while (!REWARD_DATA.isEmpty()) { - SEARCH: for (RandomCraftRewardDataHolder reward : rewards) + if (REWARD_DATA.size() == _randomRewardIndex) { - if (Rnd.get(100d) < reward.getChance()) - { - result = new RandomCraftRewardItemHolder(reward.getItemId(), reward.getCount(), false, 20); - break SEARCH; - } + randomizeRewards(); + } + _randomRewardIndex++; + + reward = _randomRewards.get(_randomRewardIndex); + if (random < reward.getChance()) + { + return new RandomCraftRewardItemHolder(reward.getItemId(), reward.getCount(), false, 20); } } - return result; + return null; + } + + private void randomizeRewards() + { + _randomRewardIndex = -1; + _randomRewards = new ArrayList<>(REWARD_DATA.values()); + Collections.shuffle(_randomRewards); } public boolean isAnnounce(int id) diff --git a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/data/xml/RandomCraftData.java b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/data/xml/RandomCraftData.java index 2914ecf635..c330887853 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/data/xml/RandomCraftData.java +++ b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/data/xml/RandomCraftData.java @@ -42,6 +42,9 @@ public class RandomCraftData implements IXmlReader private static final Map EXTRACT_DATA = new HashMap<>(); private static final Map REWARD_DATA = new HashMap<>(); + private List _randomRewards = null; + private int _randomRewardIndex = 0; + protected RandomCraftData() { load(); @@ -70,6 +73,8 @@ public class RandomCraftData implements IXmlReader LOGGER.info(getClass().getSimpleName() + ": Random craft rewards should be more than " + rewardCount + "."); REWARD_DATA.clear(); } + + randomizeRewards(); } @Override @@ -111,24 +116,32 @@ public class RandomCraftData implements IXmlReader return REWARD_DATA.isEmpty(); } - public RandomCraftRewardItemHolder getNewReward() + public synchronized RandomCraftRewardItemHolder getNewReward() { - final List rewards = new ArrayList<>(REWARD_DATA.values()); - Collections.shuffle(rewards); - - RandomCraftRewardItemHolder result = null; - while (result == null) + RandomCraftRewardDataHolder reward = null; + final double random = Rnd.get(100d); + while (!REWARD_DATA.isEmpty()) { - SEARCH: for (RandomCraftRewardDataHolder reward : rewards) + if (REWARD_DATA.size() == _randomRewardIndex) { - if (Rnd.get(100d) < reward.getChance()) - { - result = new RandomCraftRewardItemHolder(reward.getItemId(), reward.getCount(), false, 20); - break SEARCH; - } + randomizeRewards(); + } + _randomRewardIndex++; + + reward = _randomRewards.get(_randomRewardIndex); + if (random < reward.getChance()) + { + return new RandomCraftRewardItemHolder(reward.getItemId(), reward.getCount(), false, 20); } } - return result; + return null; + } + + private void randomizeRewards() + { + _randomRewardIndex = -1; + _randomRewards = new ArrayList<>(REWARD_DATA.values()); + Collections.shuffle(_randomRewards); } public boolean isAnnounce(int id)