Stand/Stand/SessionScriptMgr.cpp
2024-10-16 11:20:42 +08:00

393 lines
20 KiB
C++

#include "SessionScriptMgr.hpp"
#include "AbstractPlayer.hpp"
#include "Click.hpp"
#include "eMpMission.hpp"
#include "get_current_time_millis.hpp"
#include "is_session.hpp"
#include "lang.hpp"
#include "Script.hpp"
#include "ScriptGlobal.hpp"
#include "ScriptLocal.hpp"
#include "script_thread.hpp"
#include "ThreadContext.hpp"
#include "Util.hpp"
namespace Stand
{
bool SessionScriptMgr::startPrecheck(Click& click)
{
if (!is_session_started_and_transition_finished()
|| GtaThread::fromHash(ATSTRINGHASH("am_launcher")) == nullptr
)
{
click.setResponse(LOC("CMDONL"));
return false;
}
return click.isUltimateEdition();
}
static void setScript(const hash_t hash)
{
ScriptGlobal(GLOBAL_AM_LAUNCHER_HOST_DATA + 3).set<int>(0);
ScriptGlobal(GLOBAL_AM_LAUNCHER_HOST_DATA + 3 + 1).set<int>(SessionScriptMgr::hash_to_id(hash));
}
void SessionScriptMgr::start(const hash_t hash)
{
auto thread = GtaThread::fromHash(ATSTRINGHASH("am_launcher"));
if (!thread)
{
return;
}
if (busy)
{
return;
}
busy = true;
Util::toast(LANG_GET("RUNSCR_PREP"));
thread->fiberSnatchScriptHost();
// force am_launcher into running state
ScriptGlobal(GLOBAL_AM_LAUNCHER_HOST_DATA).set<int>(1);
// fix stucks
{
time_t time = get_current_time_millis();
while (thread->m_stack)
{
bool all_ready = true;
for (const auto& p : AbstractPlayer::listExcept())
{
if (*ScriptLocal(thread, LOCAL_LNCH_PLAYERSTATE).at(p, 3).at(2).as<int*>() == 4
|| *ScriptLocal(thread, LOCAL_LNCH_PLAYERSTATE).at(p, 3).at(2).as<int*>() == 6
)
{
//Util::toast("fix stucks", TC_SCRIPT_YIELDABLE);
if (!(*ScriptLocal(thread, LOCAL_LNCH_PLAYERSTATE).at(p, 3).at(2).as<int*>() & (1 << 2)))
{
// Client has not launched script yet, so we start something that will do nothing
setScript(ATSTRINGHASH("scroll_arcade_cabinet"));
}
else
{
// Client expects script to be running, so using something that is running
setScript(ATSTRINGHASH("am_launcher"));
}
ScriptGlobal(GLOBAL_AM_LAUNCHER_HOST_DATA + 2).set<int>(7);
all_ready = false;
break;
}
}
if (all_ready || GET_MILLIS_SINCE(time) > 3000)
{
break;
}
Script::current()->yield();
}
}
/*if (very op stuck state) // restart launcher
{
script_global(GLOBAL_AM_LAUNCHER_HOST_DATA).set<int>(3);
time_t time = get_current_time_millis();
do
{
if (GET_MILLIS_SINCE(time) > 3000)
{
Util::toast(LANG_GET("GENFAIL"), TC_SCRIPT_YIELDABLE);
busy = false;
return;
}
script::get_current()->yield();
} while (thread = GtaThread::fromHash(ATSTRINGHASH("am_launcher")), thread == nullptr);
thread->fiberSnatchScriptHost();
}*/
Util::toast(LANG_FMT("RUNSCR_RUN", rage::scrThread::getLabel(hash).getLocalisedUtf8()));
// start the script
*ScriptGlobal(GLOBAL_AM_LAUNCHER_HOST_DATA + 1).as<int*>() |= (1 << 1);
setScript(hash);
ScriptGlobal(GLOBAL_AM_LAUNCHER_HOST_DATA + 2).set<int>(4);
/*script::get_current()->yield(1000);
if (script_global(GLOBAL_AM_LAUNCHER_HOST_DATA + 2).get<int>() == 4)
{
script_global(GLOBAL_AM_LAUNCHER_HOST_DATA + 2).set<int>(5);
}*/
busy = false;
/*while (script_global(GLOBAL_AM_LAUNCHER_HOST_DATA + 2).get<int>() != 0 && GtaThread::fromHash(hash) != nullptr)
{
script::get_current()->yield();
}
while (GtaThread::fromHash(hash) != nullptr)
{
script::get_current()->yield();
}
Util::toast(LANG_FMT("RUNSCR_FIN"), menu_name.getLocalisedUtf8()), TC_SCRIPT_YIELDABLE);*/
}
int SessionScriptMgr::hash_to_id(const hash_t hash)
{
for (int i = 1; i < NUM_SCRIPT_IDS; ++i)
{
if (id_to_hash(i) == hash)
{
return i;
}
}
return 0;
}
hash_t SessionScriptMgr::id_to_hash(const int id)
{
switch (id)
{
case AM_HOLD_UP: return ATSTRINGHASH("AM_HOLD_UP");
case AM_JOYRIDER: return ATSTRINGHASH("AM_JOYRIDER");
case AM_PLANE_TAKEDOWN: return ATSTRINGHASH("AM_PLANE_TAKEDOWN");
case AM_DISTRACT_COPS: return ATSTRINGHASH("AM_DISTRACT_COPS");
case AM_DESTROY_VEH: return ATSTRINGHASH("AM_DESTROY_VEH");
case AM_HOT_TARGET: return ATSTRINGHASH("AM_HOT_TARGET");
case AM_KILL_LIST: return ATSTRINGHASH("AM_KILL_LIST");
case AM_TIME_TRIAL: return ATSTRINGHASH("AM_TIME_TRIAL");
case AM_CP_COLLECTION: return ATSTRINGHASH("AM_CP_COLLECTION");
case AM_CHALLENGES: return ATSTRINGHASH("AM_CHALLENGES");
case AM_PENNED_IN: return ATSTRINGHASH("AM_PENNED_IN");
case AM_PASS_THE_PARCEL: return ATSTRINGHASH("AM_PASS_THE_PARCEL");
case AM_HOT_PROPERTY: return ATSTRINGHASH("AM_HOT_PROPERTY");
case AM_DEAD_DROP: return ATSTRINGHASH("AM_DEAD_DROP");
case AM_KING_OF_THE_CASTLE: return ATSTRINGHASH("AM_KING_OF_THE_CASTLE");
case AM_CRIMINAL_DAMAGE: return ATSTRINGHASH("AM_CRIMINAL_DAMAGE");
case AM_HUNT_THE_BEAST: return ATSTRINGHASH("AM_HUNT_THE_BEAST");
case GB_LIMO_ATTACK: return ATSTRINGHASH("GB_LIMO_ATTACK");
case GB_DEATHMATCH: return ATSTRINGHASH("GB_DEATHMATCH");
case GB_STEAL_VEH: return ATSTRINGHASH("GB_STEAL_VEH");
case GB_POINT_TO_POINT: return ATSTRINGHASH("GB_POINT_TO_POINT");
case GB_TERMINATE: return ATSTRINGHASH("GB_TERMINATE");
case GB_YACHT_ROB: return ATSTRINGHASH("GB_YACHT_ROB");
case GB_BELLYBEAST: return ATSTRINGHASH("GB_BELLYBEAST");
case GB_FIVESTAR: return ATSTRINGHASH("GB_FIVESTAR");
case GB_ROB_SHOP: return ATSTRINGHASH("GB_ROB_SHOP");
case GB_COLLECT_MONEY: return ATSTRINGHASH("GB_COLLECT_MONEY");
case GB_ASSAULT: return ATSTRINGHASH("GB_ASSAULT");
case GB_VEH_SURV: return ATSTRINGHASH("GB_VEH_SURV");
case GB_SIGHTSEER: return ATSTRINGHASH("GB_SIGHTSEER");
case GB_FLYING_IN_STYLE: return ATSTRINGHASH("GB_FLYING_IN_STYLE");
case GB_FINDERSKEEPERS: return ATSTRINGHASH("GB_FINDERSKEEPERS");
case GB_HUNT_THE_BOSS: return ATSTRINGHASH("GB_HUNT_THE_BOSS");
case GB_CARJACKING: return ATSTRINGHASH("GB_CARJACKING");
case GB_HEADHUNTER: return ATSTRINGHASH("GB_HEADHUNTER");
case GB_CONTRABAND_BUY: return ATSTRINGHASH("GB_CONTRABAND_BUY");
case GB_CONTRABAND_SELL: return ATSTRINGHASH("GB_CONTRABAND_SELL");
case GB_CONTRABAND_DEFEND: return ATSTRINGHASH("GB_CONTRABAND_DEFEND");
case GB_AIRFREIGHT: return ATSTRINGHASH("GB_AIRFREIGHT");
case GB_CASHING_OUT: return ATSTRINGHASH("GB_CASHING_OUT");
case GB_SALVAGE: return ATSTRINGHASH("GB_SALVAGE");
case GB_FRAGILE_GOODS: return ATSTRINGHASH("GB_FRAGILE_GOODS");
case dont_cross_the_line: return ATSTRINGHASH("dont_cross_the_line");
case grid_arcade_cabinet: return ATSTRINGHASH("grid_arcade_cabinet");
case scroll_arcade_cabinet: return ATSTRINGHASH("scroll_arcade_cabinet");
case example_arcade: return ATSTRINGHASH("example_arcade");
case road_arcade: return ATSTRINGHASH("road_arcade");
case Degenatron_Games: return ATSTRINGHASH("Degenatron Games");
case gunslinger_arcade: return ATSTRINGHASH("gunslinger_arcade");
case ggsm_arcade: return ATSTRINGHASH("ggsm_arcade");
case wizard_arcade: return ATSTRINGHASH("wizard_arcade");
case AM_CASINO_LIMO: return ATSTRINGHASH("AM_CASINO_LIMO");
case AM_CASINO_LUXURY_CAR: return ATSTRINGHASH("AM_CASINO_LUXURY_CAR");
case puzzle: return ATSTRINGHASH("puzzle");
case camhedz_arcade: return ATSTRINGHASH("camhedz_arcade");
case GB_VEHICLE_EXPORT: return ATSTRINGHASH("GB_VEHICLE_EXPORT");
case GB_BIKER_JOUST: return ATSTRINGHASH("GB_BIKER_JOUST");
case GB_BIKER_RACE_P2P: return ATSTRINGHASH("GB_BIKER_RACE_P2P");
case GB_BIKER_UNLOAD_WEAPONS: return ATSTRINGHASH("GB_BIKER_UNLOAD_WEAPONS");
case GB_BIKER_BAD_DEAL: return ATSTRINGHASH("GB_BIKER_BAD_DEAL");
case GB_BIKER_RESCUE_CONTACT: return ATSTRINGHASH("GB_BIKER_RESCUE_CONTACT");
case GB_BIKER_LAST_RESPECTS: return ATSTRINGHASH("GB_BIKER_LAST_RESPECTS");
case GB_BIKER_CONTRACT_KILLING: return ATSTRINGHASH("GB_BIKER_CONTRACT_KILLING");
case GB_BIKER_CONTRABAND_SELL: return ATSTRINGHASH("GB_BIKER_CONTRABAND_SELL");
case GB_BIKER_CONTRABAND_DEFEND: return ATSTRINGHASH("GB_BIKER_CONTRABAND_DEFEND");
case GB_ILLICIT_GOODS_RESUPPLY: return ATSTRINGHASH("GB_ILLICIT_GOODS_RESUPPLY");
case GB_BIKER_DRIVEBY_ASSASSIN: return ATSTRINGHASH("GB_BIKER_DRIVEBY_ASSASSIN");
case GB_BIKER_CRIMINAL_MISCHIEF: return ATSTRINGHASH("GB_BIKER_CRIMINAL_MISCHIEF");
case GB_BIKER_RIPPIN_IT_UP: return ATSTRINGHASH("GB_BIKER_RIPPIN_IT_UP");
case GB_PLOUGHED: return ATSTRINGHASH("GB_PLOUGHED");
case GB_FULLY_LOADED: return ATSTRINGHASH("GB_FULLY_LOADED");
case GB_AMPHIBIOUS_ASSAULT: return ATSTRINGHASH("GB_AMPHIBIOUS_ASSAULT");
case GB_TRANSPORTER: return ATSTRINGHASH("GB_TRANSPORTER");
case GB_FORTIFIED: return ATSTRINGHASH("GB_FORTIFIED");
case GB_VELOCITY: return ATSTRINGHASH("GB_VELOCITY");
case GB_RAMPED_UP: return ATSTRINGHASH("GB_RAMPED_UP");
case GB_STOCKPILING: return ATSTRINGHASH("GB_STOCKPILING");
case GB_BIKER_FREE_PRISONER: return ATSTRINGHASH("GB_BIKER_FREE_PRISONER");
case GB_BIKER_SAFECRACKER: return ATSTRINGHASH("GB_BIKER_SAFECRACKER");
case GB_BIKER_STEAL_BIKES: return ATSTRINGHASH("GB_BIKER_STEAL_BIKES");
case GB_BIKER_SEARCH_AND_DESTROY: return ATSTRINGHASH("GB_BIKER_SEARCH_AND_DESTROY");
case GB_BIKER_STAND_YOUR_GROUND: return ATSTRINGHASH("GB_BIKER_STAND_YOUR_GROUND");
case GB_BIKER_DESTROY_VANS: return ATSTRINGHASH("GB_BIKER_DESTROY_VANS");
case GB_BIKER_BURN_ASSETS: return ATSTRINGHASH("GB_BIKER_BURN_ASSETS");
case GB_BIKER_SHUTTLE: return ATSTRINGHASH("GB_BIKER_SHUTTLE");
case GB_BIKER_WHEELIE_RIDER: return ATSTRINGHASH("GB_BIKER_WHEELIE_RIDER");
case GB_GUNRUNNING: return ATSTRINGHASH("GB_GUNRUNNING");
case GB_GUNRUNNING_DEFEND: return ATSTRINGHASH("GB_GUNRUNNING_DEFEND");
case GB_SMUGGLER: return ATSTRINGHASH("GB_SMUGGLER");
case GB_GANGOPS: return ATSTRINGHASH("GB_GANGOPS");
case BUSINESS_BATTLES: return ATSTRINGHASH("BUSINESS_BATTLES");
case BUSINESS_BATTLES_SELL: return ATSTRINGHASH("BUSINESS_BATTLES_SELL");
case BUSINESS_BATTLES_DEFEND: return ATSTRINGHASH("BUSINESS_BATTLES_DEFEND");
case GB_SECURITY_VAN: return ATSTRINGHASH("GB_SECURITY_VAN");
case GB_TARGET_PURSUIT: return ATSTRINGHASH("GB_TARGET_PURSUIT");
case GB_JEWEL_STORE_GRAB: return ATSTRINGHASH("GB_JEWEL_STORE_GRAB");
case GB_BANK_JOB: return ATSTRINGHASH("GB_BANK_JOB");
case GB_DATA_HACK: return ATSTRINGHASH("GB_DATA_HACK");
case GB_INFILTRATION: return ATSTRINGHASH("GB_INFILTRATION");
case GB_CASINO: return ATSTRINGHASH("GB_CASINO");
case GB_CASINO_HEIST: return ATSTRINGHASH("GB_CASINO_HEIST");
case fm_content_business_battles: return ATSTRINGHASH("fm_content_business_battles");
case fm_content_crime_scene: return ATSTRINGHASH("fm_content_crime_scene");
case fm_content_drug_vehicle: return ATSTRINGHASH("fm_content_drug_vehicle");
case fm_content_movie_props: return ATSTRINGHASH("fm_content_movie_props");
case fm_content_island_heist: return ATSTRINGHASH("fm_content_island_heist");
case fm_content_island_dj: return ATSTRINGHASH("fm_content_island_dj");
case fm_content_golden_gun: return ATSTRINGHASH("fm_content_golden_gun");
case AM_CR_SELL_DRUGS: return ATSTRINGHASH("AM_CR_SELL_DRUGS");
case AM_Safehouse: return ATSTRINGHASH("AM_Safehouse");
case MG_RACE_TO_POINT: return ATSTRINGHASH("MG_RACE_TO_POINT");
case AM_CRATE_DROP: return ATSTRINGHASH("AM_CRATE_DROP");
case AM_AMMO_DROP: return ATSTRINGHASH("AM_AMMO_DROP");
case AM_VEHICLE_DROP: return ATSTRINGHASH("AM_VEHICLE_DROP");
case AM_BRU_BOX: return ATSTRINGHASH("AM_BRU_BOX");
case AM_GA_PICKUPS: return ATSTRINGHASH("AM_GA_PICKUPS");
case AM_backup_heli: return ATSTRINGHASH("AM_backup_heli");
case AM_airstrike: return ATSTRINGHASH("AM_airstrike");
case AM_PI_MENU: return ATSTRINGHASH("AM_PI_MENU");
case AM_BOAT_TAXI: return ATSTRINGHASH("AM_BOAT_TAXI");
case AM_HELI_TAXI: return ATSTRINGHASH("AM_HELI_TAXI");
case AM_IMP_EXP: return ATSTRINGHASH("AM_IMP_EXP");
case AM_TAXI: return ATSTRINGHASH("AM_TAXI");
case AM_TAXI_LAUNCHER: return ATSTRINGHASH("AM_TAXI_LAUNCHER");
case AM_GANG_CALL: return ATSTRINGHASH("AM_GANG_CALL");
case heli_gun: return ATSTRINGHASH("heli_gun");
case am_rollercoaster: return ATSTRINGHASH("am_rollercoaster");
case am_ferriswheel: return ATSTRINGHASH("am_ferriswheel");
case AM_LAUNCHER: return ATSTRINGHASH("AM_LAUNCHER");
case AM_DAILY_OBJECTIVES: return ATSTRINGHASH("AM_DAILY_OBJECTIVES");
case AM_STRIPPER: return ATSTRINGHASH("AM_STRIPPER");
case AM_Hitchhiker: return ATSTRINGHASH("AM_Hitchhiker");
case stripclub_mp: return ATSTRINGHASH("stripclub_mp");
case AM_ArmWrestling: return ATSTRINGHASH("AM_ArmWrestling");
case AM_Tennis: return ATSTRINGHASH("AM_Tennis");
case AM_Darts: return ATSTRINGHASH("AM_Darts");
case AM_ImportExport: return ATSTRINGHASH("AM_ImportExport");
case AM_FistFight: return ATSTRINGHASH("AM_FistFight");
case AM_DropOffHooker: return ATSTRINGHASH("AM_DropOffHooker");
case AM_DOORS: return ATSTRINGHASH("AM_DOORS");
case FM_INTRO: return ATSTRINGHASH("FM_INTRO");
case AM_PROSTITUTE: return ATSTRINGHASH("AM_PROSTITUTE");
case fm_hold_up_tut: return ATSTRINGHASH("fm_hold_up_tut");
case AM_CAR_MOD_TUT: return ATSTRINGHASH("AM_CAR_MOD_TUT");
case AM_CONTACT_REQUESTS: return ATSTRINGHASH("AM_CONTACT_REQUESTS");
case am_mission_launch: return ATSTRINGHASH("am_mission_launch");
case am_npc_invites: return ATSTRINGHASH("am_npc_invites");
case am_lester_cut: return ATSTRINGHASH("am_lester_cut");
case AM_VEHICLE_SPAWN: return ATSTRINGHASH("AM_VEHICLE_SPAWN");
case am_ronTrevor_Cut: return ATSTRINGHASH("am_ronTrevor_Cut");
case AM_ARMYBASE: return ATSTRINGHASH("AM_ARMYBASE");
case AM_PRISON: return ATSTRINGHASH("AM_PRISON");
case fm_Bj_race_controler: return ATSTRINGHASH("fm_Bj_race_controler");
case fm_deathmatch_controler: return ATSTRINGHASH("fm_deathmatch_controler");
case FM_Impromptu_DM_Controler: return ATSTRINGHASH("FM_Impromptu_DM_Controler");
case fm_hideout_controler: return ATSTRINGHASH("fm_hideout_controler");
case golf_mp: return ATSTRINGHASH("golf_mp");
case Pilot_School_MP: return ATSTRINGHASH("Pilot_School_MP");
case fm_mission_controller: return ATSTRINGHASH("fm_mission_controller");
case FM_Race_Controler: return ATSTRINGHASH("FM_Race_Controler");
case Range_Modern_MP: return ATSTRINGHASH("Range_Modern_MP");
case FM_Survival_Controller: return ATSTRINGHASH("FM_Survival_Controller");
case tennis_network_mp: return ATSTRINGHASH("tennis_network_mp");
case am_heist_int: return ATSTRINGHASH("am_heist_int");
case am_lowrider_int: return ATSTRINGHASH("am_lowrider_int");
case am_darts_apartment: return ATSTRINGHASH("am_darts_apartment");
case AM_Armwrestling_Apartment: return ATSTRINGHASH("AM_Armwrestling_Apartment");
case SCTV: return ATSTRINGHASH("SCTV");
case AM_ISLAND_BACKUP_HELI: return ATSTRINGHASH("AM_ISLAND_BACKUP_HELI");
case fm_content_tuner_robbery: return ATSTRINGHASH("fm_content_tuner_robbery");
case fm_content_vehicle_list: return ATSTRINGHASH("fm_content_vehicle_list");
case tuner_sandbox_activity: return ATSTRINGHASH("tuner_sandbox_activity");
case fm_content_auto_shop_delivery: return ATSTRINGHASH("fm_content_auto_shop_delivery");
case fm_content_payphone_hit: return ATSTRINGHASH("fm_content_payphone_hit");
case fm_content_security_contract: return ATSTRINGHASH("fm_content_security_contract");
case fm_content_vip_contract_1: return ATSTRINGHASH("fm_content_vip_contract_1");
case fm_content_metal_detector: return ATSTRINGHASH("fm_content_metal_detector");
case am_agency_suv: return ATSTRINGHASH("am_agency_suv");
case fm_content_phantom_car: return ATSTRINGHASH("fm_content_phantom_car");
case fm_content_slasher: return ATSTRINGHASH("fm_content_slasher");
case fm_content_sightseeing: return ATSTRINGHASH("fm_content_sightseeing");
case fm_content_smuggler_trail: return ATSTRINGHASH("fm_content_smuggler_trail");
case fm_content_skydive: return ATSTRINGHASH("fm_content_skydive");
case fm_content_cerberus: return ATSTRINGHASH("fm_content_cerberus");
case fm_content_smuggler_plane: return ATSTRINGHASH("fm_content_smuggler_plane");
case fm_content_parachuter: return ATSTRINGHASH("fm_content_parachuter");
case fm_content_bar_resupply: return ATSTRINGHASH("fm_content_bar_resupply");
case fm_content_bike_shop_delivery: return ATSTRINGHASH("fm_content_bike_shop_delivery");
case fm_content_clubhouse_contracts: return ATSTRINGHASH("fm_content_clubhouse_contracts");
case fm_content_cargo: return ATSTRINGHASH("fm_content_cargo");
case fm_content_export_cargo: return ATSTRINGHASH("fm_content_export_cargo");
case fm_content_ammunation: return ATSTRINGHASH("fm_content_ammunation");
case fm_content_gunrunning: return ATSTRINGHASH("fm_content_gunrunning");
case fm_content_source_research: return ATSTRINGHASH("fm_content_source_research");
case fm_content_club_management: return ATSTRINGHASH("fm_content_club_management");
case fm_content_club_odd_jobs: return ATSTRINGHASH("fm_content_club_odd_jobs");
case fm_content_club_source: return ATSTRINGHASH("fm_content_club_source");
case fm_content_convoy: return ATSTRINGHASH("fm_content_convoy");
case fm_content_robbery: return ATSTRINGHASH("fm_content_robbery");
case fm_content_acid_lab_setup: return ATSTRINGHASH("fm_content_acid_lab_setup");
case fm_content_acid_lab_source: return ATSTRINGHASH("fm_content_acid_lab_source");
case fm_content_acid_lab_sell: return ATSTRINGHASH("fm_content_acid_lab_sell");
case fm_content_drug_lab_work: return ATSTRINGHASH("fm_content_drug_lab_work");
case fm_content_stash_house: return ATSTRINGHASH("fm_content_stash_house");
case fm_content_taxi_driver: return ATSTRINGHASH("fm_content_taxi_driver");
case fm_content_xmas_mugger: return ATSTRINGHASH("fm_content_xmas_mugger");
case fm_content_bank_shootout: return ATSTRINGHASH("fm_content_bank_shootout");
case fm_content_armoured_truck: return ATSTRINGHASH("fm_content_armoured_truck");
case fm_content_ghosthunt: return ATSTRINGHASH("fm_content_ghosthunt");
case fm_content_ufo_abduction: return ATSTRINGHASH("fm_content_ufo_abduction");
case fm_content_smuggler_sell: return ATSTRINGHASH("fm_content_smuggler_sell");
case fm_content_smuggler_resupply: return ATSTRINGHASH("fm_content_smuggler_resupply");
case fm_content_smuggler_ops: return ATSTRINGHASH("fm_content_smuggler_ops");
case fm_content_bicycle_time_trial: return ATSTRINGHASH("fm_content_bicycle_time_trial");
case fm_content_possessed_animals: return ATSTRINGHASH("fm_content_possessed_animals");
case fm_content_chop_shop_delivery: return ATSTRINGHASH("fm_content_chop_shop_delivery");
case fm_content_xmas_truck: return ATSTRINGHASH("fm_content_xmas_truck");
case fm_content_tow_truck_work: return ATSTRINGHASH("fm_content_tow_truck_work");
case fm_content_vehrob_scoping: return ATSTRINGHASH("fm_content_vehrob_scoping");
case fm_content_vehrob_task: return ATSTRINGHASH("fm_content_vehrob_task");
case fm_content_vehrob_prep: return ATSTRINGHASH("fm_content_vehrob_prep");
case fm_content_vehrob_disrupt: return ATSTRINGHASH("fm_content_vehrob_disrupt");
case fm_content_vehrob_cargo_ship: return ATSTRINGHASH("fm_content_vehrob_cargo_ship");
case fm_content_vehrob_police: return ATSTRINGHASH("fm_content_vehrob_police");
case fm_content_vehrob_arena: return ATSTRINGHASH("fm_content_vehrob_arena");
case fm_content_vehrob_casino_prize: return ATSTRINGHASH("fm_content_vehrob_casino_prize");
case fm_content_vehrob_submarine: return ATSTRINGHASH("fm_content_vehrob_submarine");
case fm_content_bounty_targets: return ATSTRINGHASH("fm_content_bounty_targets");
case fm_content_daily_bounty: return ATSTRINGHASH("fm_content_daily_bounty");
case fm_content_dispatch_work: return ATSTRINGHASH("fm_content_dispatch_work");
case fm_content_pizza_delivery: return ATSTRINGHASH("fm_content_pizza_delivery");
}
return 0;
}
}