Addition of random craft randomize rewards method.

This commit is contained in:
MobiusDevelopment
2022-04-19 13:28:24 +00:00
parent bc03374d70
commit b70e7b00e3
4 changed files with 104 additions and 52 deletions

View File

@@ -42,6 +42,9 @@ public class RandomCraftData implements IXmlReader
private static final Map<Integer, RandomCraftExtractDataHolder> EXTRACT_DATA = new HashMap<>(); private static final Map<Integer, RandomCraftExtractDataHolder> EXTRACT_DATA = new HashMap<>();
private static final Map<Integer, RandomCraftRewardDataHolder> REWARD_DATA = new HashMap<>(); private static final Map<Integer, RandomCraftRewardDataHolder> REWARD_DATA = new HashMap<>();
private List<RandomCraftRewardDataHolder> _randomRewards = null;
private int _randomRewardIndex = 0;
protected RandomCraftData() protected RandomCraftData()
{ {
load(); load();
@@ -70,6 +73,8 @@ public class RandomCraftData implements IXmlReader
LOGGER.info(getClass().getSimpleName() + ": Random craft rewards should be more than " + rewardCount + "."); LOGGER.info(getClass().getSimpleName() + ": Random craft rewards should be more than " + rewardCount + ".");
REWARD_DATA.clear(); REWARD_DATA.clear();
} }
randomizeRewards();
} }
@Override @Override
@@ -111,24 +116,32 @@ public class RandomCraftData implements IXmlReader
return REWARD_DATA.isEmpty(); return REWARD_DATA.isEmpty();
} }
public RandomCraftRewardItemHolder getNewReward() public synchronized RandomCraftRewardItemHolder getNewReward()
{ {
final List<RandomCraftRewardDataHolder> rewards = new ArrayList<>(REWARD_DATA.values()); RandomCraftRewardDataHolder reward = null;
Collections.shuffle(rewards); final double random = Rnd.get(100d);
while (!REWARD_DATA.isEmpty())
RandomCraftRewardItemHolder result = null;
while (result == null)
{ {
SEARCH: for (RandomCraftRewardDataHolder reward : rewards) if (REWARD_DATA.size() == _randomRewardIndex)
{ {
if (Rnd.get(100d) < reward.getChance()) randomizeRewards();
{ }
result = new RandomCraftRewardItemHolder(reward.getItemId(), reward.getCount(), false, 20); _randomRewardIndex++;
break SEARCH;
} 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) public boolean isAnnounce(int id)

View File

@@ -42,6 +42,9 @@ public class RandomCraftData implements IXmlReader
private static final Map<Integer, RandomCraftExtractDataHolder> EXTRACT_DATA = new HashMap<>(); private static final Map<Integer, RandomCraftExtractDataHolder> EXTRACT_DATA = new HashMap<>();
private static final Map<Integer, RandomCraftRewardDataHolder> REWARD_DATA = new HashMap<>(); private static final Map<Integer, RandomCraftRewardDataHolder> REWARD_DATA = new HashMap<>();
private List<RandomCraftRewardDataHolder> _randomRewards = null;
private int _randomRewardIndex = 0;
protected RandomCraftData() protected RandomCraftData()
{ {
load(); load();
@@ -70,6 +73,8 @@ public class RandomCraftData implements IXmlReader
LOGGER.info(getClass().getSimpleName() + ": Random craft rewards should be more than " + rewardCount + "."); LOGGER.info(getClass().getSimpleName() + ": Random craft rewards should be more than " + rewardCount + ".");
REWARD_DATA.clear(); REWARD_DATA.clear();
} }
randomizeRewards();
} }
@Override @Override
@@ -111,24 +116,32 @@ public class RandomCraftData implements IXmlReader
return REWARD_DATA.isEmpty(); return REWARD_DATA.isEmpty();
} }
public RandomCraftRewardItemHolder getNewReward() public synchronized RandomCraftRewardItemHolder getNewReward()
{ {
final List<RandomCraftRewardDataHolder> rewards = new ArrayList<>(REWARD_DATA.values()); RandomCraftRewardDataHolder reward = null;
Collections.shuffle(rewards); final double random = Rnd.get(100d);
while (!REWARD_DATA.isEmpty())
RandomCraftRewardItemHolder result = null;
while (result == null)
{ {
SEARCH: for (RandomCraftRewardDataHolder reward : rewards) if (REWARD_DATA.size() == _randomRewardIndex)
{ {
if (Rnd.get(100d) < reward.getChance()) randomizeRewards();
{ }
result = new RandomCraftRewardItemHolder(reward.getItemId(), reward.getCount(), false, 20); _randomRewardIndex++;
break SEARCH;
} 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) public boolean isAnnounce(int id)

View File

@@ -42,6 +42,9 @@ public class RandomCraftData implements IXmlReader
private static final Map<Integer, RandomCraftExtractDataHolder> EXTRACT_DATA = new HashMap<>(); private static final Map<Integer, RandomCraftExtractDataHolder> EXTRACT_DATA = new HashMap<>();
private static final Map<Integer, RandomCraftRewardDataHolder> REWARD_DATA = new HashMap<>(); private static final Map<Integer, RandomCraftRewardDataHolder> REWARD_DATA = new HashMap<>();
private List<RandomCraftRewardDataHolder> _randomRewards = null;
private int _randomRewardIndex = 0;
protected RandomCraftData() protected RandomCraftData()
{ {
load(); load();
@@ -70,6 +73,8 @@ public class RandomCraftData implements IXmlReader
LOGGER.info(getClass().getSimpleName() + ": Random craft rewards should be more than " + rewardCount + "."); LOGGER.info(getClass().getSimpleName() + ": Random craft rewards should be more than " + rewardCount + ".");
REWARD_DATA.clear(); REWARD_DATA.clear();
} }
randomizeRewards();
} }
@Override @Override
@@ -111,24 +116,32 @@ public class RandomCraftData implements IXmlReader
return REWARD_DATA.isEmpty(); return REWARD_DATA.isEmpty();
} }
public RandomCraftRewardItemHolder getNewReward() public synchronized RandomCraftRewardItemHolder getNewReward()
{ {
final List<RandomCraftRewardDataHolder> rewards = new ArrayList<>(REWARD_DATA.values()); RandomCraftRewardDataHolder reward = null;
Collections.shuffle(rewards); final double random = Rnd.get(100d);
while (!REWARD_DATA.isEmpty())
RandomCraftRewardItemHolder result = null;
while (result == null)
{ {
SEARCH: for (RandomCraftRewardDataHolder reward : rewards) if (REWARD_DATA.size() == _randomRewardIndex)
{ {
if (Rnd.get(100d) < reward.getChance()) randomizeRewards();
{ }
result = new RandomCraftRewardItemHolder(reward.getItemId(), reward.getCount(), false, 20); _randomRewardIndex++;
break SEARCH;
} 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) public boolean isAnnounce(int id)

View File

@@ -42,6 +42,9 @@ public class RandomCraftData implements IXmlReader
private static final Map<Integer, RandomCraftExtractDataHolder> EXTRACT_DATA = new HashMap<>(); private static final Map<Integer, RandomCraftExtractDataHolder> EXTRACT_DATA = new HashMap<>();
private static final Map<Integer, RandomCraftRewardDataHolder> REWARD_DATA = new HashMap<>(); private static final Map<Integer, RandomCraftRewardDataHolder> REWARD_DATA = new HashMap<>();
private List<RandomCraftRewardDataHolder> _randomRewards = null;
private int _randomRewardIndex = 0;
protected RandomCraftData() protected RandomCraftData()
{ {
load(); load();
@@ -70,6 +73,8 @@ public class RandomCraftData implements IXmlReader
LOGGER.info(getClass().getSimpleName() + ": Random craft rewards should be more than " + rewardCount + "."); LOGGER.info(getClass().getSimpleName() + ": Random craft rewards should be more than " + rewardCount + ".");
REWARD_DATA.clear(); REWARD_DATA.clear();
} }
randomizeRewards();
} }
@Override @Override
@@ -111,24 +116,32 @@ public class RandomCraftData implements IXmlReader
return REWARD_DATA.isEmpty(); return REWARD_DATA.isEmpty();
} }
public RandomCraftRewardItemHolder getNewReward() public synchronized RandomCraftRewardItemHolder getNewReward()
{ {
final List<RandomCraftRewardDataHolder> rewards = new ArrayList<>(REWARD_DATA.values()); RandomCraftRewardDataHolder reward = null;
Collections.shuffle(rewards); final double random = Rnd.get(100d);
while (!REWARD_DATA.isEmpty())
RandomCraftRewardItemHolder result = null;
while (result == null)
{ {
SEARCH: for (RandomCraftRewardDataHolder reward : rewards) if (REWARD_DATA.size() == _randomRewardIndex)
{ {
if (Rnd.get(100d) < reward.getChance()) randomizeRewards();
{ }
result = new RandomCraftRewardItemHolder(reward.getItemId(), reward.getCount(), false, 20); _randomRewardIndex++;
break SEARCH;
} 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) public boolean isAnnounce(int id)