summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormekolat <mekolat@users.noreply.github.com>2016-05-13 14:34:56 -0400
committermekolat <mekolat@users.noreply.github.com>2016-05-13 14:34:56 -0400
commit6d5919b4f782adc453106312c394cf1b7dd9e58f (patch)
treea1d1b559836b704f2e98f6d88119e750a7d37dbc
parent4c06d090c1c3f3c3e827b876187f3b0dae89b14a (diff)
downloadtmwa-6d5919b4f782adc453106312c394cf1b7dd9e58f.tar.gz
tmwa-6d5919b4f782adc453106312c394cf1b7dd9e58f.tar.bz2
tmwa-6d5919b4f782adc453106312c394cf1b7dd9e58f.tar.xz
tmwa-6d5919b4f782adc453106312c394cf1b7dd9e58f.zip
implement SMSG_MAP_SET_TILES_TYPE, add builtin sendcollision
-rw-r--r--src/map/clif.cpp18
-rw-r--r--src/map/clif.hpp1
-rw-r--r--src/map/script-fun.cpp33
3 files changed, 52 insertions, 0 deletions
diff --git a/src/map/clif.cpp b/src/map/clif.cpp
index bd7f4ef..0ae8fbe 100644
--- a/src/map/clif.cpp
+++ b/src/map/clif.cpp
@@ -3921,6 +3921,24 @@ void clif_remote_command(dumb_ptr<map_session_data> sd, XString cmd)
clif_send(buf, sd, SendWho::SELF, wrap<ClientVersion>(6));
}
+void clif_update_collision(dumb_ptr<map_session_data> sd, short x1, short y1,
+ short x2, short y2, MapName map_name, int mask)
+{
+ nullpo_retv(sd);
+
+ Packet_Fixed<0x0231> fixed_231;
+ fixed_231.x1 = x1;
+ fixed_231.y1 = y1;
+ fixed_231.x2 = x2;
+ fixed_231.y2 = y2;
+ fixed_231.mask = mask;
+ fixed_231.unused_layer = 0;
+ fixed_231.map = map_name;
+ Buffer buf = create_fpacket<0x0231, 34>(fixed_231);
+
+ clif_send(buf, sd, SendWho::SELF, wrap<ClientVersion>(7));
+}
+
void clif_change_music(dumb_ptr<map_session_data> sd, XString music)
{
nullpo_retv(sd);
diff --git a/src/map/clif.hpp b/src/map/clif.hpp
index 4783290..1d6365d 100644
--- a/src/map/clif.hpp
+++ b/src/map/clif.hpp
@@ -107,6 +107,7 @@ void clif_setnpcdirection_towards(dumb_ptr<map_session_data> sd, dumb_ptr<npc_da
void clif_npc_send_title(Session *s, BlockId npcid, XString msg);
void clif_server_message(dumb_ptr<map_session_data>, uint8_t, XString msg);
void clif_remote_command(dumb_ptr<map_session_data>, XString);
+void clif_update_collision(dumb_ptr<map_session_data>, short, short, short, short, MapName, int);
void clif_change_music(dumb_ptr<map_session_data> sd, XString music);
void clif_npc_action(dumb_ptr<map_session_data>, BlockId, short, int, short, short);
void clif_send_mask(dumb_ptr<map_session_data>, int);
diff --git a/src/map/script-fun.cpp b/src/map/script-fun.cpp
index 98c07ed..74045f2 100644
--- a/src/map/script-fun.cpp
+++ b/src/map/script-fun.cpp
@@ -4187,6 +4187,38 @@ void builtin_remotecmd(ScriptState *st)
}
static
+void builtin_sendcollision(ScriptState *st)
+{
+ dumb_ptr<map_session_data> sd = script_rid2sd(st);
+ MapName map_name = stringish<MapName>(ZString(conv_str(st, &AARG(0))));
+ int mask = conv_num(st, &AARG(1));
+ short x1, y1, x2, y2;
+ x1 = x2 = conv_num(st, &AARG(2));
+ y1 = y2 = conv_num(st, &AARG(3));
+
+ if (HARG(5))
+ {
+ x2 = conv_num(st, &AARG(4));
+ y2 = conv_num(st, &AARG(5));
+ if (HARG(6))
+ {
+ CharName player = stringish<CharName>(ZString(conv_str(st, &AARG(6))));
+ sd = map_nick2sd(player);
+ }
+ }
+
+ else if (HARG(4))
+ {
+ CharName player = stringish<CharName>(ZString(conv_str(st, &AARG(4))));
+ sd = map_nick2sd(player);
+ }
+
+ if (sd == nullptr)
+ return;
+ clif_update_collision(sd, x1, y1, x2, y2, map_name, mask);
+}
+
+static
void builtin_music(ScriptState *st)
{
dumb_ptr<map_session_data> sd = script_rid2sd(st);
@@ -4818,6 +4850,7 @@ BuiltinFunction builtin_functions[] =
BUILTIN(title, "s"_s, '\0'),
BUILTIN(smsg, "e??"_s, '\0'),
BUILTIN(remotecmd, "s?"_s, '\0'),
+ BUILTIN(sendcollision, "Mixy???"_s, '\0'),
BUILTIN(music, "s"_s, '\0'),
BUILTIN(mapmask, "i?"_s, '\0'),
BUILTIN(getmask, ""_s, 'i'),