diff options
author | Jared Adams <jaxad0127@gmail.com> | 2009-08-14 12:21:07 -0600 |
---|---|---|
committer | Jared Adams <jaxad0127@gmail.com> | 2009-08-14 12:26:38 -0600 |
commit | 9d1fbb5a538b3c5a1ba7d5ab55f39033ddb880f1 (patch) | |
tree | 88ac95203280fbe994273ede7ec10b1acfbb9b4b | |
parent | afc879b5ca185cfd93e604942aac45e76dc3c322 (diff) | |
download | mana-9d1fbb5a538b3c5a1ba7d5ab55f39033ddb880f1.tar.gz mana-9d1fbb5a538b3c5a1ba7d5ab55f39033ddb880f1.tar.bz2 mana-9d1fbb5a538b3c5a1ba7d5ab55f39033ddb880f1.tar.xz mana-9d1fbb5a538b3c5a1ba7d5ab55f39033ddb880f1.zip |
Add functions to more easily work with equipment
Move hair changes back over to them; related server change was reverted.
Also move NPCs back over to extending Player. NPCs will have equipment
in the future too, but for now, disable that part while we finish the
system.
-rw-r--r-- | src/net/ea/beinghandler.cpp | 5 | ||||
-rw-r--r-- | src/npc.cpp | 9 | ||||
-rw-r--r-- | src/npc.h | 8 | ||||
-rw-r--r-- | src/player.cpp | 41 | ||||
-rw-r--r-- | src/player.h | 10 |
5 files changed, 53 insertions, 20 deletions
diff --git a/src/net/ea/beinghandler.cpp b/src/net/ea/beinghandler.cpp index 96c5986b..29c10900 100644 --- a/src/net/ea/beinghandler.cpp +++ b/src/net/ea/beinghandler.cpp @@ -397,8 +397,7 @@ void BeingHandler::handleMessage(MessageIn &msg) switch (type) { case 1: // eAthena LOOK_HAIR - player->setSprite(Player::HAIR_SPRITE, id * -1, - ColorDB::get(id2)); + player->setSpriteID(Player::HAIR_SPRITE, id *-1); break; case 2: // Weapon ID in id, Shield ID in id2 player->setSprite(Player::WEAPON_SPRITE, id); @@ -414,7 +413,7 @@ void BeingHandler::handleMessage(MessageIn &msg) player->setSprite(Player::TOPCLOTHES_SPRITE, id); break; case 6: // eAthena LOOK_HAIR_COLOR - // ignored (duplicate of LOOK_HAIR) + player->setSpriteColor(Player::HAIR_SPRITE, ColorDB::get(id)); break; case 8: // eAthena LOOK_SHIELD player->setSprite(Player::SHIELD_SPRITE, id); diff --git a/src/npc.cpp b/src/npc.cpp index dbae24e4..882f1b42 100644 --- a/src/npc.cpp +++ b/src/npc.cpp @@ -36,7 +36,7 @@ bool NPC::isTalking = false; int current_npc = 0; NPC::NPC(int id, int job, Map *map): - Being(id, job, map) + Player(id, job, map, true) { NPCInfo info = NPCDB::get(job); @@ -48,6 +48,8 @@ NPC::NPC(int id, int job, Map *map): std::string file = "graphics/sprites/" + (*i)->sprite; int variant = (*i)->variant; mSprites.push_back(AnimatedSprite::load(file, variant)); + mSpriteIDs.push_back(0); + mSpriteColors.push_back(""); } if (mParticleEffects) @@ -81,3 +83,8 @@ void NPC::talk() Net::getNpcHandler()->talk(mId); } + +void NPC::setSprite(unsigned int slot, int id, const std::string &color) +{ + // Do nothing +} @@ -27,7 +27,7 @@ class Graphics; class Text; -class NPC : public Being +class NPC : public Player { public: NPC(int id, int job, Map *map); @@ -38,6 +38,9 @@ class NPC : public Being void talk(); + void setSprite(unsigned int slot, int id, + const std::string &color = ""); + /** * Gets the way an NPC is blocked by other things on the map */ @@ -56,6 +59,9 @@ class NPC : public Being */ virtual Map::BlockType getBlockType() const { return Map::BLOCKTYPE_CHARACTER; } //blocks like a player character + + // Colors don't change for NPCs + virtual void updateColors() {} }; extern int current_npc; diff --git a/src/player.cpp b/src/player.cpp index 55888654..288c565d 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -38,16 +38,27 @@ #include "utils/stringutils.h" -Player::Player(int id, int job, Map *map): +Player::Player(int id, int job, Map *map, bool isNPC): Being(id, job, map), mGender(GENDER_UNSPECIFIED), - mSpriteIDs(VECTOREND_SPRITE, 0), - mSpriteColors(VECTOREND_SPRITE, ""), mIsGM(false), mInParty(false) { - for (int i = 0; i < VECTOREND_SPRITE; i++) - mSprites.push_back(NULL); + if (!isNPC) + { + for (int i = 0; i < VECTOREND_SPRITE; i++) + { + mSprites.push_back(NULL); + mSpriteIDs.push_back(0); + mSpriteColors.push_back(""); + } + + /* Human base sprite. When implementing different races remove this + * line and set the base sprite when setting the race of the player + * character. + */ + setSprite(BASE_SPRITE, -100); + } mShowName = config.getValue("visiblenames", 1); config.addListener("visiblenames", this); @@ -125,14 +136,8 @@ void Player::setGender(Gender gender) { mGender = gender; - /* Human base sprite. When implementing different races remove this - * line and set the base sprite when setting the race of the player - * character. - */ - setSprite(BASE_SPRITE, -100); - // Reload all subsprites - for (unsigned int i = 1; i < mSprites.size(); i++) + for (unsigned int i = 0; i < mSprites.size(); i++) { if (mSpriteIDs.at(i) != 0) setSprite(i, mSpriteIDs.at(i), mSpriteColors.at(i)); @@ -147,7 +152,7 @@ void Player::setGM(bool gm) updateColors(); } -void Player::setSprite(int slot, int id, const std::string &color) +void Player::setSprite(unsigned int slot, int id, const std::string &color) { assert(slot >= BASE_SPRITE && slot < VECTOREND_SPRITE); @@ -193,6 +198,16 @@ void Player::setSprite(int slot, int id, const std::string &color) mSpriteColors[slot] = color; } +void Player::setSpriteID(unsigned int slot, int id) +{ + setSprite(slot, id, mSpriteColors[slot]); +} + +void Player::setSpriteColor(unsigned int slot, const std::string &color) +{ + setSprite(slot, mSpriteIDs[slot], color); +} + #ifdef TMWSERV_SUPPORT Guild* Player::addGuild(short guildId, short rights) { diff --git a/src/player.h b/src/player.h index 36f0266e..3c4cc258 100644 --- a/src/player.h +++ b/src/player.h @@ -71,7 +71,7 @@ class Player : public Being /** * Constructor. */ - Player(int id, int job, Map *map); + Player(int id, int job, Map *map, bool isNPC = false); ~Player(); @@ -101,7 +101,13 @@ class Player : public Being /** * Sets visible equipments for this player. */ - virtual void setSprite(int slot, int id, const std::string &color = ""); + virtual void setSprite(unsigned int slot, int id, + const std::string &color = ""); + + virtual void setSpriteID(unsigned int slot, int id); + + virtual void setSpriteColor(unsigned int slot, + const std::string &color = ""); #ifdef TMWSERV_SUPPORT /** |