From 2a92ff7267fe96847720940eceb036d785ded12c Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 20 Mar 2024 15:54:34 +0800 Subject: [PATCH 01/14] 1 --- server/gameserver/handlermgr.cc | 1 + server/gameserver/player.cc | 5 ++ server/gameserver/player.h | 2 + server/tools/protobuild/cs_msgid.proto | 4 ++ server/tools/protobuild/cs_proto.proto | 91 +++++++++++++++++++++++++- 5 files changed, 102 insertions(+), 1 deletion(-) diff --git a/server/gameserver/handlermgr.cc b/server/gameserver/handlermgr.cc index f34c5173..bbf5349a 100644 --- a/server/gameserver/handlermgr.cc +++ b/server/gameserver/handlermgr.cc @@ -135,6 +135,7 @@ void HandlerMgr::RegisterNetMsgHandlers() RegisterNetMsgHandler(&ggmsghandler, &Player::_CMReportSpecShotHitPos); RegisterNetMsgHandler(&ggmsghandler, &Player::_CMWatchTarget); RegisterNetMsgHandler(&ggmsghandler, &Player::_CMTeamCommand); + RegisterNetMsgHandler(&ggmsghandler, &Player::_CMMobaBattleData); } void HandlerMgr::ProcGMMsg(unsigned long saddr, int sockhandle, diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index b9a467e5..debafe86 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -1876,6 +1876,11 @@ void Player::_CMTeamCommand(f8::MsgHdr* hdr, const cs::CMTeamCommand& msg) } } +void Player::_CMMobaBattleData(f8::MsgHdr* hdr, const cs::CMMobaBattleData& msg) +{ + +} + void Player::SetShotHold(bool hold) { if (!hold && shot_hold) { diff --git a/server/gameserver/player.h b/server/gameserver/player.h index 3adc9376..19dbf60a 100644 --- a/server/gameserver/player.h +++ b/server/gameserver/player.h @@ -30,6 +30,7 @@ namespace cs class CMReportSpecShotHitPos; class CMWatchTarget; class CMTeamCommand; + class CMMobaBattleData; } class Room; @@ -147,6 +148,7 @@ class Player : public Human void _CMReportSpecShotHitPos(f8::MsgHdr* hdr, const cs::CMReportSpecShotHitPos& msg); void _CMWatchTarget(f8::MsgHdr* hdr, const cs::CMWatchTarget& msg); void _CMTeamCommand(f8::MsgHdr* hdr, const cs::CMTeamCommand& msg); + void _CMMobaBattleData(f8::MsgHdr* hdr, const cs::CMMobaBattleData& msg); virtual void SetAttackDir(const glm::vec3& attack_dir) override; void AsyncRequestWatchWar(bool send_rsp_msg); diff --git a/server/tools/protobuild/cs_msgid.proto b/server/tools/protobuild/cs_msgid.proto index 4ea23ac3..3e1262cd 100644 --- a/server/tools/protobuild/cs_msgid.proto +++ b/server/tools/protobuild/cs_msgid.proto @@ -34,6 +34,7 @@ enum CMMessageId_e _CMReportSpecShotHitPos = 240; _CMWatchTarget = 241; _CMTeamCommand = 242; + _CMMobaBattleData = 243; } enum SMMessageId_e @@ -49,6 +50,7 @@ enum SMMessageId_e _SMGetSettlementTeamList = 238; _SMWatchTarget = 241; _SMTeamComamnd = 242; + _SMMobaBattleData = 243; _SMJoinedNotify = 103; _SMMapInfo = 1002; @@ -78,4 +80,6 @@ enum SMMessageId_e _SMViewerUiNotify = 1029; _SMViewerUiMemberUpdate = 1030; _SMTeamCommandNotify = 1031; + _SMTeamFullNotify = 1032; + _SMTeamPartNotify = 1033; } diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index 373289e1..b2488f5f 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -739,6 +739,48 @@ message MFTeamData repeated MFSkin skin = 39; //皮肤id } +//队伍数据-全量 +message MFTeamMemberNew +{ + optional int32 team_id = 1; //队伍Id + optional int32 obj_uniid = 2; //玩家id + optional MFVec3 pos = 3; //位置 + optional MFVec3 dir = 4; //方向 + optional float health = 5; //血量 + optional bool disconnected = 6 [default = false]; //是否短线 + optional bool dead = 7 [default = false]; //是否死亡 + optional bool downed = 8 [default = false]; //是否倒下 + optional string name = 9; //名字 + optional float max_health = 10; //最大血量 + optional int32 hero_id = 20 [default = 0]; //英雄id + optional int32 level = 21 [default = 0]; //等级 + optional int32 hero_level = 22; //hero等级 + optional int32 hero_exp = 23; //hero经验 + optional int32 hero_max_exp = 24; //hero max经验 + optional int32 main_skill_cd = 25 [default = 0]; //技能cd时间 +} + +//队伍数据-全量 +message MFTeamFull +{ + optional int32 team_id = 1; //队伍Id + repeated MFTeamMemberNew members = 2; //队伍成员 +} + +//队伍数据-部分 +message MFTeamPart +{ + optional int32 team_id = 1; //队伍Id + optional int32 obj_uniid = 2; //玩家id + optional MFVec3 pos = 3; //位置 + optional MFVec3 dir = 4; //方向 + optional float health = 5; //血量 + optional float max_health = 6; //最大血量 + optional bool disconnected = 7 [default = false]; //是否短线 + optional bool dead = 8 [default = false]; //是否死亡 + optional bool downed = 9 [default = false]; //是否倒下 +} + //队伍数据 message MFTeamDataNew { @@ -1403,7 +1445,6 @@ message MFMobaTeamMember optional int32 head_frame = 10; //头像框 optional int32 obj_uniid = 11; //对象唯一id } - //moba队伍 message MFMobaTeam { @@ -1432,6 +1473,28 @@ message MFViewerTeam repeated MFViewTeamMember members = 2; //成员列表 } +//moba战斗数据-队伍 +message MFMobaBattleDataMember +{ + optional int32 team_id = 1; //队伍id + optional int32 member_uniid = 2; //uniid + optional string avatar_url = 3; //头像 + optional int32 hero_id = 4; //英雄id + optional int32 head_frame = 5; //头像框 + + repeated int32 inventory = 11; //库存(相当于其他游戏里的背包) + + optional int32 main_skill_id = 30; //主技能id + optional int32 main_skill_cd = 31; //主技能cd(单位毫秒) +} + +//moba战斗数据-队伍 +message MFMobaBattleDataTeam +{ + optional int32 team_id = 1; //队伍id + repeated MFMobaBattleDataMember members = 2; //成员列表 +} + //end mfmsg //加入 @@ -1736,6 +1799,16 @@ message CMTeamCommand optional string custom_command = 2; //指令(json格式,客户端自定义) } +//请求moba战斗数据 +message CMMobaBattleData +{ +} + +message SMMobaBattleData +{ + repeated MFMobaBattleDataTeam team_list = 1; //队伍列表(客户端通过判断team_id是否等于自己队伍) +} + //加入成功 message SMJoinedNotify { @@ -2034,3 +2107,19 @@ message SMTeamCommandNotify optional int32 sender_id = 1; //指令发起者 optional string custom_command = 2; //指令(json格式客户端自定义) } + +//队伍信息通知-全量 +/* + 该消息在进入战斗开始后发(注意战前准备阶段不发因为那时可能会发生队伍合并)后续如果断线重连也会补发客户端需要处理多次的问题 + 不同于SMUpdate.team_data该队伍关系不会在发生改变(由于战前准备阶段会有合并队伍的情况所欲SMUpdate.team_data是会发生队伍的变更) + */ +message SMTeamFullNotify +{ + repeated MFTeamFull team_list = 1; //队伍列表 +} + +//队伍信息通知-部分 +message SMTeamPartNotify +{ + repeated MFTeamPart members = 1; //待更新成员列表 +} From b92359e5faf4185100040d132b17516af8da4ccf Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 20 Mar 2024 16:19:09 +0800 Subject: [PATCH 02/14] 1 --- server/gameserver/human.h | 2 ++ server/gameserver/pbutils.cc | 16 ++++++++++++++++ server/gameserver/player.cc | 9 ++++++++- server/gameserver/team.h | 2 ++ 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/server/gameserver/human.h b/server/gameserver/human.h index e7be2733..bd6b84b6 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -17,6 +17,7 @@ namespace cs class MFThrow; class MFSandTableFullMsg; class MFSandTablePartMsg; + class MFMobaBattleDataMember; class SMGameOver; class SMUpdate; } @@ -162,6 +163,7 @@ class Human : public Creature virtual void OnExplosionHit(Explosion* explosion) override; long long GetRealDeadFrameNo(Room* room); void FillMFTeamData(Human* hum, cs::MFTeamData* team_data, bool is_game_over); + void FillMFMobaBattleDataMember(cs::MFMobaBattleDataMember* p); void CarShot(const glm::vec3& target_dir); void BeKill(int killer_id, const std::string& killer_name, int weapon_id, int real_killer_id, const std::string& real_killer_name); diff --git a/server/gameserver/pbutils.cc b/server/gameserver/pbutils.cc index 746ac886..35cb789c 100644 --- a/server/gameserver/pbutils.cc +++ b/server/gameserver/pbutils.cc @@ -1014,6 +1014,11 @@ void Human::FillMFTeamData(Human* hum, cs::MFTeamData* team_data, bool is_game_o } } +void Human::FillMFMobaBattleDataMember(cs::MFMobaBattleDataMember* p) +{ + +} + void Human::FillSMGameOver(cs::SMGameOver& msg) { if (room->GetVictoryTeam()) { @@ -2471,6 +2476,17 @@ void Team::FillSMGameOver(cs::SMGameOver& msg) } } +void Team::FillMFMobaBattleDataTeam(cs::MFMobaBattleDataTeam* p) +{ + p->set_team_id(GetTeamId()); + TraverseMembers + ( + [p] (Human* hum) -> bool + { + hum->FillMFMobaBattleDataMember(p->add_members()); + }); +} + bool PBUtils::SupportSandTable(int proto_version) { return true; diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index debafe86..647d12c6 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -1878,7 +1878,14 @@ void Player::_CMTeamCommand(f8::MsgHdr* hdr, const cs::CMTeamCommand& msg) void Player::_CMMobaBattleData(f8::MsgHdr* hdr, const cs::CMMobaBattleData& msg) { - + if (room->IsMobaModeRoom()) { + cs::SMMobaBattleData rsp_msg; + std::vector team_list = {room->GetMobaTeamA(), room->GetMobaTeamB()}; + for (Team* team : team_list) { + team->FillMFMobaBattleDataTeam(rsp_msg.add_team_list()); + } + SendNotifyMsg(rsp_msg); + } } void Player::SetShotHold(bool hold) diff --git a/server/gameserver/team.h b/server/gameserver/team.h index 3cf04c3c..6b32e1f5 100644 --- a/server/gameserver/team.h +++ b/server/gameserver/team.h @@ -3,6 +3,7 @@ namespace cs { class SMGameOver; + class MFMobaBattleDataTeam; } namespace a8 @@ -61,6 +62,7 @@ class Team : public std::enable_shared_from_this int GetKillCount(); long long GetLastKillFrameNo() { return last_kill_frameno_; } bool MemberHasOb(); + void FillMFMobaBattleDataTeam(cs::MFMobaBattleDataTeam* p); private: int team_id_ = 0; From 0ae28498fe05c5237cb7b0cb94dcadf15f7ac699 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 20 Mar 2024 16:39:25 +0800 Subject: [PATCH 03/14] 1 --- server/gameserver/pbutils.cc | 15 +++++++++++++++ server/tools/protobuild/cs_proto.proto | 10 +++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/server/gameserver/pbutils.cc b/server/gameserver/pbutils.cc index 35cb789c..cc744a05 100644 --- a/server/gameserver/pbutils.cc +++ b/server/gameserver/pbutils.cc @@ -1016,7 +1016,22 @@ void Human::FillMFTeamData(Human* hum, cs::MFTeamData* team_data, bool is_game_o void Human::FillMFMobaBattleDataMember(cs::MFMobaBattleDataMember* p) { + p->set_team_id(GetTeam()->GetTeamId()); + p->set_member_uniid(GetUniId()); + p->set_name(name); + p->set_avatar_url(avatar_url); + p->set_hero_id(GetNetData()->GetHeroId()); + p->set_head_frame(head_frame); + for (auto& inv : GetInventoryData()) { + p->add_inventory(inv.num); + } + p->set_kill_count(stats->kills); + p->set_dead_count(stats->dead_times); + p->set_assist_count(stats->assist); + + p->set_main_skill_id(GetMainSkill()->GetSkillId()); + p->set_main_skill_cd(GetMainSkill()->GetLeftTime()); } void Human::FillSMGameOver(cs::SMGameOver& msg) diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index b2488f5f..d3a26006 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -1478,11 +1478,15 @@ message MFMobaBattleDataMember { optional int32 team_id = 1; //队伍id optional int32 member_uniid = 2; //uniid - optional string avatar_url = 3; //头像 - optional int32 hero_id = 4; //英雄id - optional int32 head_frame = 5; //头像框 + optional string name = 3; //名字 + optional string avatar_url = 4; //头像 + optional int32 hero_id = 5; //英雄id + optional int32 head_frame = 6; //头像框 repeated int32 inventory = 11; //库存(相当于其他游戏里的背包) + optional int32 kill_count = 12; //击杀数 + optional int32 dead_count = 13; //死亡次数(被杀数) + optional int32 assist_count = 14; //助攻次数 optional int32 main_skill_id = 30; //主技能id optional int32 main_skill_cd = 31; //主技能cd(单位毫秒) From fb60ecd301538028064e2fe0384eb5c019693dbe Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 20 Mar 2024 17:00:35 +0800 Subject: [PATCH 04/14] 1 --- server/gameserver/human.h | 2 ++ server/gameserver/pbutils.cc | 10 ++++++++++ server/gameserver/team.h | 4 +++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/server/gameserver/human.h b/server/gameserver/human.h index bd6b84b6..70220e03 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -18,6 +18,7 @@ namespace cs class MFSandTableFullMsg; class MFSandTablePartMsg; class MFMobaBattleDataMember; + class MFTeamPart; class SMGameOver; class SMUpdate; } @@ -164,6 +165,7 @@ class Human : public Creature long long GetRealDeadFrameNo(Room* room); void FillMFTeamData(Human* hum, cs::MFTeamData* team_data, bool is_game_over); void FillMFMobaBattleDataMember(cs::MFMobaBattleDataMember* p); + void FillMFTeamPart(cs::MFTeamPart* p); void CarShot(const glm::vec3& target_dir); void BeKill(int killer_id, const std::string& killer_name, int weapon_id, int real_killer_id, const std::string& real_killer_name); diff --git a/server/gameserver/pbutils.cc b/server/gameserver/pbutils.cc index cc744a05..a9dd6a76 100644 --- a/server/gameserver/pbutils.cc +++ b/server/gameserver/pbutils.cc @@ -1034,6 +1034,11 @@ void Human::FillMFMobaBattleDataMember(cs::MFMobaBattleDataMember* p) p->set_main_skill_cd(GetMainSkill()->GetLeftTime()); } +void Human::FillMFTeamPart(cs::MFTeamPart* p) +{ + +} + void Human::FillSMGameOver(cs::SMGameOver& msg) { if (room->GetVictoryTeam()) { @@ -2502,6 +2507,11 @@ void Team::FillMFMobaBattleDataTeam(cs::MFMobaBattleDataTeam* p) }); } +void Team::FillSMTeamFullNotify(cs::SMTeamFullNotify* p) +{ + +} + bool PBUtils::SupportSandTable(int proto_version) { return true; diff --git a/server/gameserver/team.h b/server/gameserver/team.h index 6b32e1f5..97eb49be 100644 --- a/server/gameserver/team.h +++ b/server/gameserver/team.h @@ -2,8 +2,9 @@ namespace cs { - class SMGameOver; class MFMobaBattleDataTeam; + class SMGameOver; + class SMTeamFullNotify; } namespace a8 @@ -63,6 +64,7 @@ class Team : public std::enable_shared_from_this long long GetLastKillFrameNo() { return last_kill_frameno_; } bool MemberHasOb(); void FillMFMobaBattleDataTeam(cs::MFMobaBattleDataTeam* p); + void FillSMTeamFullNotify(cs::SMTeamFullNotify* p); private: int team_id_ = 0; From 293b7050052ce8ae72f83c9e12b6eb2824f10562 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 20 Mar 2024 17:08:56 +0800 Subject: [PATCH 05/14] 1 --- server/gameserver/human.h | 2 ++ server/gameserver/pbutils.cc | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 70220e03..e8f8d492 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -19,6 +19,7 @@ namespace cs class MFSandTablePartMsg; class MFMobaBattleDataMember; class MFTeamPart; + class MFTeamMemberNew; class SMGameOver; class SMUpdate; } @@ -166,6 +167,7 @@ class Human : public Creature void FillMFTeamData(Human* hum, cs::MFTeamData* team_data, bool is_game_over); void FillMFMobaBattleDataMember(cs::MFMobaBattleDataMember* p); void FillMFTeamPart(cs::MFTeamPart* p); + void FillMFTeamMemberNew(cs::MFTeamMemberNew* p); void CarShot(const glm::vec3& target_dir); void BeKill(int killer_id, const std::string& killer_name, int weapon_id, int real_killer_id, const std::string& real_killer_name); diff --git a/server/gameserver/pbutils.cc b/server/gameserver/pbutils.cc index a9dd6a76..b85a4fb0 100644 --- a/server/gameserver/pbutils.cc +++ b/server/gameserver/pbutils.cc @@ -1039,6 +1039,11 @@ void Human::FillMFTeamPart(cs::MFTeamPart* p) } +void Human::FillMFTeamMemberNew(cs::MFTeamMemberNew* p) +{ + +} + void Human::FillSMGameOver(cs::SMGameOver& msg) { if (room->GetVictoryTeam()) { From 5a3d41487f5866c769d48c4f0da3d1a85830fadf Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 20 Mar 2024 17:15:50 +0800 Subject: [PATCH 06/14] 1 --- server/gameserver/pbutils.cc | 10 ++++++++-- server/gameserver/team.h | 4 ++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/server/gameserver/pbutils.cc b/server/gameserver/pbutils.cc index b85a4fb0..0b70974a 100644 --- a/server/gameserver/pbutils.cc +++ b/server/gameserver/pbutils.cc @@ -2512,9 +2512,15 @@ void Team::FillMFMobaBattleDataTeam(cs::MFMobaBattleDataTeam* p) }); } -void Team::FillSMTeamFullNotify(cs::SMTeamFullNotify* p) +void Team::FillMFTeamFull(cs::MFTeamFull* p) { - + p->set_team_id(GetTeamId()); + TraverseMembers + ( + [p] (Human* hum) -> bool + { + hum->FillMFTeamMemberNew(p->add_members()); + }); } bool PBUtils::SupportSandTable(int proto_version) diff --git a/server/gameserver/team.h b/server/gameserver/team.h index 97eb49be..1968341d 100644 --- a/server/gameserver/team.h +++ b/server/gameserver/team.h @@ -3,8 +3,8 @@ namespace cs { class MFMobaBattleDataTeam; + class MFTeamFull; class SMGameOver; - class SMTeamFullNotify; } namespace a8 @@ -64,7 +64,7 @@ class Team : public std::enable_shared_from_this long long GetLastKillFrameNo() { return last_kill_frameno_; } bool MemberHasOb(); void FillMFMobaBattleDataTeam(cs::MFMobaBattleDataTeam* p); - void FillSMTeamFullNotify(cs::SMTeamFullNotify* p); + void FillMFTeamFull(cs::MFTeamFull* p); private: int team_id_ = 0; From 9363febfc27c7ff5f2b8b244be0185a4b6900d9e Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 20 Mar 2024 17:23:00 +0800 Subject: [PATCH 07/14] 1 --- server/gameserver/pbutils.cc | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/server/gameserver/pbutils.cc b/server/gameserver/pbutils.cc index 0b70974a..4472f562 100644 --- a/server/gameserver/pbutils.cc +++ b/server/gameserver/pbutils.cc @@ -1036,12 +1036,37 @@ void Human::FillMFMobaBattleDataMember(cs::MFMobaBattleDataMember* p) void Human::FillMFTeamPart(cs::MFTeamPart* p) { + p->set_team_id(GetTeam()->GetTeamId()); + p->set_obj_uniid(GetUniId()); + TypeConvert::ToPb(GetPos(), p->mutable_pos()); + TypeConvert::ToPb(GetAttackDir(), p->mutable_dir()); + p->set_health(GetHP()); + p->set_max_health(GetMaxHP()); + p->set_disconnected(disconnected); + p->set_dead(dead); + p->set_downed(downed); } void Human::FillMFTeamMemberNew(cs::MFTeamMemberNew* p) { + p->set_team_id(GetTeam()->GetTeamId()); + p->set_obj_uniid(GetUniId()); + TypeConvert::ToPb(GetPos(), p->mutable_pos()); + TypeConvert::ToPb(GetAttackDir(), p->mutable_dir()); + p->set_health(GetHP()); + p->set_disconnected(disconnected); + p->set_dead(dead); + p->set_downed(downed); + p->set_name(name); + p->set_max_health(GetMaxHP()); + p->set_hero_id(GetNetData()->GetHeroId()); + p->set_level(GetNetData()->GetLevel()); + p->set_hero_level(GetHeroLevel()); + p->set_hero_exp(GetHeroExp()); + p->set_hero_max_exp(GetHeroMaxExp()); + p->set_main_skill_cd(GetMainSkill()->GetLeftTime()); } void Human::FillSMGameOver(cs::SMGameOver& msg) From b4b4af5985c16a6606451844dac2cddc821b1ae2 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 20 Mar 2024 18:00:55 +0800 Subject: [PATCH 08/14] 1 --- server/gameserver/human.cc | 1 + server/gameserver/pbutils.cc | 10 ++++++++++ server/gameserver/room.h | 3 +++ 3 files changed, 14 insertions(+) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index d864cfd5..2eee0688 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -432,6 +432,7 @@ void Human::DecHP(float dec_hp, int killer_id, const std::string killer_name, in } } GetTrigger()->HpChg(); + room->OnHumanHpChg(this); } void Human::AddToNewObjects(Entity* entity) diff --git a/server/gameserver/pbutils.cc b/server/gameserver/pbutils.cc index 4472f562..dcc11a67 100644 --- a/server/gameserver/pbutils.cc +++ b/server/gameserver/pbutils.cc @@ -2634,6 +2634,16 @@ void Room::NotifyKillList(const std::vector& uniid_list) }); } +void Room::SendSMTeamFull(Human* hum) +{ + +} + +void Room::OnHumanHpChg(Human* hum) +{ + +} + int Room::InitWithCustomBattle(long ip_saddr, int socket_handle, std::shared_ptr msg, std::shared_ptr p) { diff --git a/server/gameserver/room.h b/server/gameserver/room.h index 04d27ced..8d5847fc 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -285,6 +285,8 @@ public: void CreateAndroid(int android_num, std::shared_ptr team = nullptr); int GetFullLevelIdx() { return ++curr_full_level_idx_;} std::shared_ptr GetRoomOb(); + void SendSMTeamFull(Human* hum); + void OnHumanHpChg(Human* hum); private: void ShuaAndroid(); @@ -397,6 +399,7 @@ private: std::map alive_human_hash_; std::map alive_player_hash_; std::map last_human_hash_; + std::map hpchg_human_hash_; std::map> born_point_hash_; std::map> task_hash_; From 8196130498dfaf88ff5942949b8d4f21bae77e6d Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 20 Mar 2024 19:21:50 +0800 Subject: [PATCH 09/14] 1 --- server/gameserver/human.cc | 2 +- server/gameserver/pbutils.cc | 16 ++++++++++++++-- server/gameserver/room.h | 2 +- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 2eee0688..83c10292 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -432,7 +432,7 @@ void Human::DecHP(float dec_hp, int killer_id, const std::string killer_name, in } } GetTrigger()->HpChg(); - room->OnHumanHpChg(this); + room->OnTeamPartChg(this); } void Human::AddToNewObjects(Entity* entity) diff --git a/server/gameserver/pbutils.cc b/server/gameserver/pbutils.cc index dcc11a67..f5c4bf39 100644 --- a/server/gameserver/pbutils.cc +++ b/server/gameserver/pbutils.cc @@ -2639,9 +2639,21 @@ void Room::SendSMTeamFull(Human* hum) } -void Room::OnHumanHpChg(Human* hum) +void Room::OnTeamPartChg(Human* hum) { - + if (hpchg_human_hash_.empty()) { + hpchg_human_hash_[hum->GetUniId()] = hum; + xtimer.SetTimeoutWpEx + (SERVER_FRAME_RATE * 0.5, + [this] (int event, const a8::Args* args) + { + if (a8::TIMER_EXEC_EVENT == event) { + hpchg_human_hash_.clear(); + } + }, + &xtimer_attacher_); + hpchg_human_hash_[hum->GetUniId()] = hum; + } } int Room::InitWithCustomBattle(long ip_saddr, int socket_handle, std::shared_ptr msg, diff --git a/server/gameserver/room.h b/server/gameserver/room.h index 8d5847fc..c70dd7d0 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -286,7 +286,7 @@ public: int GetFullLevelIdx() { return ++curr_full_level_idx_;} std::shared_ptr GetRoomOb(); void SendSMTeamFull(Human* hum); - void OnHumanHpChg(Human* hum); + void OnTeamPartChg(Human* hum); private: void ShuaAndroid(); From 93d19816de5fc6e06492d6a5f22f95b36de2afc7 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 20 Mar 2024 19:27:08 +0800 Subject: [PATCH 10/14] 1 --- server/gameserver/pbutils.cc | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/server/gameserver/pbutils.cc b/server/gameserver/pbutils.cc index f5c4bf39..839fe636 100644 --- a/server/gameserver/pbutils.cc +++ b/server/gameserver/pbutils.cc @@ -2641,6 +2641,9 @@ void Room::SendSMTeamFull(Human* hum) void Room::OnTeamPartChg(Human* hum) { + if (!IsMobaModeRoom()) { + return; + } if (hpchg_human_hash_.empty()) { hpchg_human_hash_[hum->GetUniId()] = hum; xtimer.SetTimeoutWpEx @@ -2648,6 +2651,17 @@ void Room::OnTeamPartChg(Human* hum) [this] (int event, const a8::Args* args) { if (a8::TIMER_EXEC_EVENT == event) { + cs::SMTeamPartNotify notify_msg; + for (auto& pair : hpchg_human_hash_) { + pair.second->FillMFTeamPart(notify_msg.add_members()); + } + TraversePlayerList + ( + [¬ify_msg] (Player* hum) -> bool + { + hum->SendNotifyMsg(notify_msg); + return true; + }); hpchg_human_hash_.clear(); } }, From ef3bdcf12317aae84d67fde46b1cc3e17d22428e Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 20 Mar 2024 19:52:44 +0800 Subject: [PATCH 11/14] 1 --- server/gameserver/pbutils.cc | 27 ++++++++++++++++++++------ server/gameserver/room.cc | 1 + server/gameserver/room.h | 2 +- server/tools/protobuild/cs_proto.proto | 2 ++ 4 files changed, 25 insertions(+), 7 deletions(-) diff --git a/server/gameserver/pbutils.cc b/server/gameserver/pbutils.cc index 839fe636..7f474073 100644 --- a/server/gameserver/pbutils.cc +++ b/server/gameserver/pbutils.cc @@ -2636,7 +2636,21 @@ void Room::NotifyKillList(const std::vector& uniid_list) void Room::SendSMTeamFull(Human* hum) { - + if (!IsMobaModeRoom()) { + return; + } + cs::SMTeamFullNotify notify_msg; + std::vector team_list = {GetMobaTeamA(), GetMobaTeamB()}; + for (Team* team : team_list) { + team->FillMFTeamFull(notify_msg.add_team_list()); + } + TraversePlayerList + ( + [¬ify_msg] (Player* hum) -> bool + { + hum->SendNotifyMsg(notify_msg); + return true; + }); } void Room::OnTeamPartChg(Human* hum) @@ -2644,15 +2658,15 @@ void Room::OnTeamPartChg(Human* hum) if (!IsMobaModeRoom()) { return; } - if (hpchg_human_hash_.empty()) { - hpchg_human_hash_[hum->GetUniId()] = hum; + if (team_part_chg_human_hash_.empty()) { + team_part_chg_human_hash_[hum->GetUniId()] = hum; xtimer.SetTimeoutWpEx (SERVER_FRAME_RATE * 0.5, [this] (int event, const a8::Args* args) { if (a8::TIMER_EXEC_EVENT == event) { cs::SMTeamPartNotify notify_msg; - for (auto& pair : hpchg_human_hash_) { + for (auto& pair : team_part_chg_human_hash_) { pair.second->FillMFTeamPart(notify_msg.add_members()); } TraversePlayerList @@ -2662,11 +2676,12 @@ void Room::OnTeamPartChg(Human* hum) hum->SendNotifyMsg(notify_msg); return true; }); - hpchg_human_hash_.clear(); + team_part_chg_human_hash_.clear(); } }, &xtimer_attacher_); - hpchg_human_hash_[hum->GetUniId()] = hum; + } else { + team_part_chg_human_hash_[hum->GetUniId()] = hum; } } diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 3e3f7884..c77d4872 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -2997,6 +2997,7 @@ void Room::OnBattleStart() return true; }); battle_starting_ = false; + SendSMTeamFull(nullptr); } bool Room::CanAddObstacle(const glm::vec3& pos, int obstacle_id) diff --git a/server/gameserver/room.h b/server/gameserver/room.h index c70dd7d0..48d62c73 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -399,7 +399,7 @@ private: std::map alive_human_hash_; std::map alive_player_hash_; std::map last_human_hash_; - std::map hpchg_human_hash_; + std::map team_part_chg_human_hash_; std::map> born_point_hash_; std::map> task_hash_; diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index d3a26006..03a8b153 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -2005,6 +2005,8 @@ message SMUiUpdate optional int32 alive_count = 1; //存活数量 optional int32 kill_count = 2; //击杀数 repeated MFMapCarInfo car_list = 3; //载具列表 + optional int32 dead_count = 4; //死亡次数(被杀数) + optional int32 assist_count = 5; //助攻次数 //一下只有pve模式有意义 optional int32 score = 10; //积分 From bbb019c1fd23927b69b957b97a2ef5783be554f7 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 21 Mar 2024 10:36:35 +0800 Subject: [PATCH 12/14] 1 --- server/gameserver/human.cc | 2 ++ server/gameserver/pbutils.cc | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 83c10292..ad21529b 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -3554,6 +3554,7 @@ void Human::InternalBeKill(int killer_id, const std::string& killer_name, int we } } SendViewerUiMemberUpdate({GetUniId(), killer_id, real_killer_id}); + room->NotifyUiUpdate(); } int Human::GetTeamMode() @@ -3577,6 +3578,7 @@ void Human::CalcAssists(Human* target) if (hum->room->GetFrameNo() - itr->second < SERVER_FRAME_RATE * assist_time) { ++hum->stats->assist; + room->NotifyUiUpdate(); } } return true; diff --git a/server/gameserver/pbutils.cc b/server/gameserver/pbutils.cc index 7f474073..1e2beff3 100644 --- a/server/gameserver/pbutils.cc +++ b/server/gameserver/pbutils.cc @@ -1779,6 +1779,8 @@ void Human::SendUIUpdate() cs::SMUiUpdate notifymsg; notifymsg.set_alive_count(room->AliveCount()); notifymsg.set_kill_count(stats->kills); + notifymsg.set_dead_count(stats->dead_times); + notifymsg.set_assist_count(stats->assist); room->FillSMUiUpdate(notifymsg); if (room->IsPveRoom()) { notifymsg.set_score(stats->pve_rank_score); @@ -2545,6 +2547,7 @@ void Team::FillMFTeamFull(cs::MFTeamFull* p) [p] (Human* hum) -> bool { hum->FillMFTeamMemberNew(p->add_members()); + return true; }); } @@ -2648,6 +2651,9 @@ void Room::SendSMTeamFull(Human* hum) ( [¬ify_msg] (Player* hum) -> bool { +#ifdef MYDEBUG1 + a8::XPrintf("SMTeamFull:%s\n", {f8::PbToJson(¬ify_msg)}); +#endif hum->SendNotifyMsg(notify_msg); return true; }); @@ -2673,6 +2679,9 @@ void Room::OnTeamPartChg(Human* hum) ( [¬ify_msg] (Player* hum) -> bool { +#ifdef MYDEBUG1 + a8::XPrintf("SMTeamPart:%s\n", {f8::PbToJson(¬ify_msg)}); +#endif hum->SendNotifyMsg(notify_msg); return true; }); From 73d75120633255951c476c9c7fa53d7ee84fe852 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 21 Mar 2024 16:26:11 +0800 Subject: [PATCH 13/14] 1 --- server/gameserver/pbutils.cc | 2 ++ server/tools/protobuild/cs_proto.proto | 1 + 2 files changed, 3 insertions(+) diff --git a/server/gameserver/pbutils.cc b/server/gameserver/pbutils.cc index 1e2beff3..c6e75cf8 100644 --- a/server/gameserver/pbutils.cc +++ b/server/gameserver/pbutils.cc @@ -1067,6 +1067,7 @@ void Human::FillMFTeamMemberNew(cs::MFTeamMemberNew* p) p->set_hero_exp(GetHeroExp()); p->set_hero_max_exp(GetHeroMaxExp()); p->set_main_skill_cd(GetMainSkill()->GetLeftTime()); + p->set_main_skill_max_cd(GetMainSkill()->GetCd()); } void Human::FillSMGameOver(cs::SMGameOver& msg) @@ -2536,6 +2537,7 @@ void Team::FillMFMobaBattleDataTeam(cs::MFMobaBattleDataTeam* p) [p] (Human* hum) -> bool { hum->FillMFMobaBattleDataMember(p->add_members()); + return true; }); } diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index 03a8b153..83e1ea83 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -758,6 +758,7 @@ message MFTeamMemberNew optional int32 hero_exp = 23; //hero经验 optional int32 hero_max_exp = 24; //hero max经验 optional int32 main_skill_cd = 25 [default = 0]; //技能cd时间 + optional int32 main_skill_max_cd = 26 [default = 0]; //技能cd上限时间 } //队伍数据-全量 From f38b94fd40f1c1a957e5653c8e2f360e41f25c04 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 21 Mar 2024 16:41:04 +0800 Subject: [PATCH 14/14] 1 --- server/gameserver/pbutils.cc | 1 + server/tools/protobuild/cs_proto.proto | 1 + 2 files changed, 2 insertions(+) diff --git a/server/gameserver/pbutils.cc b/server/gameserver/pbutils.cc index c6e75cf8..1335b3a5 100644 --- a/server/gameserver/pbutils.cc +++ b/server/gameserver/pbutils.cc @@ -1032,6 +1032,7 @@ void Human::FillMFMobaBattleDataMember(cs::MFMobaBattleDataMember* p) p->set_main_skill_id(GetMainSkill()->GetSkillId()); p->set_main_skill_cd(GetMainSkill()->GetLeftTime()); + p->set_main_skill_max_cd(GetMainSkill()->GetCd()); } void Human::FillMFTeamPart(cs::MFTeamPart* p) diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index 83e1ea83..c901c86e 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -1491,6 +1491,7 @@ message MFMobaBattleDataMember optional int32 main_skill_id = 30; //主技能id optional int32 main_skill_cd = 31; //主技能cd(单位毫秒) + optional int32 main_skill_max_cd = 32 [default = 0]; //技能cd上限时间 } //moba战斗数据-队伍