diff options
author | Yohann Ferreira <yohann_dot_ferreira_at_orange_dot_efer> | 2010-12-28 22:04:41 +0100 |
---|---|---|
committer | Yohann Ferreira <yohann_dot_ferreira_at_orange_dot_efer> | 2010-12-28 22:24:44 +0100 |
commit | 780bcbc2ea75603f2eef7369a6f7b5ddfc5888b5 (patch) | |
tree | 9fe66ca3a9b3c65d3da9490411c4a621dc9046e2 /src/localplayer.cpp | |
parent | 6385f680fd3e42bd9137f9184e702dd36d20322f (diff) | |
download | mana-780bcbc2ea75603f2eef7369a6f7b5ddfc5888b5.tar.gz mana-780bcbc2ea75603f2eef7369a6f7b5ddfc5888b5.tar.bz2 mana-780bcbc2ea75603f2eef7369a6f7b5ddfc5888b5.tar.xz mana-780bcbc2ea75603f2eef7369a6f7b5ddfc5888b5.zip |
Revert "Remove the AFK response system"
This reverts commit 3d6a2d9c80a969c3613f567dd7029e75ef59b5cb.
I've by that readded the AFK system on master. Please, remove it
when we've got a proper replacement.
Diffstat (limited to 'src/localplayer.cpp')
-rw-r--r-- | src/localplayer.cpp | 64 |
1 files changed, 63 insertions, 1 deletions
diff --git a/src/localplayer.cpp b/src/localplayer.cpp index 17641ed4..a4560030 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -80,10 +80,15 @@ LocalPlayer::LocalPlayer(int id, int subtype): mPathSetByMouse(false), mLocalWalkTime(-1), mMessageTime(0), - mShowIp(false) + mShowIp(false), + mAwayDialog(0), + mAfkTime(0), + mAwayMode(false) { listen(CHANNEL_ATTRIBUTES); + mAwayListener = new AwayListener(); + mUpdateName = true; setShowName(config.getValue("showownname", 1)); @@ -94,6 +99,8 @@ LocalPlayer::LocalPlayer(int id, int subtype): LocalPlayer::~LocalPlayer() { + delete mAwayDialog; + delete mAwayListener; } void LocalPlayer::logic() @@ -1110,3 +1117,58 @@ void LocalPlayer::event(Channels channel, const Mana::Event &event) Being::event(channel, event); } + +void LocalPlayer::changeAwayMode() +{ + mAwayMode = !mAwayMode; + mAfkTime = 0; + if (mAwayMode) + { + mAwayDialog = new OkDialog(_("Away"), + config.getValue("afkMessage", "I am away from keyboard")); + mAwayDialog->addActionListener(mAwayListener); + } + + mAwayDialog = 0; +} + +void LocalPlayer::setAway(const std::string &message) +{ + if (!message.empty()) + config.setValue("afkMessage", message); + changeAwayMode(); +} + +void LocalPlayer::afkRespond(ChatTab *tab, const std::string &nick) +{ + if (mAwayMode) + { + if (mAfkTime == 0 + || cur_time < mAfkTime + || cur_time - mAfkTime > AWAY_LIMIT_TIMER) + { + std::string msg = "*AFK*: " + + config.getValue("afkMessage", "I am away from keyboard"); + + Net::getChatHandler()->privateMessage(nick, msg); + if (!tab) + { + localChatTab->chatLog(getName() + " : " + msg, + ACT_WHISPER, false); + } + else + { + tab->chatLog(getName(), msg); + } + mAfkTime = cur_time; + } + } +} + +void AwayListener::action(const gcn::ActionEvent &event) +{ + if (event.getId() == "ok" && player_node->getAwayMode()) + { + player_node->changeAwayMode(); + } +} |