first commit

This commit is contained in:
Colin-Joel Scupin
2026-08-05 01:29:39 +02:00
commit 86d4bcdc37
85 changed files with 7706 additions and 0 deletions
@@ -0,0 +1,164 @@
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