65 lines
1.8 KiB
C++
Raw Normal View History

#pragma once
#include "natives.hpp"
2022-07-25 04:56:37 +08:00
#include "script.hpp"
2022-07-31 01:47:48 +08:00
#include "pointers.hpp"
namespace big::ped
{
inline void steal_outfit(const Ped target)
{
Ped ped = self::ped;
if (ENTITY::GET_ENTITY_MODEL(ped) != ENTITY::GET_ENTITY_MODEL(target)) {
g_notification_service->push("Error", "Model mismatch, use steal identity instead.");
return;
}
for (int i = 0; i < 12; i++) {
PED::SET_PED_COMPONENT_VARIATION
(
ped,
i,
PED::GET_PED_DRAWABLE_VARIATION(target, i),
PED::GET_PED_TEXTURE_VARIATION(target, i),
PED::GET_PED_PALETTE_VARIATION(target, i)
);
}
}
inline void steal_identity(const Ped target)
{
2022-07-25 04:56:37 +08:00
const int max_health = ENTITY::GET_ENTITY_MAX_HEALTH(self::ped);
const int current_health = ENTITY::GET_ENTITY_HEALTH(self::ped);
const int current_armor = PED::GET_PED_ARMOUR(self::ped);
PLAYER::SET_PLAYER_MODEL(self::id , ENTITY::GET_ENTITY_MODEL(target));
2022-07-25 04:56:37 +08:00
script::get_current()->yield();
PED::CLONE_PED_TO_TARGET(target, self::ped);
ENTITY::SET_ENTITY_MAX_HEALTH(self::ped, max_health);
ENTITY::SET_ENTITY_HEALTH(self::ped, current_health, 0);
PED::SET_PED_ARMOUR(self::ped, current_armor);
}
2022-07-31 01:47:48 +08:00
inline Ped spawn(ePedType pedType, Hash hash, Vector3 location, float heading, bool is_networked = true)
{
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))
{
return 0;
}
*(unsigned short*)g_pointers->m_model_spawn_bypass = 0x9090;
auto ped = PED::CREATE_PED(pedType, hash, location.x, location.y, location.z, heading, is_networked, false);
*(unsigned short*)g_pointers->m_model_spawn_bypass = 0x0574;
script::get_current()->yield();
STREAMING::SET_MODEL_AS_NO_LONGER_NEEDED(hash);
return ped;
}
}