This commit is contained in:
aozhiwei 2024-03-26 09:01:39 +08:00
parent 49b03c656c
commit b3c0362a3e

View File

@ -131,9 +131,9 @@ static void Human_FillBodyState(Human* self, ::google::protobuf::RepeatedPtrFiel
static Player* InternalCreatePlayer(std::shared_ptr<CustomBattle> p, static Player* InternalCreatePlayer(std::shared_ptr<CustomBattle> p,
std::shared_ptr<CustomMember> m, std::shared_ptr<CustomMember> m,
std::shared_ptr<Team> room_team, std::shared_ptr<Team> room_team,
cs::CMJoin& join_msg,
std::function<void (Player*)> on_preadd = nullptr) std::function<void (Player*)> on_preadd = nullptr)
{ {
cs::CMJoin join_msg;
Player* hum = p->GetRoom()->NewPlayer(); Player* hum = p->GetRoom()->NewPlayer();
//hum->ip_saddr = ip_saddr; //hum->ip_saddr = ip_saddr;
//hum->socket_handle = socket_handle; //hum->socket_handle = socket_handle;
@ -2247,7 +2247,7 @@ void Human::PushJoinRoomMsg()
} }
} }
void Human::ReJoin(long ip_saddr, int socket_handle, std::shared_ptr<cs::CMJoin> msg) void Human::ReJoin(long ip_saddr, int socket_handle, std::shared_ptr<cs::CMJoin> msg1)
{ {
if (!IsPlayer()) { if (!IsPlayer()) {
abort(); abort();
@ -2724,7 +2724,7 @@ int Room::InitWithCustomBattle(long ip_saddr, int socket_handle, std::shared_ptr
( (
[join_msg, p, room_team] (std::shared_ptr<CustomMember> m) mutable -> bool [join_msg, p, room_team] (std::shared_ptr<CustomMember> m) mutable -> bool
{ {
Player* hum = InternalCreatePlayer(p, m, room_team, join_msg); Player* hum = InternalCreatePlayer(p, m, room_team);
return true; return true;
} }
); );
@ -2843,7 +2843,6 @@ int Room::InitWithCustomBattle(long ip_saddr, int socket_handle, std::shared_ptr
int Room::JoinWithCustomBattle(std::shared_ptr<CustomBattle> p) int Room::JoinWithCustomBattle(std::shared_ptr<CustomBattle> p)
{ {
#if 1
std::vector<std::shared_ptr<Team>> room_teams; std::vector<std::shared_ptr<Team>> room_teams;
std::vector<std::shared_ptr<CustomTeam>> net_teams; std::vector<std::shared_ptr<CustomTeam>> net_teams;
p->TraverseTeamList p->TraverseTeamList
@ -2873,139 +2872,46 @@ int Room::JoinWithCustomBattle(std::shared_ptr<CustomBattle> p)
auto new_team = NewViewTeam(); auto new_team = NewViewTeam();
new_team->SetInitTeamMemberNum(0); new_team->SetInitTeamMemberNum(0);
new_team->SetAutoFill(true); new_team->SetAutoFill(true);
#if 0 Player* hum = InternalCreatePlayer(p, m, new_team,
Player* hum = InternalCreatePlayer(p, m, new_team, join_msg,
[p] (Player* hum) [p] (Player* hum)
{ {
a8::SetBitFlag(hum->status, CS_IsOb); a8::SetBitFlag(hum->status, CS_IsOb);
p->GetRoom()->GetRoomOb()->AddOb(hum); p->GetRoom()->GetRoomOb()->AddOb(hum);
}); });
#endif
return true; return true;
}); });
} }
#if 0
{ {
auto hum = GetPlayerByAccountId(msg->account_id()); for (size_t i = 0; i < net_teams.size(); ++i) {
if (hum) { auto net_team = net_teams.at(i);
hum->ReJoin(ip_saddr, socket_handle, msg); auto room_team = room_teams.at(i);
} else { net_team->TraverseMember
auto hum = p->GetRoom()->GetRoomOb()->GetByAccountId(msg->account_id());
if (hum) {
hum->ReJoin(ip_saddr, socket_handle, msg);
}
}
}
#endif
#else
std::vector<std::shared_ptr<Team>> room_teams;
std::vector<std::shared_ptr<CustomTeam>> net_teams;
p->TraverseTeamList
(
[this, &room_teams, &net_teams] (std::shared_ptr<CustomTeam> team) -> bool
{
auto new_team = NewTeam();
new_team->SetInitTeamMemberNum(0);
new_team->SetAutoFill(true);
room_teams.push_back(new_team);
net_teams.push_back(team);
return true;
});
if (room_teams.empty()) {
abort();
}
if (IsMobaModeRoom() &&
room_teams.size() > 2) {
abort();
}
cs::CMJoin join_msg = *msg;
for (size_t i = 0; i < net_teams.size(); ++i) {
auto net_team = net_teams.at(i);
auto room_team = room_teams.at(i);
room_team->SetInitTeamMemberNum(net_team->GetMemberNum());
net_team->TraverseMember
(
[join_msg, p, room_team] (std::shared_ptr<CustomMember> m) mutable -> bool
{
Player* hum = InternalCreatePlayer(p, m, room_team, join_msg);
return true;
}
);
}
if (IsMobaModeRoom()) {
if (room_teams.size() < 2) {
auto new_team = NewTeam();
new_team->SetInitTeamMemberNum(0);
new_team->SetAutoFill(true);
room_teams.push_back(new_team);
}
int side = a8::RandEx(1, 2);
for (size_t i = 0; i < 2; ++i) {
auto team = room_teams.at(i);
if (team->GetMemberNum() < MAX_TEAM_NUM) {
CreateAndroid(MAX_TEAM_NUM - team->GetMemberNum(), team);
}
if (i == 0) {
moba_team_a_ = team.get();
} else {
moba_team_b_ = team.get();
}
team->TraverseMembers
( (
[this, side] (Human* hum) -> bool [this, p, room_team] (std::shared_ptr<CustomMember> m) mutable -> bool
{ {
hum->side = side; if (!m->IsAndroid()) {
std::shared_ptr<BornPoint> born_point = std::make_shared<BornPoint>(); auto hum = GetPlayerByAccountId(m->GetAccountId());
born_point->wo_meta = std::get<0>(GetMapMeta()->moba_born_points.at(side - 1)); if (hum) {
hum->SetBornPoint(born_point); hum->ReJoin(m->GetIpSaddr(), m->GetSocketHandle(), nullptr);
hum->InitMobaRoad(); }
#ifdef MYDEBUG }
a8::XPrintf("moba init uniid:%d team_id:%d side:%d wo_meta:%d\n",
{
hum->GetUniId(),
hum->GetTeam()->GetTeamId(),
hum->side,
(long long)hum->GetBornPoint()->wo_meta.get()
});
#endif
return true; return true;
}); }
if (side == 1) { );
side = 2;
} else {
side = 1;
}
} }
}
{
p->TraverseObList p->TraverseObList
( (
[this, join_msg, p] (std::shared_ptr<CustomMember> m) mutable -> bool [this, p] (std::shared_ptr<CustomMember> m) mutable -> bool
{ {
auto new_team = NewViewTeam(); if (!m->IsAndroid()) {
new_team->SetInitTeamMemberNum(0); auto hum = GetRoomOb()->GetByAccountId(m->GetAccountId());
new_team->SetAutoFill(true); if (hum) {
Player* hum = InternalCreatePlayer(p, m, new_team, join_msg, hum->ReJoin(m->GetIpSaddr(), m->GetSocketHandle(), nullptr);
[p] (Player* hum) }
{ }
a8::SetBitFlag(hum->status, CS_IsOb);
p->GetRoom()->GetRoomOb()->AddOb(hum);
});
return true; return true;
}); });
} }
{
auto hum = GetPlayerByAccountId(msg->account_id());
if (hum) {
hum->ReJoin(ip_saddr, socket_handle, msg);
} else {
auto hum = p->GetRoom()->GetRoomOb()->GetByAccountId(msg->account_id());
if (hum) {
hum->ReJoin(ip_saddr, socket_handle, msg);
}
}
}
#endif
return 0; return 0;
} }