summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/commandhandler.cpp11
-rw-r--r--src/localplayer.cpp2
-rw-r--r--src/net/beinghandler.cpp10
-rw-r--r--src/net/beinghandler.h1
-rw-r--r--src/net/gameserver/player.cpp22
-rw-r--r--src/net/gameserver/player.h3
-rw-r--r--src/net/protocol.h8
7 files changed, 56 insertions, 1 deletions
diff --git a/src/commandhandler.cpp b/src/commandhandler.cpp
index 7ec48f46..58b8905d 100644
--- a/src/commandhandler.cpp
+++ b/src/commandhandler.cpp
@@ -93,6 +93,17 @@ void CommandHandler::handleCommand(const std::string &command)
{
handleOp(args);
}
+ else if (type == "post")
+ {
+ std::string::size_type pos = args.find(' ');
+ std::string recipient(args, 0, pos);
+ std::string text(args, pos+1);
+ Net::GameServer::Player::sendLetter(recipient, text);
+ }
+ else if (type == "check")
+ {
+ Net::GameServer::Player::getLetters();
+ }
else
{
chatWindow->chatLog("Unknown command");
diff --git a/src/localplayer.cpp b/src/localplayer.cpp
index f596a8d9..d272caaf 100644
--- a/src/localplayer.cpp
+++ b/src/localplayer.cpp
@@ -283,7 +283,7 @@ void LocalPlayer::walk(unsigned char dir)
else if (dir)
{
// If the being can't move, just change direction
- // TODO: Communicate this to the server (waiting on tmwserv)
+ Net::GameServer::Player::changeDir(dir);
setDirection(dir);
}
}
diff --git a/src/net/beinghandler.cpp b/src/net/beinghandler.cpp
index 7e37aa27..fc3c7d1e 100644
--- a/src/net/beinghandler.cpp
+++ b/src/net/beinghandler.cpp
@@ -55,6 +55,7 @@ BeingHandler::BeingHandler()
GPMSG_BEINGS_DAMAGE,
GPMSG_BEING_ACTION_CHANGE,
GPMSG_BEING_LOOKS_CHANGE,
+ GPMSG_BEING_DIR_CHANGE,
0
};
handledMessages = _messages;
@@ -85,6 +86,9 @@ void BeingHandler::handleMessage(MessageIn &msg)
case GPMSG_BEING_LOOKS_CHANGE:
handleBeingLooksChangeMessage(msg);
break;
+ case GPMSG_BEING_DIR_CHANGE:
+ handleBeingDirChangeMessage(msg);
+ break;
}
}
@@ -319,3 +323,9 @@ void BeingHandler::handleBeingLooksChangeMessage(MessageIn &msg)
handleLooks(static_cast< Player * >(being), msg);
}
+void BeingHandler::handleBeingDirChangeMessage(MessageIn &msg)
+{
+ Being *being = beingManager->findBeing(msg.readInt16());
+ if (!being) return;
+ being->setDirection(msg.readInt8());
+}
diff --git a/src/net/beinghandler.h b/src/net/beinghandler.h
index d2a332a8..8ac07017 100644
--- a/src/net/beinghandler.h
+++ b/src/net/beinghandler.h
@@ -41,6 +41,7 @@ class BeingHandler : public MessageHandler
void handleBeingsDamageMessage(MessageIn &msg);
void handleBeingActionChangeMessage(MessageIn &msg);
void handleBeingLooksChangeMessage(MessageIn &msg);
+ void handleBeingDirChangeMessage(MessageIn &msg);
};
#endif
diff --git a/src/net/gameserver/player.cpp b/src/net/gameserver/player.cpp
index d8050d2b..28fd954a 100644
--- a/src/net/gameserver/player.cpp
+++ b/src/net/gameserver/player.cpp
@@ -160,6 +160,21 @@ void Net::GameServer::Player::tradeWithNPC(int item, int amount)
Net::GameServer::connection->send(msg);
}
+void Net::GameServer::Player::sendLetter(const std::string &player,
+ const std::string &text)
+{
+ MessageOut msg(PGMSG_SEND_POST);
+ msg.writeString(player);
+ msg.writeString(text);
+ Net::GameServer::connection->send(msg);
+}
+
+void Net::GameServer::Player::getLetters()
+{
+ MessageOut msg(PGMSG_GET_POST);
+ Net::GameServer::connection->send(msg);
+}
+
void Net::GameServer::Player::raiseAttribute(int attribute)
{
MessageOut msg(PGMSG_RAISE_ATTRIBUTE);
@@ -179,3 +194,10 @@ void Net::GameServer::Player::respawn()
MessageOut msg(PGMSG_RESPAWN);
Net::GameServer::connection->send(msg);
}
+
+void Net::GameServer::Player::changeDir(unsigned char dir)
+{
+ MessageOut msg(PGMSG_DIRECTION_CHANGE);
+ msg.writeInt8(dir);
+ Net::GameServer::connection->send(msg);
+}
diff --git a/src/net/gameserver/player.h b/src/net/gameserver/player.h
index eea15c2b..fa8c1376 100644
--- a/src/net/gameserver/player.h
+++ b/src/net/gameserver/player.h
@@ -59,10 +59,13 @@ namespace Net
void tradeItem(int slot, int amount);
void tradeMoney(int amount);
void tradeWithNPC(int item, int amount);
+ void sendLetter(const std::string &player, const std::string &text);
+ void getLetters();
void raiseAttribute(int attribute);
void lowerAttribute(int attribute);
void respawn();
static RespawnRequestListener respawnListener;
+ void changeDir(unsigned char dir);
}
}
}
diff --git a/src/net/protocol.h b/src/net/protocol.h
index bd4eaa17..f766d2da 100644
--- a/src/net/protocol.h
+++ b/src/net/protocol.h
@@ -99,6 +99,8 @@ enum {
PGMSG_WALK = 0x0260, // W*2 destination
PGMSG_ACTION_CHANGE = 0x0270, // B Action
GPMSG_BEING_ACTION_CHANGE = 0x0271, // W being id, B action
+ PGMSG_DIRECTION_CHANGE = 0x0272, // B Direction
+ GPMSG_BEING_DIR_CHANGE = 0x0273, // W being id, B direction
GPMSG_BEINGS_MOVE = 0x0280, // { W being id, B flags [, C position, B speed] [, W*2 destination] }*
GPMSG_ITEMS = 0x0281, // { W item id, W*2 position }*
PGMSG_ATTACK = 0x0290, // B direction
@@ -180,6 +182,12 @@ enum {
PCMSG_USER_MODE = 0x0465, // W channel id, S name, B mode
PCMSG_KICK_USER = 0x0466, // W channel id, S name
+ // Post
+ PGMSG_SEND_POST = 0x04A0, // S player, S letter, { W attachment id }
+ GPMSG_SEND_POST_RESPONSE = 0x04A1, // B error
+ PGMSG_GET_POST = 0x04A2, //
+ GPMSG_GET_POST_RESPONSE = 0x04A3, // { L sender id, S letter, { W attachment id } }
+
XXMSG_INVALID = 0x7FFF
};