From e3aa6e48577f3247653e94a76b68a4626a630c65 Mon Sep 17 00:00:00 2001 From: STRWarrior Date: Wed, 15 Oct 2014 14:08:45 +0200 Subject: Enchanted books generate in MineShafts chests --- src/Enchantments.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/Enchantments.cpp') diff --git a/src/Enchantments.cpp b/src/Enchantments.cpp index 264878c22..e106ef398 100644 --- a/src/Enchantments.cpp +++ b/src/Enchantments.cpp @@ -994,9 +994,13 @@ void cEnchantments::CheckEnchantmentConflictsFromVector(cWeightedEnchantments & -cEnchantments cEnchantments::GetRandomEnchantmentFromVector(cWeightedEnchantments & a_Enchantments) +cEnchantments cEnchantments::GetRandomEnchantmentFromVector(cWeightedEnchantments & a_Enchantments, int a_Seed) { cFastRandom Random; + if (a_Seed != -1) + { + Random = cFastRandom(a_Seed); + } int AllWeights = 0; for (cWeightedEnchantments::iterator it = a_Enchantments.begin(); it != a_Enchantments.end(); ++it) -- cgit v1.2.3 From ff5f57514e172e3344d6d50fce6bd8ea84e7f32b Mon Sep 17 00:00:00 2001 From: STRWarrior Date: Wed, 15 Oct 2014 14:44:07 +0200 Subject: Returned cFastRandom and cEnchantment:GetRandomEnchantmentFromVector to before Added cEnchantment:GenerateEnchantmentFromVector that allows to get the same enchantments over and over. --- src/Enchantments.cpp | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) (limited to 'src/Enchantments.cpp') diff --git a/src/Enchantments.cpp b/src/Enchantments.cpp index e106ef398..3cddf37ae 100644 --- a/src/Enchantments.cpp +++ b/src/Enchantments.cpp @@ -6,6 +6,7 @@ #include "Enchantments.h" #include "WorldStorage/FastNBT.h" #include "FastRandom.h" +#include "Noise.h" @@ -994,20 +995,43 @@ void cEnchantments::CheckEnchantmentConflictsFromVector(cWeightedEnchantments & -cEnchantments cEnchantments::GetRandomEnchantmentFromVector(cWeightedEnchantments & a_Enchantments, int a_Seed) +cEnchantments cEnchantments::GetRandomEnchantmentFromVector(cWeightedEnchantments & a_Enchantments) { cFastRandom Random; - if (a_Seed != -1) + + int AllWeights = 0; + for (cWeightedEnchantments::iterator it = a_Enchantments.begin(); it != a_Enchantments.end(); ++it) + { + AllWeights += (*it).m_Weight; + } + int RandomNumber = Random.GenerateRandomInteger(0, AllWeights - 1); + for (cWeightedEnchantments::iterator it = a_Enchantments.begin(); it != a_Enchantments.end(); ++it) { - Random = cFastRandom(a_Seed); + RandomNumber -= (*it).m_Weight; + if (RandomNumber < 0) + { + return (*it).m_Enchantments; + } } + return cEnchantments(); +} + + + + + +cEnchantments cEnchantments::GenerateEnchantmentFromVector(cWeightedEnchantments & a_Enchantments, int a_Seed) +{ int AllWeights = 0; for (cWeightedEnchantments::iterator it = a_Enchantments.begin(); it != a_Enchantments.end(); ++it) { AllWeights += (*it).m_Weight; } - int RandomNumber = Random.GenerateRandomInteger(0, AllWeights - 1); + + cNoise Noise(a_Seed); + int RandomNumber = Noise.IntNoise1DInt(AllWeights) % AllWeights; + for (cWeightedEnchantments::iterator it = a_Enchantments.begin(); it != a_Enchantments.end(); ++it) { RandomNumber -= (*it).m_Weight; -- cgit v1.2.3 From 0cdd2b64ed9c99c171c0689ada24147732fb3d4b Mon Sep 17 00:00:00 2001 From: STRWarrior Date: Wed, 15 Oct 2014 15:42:45 +0200 Subject: IntNoise1DInt result gets devided by 7 first suggestion by xoft --- src/Enchantments.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/Enchantments.cpp') diff --git a/src/Enchantments.cpp b/src/Enchantments.cpp index 3cddf37ae..10d23a8fb 100644 --- a/src/Enchantments.cpp +++ b/src/Enchantments.cpp @@ -1030,7 +1030,7 @@ cEnchantments cEnchantments::GenerateEnchantmentFromVector(cWeightedEnchantments } cNoise Noise(a_Seed); - int RandomNumber = Noise.IntNoise1DInt(AllWeights) % AllWeights; + int RandomNumber = Noise.IntNoise1DInt(AllWeights) / 7 % AllWeights; for (cWeightedEnchantments::iterator it = a_Enchantments.begin(); it != a_Enchantments.end(); ++it) { -- cgit v1.2.3 From 4038e1cb42e84f210826f22c6a55b13c440cf9fb Mon Sep 17 00:00:00 2001 From: STRWarrior Date: Wed, 15 Oct 2014 18:11:28 +0200 Subject: Using C++11 loops --- src/Enchantments.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/Enchantments.cpp') diff --git a/src/Enchantments.cpp b/src/Enchantments.cpp index 10d23a8fb..80a9810b6 100644 --- a/src/Enchantments.cpp +++ b/src/Enchantments.cpp @@ -1024,20 +1024,20 @@ cEnchantments cEnchantments::GetRandomEnchantmentFromVector(cWeightedEnchantment cEnchantments cEnchantments::GenerateEnchantmentFromVector(cWeightedEnchantments & a_Enchantments, int a_Seed) { int AllWeights = 0; - for (cWeightedEnchantments::iterator it = a_Enchantments.begin(); it != a_Enchantments.end(); ++it) + for (const auto Enchantment : a_Enchantments) { - AllWeights += (*it).m_Weight; + AllWeights += Enchantment.m_Weight; } cNoise Noise(a_Seed); int RandomNumber = Noise.IntNoise1DInt(AllWeights) / 7 % AllWeights; - for (cWeightedEnchantments::iterator it = a_Enchantments.begin(); it != a_Enchantments.end(); ++it) + for (const auto Enchantment : a_Enchantments) { - RandomNumber -= (*it).m_Weight; + RandomNumber -= Enchantment.m_Weight; if (RandomNumber < 0) { - return (*it).m_Enchantments; + return Enchantment.m_Enchantments; } } -- cgit v1.2.3