From db20d783fe41bb9b44b92461f9843a31146a5ce7 Mon Sep 17 00:00:00 2001 From: mekolat Date: Thu, 21 May 2015 19:17:03 -0400 Subject: npc actions --- src/map/clif.cpp | 18 ++++++++++++++++++ src/map/clif.hpp | 1 + src/map/script-fun.cpp | 25 +++++++++++++++++++++++++ tools/protocol.py | 2 +- 4 files changed, 45 insertions(+), 1 deletion(-) diff --git a/src/map/clif.cpp b/src/map/clif.cpp index d8e0b7e..73315d8 100644 --- a/src/map/clif.cpp +++ b/src/map/clif.cpp @@ -800,6 +800,24 @@ void clif_mob0078(dumb_ptr md, Buffer& buf) buf = create_fpacket<0x0078, 54>(fixed_78); } +void clif_npc_action(dumb_ptr sd, BlockId npcid, + short command, int id, short x, short y) +{ + nullpo_retv(sd); + if(sd->client_version < 2) + return; + + Packet_Fixed<0x0212> fixed_212; + fixed_212.npc_id = npcid; + fixed_212.command = command; + fixed_212.id = id; + fixed_212.x = x; + fixed_212.y = y; + + Buffer buf = create_fpacket<0x0212, 16>(fixed_212); + send_buffer(sd->sess, buf); +} + /*========================================== * MOB表示2 *------------------------------------------ diff --git a/src/map/clif.hpp b/src/map/clif.hpp index 8332fb9..99d4a2c 100644 --- a/src/map/clif.hpp +++ b/src/map/clif.hpp @@ -106,6 +106,7 @@ void clif_setnpcdirection(dumb_ptr nd, DIR direction); void clif_setnpcdirection_towards(dumb_ptr sd, dumb_ptr nd, DIR direction); void clif_npc_send_title(Session *s, BlockId npcid, XString msg); void clif_change_music(dumb_ptr sd, XString music); +void clif_npc_action(dumb_ptr, BlockId, short, int, short, short); // trade void clif_traderequest(dumb_ptr sd, CharName name); diff --git a/src/map/script-fun.cpp b/src/map/script-fun.cpp index 520936b..0d19770 100644 --- a/src/map/script-fun.cpp +++ b/src/map/script-fun.cpp @@ -1614,6 +1614,30 @@ void builtin_setnpctimer(ScriptState *st) npc_settimerevent_tick(nd, tick); } +static +void builtin_npcaction(ScriptState *st) +{ + dumb_ptr sd = script_rid2sd(st); + short command = conv_num(st, &AARG(0)); + int id = 0; + short x = HARG(2) ? conv_num(st, &AARG(2)) : 0; + short y = HARG(3) ? conv_num(st, &AARG(3)) : 0; + + if(HARG(1)) + { + if(command == 2) + { + dumb_ptr nd_; + nd_ = npc_name2id(stringish(ZString(conv_str(st, &AARG(1))))); + id = unwrap(nd_->bl_id); + } + else + id = conv_num(st, &AARG(1)); + } + + clif_npc_action(sd, st->oid, command, id, x, y); +} + static void builtin_setnpcdirection(ScriptState *st) { @@ -3103,6 +3127,7 @@ BuiltinFunction builtin_functions[] = BUILTIN(getnpctimer, "i?"_s, 'i'), BUILTIN(setnpctimer, "i?"_s, '\0'), BUILTIN(setnpcdirection, "iii?"_s, '\0'), + BUILTIN(npcaction, "i???"_s, '\0'), BUILTIN(announce, "si"_s, '\0'), BUILTIN(mapannounce, "Msi"_s, '\0'), BUILTIN(getusers, "i"_s, 'i'), diff --git a/tools/protocol.py b/tools/protocol.py index e3353de..23a0719 100755 --- a/tools/protocol.py +++ b/tools/protocol.py @@ -4631,7 +4631,7 @@ def build_context(): at(0, u16, 'packet id'), at(2, block_id, 'npc id'), at(6, u16, 'command'), - at(8, block_id, 'id'), + at(8, u32, 'id'), at(12, u16, 'x'), at(14, u16, 'y'), ], -- cgit v1.2.3-60-g2f50