Merge branch 'master' into fix-cache-openfile-fail

This commit is contained in:
Andreas Maerten 2023-09-11 21:49:09 +02:00 committed by GitHub
commit 0b1f4f3554
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 49 additions and 17 deletions

View File

@ -3,7 +3,7 @@ include(FetchContent)
FetchContent_Declare( FetchContent_Declare(
gtav_classes gtav_classes
GIT_REPOSITORY https://github.com/Yimura/GTAV-Classes.git GIT_REPOSITORY https://github.com/Yimura/GTAV-Classes.git
GIT_TAG 0f88abb93d1499c04f440b77095ae4e02e5144ae GIT_TAG 3c7763fcf996f53f891e40f12bbfa8115fd612a7
GIT_PROGRESS TRUE GIT_PROGRESS TRUE
CONFIGURE_COMMAND "" CONFIGURE_COMMAND ""
BUILD_COMMAND "" BUILD_COMMAND ""

View File

@ -10,12 +10,13 @@ namespace big
using command::command; using command::command;
virtual void execute(const command_arguments&, const std::shared_ptr<command_context> ctx) override virtual void execute(const command_arguments&, const std::shared_ptr<command_context> ctx) override
{ {
g_player_service->iterate([](const player_entry& player) { const auto player_mgr = *g_pointers->m_gta.m_network_player_mgr;
auto mgr = *g_pointers->m_gta.m_network_player_mgr; for (const auto& plyr : g_player_service->players() | std::ranges::views::values)
mgr->RemovePlayer(player.second->get_net_game_player()); {
}); player_mgr->RemovePlayer(plyr->get_net_game_player());
g_notification_service->push_success("Empty Session", "Completed"); }
g_notification_service->push("Empty Session", "Completed");
} }
}; };
empty_session g_empty_session("emptysession", "Remove All Players From Session", "Removes everyone from the session", 0); empty_session g_empty_session("emptysession", "EMPTY_SESSION", "Removes everyone from the session", 0);
} }

View File

@ -162,11 +162,11 @@ namespace big
return false; return false;
} }
inline bool is_sane_override_pos(float x, float y, float z) inline bool is_invalid_override_pos(float x, float y)
{ {
bool crash = ((int)round(fmaxf(0.0, (x + 149.0) - -8192.0) / 75.0)) == 255 || ((int)round(fmaxf(0.0, (y + 149.0) - -8192.0) / 75.0)) == 255; bool crash = ((int)round(fmaxf(0.0, (x + 149.0) - -8192.0) / 75.0)) >= 255 || ((int)round(fmaxf(0.0, (y + 149.0) - -8192.0) / 75.0)) >= 255;
return !crash; return crash;
} }
inline std::string get_task_type_string(int type) inline std::string get_task_type_string(int type)
@ -1135,6 +1135,34 @@ namespace big
return false; return false;
} }
bool get_player_sector_pos(rage::netSyncNodeBase* node, float& x, float& y, rage::netObject* object)
{
if (node->IsParentNode())
{
for (auto child = node->m_first_child; child; child = child->m_next_sibling)
{
if (get_player_sector_pos(child, x, y, object))
return true;
}
}
else if (node->IsDataNode())
{
const auto& node_id = sync_node_finder::find((eNetObjType)object->m_object_type, (uintptr_t)node);
if ((((CProjectBaseSyncDataNode*)node)->flags & 1) == 0)
return false;
if (node_id == sync_node_id("CPlayerSectorPosNode"))
{
CPlayerSectorPosNode* player_sector_pos_node = (CPlayerSectorPosNode*)(node);
x = player_sector_pos_node->m_sector_pos.x;
y = player_sector_pos_node->m_sector_pos.y;
return true;
}
}
return false;
}
bool check_node(rage::netSyncNodeBase* node, CNetGamePlayer* sender, rage::netObject* object) bool check_node(rage::netSyncNodeBase* node, CNetGamePlayer* sender, rage::netObject* object)
{ {
if (node->IsParentNode()) if (node->IsParentNode())
@ -1311,8 +1339,13 @@ namespace big
} }
case sync_node_id("CSectorDataNode"): case sync_node_id("CSectorDataNode"):
{ {
float player_sector_pos_x{}, player_sector_pos_y{};
get_player_sector_pos(node->m_root->m_next_sync_node, player_sector_pos_x, player_sector_pos_y, object);
const auto sector_node = (CSectorDataNode*)(node); const auto sector_node = (CSectorDataNode*)(node);
if (sector_node->m_pos_x >= 711 || sector_node->m_pos_y >= 711) int posX = (sector_node->m_pos_x - 512.0f) * 54.0f;
int posY = (sector_node->m_pos_y - 512.0f) * 54.0f;
if (is_invalid_override_pos(posX + player_sector_pos_x, posY + player_sector_pos_y))
{ {
notify::crash_blocked(sender, "invalid sector position (sector node)"); notify::crash_blocked(sender, "invalid sector position (sector node)");
return true; return true;
@ -1323,9 +1356,7 @@ namespace big
{ {
const auto game_state_node = (CPlayerGameStateDataNode*)(node); const auto game_state_node = (CPlayerGameStateDataNode*)(node);
if (game_state_node->m_is_overriding_population_control_sphere if (game_state_node->m_is_overriding_population_control_sphere
&& !is_sane_override_pos(game_state_node->m_population_control_sphere_x, && is_invalid_override_pos(game_state_node->m_population_control_sphere_x,game_state_node->m_population_control_sphere_y))
game_state_node->m_population_control_sphere_y,
game_state_node->m_population_control_sphere_z))
{ {
if (gta_util::get_network()->m_game_session_ptr->is_host()) if (gta_util::get_network()->m_game_session_ptr->is_host())
notify::crash_blocked(sender, "invalid sector position (player game state node)"); notify::crash_blocked(sender, "invalid sector position (player game state node)");
@ -1525,7 +1556,7 @@ namespace big
case sync_node_id("CPlayerCameraDataNode"): case sync_node_id("CPlayerCameraDataNode"):
{ {
const auto camera_node = (CPlayerCameraDataNode*)(node); const auto camera_node = (CPlayerCameraDataNode*)(node);
if (!is_sane_override_pos(camera_node->m_free_cam_pos_x, camera_node->m_free_cam_pos_y, camera_node->m_free_cam_pos_z)) if (is_invalid_override_pos(camera_node->m_free_cam_pos_x, camera_node->m_free_cam_pos_y))
{ {
if (gta_util::get_network()->m_game_session_ptr->is_host()) if (gta_util::get_network()->m_game_session_ptr->is_host())
notify::crash_blocked(sender, "invalid sector position (camera data node)"); notify::crash_blocked(sender, "invalid sector position (camera data node)");

View File

@ -94,7 +94,7 @@ namespace big
if (state == eKeyState::RELEASE || state == eKeyState::DOWN) if (state == eKeyState::RELEASE || state == eKeyState::DOWN)
{ {
auto& hotkey_map = m_hotkeys[state == eKeyState::RELEASE]; auto& hotkey_map = m_hotkeys[state == eKeyState::RELEASE];
if (const auto& it = hotkey_map.find(key); it != hotkey_map.end()) for (auto [ it, end ] = hotkey_map.equal_range(key); it != end; ++it)
{ {
if (auto& hotkey = it->second; hotkey.can_exec()) if (auto& hotkey = it->second; hotkey.can_exec())
{ {

View File

@ -484,7 +484,7 @@ namespace big
}, },
true, true,
"TELEPORT"_T.data()); "TELEPORT"_T.data());
components::command_button<"emptysession">({}, "EMPTY_SESSION"_T.data()); components::command_button<"emptysession">();
components::sub_title("SCRIPT_HOST_FEATURES"_T); components::sub_title("SCRIPT_HOST_FEATURES"_T);
ImGui::Checkbox("DISABLE_CEO_MONEY"_T.data(), &g.session.block_ceo_money); ImGui::Checkbox("DISABLE_CEO_MONEY"_T.data(), &g.session.block_ceo_money);