summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt3
-rw-r--r--src/Makefile.am3
-rw-r--r--src/being/being.cpp8
-rw-r--r--src/net/net.cpp6
-rw-r--r--src/net/net.h2
-rw-r--r--src/net/pethandler.h45
-rw-r--r--src/net/tmwa/generalhandler.cpp3
-rw-r--r--src/net/tmwa/generalhandler.h1
-rw-r--r--src/net/tmwa/pethandler.cpp62
-rw-r--r--src/net/tmwa/pethandler.h50
10 files changed, 181 insertions, 2 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index e2e019117..6ef6536e8 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -422,6 +422,7 @@ SET(SRCS
net/net.h
net/netconsts.h
net/partyhandler.h
+ net/pethandler.h
net/playerhandler.h
net/sdltcpnet.cpp
net/sdltcpnet.h
@@ -917,6 +918,8 @@ SET(SRCS_TMWA
net/tmwa/npchandler.h
net/tmwa/partyhandler.cpp
net/tmwa/partyhandler.h
+ net/tmwa/pethandler.cpp
+ net/tmwa/pethandler.h
net/tmwa/playerhandler.cpp
net/tmwa/playerhandler.h
net/tmwa/protocol.h
diff --git a/src/Makefile.am b/src/Makefile.am
index 267fda7b3..8019a9c34 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -559,6 +559,7 @@ manaplus_SOURCES += gui/widgets/avatarlistbox.cpp \
net/netconsts.h \
net/npchandler.h \
net/partyhandler.h \
+ net/pethandler.h \
net/playerhandler.h \
net/sdltcpnet.cpp \
net/sdltcpnet.h \
@@ -975,6 +976,8 @@ manaplus_SOURCES += \
net/tmwa/npchandler.h \
net/tmwa/partyhandler.cpp \
net/tmwa/partyhandler.h \
+ net/tmwa/pethandler.cpp \
+ net/tmwa/pethandler.h \
net/tmwa/playerhandler.cpp \
net/tmwa/playerhandler.h \
net/tmwa/protocol.h \
diff --git a/src/being/being.cpp b/src/being/being.cpp
index 383c3a14a..90912e8a7 100644
--- a/src/being/being.cpp
+++ b/src/being/being.cpp
@@ -51,6 +51,7 @@
#include "net/gamehandler.h"
#include "net/net.h"
#include "net/npchandler.h"
+#include "net/pethandler.h"
#include "net/playerhandler.h"
#include "resources/iteminfo.h"
@@ -1643,7 +1644,8 @@ void Being::petLogic()
if (divX >= warpDist || divY >= warpDist)
{
setAction(Being::STAND, 0);
- setTileCoords(dstX0, dstY0);
+ setTileCoords(dstX, dstY);
+ Net::getPetHandler()->spawn(mOwner, dstX, dstY);
}
else if (divX > followDist || divY > followDist)
{
@@ -1688,6 +1690,7 @@ void Being::petLogic()
}
}
setPath(mMap->findPath(mX, mY, dstX, dstY, walkMask));
+ Net::getPetHandler()->move(mOwner, mX, mY, dstX, dstY);
}
}
@@ -3131,10 +3134,11 @@ void Being::addPet(const int id)
id, ActorSprite::PET, 0);
if (being)
{
- being->setTileCoords(getTileX(), getTileY());
+ being->setTileCoords(mX, mY);
being->setOwner(this);
mPetId = id;
mPet = being;
+ Net::getPetHandler()->spawn(this, mX, mY);
}
}
diff --git a/src/net/net.cpp b/src/net/net.cpp
index 964c0e76d..91d789b1d 100644
--- a/src/net/net.cpp
+++ b/src/net/net.cpp
@@ -48,6 +48,7 @@ Net::GameHandler *gameHandler = nullptr;
Net::GuildHandler *guildHandler = nullptr;
Net::NpcHandler *npcHandler = nullptr;
Net::PartyHandler *partyHandler = nullptr;
+Net::PetHandler *petHandler = nullptr;
Net::PlayerHandler *playerHandler = nullptr;
Net::SkillHandler *skillHandler = nullptr;
Net::TradeHandler *tradeHandler = nullptr;
@@ -104,6 +105,11 @@ Net::PartyHandler *Net::getPartyHandler()
return partyHandler;
}
+Net::PetHandler *Net::getPetHandler()
+{
+ return petHandler;
+}
+
Net::PlayerHandler *Net::getPlayerHandler()
{
return playerHandler;
diff --git a/src/net/net.h b/src/net/net.h
index 7d25df5e3..afe6cc605 100644
--- a/src/net/net.h
+++ b/src/net/net.h
@@ -47,6 +47,7 @@ class InventoryHandler;
class LoginHandler;
class NpcHandler;
class PartyHandler;
+class PetHandler;
class PlayerHandler;
class SkillHandler;
class TradeHandler;
@@ -63,6 +64,7 @@ InventoryHandler *getInventoryHandler() A_WARN_UNUSED;
LoginHandler *getLoginHandler() A_WARN_UNUSED;
NpcHandler *getNpcHandler() A_WARN_UNUSED;
PartyHandler *getPartyHandler() A_WARN_UNUSED;
+PetHandler *getPetHandler() A_WARN_UNUSED;
PlayerHandler *getPlayerHandler() A_WARN_UNUSED;
SkillHandler *getSkillHandler() A_WARN_UNUSED;
TradeHandler *getTradeHandler() A_WARN_UNUSED;
diff --git a/src/net/pethandler.h b/src/net/pethandler.h
new file mode 100644
index 000000000..15805ba22
--- /dev/null
+++ b/src/net/pethandler.h
@@ -0,0 +1,45 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2013 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_PETHANDLER_H
+#define NET_PETHANDLER_H
+
+#include "being/being.h"
+
+namespace Net
+{
+
+class PetHandler
+{
+ public:
+ virtual ~PetHandler()
+ { }
+
+ virtual void move(const Being *const being,
+ const int x1, const int y1,
+ const int x2, const int y2) const = 0;
+
+ virtual void spawn(const Being *const being,
+ const int x, const int y) const = 0;
+};
+
+} // namespace Net
+
+#endif // NET_PETHANDLER_H
diff --git a/src/net/tmwa/generalhandler.cpp b/src/net/tmwa/generalhandler.cpp
index 725393790..c185122d2 100644
--- a/src/net/tmwa/generalhandler.cpp
+++ b/src/net/tmwa/generalhandler.cpp
@@ -48,6 +48,7 @@
#include "net/tmwa/network.h"
#include "net/tmwa/npchandler.h"
#include "net/tmwa/partyhandler.h"
+#include "net/tmwa/pethandler.h"
#include "net/tmwa/playerhandler.h"
#include "net/tmwa/protocol.h"
#include "net/tmwa/tradehandler.h"
@@ -80,6 +81,7 @@ GeneralHandler::GeneralHandler() :
mLoginHandler(new LoginHandler),
mNpcHandler(new NpcHandler),
mPartyHandler(new PartyHandler),
+ mPetHandler(new PetHandler),
mPlayerHandler(new PlayerHandler),
mSkillHandler(new SkillHandler),
mTradeHandler(new TradeHandler),
@@ -195,6 +197,7 @@ void GeneralHandler::load()
mNetwork->registerHandler(mSkillHandler.get());
mNetwork->registerHandler(mTradeHandler.get());
mNetwork->registerHandler(mPartyHandler.get());
+ mNetwork->registerHandler(mPetHandler.get());
mNetwork->registerHandler(mQuestHandler.get());
}
diff --git a/src/net/tmwa/generalhandler.h b/src/net/tmwa/generalhandler.h
index 24b17c6f5..a223889ed 100644
--- a/src/net/tmwa/generalhandler.h
+++ b/src/net/tmwa/generalhandler.h
@@ -71,6 +71,7 @@ class GeneralHandler final : public MessageHandler,
MessageHandlerPtr mLoginHandler;
MessageHandlerPtr mNpcHandler;
MessageHandlerPtr mPartyHandler;
+ MessageHandlerPtr mPetHandler;
MessageHandlerPtr mPlayerHandler;
MessageHandlerPtr mSkillHandler;
MessageHandlerPtr mTradeHandler;
diff --git a/src/net/tmwa/pethandler.cpp b/src/net/tmwa/pethandler.cpp
new file mode 100644
index 000000000..35363aaa7
--- /dev/null
+++ b/src/net/tmwa/pethandler.cpp
@@ -0,0 +1,62 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2013 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/pethandler.h"
+
+#include "net/net.h"
+
+#include "net/tmwa/protocol.h"
+
+#include "debug.h"
+
+extern Net::PetHandler *petHandler;
+
+namespace TmwAthena
+{
+
+PetHandler::PetHandler() :
+ MessageHandler()
+{
+ static const uint16_t _messages[] =
+ {
+ 0
+ };
+ handledMessages = _messages;
+ petHandler = this;
+}
+
+void PetHandler::handleMessage(Net::MessageIn &msg)
+{
+ BLOCK_START("PetHandler::handleMessage")
+ BLOCK_END("PetHandler::handleMessage")
+}
+
+void PetHandler::move(const Being *const being,
+ const int x1, const int y1,
+ const int x2, const int y2) const
+{
+}
+
+void PetHandler::spawn(const Being *const being,
+ const int x, const int y) const
+{
+}
+
+} // namespace TmwAthena
diff --git a/src/net/tmwa/pethandler.h b/src/net/tmwa/pethandler.h
new file mode 100644
index 000000000..207e0add9
--- /dev/null
+++ b/src/net/tmwa/pethandler.h
@@ -0,0 +1,50 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2013 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_PETHANDLER_H
+#define NET_TMWA_PETHANDLER_H
+
+#include "net/tmwa/messagehandler.h"
+
+#include "net/pethandler.h"
+
+namespace TmwAthena
+{
+
+class PetHandler final : public MessageHandler, public Net::PetHandler
+{
+ public:
+ PetHandler();
+
+ A_DELETE_COPY(PetHandler)
+
+ void handleMessage(Net::MessageIn &msg) override final;
+
+ void move(const Being *const being,
+ const int x1, const int y1,
+ const int x2, const int y2) const override final;
+
+ void spawn(const Being *const being,
+ const int x, const int y) const override final;
+};
+
+} // namespace TmwAthena
+
+#endif // NET_TMWA_PETHANDLER_H