summaryrefslogtreecommitdiff
path: root/src/net/eathena/maprecv.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-10-16 00:32:58 +0300
committerAndrei Karas <akaras@inbox.ru>2015-10-16 00:32:58 +0300
commitf672c7242dfa8d278d826f1e460af96265ca307c (patch)
tree623589aa9a104febeac4147ea349e05c76fb8c77 /src/net/eathena/maprecv.cpp
parent6d44c69cb0cc9c2ac8a94c56c07ed45f63ab9726 (diff)
downloadmanaplus-f672c7242dfa8d278d826f1e460af96265ca307c.tar.gz
manaplus-f672c7242dfa8d278d826f1e460af96265ca307c.tar.bz2
manaplus-f672c7242dfa8d278d826f1e460af96265ca307c.tar.xz
manaplus-f672c7242dfa8d278d826f1e460af96265ca307c.zip
Impliment packet SMSG_MAP_SET_TILES_TYPE (hercules)
This allow change collision types from server.
Diffstat (limited to 'src/net/eathena/maprecv.cpp')
-rw-r--r--src/net/eathena/maprecv.cpp33
1 files changed, 26 insertions, 7 deletions
diff --git a/src/net/eathena/maprecv.cpp b/src/net/eathena/maprecv.cpp
index 06a039306..df43cac76 100644
--- a/src/net/eathena/maprecv.cpp
+++ b/src/net/eathena/maprecv.cpp
@@ -22,8 +22,14 @@
#include "logger.h"
+#include "enums/resources/map/blocktype.h"
+
+#include "gui/viewport.h"
+
#include "net/messagein.h"
+#include "resources/map/map.h"
+
#include "debug.h"
namespace EAthena
@@ -59,13 +65,26 @@ void MapRecv::processInstanceDelete(Net::MessageIn &msg)
void MapRecv::processSetTilesType(Net::MessageIn &msg)
{
- UNIMPLIMENTEDPACKET;
- msg.readInt16("x1");
- msg.readInt16("y1");
- msg.readInt16("x2");
- msg.readInt16("y2");
- msg.readInt32("mask");
- msg.readString(16, "map name");
+ const int x1 = msg.readInt16("x1");
+ const int y1 = msg.readInt16("y1");
+ const int x2 = msg.readInt16("x2");
+ const int y2 = msg.readInt16("y2");
+ const BlockType mask = fromInt(msg.readInt32("mask"), BlockType);
+ const std::string name = msg.readString(16, "map name");
+
+ Map *const map = viewport->getMap();
+// logger->log("map test name: %s, mask %d", map->getGatName().c_str(), (int)mask);
+ if (map && map->getGatName() == name)
+ {
+ for (int y = y1; y <= y2; y ++)
+ {
+ for (int x = x1; x <= x2; x ++)
+ {
+ logger->log("set col %d,%d", x, y);
+ map->setBlockMask(x, y, mask);
+ }
+ }
+ }
}
} // namespace EAthena