summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2013-10-30 22:02:02 +0300
committerAndrei Karas <akaras@inbox.ru>2013-10-30 22:10:17 +0300
commit4d2b3cae0ab00d1ef832f11d14bd299d6d5c2a6b (patch)
tree143a9b96bc0ad57ea90d466d70c5bc5749daf541
parentbb5d5bfd20c09952cfb3b9881b90177b0c34aac7 (diff)
downloadmv-4d2b3cae0ab00d1ef832f11d14bd299d6d5c2a6b.tar.gz
mv-4d2b3cae0ab00d1ef832f11d14bd299d6d5c2a6b.tar.bz2
mv-4d2b3cae0ab00d1ef832f11d14bd299d6d5c2a6b.tar.xz
mv-4d2b3cae0ab00d1ef832f11d14bd299d6d5c2a6b.zip
add support for temporary replace background music on given map by server.
-rw-r--r--src/map.cpp5
-rw-r--r--src/map.h2
-rw-r--r--src/net/tmwa/network.cpp2
-rw-r--r--src/net/tmwa/playerhandler.cpp19
-rw-r--r--src/net/tmwa/playerhandler.h1
-rw-r--r--src/net/tmwa/protocol.h1
6 files changed, 29 insertions, 1 deletions
diff --git a/src/map.cpp b/src/map.cpp
index 5188da985..e4ab0c60f 100644
--- a/src/map.cpp
+++ b/src/map.cpp
@@ -1631,3 +1631,8 @@ void Map::setMask(const int mask)
mRedrawMap = true;
mMask = mask;
}
+
+void Map::setMusicFile(const std::string &file)
+{
+ setProperty("music", file);
+}
diff --git a/src/map.h b/src/map.h
index 068a41458..f227d7fe4 100644
--- a/src/map.h
+++ b/src/map.h
@@ -268,6 +268,8 @@ class Map final : public Properties, public ConfigListener
const std::string getMusicFile() const A_WARN_UNUSED;
+ void setMusicFile(const std::string &file);
+
const std::string getName() const A_WARN_UNUSED;
/**
diff --git a/src/net/tmwa/network.cpp b/src/net/tmwa/network.cpp
index 1ed7ee581..24615ab16 100644
--- a/src/net/tmwa/network.cpp
+++ b/src/net/tmwa/network.cpp
@@ -78,7 +78,7 @@ int16_t packet_lengths[] =
// #0x0200
26, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 19, 10, 0, 0, 0,
2, -1, 16, 0, 8, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- -1, 122, -1, -1, -1, -1, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ -1, 122, -1, -1, -1, -1, 10, -1, 0, 0, 0, 0, 0, 0, 0, 0,
};
static const int packet_lengths_size
diff --git a/src/net/tmwa/playerhandler.cpp b/src/net/tmwa/playerhandler.cpp
index df56176f0..b1fa64d25 100644
--- a/src/net/tmwa/playerhandler.cpp
+++ b/src/net/tmwa/playerhandler.cpp
@@ -25,6 +25,7 @@
#include "configuration.h"
#include "client.h"
#include "game.h"
+#include "soundmanager.h"
#include "net/net.h"
@@ -34,6 +35,8 @@
#include "gui/windows/whoisonline.h"
+#include "gui/viewport.h"
+
#include "debug.h"
extern Net::PlayerHandler *playerHandler;
@@ -58,6 +61,7 @@ PlayerHandler::PlayerHandler() :
SMSG_PLAYER_ARROW_MESSAGE,
SMSG_ONLINE_LIST,
SMSG_MAP_MASK,
+ SMSG_MAP_MUSIC,
0
};
handledMessages = _messages;
@@ -114,6 +118,10 @@ void PlayerHandler::handleMessage(Net::MessageIn &msg)
processMapMask(msg);
break;
+ case SMSG_MAP_MUSIC:
+ processMapMusic(msg);
+ break;
+
default:
break;
}
@@ -310,4 +318,15 @@ void PlayerHandler::processMapMask(Net::MessageIn &msg) const
map->setMask(mask);
}
+void PlayerHandler::processMapMusic(Net::MessageIn &msg) const
+{
+ const int size = msg.readInt16() - 5;
+ const std::string music = msg.readString(size);
+ soundManager.playMusic(music);
+
+ Map *const map = viewport->getMap();
+ if (map)
+ map->setMusicFile(music);
+}
+
} // namespace TmwAthena
diff --git a/src/net/tmwa/playerhandler.h b/src/net/tmwa/playerhandler.h
index 32f40434b..75022a452 100644
--- a/src/net/tmwa/playerhandler.h
+++ b/src/net/tmwa/playerhandler.h
@@ -55,6 +55,7 @@ class PlayerHandler final : public MessageHandler, public Ea::PlayerHandler
void requestOnlineList() const override final;
void updateStatus(const uint8_t status) const override final;
void processMapMask(Net::MessageIn &msg) const;
+ void processMapMusic(Net::MessageIn &msg) const;
void respawn() const override final;
};
diff --git a/src/net/tmwa/protocol.h b/src/net/tmwa/protocol.h
index f3f395148..965c67a50 100644
--- a/src/net/tmwa/protocol.h
+++ b/src/net/tmwa/protocol.h
@@ -351,6 +351,7 @@ enum
#define SMSG_QUEST_PLAYER_VARS 0x0215
#define SMSG_BEING_MOVE3 0x0225
#define SMSG_MAP_MASK 0x0226
+#define SMSG_MAP_MUSIC 0x0227
#define CMSG_SEND_CLIENT_INFO 0x7533
#define SMSG_UPDATE_HOST2 0x7534