summaryrefslogtreecommitdiff
path: root/src/playerdata.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/playerdata.cpp')
-rw-r--r--src/playerdata.cpp89
1 files changed, 89 insertions, 0 deletions
diff --git a/src/playerdata.cpp b/src/playerdata.cpp
new file mode 100644
index 00000000..1b9760d2
--- /dev/null
+++ b/src/playerdata.cpp
@@ -0,0 +1,89 @@
+/*
+ * The Mana World Server
+ * Copyright 2007 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 "playerdata.hpp"
+#include "net/messagein.hpp"
+#include "net/messageout.hpp"
+
+PlayerData::PlayerData(std::string const &name, int id)
+ : mDatabaseID(id),
+ mName(name)
+{
+ for (int j = 0; j < EQUIPMENT_SLOTS; ++j)
+ {
+ mPossessions.equipment[j] = 0;
+ }
+}
+
+void PlayerData::serialize(MessageOut &msg) const
+{
+ msg.writeByte(mGender);
+ msg.writeByte(mHairStyle);
+ msg.writeByte(mHairColor);
+ msg.writeByte(mLevel);
+ msg.writeShort(mMoney);
+ for (int j = 0; j < NB_RSTAT; ++j)
+ {
+ msg.writeByte(mRawStats.stats[j]);
+ }
+ msg.writeShort(mMapId);
+ msg.writeShort(mPos.x);
+ msg.writeShort(mPos.y);
+ for (int j = 0; j < EQUIPMENT_SLOTS; ++j)
+ {
+ msg.writeShort(mPossessions.equipment[j]);
+ }
+ for (std::vector< InventoryItem >::const_iterator j = mPossessions.inventory.begin(),
+ j_end = mPossessions.inventory.end(); j != j_end; ++j)
+ {
+ msg.writeShort(j->itemId);
+ msg.writeByte(j->amount);
+ }
+}
+
+void PlayerData::deserialize(MessageIn &msg)
+{
+ mGender = msg.readByte();
+ mHairStyle = msg.readByte();
+ mHairColor = msg.readByte();
+ mLevel = msg.readByte();
+ mMoney = msg.readShort();
+ for (int j = 0; j < NB_RSTAT; ++j)
+ {
+ mRawStats.stats[j] = msg.readByte();
+ }
+ mMapId = msg.readShort();
+ mPos.x = msg.readShort();
+ mPos.y = msg.readShort();
+ for (int j = 0; j < EQUIPMENT_SLOTS; ++j)
+ {
+ mPossessions.equipment[j] = msg.readShort();
+ }
+ mPossessions.inventory.clear();
+ while (msg.getUnreadLength())
+ {
+ InventoryItem i;
+ i.itemId = msg.readShort();
+ i.amount = msg.readByte();
+ mPossessions.inventory.push_back(i);
+ }
+}