diff options
author | Andrei Karas <akaras@inbox.ru> | 2012-03-14 03:56:02 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2012-03-14 04:06:13 +0300 |
commit | 112d2ad1904051160822d1845d1418cca889c0d5 (patch) | |
tree | 9731934d9dc367f931c028158f3d26a670e18feb /src/net | |
parent | 02e9a62ce9a0f288804bfa2aa59c3a84b0376c4a (diff) | |
download | mv-112d2ad1904051160822d1845d1418cca889c0d5.tar.gz mv-112d2ad1904051160822d1845d1418cca889c0d5.tar.bz2 mv-112d2ad1904051160822d1845d1418cca889c0d5.tar.xz mv-112d2ad1904051160822d1845d1418cca889c0d5.zip |
Add support for other gender.
Fix per gender and race items separation.
Diffstat (limited to 'src/net')
-rw-r--r-- | src/net/ea/beinghandler.cpp | 8 | ||||
-rw-r--r-- | src/net/ea/guildhandler.cpp | 8 | ||||
-rw-r--r-- | src/net/ea/loginhandler.cpp | 18 | ||||
-rw-r--r-- | src/net/tmwa/beinghandler.cpp | 3 | ||||
-rw-r--r-- | src/net/tmwa/charserverhandler.cpp | 2 | ||||
-rw-r--r-- | src/net/tmwa/gamehandler.cpp | 2 | ||||
-rw-r--r-- | src/net/tmwa/playerhandler.cpp | 4 |
7 files changed, 28 insertions, 17 deletions
diff --git a/src/net/ea/beinghandler.cpp b/src/net/ea/beinghandler.cpp index f1d608717..f669163be 100644 --- a/src/net/ea/beinghandler.cpp +++ b/src/net/ea/beinghandler.cpp @@ -259,8 +259,8 @@ void BeingHandler::processBeingVisibleOrMove(Net::MessageIn &msg, bool visible) if (dstBeing->getType() == ActorSprite::PLAYER) { - gender &= 1; - dstBeing->setGender((gender == 0) ? GENDER_FEMALE : GENDER_MALE); + gender &= 3; + dstBeing->setGender(Being::intToGender(gender)); // Set these after the gender, as the sprites may be gender-specific setSprite(dstBeing, EA_SPRITE_HAIR, hairStyle * -1, ColorDB::getHairColor(hairColor)); @@ -283,13 +283,15 @@ void BeingHandler::processBeingVisibleOrMove(Net::MessageIn &msg, bool visible) case 3: dstBeing->setGender(GENDER_MALE); break; + case 4: + dstBeing->setGender(GENDER_OTHER); + break; default: dstBeing->setGender(GENDER_UNSPECIFIED); break; } } - if (!visible) { Uint16 srcX, srcY, dstX, dstY; diff --git a/src/net/ea/guildhandler.cpp b/src/net/ea/guildhandler.cpp index 96a361838..950f26b03 100644 --- a/src/net/ea/guildhandler.cpp +++ b/src/net/ea/guildhandler.cpp @@ -251,13 +251,7 @@ void GuildHandler::processGuildMemberList(Net::MessageIn &msg) m->setOnline(online); m->setID(id); m->setCharId(charId); - if (!gender) - m->setGender(GENDER_FEMALE); - else if (gender == 1) - m->setGender(GENDER_MALE); - else - m->setGender(GENDER_UNSPECIFIED); - + m->setGender(Being::intToGender(gender)); m->setLevel(level); m->setExp(exp); m->setPos(pos); diff --git a/src/net/ea/loginhandler.cpp b/src/net/ea/loginhandler.cpp index 560893a4f..d35e5a0d5 100644 --- a/src/net/ea/loginhandler.cpp +++ b/src/net/ea/loginhandler.cpp @@ -97,7 +97,21 @@ void LoginHandler::registerAccount(LoginData *loginData) return; std::string username = loginData->username; - username.append((loginData->gender == GENDER_FEMALE) ? "_F" : "_M"); + switch (loginData->gender) + { + case GENDER_FEMALE: + username.append("_F"); + break; + case GENDER_MALE: + username.append("_M"); + break; + case GENDER_OTHER: + username.append("_O"); + break; + case GENDER_UNSPECIFIED: + default: + break; + } sendLoginRegister(username, loginData->password); } @@ -181,7 +195,7 @@ void LoginHandler::processLoginData(Net::MessageIn &msg) // msg.skip(30); // unknown // reserve bits for future usage - mToken.sex = (msg.readInt8() & 1) ? GENDER_MALE : GENDER_FEMALE; + mToken.sex = Being::intToGender(msg.readInt8() & 3); for (int i = 0; i < worldCount; i++) { diff --git a/src/net/tmwa/beinghandler.cpp b/src/net/tmwa/beinghandler.cpp index 8d279fc32..5eb02d299 100644 --- a/src/net/tmwa/beinghandler.cpp +++ b/src/net/tmwa/beinghandler.cpp @@ -515,8 +515,7 @@ void BeingHandler::processPlayerMoveUpdate(Net::MessageIn &msg, int msgType) dstBeing->setStatusEffectBlock(32, msg.readInt16()); // opt3 msg.readInt8(); // karma // reserving bit for future usage - dstBeing->setGender(((msg.readInt8() & 1) == 0) - ? GENDER_FEMALE : GENDER_MALE); + dstBeing->setGender(Being::intToGender(msg.readInt8() & 3)); // Set these after the gender, as the sprites may be gender-specific dstBeing->setSprite(SPRITE_WEAPON, weapon, "", 1, true); diff --git a/src/net/tmwa/charserverhandler.cpp b/src/net/tmwa/charserverhandler.cpp index 1bee91144..6202070bb 100644 --- a/src/net/tmwa/charserverhandler.cpp +++ b/src/net/tmwa/charserverhandler.cpp @@ -333,7 +333,7 @@ void CharServerHandler::connect() outMsg.writeInt16(CLIENT_PROTOCOL_VERSION); else outMsg.writeInt16(CLIENT_TMW_PROTOCOL_VERSION); - outMsg.writeInt8((token.sex == GENDER_MALE) ? 1 : 0); + outMsg.writeInt8(Being::genderToInt(token.sex)); // We get 4 useless bytes before the real answer comes in (what are these?) mNetwork->skip(4); diff --git a/src/net/tmwa/gamehandler.cpp b/src/net/tmwa/gamehandler.cpp index 5acf9ae6c..2496898d1 100644 --- a/src/net/tmwa/gamehandler.cpp +++ b/src/net/tmwa/gamehandler.cpp @@ -125,7 +125,7 @@ void GameHandler::connect() outMsg.writeInt32(mCharID); outMsg.writeInt32(token.session_ID1); outMsg.writeInt32(token.session_ID2); - outMsg.writeInt8((token.sex == GENDER_MALE) ? 1 : 0); + outMsg.writeInt8(Being::genderToInt(token.sex)); /* if (player_node) diff --git a/src/net/tmwa/playerhandler.cpp b/src/net/tmwa/playerhandler.cpp index a63af770a..eb9dac6f0 100644 --- a/src/net/tmwa/playerhandler.cpp +++ b/src/net/tmwa/playerhandler.cpp @@ -259,8 +259,10 @@ void PlayerHandler::processOnlineList(Net::MessageIn &msg) { if (config.getBoolValue("showgender")) { - if (status & Being::FLAG_GENDER) + if (status & Being::FLAG_GENDER_MALE) gender = GENDER_MALE; + else if (status & Being::FLAG_GENDER_OTHER) + gender = GENDER_OTHER; else gender = GENDER_FEMALE; } |