Files
2025-09-29 00:52:08 +02:00

1099 lines
40 KiB
Python
Executable File

//////////////////////////////////////////////////////////////////////////////////
// //
// SCRIPT NAME : item_ownership_output.sc //
// AUTHOR : Kenneth Ross //
// DESCRIPTION : Used to output list of items player can own and //
// their current ownership status. //
// //
//////////////////////////////////////////////////////////////////////////////////
// Include the standard headers (which also ensures the correct #DEFINEs are recognised)
USING "rage_builtins.sch"
USING "globals.sch"
// Do nothing in release mode
#IF IS_FINAL_BUILD
SCRIPT
ENDSCRIPT
#ENDIF
// Only include in debug mode
#IF IS_DEBUG_BUILD
USING "commands_script.sch"
USING "ped_component_public.sch"
USING "gunclub_shop_private.sch"
USING "net_gang_boss_drops.sch"
USING "net_realty_vehicle_garage.sch"
USING "net_rank_unlocks.sch"
ENUM SCRIPT_STAGE
SCRIPT_STAGE_INIT = 0,
SCRIPT_STAGE_PROCESSING,
SCRIPT_STAGE_CLEANUP
ENDENUM
SCRIPT_STAGE eScriptStage = SCRIPT_STAGE_INIT
BOOL bTerminateScript
CONST_INT ITEM_OUTPUT_CLOTHING 0
CONST_INT ITEM_OUTPUT_WEAPONS 1
CONST_INT ITEM_OUTPUT_VEHICLES 2
CONST_INT ITEM_OUTPUT_TATTOOS 3
CONST_INT ITEM_OUTPUT_PROPERTIES 4
CONST_INT ITEM_OUTPUT_TYPE_COUNT 5
ENUM ITEM_OUTPUT_STAGE
OUTPUT_STAGE_INIT = 0,
OUTPUT_STAGE_OPEN_FILE,
OUTPUT_STAGE_PROCESSING,
OUTPUT_STAGE_CLOSE_FILE
ENDENUM
ENUM ITEM_PROCESSING_STAGE
PROCESSING_STAGE_1 = 0,
PROCESSING_STAGE_2,
PROCESSING_STAGE_3,
PROCESSING_STAGE_4,
PROCESSING_STAGE_5,
PROCESSING_STAGE_END
ENDENUM
STRUCT ITEM_OUTPUT_DATA
INT iWidget_Type
BOOL bWidget_OutputOwnedItems
BOOL bWidget_OutputAllItems
BOOL bWidget_Processing
BOOL bSelection_All
INT iSelection_Type
BOOL bSelection_OutputOwnedItems
BOOL bSelection_OutputAllItems
TEXT_LABEL_63 tlPath
TEXT_LABEL_63 tlFilename
INT iClothingComp
INT iClothingProp
INT iClothingOutfit
INT iClothingDraw
BOOL bCountsInitialised
ITEM_OUTPUT_STAGE eOutputStage = OUTPUT_STAGE_INIT
ITEM_PROCESSING_STAGE eProcessingStage = PROCESSING_STAGE_1
ENDSTRUCT
ITEM_OUTPUT_DATA sOutputData
FUNC STRING GET_ITEM_OUTPUT_TYPE_NAME(INT iType)
SWITCH iType
CASE ITEM_OUTPUT_CLOTHING RETURN "Clothing" BREAK
CASE ITEM_OUTPUT_WEAPONS RETURN "Weapons" BREAK
CASE ITEM_OUTPUT_VEHICLES RETURN "Vehicles" BREAK
CASE ITEM_OUTPUT_TATTOOS RETURN "Tattoos" BREAK
CASE ITEM_OUTPUT_PROPERTIES RETURN "Properties" BREAK
ENDSWITCH
RETURN "NA"
ENDFUNC
FUNC STRING GET_ITEM_OUTPUT_HEADER(INT iType)
SWITCH iType
CASE ITEM_OUTPUT_CLOTHING RETURN "Owned,Type,TextLabel,Name" BREAK
CASE ITEM_OUTPUT_WEAPONS RETURN "Owned,Type,TextLabel,Name" BREAK
CASE ITEM_OUTPUT_VEHICLES RETURN "Owned,Type,TextLabel,Name" BREAK
CASE ITEM_OUTPUT_TATTOOS RETURN "Owned,Type,TextLabel,Name" BREAK
CASE ITEM_OUTPUT_PROPERTIES RETURN "Owned,Type,TextLabel,Name" BREAK
ENDSWITCH
RETURN "NA"
ENDFUNC
PROC OUTPUT_DEFAULT_ITEM_DATA(STRING sSubType, STRING sTextLabel, BOOL bItemOwned)
IF sOutputData.bSelection_OutputAllItems
OR (sOutputData.bSelection_OutputOwnedItems AND bItemOwned)
// Owned
SAVE_STRING_TO_DEBUG_FILE(BOOL_TO_STRING(bItemOwned))
SAVE_STRING_TO_DEBUG_FILE(",")
// Type
SAVE_STRING_TO_DEBUG_FILE(sSubType)
SAVE_STRING_TO_DEBUG_FILE(",")
// TextLabel
SAVE_STRING_TO_DEBUG_FILE(sTextLabel)
SAVE_STRING_TO_DEBUG_FILE(",")
// Name
IF DOES_TEXT_LABEL_EXIST(sTextLabel)
SAVE_STRING_TO_DEBUG_FILE(GET_STRING_FROM_TEXT_FILE(sTextLabel))
ELSE
SAVE_STRING_TO_DEBUG_FILE(sTextLabel)
ENDIF
SAVE_STRING_TO_DEBUG_FILE(",")
SAVE_NEWLINE_TO_DEBUG_FILE()
ENDIF
ENDPROC
PROC OUTPUT_WEAPON_MOD_ITEM_DATA(STRING sSubType, STRING sWeaponTextLabel, STRING sComponentTextLabel, BOOL bItemOwned)
IF sOutputData.bSelection_OutputAllItems
OR (sOutputData.bSelection_OutputOwnedItems AND bItemOwned)
// Owned
SAVE_STRING_TO_DEBUG_FILE(BOOL_TO_STRING(bItemOwned))
SAVE_STRING_TO_DEBUG_FILE(",")
// Type
SAVE_STRING_TO_DEBUG_FILE(sSubType)
SAVE_STRING_TO_DEBUG_FILE(",")
// TextLabel
SAVE_STRING_TO_DEBUG_FILE(sComponentTextLabel)
SAVE_STRING_TO_DEBUG_FILE(",")
// Name
IF DOES_TEXT_LABEL_EXIST(sComponentTextLabel)
IF DOES_TEXT_LABEL_EXIST(sWeaponTextLabel)
SAVE_STRING_TO_DEBUG_FILE(GET_STRING_FROM_TEXT_FILE(sWeaponTextLabel))
SAVE_STRING_TO_DEBUG_FILE(": ")
ENDIF
SAVE_STRING_TO_DEBUG_FILE(GET_STRING_FROM_TEXT_FILE(sComponentTextLabel))
ELSE
SAVE_STRING_TO_DEBUG_FILE(sComponentTextLabel)
ENDIF
SAVE_STRING_TO_DEBUG_FILE(",")
SAVE_NEWLINE_TO_DEBUG_FILE()
ENDIF
ENDPROC
FUNC BOOL PROCESS_CLOTHING_OUTPUT()
BOOL bItemOwned
INT iTexCount, iTex
INT iDLCItemCount, iDLCItem
INT iCurrentPed
TATTOO_FACTION_ENUM eFaction
PED_COMP_NAME_ENUM eItem
PED_COMP_NAME_ENUM eDLCOutfits
PED_INDEX pedID = PLAYER_PED_ID()
MODEL_NAMES ePedModel = GET_ENTITY_MODEL(pedID)
sTattooShopItemValues sDLCTattooData
INT iDrawablesPerFrame
IF ePedModel = MP_M_FREEMODE_01
iCurrentPed = 3
eDLCOutfits = OUTFIT_FMM_DLC
eFaction = TATTOO_MP_FM
ELIF ePedModel = MP_F_FREEMODE_01
iCurrentPed = 4
eDLCOutfits = OUTFIT_FMF_DLC
eFaction = TATTOO_MP_FM_F
ENDIF
SWITCH sOutputData.eProcessingStage
CASE PROCESSING_STAGE_1
sOutputData.bCountsInitialised = FALSE
sOutputData.eProcessingStage = PROCESSING_STAGE_2
BREAK
CASE PROCESSING_STAGE_2
/////////////////////////////////////////
/// Ped Components
///
IF NOT sOutputData.bCountsInitialised
sOutputData.iClothingComp = 0
sOutputData.iClothingDraw = 0
sOutputData.bCountsInitialised = TRUE
ENDIF
REPEAT 100 iDrawablesPerFrame
iTexCount = GET_NUMBER_OF_PED_TEXTURE_VARIATIONS(pedID, INT_TO_ENUM(PED_COMPONENT, sOutputData.iClothingComp), sOutputData.iClothingDraw)
REPEAT iTexCount iTex
bItemOwned = FALSE
eItem = GET_PED_COMP_ITEM_FROM_VARIATIONS(pedID, sOutputData.iClothingDraw, iTex, INT_TO_ENUM(PED_COMP_TYPE_ENUM, sOutputData.iClothingComp))
g_sTempCompData[1] = GET_PED_COMP_DATA_FOR_ITEM_MP(ePedModel, GET_COMP_TYPE_FROM_PED_COMPONENT(INT_TO_ENUM(PED_COMPONENT, sOutputData.iClothingComp)), eItem)
IF IS_BIT_SET(g_sTempCompData[1].iProperties, PED_COMPONENT_AVAILABLE_BIT)
IF DOES_TEXT_LABEL_EXIST(g_sTempCompData[1].sLabel)
IF (IS_BIT_SET(g_sTempCompData[1].iProperties, PED_COMPONENT_ACQUIRED_BIT))
OR (IS_BIT_SET(g_sTempCompData[1].iProperties, PED_COMPONENT_IS_DLC_BIT) AND GIVE_DLC_CLOTHING_ITEM_FOR_FREE(g_iLastDLCItemNameHash))
IF IS_BIT_SET(g_sTempCompData[1].iProperties, PED_COMPONENT_IS_DLC_BIT)
AND IS_CONTENT_ITEM_LOCKED_BY_SCRIPT(g_iLastDLCItemLockHash, g_iLastDLCItemNameHash, SHOP_PED_COMPONENT)
// Skip
ELSE
bItemOwned = TRUE
ENDIF
ENDIF
OUTPUT_DEFAULT_ITEM_DATA(GET_COMP_VARIATION_TYPE_STRING(INT_TO_ENUM(PED_COMPONENT, sOutputData.iClothingComp)), g_sTempCompData[1].sLabel, bItemOwned)
ENDIF
ENDIF
ENDREPEAT
sOutputData.iClothingDraw++
IF sOutputData.iClothingDraw >= GET_NUMBER_OF_PED_DRAWABLE_VARIATIONS(pedID, INT_TO_ENUM(PED_COMPONENT, sOutputData.iClothingComp))
sOutputData.iClothingDraw = 0
sOutputData.iClothingComp++
IF sOutputData.iClothingComp >= NUM_PED_COMPONENTS
sOutputData.bCountsInitialised = FALSE
sOutputData.eProcessingStage = PROCESSING_STAGE_3
BREAKLOOP
ENDIF
ENDIF
ENDREPEAT
BREAK
CASE PROCESSING_STAGE_3
/////////////////////////////////////////
/// Overlays
///
iDLCItemCount = GET_NUM_TATTOO_SHOP_DLC_ITEMS(eFaction)
REPEAT iDLCItemCount iDLCItem
IF GET_TATTOO_SHOP_DLC_ITEM_DATA(eFaction, iDLCItem, sDLCTattooData)
IF sDLCTattooData.UpdateGroup = HASH("torsoDecal")
IF DOES_TEXT_LABEL_EXIST(sDLCTattooData.Label)
bItemOwned = FALSE
IF IS_MP_TATTOO_UNLOCKED(INT_TO_ENUM(TATTOO_NAME_ENUM, ENUM_TO_INT(TATTOO_MP_FM_DLC)+iDLCItem))
OR GIVE_DLC_CLOTHING_ITEM_FOR_FREE(DEFAULT, sDLCTattooData.Collection, sDLCTattooData.Preset)
IF NOT IS_DLC_OVERLAY_LOCKED_BY_SCRIPT(sDLCTattooData.Collection, sDLCTattooData.Preset, INT_TO_ENUM(TATTOO_NAME_ENUM, ENUM_TO_INT(TATTOO_MP_FM_DLC)+iDLCItem))
bItemOwned = TRUE
ENDIF
ENDIF
OUTPUT_DEFAULT_ITEM_DATA("GRAPHIC", sDLCTattooData.Label, bItemOwned)
ENDIF
ENDIF
ENDIF
ENDREPEAT
sOutputData.bCountsInitialised = FALSE
sOutputData.eProcessingStage = PROCESSING_STAGE_4
BREAK
CASE PROCESSING_STAGE_4
/////////////////////////////////////////
/// Ped Props
///
IF NOT sOutputData.bCountsInitialised
sOutputData.iClothingProp = 0
sOutputData.iClothingDraw = 0
sOutputData.bCountsInitialised = TRUE
ENDIF
REPEAT 100 iDrawablesPerFrame
iTexCount = GET_NUMBER_OF_PED_PROP_TEXTURE_VARIATIONS(PLAYER_PED_ID(), INT_TO_ENUM(PED_PROP_POSITION, sOutputData.iClothingProp), sOutputData.iClothingDraw)
REPEAT iTexCount iTex
bItemOwned = FALSE
eItem = GET_PROP_ITEM_FROM_VARIATIONS(pedID, sOutputData.iClothingDraw, iTex, INT_TO_ENUM(PED_PROP_POSITION, sOutputData.iClothingProp))
g_sTempCompData[1] = GET_PED_COMP_DATA_FOR_ITEM_MP(ePedModel, COMP_TYPE_PROPS, eItem)
IF IS_BIT_SET(g_sTempCompData[1].iProperties, PED_COMPONENT_AVAILABLE_BIT)
IF DOES_TEXT_LABEL_EXIST(g_sTempCompData[1].sLabel)
IF (IS_BIT_SET(g_sTempCompData[1].iProperties, PED_COMPONENT_ACQUIRED_BIT))
OR (IS_BIT_SET(g_sTempCompData[1].iProperties, PED_COMPONENT_IS_DLC_BIT) AND GIVE_DLC_CLOTHING_ITEM_FOR_FREE(g_iLastDLCItemNameHash))
IF IS_BIT_SET(g_sTempCompData[1].iProperties, PED_COMPONENT_IS_DLC_BIT)
AND IS_CONTENT_ITEM_LOCKED_BY_SCRIPT(g_iLastDLCItemLockHash, g_iLastDLCItemNameHash, SHOP_PED_PROP)
// Skip
ELSE
bItemOwned = TRUE
ENDIF
ENDIF
OUTPUT_DEFAULT_ITEM_DATA(GET_PROP_POSITION_STRING(INT_TO_ENUM(PED_PROP_POSITION, sOutputData.iClothingProp)), g_sTempCompData[1].sLabel, bItemOwned)
ENDIF
ENDIF
ENDREPEAT
sOutputData.iClothingDraw++
IF sOutputData.iClothingDraw >= GET_NUMBER_OF_PED_PROP_DRAWABLE_VARIATIONS(PLAYER_PED_ID(), INT_TO_ENUM(PED_PROP_POSITION, sOutputData.iClothingProp))
sOutputData.iClothingDraw = 0
sOutputData.iClothingProp++
IF sOutputData.iClothingProp >= NUMBER_OF_PED_PROP_TYPES
sOutputData.bCountsInitialised = FALSE
sOutputData.eProcessingStage = PROCESSING_STAGE_5
BREAKLOOP
ENDIF
ENDIF
ENDREPEAT
BREAK
CASE PROCESSING_STAGE_5
/////////////////////////////////////////
/// Outfits
///
iDLCItemCount = SETUP_SHOP_PED_OUTFIT_QUERY(iCurrentPed, ENUM_TO_INT(CLO_SHOP_LOW))
REPEAT ENUM_TO_INT(eDLCOutfits)+iDLCItemCount iDLCItem
eItem = INT_TO_ENUM(PED_COMP_NAME_ENUM, ENUM_TO_INT(eDLCOutfits)+iDLCItem)
g_sTempCompData[1] = GET_PED_COMP_DATA_FOR_ITEM_MP(ePedModel, COMP_TYPE_OUTFIT, eItem)
IF IS_BIT_SET(g_sTempCompData[1].iProperties, PED_COMPONENT_AVAILABLE_BIT)
IF DOES_TEXT_LABEL_EXIST(g_sTempCompData[1].sLabel)
IF (IS_BIT_SET(g_sTempCompData[1].iProperties, PED_COMPONENT_ACQUIRED_BIT))
OR (IS_BIT_SET(g_sTempCompData[1].iProperties, PED_COMPONENT_IS_DLC_BIT) AND GIVE_DLC_CLOTHING_ITEM_FOR_FREE(g_iLastDLCItemNameHash))
bItemOwned = TRUE
ELSE
bItemOwned = FALSE
ENDIF
OUTPUT_DEFAULT_ITEM_DATA("OUTFIT", g_sTempCompData[1].sLabel, bItemOwned)
ENDIF
ENDIF
ENDREPEAT
sOutputData.eProcessingStage = PROCESSING_STAGE_END
BREAK
ENDSWITCH
RETURN (sOutputData.eProcessingStage != PROCESSING_STAGE_END)
ENDFUNC
FUNC BOOL PROCESS_WEAPONS_OUTPUT()
INT iDLCIndex
INT iComponent
INT iTint
INT iWeapon
scrShopWeaponData weaponData
TEXT_LABEL_15 tlWeaponLabel, tlCompLabel
WEAPONCOMPONENT_TYPE eComponent
PLAYERKIT ePlayerKit
BOOL bItemOwned
WEAPON_TYPE eWeapon = GET_WEAPONTYPE_FROM_ITERATED_INDEX(iWeapon)
WHILE eWeapon != WEAPONTYPE_INVALID
tlWeaponLabel = GET_WEAPON_NAME(eWeapon)
IF eWeapon != WEAPONTYPE_UNARMED
AND eWeapon != WEAPONTYPE_ANIMAL
AND eWeapon != WEAPONTYPE_COUGAR
AND GET_HASH_KEY(tlWeaponLabel) != GET_HASH_KEY("WT_INVALID")
bItemOwned = FALSE
IF NOT IS_DLC_WEAPON_LOCKED_BY_SCRIPT(eWeapon)
AND IS_MP_WEAPON_PURCHASED(eWeapon)
bItemOwned = TRUE
iDLCIndex = GET_DLC_WEAPON_DATA_FOR_WEAPON_TYPE(eWeapon, weaponData)
IF iDLCIndex != -1
AND GET_DLC_WEAPON_DATA(iDLCIndex, weaponData)
AND IS_CONTENT_ITEM_LOCKED(weaponData.m_lockHash)
bItemOwned = FALSE
ENDIF
ENDIF
OUTPUT_DEFAULT_ITEM_DATA("WEAPON", tlWeaponLabel, bItemOwned)
iComponent = 0
WHILE LOOKUP_WEAPON_ADDONS(eComponent, eWeapon, iComponent)
bItemOwned = FALSE
IF IS_MP_WEAPON_ADDON_PURCHASED(eComponent, eWeapon)
bItemOwned = TRUE
ENDIF
IF sOutputData.bSelection_OutputAllItems
OR (sOutputData.bSelection_OutputOwnedItems AND bItemOwned)
tlCompLabel = GET_WEAPON_COMPONENT_NAME(eComponent, eWeapon)
OUTPUT_WEAPON_MOD_ITEM_DATA("WEAPON_MOD", tlWeaponLabel, tlCompLabel, bItemOwned)
ENDIF
iComponent++
ENDWHILE
iTint = 0
ePlayerKit = LOOKUP_WEAPON_TINT(eWeapon, iTint)
WHILE ePlayerKit != PLAYERKIT_NONE
bItemOwned = FALSE
IF IS_MP_KIT_UNLOCKED(ePlayerKit)
bItemOwned = TRUE
ENDIF
IF sOutputData.bSelection_OutputAllItems
OR (sOutputData.bSelection_OutputOwnedItems AND bItemOwned)
tlCompLabel = "TINT_"
tlCompLabel += iTint
OUTPUT_WEAPON_MOD_ITEM_DATA("WEAPON_TINT", tlWeaponLabel, tlCompLabel, bItemOwned)
ENDIF
iTint++
ePlayerKit = LOOKUP_WEAPON_TINT(eWeapon, iTint)
ENDWHILE
ENDIF
iWeapon++
eWeapon = GET_WEAPONTYPE_FROM_ITERATED_INDEX(iWeapon)
ENDWHILE
RETURN FALSE
ENDFUNC
FUNC BOOL PROCESS_VEHICLES_OUTPUT()
BOOl bItemOwned
INT iVehToCheck
TEXT_LABEL tlLabel
REPEAT MAX_MP_SAVED_VEHICLES iVehToCheck
bItemOwned = FALSE
tlLabel = "NA"
IF g_MpSavedVehicles[iVehToCheck].VehicleSetupMP.VehicleSetup.eModel != DUMMY_MODEL_FOR_SCRIPT
IF NOT IS_BIT_SET(g_MpSavedVehicles[iVehToCheck].iVehicleBS,MP_SAVED_VEHICLE_DESTROYED)
OR IS_BIT_SET(g_MpSavedVehicles[iVehToCheck].iVehicleBS,MP_SAVED_VEHICLE_INSURED)
bItemOwned = TRUE
tlLabel = GET_DISPLAY_NAME_FROM_VEHICLE_MODEL(g_MpSavedVehicles[iVehToCheck].VehicleSetupMP.VehicleSetup.eModel)
ENDIF
ENDIF
OUTPUT_DEFAULT_ITEM_DATA("VEHICLE", tlLabel, bItemOwned)
ENDREPEAT
RETURN FALSE
ENDFUNC
FUNC BOOL PROCESS_TATTOOS_OUTPUT()
REQUEST_ADDITIONAL_TEXT("TAT_MNU", MENU_TEXT_SLOT)
IF NOT HAS_THIS_ADDITIONAL_TEXT_LOADED("TAT_MNU", MENU_TEXT_SLOT)
RETURN TRUE
ENDIF
BOOL bItemOwned
TATTOO_DATA_STRUCT sTattooData
TATTOO_FACTION_ENUM eFaction = GET_TATTOO_FACTION_FOR_PED(PLAYER_PED_ID())
INT i
REPEAT MAX_NUMBER_OF_TATTOOS i
bItemOwned = FALSE
IF GET_TATTOO_DATA(sTattooData, INT_TO_ENUM(TATTOO_NAME_ENUM, i), eFaction, PLAYER_PED_ID())
IF sTattooData.iUpgradeGroup != HASH("torsoDecal")
AND sTattooData.iUpgradeGroup != HASH("hairOverlay")
AND sTattooData.iUpgradeGroup != HASH("crewLogo")
AND sTattooData.iUpgradeGroup != HASH("rank")
AND sTattooData.iPreset != HASH("000_A")
AND sTattooData.iPreset != HASH("000_B")
AND sTattooData.iPreset != HASH("000_C")
AND sTattooData.iPreset != HASH("000_D")
AND sTattooData.iPreset != HASH("000_E")
AND sTattooData.iPreset != HASH("000_F")
IF IS_MP_TATTOO_PURCHASED(sTattooData.eEnum)
bItemOwned = TRUE
ENDIF
OUTPUT_DEFAULT_ITEM_DATA("TATTOO", sTattooData.sLabel, bItemOwned)
ENDIF
ENDIF
ENDREPEAT
sTattooShopItemValues sDLCTattooData
TATTOO_NAME_ENUM eDLCTattoo
INT iDLCCount = GET_NUM_TATTOO_SHOP_DLC_ITEMS(eFaction)
INT iDLCIndex
REPEAT iDLCCount iDLCIndex
bItemOwned = FALSE
IF GET_TATTOO_SHOP_DLC_ITEM_DATA(eFaction, iDLCIndex, sDLCTattooData)
AND NOT IS_CONTENT_ITEM_LOCKED(sDLCTattooData.m_lockHash)
IF sDLCTattooData.UpdateGroup != HASH("torsoDecal")
AND sDLCTattooData.UpdateGroup != HASH("hairOverlay")
AND sDLCTattooData.UpdateGroup != HASH("crewLogo")
AND sDLCTattooData.UpdateGroup != HASH("rank")
eDLCTattoo = INT_TO_ENUM(TATTOO_NAME_ENUM, ENUM_TO_INT(TATTOO_MP_FM_DLC)+iDLCIndex)
IF IS_MP_TATTOO_PURCHASED(eDLCTattoo)
AND NOT IS_DLC_OVERLAY_LOCKED_BY_SCRIPT(sDLCTattooData.Collection, sDLCTattooData.Preset, eDLCTattoo)
bItemOwned = TRUE
ENDIF
OUTPUT_DEFAULT_ITEM_DATA("TATTOO", sDLCTattooData.Label, bItemOwned)
ENDIF
ENDIF
ENDREPEAT
CLEAR_ADDITIONAL_TEXT(MENU_TEXT_SLOT, TRUE)
RETURN FALSE
ENDFUNC
FUNC BOOL PROCESS_PROPERTIES_OUTPUT()
SIMPLE_INTERIOR_TYPE eSimpleInteriorType
SIMPLE_INTERIORS eSimpleInteriorID
INT iSimpleInterior
FACTORY_TYPE eFactoryType
FACTORY_ID eFactory
INT iFactory
INT iFactoryType
INT iPropertyID
INT iPropertySlot
INT iMod, iCurrentMod
TEXT_LABEL_31 tlCategory, tlName
BOOL bItemOwned
/////////////////////////////////////////
/// Warehouses
///
eSimpleInteriorType = SIMPLE_INTERIOR_TYPE_WAREHOUSE
REPEAT ENUM_TO_INT(SIMPLE_INTERIOR_END) iSimpleInterior
eSimpleInteriorID = INT_TO_ENUM(SIMPLE_INTERIORS, iSimpleInterior)
IF GET_SIMPLE_INTERIOR_TYPE(eSimpleInteriorID) = eSimpleInteriorType
tlName = GET_WAREHOUSE_NAME(GET_WAREHOUSE_ID_FROM_SIMPLE_INTERIOR_ID(eSimpleInteriorID))
bItemOwned = DOES_PLAYER_OWN_WAREHOUSE(PLAYER_ID(), GET_WAREHOUSE_ID_FROM_SIMPLE_INTERIOR_ID(eSimpleInteriorID))
OUTPUT_DEFAULT_ITEM_DATA(GET_SIMPLE_INTERIOR_TYPE_DEBUG_NAME(eSimpleInteriorType), tlName, bItemOwned)
ENDIF
ENDREPEAT
/////////////////////////////////////////
/// Import/Export Garage
///
eSimpleInteriorType = SIMPLE_INTERIOR_TYPE_IE_GARAGE
REPEAT ENUM_TO_INT(SIMPLE_INTERIOR_END) iSimpleInterior
eSimpleInteriorID = INT_TO_ENUM(SIMPLE_INTERIORS, iSimpleInterior)
IF GET_SIMPLE_INTERIOR_TYPE(eSimpleInteriorID) = eSimpleInteriorType
tlName = GET_IE_GARAGE_NAME_LABEL(GET_IMPORT_EXPORT_GARAGE_ID_FROM_SIMPLE_INTERIOR_ID(eSimpleInteriorID))
bItemOwned = (GET_PLAYERS_OWNED_IE_GARAGE(PLAYER_ID()) = GET_IMPORT_EXPORT_GARAGE_ID_FROM_SIMPLE_INTERIOR_ID(eSimpleInteriorID))
OUTPUT_DEFAULT_ITEM_DATA(GET_SIMPLE_INTERIOR_TYPE_DEBUG_NAME(eSimpleInteriorType), tlName, bItemOwned)
ENDIF
ENDREPEAT
/////////////////////////////////////////
/// Hangar
///
eSimpleInteriorType = SIMPLE_INTERIOR_TYPE_HANGAR
REPEAT ENUM_TO_INT(SIMPLE_INTERIOR_END) iSimpleInterior
eSimpleInteriorID = INT_TO_ENUM(SIMPLE_INTERIORS, iSimpleInterior)
IF GET_SIMPLE_INTERIOR_TYPE(eSimpleInteriorID) = eSimpleInteriorType
tlName = GET_HANGAR_NAME_FROM_ID(GET_HANGAR_ID_FROM_SIMPLE_INTERIOR_ID(eSimpleInteriorID))
bItemOwned = (GET_PLAYERS_OWNED_HANGAR(PLAYER_ID()) = GET_HANGAR_ID_FROM_SIMPLE_INTERIOR_ID(eSimpleInteriorID))
OUTPUT_DEFAULT_ITEM_DATA(GET_SIMPLE_INTERIOR_TYPE_DEBUG_NAME(eSimpleInteriorType), tlName, bItemOwned)
ENDIF
ENDREPEAT
/////////////////////////////////////////
/// Defunct Base
///
eSimpleInteriorType = SIMPLE_INTERIOR_TYPE_DEFUNCT_BASE
REPEAT ENUM_TO_INT(SIMPLE_INTERIOR_END) iSimpleInterior
eSimpleInteriorID = INT_TO_ENUM(SIMPLE_INTERIORS, iSimpleInterior)
IF GET_SIMPLE_INTERIOR_TYPE(eSimpleInteriorID) = eSimpleInteriorType
tlName = GET_DEFUNCT_BASE_NAME_FROM_ID(GET_DEFUNCT_BASE_ID_FROM_SIMPLE_INTERIOR_ID(eSimpleInteriorID))
bItemOwned = (GET_PLAYERS_OWNED_DEFUNCT_BASE(PLAYER_ID()) = GET_DEFUNCT_BASE_ID_FROM_SIMPLE_INTERIOR_ID(eSimpleInteriorID))
OUTPUT_DEFAULT_ITEM_DATA(GET_SIMPLE_INTERIOR_TYPE_DEBUG_NAME(eSimpleInteriorType), tlName, bItemOwned)
ENDIF
ENDREPEAT
/////////////////////////////////////////
/// Nightclub / Business HUB
///
eSimpleInteriorType = SIMPLE_INTERIOR_TYPE_BUSINESS_HUB
REPEAT ENUM_TO_INT(SIMPLE_INTERIOR_END) iSimpleInterior
eSimpleInteriorID = INT_TO_ENUM(SIMPLE_INTERIORS, iSimpleInterior)
IF GET_SIMPLE_INTERIOR_TYPE(eSimpleInteriorID) = eSimpleInteriorType
tlName = GET_BUSINESS_HUB_NAME_FROM_ID(GET_BUSINESS_HUB_ID_FROM_SIMPLE_INTERIOR_ID(eSimpleInteriorID))
bItemOwned = (GET_PLAYERS_OWNED_BUSINESS_HUB(PLAYER_ID()) = GET_BUSINESS_HUB_ID_FROM_SIMPLE_INTERIOR_ID(eSimpleInteriorID))
OUTPUT_DEFAULT_ITEM_DATA(GET_SIMPLE_INTERIOR_TYPE_DEBUG_NAME(eSimpleInteriorType), tlName, bItemOwned)
ENDIF
ENDREPEAT
/////////////////////////////////////////
/// Arena Wars Garage
///
eSimpleInteriorType = SIMPLE_INTERIOR_TYPE_ARENA_GARAGE
REPEAT ENUM_TO_INT(SIMPLE_INTERIOR_END) iSimpleInterior
eSimpleInteriorID = INT_TO_ENUM(SIMPLE_INTERIORS, iSimpleInterior)
IF GET_SIMPLE_INTERIOR_TYPE(eSimpleInteriorID) = eSimpleInteriorType
tlName = GET_ARENA_GARAGE_NAME_FROM_ID(GET_ARENA_GARAGE_ID_FROM_SIMPLE_INTERIOR_ID(eSimpleInteriorID))
bItemOwned = (GET_PLAYERS_OWNED_ARENA_GARAGE(PLAYER_ID()) = GET_ARENA_GARAGE_ID_FROM_SIMPLE_INTERIOR_ID(eSimpleInteriorID))
OUTPUT_DEFAULT_ITEM_DATA(GET_SIMPLE_INTERIOR_TYPE_DEBUG_NAME(eSimpleInteriorType), tlName, bItemOwned)
ENDIF
ENDREPEAT
/////////////////////////////////////////
/// Casino Apartment
///
eSimpleInteriorType = SIMPLE_INTERIOR_TYPE_CASINO_APARTMENT
REPEAT ENUM_TO_INT(SIMPLE_INTERIOR_END) iSimpleInterior
eSimpleInteriorID = INT_TO_ENUM(SIMPLE_INTERIORS, iSimpleInterior)
IF GET_SIMPLE_INTERIOR_TYPE(eSimpleInteriorID) = eSimpleInteriorType
tlName = GET_CASINO_APT_NAME_FROM_ID(GET_CASINO_APT_ID_FROM_SIMPLE_INTERIOR_ID(eSimpleInteriorID))
bItemOwned = (GET_PLAYERS_OWNED_CASINO_APARTMENT(PLAYER_ID()) = GET_CASINO_APT_ID_FROM_SIMPLE_INTERIOR_ID(eSimpleInteriorID))
OUTPUT_DEFAULT_ITEM_DATA(GET_SIMPLE_INTERIOR_TYPE_DEBUG_NAME(eSimpleInteriorType), tlName, bItemOwned)
ENDIF
ENDREPEAT
/////////////////////////////////////////
/// Arcade
///
eSimpleInteriorType = SIMPLE_INTERIOR_TYPE_ARCADE
REPEAT ENUM_TO_INT(SIMPLE_INTERIOR_END) iSimpleInterior
eSimpleInteriorID = INT_TO_ENUM(SIMPLE_INTERIORS, iSimpleInterior)
IF GET_SIMPLE_INTERIOR_TYPE(eSimpleInteriorID) = eSimpleInteriorType
tlName = GET_ARCADE_NAME_FROM_ID(GET_ARCADE_PROPERTY_ID_FROM_SIMPLE_INTERIOR_ID(eSimpleInteriorID))
bItemOwned = (GET_PLAYERS_OWNED_ARCADE_PROPERTY(PLAYER_ID()) = GET_ARCADE_PROPERTY_ID_FROM_SIMPLE_INTERIOR_ID(eSimpleInteriorID))
OUTPUT_DEFAULT_ITEM_DATA(GET_SIMPLE_INTERIOR_TYPE_DEBUG_NAME(eSimpleInteriorType), tlName, bItemOwned)
ENDIF
ENDREPEAT
/////////////////////////////////////////
/// Auto Shop
///
eSimpleInteriorType = SIMPLE_INTERIOR_TYPE_AUTO_SHOP
REPEAT ENUM_TO_INT(SIMPLE_INTERIOR_END) iSimpleInterior
eSimpleInteriorID = INT_TO_ENUM(SIMPLE_INTERIORS, iSimpleInterior)
IF GET_SIMPLE_INTERIOR_TYPE(eSimpleInteriorID) = eSimpleInteriorType
tlName = GET_AUTO_SHOP_NAME_FROM_ID(GET_AUTO_SHOP_PROPERTY_ID_FROM_SIMPLE_INTERIOR_ID(eSimpleInteriorID))
bItemOwned = (GET_PLAYERS_OWNED_AUTO_SHOP_PROPERTY(PLAYER_ID()) = GET_AUTO_SHOP_PROPERTY_ID_FROM_SIMPLE_INTERIOR_ID(eSimpleInteriorID))
OUTPUT_DEFAULT_ITEM_DATA(GET_SIMPLE_INTERIOR_TYPE_DEBUG_NAME(eSimpleInteriorType), tlName, bItemOwned)
ENDIF
ENDREPEAT
/////////////////////////////////////////
/// Fixer HQ
///
eSimpleInteriorType = SIMPLE_INTERIOR_TYPE_FIXER_HQ
REPEAT ENUM_TO_INT(SIMPLE_INTERIOR_END) iSimpleInterior
eSimpleInteriorID = INT_TO_ENUM(SIMPLE_INTERIORS, iSimpleInterior)
IF GET_SIMPLE_INTERIOR_TYPE(eSimpleInteriorID) = eSimpleInteriorType
tlName = GET_FIXER_HQ_NAME_FROM_ID(GET_FIXER_HQ_ID_FROM_SIMPLE_INTERIOR_ID(eSimpleInteriorID))
bItemOwned = (GET_PLAYERS_OWNED_FIXER_HQ(PLAYER_ID()) = GET_FIXER_HQ_ID_FROM_SIMPLE_INTERIOR_ID(eSimpleInteriorID))
OUTPUT_DEFAULT_ITEM_DATA(GET_SIMPLE_INTERIOR_TYPE_DEBUG_NAME(eSimpleInteriorType), tlName, bItemOwned)
ENDIF
ENDREPEAT
/////////////////////////////////////////
/// Multistory Garage
///
#IF FEATURE_DLC_2_2022
eSimpleInteriorType = SIMPLE_INTERIOR_TYPE_MULTISTOREY_GARAGE
REPEAT ENUM_TO_INT(SIMPLE_INTERIOR_END) iSimpleInterior
eSimpleInteriorID = INT_TO_ENUM(SIMPLE_INTERIORS, iSimpleInterior)
IF GET_SIMPLE_INTERIOR_TYPE(eSimpleInteriorID) = eSimpleInteriorType
tlName = "MULTISTOREY_"
tlName += ENUM_TO_INT(GET_MULTISTOREY_GARAGE_ID_FROM_SIMPLE_INTERIOR_ID(eSimpleInteriorID))
bItemOwned = (GET_PLAYERS_OWNED_MULTISTOREY_GARAGE(PLAYER_ID()) = GET_MULTISTOREY_GARAGE_ID_FROM_SIMPLE_INTERIOR_ID(eSimpleInteriorID))
OUTPUT_DEFAULT_ITEM_DATA(GET_SIMPLE_INTERIOR_TYPE_DEBUG_NAME(eSimpleInteriorType), tlName, bItemOwned)
ENDIF
ENDREPEAT
#ENDIF
/////////////////////////////////////////
/// Factories / Businesses
///
FOR iFactoryType = ENUM_TO_INT(FACTORY_TYPE_FAKE_IDS) TO ENUM_TO_INT(FACTORY_TYPE_WEAPONS)
eFactoryType = INT_TO_ENUM(FACTORY_TYPE, iFactoryType)
REPEAT ENUM_TO_INT(FACTORY_ID_MAX) iFactory
eFactory = INT_TO_ENUM(FACTORY_ID, iFactory)
IF GET_FACTORY_TYPE_FROM_FACTORY_ID(eFactory) = eFactoryType
tlName = GET_FACTORY_NAME_FROM_ID(eFactory)
bItemOwned = DOES_PLAYER_OWN_FACTORY(PLAYER_ID(), eFactory)
SWITCH eFactoryType
CASE FACTORY_TYPE_CRACK OUTPUT_DEFAULT_ITEM_DATA("FACTORY_CRACK", tlName, bItemOwned) BREAK
CASE FACTORY_TYPE_METH OUTPUT_DEFAULT_ITEM_DATA("FACTORY_METH", tlName, bItemOwned) BREAK
CASE FACTORY_TYPE_FAKE_IDS OUTPUT_DEFAULT_ITEM_DATA("FACTORY_FAKE_ID", tlName, bItemOwned) BREAK
CASE FACTORY_TYPE_FAKE_MONEY OUTPUT_DEFAULT_ITEM_DATA("FACTORY_FAKE_CASH", tlName, bItemOwned) BREAK
CASE FACTORY_TYPE_WEED OUTPUT_DEFAULT_ITEM_DATA("FACTORY_WEED", tlName, bItemOwned) BREAK
CASE FACTORY_TYPE_WEAPONS OUTPUT_DEFAULT_ITEM_DATA("FACTORY_WEAPONS", tlName, bItemOwned) BREAK
ENDSWITCH
ENDIF
ENDREPEAT
ENDFOR
/////////////////////////////////////////
/// Yacht
///
OUTPUT_DEFAULT_ITEM_DATA("YACHT", "YACHT", DOES_PLAYER_OWN_PRIVATE_YACHT(PLAYER_ID()))
iCurrentMod = GET_PACKED_STAT_INT(PACKED_MP_CHAR_YACHT_MOD)
REPEAT 16 iMod
bItemOwned = (iMod = iCurrentMod)
tlName = "MOD_"
tlName += iMod
OUTPUT_DEFAULT_ITEM_DATA("YACHT", tlName, bItemOwned)
ENDREPEAT
iCurrentMod = GET_PACKED_STAT_INT(PACKED_MP_CHAR_YACHT_FIXTURE)
REPEAT 2 iMod
bItemOwned = (iMod = iCurrentMod)
tlName = "FIXTURE_"
tlName += iMod
OUTPUT_DEFAULT_ITEM_DATA("YACHT", tlName, bItemOwned)
ENDREPEAT
iCurrentMod = GET_PACKED_STAT_INT(PACKED_MP_CHAR_YACHT_LIGHTING)
REPEAT 8 iMod
bItemOwned = (iMod = iCurrentMod)
tlName = "LIGHTING_"
tlName += iMod
OUTPUT_DEFAULT_ITEM_DATA("YACHT", tlName, bItemOwned)
ENDREPEAT
iCurrentMod = GET_PACKED_STAT_INT(PACKED_MP_CHAR_YACHT_FLAG)
REPEAT 46 iMod
bItemOwned = (iMod = iCurrentMod)
tlName = "FLAG_"
tlName += iMod
OUTPUT_DEFAULT_ITEM_DATA("YACHT", tlName, bItemOwned)
ENDREPEAT
iCurrentMod = GET_PACKED_STAT_INT(PACKED_MP_CHAR_YACHT_COLOR)
REPEAT 16 iMod
bItemOwned = (iMod = iCurrentMod)
tlName = "COLOR_"
tlName += iMod
OUTPUT_DEFAULT_ITEM_DATA("YACHT", tlName, bItemOwned)
ENDREPEAT
/////////////////////////////////////////
/// Subarmarine - Kosatka
///
OUTPUT_DEFAULT_ITEM_DATA("KOSATKA", "KOSATKA", DOES_PLAYER_OWN_A_SUBMARINE(PLAYER_ID()))
iCurrentMod = GET_PACKED_STAT_INT(GET_STATS_PACKED_FOR_KOSATKA_UPGRADE(eKOSATKA_MOD_COLOUR))
REPEAT 16 iMod
bItemOwned = (iMod = iCurrentMod)
tlName = "COLOR_"
tlName += iMod
OUTPUT_DEFAULT_ITEM_DATA("KOSATKA", tlName, bItemOwned)
ENDREPEAT
iCurrentMod = GET_PACKED_STAT_INT(GET_STATS_PACKED_FOR_KOSATKA_UPGRADE(eKOSATKA_MOD_FLAG))
REPEAT 46 iMod
bItemOwned = (iMod = iCurrentMod)
tlName = "FLAG_"
tlName += iMod
OUTPUT_DEFAULT_ITEM_DATA("KOSATKA", tlName, bItemOwned)
ENDREPEAT
OUTPUT_DEFAULT_ITEM_DATA("KOSATKA", "MISSILES", GET_PACKED_STAT_INT(GET_STATS_PACKED_FOR_KOSATKA_UPGRADE(eKOSATKA_MOD_MISSILES)) != 0)
OUTPUT_DEFAULT_ITEM_DATA("KOSATKA", "SONAR", GET_PACKED_STAT_INT(GET_STATS_PACKED_FOR_KOSATKA_UPGRADE(eKOSATKA_MOD_SONAR)) != 0)
OUTPUT_DEFAULT_ITEM_DATA("KOSATKA", "WEAPON_STATION", GET_PACKED_STAT_INT(GET_STATS_PACKED_FOR_KOSATKA_UPGRADE(eKOSATKA_MOD_WEAPON_STATION)) != 0)
OUTPUT_DEFAULT_ITEM_DATA("KOSATKA", "SEASPARROW2", GET_PACKED_STAT_INT(GET_STATS_PACKED_FOR_KOSATKA_UPGRADE(eKOSATKA_MOD_SEASPARROW2)) != 0)
OUTPUT_DEFAULT_ITEM_DATA("KOSATKA", "AVISA", GET_PACKED_STAT_INT(GET_STATS_PACKED_FOR_KOSATKA_UPGRADE(eKOSATKA_MOD_AVISA)) != 0)
iCurrentMod = GET_PACKED_STAT_INT(PACKED_MP_INT_SUB_HELI_C)
REPEAT 30 iMod
bItemOwned = (iMod = iCurrentMod)
tlName = "AVISA_COLOR_"
tlName += iMod
OUTPUT_DEFAULT_ITEM_DATA("KOSATKA", tlName, bItemOwned)
ENDREPEAT
iCurrentMod = GET_PACKED_STAT_INT(PACKED_MP_INT_SUB_HELI_W)
REPEAT 3 iMod
bItemOwned = (iMod = iCurrentMod)
tlName = "AVISA_WEAPON_"
tlName += iMod
OUTPUT_DEFAULT_ITEM_DATA("KOSATKA", tlName, bItemOwned)
ENDREPEAT
iCurrentMod = GET_PACKED_STAT_INT(PACKED_MP_INT_SUB_HELI_CM)
REPEAT 3 iMod
bItemOwned = (iMod = iCurrentMod)
tlName = "AVISA_COUNTER_"
tlName += iMod
OUTPUT_DEFAULT_ITEM_DATA("KOSATKA", tlName, bItemOwned)
ENDREPEAT
/////////////////////////////////////////
/// Hacker Truck - Terrorbyte
///
OUTPUT_DEFAULT_ITEM_DATA("TERRORBYTE", "TERRORBYTE", IS_HACKER_TRUCK_PURCHASED())
OUTPUT_DEFAULT_ITEM_DATA("TERRORBYTE", "DRONE", IS_PLAYER_HACKER_TRUCK_DRONE_STATION_PURCHASED(PLAYER_ID()))
OUTPUT_DEFAULT_ITEM_DATA("TERRORBYTE", "MISSILE", IS_PLAYER_HACKER_TRUCK_MISSILE_LAUNCHER_PURCHASED(PLAYER_ID()))
OUTPUT_DEFAULT_ITEM_DATA("TERRORBYTE", "BIKE_WORKSHOP", IS_PLAYER_HACKER_TRUCK_MOTORCYCLE_WORKSHOP_PURCHASED(PLAYER_ID()))
OUTPUT_DEFAULT_ITEM_DATA("TERRORBYTE", "WEAPON_WORKSHOP", IS_PLAYER_HACKER_TRUCK_WEAPON_STATION_PURCHASED(PLAYER_ID()))
iCurrentMod = GET_PLAYER_HACKER_TRUCK_VEHICLE_INTERIOR_DECAL_PURCHASED(PLAYER_ID())
REPEAT 25 iMod
bItemOwned = (iMod = iCurrentMod)
tlName = "INTERIOR_DECAL_"
tlName += iMod
OUTPUT_DEFAULT_ITEM_DATA("TERRORBYTE", tlName, bItemOwned)
ENDREPEAT
iCurrentMod = GET_PLAYER_HACKER_TRUCK_VEHICLE_INTERIOR_TINT_PURCHASED(PLAYER_ID())
REPEAT 9 iMod
bItemOwned = (iMod = iCurrentMod)
tlName = "INTERIOR_TINT_"
tlName += iMod
OUTPUT_DEFAULT_ITEM_DATA("TERRORBYTE", tlName, bItemOwned)
ENDREPEAT
/////////////////////////////////////////
/// Armory Truck - MOC
///
OUTPUT_DEFAULT_ITEM_DATA("MOC", "MOC", IS_GUNRUNNING_TRUCK_PURCHASED())
OUTPUT_DEFAULT_ITEM_DATA("MOC", GET_DISPLAY_NAME_FROM_VEHICLE_MODEL(PHANTOM3), GET_MP_INT_CHARACTER_STAT(MP_STAT_INV_TRUCK_MODEL_0) = ENUM_TO_INT(PHANTOM3))
OUTPUT_DEFAULT_ITEM_DATA("MOC", GET_DISPLAY_NAME_FROM_VEHICLE_MODEL(HAULER2), GET_MP_INT_CHARACTER_STAT(MP_STAT_INV_TRUCK_MODEL_0) = ENUM_TO_INT(HAULER2))
iCurrentMod = GET_PACKED_STAT_INT(PACKED_MP_INT_TRUCK_SECTION_1_NUM)
FOR iMod = AT_STI_WHITE_LIGTH_GREY TO AT_STI_BLACK_BLUE
bItemOwned = (iMod = iCurrentMod)
tlName = GET_ARMORY_TRUCK_SECTION_TINT_NAME(INT_TO_ENUM(ARMORY_TRUCK_SECTION_TINT_ENUM, iMod))
OUTPUT_DEFAULT_ITEM_DATA("MOC", tlName, bItemOwned)
ENDFOR
REPEAT AT_ST_MAX_SECTION_TYPES iMod
bItemOwned = FALSE
IF iMod != ENUM_TO_INT(AT_ST_EMPTY_SINGLE)
AND iMod != ENUM_TO_INT(AT_ST_EMPTY_DOUBLE)
AND iMod != ENUM_TO_INT(AT_ST_EMPTY_SINGLE_DOOR)
AND iMod != ENUM_TO_INT(AT_ST_UNDEFINED)
IF GET_PACKED_STAT_INT(PACKED_MP_INT_TRUCK_SECTION_1_TYPE) = iMod
OR GET_PACKED_STAT_INT(PACKED_MP_INT_TRUCK_SECTION_2_TYPE) = iMod
OR GET_PACKED_STAT_INT(PACKED_MP_INT_TRUCK_SECTION_3_TYPE) = iMod
bItemOwned = TRUE
ENDIF
tlName = GET_ARMORY_TRUCK_SECTION_TYPE_NAME(INT_TO_ENUM(ARMORY_TRUCK_SECTION_TYPE_ENUM, iMod))
OUTPUT_DEFAULT_ITEM_DATA("MOC", tlName, bItemOwned)
ENDIF
ENDREPEAT
/////////////////////////////////////////
/// Armory Aircraft - Avenger
///
OUTPUT_DEFAULT_ITEM_DATA("AVENGER", "AVENGER", IS_ARMORY_AIRCRAFT_PURCHASED())
OUTPUT_DEFAULT_ITEM_DATA("AVENGER", "TURRET", IS_PLAYER_ARMORY_AIRCRAFT_GUN_TURRET_PURCHASED(PLAYER_ID()))
OUTPUT_DEFAULT_ITEM_DATA("AVENGER", "VEHICLE_WORKSHOP", IS_PLAYER_ARMORY_AIRCRAFT_VEHICLE_WORKSHOP_PURCHASED(PLAYER_ID()))
OUTPUT_DEFAULT_ITEM_DATA("AVENGER", "WEAPON_WORKSHOP", IS_PLAYER_ARMORY_AIRCRAFT_WEAPON_WORKSHOP_PURCHASED(PLAYER_ID()))
iCurrentMod = GET_PLAYER_ARMORY_AIRCRAFT_VEHICLE_INTERIOR_PURCHASED(PLAYER_ID())
REPEAT 9 iMod
bItemOwned = (iMod = iCurrentMod)
tlName = "INTERIOR_"
tlName += iMod
OUTPUT_DEFAULT_ITEM_DATA("AVENGER", tlName, bItemOwned)
ENDREPEAT
/////////////////////////////////////////
/// Acid Lab
///
OUTPUT_DEFAULT_ITEM_DATA("ACID_LAB", "ACID_LAB", IS_ACID_LAB_PURCHASED())
/////////////////////////////////////////
/// Properties
///
FOR iPropertyID = 1 TO MAX_MP_PROPERTIES
bItemOwned = FALSE
REPEAT MAX_OWNED_PROPERTIES iPropertySlot
IF GET_OWNED_PROPERTY(iPropertySlot) = iPropertyID
bItemOwned = TRUE
BREAKLOOP
ENDIF
ENDREPEAT
IF IS_PROPERTY_YACHT_APARTMENT(iPropertyID)
tlCategory = "YACHT"
ELIF IS_PROPERTY_CUSTOM_APARTMENT(iPropertyID)
tlCategory = "CUSTOM_APT"
ELIF IS_PROPERTY_STILT_APARTMENT(iPropertyID)
tlCategory = "STILT_APT"
ELIF GET_PROPERTY_SIZE_TYPE(iPropertyID) = PROP_SIZE_TYPE_LARGE_APT
tlCategory = "APT_LARGE"
ELIF GET_PROPERTY_SIZE_TYPE(iPropertyID) = PROP_SIZE_TYPE_MED_APT
tlCategory = "APT_MEDIUM"
ELIF GET_PROPERTY_SIZE_TYPE(iPropertyID) = PROP_SIZE_TYPE_SMALL_APT
tlCategory = "APT_SMALL"
ELIF GET_PROPERTY_SIZE_TYPE(iPropertyID) = PROP_SIZE_TYPE_OFFICE_GARAGE
tlCategory = "OFFICE_GARAGE"
ELIF GET_PROPERTY_SIZE_TYPE(iPropertyID) = PROP_SIZE_TYPE_10_GAR
tlCategory = "10_CAR_GARAGE"
ELIF GET_PROPERTY_SIZE_TYPE(iPropertyID) = PROP_SIZE_TYPE_6_GAR
tlCategory = "6_CAR_GARAGE"
ELIF GET_PROPERTY_SIZE_TYPE(iPropertyID) = PROP_SIZE_TYPE_2_GAR
tlCategory = "2_CAR_GARAGE"
ELIF IS_PROPERTY_OFFICE(iPropertyID)
tlCategory = "OFFICE"
ELIF IS_PROPERTY_CLUBHOUSE(iPropertyID)
tlCategory = "CLUBHOUSE"
ELSE
RELOOP
ENDIF
tlName = GET_PROPERTY_NAME(iPropertyID)
OUTPUT_DEFAULT_ITEM_DATA(tlCategory, tlName, bItemOwned)
ENDFOR
// CLUBHOUSE MODS
//<Item>MP_STAT_PROP_CLUBHOUSE_VAR_v0</Item>
//<Item>MP_STAT_CLBHOS_WALL_v0</Item> IS_CLUBHOUSE_WALL_B_PURCHASED()
//<Item>MP_STAT_CLBHOS_HANGING_v0</Item> IS_CLUBHOUSE_HANGING_B_PURCHASED()
//<Item>MP_STAT_CLBHOS_FURNITURE_v0</Item> IS_CLUBHOUSE_FURNISHINGS_B_PURCHASED()
//<Item>MP_STAT_CLBHOS_FONT_v0</Item>
//<Item>MP_STAT_CLBHOS_COLOUR_v0</Item>
//<Item>MP_STAT_CLBHOS_EMBLEM_v0</Item>
//<Item>MP_STAT_CLBHOS_SINAGEHIDE_v0</Item> IS_CLUBHOUSE_SINAGEHIDE_PURCHASED()
//<Item>MP_STAT_CLBHOS_GUNLOCKER_v0</Item> IS_CLUBHOUSE_GUN_LOCKER_PURCHASED()
//<Item>MP_STAT_CLBHOS_GARAGE_v0</Item> IS_CLUBHOUSE_GARAGE_PURCHASED()
//<Item>MP_STAT_PROP_CLBHOSE_NAME_ID_v0</Item>
//<Item>MP_STAT_BIKER_CLIENT_VEHICLE_v0</Item>
//<Item>MP_STAT_MISSION_BIKER_CLIENT_v0</Item>
// OFFICE GARAGE MODS
//<Item>MP_STAT_PROP_OFFICE_GAR1_VAR_v0</Item>
//<Item>MP_STAT_PROP_OFFICE_GAR1_LIGHTING_v0</Item>
//<Item>MP_STAT_PROP_OFFICE_GAR1_NUMBERING_v0</Item>
// OFFICE GARAGE MODS
//<Item>MP_STAT_PROP_OFFICE_GAR2_VAR_v0</Item>
//<Item>MP_STAT_PROP_OFFICE_GAR2_LIGHTING_v0</Item>
//<Item>MP_STAT_PROP_OFFICE_GAR2_NUMBERING_v0</Item>
// OFFICE GARAGE MODS
//<Item>MP_STAT_PROP_OFFICE_GAR3_VAR_v0</Item>
//<Item>MP_STAT_PROP_OFFICE_GAR3_LIGHTING_v0</Item>
//<Item>MP_STAT_PROP_OFFICE_GAR3_NUMBERING_v0</Item>
// OFFICE MODS
//<Item>MP_STAT_PROP_OFFICE_VAR_v0</Item>
//<Item>MP_STAT_PROP_OFFICE_ACCOMMODATION_v0</Item>
//<Item>MP_STAT_PROP_OFFICE_LOCKER_CASH_v0</Item>
//<Item>MP_STAT_PROP_OFFICE_LOCKER_GUN_v0</Item>
//<Item>MP_STAT_PROP_OFFICE_NAME_ID_v0</Item>
//<Item>MP_STAT_PROP_OFFICE_PERSONNEL_v0</Item>
//<Item>MP_STAT_FONT_PLAYER_OFFICE_v0</Item>
//<Item>MP_STAT_COLOUR_PLAYER_OFFICE_v0</Item>
//<Item>MP_STAT_PROP_OFFICE_MODSHOP_v0</Item>
RETURN FALSE
ENDFUNC
PROC DO_INITIALISE()
START_WIDGET_GROUP("Item Ownership Output")
START_NEW_WIDGET_COMBO()
INT iType
REPEAT ITEM_OUTPUT_TYPE_COUNT iType
ADD_TO_WIDGET_COMBO(GET_ITEM_OUTPUT_TYPE_NAME(iType))
ENDREPEAT
ADD_TO_WIDGET_COMBO("All")
STOP_WIDGET_COMBO("Item Type", sOutputData.iWidget_Type)
ADD_WIDGET_BOOL("Output owned items", sOutputData.bWidget_OutputOwnedItems)
ADD_WIDGET_BOOL("Output all items", sOutputData.bWidget_OutputAllItems)
ADD_WIDGET_BOOL("Processing", sOutputData.bWidget_Processing)
ADD_WIDGET_BOOL("Terminate script", bTerminateScript)
STOP_WIDGET_GROUP()
eScriptStage = SCRIPT_STAGE_PROCESSING
ENDPROC
PROC DO_PROCESSING()
IF bTerminateScript
eScriptStage = SCRIPT_STAGE_CLEANUP
EXIT
ENDIF
sOutputData.bWidget_Processing = FALSE
SWITCH sOutputData.eOutputStage
CASE OUTPUT_STAGE_INIT
IF sOutputData.bWidget_OutputOwnedItems
OR sOutputData.bWidget_OutputAllItems
sOutputData.iSelection_Type = sOutputData.iWidget_Type
sOutputData.bSelection_OutputOwnedItems = sOutputData.bWidget_OutputOwnedItems
sOutputData.bSelection_OutputAllItems = sOutputData.bWidget_OutputAllItems
IF sOutputData.iSelection_Type = ITEM_OUTPUT_TYPE_COUNT
sOutputData.iSelection_Type = 0
sOutputData.bSelection_All = TRUE
ELSE
sOutputData.bSelection_All = FALSE
ENDIF
sOutputData.bWidget_OutputAllItems = FALSE
sOutputData.bWidget_OutputOwnedItems = FALSE
sOutputData.bWidget_Processing = TRUE
sOutputData.eOutputStage = OUTPUT_STAGE_OPEN_FILE
ENDIF
BREAK
CASE OUTPUT_STAGE_OPEN_FILE
sOutputData.tlPath = "X:/ItemOwnership"
IF GET_ENTITY_MODEL(PLAYER_PED_ID()) = MP_M_FREEMODE_01
sOutputData.tlFilename = "M_ItemOwnership_"
ELIF GET_ENTITY_MODEL(PLAYER_PED_ID()) = MP_F_FREEMODE_01
sOutputData.tlFilename = "F_ItemOwnership_"
ELSE
sOutputData.tlFilename = "ItemOwnership_"
ENDIF
sOutputData.tlFilename += GET_ITEM_OUTPUT_TYPE_NAME(sOutputData.iSelection_Type)
sOutputData.tlFilename += ".csv"
CLEAR_NAMED_DEBUG_FILE(sOutputData.tlPath, sOutputData.tlFilename)
OPEN_NAMED_DEBUG_FILE(sOutputData.tlPath, sOutputData.tlFilename)
SAVE_STRING_TO_DEBUG_FILE(GET_ITEM_OUTPUT_HEADER(sOutputData.iSelection_Type))
SAVE_NEWLINE_TO_DEBUG_FILE()
sOutputData.eOutputStage = OUTPUT_STAGE_PROCESSING
sOutputData.eProcessingStage = PROCESSING_STAGE_1
BREAK
CASE OUTPUT_STAGE_PROCESSING
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
SWITCH sOutputData.iSelection_Type
CASE ITEM_OUTPUT_CLOTHING sOutputData.bWidget_Processing = PROCESS_CLOTHING_OUTPUT() BREAK
CASE ITEM_OUTPUT_WEAPONS sOutputData.bWidget_Processing = PROCESS_WEAPONS_OUTPUT() BREAK
CASE ITEM_OUTPUT_VEHICLES sOutputData.bWidget_Processing = PROCESS_VEHICLES_OUTPUT() BREAK
CASE ITEM_OUTPUT_TATTOOS sOutputData.bWidget_Processing = PROCESS_TATTOOS_OUTPUT() BREAK
CASE ITEM_OUTPUT_PROPERTIES sOutputData.bWidget_Processing = PROCESS_PROPERTIES_OUTPUT() BREAK
ENDSWITCH
IF NOT sOutputData.bWidget_Processing
sOutputData.eOutputStage = OUTPUT_STAGE_CLOSE_FILE
ENDIF
ENDIF
BREAK
CASE OUTPUT_STAGE_CLOSE_FILE
CLOSE_DEBUG_FILE()
IF sOutputData.bSelection_All AND sOutputData.iSelection_Type < ITEM_OUTPUT_TYPE_COUNT-1
sOutputData.iSelection_Type++
sOutputData.eOutputStage = OUTPUT_STAGE_OPEN_FILE
ELSE
sOutputData.eOutputStage = OUTPUT_STAGE_INIT
ENDIF
BREAK
ENDSWITCH
ENDPROC
PROC DO_CLEANUP()
IF sOutputData.eOutputStage = OUTPUT_STAGE_PROCESSING
CLOSE_DEBUG_FILE()
ENDIF
TERMINATE_THIS_THREAD()
ENDPROC
SCRIPT
NETWORK_SET_SCRIPT_IS_SAFE_FOR_NETWORK_GAME()
WHILE TRUE
WAIT(0)
SWITCH eScriptStage
CASE SCRIPT_STAGE_INIT
DO_INITIALISE()
BREAK
CASE SCRIPT_STAGE_PROCESSING
DO_PROCESSING()
BREAK
CASE SCRIPT_STAGE_CLEANUP
DO_CLEANUP()
BREAK
ENDSWITCH
ENDWHILE
ENDSCRIPT
#ENDIF