summaryrefslogtreecommitdiff
path: root/src/being.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2012-09-03 03:18:21 +0300
committerAndrei Karas <akaras@inbox.ru>2012-09-04 03:02:23 +0300
commitebecb0cf42f2066943908fa158ac91527e0e6629 (patch)
tree83dfe4650746e6b31803f7876ab3c0a50179a794 /src/being.cpp
parentfa21c1b65dbe91a1e6ac880db977416162f268df (diff)
downloadmanaplus-ebecb0cf42f2066943908fa158ac91527e0e6629.tar.gz
manaplus-ebecb0cf42f2066943908fa158ac91527e0e6629.tar.bz2
manaplus-ebecb0cf42f2066943908fa158ac91527e0e6629.tar.xz
manaplus-ebecb0cf42f2066943908fa158ac91527e0e6629.zip
Fix hair colors color if old and new hair using different paletes.
Also fix hair replace logic between hairs with different paletes.
Diffstat (limited to 'src/being.cpp')
-rw-r--r--src/being.cpp69
1 files changed, 62 insertions, 7 deletions
diff --git a/src/being.cpp b/src/being.cpp
index 6eecb9989..ce6ec1a0e 100644
--- a/src/being.cpp
+++ b/src/being.cpp
@@ -241,7 +241,8 @@ Being::Being(const int id, const Type type, const uint16_t subtype,
mShop(false),
mAway(false),
mInactive(false),
- mNumber(100)
+ mNumber(100),
+ mHairColor(0)
{
for (int f = 0; f < 20; f ++)
@@ -1767,6 +1768,37 @@ void Being::setSpriteColor(const unsigned int slot, const std::string &color)
setSprite(slot, mSpriteIDs[slot], color);
}
+void Being::setHairStyle(const unsigned int slot, const int id)
+{
+// dumpSprites();
+ setSprite(slot, id, ItemDB::get(id).getDyeColorsString(mHairColor));
+// dumpSprites();
+}
+
+void Being::setHairColor(const unsigned int slot, const unsigned char color)
+{
+ mHairColor = color;
+ setSprite(slot, mSpriteIDs[slot], ItemDB::get(
+ getSpriteID(slot)).getDyeColorsString(color));
+}
+
+void Being::dumpSprites()
+{
+ std::vector<int>::const_iterator it1 = mSpriteIDs.begin();
+ const std::vector<int>::const_iterator it1_end = mSpriteIDs.end();
+ StringVectCIter it2 = mSpriteColors.begin();
+ const StringVectCIter it2_end = mSpriteColors.end();
+ std::vector<int>::const_iterator it3 = mSpriteColorsIds.begin();
+ const std::vector<int>::const_iterator it3_end = mSpriteColorsIds.end();
+
+ logger->log("sprites");
+ for (; it1 != it1_end && it2 != it2_end && it3 != it3_end;
+ ++ it1, ++ it2, ++ it3)
+ {
+ logger->log("%d,%s,%d", *it1, (*it2).c_str(), *it3);
+ }
+}
+
void Being::load()
{
// Hairstyles are encoded as negative numbers. Count how far negative
@@ -2181,6 +2213,8 @@ void Being::recalcSpritesOrder()
if (mAction == DEAD)
dir = 9;
+ const unsigned int hairSlot = Net::getCharHandler()->hairSprite();
+
for (unsigned slot = 0; slot < sz; slot ++)
{
oldHide[slot] = mSpriteHide[slot];
@@ -2233,9 +2267,19 @@ void Being::recalcSpritesOrder()
mSpriteHide[remSprite] = repIt->second;
if (repIt->second != 1)
{
- setSprite(remSprite, repIt->second,
- mSpriteColors[remSprite],
- 1, false, true);
+ if (remSprite != hairSlot)
+ {
+ setSprite(remSprite, repIt->second,
+ mSpriteColors[remSprite],
+ 1, false, true);
+ }
+ else
+ {
+ setSprite(remSprite, repIt->second,
+ ItemDB::get(repIt->second)
+ .getDyeColorsString(mHairColor),
+ 1, false, true);
+ }
}
}
}
@@ -2254,9 +2298,20 @@ void Being::recalcSpritesOrder()
mSpriteHide[slot2] = repIt->second;
if (repIt->second != 1)
{
- setSprite(slot2, repIt->second,
- mSpriteColors[slot2],
- 1, false, true);
+ if (slot2 != hairSlot)
+ {
+ setSprite(slot2, repIt->second,
+ mSpriteColors[slot2],
+ 1, false, true);
+ }
+ else
+ {
+ setSprite(slot2, repIt->second,
+ ItemDB::get(repIt->second)
+ .getDyeColorsString(
+ mHairColor),
+ 1, false, true);
+ }
}
}
}