From d559a259e27a6011ab1d608a45443c8c9d310c4f Mon Sep 17 00:00:00 2001
From: Andrei Karas <akaras@inbox.ru>
Date: Thu, 12 Mar 2015 22:02:58 +0300
Subject: eathena: add partial support for packet SMSG_INSTANCE_START 0x02cb.

Also add empty maphandler.
---
 src/net/eathena/maphandler.cpp | 68 ++++++++++++++++++++++++++++++++++++++++++
 src/net/eathena/maphandler.h   | 47 +++++++++++++++++++++++++++++
 src/net/eathena/packets.h      |  2 +-
 src/net/eathena/protocol.h     |  2 ++
 src/net/maphandler.h           | 45 ++++++++++++++++++++++++++++
 src/net/tmwa/maphandler.cpp    | 57 +++++++++++++++++++++++++++++++++++
 src/net/tmwa/maphandler.h      | 49 ++++++++++++++++++++++++++++++
 7 files changed, 269 insertions(+), 1 deletion(-)
 create mode 100644 src/net/eathena/maphandler.cpp
 create mode 100644 src/net/eathena/maphandler.h
 create mode 100644 src/net/maphandler.h
 create mode 100644 src/net/tmwa/maphandler.cpp
 create mode 100644 src/net/tmwa/maphandler.h

(limited to 'src/net')

diff --git a/src/net/eathena/maphandler.cpp b/src/net/eathena/maphandler.cpp
new file mode 100644
index 000000000..6ac2e8392
--- /dev/null
+++ b/src/net/eathena/maphandler.cpp
@@ -0,0 +1,68 @@
+/*
+ *  The ManaPlus Client
+ *  Copyright (C) 2011-2015  The ManaPlus Developers
+ *
+ *  This file is part of The ManaPlus Client.
+ *
+ *  This program 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.
+ *
+ *  This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "net/eathena/maphandler.h"
+
+#include "logger.h"
+
+#include "net/ea/eaprotocol.h"
+
+#include "net/eathena/messageout.h"
+#include "net/eathena/protocol.h"
+
+#include "debug.h"
+
+extern Net::MapHandler *mapHandler;
+
+namespace EAthena
+{
+
+MapHandler::MapHandler() :
+    MessageHandler()
+{
+    static const uint16_t _messages[] =
+    {
+        SMSG_INSTANCE_START,
+        0
+    };
+    handledMessages = _messages;
+    mailHandler = this;
+}
+
+void MapHandler::handleMessage(Net::MessageIn &msg)
+{
+    switch (msg.getId())
+    {
+        case SMSG_INSTANCE_START:
+            processInstanceStart(msg);
+            break;
+
+        default:
+            break;
+    }
+}
+
+void MapHandler::processInstanceStart(Net::MessageIn &msg)
+{
+    msg.readString(61, "instance name");
+    msg.readInt16("flag");
+}
+
+}  // namespace EAthena
diff --git a/src/net/eathena/maphandler.h b/src/net/eathena/maphandler.h
new file mode 100644
index 000000000..5d8985db5
--- /dev/null
+++ b/src/net/eathena/maphandler.h
@@ -0,0 +1,47 @@
+/*
+ *  The ManaPlus Client
+ *  Copyright (C) 2011-2015  The ManaPlus Developers
+ *
+ *  This file is part of The ManaPlus Client.
+ *
+ *  This program 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.
+ *
+ *  This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NET_EATHENA_MAPHANDLER_H
+#define NET_EATHENA_MAPHANDLER_H
+
+#include "net/maphandler.h"
+
+#include "net/eathena/messagehandler.h"
+
+namespace EAthena
+{
+class MessageOut;
+
+class MapHandler final : public MessageHandler, public Net::MapHandler
+{
+    public:
+        MapHandler();
+
+        A_DELETE_COPY(MapHandler)
+
+        void handleMessage(Net::MessageIn &msg) override final;
+
+    protected:
+        void processInstanceStart(Net::MessageIn &msg);
+};
+
+}  // namespace EAthena
+
+#endif  // NET_EATHENA_MAPHANDLER_H
diff --git a/src/net/eathena/packets.h b/src/net/eathena/packets.h
index 01dbbbb5f..343867ce4 100644
--- a/src/net/eathena/packets.h
+++ b/src/net/eathena/packets.h
@@ -98,7 +98,7 @@ int16_t packet_lengths[] =
   0,   0,   8,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
   0,  -1,  -1, 107,   6,  -1,   0,   7,  22, 191,   0,   8,   0,   0,   0,   0,
 // #0x02C0
-  0,  -1,   0,   0,   0,  30,  30,   0,   0,   3,   0,   0,   0,   0,   0,   0,
+  0,  -1,   0,   0,   0,  30,  30,   0,   0,   3,   0,  65,   0,   0,   0,   0,
   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   3,   0,   0,   0,   0,   0,
   0,  33,   0,   0,   0,   0,   0,   0,   0,   0,   0,  13,   0,   0,   0,   0,
  10,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
diff --git a/src/net/eathena/protocol.h b/src/net/eathena/protocol.h
index a14e46421..3180d45e2 100644
--- a/src/net/eathena/protocol.h
+++ b/src/net/eathena/protocol.h
@@ -414,6 +414,8 @@
 
 #define SMSG_CLASS_CHANGE            0x01b0
 
+#define SMSG_INSTANCE_START          0x02cb
+
 /**********************************
  *  Packets from client to server *
  **********************************/
diff --git a/src/net/maphandler.h b/src/net/maphandler.h
new file mode 100644
index 000000000..7e6adbc06
--- /dev/null
+++ b/src/net/maphandler.h
@@ -0,0 +1,45 @@
+/*
+ *  The ManaPlus Client
+ *  Copyright (C) 2011-2015  The ManaPlus Developers
+ *
+ *  This file is part of The ManaPlus Client.
+ *
+ *  This program 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.
+ *
+ *  This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NET_MAPHANDLER_H
+#define NET_MAPHANDLER_H
+
+#ifdef EATHENA_SUPPORT
+
+#include <string>
+
+#include "localconsts.h"
+
+namespace Net
+{
+
+class MapHandler notfinal
+{
+    public:
+        virtual ~MapHandler()
+        { }
+};
+
+}  // namespace Net
+
+extern Net::MapHandler *mapHandler;
+
+#endif  // EATHENA_SUPPORT
+#endif  // NET_MAPTHANDLER_H
diff --git a/src/net/tmwa/maphandler.cpp b/src/net/tmwa/maphandler.cpp
new file mode 100644
index 000000000..483ca0f54
--- /dev/null
+++ b/src/net/tmwa/maphandler.cpp
@@ -0,0 +1,57 @@
+/*
+ *  The ManaPlus Client
+ *  Copyright (C) 2011-2015  The ManaPlus Developers
+ *
+ *  This file is part of The ManaPlus Client.
+ *
+ *  This program 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.
+ *
+ *  This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "net/tmwa/maphandler.h"
+
+#include "logger.h"
+
+#include "net/ea/eaprotocol.h"
+
+#include "net/tmwa/messageout.h"
+#include "net/tmwa/protocol.h"
+
+#include "debug.h"
+
+extern Net::MapHandler *mapHandler;
+
+namespace TmwAthena
+{
+
+MapHandler::MapHandler() :
+    MessageHandler()
+{
+    static const uint16_t _messages[] =
+    {
+        0
+    };
+    handledMessages = _messages;
+    mailHandler = this;
+}
+
+void MapHandler::handleMessage(Net::MessageIn &msg)
+{
+    switch (msg.getId())
+    {
+        default:
+            break;
+    }
+}
+
+}  // namespace TmwAthena
diff --git a/src/net/tmwa/maphandler.h b/src/net/tmwa/maphandler.h
new file mode 100644
index 000000000..184137ef2
--- /dev/null
+++ b/src/net/tmwa/maphandler.h
@@ -0,0 +1,49 @@
+/*
+ *  The ManaPlus Client
+ *  Copyright (C) 2011-2015  The ManaPlus Developers
+ *
+ *  This file is part of The ManaPlus Client.
+ *
+ *  This program 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.
+ *
+ *  This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NET_TMWA_MAPHANDLER_H
+#define NET_TMWA_MAPHANDLER_H
+
+#ifdef EATHENA_SUPPORT
+
+#include "net/maphandler.h"
+
+#include "net/tmwa/messagehandler.h"
+
+namespace TmwAthena
+{
+class MessageOut;
+
+class MapHandler final : public MessageHandler, public Net::MapHandler
+{
+    public:
+        MapHandler();
+
+        A_DELETE_COPY(MapHandler)
+
+        void handleMessage(Net::MessageIn &msg) override final;
+
+    protected:
+};
+
+}  // namespace TmwAthena
+
+#endif  // EATHENA_SUPPORT
+#endif  // NET_TMWA_MAPHANDLER_H
-- 
cgit v1.2.3-70-g09d2