diff options
author | Yohann Ferreira <yohann_dot_ferreira_at_orange_dot_efer> | 2012-01-18 19:20:34 +0100 |
---|---|---|
committer | Yohann Ferreira <yohann_dot_ferreira_at_orange_dot_efer> | 2012-02-02 15:31:41 +0100 |
commit | f5de9ae444f1bca1f6ba6969214e9a8cacb15f68 (patch) | |
tree | f9b9c699c52d279cdc4d93b09f48dd3b24403f5b /src/net | |
parent | 7cc504d993fa948ae2e10848993f4552b2d6daaa (diff) | |
download | mana-client-f5de9ae444f1bca1f6ba6969214e9a8cacb15f68.tar.gz mana-client-f5de9ae444f1bca1f6ba6969214e9a8cacb15f68.tar.bz2 mana-client-f5de9ae444f1bca1f6ba6969214e9a8cacb15f68.tar.xz mana-client-f5de9ae444f1bca1f6ba6969214e9a8cacb15f68.zip |
Fix to the hair colors and styles handling.
- I made the charCreatedialog handle a possible
max permitted color Id and a minimum hair style id for tA.
- Added a foundation to later load the styles and colors from
the same file, to handle the Mana-issue #224 for manaserv.
- Support for non-contiguous hair color and style ids
has also been added.
- I also replaced the < and > arrow signs with images.
Reviewed-by: Ben Longbons, Thorbjørn Lindeijer
Diffstat (limited to 'src/net')
-rw-r--r-- | src/net/charhandler.h | 12 | ||||
-rw-r--r-- | src/net/manaserv/beinghandler.cpp | 6 | ||||
-rw-r--r-- | src/net/manaserv/charhandler.cpp | 2 | ||||
-rw-r--r-- | src/net/manaserv/charhandler.h | 8 | ||||
-rw-r--r-- | src/net/tmwa/beinghandler.cpp | 9 | ||||
-rw-r--r-- | src/net/tmwa/charserverhandler.cpp | 3 | ||||
-rw-r--r-- | src/net/tmwa/charserverhandler.h | 10 |
7 files changed, 43 insertions, 7 deletions
diff --git a/src/net/charhandler.h b/src/net/charhandler.h index 60c332f9..1835ceb9 100644 --- a/src/net/charhandler.h +++ b/src/net/charhandler.h @@ -83,6 +83,18 @@ class CharHandler virtual unsigned int maxSprite() const = 0; + /** + * Returns the max permitted hair color Id at character creation time, + * or 0 if no limit should be applied. + */ + virtual int getCharCreateMaxHairColorId() const = 0; + + /** + * Returns the max permitted hair style Id at character creation time, + * or 0 if no limit should be applied. + */ + virtual int getCharCreateMaxHairStyleId() const = 0; + protected: CharHandler(): mSelectedCharacter(0), diff --git a/src/net/manaserv/beinghandler.cpp b/src/net/manaserv/beinghandler.cpp index be4daa49..fb3a3644 100644 --- a/src/net/manaserv/beinghandler.cpp +++ b/src/net/manaserv/beinghandler.cpp @@ -144,7 +144,8 @@ void BeingHandler::handleBeingEnterMessage(Net::MessageIn &msg) being->setName(name); } int hs = msg.readInt8(), hc = msg.readInt8(); - being->setSprite(SPRITE_LAYER_HAIR, hs * -1, HairDB::get(hc)); + being->setSprite(SPRITE_LAYER_HAIR, hs * -1, + hairDB.getHairColor(hc)); being->setGender(msg.readInt8() == ManaServ::GENDER_MALE ? ::GENDER_MALE : ::GENDER_FEMALE); handleLooks(being, msg); @@ -334,7 +335,8 @@ void BeingHandler::handleBeingLooksChangeMessage(Net::MessageIn &msg) { int style = msg.readInt16(); int color = msg.readInt16(); - being->setSprite(SPRITE_LAYER_HAIR, style * -1, HairDB::get(color)); + being->setSprite(SPRITE_LAYER_HAIR, style * -1, + hairDB.getHairColor(color)); } } diff --git a/src/net/manaserv/charhandler.cpp b/src/net/manaserv/charhandler.cpp index 4c4c9475..c05e9320 100644 --- a/src/net/manaserv/charhandler.cpp +++ b/src/net/manaserv/charhandler.cpp @@ -392,7 +392,7 @@ void CharHandler::updateCharacters() player->setName(info.name); player->setGender(info.gender); player->setSprite(SPRITE_LAYER_HAIR, info.hairStyle * -1, - HairDB::get(info.hairColor)); + hairDB.getHairColor(info.hairColor)); character->data.mAttributes[LEVEL] = info.level; character->data.mAttributes[CHAR_POINTS] = info.characterPoints; character->data.mAttributes[CORR_POINTS] = info.correctionPoints; diff --git a/src/net/manaserv/charhandler.h b/src/net/manaserv/charhandler.h index fef9627b..e3098c09 100644 --- a/src/net/manaserv/charhandler.h +++ b/src/net/manaserv/charhandler.h @@ -73,6 +73,14 @@ class CharHandler : public MessageHandler, public Net::CharHandler unsigned int maxSprite() const; + // No limitation on Manaserv + int getCharCreateMaxHairColorId() const + { return 0; } + + // No limitation on Manaserv + int getCharCreateMaxHairStyleId() const + { return 0; } + void clear(); private: diff --git a/src/net/tmwa/beinghandler.cpp b/src/net/tmwa/beinghandler.cpp index bcfb335f..c94e08df 100644 --- a/src/net/tmwa/beinghandler.cpp +++ b/src/net/tmwa/beinghandler.cpp @@ -245,7 +245,8 @@ void BeingHandler::handleMessage(Net::MessageIn &msg) dstBeing->setGender((gender == 0) ? GENDER_FEMALE : GENDER_MALE); // Set these after the gender, as the sprites may be gender-specific - dstBeing->setSprite(SPRITE_HAIR, hairStyle * -1, HairDB::get(hairColor)); + dstBeing->setSprite(SPRITE_HAIR, hairStyle * -1, + hairDB.getHairColor(hairColor)); dstBeing->setSprite(SPRITE_BOTTOMCLOTHES, headBottom); dstBeing->setSprite(SPRITE_TOPCLOTHES, headMid); dstBeing->setSprite(SPRITE_HAT, headTop); @@ -486,7 +487,8 @@ void BeingHandler::handleMessage(Net::MessageIn &msg) dstBeing->setSprite(SPRITE_TOPCLOTHES, id); break; case 6: // eAthena LOOK_HAIR_COLOR - dstBeing->setSpriteColor(SPRITE_HAIR, HairDB::get(id)); + dstBeing->setSpriteColor(SPRITE_HAIR, + hairDB.getHairColor(id)); break; case 8: // eAthena LOOK_SHIELD dstBeing->setSprite(SPRITE_SHIELD, id); @@ -613,7 +615,8 @@ void BeingHandler::handleMessage(Net::MessageIn &msg) //dstBeing->setSprite(SPRITE_CAPE, cape); //dstBeing->setSprite(SPRITE_MISC1, misc1); //dstBeing->setSprite(SPRITE_MISC2, misc2); - dstBeing->setSprite(SPRITE_HAIR, hairStyle * -1, HairDB::get(hairColor)); + dstBeing->setSprite(SPRITE_HAIR, hairStyle * -1, + hairDB.getHairColor(hairColor)); if (msg.getId() == SMSG_PLAYER_MOVE) { diff --git a/src/net/tmwa/charserverhandler.cpp b/src/net/tmwa/charserverhandler.cpp index d794f2cf..8834798f 100644 --- a/src/net/tmwa/charserverhandler.cpp +++ b/src/net/tmwa/charserverhandler.cpp @@ -240,7 +240,8 @@ void CharServerHandler::readPlayerData(Net::MessageIn &msg, Net::Character *char tempPlayer->setSprite(SPRITE_SHIELD, msg.readInt16()); tempPlayer->setSprite(SPRITE_HAT, msg.readInt16()); // head option top tempPlayer->setSprite(SPRITE_TOPCLOTHES, msg.readInt16()); // head option mid - tempPlayer->setSprite(SPRITE_HAIR, hairStyle * -1, HairDB::get(msg.readInt16())); + tempPlayer->setSprite(SPRITE_HAIR, hairStyle * -1, + hairDB.getHairColor(msg.readInt16())); tempPlayer->setSprite(SPRITE_MISC2, msg.readInt16()); tempPlayer->setName(msg.readString(24)); diff --git a/src/net/tmwa/charserverhandler.h b/src/net/tmwa/charserverhandler.h index 7a7b6a67..31b2ba8e 100644 --- a/src/net/tmwa/charserverhandler.h +++ b/src/net/tmwa/charserverhandler.h @@ -69,6 +69,16 @@ class CharServerHandler : public MessageHandler, public Net::CharHandler unsigned int maxSprite() const; + // Must be < 12 at character creation time, but can be higher + // after that. + int getCharCreateMaxHairColorId() const + { return 11; } + + // Must be < 20 at character creation time, but can be higher + // after that. + int getCharCreateMaxHairStyleId() const + { return 19; } + void connect(); private: |