diff options
-rw-r--r-- | src/ClientHandle.cpp | 17 | ||||
-rw-r--r-- | src/Enchantments.h | 13 | ||||
-rw-r--r-- | src/Item.cpp | 9 | ||||
-rw-r--r-- | src/Item.h | 2 |
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 |