DevXHousing = { MarkerDistance = 25.0, InteractionDistance = 1.8, PreviewBucketBase = 50000, UnitBucketBase = 40000, FloorBucketBase = 30000, InvitationSeconds = 120, MaxPropertiesPerCharacter = 1, PropertyRefreshMs = 8000, -- v0.4.3 only uses GTA Online interiors that are available without -- RequestIpl/RemoveIpl. This avoids overlapping apartment IPLs and world -- holes after returning to Los Santos. Interiors = { low = { label = 'Klassisch', premium = 0, ipls = {}, spawn = { x = 266.11, y = -1007.55, z = -101.01, heading = 357.0 }, exit = { x = 266.11, y = -1007.55, z = -101.01 }, loadAt = { x = 261.4586, y = -998.8196, z = -99.00863 }, cameraShots = { { cam = { x = 265.20, y = -1003.85, z = -99.38 }, target = { x = 263.00, y = -1000.55, z = -99.70 } }, { cam = { x = 262.90, y = -1001.15, z = -99.42 }, target = { x = 266.10, y = -999.90, z = -99.72 } }, { cam = { x = 268.05, y = -999.65, z = -99.40 }, target = { x = 265.60, y = -1003.10, z = -99.72 } } }, companionSpawn = { x = 265.10, y = -1001.20, z = -99.00, heading = 165.0 }, interactions = { { key = 'beer', label = 'Bier trinken', type = 'beer', coords = { x = 263.45, y = -1002.25, z = -99.00 } }, { key = 'sleep', label = 'Im Bett schlafen', type = 'sleep', coords = { x = 262.90, y = -1004.05, z = -99.00 }, heading = 178.0 }, { key = 'bong', label = 'Bong benutzen', type = 'bong', coords = { x = 266.90, y = -999.15, z = -99.00 } } } }, mid = { label = 'Modern', premium = 24000, ipls = {}, spawn = { x = 346.52, y = -1012.90, z = -99.20, heading = 2.0 }, exit = { x = 346.52, y = -1012.90, z = -99.20 }, loadAt = { x = 347.2686, y = -999.2955, z = -99.19622 }, cameraShots = { { cam = { x = 344.80, y = -1008.00, z = -97.58 }, target = { x = 341.25, y = -1003.70, z = -97.95 } }, { cam = { x = 340.25, y = -1003.20, z = -97.62 }, target = { x = 345.15, y = -1001.15, z = -97.95 } }, { cam = { x = 348.55, y = -1003.20, z = -97.60 }, target = { x = 343.75, y = -1006.50, z = -97.95 } } }, companionSpawn = { x = 342.80, y = -1004.90, z = -99.20, heading = 95.0 }, interactions = { { key = 'whiskey', label = 'Whiskey trinken', type = 'whiskey', coords = { x = 343.65, y = -1002.65, z = -99.20 } }, { key = 'beer', label = 'Bier trinken', type = 'beer', coords = { x = 341.20, y = -1003.10, z = -99.20 } }, { key = 'sleep', label = 'Im Bett schlafen', type = 'sleep', coords = { x = 350.15, y = -1007.55, z = -99.20 }, heading = 270.0 }, { key = 'bong', label = 'Bong benutzen', type = 'bong', coords = { x = 337.95, y = -997.45, z = -99.20 } } } }, high = { label = 'Luxus', premium = 65000, ipls = {}, spawn = { x = -17.86, y = -589.22, z = 79.43, heading = 337.0 }, exit = { x = -17.86, y = -589.22, z = 79.43 }, loadAt = { x = -18.07856, y = -583.6725, z = 79.46569 }, cameraShots = { { cam = { x = -20.65, y = -586.10, z = 81.10 }, target = { x = -16.10, y = -582.90, z = 80.05 } }, { cam = { x = -13.10, y = -581.15, z = 81.05 }, target = { x = -18.70, y = -578.80, z = 80.00 } }, { cam = { x = -22.10, y = -577.90, z = 81.05 }, target = { x = -17.00, y = -582.50, z = 80.00 } } }, companionSpawn = { x = -15.20, y = -583.20, z = 79.47, heading = 155.0 }, interactions = { { key = 'whiskey', label = 'Whiskey trinken', type = 'whiskey', coords = { x = -17.20, y = -579.75, z = 79.47 } }, { key = 'beer', label = 'Bier trinken', type = 'beer', coords = { x = -13.90, y = -582.30, z = 79.47 } }, { key = 'sleep', label = 'Im Bett schlafen', type = 'sleep', coords = { x = -20.45, y = -570.55, z = 79.47 }, heading = 180.0 }, { key = 'bong', label = 'Bong benutzen', type = 'bong', coords = { x = -10.85, y = -583.20, z = 79.47 } } } }, penthouse = { label = 'Penthouse', premium = 118000, ipls = {}, spawn = { x = -781.95, y = 339.78, z = 211.20, heading = 88.0 }, exit = { x = -781.95, y = 339.78, z = 211.20 }, loadAt = { x = -773.407, y = 341.766, z = 211.397 }, cameraShots = { { cam = { x = -779.30, y = 342.10, z = 213.10 }, target = { x = -773.40, y = 341.75, z = 211.90 } }, { cam = { x = -771.90, y = 338.45, z = 213.05 }, target = { x = -768.20, y = 344.20, z = 211.95 } }, { cam = { x = -768.80, y = 348.30, z = 213.00 }, target = { x = -774.10, y = 343.25, z = 211.95 } } }, companionSpawn = { x = -773.10, y = 343.25, z = 211.40, heading = 260.0 }, interactions = { { key = 'whiskey', label = 'Whiskey trinken', type = 'whiskey', coords = { x = -768.15, y = 341.80, z = 211.40 } }, { key = 'beer', label = 'Bier trinken', type = 'beer', coords = { x = -771.60, y = 338.80, z = 211.40 } }, { key = 'sleep', label = 'Im Bett schlafen', type = 'sleep', coords = { x = -765.15, y = 329.30, z = 211.40 }, heading = 90.0 }, { key = 'bong', label = 'Bong benutzen', type = 'bong', coords = { x = -778.10, y = 338.35, z = 211.40 } } } } }, -- The floor is a private, always-loaded 10-car garage scene. Local doors, -- signs and decoration turn it into a stable virtual corridor. No -- apartment IPL is requested or removed here. FloorShell = { ipls = {}, loadAt = { x = 229.9559, y = -981.7928, z = -99.66071 }, spawn = { x = 239.70, y = -1004.65, z = -99.00, heading = 88.5 }, elevator = { x = 239.55, y = -1004.55, z = -99.00 }, exit = { x = 239.55, y = -1001.30, z = -99.00 }, doorModel = 'v_ilev_fib_door1', doors = { { x = 237.55, y = -1007.05, z = -99.00, heading = 0.0, sign = { x = 238.32, y = -1006.82, z = -97.78 } }, { x = 234.35, y = -1007.05, z = -99.00, heading = 0.0, sign = { x = 235.12, y = -1006.82, z = -97.78 } }, { x = 231.15, y = -1007.05, z = -99.00, heading = 0.0, sign = { x = 231.92, y = -1006.82, z = -97.78 } }, { x = 227.95, y = -1007.05, z = -99.00, heading = 0.0, sign = { x = 228.72, y = -1006.82, z = -97.78 } } }, setDressing = { { model = 'prop_plant_int_03a', coords = { x = 240.65, y = -1005.80, z = -99.65, heading = 0.0 } }, { model = 'prop_plant_int_03b', coords = { x = 225.95, y = -1005.80, z = -99.65, heading = 0.0 } }, { model = 'prop_off_chair_04', coords = { x = 239.55, y = -1003.10, z = -99.65, heading = 180.0 } }, { model = 'prop_table_03', coords = { x = 237.85, y = -1003.10, z = -99.65, heading = 0.0 } } } }, Buildings = { { key = 'eclipse', label = 'Eclipse Towers', exterior = { x = -773.92, y = 312.09, z = 85.70, heading = 178.0 }, floors = 5, unitsPerFloor = 4, basePrice = 110000, floorPrice = 8500 }, { key = 'integrity', label = '4 Integrity Way', exterior = { x = -47.32, y = -585.99, z = 37.95, heading = 69.0 }, floors = 5, unitsPerFloor = 4, basePrice = 76000, floorPrice = 7000 }, { key = 'del_perro', label = 'Del Perro Heights', exterior = { x = -1447.49, y = -537.49, z = 34.74, heading = 212.0 }, floors = 5, unitsPerFloor = 4, basePrice = 59000, floorPrice = 6000 } } } local legacyKeys = { eclipse = { ['3:1'] = 'eclipse_31' }, integrity = { ['2:1'] = 'integrity_28' }, del_perro = { ['1:1'] = 'del_perro_7' } } local function styleFor(floor, unitNumber) if floor == 1 then return unitNumber <= 2 and 'low' or 'mid' end if floor == 2 then return 'mid' end if floor == 3 then return unitNumber == 4 and 'high' or 'mid' end if floor == 4 then return 'high' end return unitNumber == 4 and 'penthouse' or 'high' end for buildingIndex, building in ipairs(DevXHousing.Buildings) do building.index = buildingIndex building.units = {} for floor = 1, building.floors do for unitNumber = 1, building.unitsPerFloor do local legacy = legacyKeys[building.key] and legacyKeys[building.key][('%s:%s'):format(floor, unitNumber)] local key = legacy or ('%s_f%02d_u%02d'):format(building.key, floor, unitNumber) local style = styleFor(floor, unitNumber) local premium = DevXHousing.Interiors[style].premium or 0 building.units[#building.units + 1] = { key = key, buildingKey = building.key, buildingLabel = building.label, floor = floor, unitNumber = unitNumber, doorNumber = ('%s%02d'):format(floor, unitNumber), label = ('%s – Etage %s, Wohnung %s'):format(building.label, floor, unitNumber), price = building.basePrice + (floor - 1) * building.floorPrice + (unitNumber - 1) * 1750 + premium, style = style, door = DevXHousing.FloorShell.doors[unitNumber] } end end end