From 3285ec99df4a6cc50f960e688afa1a1efbc901ad Mon Sep 17 00:00:00 2001 From: gumi Date: Sat, 10 Nov 2018 18:58:47 -0500 Subject: add support for CMSG_ONLINE_LIST --- src/map/clif.cpp | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/map/clif.cpp b/src/map/clif.cpp index 75d98e4..d287f4d 100644 --- a/src/map/clif.cpp +++ b/src/map/clif.cpp @@ -3641,6 +3641,48 @@ RecvResult clif_parse_LoadEndAck(Session *s, dumb_ptr sd) return rv; } +static +int clif_send_online_list(dumb_ptr sd) +{ + Packet_Head<0x0211> head_211; + std::vector> repeat_211; + + for (io::FD i : iter_fds()) + { + Session *s = get_session(i); + if (!s || !s->session_data) + continue; + + dumb_ptr p_sd = dumb_ptr(static_cast(s->session_data.get())); + if (p_sd->state.auth && !bool(p_sd->status.option & Opt0::HIDE)) { + Packet_Repeat<0x0211> info; + info.account_id = p_sd->status_key.account_id; + info.char_name = p_sd->status_key.name; + info.level = p_sd->status.base_level; + info.gm_level = GmLevel::from(static_cast(pc_isGM(p_sd).get_public_word())); + info.gender = p_sd->status.sex; + repeat_211.push_back(info); + } + } + + Buffer buf = create_vpacket<0x0211, 4, 31>(head_211, repeat_211); + clif_send(buf, sd, SendWho::SELF, wrap(8)); + return 0; +} + +static +RecvResult clif_parse_OnlineListRequest(Session *s, dumb_ptr sd) +{ + Packet_Fixed<0x0210> fixed; + RecvResult rv = recv_fpacket<0x0210, 2>(s, fixed); + if (rv != RecvResult::Complete) + return rv; + + clif_send_online_list(sd); + + return rv; +} + /*========================================== * *------------------------------------------ @@ -5715,7 +5757,7 @@ func_table clif_parse_func_table[0x0220] = {0, VAR,nullptr, }, // 0x020d {0, 24, nullptr, }, // 0x020e {0, 0, nullptr, }, // 0x020f - {0, 0, nullptr, }, // 0x0210 + {-1, 2, clif_parse_OnlineListRequest, }, // 0x0210 {0, 0, nullptr, }, // 0x0211 {0, 0, nullptr, }, // 0x0212 {0, 0, nullptr, }, // 0x0213 -- cgit v1.2.3-70-g09d2