From d0571ca16bb4ef11a718cfa78dc29b57080fcc72 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Tue, 5 Jul 2011 03:41:13 +0300 Subject: Add ability to send client states to other clients. Using for this emotes. --- src/being.cpp | 43 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 39 insertions(+), 4 deletions(-) (limited to 'src/being.cpp') diff --git a/src/being.cpp b/src/being.cpp index f26b2c245..acfe9e445 100644 --- a/src/being.cpp +++ b/src/being.cpp @@ -153,6 +153,12 @@ class BeingCacheEntry void setIp(std::string ip) { mIp = ip; } + bool isAdvanced() const + { return mIsAdvanced; } + + void setAdvanced(bool a) + { mIsAdvanced = a; } + protected: int mId; /**< Unique sprite id */ std::string mName; /**< Name of character */ @@ -161,6 +167,7 @@ class BeingCacheEntry unsigned int mPvpRank; int mTime; std::string mIp; + bool mIsAdvanced; }; @@ -218,7 +225,11 @@ Being::Being(int id, Type type, Uint16 subtype, Map *map): mCriticalHit(0), mPvpRank(0), mComment(""), - mGotComment(false) + mGotComment(false), + mAdvanced(false), + mShop(false), + mAway(false), + mInactive(false) { mSpriteRemap = new int[20]; mSpriteHide = new int[20]; @@ -1718,14 +1729,17 @@ void Being::reReadConfig() bool Being::updateFromCache() { BeingCacheEntry *entry = Being::getCacheEntry(getId()); - if (entry && !entry->getName().empty() - && entry->getTime() + 120 < cur_time) + + if (entry && entry->getTime() + 120 >= cur_time) { - setName(entry->getName()); + if (!entry->getName().empty()) + setName(entry->getName()); setPartyName(entry->getPartyName()); setLevel(entry->getLevel()); setPvpRank(entry->getPvpRank()); setIp(entry->getIp()); + + setAdvanced(entry->isAdvanced()); if (mType == PLAYER) updateColors(); return true; @@ -1747,12 +1761,16 @@ void Being::addToCache() beingInfoCache.pop_back(); } } + if (!mLowTraffic) + return; + entry->setName(getName()); entry->setLevel(getLevel()); entry->setPartyName(getPartyName()); entry->setTime(cur_time); entry->setPvpRank(getPvpRank()); entry->setIp(getIp()); + entry->setAdvanced(isAdvanced()); } BeingCacheEntry* Being::getCacheEntry(int id) @@ -2292,6 +2310,23 @@ void Being::saveComment(const std::string &name, resman->saveTextFile(dir, "comment.txt", name + "\n" + comment); } +void Being::setEmote(Uint8 emotion, int emote_time) +{ + if (emotion & FLAG_SPECIAL) + { + mAdvanced = true; + mShop = (emotion & FLAG_SHOP); + mAway = (emotion & FLAG_AWAY); + mInactive = (emotion & FLAG_INACTIVE); +// logger->log("flags: %d", emotion - FLAG_SPECIAL); + } + else + { + mEmotion = emotion; + mEmotionTime = emote_time; + } +} + BeingEquipBackend::BeingEquipBackend(Being *being): mBeing(being) { -- cgit v1.2.3-60-g2f50