diff options
author | David Athay <ko2fan@gmail.com> | 2008-09-18 15:59:49 +0000 |
---|---|---|
committer | David Athay <ko2fan@gmail.com> | 2008-09-18 15:59:49 +0000 |
commit | 70befcc989d783d1b7adff2a501052f3cdb02518 (patch) | |
tree | e420fcb71fe940045a2060ab7ced78a33d8c64c8 | |
parent | 12c585f16ec1918e9d3ab44a3a19d7bc4539e214 (diff) | |
download | manaserv-70befcc989d783d1b7adff2a501052f3cdb02518.tar.gz manaserv-70befcc989d783d1b7adff2a501052f3cdb02518.tar.bz2 manaserv-70befcc989d783d1b7adff2a501052f3cdb02518.tar.xz manaserv-70befcc989d783d1b7adff2a501052f3cdb02518.zip |
Added postal system to chat server, and modified tick time.
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | src/chat-server/post.cpp | 101 | ||||
-rw-r--r-- | src/chat-server/post.hpp | 110 | ||||
-rw-r--r-- | src/defines.h | 4 | ||||
-rw-r--r-- | src/game-server/gamehandler.cpp | 17 | ||||
-rw-r--r-- | src/game-server/gamehandler.hpp | 5 | ||||
-rw-r--r-- | src/game-server/main-game.cpp | 2 |
7 files changed, 239 insertions, 7 deletions
@@ -1,3 +1,10 @@ +2008-09-18 David Athay <ko2fan@gmail.com> + + * src/chat-server/post.hpp, src/chat-server/post.cpp, src/defines.h, + src/game-server/gamehandler.cpp, src/game-server/gamehandler.hpp, + src/game-server/main-game.cpp: Changed timing to be 100ms per tick. + Added post manager on chat server. + 2008-09-17 Andreas Habel <mail@exceptionfault.de> * src/sql/*, src/account-server/dalstoragesql.hpp: added installation 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 */ |