summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDavid Athay <ko2fan@gmail.com>2008-09-18 15:59:49 +0000
committerDavid Athay <ko2fan@gmail.com>2008-09-18 15:59:49 +0000
commit70befcc989d783d1b7adff2a501052f3cdb02518 (patch)
treee420fcb71fe940045a2060ab7ced78a33d8c64c8 /src
parent12c585f16ec1918e9d3ab44a3a19d7bc4539e214 (diff)
downloadmanaserv-70befcc989d783d1b7adff2a501052f3cdb02518.tar.gz
manaserv-70befcc989d783d1b7adff2a501052f3cdb02518.tar.bz2
manaserv-70befcc989d783d1b7adff2a501052f3cdb02518.tar.xz
manaserv-70befcc989d783d1b7adff2a501052f3cdb02518.zip
Added postal system to chat server, and modified tick time.
Diffstat (limited to 'src')
-rw-r--r--src/chat-server/post.cpp101
-rw-r--r--src/chat-server/post.hpp110
-rw-r--r--src/defines.h4
-rw-r--r--src/game-server/gamehandler.cpp17
-rw-r--r--src/game-server/gamehandler.hpp5
-rw-r--r--src/game-server/main-game.cpp2
6 files changed, 232 insertions, 7 deletions
diff --git a/src/chat-server/post.cpp b/src/chat-server/post.cpp
new file mode 100644
index 00000000..ca5af04a
--- /dev/null
+++ b/src/chat-server/post.cpp
@@ -0,0 +1,101 @@
+/*
+ * The Mana World Server
+ * Copyright 2008 The Mana World Development Team
+ *
+ * This file is part of The Mana World.
+ *
+ * The Mana World is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * The Mana World is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with The Mana World; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+#include "post.hpp"
+
+#include "../defines.h"
+
+Letter::Letter(int type, Character *sender, Character *receiver)
+ : mType(type), mSender(sender), mReceiver(receiver)
+{
+
+}
+
+void Letter::setExpiry(unsigned long expiry)
+{
+ mExpiry = expiry;
+}
+
+unsigned long Letter::getExpiry() const
+{
+ return mExpiry;
+}
+
+bool Letter::addAttachment(InventoryItem item)
+{
+ if (mAttachments.size() > MAX_ATTACHMENTS)
+ {
+ return false;
+ }
+
+ mAttachments.push_back(item);
+
+ return true;
+}
+
+Character* Letter::getReceiver()
+{
+ return mReceiver;
+}
+
+bool Post::addLetter(Letter *letter)
+{
+ if (mLetters.size() > MAX_LETTERS)
+ {
+ return false;
+ }
+
+ mLetters.push_back(letter);
+
+ return true;
+}
+
+void PostManager::addLetter(Letter *letter)
+{
+ std::map<Character*, Post*>::iterator itr =
+ mPostBox.find(letter->getReceiver());
+ if (itr != mPostBox.end())
+ {
+ itr->second->addLetter(letter);
+ }
+ else
+ {
+ Post *post = new Post();
+ post->addLetter(letter);
+ mPostBox.insert(
+ std::pair<Character*, Post*>(letter->getReceiver(), post)
+ );
+ }
+}
+
+Post* PostManager::getPost(Character *player)
+{
+ std::map<Character*, Post*>::iterator itr =
+ mPostBox.find(player);
+ if (itr == mPostBox.end())
+ {
+ return NULL;
+ }
+
+ return itr->second;
+}
diff --git a/src/chat-server/post.hpp b/src/chat-server/post.hpp
new file mode 100644
index 00000000..f1102b7d
--- /dev/null
+++ b/src/chat-server/post.hpp
@@ -0,0 +1,110 @@
+/*
+ * The Mana World Server
+ * Copyright 2008 The Mana World Development Team
+ *
+ * This file is part of The Mana World.
+ *
+ * The Mana World is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * The Mana World is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with The Mana World; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+#ifndef _TMWSERV_POST_H_
+#define _TMWSERV_POST_H_
+
+#include <list>
+#include <map>
+#include <vector>
+
+#include "../common/inventorydata.hpp"
+
+class Item;
+class Character;
+
+class Letter
+{
+public:
+ /**
+ * Constructor
+ * @param type Type of Letter
+ */
+ Letter(int type, Character *sender, Character *receiver);
+
+ /**
+ * Set the expiry
+ */
+ void setExpiry(unsigned long expiry);
+
+ /**
+ * Get the expiry
+ */
+ unsigned long getExpiry() const;
+
+ /**
+ * Add an attachment
+ * @param aitem The attachment to add to the letter
+ * @return Returns true if the letter doesnt have too many attachments
+ */
+ bool addAttachment(InventoryItem item);
+
+ /**
+ * Get the character receiving the letter
+ * @return Returns the Character who will receive the letter
+ */
+ Character* getReceiver();
+
+private:
+ unsigned int mType;
+ unsigned long mExpiry;
+ std::vector<InventoryItem> mAttachments;
+ Character *mSender;
+ Character *mReceiver;
+};
+
+class Post
+{
+public:
+ /**
+ * Add letter to post
+ * @param letter Letter to add
+ * @return Returns true if post isnt full
+ */
+ bool addLetter(Letter *letter);
+
+private:
+ std::vector<Letter*> mLetters;
+};
+
+class PostManager
+{
+public:
+ /**
+ * Add letter to post box
+ * @param letter Letter to add
+ */
+ void addLetter(Letter *letter);
+
+ /**
+ * Get post for character
+ * @param player Character that is getting post
+ * @return Returns the post for that character
+ */
+ Post* getPost(Character *player);
+
+private:
+ std::map<Character*, Post*> mPostBox;
+};
+
+#endif
diff --git a/src/defines.h b/src/defines.h
index eb6bc052..4538945f 100644
--- a/src/defines.h
+++ b/src/defines.h
@@ -51,6 +51,10 @@ enum
MAX_CHANNEL_ANNOUNCEMENT = 150,
MAX_CHANNEL_PASSWORD = 12,
+ // Post related
+ MAX_ATTACHMENTS = 3,
+ MAX_LETTERS = 10,
+
// Registering related
MIN_LOGIN_LENGTH = 4,
MAX_LOGIN_LENGTH = 16,
diff --git a/src/game-server/gamehandler.cpp b/src/game-server/gamehandler.cpp
index 8b7be98b..bd5248bd 100644
--- a/src/game-server/gamehandler.cpp
+++ b/src/game-server/gamehandler.cpp
@@ -285,12 +285,7 @@ void GameHandler::processMessage(NetComputer *comp, MessageIn &message)
case PGMSG_WALK:
{
- int x = message.readShort();
- int y = message.readShort();
- Point dst(x, y);
- computer.character->setDestination(dst);
-
- // no response should be required
+ handleWalk(&computer, message);
} break;
case PGMSG_EQUIP:
@@ -580,3 +575,13 @@ void GameHandler::sendError(NetComputer *computer, int id, std::string errorMsg)
msg.writeString(errorMsg, errorMsg.size());
computer->send(msg);
}
+
+void GameHandler::handleWalk(GameClient *client, MessageIn &message)
+{
+ int x = message.readShort();
+ int y = message.readShort();
+
+ Point dst(x, y);
+ client->character->setDestination(dst);
+
+}
diff --git a/src/game-server/gamehandler.hpp b/src/game-server/gamehandler.hpp
index 4a078813..77ba8a29 100644
--- a/src/game-server/gamehandler.hpp
+++ b/src/game-server/gamehandler.hpp
@@ -134,6 +134,11 @@ class GameHandler: public ConnectionHandler
*/
void processMessage(NetComputer *computer, MessageIn &message);
+ /**
+ * Set the position a player wants to move to
+ */
+ void handleWalk(GameClient *client, MessageIn &message);
+
private:
/**
diff --git a/src/game-server/main-game.cpp b/src/game-server/main-game.cpp
index 39727384..2cf025e7 100644
--- a/src/game-server/main-game.cpp
+++ b/src/game-server/main-game.cpp
@@ -54,7 +54,7 @@
#define DEFAULT_MAPSDB_FILE "maps.xml"
#define DEFAULT_MONSTERSDB_FILE "monsters.xml"
-utils::Timer worldTimer(150, false); /**< Timer for world tics set to 100 ms */
+utils::Timer worldTimer(100, false); /**< Timer for world tics set to 100 ms */
int worldTime = 0; /**< Current world time in 100ms ticks */
bool running = true; /**< Determines if server keeps running */