From 2dfbb56609c8ccd0cc66c2e4e7f6eee8988f1bb0 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 30 Jan 2024 19:02:28 +0800 Subject: [PATCH] 1 --- server/gameserver/human.h | 2 + server/gameserver/pbutils.cc | 58 ++++++++++++++++++++++++++ server/gameserver/player.cc | 1 + server/gameserver/roomob.cc | 5 +++ server/gameserver/roomob.h | 1 + server/tools/protobuild/cs_proto.proto | 2 +- 6 files changed, 68 insertions(+), 1 deletion(-) diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 44812849..281209aa 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -274,6 +274,8 @@ class Human : public Creature std::shared_ptr p); const std::shared_ptr GetBornPoint() { return born_point_; } void SetBornPoint(std::shared_ptr born_point); + void SendViewerUiNotify(); + void SendViewerUiMemberUpdate(std::vector member_ids); protected: void ProcLootWeapon(AddItemDTO& dto); diff --git a/server/gameserver/pbutils.cc b/server/gameserver/pbutils.cc index 0516da5f..87b7650f 100644 --- a/server/gameserver/pbutils.cc +++ b/server/gameserver/pbutils.cc @@ -2151,6 +2151,64 @@ void Human::ReJoin(long ip_saddr, int socket_handle, std::shared_ptr }, &xtimer_attacher); } + SendViewerUiNotify(); +} + +void Human::SendViewerUiNotify() +{ + if (!IsOb()) { + return; + } + cs::SMViewerUiNotify msg; + room->TraverseTeams + ( + [&msg] (Team* team) mutable -> bool + { + auto team_pb = msg.add_team_list(); + team_pb->set_team_id(team->GetTeamId()); + team->TraverseMembers + ( + [team_pb] (Human* hum) + { + auto m = team_pb->add_members(); + m->set_team_id(hum->GetTeam()->GetTeamId()); + m->set_member_uniid(hum->GetUniId()); + m->set_name(hum->GetName()); + m->set_avatar_url(hum->avatar_url); + m->set_hero_id(hum->meta->id()); + m->set_head_frame(hum->head_frame); + m->set_kills(hum->stats->kills); + m->set_dead(hum->dead); + m->set_downed(hum->downed); + return true; + }); + return true; + }); + SendNotifyMsg(msg); +} + +void Human::SendViewerUiMemberUpdate(std::vector member_ids) +{ + if (!IsOb()) { + return; + } + cs::SMViewerUiMemberUpdate msg; + for (int id : member_ids) { + Player* hum = room->GetPlayerByUniId(id); + if (hum) { + auto m = msg.add_members(); + m->set_team_id(hum->GetTeam()->GetTeamId()); + m->set_member_uniid(hum->GetUniId()); + m->set_name(hum->GetName()); + m->set_avatar_url(hum->avatar_url); + m->set_hero_id(hum->meta->id()); + m->set_head_frame(hum->head_frame); + m->set_kills(hum->stats->kills); + m->set_dead(hum->dead); + m->set_downed(hum->downed); + } + } + SendNotifyMsg(msg); } void GGListener::SendError(int sockhandle, unsigned int seqid, diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 78e6ceb7..c429da2b 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -926,6 +926,7 @@ void Player::_CMReconnect(f8::MsgHdr* hdr, const cs::CMReconnect& msg) if (!room->game_over_timer.expired()) { room->xtimer.Delete(room->game_over_timer); } + SendViewerUiNotify(); } void Player::_CMMove(f8::MsgHdr* hdr, const cs::CMMove& msg) diff --git a/server/gameserver/roomob.cc b/server/gameserver/roomob.cc index 2a14180d..9c317f7e 100644 --- a/server/gameserver/roomob.cc +++ b/server/gameserver/roomob.cc @@ -33,3 +33,8 @@ void RoomOb::AddOb(Player* hum) { } + +void RoomOb::SendViewerUiMemberUpdate(std::vector member_ids) +{ + +} diff --git a/server/gameserver/roomob.h b/server/gameserver/roomob.h index 4873baba..d2e8512d 100644 --- a/server/gameserver/roomob.h +++ b/server/gameserver/roomob.h @@ -14,6 +14,7 @@ class RoomOb : public std::enable_shared_from_this Player* GetByAccountId(const std::string& account_id); void AddOb(Player* hum); + void SendViewerUiMemberUpdate(std::vector member_ids); private: Room* room_ = nullptr; diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index 8481b031..5f26a837 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -1424,7 +1424,7 @@ message MFViewTeamMember message MFViewerTeam { optional int32 team_id = 1; //队伍id - repeated MFMobaTeamMember members = 2; //成员列表 + repeated MFViewTeamMember members = 2; //成员列表 } //end mfmsg