summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Athay <ko2fan@gmail.com>2008-04-28 17:21:22 +0000
committerDavid Athay <ko2fan@gmail.com>2008-04-28 17:21:22 +0000
commit5bbb89e2dbcafb80f33030ba2ffef6d2515b9209 (patch)
treebc0660c85891a0fae0acc7dea80547962f39ff1a
parenta6731dd30a4ab7b2b19af18295293c13895b664d (diff)
downloadmana-5bbb89e2dbcafb80f33030ba2ffef6d2515b9209.tar.gz
mana-5bbb89e2dbcafb80f33030ba2ffef6d2515b9209.tar.bz2
mana-5bbb89e2dbcafb80f33030ba2ffef6d2515b9209.tar.xz
mana-5bbb89e2dbcafb80f33030ba2ffef6d2515b9209.zip
Added party invite dialog
-rw-r--r--ChangeLog6
-rw-r--r--src/gui/partywindow.cpp81
-rw-r--r--src/gui/partywindow.h33
-rw-r--r--src/net/chatserver/party.cpp8
-rw-r--r--src/net/partyhandler.cpp5
-rw-r--r--src/net/protocol.h2
-rw-r--r--tmw.cbp2
7 files changed, 114 insertions, 23 deletions
diff --git a/ChangeLog b/ChangeLog
index 7087b4ad..504938d7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2008-04-28 David Athay <ko2fan@gmail.com>
+
+ * src/gui/partywindow.h, src/gui/partywindow.cpp,
+ src/net/partyhandler.cpp, src/net/protocol.h,
+ src/net/chatserver/party.cpp, tmw.cbp: Added party invite dialog.
+
2008-04-26 Yohann Ferreira <bertram@cegetel.net>
* src/CMakeLists.txt, src/Makefile.am, src/gui/char_select.h,
diff --git a/src/gui/partywindow.cpp b/src/gui/partywindow.cpp
index db066910..5ec1e6bf 100644
--- a/src/gui/partywindow.cpp
+++ b/src/gui/partywindow.cpp
@@ -22,43 +22,71 @@
*/
#include "partywindow.h"
+#include "chat.h"
#include "../utils/gettext.h"
+#include "../net/chatserver/party.h"
PartyWindow::PartyWindow() : Window(_("Party"))
{
setVisible(false);
}
+PartyWindow::~PartyWindow()
+{
+ PartyList::iterator itr = mPartyMembers.begin(),
+ itr_end = mPartyMembers.end();
+
+ while (itr != itr_end)
+ {
+ delete (*itr);
+ }
+
+ mPartyMembers.clear();
+}
+
void PartyWindow::draw(gcn::Graphics *graphics)
{
}
-void PartyWindow::addPartyMember(Player *player)
+void PartyWindow::addPartyMember(const std::string &memberName)
{
- PartyList::iterator itr = std::find(mPartyMembers.begin(),
- mPartyMembers.end(),
- player);
- if (itr == mPartyMembers.end())
+ PartyMember *player = new PartyMember;
+ PartyList::iterator itr = mPartyMembers.begin(),
+ itr_end = mPartyMembers.end();
+
+ while (itr != itr_end)
{
- mPartyMembers.push_back(player);
+ if ((*itr)->name == memberName)
+ {
+ return;
+ }
+ ++itr;
}
+ player->name = memberName;
+ mPartyMembers.push_back(player);
+
if (mPartyMembers.size() > 1)
{
setVisible(true);
}
}
-void PartyWindow::removePartyMember(Player *player)
+void PartyWindow::removePartyMember(const std::string &memberName)
{
- PartyList::iterator itr = std::find(mPartyMembers.begin(),
- mPartyMembers.end(),
- player);
- if (itr != mPartyMembers.end())
+ PartyList::iterator itr = mPartyMembers.begin(),
+ itr_end = mPartyMembers.end();
+
+ while (itr != itr_end)
{
- mPartyMembers.erase(itr);
+ if ((*itr)->name == memberName)
+ {
+ mPartyMembers.erase(itr);
+ break;
+ }
+ ++itr;
}
if (mPartyMembers.size() < 1)
@@ -69,5 +97,34 @@ void PartyWindow::removePartyMember(Player *player)
void PartyWindow::showPartyInvite(const std::string &inviter)
{
+ if (mPartyInviter != "")
+ {
+ chatWindow->chatLog("Received party request, but one already exists",
+ BY_SERVER);
+ return;
+ }
+ std::string msg = inviter + " has invited you to join their party";
+ chatWindow->chatLog(msg, BY_SERVER);
+
+ acceptDialog = new ConfirmDialog("Accept Party Invite", msg, this);
+ acceptDialog->addActionListener(this);
+
+ mPartyInviter = inviter;
+}
+
+void PartyWindow::action(const gcn::ActionEvent &event)
+{
+ const std::string &eventId = event.getId();
+ if (eventId == "yes")
+ {
+ Net::ChatServer::Party::acceptInvite(mPartyInviter);
+ mPartyInviter = "";
+ delete acceptDialog;
+ }
+ else if (eventId == "no")
+ {
+ mPartyInviter = "";
+ delete acceptDialog;
+ }
}
diff --git a/src/gui/partywindow.h b/src/gui/partywindow.h
index b74b1411..fe126c2e 100644
--- a/src/gui/partywindow.h
+++ b/src/gui/partywindow.h
@@ -25,18 +25,29 @@
#define _TMW_PARTYWINDOW_H
#include "window.h"
+#include "confirm_dialog.h"
#include <string>
#include <vector>
-class Player;
+#include <guichan/actionevent.hpp>
+#include <guichan/actionlistener.hpp>
+
+/**
+ * Party Member
+ * Used for storing players in the party
+ */
+struct PartyMember
+{
+ std::string name;
+};
/**
* Party Window.
*
* \ingroup Interface
*/
-class PartyWindow : public Window
+class PartyWindow : public Window, gcn::ActionListener
{
public:
/**
@@ -45,6 +56,11 @@ class PartyWindow : public Window
PartyWindow();
/**
+ * Release all the players created
+ */
+ ~PartyWindow();
+
+ /**
* Draws the party window
*/
void draw(gcn::Graphics *graphics);
@@ -52,21 +68,28 @@ class PartyWindow : public Window
/**
* Add party member
*/
- void addPartyMember(Player *player);
+ void addPartyMember(const std::string &memberName);
/**
* Remove party member
*/
- void removePartyMember(Player *player);
+ void removePartyMember(const std::string &memberName);
/**
* Show party invite
*/
void showPartyInvite(const std::string &inviter);
+ /**
+ * Handle events
+ */
+ void action(const gcn::ActionEvent &event);
+
private:
- typedef std::vector<Player*> PartyList;
+ typedef std::vector<PartyMember*> PartyList;
PartyList mPartyMembers;
+ std::string mPartyInviter;
+ ConfirmDialog *acceptDialog;
};
extern PartyWindow *partyWindow;
diff --git a/src/net/chatserver/party.cpp b/src/net/chatserver/party.cpp
index 63e2ddf9..ff465924 100644
--- a/src/net/chatserver/party.cpp
+++ b/src/net/chatserver/party.cpp
@@ -44,12 +44,12 @@ void Net::ChatServer::Party::invitePlayer(const std::string &name)
void Net::ChatServer::Party::acceptInvite(const std::string &name)
{
- logger->log("Sending PCMSG_PARTY_ACCEPT");
-// MessageOut msg(PCMSG_GUILD_ACCEPT);
+ logger->log("Sending PCMSG_PARTY_ACCEPT_INVITE");
+ MessageOut msg(PCMSG_PARTY_ACCEPT_INVITE);
-// msg.writeString(name);
+ msg.writeString(name);
-// Net::ChatServer::connection->send(msg);
+ Net::ChatServer::connection->send(msg);
}
void Net::ChatServer::Party::getPartyMembers()
diff --git a/src/net/partyhandler.cpp b/src/net/partyhandler.cpp
index dd169b8d..f3a2e2f5 100644
--- a/src/net/partyhandler.cpp
+++ b/src/net/partyhandler.cpp
@@ -30,6 +30,7 @@
#include "chatserver/chatserver.h"
#include "../gui/chat.h"
+#include "../gui/partywindow.h"
#include "../log.h"
#include "../localplayer.h"
@@ -56,13 +57,15 @@ void PartyHandler::handleMessage(MessageIn &msg)
{
if (!player_node->getInParty())
player_node->setInParty(true);
+ std::string memberName = msg.readString();
+ partyWindow->addPartyMember(memberName);
}
} break;
case CPMSG_PARTY_INVITED:
{
- //TODO: Show dialog to player asking to join party
std::string inviter = msg.readString();
+ partyWindow->showPartyInvite(inviter);
} break;
case CPMSG_PARTY_ACCEPT_INVITE_RESPONSE:
diff --git a/src/net/protocol.h b/src/net/protocol.h
index 201bf717..d2d5937d 100644
--- a/src/net/protocol.h
+++ b/src/net/protocol.h
@@ -147,7 +147,7 @@ enum {
// Party
PCMSG_PARTY_INVITE = 0x03A0, // S name
- CPMSG_PARTY_INVITE_RESPONSE = 0x03A1, // B error
+ CPMSG_PARTY_INVITE_RESPONSE = 0x03A1, // B error, S name
CPMSG_PARTY_INVITED = 0x03A2, // S name
PCMSG_PARTY_ACCEPT_INVITE = 0x03A5, // S name
CPMSG_PARTY_ACCEPT_INVITE_RESPONSE = 0x03A6, // B error
diff --git a/tmw.cbp b/tmw.cbp
index f34f8260..d1e88a99 100644
--- a/tmw.cbp
+++ b/tmw.cbp
@@ -148,6 +148,8 @@
<Unit filename="src/gui/buysell.h">
<Option target="default" />
</Unit>
+ <Unit filename="src/gui/changeemaildialog.cpp" />
+ <Unit filename="src/gui/changeemaildialog.h" />
<Unit filename="src/gui/changepassworddialog.cpp" />
<Unit filename="src/gui/changepassworddialog.h" />
<Unit filename="src/gui/char_select.cpp" />