summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/ClientHandle.cpp17
-rw-r--r--src/Enchantments.h13
-rw-r--r--src/Item.cpp9
-rw-r--r--src/Item.h2
4 files changed, 21 insertions, 20 deletions
diff --git a/src/ClientHandle.cpp b/src/ClientHandle.cpp
index a3d0501c3..eab306a0c 100644
--- a/src/ClientHandle.cpp
+++ b/src/ClientHandle.cpp
@@ -2735,15 +2735,18 @@ void cClientHandle::HandleEnchantItem(Byte & WindowID, Byte & Enchantment)
cItem Item = *Window->m_SlotArea->GetSlot(0, *m_Player);
int BaseEnchantmentLevel = Window->GetPropertyValue(Enchantment);
- if (Item.EnchantByXPLevels(BaseEnchantmentLevel, *m_Player, true, true))
+ if (Item.EnchantByXPLevels(BaseEnchantmentLevel))
{
- Window->m_SlotArea->SetSlot(0, *m_Player, Item);
- Window->SendSlot(*m_Player, Window->m_SlotArea, 0);
- Window->BroadcastWholeWindow();
+ if (m_Player->IsGameModeCreative() | m_Player->DeltaExperience(-m_Player->XpForLevel(BaseEnchantmentLevel)) >= 0)
+ {
+ Window->m_SlotArea->SetSlot(0, *m_Player, Item);
+ Window->SendSlot(*m_Player, Window->m_SlotArea, 0);
+ Window->BroadcastWholeWindow();
- Window->SetProperty(0, 0, *m_Player);
- Window->SetProperty(1, 0, *m_Player);
- Window->SetProperty(2, 0, *m_Player);
+ Window->SetProperty(0, 0, *m_Player);
+ Window->SetProperty(1, 0, *m_Player);
+ Window->SetProperty(2, 0, *m_Player);
+ }
}
}
diff --git a/src/Enchantments.h b/src/Enchantments.h
index 1d226330a..fa07dc2d4 100644
--- a/src/Enchantments.h
+++ b/src/Enchantments.h
@@ -20,6 +20,11 @@ class cFastNBTWriter;
class cParsedNBT;
+// fwd:
+struct cWeightedEnchantment;
+
+typedef std::vector<cWeightedEnchantment> cWeightedEnchantments;
+
@@ -111,7 +116,6 @@ public:
/** Gets random enchantment from Vector and returns it */
static cEnchantments GetRandomEnchantmentFromVector(cWeightedEnchantments & a_Enchantments);
-
/// Returns true if a_Other doesn't contain exactly the same enchantments and levels
bool operator !=(const cEnchantments & a_Other) const;
@@ -131,15 +135,14 @@ protected:
} ; // tolua_export
-/** Things below for the Enchanting System */
+
+
+// Define the cWeightedEnchantment struct:
struct cWeightedEnchantment
{
int m_Weight;
cEnchantments m_Enchantments;
};
-typedef std::vector<cWeightedEnchantment> cWeightedEnchantments;
-
-
diff --git a/src/Item.cpp b/src/Item.cpp
index 8bc25d242..540725492 100644
--- a/src/Item.cpp
+++ b/src/Item.cpp
@@ -267,7 +267,7 @@ int cItem::GetEnchantability()
-bool cItem::EnchantByXPLevels(int a_NumXPLevels, cPlayer & a_Player, bool a_BlockConflictingEnchantments, bool a_DeleteLevelFromPlayer)
+bool cItem::EnchantByXPLevels(int a_NumXPLevels)
{
if (!cItem::IsEnchantable(m_ItemType) && m_ItemType != E_ITEM_BOOK)
{
@@ -338,12 +338,7 @@ bool cItem::EnchantByXPLevels(int a_NumXPLevels, cPlayer & a_Player, bool a_Bloc
}
}
- if (a_Player.DeltaExperience(-a_Player.XpForLevel(a_NumXPLevels)) >= 0 || a_Player.IsGameModeCreative())
- {
- return true;
- }
-
- return false;
+ return true;
}
diff --git a/src/Item.h b/src/Item.h
index 987dea2a9..00316c188 100644
--- a/src/Item.h
+++ b/src/Item.h
@@ -180,7 +180,7 @@ public:
/** Enchants the item using the specified number of XP levels.
Returns true if item enchanted, false if not. */
- bool EnchantByXPLevels(int a_NumXPLevels, cPlayer & a_Player, bool a_BlockConflictingEnchantments, bool a_DeleteLevelFromPlayer); // tolua_export
+ bool EnchantByXPLevels(int a_NumXPLevels); // tolua_export
// tolua_begin