Fix guid distribution for bots
This commit is contained in:
parent
fa144b7dd6
commit
e6e2805466
@ -172,9 +172,12 @@ namespace auth
|
|||||||
|
|
||||||
game::foreach_connected_client([&](const game::client_s& client, size_t index)
|
game::foreach_connected_client([&](const game::client_s& client, size_t index)
|
||||||
{
|
{
|
||||||
network::send(client.address, "playerXuid", buffer.get_buffer());
|
if (client.address.type != game::NA_BOT)
|
||||||
|
{
|
||||||
|
network::send(client.address, "playerXuid", buffer.get_buffer());
|
||||||
|
}
|
||||||
|
|
||||||
if (index != player_index)
|
if (index != player_index && target.type != game::NA_BOT)
|
||||||
{
|
{
|
||||||
utils::byte_buffer current_buffer{};
|
utils::byte_buffer current_buffer{};
|
||||||
current_buffer.write(static_cast<uint32_t>(index));
|
current_buffer.write(static_cast<uint32_t>(index));
|
||||||
@ -185,6 +188,30 @@ namespace auth
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void handle_new_player(const game::netadr_t& target)
|
||||||
|
{
|
||||||
|
const command::params_sv params{};
|
||||||
|
if (params.size() < 2)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const utils::info_string info_string(params[1]);
|
||||||
|
const auto xuid = strtoull(info_string.get("xuid").data(), nullptr, 16);
|
||||||
|
|
||||||
|
size_t player_index = 18;
|
||||||
|
game::foreach_connected_client([&](game::client_s& client, size_t index)
|
||||||
|
{
|
||||||
|
if (client.address == target)
|
||||||
|
{
|
||||||
|
client.xuid = xuid;
|
||||||
|
player_index = index;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
distribute_player_xuid(target, player_index, xuid);
|
||||||
|
}
|
||||||
|
|
||||||
void dispatch_connect_packet(const game::netadr_t& target, const std::string& data)
|
void dispatch_connect_packet(const game::netadr_t& target, const std::string& data)
|
||||||
{
|
{
|
||||||
utils::byte_buffer buffer(data);
|
utils::byte_buffer buffer(data);
|
||||||
@ -206,18 +233,7 @@ namespace auth
|
|||||||
profile_infos::add_and_distribute_profile_info(target, xuid, info);
|
profile_infos::add_and_distribute_profile_info(target, xuid, info);
|
||||||
|
|
||||||
game::SV_DirectConnect(target);
|
game::SV_DirectConnect(target);
|
||||||
|
handle_new_player(target);
|
||||||
size_t player_index = 18;
|
|
||||||
game::foreach_connected_client([&](game::client_s& client, size_t index)
|
|
||||||
{
|
|
||||||
if (client.address == target)
|
|
||||||
{
|
|
||||||
client.xuid = xuid;
|
|
||||||
player_index = index;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
distribute_player_xuid(target, player_index, xuid);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void handle_connect_packet_fragment(const game::netadr_t& target, const network::data_view& data)
|
void handle_connect_packet_fragment(const game::netadr_t& target, const network::data_view& data)
|
||||||
@ -256,6 +272,12 @@ namespace auth
|
|||||||
client_xuids[player_id] = xuid;
|
client_xuids[player_id] = xuid;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void direct_connect_bots_stub(const game::netadr_t address)
|
||||||
|
{
|
||||||
|
game::SV_DirectConnect(address);
|
||||||
|
handle_new_player(address);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t get_guid()
|
uint64_t get_guid()
|
||||||
@ -308,6 +330,9 @@ namespace auth
|
|||||||
network::on("connect", handle_connect_packet_fragment);
|
network::on("connect", handle_connect_packet_fragment);
|
||||||
network::on("playerXuid", handle_player_xuid_packet);
|
network::on("playerXuid", handle_player_xuid_packet);
|
||||||
|
|
||||||
|
// Intercept SV_DirectConnect in SV_AddTestClient
|
||||||
|
utils::hook::call(game::select(0x1422490DC, 0x14052E582), direct_connect_bots_stub);
|
||||||
|
|
||||||
// Patch steam id bit check
|
// Patch steam id bit check
|
||||||
std::vector<std::pair<size_t, size_t>> patches{};
|
std::vector<std::pair<size_t, size_t>> patches{};
|
||||||
const auto p = [&patches](const size_t a, const size_t b)
|
const auto p = [&patches](const size_t a, const size_t b)
|
||||||
|
Loading…
Reference in New Issue
Block a user