summaryrefslogtreecommitdiff
path: root/src/dropshortcut.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/dropshortcut.cpp')
-rw-r--r--src/dropshortcut.cpp51
1 files changed, 44 insertions, 7 deletions
diff --git a/src/dropshortcut.cpp b/src/dropshortcut.cpp
index 189d76b96..c31241409 100644
--- a/src/dropshortcut.cpp
+++ b/src/dropshortcut.cpp
@@ -41,7 +41,8 @@
DropShortcut *dropShortcut;
DropShortcut::DropShortcut():
- mItemSelected(-1)
+ mItemSelected(-1),
+ mItemColorSelected(1)
{
for (int i = 0; i < DROP_SHORTCUT_ITEMS; i++)
mItems[i] = -1;
@@ -66,9 +67,14 @@ void DropShortcut::load(bool oldConfig)
for (int i = 0; i < DROP_SHORTCUT_ITEMS; i++)
{
int itemId = static_cast<int>(cfg->getValue("drop" + toString(i), -1));
+ int itemColor = static_cast<int>(
+ cfg->getValue("dropColor" + toString(i), -1));
if (itemId != -1)
+ {
mItems[i] = itemId;
+ mItemColors[i] = itemColor;
+ }
}
}
@@ -77,10 +83,17 @@ void DropShortcut::save()
for (int i = 0; i < DROP_SHORTCUT_ITEMS; i++)
{
const int itemId = mItems[i] ? mItems[i] : -1;
+ const int itemColor = mItemColors[i] ? mItemColors[i] : 1;
if (itemId != -1)
+ {
serverConfig.setValue("drop" + toString(i), itemId);
+ serverConfig.setValue("dropColor" + toString(i), itemColor);
+ }
else
+ {
serverConfig.deleteKey("drop" + toString(i));
+ serverConfig.deleteKey("dropColor" + toString(i));
+ }
}
}
@@ -92,12 +105,12 @@ void DropShortcut::dropFirst()
if (!Client::limitPackets(PACKET_DROP))
return;
- int itemId;
- itemId = getItem(0);
+ const int itemId = getItem(0);
+ const int itemColor = getItemColor(0);
if (itemId > 0)
{
- Item *item = PlayerInfo::getInventory()->findItem(itemId);
+ Item *item = PlayerInfo::getInventory()->findItem(itemId, itemColor);
if (item && item->getQuantity())
{
if (player_node->isServerBuggy())
@@ -137,14 +150,16 @@ void DropShortcut::dropItems(int cnt)
bool DropShortcut::dropItem(int cnt)
{
int itemId = 0;
+ unsigned char itemColor = 1;
while (mLastDropIndex < DROP_SHORTCUT_ITEMS && itemId < 1)
{
itemId = getItem(mLastDropIndex);
- mLastDropIndex++;
+ itemColor = getItemColor(mLastDropIndex);
+ mLastDropIndex ++;
}
if (itemId > 0)
{
- Item *item = PlayerInfo::getInventory()->findItem(itemId);
+ Item *item = PlayerInfo::getInventory()->findItem(itemId, itemColor);
if (item && item->getQuantity() > 0)
{
Net::getInventoryHandler()->dropItem(item, cnt);
@@ -159,11 +174,12 @@ bool DropShortcut::dropItem(int cnt)
while (mLastDropIndex < DROP_SHORTCUT_ITEMS && itemId < 1)
{
itemId = getItem(mLastDropIndex);
+ itemColor = getItemColor(mLastDropIndex);
mLastDropIndex++;
}
if (itemId > 0)
{
- Item *item = PlayerInfo::getInventory()->findItem(itemId);
+ Item *item = PlayerInfo::getInventory()->findItem(itemId, itemColor);
if (item && item->getQuantity() > 0)
{
Net::getInventoryHandler()->dropItem(item, cnt);
@@ -175,3 +191,24 @@ bool DropShortcut::dropItem(int cnt)
}
return false;
}
+
+void DropShortcut::setItemSelected(Item *item)
+{
+ if (item)
+ {
+ mItemSelected = item->getId();
+ mItemColorSelected = item->getColor();
+ }
+ else
+ {
+ mItemSelected = -1;
+ mItemColorSelected = 1;
+ }
+}
+
+void DropShortcut::setItem(int index)
+{
+ mItems[index] = mItemSelected;
+ mItemColors[index] = mItemColorSelected;
+ save();
+}