TmpMenu/src/backend/looped/player/good_options.cpp
Yimura ddddbd4efd refactor!: globals (#717)
* refactor(globals): use macro's for to_json/from_json
* refactor(globals): switch from global pointer to global instance
2022-12-18 22:15:52 +00:00

68 lines
1.8 KiB
C++

#include "gta/pickup_rewards.hpp"
#include "backend/looped/looped.hpp"
#include "services/players/player_service.hpp"
#include "util/globals.hpp"
#include "util/misc.hpp"
namespace big
{
// rate limit script events to prevent crashes
static int offRadarPlayer = 0;
static int neverWantedPlayer = 0;
void looped::player_good_options()
{
if (!NETWORK::NETWORK_IS_SESSION_STARTED())
return;
offRadarPlayer++;
if (offRadarPlayer > 32)
offRadarPlayer = 0;
neverWantedPlayer++;
if (neverWantedPlayer > 32)
neverWantedPlayer = 0;
g_player_service->iterate([](const player_entry& entry)
{
if ((g.session.off_radar_all || entry.second->off_radar) && offRadarPlayer == entry.second->id())
globals::give_remote_otr(entry.second->id());
});
g_player_service->iterate([](const player_entry& entry)
{
if ((g.session.never_wanted_all || entry.second->never_wanted) && PLAYER::GET_PLAYER_WANTED_LEVEL(entry.second->id()) > 0 && neverWantedPlayer == entry.second->id())
globals::clear_wanted_player(entry.second->id());
});
if (g.session.semi_godmode_all)
{
g_pointers->m_give_pickup_rewards(-1, REWARD_HEALTH);
g_pointers->m_give_pickup_rewards(-1, REWARD_ARMOUR);
}
else
{
g_player_service->iterate([](const player_entry& entry)
{
if (entry.second->semi_godmode)
{
if (CPed* ped = entry.second->get_ped())
{
if (ped->m_maxhealth == 0 || ped->m_health == 0 || misc::has_bit_set((int*)&ped->m_damage_bits, 8))
return;
if (ped->m_health < ped->m_maxhealth)
{
g_pointers->m_give_pickup_rewards(1 << entry.second->id(), REWARD_HEALTH);
}
if (ped->m_armor < 50.0f)
{
g_pointers->m_give_pickup_rewards(1 << entry.second->id(), REWARD_ARMOUR);
}
}
}
});
}
}
}