165 lines
9.4 KiB
Lua
165 lines
9.4 KiB
Lua
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
|