#pragma once #include "gta/joaat.hpp" #include "natives.hpp" #include "notify.hpp" #include "pointers.hpp" #include "script.hpp" namespace big::vehicle { inline int spawn(const char* model, Vector3 location, float heading) { Hash hash = rage::joaat(model); if (hash) { for (uint8_t i = 0; !STREAMING::HAS_MODEL_LOADED(hash) && i < 100; i++) { STREAMING::REQUEST_MODEL(hash); script::get_current()->yield(); } if (!STREAMING::HAS_MODEL_LOADED(hash)) { notify::above_map("~r~Failed to spawn model, did you give an incorrect model?"); return -1; } *(unsigned short*)g_pointers->m_model_spawn_bypass = 0x9090; Vehicle veh = VEHICLE::CREATE_VEHICLE(hash, location.x, location.y, location.z, heading, true, false, false); *(unsigned short*)g_pointers->m_model_spawn_bypass = 0x0574; script::get_current()->yield(); STREAMING::SET_MODEL_AS_NO_LONGER_NEEDED(hash); if (*g_pointers->m_is_session_started) { DECORATOR::DECOR_SET_INT(veh, "MPBitset", 0); ENTITY::_SET_ENTITY_SOMETHING(veh, true); int networkId = NETWORK::VEH_TO_NET(veh); if (NETWORK::NETWORK_GET_ENTITY_IS_NETWORKED(veh)) NETWORK::SET_NETWORK_ID_EXISTS_ON_ALL_MACHINES(networkId, true); VEHICLE::SET_VEHICLE_IS_STOLEN(veh, false); } return veh; } return -1; } }