base
This commit is contained in:
parent
11019465a1
commit
7cedbd835c
@ -0,0 +1,26 @@
|
|||||||
|
### 2025-04-05 21:18:19.133
|
||||||
|
setr "txAdmin-locale" "en"
|
||||||
|
### 2025-04-05 21:18:19.183
|
||||||
|
set "txAdmin-serverName" "UIRP-5M"
|
||||||
|
### 2025-04-05 21:18:19.234
|
||||||
|
set "txAdmin-checkPlayerJoin" "true"
|
||||||
|
### 2025-04-05 21:18:19.284
|
||||||
|
set "txAdmin-menuAlignRight" "false"
|
||||||
|
### 2025-04-05 21:18:19.335
|
||||||
|
set "txAdmin-menuPageKey" "Tab"
|
||||||
|
### 2025-04-05 21:18:19.385
|
||||||
|
set "txAdmin-playerModePtfx" "true"
|
||||||
|
### 2025-04-05 21:18:19.436
|
||||||
|
set "txAdmin-hideAdminInPunishments" "true"
|
||||||
|
### 2025-04-05 21:18:19.486
|
||||||
|
set "txAdmin-hideAdminInMessages" "false"
|
||||||
|
### 2025-04-05 21:18:19.537
|
||||||
|
set "txAdmin-hideDefaultAnnouncement" "false"
|
||||||
|
### 2025-04-05 21:18:19.587
|
||||||
|
set "txAdmin-hideDefaultDirectMessage" "false"
|
||||||
|
### 2025-04-05 21:18:19.638
|
||||||
|
set "txAdmin-hideDefaultWarning" "false"
|
||||||
|
### 2025-04-05 21:18:19.689
|
||||||
|
set "txAdmin-hideDefaultScheduledRestartWarning" "false"
|
||||||
|
### 2025-04-05 21:18:19.739
|
||||||
|
txaEvent "configChanged" "{}"
|
||||||
1
resources/[core]/PolyZone/.gitignore
vendored
Normal file
1
resources/[core]/PolyZone/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
polyzone_created_zones.txt
|
||||||
226
resources/[core]/PolyZone/BoxZone.lua
Normal file
226
resources/[core]/PolyZone/BoxZone.lua
Normal file
@ -0,0 +1,226 @@
|
|||||||
|
BoxZone = {}
|
||||||
|
-- Inherits from PolyZone
|
||||||
|
setmetatable(BoxZone, { __index = PolyZone })
|
||||||
|
|
||||||
|
-- Utility functions
|
||||||
|
local rad, cos, sin = math.rad, math.cos, math.sin
|
||||||
|
function PolyZone.rotate(origin, point, theta)
|
||||||
|
if theta == 0.0 then return point end
|
||||||
|
|
||||||
|
local p = point - origin
|
||||||
|
local pX, pY = p.x, p.y
|
||||||
|
theta = rad(theta)
|
||||||
|
local cosTheta = cos(theta)
|
||||||
|
local sinTheta = sin(theta)
|
||||||
|
local x = pX * cosTheta - pY * sinTheta
|
||||||
|
local y = pX * sinTheta + pY * cosTheta
|
||||||
|
return vector2(x, y) + origin
|
||||||
|
end
|
||||||
|
|
||||||
|
function BoxZone.calculateMinAndMaxZ(minZ, maxZ, scaleZ, offsetZ)
|
||||||
|
local minScaleZ, maxScaleZ, minOffsetZ, maxOffsetZ = scaleZ[1] or 1.0, scaleZ[2] or 1.0, offsetZ[1] or 0.0, offsetZ[2] or 0.0
|
||||||
|
if (minZ == nil and maxZ == nil) or (minScaleZ == 1.0 and maxScaleZ == 1.0 and minOffsetZ == 0.0 and maxOffsetZ == 0.0) then
|
||||||
|
return minZ, maxZ
|
||||||
|
end
|
||||||
|
|
||||||
|
if minScaleZ ~= 1.0 or maxScaleZ ~= 1.0 then
|
||||||
|
if minZ ~= nil and maxZ ~= nil then
|
||||||
|
local halfHeight = (maxZ - minZ) / 2
|
||||||
|
local centerZ = minZ + halfHeight
|
||||||
|
minZ = centerZ - halfHeight * minScaleZ
|
||||||
|
maxZ = centerZ + halfHeight * maxScaleZ
|
||||||
|
else
|
||||||
|
print(string.format(
|
||||||
|
"[PolyZone] Warning: The minZ/maxZ of a BoxZone can only be scaled if both minZ and maxZ are non-nil (minZ=%s, maxZ=%s)",
|
||||||
|
tostring(minZ),
|
||||||
|
tostring(maxZ)
|
||||||
|
))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if minZ then minZ = minZ - minOffsetZ end
|
||||||
|
if maxZ then maxZ = maxZ + maxOffsetZ end
|
||||||
|
|
||||||
|
return minZ, maxZ
|
||||||
|
end
|
||||||
|
|
||||||
|
local function _calculateScaleAndOffset(options)
|
||||||
|
-- Scale and offset tables are both formatted as {forward, back, left, right, up, down}
|
||||||
|
-- or if symmetrical {forward/back, left/right, up/down}
|
||||||
|
local scale = options.scale or {1.0, 1.0, 1.0, 1.0, 1.0, 1.0}
|
||||||
|
local offset = options.offset or {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}
|
||||||
|
assert(#scale == 3 or #scale == 6, "Scale must be of length 3 or 6")
|
||||||
|
assert(#offset == 3 or #offset == 6, "Offset must be of length 3 or 6")
|
||||||
|
if #scale == 3 then
|
||||||
|
scale = {scale[1], scale[1], scale[2], scale[2], scale[3], scale[3]}
|
||||||
|
end
|
||||||
|
if #offset == 3 then
|
||||||
|
offset = {offset[1], offset[1], offset[2], offset[2], offset[3], offset[3]}
|
||||||
|
end
|
||||||
|
local minOffset = vector3(offset[3], offset[2], offset[6])
|
||||||
|
local maxOffset = vector3(offset[4], offset[1], offset[5])
|
||||||
|
local minScale = vector3(scale[3], scale[2], scale[6])
|
||||||
|
local maxScale = vector3(scale[4], scale[1], scale[5])
|
||||||
|
return minOffset, maxOffset, minScale, maxScale
|
||||||
|
end
|
||||||
|
|
||||||
|
local function _calculatePoints(center, length, width, minScale, maxScale, minOffset, maxOffset)
|
||||||
|
local halfLength, halfWidth = length / 2, width / 2
|
||||||
|
local min = vector3(-halfWidth, -halfLength, 0.0)
|
||||||
|
local max = vector3(halfWidth, halfLength, 0.0)
|
||||||
|
|
||||||
|
min = min * minScale - minOffset
|
||||||
|
max = max * maxScale + maxOffset
|
||||||
|
|
||||||
|
-- Box vertices
|
||||||
|
local p1 = center.xy + vector2(min.x, min.y)
|
||||||
|
local p2 = center.xy + vector2(max.x, min.y)
|
||||||
|
local p3 = center.xy + vector2(max.x, max.y)
|
||||||
|
local p4 = center.xy + vector2(min.x, max.y)
|
||||||
|
return {p1, p2, p3, p4}
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Debug drawing functions
|
||||||
|
function BoxZone:TransformPoint(point)
|
||||||
|
-- Overriding TransformPoint function to take into account rotation and position offset
|
||||||
|
return PolyZone.rotate(self.startPos, point, self.offsetRot) + self.offsetPos
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- Initialization functions
|
||||||
|
local function _initDebug(zone, options)
|
||||||
|
if options.debugBlip then zone:addDebugBlip() end
|
||||||
|
if not options.debugPoly then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
Citizen.CreateThread(function()
|
||||||
|
while not zone.destroyed do
|
||||||
|
zone:draw(false)
|
||||||
|
Citizen.Wait(0)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
local defaultMinOffset, defaultMaxOffset, defaultMinScale, defaultMaxScale = vector3(0.0, 0.0, 0.0), vector3(0.0, 0.0, 0.0), vector3(1.0, 1.0, 1.0), vector3(1.0, 1.0, 1.0)
|
||||||
|
local defaultScaleZ, defaultOffsetZ = {defaultMinScale.z, defaultMaxScale.z}, {defaultMinOffset.z, defaultMaxOffset.z}
|
||||||
|
function BoxZone:new(center, length, width, options)
|
||||||
|
local minOffset, maxOffset, minScale, maxScale = defaultMinOffset, defaultMaxOffset, defaultMinScale, defaultMaxScale
|
||||||
|
local scaleZ, offsetZ = defaultScaleZ, defaultOffsetZ
|
||||||
|
if options.scale ~= nil or options.offset ~= nil then
|
||||||
|
minOffset, maxOffset, minScale, maxScale = _calculateScaleAndOffset(options)
|
||||||
|
scaleZ, offsetZ = {minScale.z, maxScale.z}, {minOffset.z, maxOffset.z}
|
||||||
|
end
|
||||||
|
|
||||||
|
local points = _calculatePoints(center, length, width, minScale, maxScale, minOffset, maxOffset)
|
||||||
|
local min = points[1]
|
||||||
|
local max = points[3]
|
||||||
|
local size = max - min
|
||||||
|
|
||||||
|
local minZ, maxZ = BoxZone.calculateMinAndMaxZ(options.minZ, options.maxZ, scaleZ, offsetZ)
|
||||||
|
options.minZ = minZ
|
||||||
|
options.maxZ = maxZ
|
||||||
|
|
||||||
|
-- Box Zones don't use the grid optimization because they are already rectangles/cubes
|
||||||
|
options.useGrid = false
|
||||||
|
|
||||||
|
-- Pre-setting all these values to avoid PolyZone:new() having to calculate them
|
||||||
|
options.min = min
|
||||||
|
options.max = max
|
||||||
|
options.size = size
|
||||||
|
options.center = center
|
||||||
|
options.area = size.x * size.y
|
||||||
|
|
||||||
|
local zone = PolyZone:new(points, options)
|
||||||
|
zone.length = length
|
||||||
|
zone.width = width
|
||||||
|
zone.startPos = center.xy
|
||||||
|
zone.offsetPos = vector2(0.0, 0.0)
|
||||||
|
zone.offsetRot = options.heading or 0.0
|
||||||
|
zone.minScale, zone.maxScale = minScale, maxScale
|
||||||
|
zone.minOffset, zone.maxOffset = minOffset, maxOffset
|
||||||
|
zone.scaleZ, zone.offsetZ = scaleZ, offsetZ
|
||||||
|
zone.isBoxZone = true
|
||||||
|
|
||||||
|
setmetatable(zone, self)
|
||||||
|
self.__index = self
|
||||||
|
return zone
|
||||||
|
end
|
||||||
|
|
||||||
|
function BoxZone:Create(center, length, width, options)
|
||||||
|
local zone = BoxZone:new(center, length, width, options)
|
||||||
|
_initDebug(zone, options)
|
||||||
|
return zone
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- Helper functions
|
||||||
|
function BoxZone:isPointInside(point)
|
||||||
|
if self.destroyed then
|
||||||
|
print("[PolyZone] Warning: Called isPointInside on destroyed zone {name=" .. self.name .. "}")
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
local startPos = self.startPos
|
||||||
|
local actualPos = point.xy - self.offsetPos
|
||||||
|
if #(actualPos - startPos) > self.boundingRadius then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
local rotatedPoint = PolyZone.rotate(startPos, actualPos, -self.offsetRot)
|
||||||
|
local pX, pY, pZ = rotatedPoint.x, rotatedPoint.y, point.z
|
||||||
|
local min, max = self.min, self.max
|
||||||
|
local minX, minY, maxX, maxY = min.x, min.y, max.x, max.y
|
||||||
|
local minZ, maxZ = self.minZ, self.maxZ
|
||||||
|
if pX < minX or pX > maxX or pY < minY or pY > maxY then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
if (minZ and pZ < minZ) or (maxZ and pZ > maxZ) then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
function BoxZone:getHeading()
|
||||||
|
return self.offsetRot
|
||||||
|
end
|
||||||
|
|
||||||
|
function BoxZone:setHeading(heading)
|
||||||
|
if not heading then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
self.offsetRot = heading
|
||||||
|
end
|
||||||
|
|
||||||
|
function BoxZone:setCenter(center)
|
||||||
|
if not center or center == self.center then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
self.center = center
|
||||||
|
self.startPos = center.xy
|
||||||
|
self.points = _calculatePoints(self.center, self.length, self.width, self.minScale, self.maxScale, self.minOffset, self.maxOffset)
|
||||||
|
end
|
||||||
|
|
||||||
|
function BoxZone:getLength()
|
||||||
|
return self.length
|
||||||
|
end
|
||||||
|
|
||||||
|
function BoxZone:setLength(length)
|
||||||
|
if not length or length == self.length then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
self.length = length
|
||||||
|
self.points = _calculatePoints(self.center, self.length, self.width, self.minScale, self.maxScale, self.minOffset, self.maxOffset)
|
||||||
|
end
|
||||||
|
|
||||||
|
function BoxZone:getWidth()
|
||||||
|
return self.width
|
||||||
|
end
|
||||||
|
|
||||||
|
function BoxZone:setWidth(width)
|
||||||
|
if not width or width == self.width then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
self.width = width
|
||||||
|
self.points = _calculatePoints(self.center, self.length, self.width, self.minScale, self.maxScale, self.minOffset, self.maxOffset)
|
||||||
|
end
|
||||||
98
resources/[core]/PolyZone/CircleZone.lua
Normal file
98
resources/[core]/PolyZone/CircleZone.lua
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
CircleZone = {}
|
||||||
|
-- Inherits from PolyZone
|
||||||
|
setmetatable(CircleZone, { __index = PolyZone })
|
||||||
|
|
||||||
|
function CircleZone:draw(forceDraw)
|
||||||
|
if not forceDraw and not self.debugPoly then return end
|
||||||
|
local center = self.center
|
||||||
|
local debugColor = self.debugColor
|
||||||
|
local r, g, b = debugColor[1], debugColor[2], debugColor[3]
|
||||||
|
if self.useZ then
|
||||||
|
local radius = self.radius
|
||||||
|
DrawMarker(28, center.x, center.y, center.z, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, radius, radius, radius, r, g, b, 48, false, false, 2, nil, nil, false)
|
||||||
|
else
|
||||||
|
local diameter = self.diameter
|
||||||
|
DrawMarker(1, center.x, center.y, -500.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, diameter, diameter, 1000.0, r, g, b, 96, false, false, 2, nil, nil, false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local function _initDebug(zone, options)
|
||||||
|
if options.debugBlip then zone:addDebugBlip() end
|
||||||
|
if not options.debugPoly then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
Citizen.CreateThread(function()
|
||||||
|
while not zone.destroyed do
|
||||||
|
zone:draw(false)
|
||||||
|
Citizen.Wait(0)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
function CircleZone:new(center, radius, options)
|
||||||
|
options = options or {}
|
||||||
|
local zone = {
|
||||||
|
name = tostring(options.name) or nil,
|
||||||
|
center = center,
|
||||||
|
radius = radius + 0.0,
|
||||||
|
diameter = radius * 2.0,
|
||||||
|
useZ = options.useZ or false,
|
||||||
|
debugPoly = options.debugPoly or false,
|
||||||
|
debugColor = options.debugColor or {0, 255, 0},
|
||||||
|
data = options.data or {},
|
||||||
|
isCircleZone = true,
|
||||||
|
}
|
||||||
|
if zone.useZ then
|
||||||
|
assert(type(zone.center) == "vector3", "Center must be vector3 if useZ is true {center=" .. center .. "}")
|
||||||
|
end
|
||||||
|
setmetatable(zone, self)
|
||||||
|
self.__index = self
|
||||||
|
return zone
|
||||||
|
end
|
||||||
|
|
||||||
|
function CircleZone:Create(center, radius, options)
|
||||||
|
local zone = CircleZone:new(center, radius, options)
|
||||||
|
_initDebug(zone, options)
|
||||||
|
return zone
|
||||||
|
end
|
||||||
|
|
||||||
|
function CircleZone:isPointInside(point)
|
||||||
|
if self.destroyed then
|
||||||
|
print("[PolyZone] Warning: Called isPointInside on destroyed zone {name=" .. self.name .. "}")
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
local center = self.center
|
||||||
|
local radius = self.radius
|
||||||
|
|
||||||
|
if self.useZ then
|
||||||
|
return #(point - center) < radius
|
||||||
|
else
|
||||||
|
return #(point.xy - center.xy) < radius
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function CircleZone:getRadius()
|
||||||
|
return self.radius
|
||||||
|
end
|
||||||
|
|
||||||
|
function CircleZone:setRadius(radius)
|
||||||
|
if not radius or radius == self.radius then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
self.radius = radius
|
||||||
|
self.diameter = radius * 2.0
|
||||||
|
end
|
||||||
|
|
||||||
|
function CircleZone:getCenter()
|
||||||
|
return self.center
|
||||||
|
end
|
||||||
|
|
||||||
|
function CircleZone:setCenter(center)
|
||||||
|
if not center or center == self.center then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
self.center = center
|
||||||
|
end
|
||||||
369
resources/[core]/PolyZone/ComboZone.lua
Normal file
369
resources/[core]/PolyZone/ComboZone.lua
Normal file
@ -0,0 +1,369 @@
|
|||||||
|
local mapMinX, mapMinY, mapMaxX, mapMaxY = -3700, -4400, 4500, 8000
|
||||||
|
local xDivisions = 34
|
||||||
|
local yDivisions = 50
|
||||||
|
local xDelta = (mapMaxX - mapMinX) / xDivisions
|
||||||
|
local yDelta = (mapMaxY - mapMinY) / yDivisions
|
||||||
|
|
||||||
|
ComboZone = {}
|
||||||
|
|
||||||
|
-- Finds all values in tblA that are not in tblB, using the "id" property
|
||||||
|
local function tblDifference(tblA, tblB)
|
||||||
|
local diff
|
||||||
|
for _, a in ipairs(tblA) do
|
||||||
|
local found = false
|
||||||
|
for _, b in ipairs(tblB) do
|
||||||
|
if b.id == a.id then
|
||||||
|
found = true
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if not found then
|
||||||
|
diff = diff or {}
|
||||||
|
diff[#diff+1] = a
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return diff
|
||||||
|
end
|
||||||
|
|
||||||
|
local function _differenceBetweenInsideZones(insideZones, newInsideZones)
|
||||||
|
local insideZonesCount, newInsideZonesCount = #insideZones, #newInsideZones
|
||||||
|
if insideZonesCount == 0 and newInsideZonesCount == 0 then
|
||||||
|
-- No zones to check
|
||||||
|
return false, nil, nil
|
||||||
|
elseif insideZonesCount == 0 and newInsideZonesCount > 0 then
|
||||||
|
-- Was in no zones last check, but in 1 or more zones now (just entered all zones in newInsideZones)
|
||||||
|
return true, copyTbl(newInsideZones), nil
|
||||||
|
elseif insideZonesCount > 0 and newInsideZonesCount == 0 then
|
||||||
|
-- Was in 1 or more zones last check, but in no zones now (just left all zones in insideZones)
|
||||||
|
return true, nil, copyTbl(insideZones)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Check for zones that were in insideZones, but are not in newInsideZones (zones the player just left)
|
||||||
|
local leftZones = tblDifference(insideZones, newInsideZones)
|
||||||
|
-- Check for zones that are in newInsideZones, but were not in insideZones (zones the player just entered)
|
||||||
|
local enteredZones = tblDifference(newInsideZones, insideZones)
|
||||||
|
|
||||||
|
local isDifferent = enteredZones ~= nil or leftZones ~= nil
|
||||||
|
return isDifferent, enteredZones, leftZones
|
||||||
|
end
|
||||||
|
|
||||||
|
local function _getZoneBounds(zone)
|
||||||
|
local center = zone.center
|
||||||
|
local radius = zone.radius or zone.boundingRadius
|
||||||
|
local minY = (center.y - radius - mapMinY) // yDelta
|
||||||
|
local maxY = (center.y + radius - mapMinY) // yDelta
|
||||||
|
local minX = (center.x - radius - mapMinX) // xDelta
|
||||||
|
local maxX = (center.x + radius - mapMinX) // xDelta
|
||||||
|
return minY, maxY, minX, maxX
|
||||||
|
end
|
||||||
|
|
||||||
|
local function _removeZoneByFunction(predicateFn, zones)
|
||||||
|
if predicateFn == nil or zones == nil or #zones == 0 then return end
|
||||||
|
|
||||||
|
for i=1, #zones do
|
||||||
|
local possibleZone = zones[i]
|
||||||
|
if possibleZone and predicateFn(possibleZone) then
|
||||||
|
table.remove(zones, i)
|
||||||
|
return possibleZone
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
local function _addZoneToGrid(grid, zone)
|
||||||
|
local minY, maxY, minX, maxX = _getZoneBounds(zone)
|
||||||
|
for y=minY, maxY do
|
||||||
|
local row = grid[y] or {}
|
||||||
|
for x=minX, maxX do
|
||||||
|
local cell = row[x] or {}
|
||||||
|
cell[#cell+1] = zone
|
||||||
|
row[x] = cell
|
||||||
|
end
|
||||||
|
grid[y] = row
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function _getGridCell(pos)
|
||||||
|
local x = (pos.x - mapMinX) // xDelta
|
||||||
|
local y = (pos.y - mapMinY) // yDelta
|
||||||
|
return x, y
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function ComboZone:draw(forceDraw)
|
||||||
|
local zones = self.zones
|
||||||
|
for i=1, #zones do
|
||||||
|
local zone = zones[i]
|
||||||
|
if zone and not zone.destroyed then
|
||||||
|
zone:draw(forceDraw)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local function _initDebug(zone, options)
|
||||||
|
if options.debugBlip then zone:addDebugBlip() end
|
||||||
|
if not options.debugPoly then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
Citizen.CreateThread(function()
|
||||||
|
while not zone.destroyed do
|
||||||
|
zone:draw(false)
|
||||||
|
Citizen.Wait(0)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
function ComboZone:new(zones, options)
|
||||||
|
options = options or {}
|
||||||
|
local useGrid = options.useGrid
|
||||||
|
if useGrid == nil then useGrid = true end
|
||||||
|
|
||||||
|
local grid = {}
|
||||||
|
-- Add a unique id for each zone in the ComboZone and add to grid cache
|
||||||
|
for i=1, #zones do
|
||||||
|
local zone = zones[i]
|
||||||
|
if zone then
|
||||||
|
zone.id = i
|
||||||
|
end
|
||||||
|
if useGrid then _addZoneToGrid(grid, zone) end
|
||||||
|
end
|
||||||
|
|
||||||
|
local zone = {
|
||||||
|
name = tostring(options.name) or nil,
|
||||||
|
zones = zones,
|
||||||
|
useGrid = useGrid,
|
||||||
|
grid = grid,
|
||||||
|
debugPoly = options.debugPoly or false,
|
||||||
|
data = options.data or {},
|
||||||
|
isComboZone = true,
|
||||||
|
}
|
||||||
|
setmetatable(zone, self)
|
||||||
|
self.__index = self
|
||||||
|
return zone
|
||||||
|
end
|
||||||
|
|
||||||
|
function ComboZone:Create(zones, options)
|
||||||
|
local zone = ComboZone:new(zones, options)
|
||||||
|
_initDebug(zone, options)
|
||||||
|
AddEventHandler("polyzone:pzcomboinfo", function ()
|
||||||
|
zone:printInfo()
|
||||||
|
end)
|
||||||
|
return zone
|
||||||
|
end
|
||||||
|
|
||||||
|
function ComboZone:getZones(point)
|
||||||
|
if not self.useGrid then
|
||||||
|
return self.zones
|
||||||
|
end
|
||||||
|
|
||||||
|
local grid = self.grid
|
||||||
|
local x, y = _getGridCell(point)
|
||||||
|
local row = grid[y]
|
||||||
|
if row == nil or row[x] == nil then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
return row[x]
|
||||||
|
end
|
||||||
|
|
||||||
|
function ComboZone:AddZone(zone)
|
||||||
|
local zones = self.zones
|
||||||
|
local newIndex = #zones+1
|
||||||
|
zone.id = newIndex
|
||||||
|
zones[newIndex] = zone
|
||||||
|
if self.useGrid then
|
||||||
|
_addZoneToGrid(self.grid, zone)
|
||||||
|
end
|
||||||
|
if self.debugBlip then zone:addDebugBlip() end
|
||||||
|
end
|
||||||
|
|
||||||
|
function ComboZone:RemoveZone(nameOrFn)
|
||||||
|
local predicateFn = nameOrFn
|
||||||
|
if type(nameOrFn) == "string" then
|
||||||
|
-- Create on the fly predicate function if nameOrFn is a string (zone name)
|
||||||
|
predicateFn = function (zone) return zone.name == nameOrFn end
|
||||||
|
elseif type(nameOrFn) ~= "function" then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Remove from zones table
|
||||||
|
local zone = _removeZoneByFunction(predicateFn, self.zones)
|
||||||
|
if not zone then return nil end
|
||||||
|
|
||||||
|
-- Remove from grid cache
|
||||||
|
local grid = self.grid
|
||||||
|
local minY, maxY, minX, maxX = _getZoneBounds(zone)
|
||||||
|
for y=minY, maxY do
|
||||||
|
local row = grid[y]
|
||||||
|
if row then
|
||||||
|
for x=minX, maxX do
|
||||||
|
_removeZoneByFunction(predicateFn, row[x])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return zone
|
||||||
|
end
|
||||||
|
|
||||||
|
function ComboZone:isPointInside(point, zoneName)
|
||||||
|
if self.destroyed then
|
||||||
|
print("[PolyZone] Warning: Called isPointInside on destroyed zone {name=" .. self.name .. "}")
|
||||||
|
return false, {}
|
||||||
|
end
|
||||||
|
|
||||||
|
local zones = self:getZones(point)
|
||||||
|
if not zones or #zones == 0 then return false end
|
||||||
|
|
||||||
|
for i=1, #zones do
|
||||||
|
local zone = zones[i]
|
||||||
|
if zone and (zoneName == nil or zoneName == zone.name) and zone:isPointInside(point) then
|
||||||
|
return true, zone
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return false, nil
|
||||||
|
end
|
||||||
|
|
||||||
|
function ComboZone:isPointInsideExhaustive(point, insideZones)
|
||||||
|
if self.destroyed then
|
||||||
|
print("[PolyZone] Warning: Called isPointInside on destroyed zone {name=" .. self.name .. "}")
|
||||||
|
return false, {}
|
||||||
|
end
|
||||||
|
|
||||||
|
if insideZones ~= nil then
|
||||||
|
insideZones = clearTbl(insideZones)
|
||||||
|
else
|
||||||
|
insideZones = {}
|
||||||
|
end
|
||||||
|
local zones = self:getZones(point)
|
||||||
|
if not zones or #zones == 0 then return false, insideZones end
|
||||||
|
for i=1, #zones do
|
||||||
|
local zone = zones[i]
|
||||||
|
if zone and zone:isPointInside(point) then
|
||||||
|
insideZones[#insideZones+1] = zone
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return #insideZones > 0, insideZones
|
||||||
|
end
|
||||||
|
|
||||||
|
function ComboZone:destroy()
|
||||||
|
PolyZone.destroy(self)
|
||||||
|
local zones = self.zones
|
||||||
|
for i=1, #zones do
|
||||||
|
local zone = zones[i]
|
||||||
|
if zone and not zone.destroyed then
|
||||||
|
zone:destroy()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function ComboZone:onPointInOut(getPointCb, onPointInOutCb, waitInMS)
|
||||||
|
-- Localize the waitInMS value for performance reasons (default of 500 ms)
|
||||||
|
local _waitInMS = 500
|
||||||
|
if waitInMS ~= nil then _waitInMS = waitInMS end
|
||||||
|
|
||||||
|
Citizen.CreateThread(function()
|
||||||
|
local isInside = nil
|
||||||
|
local insideZone = nil
|
||||||
|
while not self.destroyed do
|
||||||
|
if not self.paused then
|
||||||
|
local point = getPointCb()
|
||||||
|
local newIsInside, newInsideZone = self:isPointInside(point)
|
||||||
|
if newIsInside ~= isInside then
|
||||||
|
onPointInOutCb(newIsInside, point, newInsideZone or insideZone)
|
||||||
|
isInside = newIsInside
|
||||||
|
insideZone = newInsideZone
|
||||||
|
end
|
||||||
|
end
|
||||||
|
Citizen.Wait(_waitInMS)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
function ComboZone:onPointInOutExhaustive(getPointCb, onPointInOutCb, waitInMS)
|
||||||
|
-- Localize the waitInMS value for performance reasons (default of 500 ms)
|
||||||
|
local _waitInMS = 500
|
||||||
|
if waitInMS ~= nil then _waitInMS = waitInMS end
|
||||||
|
|
||||||
|
Citizen.CreateThread(function()
|
||||||
|
local isInside, insideZones = nil, {}
|
||||||
|
local newIsInside, newInsideZones = nil, {}
|
||||||
|
while not self.destroyed do
|
||||||
|
if not self.paused then
|
||||||
|
local point = getPointCb()
|
||||||
|
newIsInside, newInsideZones = self:isPointInsideExhaustive(point, newInsideZones)
|
||||||
|
local isDifferent, enteredZones, leftZones = _differenceBetweenInsideZones(insideZones, newInsideZones)
|
||||||
|
if newIsInside ~= isInside or isDifferent then
|
||||||
|
isInside = newIsInside
|
||||||
|
insideZones = copyTbl(newInsideZones)
|
||||||
|
onPointInOutCb(isInside, point, insideZones, enteredZones, leftZones)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
Citizen.Wait(_waitInMS)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
function ComboZone:onPlayerInOut(onPointInOutCb, waitInMS)
|
||||||
|
self:onPointInOut(PolyZone.getPlayerPosition, onPointInOutCb, waitInMS)
|
||||||
|
end
|
||||||
|
|
||||||
|
function ComboZone:onPlayerInOutExhaustive(onPointInOutCb, waitInMS)
|
||||||
|
self:onPointInOutExhaustive(PolyZone.getPlayerPosition, onPointInOutCb, waitInMS)
|
||||||
|
end
|
||||||
|
|
||||||
|
function ComboZone:addEvent(eventName, zoneName)
|
||||||
|
if self.events == nil then self.events = {} end
|
||||||
|
local internalEventName = eventPrefix .. eventName
|
||||||
|
RegisterNetEvent(internalEventName)
|
||||||
|
self.events[eventName] = AddEventHandler(internalEventName, function (...)
|
||||||
|
if self:isPointInside(PolyZone.getPlayerPosition(), zoneName) then
|
||||||
|
TriggerEvent(eventName, ...)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
function ComboZone:removeEvent(name)
|
||||||
|
PolyZone.removeEvent(self, name)
|
||||||
|
end
|
||||||
|
|
||||||
|
function ComboZone:addDebugBlip()
|
||||||
|
self.debugBlip = true
|
||||||
|
local zones = self.zones
|
||||||
|
for i=1, #zones do
|
||||||
|
local zone = zones[i]
|
||||||
|
if zone then zone:addDebugBlip() end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function ComboZone:printInfo()
|
||||||
|
local zones = self.zones
|
||||||
|
local polyCount, boxCount, circleCount, entityCount, comboCount = 0, 0, 0, 0, 0
|
||||||
|
for i=1, #zones do
|
||||||
|
local zone = zones[i]
|
||||||
|
if zone then
|
||||||
|
if zone.isEntityZone then entityCount = entityCount + 1
|
||||||
|
elseif zone.isCircleZone then circleCount = circleCount + 1
|
||||||
|
elseif zone.isComboZone then comboCount = comboCount + 1
|
||||||
|
elseif zone.isBoxZone then boxCount = boxCount + 1
|
||||||
|
elseif zone.isPolyZone then polyCount = polyCount + 1 end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local name = self.name ~= nil and ("\"" .. self.name .. "\"") or nil
|
||||||
|
print("-----------------------------------------------------")
|
||||||
|
print("[PolyZone] Info for ComboZone { name = " .. tostring(name) .. " }:")
|
||||||
|
print("[PolyZone] Total zones: " .. #zones)
|
||||||
|
if boxCount > 0 then print("[PolyZone] BoxZones: " .. boxCount) end
|
||||||
|
if circleCount > 0 then print("[PolyZone] CircleZones: " .. circleCount) end
|
||||||
|
if polyCount > 0 then print("[PolyZone] PolyZones: " .. polyCount) end
|
||||||
|
if entityCount > 0 then print("[PolyZone] EntityZones: " .. entityCount) end
|
||||||
|
if comboCount > 0 then print("[PolyZone] ComboZones: " .. comboCount) end
|
||||||
|
print("-----------------------------------------------------")
|
||||||
|
end
|
||||||
|
|
||||||
|
function ComboZone:setPaused(paused)
|
||||||
|
self.paused = paused
|
||||||
|
end
|
||||||
|
|
||||||
|
function ComboZone:isPaused()
|
||||||
|
return self.paused
|
||||||
|
end
|
||||||
143
resources/[core]/PolyZone/EntityZone.lua
Normal file
143
resources/[core]/PolyZone/EntityZone.lua
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
EntityZone = {}
|
||||||
|
-- Inherits from BoxZone
|
||||||
|
setmetatable(EntityZone, { __index = BoxZone })
|
||||||
|
|
||||||
|
-- Utility functions
|
||||||
|
local deg, atan2 = math.deg, math.atan2
|
||||||
|
local function GetRotation(entity)
|
||||||
|
local fwdVector = GetEntityForwardVector(entity)
|
||||||
|
return deg(atan2(fwdVector.y, fwdVector.x))
|
||||||
|
end
|
||||||
|
|
||||||
|
local function _calculateMinAndMaxZ(entity, dimensions, scaleZ, offsetZ)
|
||||||
|
local min, max = dimensions[1], dimensions[2]
|
||||||
|
local minX, minY, minZ, maxX, maxY, maxZ = min.x, min.y, min.z, max.x, max.y, max.z
|
||||||
|
|
||||||
|
-- Bottom vertices
|
||||||
|
local p1 = GetOffsetFromEntityInWorldCoords(entity, minX, minY, minZ).z
|
||||||
|
local p2 = GetOffsetFromEntityInWorldCoords(entity, maxX, minY, minZ).z
|
||||||
|
local p3 = GetOffsetFromEntityInWorldCoords(entity, maxX, maxY, minZ).z
|
||||||
|
local p4 = GetOffsetFromEntityInWorldCoords(entity, minX, maxY, minZ).z
|
||||||
|
|
||||||
|
-- Top vertices
|
||||||
|
local p5 = GetOffsetFromEntityInWorldCoords(entity, minX, minY, maxZ).z
|
||||||
|
local p6 = GetOffsetFromEntityInWorldCoords(entity, maxX, minY, maxZ).z
|
||||||
|
local p7 = GetOffsetFromEntityInWorldCoords(entity, maxX, maxY, maxZ).z
|
||||||
|
local p8 = GetOffsetFromEntityInWorldCoords(entity, minX, maxY, maxZ).z
|
||||||
|
|
||||||
|
local entityMinZ = math.min(p1, p2, p3, p4, p5, p6, p7, p8)
|
||||||
|
local entityMaxZ = math.max(p1, p2, p3, p4, p5, p6, p7, p8)
|
||||||
|
return BoxZone.calculateMinAndMaxZ(entityMinZ, entityMaxZ, scaleZ, offsetZ)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Initialization functions
|
||||||
|
local function _initDebug(zone, options)
|
||||||
|
if options.debugBlip then zone:addDebugBlip() end
|
||||||
|
if not options.debugPoly and not options.debugBlip then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
Citizen.CreateThread(function()
|
||||||
|
local entity = zone.entity
|
||||||
|
local shouldDraw = options.debugPoly
|
||||||
|
while not zone.destroyed do
|
||||||
|
UpdateOffsets(entity, zone)
|
||||||
|
if shouldDraw then zone:draw(false) end
|
||||||
|
Citizen.Wait(0)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
function EntityZone:new(entity, options)
|
||||||
|
assert(DoesEntityExist(entity), "Entity does not exist")
|
||||||
|
|
||||||
|
local min, max = GetModelDimensions(GetEntityModel(entity))
|
||||||
|
local dimensions = {min, max}
|
||||||
|
|
||||||
|
local length = max.y - min.y
|
||||||
|
local width = max.x - min.x
|
||||||
|
local pos = GetEntityCoords(entity)
|
||||||
|
|
||||||
|
local zone = BoxZone:new(pos, length, width, options)
|
||||||
|
if options.useZ == true then
|
||||||
|
options.minZ, options.maxZ = _calculateMinAndMaxZ(entity, dimensions, zone.scaleZ, zone.offsetZ)
|
||||||
|
else
|
||||||
|
options.minZ = nil
|
||||||
|
options.maxZ = nil
|
||||||
|
end
|
||||||
|
zone.entity = entity
|
||||||
|
zone.dimensions = dimensions
|
||||||
|
zone.useZ = options.useZ
|
||||||
|
zone.damageEventHandlers = {}
|
||||||
|
zone.isEntityZone = true
|
||||||
|
setmetatable(zone, self)
|
||||||
|
self.__index = self
|
||||||
|
return zone
|
||||||
|
end
|
||||||
|
|
||||||
|
function EntityZone:Create(entity, options)
|
||||||
|
local zone = EntityZone:new(entity, options)
|
||||||
|
_initDebug(zone, options)
|
||||||
|
return zone
|
||||||
|
end
|
||||||
|
|
||||||
|
function UpdateOffsets(entity, zone)
|
||||||
|
local pos = GetEntityCoords(entity)
|
||||||
|
local rot = GetRotation(entity)
|
||||||
|
zone.offsetPos = pos.xy - zone.startPos
|
||||||
|
zone.offsetRot = rot - 90.0
|
||||||
|
|
||||||
|
if zone.useZ then
|
||||||
|
zone.minZ, zone.maxZ = _calculateMinAndMaxZ(entity, zone.dimensions, zone.scaleZ, zone.offsetZ)
|
||||||
|
end
|
||||||
|
if zone.debugBlip then SetBlipCoords(zone.debugBlip, pos.x, pos.y, 0.0) end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- Helper functions
|
||||||
|
function EntityZone:isPointInside(point)
|
||||||
|
local entity = self.entity
|
||||||
|
if entity == nil then
|
||||||
|
print("[PolyZone] Error: Called isPointInside on Entity zone with no entity {name=" .. self.name .. "}")
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
UpdateOffsets(entity, self)
|
||||||
|
return BoxZone.isPointInside(self, point)
|
||||||
|
end
|
||||||
|
|
||||||
|
function EntityZone:onEntityDamaged(onDamagedCb)
|
||||||
|
local entity = self.entity
|
||||||
|
if not entity then
|
||||||
|
print("[PolyZone] Error: Called onEntityDamage on Entity Zone with no entity {name=" .. self.name .. "}")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
self.damageEventHandlers[#self.damageEventHandlers + 1] = AddEventHandler('gameEventTriggered', function (name, args)
|
||||||
|
if self.destroyed or self.paused then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if name == 'CEventNetworkEntityDamage' then
|
||||||
|
local victim, attacker, victimDied, weaponHash, isMelee = args[1], args[2], args[4], args[5], args[10]
|
||||||
|
--print(entity, victim, attacker, victimDied, weaponHash, isMelee)
|
||||||
|
if victim ~= entity then return end
|
||||||
|
onDamagedCb(victimDied == 1, attacker, weaponHash, isMelee == 1)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
function EntityZone:destroy()
|
||||||
|
for i=1, #self.damageEventHandlers do
|
||||||
|
print("Destroying damageEventHandler:", self.damageEventHandlers[i])
|
||||||
|
RemoveEventHandler(self.damageEventHandlers[i])
|
||||||
|
end
|
||||||
|
self.damageEventHandlers = {}
|
||||||
|
PolyZone.destroy(self)
|
||||||
|
end
|
||||||
|
|
||||||
|
function EntityZone:addDebugBlip()
|
||||||
|
local blip = PolyZone.addDebugBlip(self)
|
||||||
|
self.debugBlip = blip
|
||||||
|
return blip
|
||||||
|
end
|
||||||
21
resources/[core]/PolyZone/LICENSE
Normal file
21
resources/[core]/PolyZone/LICENSE
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2019-2021 Michael Afrin
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
51
resources/[core]/PolyZone/README.md
Normal file
51
resources/[core]/PolyZone/README.md
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
# PolyZone
|
||||||
|
PolyZone is a FiveM mod to define zones of different shapes and test whether a point is inside or outside of the zone
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Download
|
||||||
|
|
||||||
|
Click [here](https://github.com/mkafrin/PolyZone/releases) to go to the releases page and download the latest release
|
||||||
|
|
||||||
|
## Using PolyZone in a Script
|
||||||
|
|
||||||
|
In order to use PolyZone in your script, you must _at least_ include PolyZone's client.lua directly in your __resource.lua or fxmanifest.lua. You can do that by using FiveM's @ syntax for importing resource files:
|
||||||
|
|
||||||
|
```lua
|
||||||
|
client_scripts {
|
||||||
|
'@PolyZone/client.lua',
|
||||||
|
'your_scripts_client.lua',
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
This will allow you to create PolyZones in your script, but will not import other zones, such as CircleZone, BoxZone, etc. All the other zones are extra, and require their own explicit imports. Here is a `client_scripts` value that will include all the zones. Note the relative order of these imports, as the ordering is necessary! Many zones rely on each other, for example EntityZone inherits from BoxZone, and all zones inherit from PolyZone (client.lua).
|
||||||
|
|
||||||
|
```lua
|
||||||
|
client_scripts {
|
||||||
|
'@PolyZone/client.lua',
|
||||||
|
'@PolyZone/BoxZone.lua',
|
||||||
|
'@PolyZone/EntityZone.lua',
|
||||||
|
'@PolyZone/CircleZone.lua',
|
||||||
|
'@PolyZone/ComboZone.lua',
|
||||||
|
'your_scripts_client.lua'
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Documentation
|
||||||
|
For additional information on how to use PolyZone, please take a look at the [wiki](https://github.com/mkafrin/PolyZone/wiki)
|
||||||
|
|
||||||
|
## Troubleshooting and Support
|
||||||
|
For help troubleshooting issues you've encountered (that aren't in the FAQ), or to suggest new features, use the [issues page](https://github.com/mkafrin/PolyZone/issues). Just a reminder though, I do this in my free time and so there is no guarantee an issue will be fixed or a feature will be added. In lieu of my limited time, I will prioritize issues and bugs over features.
|
||||||
|
|
||||||
|
## FAQ - Frequently Asked Questions
|
||||||
|
**I'm getting the error `attempt to index a nil value` when creating a zone, what's wrong?**
|
||||||
|
> Did you include all the necessary scripts in your \_\_resource.lua or fxmanifest.lua? Remember some zones require other zones, like EntityZone.lua requires BoxZone.lua and BoxZone.lua requires client.lua.
|
||||||
|
|
||||||
|
**I'm getting no errors, but I can't see my zone in the right place when I turn on debug drawing**
|
||||||
|
> If you are using them, is minZ and maxZ set correctly? Or if you are using a CircleZone with useZ=true, is your center's Z value correct? If using a PolyZone, did you manually select all your points, or use the creation script? If you did it manually, the ordering of the points could be causing issues. Are you using the correct option to enable debug drawing? For PolyZones, you can use `debugPoly` and `debugGrid`, but for other zones, `debugPoly` is the only one that works.
|
||||||
|
|
||||||
|
**Is PolyZone faster than a distance check?**
|
||||||
|
> There's a page in the wiki for that, [here](https://github.com/mkafrin/PolyZone/wiki/Is-PolyZone-faster-than-a-distance-check%3F).
|
||||||
|
|
||||||
|
## License
|
||||||
|
**Please see the LICENSE file. That file will always overrule anything mentioned in the README.md or wiki**
|
||||||
601
resources/[core]/PolyZone/client.lua
Normal file
601
resources/[core]/PolyZone/client.lua
Normal file
@ -0,0 +1,601 @@
|
|||||||
|
eventPrefix = '__PolyZone__:'
|
||||||
|
PolyZone = {}
|
||||||
|
|
||||||
|
local defaultColorWalls = {0, 255, 0}
|
||||||
|
local defaultColorOutline = {255, 0, 0}
|
||||||
|
local defaultColorGrid = {255, 255, 255}
|
||||||
|
|
||||||
|
-- Utility functions
|
||||||
|
local abs = math.abs
|
||||||
|
local function _isLeft(p0, p1, p2)
|
||||||
|
local p0x = p0.x
|
||||||
|
local p0y = p0.y
|
||||||
|
return ((p1.x - p0x) * (p2.y - p0y)) - ((p2.x - p0x) * (p1.y - p0y))
|
||||||
|
end
|
||||||
|
|
||||||
|
local function _wn_inner_loop(p0, p1, p2, wn)
|
||||||
|
local p2y = p2.y
|
||||||
|
if (p0.y <= p2y) then
|
||||||
|
if (p1.y > p2y) then
|
||||||
|
if (_isLeft(p0, p1, p2) > 0) then
|
||||||
|
return wn + 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if (p1.y <= p2y) then
|
||||||
|
if (_isLeft(p0, p1, p2) < 0) then
|
||||||
|
return wn - 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return wn
|
||||||
|
end
|
||||||
|
|
||||||
|
function addBlip(pos)
|
||||||
|
local blip = AddBlipForCoord(pos.x, pos.y, 0.0)
|
||||||
|
SetBlipColour(blip, 7)
|
||||||
|
SetBlipDisplay(blip, 8)
|
||||||
|
SetBlipScale(blip, 1.0)
|
||||||
|
SetBlipAsShortRange(blip, true)
|
||||||
|
return blip
|
||||||
|
end
|
||||||
|
|
||||||
|
function clearTbl(tbl)
|
||||||
|
-- Only works with contiguous (array-like) tables
|
||||||
|
if tbl == nil then return end
|
||||||
|
for i=1, #tbl do
|
||||||
|
tbl[i] = nil
|
||||||
|
end
|
||||||
|
return tbl
|
||||||
|
end
|
||||||
|
|
||||||
|
function copyTbl(tbl)
|
||||||
|
-- Only a shallow copy, and only works with contiguous (array-like) tables
|
||||||
|
if tbl == nil then return end
|
||||||
|
local ret = {}
|
||||||
|
for i=1, #tbl do
|
||||||
|
ret[i] = tbl[i]
|
||||||
|
end
|
||||||
|
return ret
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Winding Number Algorithm - http://geomalgorithms.com/a03-_inclusion.html
|
||||||
|
local function _windingNumber(point, poly)
|
||||||
|
local wn = 0 -- winding number counter
|
||||||
|
|
||||||
|
-- loop through all edges of the polygon
|
||||||
|
for i = 1, #poly - 1 do
|
||||||
|
wn = _wn_inner_loop(poly[i], poly[i + 1], point, wn)
|
||||||
|
end
|
||||||
|
-- test last point to first point, completing the polygon
|
||||||
|
wn = _wn_inner_loop(poly[#poly], poly[1], point, wn)
|
||||||
|
|
||||||
|
-- the point is outside only when this winding number wn===0, otherwise it's inside
|
||||||
|
return wn ~= 0
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Detects intersection between two lines
|
||||||
|
local function _isIntersecting(a, b, c, d)
|
||||||
|
-- Store calculations in local variables for performance
|
||||||
|
local ax_minus_cx = a.x - c.x
|
||||||
|
local bx_minus_ax = b.x - a.x
|
||||||
|
local dx_minus_cx = d.x - c.x
|
||||||
|
local ay_minus_cy = a.y - c.y
|
||||||
|
local by_minus_ay = b.y - a.y
|
||||||
|
local dy_minus_cy = d.y - c.y
|
||||||
|
local denominator = ((bx_minus_ax) * (dy_minus_cy)) - ((by_minus_ay) * (dx_minus_cx))
|
||||||
|
local numerator1 = ((ay_minus_cy) * (dx_minus_cx)) - ((ax_minus_cx) * (dy_minus_cy))
|
||||||
|
local numerator2 = ((ay_minus_cy) * (bx_minus_ax)) - ((ax_minus_cx) * (by_minus_ay))
|
||||||
|
|
||||||
|
-- Detect coincident lines
|
||||||
|
if denominator == 0 then return numerator1 == 0 and numerator2 == 0 end
|
||||||
|
|
||||||
|
local r = numerator1 / denominator
|
||||||
|
local s = numerator2 / denominator
|
||||||
|
|
||||||
|
return (r >= 0 and r <= 1) and (s >= 0 and s <= 1)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- https://rosettacode.org/wiki/Shoelace_formula_for_polygonal_area#Lua
|
||||||
|
local function _calculatePolygonArea(points)
|
||||||
|
local function det2(i,j)
|
||||||
|
return points[i].x*points[j].y-points[j].x*points[i].y
|
||||||
|
end
|
||||||
|
local sum = #points>2 and det2(#points,1) or 0
|
||||||
|
for i=1,#points-1 do sum = sum + det2(i,i+1)end
|
||||||
|
return abs(0.5 * sum)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- Debug drawing functions
|
||||||
|
function _drawWall(p1, p2, minZ, maxZ, r, g, b, a)
|
||||||
|
local bottomLeft = vector3(p1.x, p1.y, minZ)
|
||||||
|
local topLeft = vector3(p1.x, p1.y, maxZ)
|
||||||
|
local bottomRight = vector3(p2.x, p2.y, minZ)
|
||||||
|
local topRight = vector3(p2.x, p2.y, maxZ)
|
||||||
|
|
||||||
|
DrawPoly(bottomLeft,topLeft,bottomRight,r,g,b,a)
|
||||||
|
DrawPoly(topLeft,topRight,bottomRight,r,g,b,a)
|
||||||
|
DrawPoly(bottomRight,topRight,topLeft,r,g,b,a)
|
||||||
|
DrawPoly(bottomRight,topLeft,bottomLeft,r,g,b,a)
|
||||||
|
end
|
||||||
|
|
||||||
|
function PolyZone:TransformPoint(point)
|
||||||
|
-- No point transform necessary for regular PolyZones, unlike zones like Entity Zones, whose points can be rotated and offset
|
||||||
|
return point
|
||||||
|
end
|
||||||
|
|
||||||
|
function PolyZone:draw(forceDraw)
|
||||||
|
if not forceDraw and not self.debugPoly and not self.debugGrid then return end
|
||||||
|
|
||||||
|
local zDrawDist = 45.0
|
||||||
|
local oColor = self.debugColors.outline or defaultColorOutline
|
||||||
|
local oR, oG, oB = oColor[1], oColor[2], oColor[3]
|
||||||
|
local wColor = self.debugColors.walls or defaultColorWalls
|
||||||
|
local wR, wG, wB = wColor[1], wColor[2], wColor[3]
|
||||||
|
local plyPed = PlayerPedId()
|
||||||
|
local plyPos = GetEntityCoords(plyPed)
|
||||||
|
local minZ = self.minZ or plyPos.z - zDrawDist
|
||||||
|
local maxZ = self.maxZ or plyPos.z + zDrawDist
|
||||||
|
|
||||||
|
local points = self.points
|
||||||
|
for i=1, #points do
|
||||||
|
local point = self:TransformPoint(points[i])
|
||||||
|
DrawLine(point.x, point.y, minZ, point.x, point.y, maxZ, oR, oG, oB, 164)
|
||||||
|
|
||||||
|
if i < #points then
|
||||||
|
local p2 = self:TransformPoint(points[i+1])
|
||||||
|
DrawLine(point.x, point.y, maxZ, p2.x, p2.y, maxZ, oR, oG, oB, 184)
|
||||||
|
_drawWall(point, p2, minZ, maxZ, wR, wG, wB, 48)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if #points > 2 then
|
||||||
|
local firstPoint = self:TransformPoint(points[1])
|
||||||
|
local lastPoint = self:TransformPoint(points[#points])
|
||||||
|
DrawLine(firstPoint.x, firstPoint.y, maxZ, lastPoint.x, lastPoint.y, maxZ, oR, oG, oB, 184)
|
||||||
|
_drawWall(firstPoint, lastPoint, minZ, maxZ, wR, wG, wB, 48)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function PolyZone.drawPoly(poly, forceDraw)
|
||||||
|
PolyZone.draw(poly, forceDraw)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Debug drawing all grid cells that are completly within the polygon
|
||||||
|
local function _drawGrid(poly)
|
||||||
|
local minZ = poly.minZ
|
||||||
|
local maxZ = poly.maxZ
|
||||||
|
if not minZ or not maxZ then
|
||||||
|
local plyPed = PlayerPedId()
|
||||||
|
local plyPos = GetEntityCoords(plyPed)
|
||||||
|
minZ = plyPos.z - 46.0
|
||||||
|
maxZ = plyPos.z - 45.0
|
||||||
|
end
|
||||||
|
|
||||||
|
local lines = poly.lines
|
||||||
|
local color = poly.debugColors.grid or defaultColorGrid
|
||||||
|
local r, g, b = color[1], color[2], color[3]
|
||||||
|
for i=1, #lines do
|
||||||
|
local line = lines[i]
|
||||||
|
local min = line.min
|
||||||
|
local max = line.max
|
||||||
|
DrawLine(min.x + 0.0, min.y + 0.0, maxZ + 0.0, max.x + 0.0, max.y + 0.0, maxZ + 0.0, r, g, b, 196)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local function _pointInPoly(point, poly)
|
||||||
|
local x = point.x
|
||||||
|
local y = point.y
|
||||||
|
local min = poly.min
|
||||||
|
local minX = min.x
|
||||||
|
local minY = min.y
|
||||||
|
local max = poly.max
|
||||||
|
|
||||||
|
-- Checks if point is within the polygon's bounding box
|
||||||
|
if x < minX or
|
||||||
|
x > max.x or
|
||||||
|
y < minY or
|
||||||
|
y > max.y then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Checks if point is within the polygon's height bounds
|
||||||
|
local minZ = poly.minZ
|
||||||
|
local maxZ = poly.maxZ
|
||||||
|
local z = point.z
|
||||||
|
if (minZ and z < minZ) or (maxZ and z > maxZ) then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Returns true if the grid cell associated with the point is entirely inside the poly
|
||||||
|
local grid = poly.grid
|
||||||
|
if grid then
|
||||||
|
local gridDivisions = poly.gridDivisions
|
||||||
|
local size = poly.size
|
||||||
|
local gridPosX = x - minX
|
||||||
|
local gridPosY = y - minY
|
||||||
|
local gridCellX = (gridPosX * gridDivisions) // size.x
|
||||||
|
local gridCellY = (gridPosY * gridDivisions) // size.y
|
||||||
|
local gridCellValue = grid[gridCellY + 1][gridCellX + 1]
|
||||||
|
if gridCellValue == nil and poly.lazyGrid then
|
||||||
|
gridCellValue = _isGridCellInsidePoly(gridCellX, gridCellY, poly)
|
||||||
|
grid[gridCellY + 1][gridCellX + 1] = gridCellValue
|
||||||
|
end
|
||||||
|
if gridCellValue then return true end
|
||||||
|
end
|
||||||
|
|
||||||
|
return _windingNumber(point, poly.points)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- Grid creation functions
|
||||||
|
-- Calculates the points of the rectangle that make up the grid cell at grid position (cellX, cellY)
|
||||||
|
local function _calculateGridCellPoints(cellX, cellY, poly)
|
||||||
|
local gridCellWidth = poly.gridCellWidth
|
||||||
|
local gridCellHeight = poly.gridCellHeight
|
||||||
|
local min = poly.min
|
||||||
|
-- min added to initial point, in order to shift the grid cells to the poly's starting position
|
||||||
|
local x = cellX * gridCellWidth + min.x
|
||||||
|
local y = cellY * gridCellHeight + min.y
|
||||||
|
return {
|
||||||
|
vector2(x, y),
|
||||||
|
vector2(x + gridCellWidth, y),
|
||||||
|
vector2(x + gridCellWidth, y + gridCellHeight),
|
||||||
|
vector2(x, y + gridCellHeight),
|
||||||
|
vector2(x, y)
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function _isGridCellInsidePoly(cellX, cellY, poly)
|
||||||
|
gridCellPoints = _calculateGridCellPoints(cellX, cellY, poly)
|
||||||
|
local polyPoints = {table.unpack(poly.points)}
|
||||||
|
-- Connect the polygon to its starting point
|
||||||
|
polyPoints[#polyPoints + 1] = polyPoints[1]
|
||||||
|
|
||||||
|
-- If none of the points of the grid cell are in the polygon, the grid cell can't be in it
|
||||||
|
local isOnePointInPoly = false
|
||||||
|
for i=1, #gridCellPoints - 1 do
|
||||||
|
local cellPoint = gridCellPoints[i]
|
||||||
|
local x = cellPoint.x
|
||||||
|
local y = cellPoint.y
|
||||||
|
if _windingNumber(cellPoint, poly.points) then
|
||||||
|
isOnePointInPoly = true
|
||||||
|
-- If we are drawing the grid (poly.lines ~= nil), we need to go through all the points,
|
||||||
|
-- and therefore can't break out of the loop early
|
||||||
|
if poly.lines then
|
||||||
|
if not poly.gridXPoints[x] then poly.gridXPoints[x] = {} end
|
||||||
|
if not poly.gridYPoints[y] then poly.gridYPoints[y] = {} end
|
||||||
|
poly.gridXPoints[x][y] = true
|
||||||
|
poly.gridYPoints[y][x] = true
|
||||||
|
else break end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if isOnePointInPoly == false then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
-- If any of the grid cell's lines intersects with any of the polygon's lines
|
||||||
|
-- then the grid cell is not completely within the poly
|
||||||
|
for i=1, #gridCellPoints - 1 do
|
||||||
|
local gridCellP1 = gridCellPoints[i]
|
||||||
|
local gridCellP2 = gridCellPoints[i+1]
|
||||||
|
for j=1, #polyPoints - 1 do
|
||||||
|
if _isIntersecting(gridCellP1, gridCellP2, polyPoints[j], polyPoints[j+1]) then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local function _calculateLinesForDrawingGrid(poly)
|
||||||
|
local lines = {}
|
||||||
|
for x, tbl in pairs(poly.gridXPoints) do
|
||||||
|
local yValues = {}
|
||||||
|
-- Turn dict/set of values into array
|
||||||
|
for y, _ in pairs(tbl) do yValues[#yValues + 1] = y end
|
||||||
|
if #yValues >= 2 then
|
||||||
|
table.sort(yValues)
|
||||||
|
local minY = yValues[1]
|
||||||
|
local lastY = yValues[1]
|
||||||
|
for i=1, #yValues do
|
||||||
|
local y = yValues[i]
|
||||||
|
-- Checks for breaks in the grid. If the distance between the last value and the current one
|
||||||
|
-- is greater than the size of a grid cell, that means the line between them must go outside the polygon.
|
||||||
|
-- Therefore, a line must be created between minY and the lastY, and a new line started at the current y
|
||||||
|
if y - lastY > poly.gridCellHeight + 0.01 then
|
||||||
|
lines[#lines+1] = {min=vector2(x, minY), max=vector2(x, lastY)}
|
||||||
|
minY = y
|
||||||
|
elseif i == #yValues then
|
||||||
|
-- If at the last point, create a line between minY and the last point
|
||||||
|
lines[#lines+1] = {min=vector2(x, minY), max=vector2(x, y)}
|
||||||
|
end
|
||||||
|
lastY = y
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- Setting nil to allow the GC to clear it out of memory, since we no longer need this
|
||||||
|
poly.gridXPoints = nil
|
||||||
|
|
||||||
|
-- Same as above, but for gridYPoints instead of gridXPoints
|
||||||
|
for y, tbl in pairs(poly.gridYPoints) do
|
||||||
|
local xValues = {}
|
||||||
|
for x, _ in pairs(tbl) do xValues[#xValues + 1] = x end
|
||||||
|
if #xValues >= 2 then
|
||||||
|
table.sort(xValues)
|
||||||
|
local minX = xValues[1]
|
||||||
|
local lastX = xValues[1]
|
||||||
|
for i=1, #xValues do
|
||||||
|
local x = xValues[i]
|
||||||
|
if x - lastX > poly.gridCellWidth + 0.01 then
|
||||||
|
lines[#lines+1] = {min=vector2(minX, y), max=vector2(lastX, y)}
|
||||||
|
minX = x
|
||||||
|
elseif i == #xValues then
|
||||||
|
lines[#lines+1] = {min=vector2(minX, y), max=vector2(x, y)}
|
||||||
|
end
|
||||||
|
lastX = x
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
poly.gridYPoints = nil
|
||||||
|
return lines
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- Calculate for each grid cell whether it is entirely inside the polygon, and store if true
|
||||||
|
local function _createGrid(poly, options)
|
||||||
|
poly.gridArea = 0.0
|
||||||
|
poly.gridCellWidth = poly.size.x / poly.gridDivisions
|
||||||
|
poly.gridCellHeight = poly.size.y / poly.gridDivisions
|
||||||
|
Citizen.CreateThread(function()
|
||||||
|
-- Calculate all grid cells that are entirely inside the polygon
|
||||||
|
local isInside = {}
|
||||||
|
local gridCellArea = poly.gridCellWidth * poly.gridCellHeight
|
||||||
|
for y=1, poly.gridDivisions do
|
||||||
|
Citizen.Wait(0)
|
||||||
|
isInside[y] = {}
|
||||||
|
for x=1, poly.gridDivisions do
|
||||||
|
if _isGridCellInsidePoly(x-1, y-1, poly) then
|
||||||
|
poly.gridArea = poly.gridArea + gridCellArea
|
||||||
|
isInside[y][x] = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
poly.grid = isInside
|
||||||
|
poly.gridCoverage = poly.gridArea / poly.area
|
||||||
|
-- A lot of memory is used by this pre-calc. Force a gc collect after to clear it out
|
||||||
|
collectgarbage("collect")
|
||||||
|
|
||||||
|
if options.debugGrid then
|
||||||
|
local coverage = string.format("%.2f", poly.gridCoverage * 100)
|
||||||
|
print("[PolyZone] Debug: Grid Coverage at " .. coverage .. "% with " .. poly.gridDivisions
|
||||||
|
.. " divisions. Optimal coverage for memory usage and startup time is 80-90%")
|
||||||
|
|
||||||
|
Citizen.CreateThread(function()
|
||||||
|
poly.lines = _calculateLinesForDrawingGrid(poly)
|
||||||
|
-- A lot of memory is used by this pre-calc. Force a gc collect after to clear it out
|
||||||
|
collectgarbage("collect")
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- Initialization functions
|
||||||
|
local function _calculatePoly(poly, options)
|
||||||
|
if not poly.min or not poly.max or not poly.size or not poly.center or not poly.area then
|
||||||
|
local minX, minY = math.maxinteger, math.maxinteger
|
||||||
|
local maxX, maxY = math.mininteger, math.mininteger
|
||||||
|
for _, p in ipairs(poly.points) do
|
||||||
|
minX = math.min(minX, p.x)
|
||||||
|
minY = math.min(minY, p.y)
|
||||||
|
maxX = math.max(maxX, p.x)
|
||||||
|
maxY = math.max(maxY, p.y)
|
||||||
|
end
|
||||||
|
poly.min = vector2(minX, minY)
|
||||||
|
poly.max = vector2(maxX, maxY)
|
||||||
|
poly.size = poly.max - poly.min
|
||||||
|
poly.center = (poly.max + poly.min) / 2
|
||||||
|
poly.area = _calculatePolygonArea(poly.points)
|
||||||
|
end
|
||||||
|
|
||||||
|
poly.boundingRadius = math.sqrt(poly.size.y * poly.size.y + poly.size.x * poly.size.x) / 2
|
||||||
|
|
||||||
|
if poly.useGrid and not poly.lazyGrid then
|
||||||
|
if options.debugGrid then
|
||||||
|
poly.gridXPoints = {}
|
||||||
|
poly.gridYPoints = {}
|
||||||
|
poly.lines = {}
|
||||||
|
end
|
||||||
|
_createGrid(poly, options)
|
||||||
|
elseif poly.useGrid then
|
||||||
|
local isInside = {}
|
||||||
|
for y=1, poly.gridDivisions do
|
||||||
|
isInside[y] = {}
|
||||||
|
end
|
||||||
|
poly.grid = isInside
|
||||||
|
poly.gridCellWidth = poly.size.x / poly.gridDivisions
|
||||||
|
poly.gridCellHeight = poly.size.y / poly.gridDivisions
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local function _initDebug(poly, options)
|
||||||
|
if options.debugBlip then poly:addDebugBlip() end
|
||||||
|
local debugEnabled = options.debugPoly or options.debugGrid
|
||||||
|
if not debugEnabled then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
Citizen.CreateThread(function()
|
||||||
|
while not poly.destroyed do
|
||||||
|
poly:draw(false)
|
||||||
|
if options.debugGrid and poly.lines then
|
||||||
|
_drawGrid(poly)
|
||||||
|
end
|
||||||
|
Citizen.Wait(0)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
function PolyZone:new(points, options)
|
||||||
|
if not points then
|
||||||
|
print("[PolyZone] Error: Passed nil points table to PolyZone:Create() {name=" .. options.name .. "}")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if #points < 3 then
|
||||||
|
print("[PolyZone] Warning: Passed points table with less than 3 points to PolyZone:Create() {name=" .. options.name .. "}")
|
||||||
|
end
|
||||||
|
|
||||||
|
options = options or {}
|
||||||
|
local useGrid = options.useGrid
|
||||||
|
if useGrid == nil then useGrid = true end
|
||||||
|
local lazyGrid = options.lazyGrid
|
||||||
|
if lazyGrid == nil then lazyGrid = true end
|
||||||
|
local poly = {
|
||||||
|
name = tostring(options.name) or nil,
|
||||||
|
points = points,
|
||||||
|
center = options.center,
|
||||||
|
size = options.size,
|
||||||
|
max = options.max,
|
||||||
|
min = options.min,
|
||||||
|
area = options.area,
|
||||||
|
minZ = tonumber(options.minZ) or nil,
|
||||||
|
maxZ = tonumber(options.maxZ) or nil,
|
||||||
|
useGrid = useGrid,
|
||||||
|
lazyGrid = lazyGrid,
|
||||||
|
gridDivisions = tonumber(options.gridDivisions) or 30,
|
||||||
|
debugColors = options.debugColors or {},
|
||||||
|
debugPoly = options.debugPoly or false,
|
||||||
|
debugGrid = options.debugGrid or false,
|
||||||
|
data = options.data or {},
|
||||||
|
isPolyZone = true,
|
||||||
|
}
|
||||||
|
if poly.debugGrid then poly.lazyGrid = false end
|
||||||
|
_calculatePoly(poly, options)
|
||||||
|
setmetatable(poly, self)
|
||||||
|
self.__index = self
|
||||||
|
return poly
|
||||||
|
end
|
||||||
|
|
||||||
|
function PolyZone:Create(points, options)
|
||||||
|
local poly = PolyZone:new(points, options)
|
||||||
|
_initDebug(poly, options)
|
||||||
|
return poly
|
||||||
|
end
|
||||||
|
|
||||||
|
function PolyZone:isPointInside(point)
|
||||||
|
if self.destroyed then
|
||||||
|
print("[PolyZone] Warning: Called isPointInside on destroyed zone {name=" .. self.name .. "}")
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
return _pointInPoly(point, self)
|
||||||
|
end
|
||||||
|
|
||||||
|
function PolyZone:destroy()
|
||||||
|
self.destroyed = true
|
||||||
|
if self.debugPoly or self.debugGrid then
|
||||||
|
print("[PolyZone] Debug: Destroying zone {name=" .. self.name .. "}")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Helper functions
|
||||||
|
function PolyZone.getPlayerPosition()
|
||||||
|
return GetEntityCoords(PlayerPedId())
|
||||||
|
end
|
||||||
|
|
||||||
|
HeadBone = 0x796e;
|
||||||
|
function PolyZone.getPlayerHeadPosition()
|
||||||
|
return GetPedBoneCoords(PlayerPedId(), HeadBone);
|
||||||
|
end
|
||||||
|
|
||||||
|
function PolyZone.ensureMetatable(zone)
|
||||||
|
if zone.isComboZone then
|
||||||
|
setmetatable(zone, ComboZone)
|
||||||
|
elseif zone.isEntityZone then
|
||||||
|
setmetatable(zone, EntityZone)
|
||||||
|
elseif zone.isBoxZone then
|
||||||
|
setmetatable(zone, BoxZone)
|
||||||
|
elseif zone.isCircleZone then
|
||||||
|
setmetatable(zone, CircleZone)
|
||||||
|
elseif zone.isPolyZone then
|
||||||
|
setmetatable(zone, PolyZone)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function PolyZone:onPointInOut(getPointCb, onPointInOutCb, waitInMS)
|
||||||
|
-- Localize the waitInMS value for performance reasons (default of 500 ms)
|
||||||
|
local _waitInMS = 500
|
||||||
|
if waitInMS ~= nil then _waitInMS = waitInMS end
|
||||||
|
|
||||||
|
Citizen.CreateThread(function()
|
||||||
|
local isInside = false
|
||||||
|
while not self.destroyed do
|
||||||
|
if not self.paused then
|
||||||
|
local point = getPointCb()
|
||||||
|
local newIsInside = self:isPointInside(point)
|
||||||
|
if newIsInside ~= isInside then
|
||||||
|
onPointInOutCb(newIsInside, point)
|
||||||
|
isInside = newIsInside
|
||||||
|
end
|
||||||
|
end
|
||||||
|
Citizen.Wait(_waitInMS)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
function PolyZone:onPlayerInOut(onPointInOutCb, waitInMS)
|
||||||
|
self:onPointInOut(PolyZone.getPlayerPosition, onPointInOutCb, waitInMS)
|
||||||
|
end
|
||||||
|
|
||||||
|
function PolyZone:addEvent(eventName)
|
||||||
|
if self.events == nil then self.events = {} end
|
||||||
|
local internalEventName = eventPrefix .. eventName
|
||||||
|
RegisterNetEvent(internalEventName)
|
||||||
|
self.events[eventName] = AddEventHandler(internalEventName, function (...)
|
||||||
|
if self:isPointInside(PolyZone.getPlayerPosition()) then
|
||||||
|
TriggerEvent(eventName, ...)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
function PolyZone:removeEvent(eventName)
|
||||||
|
if self.events and self.events[eventName] then
|
||||||
|
RemoveEventHandler(self.events[eventName])
|
||||||
|
self.events[eventName] = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function PolyZone:addDebugBlip()
|
||||||
|
return addBlip(self.center or self:getBoundingBoxCenter())
|
||||||
|
end
|
||||||
|
|
||||||
|
function PolyZone:setPaused(paused)
|
||||||
|
self.paused = paused
|
||||||
|
end
|
||||||
|
|
||||||
|
function PolyZone:isPaused()
|
||||||
|
return self.paused
|
||||||
|
end
|
||||||
|
|
||||||
|
function PolyZone:getBoundingBoxMin()
|
||||||
|
return self.min
|
||||||
|
end
|
||||||
|
|
||||||
|
function PolyZone:getBoundingBoxMax()
|
||||||
|
return self.max
|
||||||
|
end
|
||||||
|
|
||||||
|
function PolyZone:getBoundingBoxSize()
|
||||||
|
return self.size
|
||||||
|
end
|
||||||
|
|
||||||
|
function PolyZone:getBoundingBoxCenter()
|
||||||
|
return self.center
|
||||||
|
end
|
||||||
113
resources/[core]/PolyZone/creation/client/BoxZone.lua
Normal file
113
resources/[core]/PolyZone/creation/client/BoxZone.lua
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
local function handleInput(useZ, heading, length, width, center)
|
||||||
|
if not useZ then
|
||||||
|
local scaleDelta, headingDelta = 0.2, 5
|
||||||
|
BlockWeaponWheelThisFrame()
|
||||||
|
|
||||||
|
if IsDisabledControlPressed(0, 36) then -- ctrl held down
|
||||||
|
scaleDelta, headingDelta = 0.05, 1
|
||||||
|
end
|
||||||
|
|
||||||
|
if IsDisabledControlJustPressed(0, 81) then -- scroll wheel down just pressed
|
||||||
|
|
||||||
|
if IsDisabledControlPressed(0, 19) then -- alt held down
|
||||||
|
return heading, length, math.max(0.0, width - scaleDelta), center
|
||||||
|
end
|
||||||
|
if IsDisabledControlPressed(0, 21) then -- shift held down
|
||||||
|
return heading, math.max(0.0, length - scaleDelta), width, center
|
||||||
|
end
|
||||||
|
return (heading - headingDelta) % 360, length, width, center
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
if IsDisabledControlJustPressed(0, 99) then -- scroll wheel up just pressed
|
||||||
|
|
||||||
|
if IsDisabledControlPressed(0, 19) then -- alt held down
|
||||||
|
return heading, length, math.max(0.0, width + scaleDelta), center
|
||||||
|
end
|
||||||
|
if IsDisabledControlPressed(0, 21) then -- shift held down
|
||||||
|
return heading, math.max(0.0, length + scaleDelta), width, center
|
||||||
|
end
|
||||||
|
return (heading + headingDelta) % 360, length, width, center
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local rot = GetGameplayCamRot(2)
|
||||||
|
center = handleArrowInput(center, rot.z)
|
||||||
|
|
||||||
|
return heading, length, width, center
|
||||||
|
end
|
||||||
|
|
||||||
|
function handleZ(minZ, maxZ)
|
||||||
|
local delta = 0.2
|
||||||
|
|
||||||
|
if IsDisabledControlPressed(0, 36) then -- ctrl held down
|
||||||
|
delta = 0.05
|
||||||
|
end
|
||||||
|
|
||||||
|
BlockWeaponWheelThisFrame()
|
||||||
|
|
||||||
|
if IsDisabledControlJustPressed(0, 81) then -- scroll wheel down just pressed
|
||||||
|
|
||||||
|
if IsDisabledControlPressed(0, 19) then -- alt held down
|
||||||
|
return minZ - delta, maxZ
|
||||||
|
end
|
||||||
|
if IsDisabledControlPressed(0, 21) then -- shift held down
|
||||||
|
return minZ, maxZ - delta
|
||||||
|
end
|
||||||
|
return minZ - delta, maxZ - delta
|
||||||
|
end
|
||||||
|
|
||||||
|
if IsDisabledControlJustPressed(0, 99) then -- scroll wheel up just pressed
|
||||||
|
|
||||||
|
if IsDisabledControlPressed(0, 19) then -- alt held down
|
||||||
|
return minZ + delta, maxZ
|
||||||
|
end
|
||||||
|
if IsDisabledControlPressed(0, 21) then -- shift held down
|
||||||
|
return minZ, maxZ + delta
|
||||||
|
end
|
||||||
|
return minZ + delta, maxZ + delta
|
||||||
|
end
|
||||||
|
return minZ, maxZ
|
||||||
|
end
|
||||||
|
|
||||||
|
function boxStart(name, heading, length, width, minHeight, maxHeight)
|
||||||
|
local center = GetEntityCoords(PlayerPedId())
|
||||||
|
createdZone = BoxZone:Create(center, length, width, {name = tostring(name)})
|
||||||
|
local useZ, minZ, maxZ = false, center.z - 1.0, center.z + 3.0
|
||||||
|
if minHeight then
|
||||||
|
minZ = center.z - minHeight
|
||||||
|
createdZone.minZ = minZ
|
||||||
|
end
|
||||||
|
if maxHeight then
|
||||||
|
maxZ = center.z + maxHeight
|
||||||
|
createdZone.maxZ = maxZ
|
||||||
|
end
|
||||||
|
Citizen.CreateThread(function()
|
||||||
|
while createdZone do
|
||||||
|
if IsDisabledControlJustPressed(0, 20) then -- Z pressed
|
||||||
|
useZ = not useZ
|
||||||
|
if useZ then
|
||||||
|
createdZone.debugColors.walls = {255, 0, 0}
|
||||||
|
else
|
||||||
|
createdZone.debugColors.walls = {0, 255, 0}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
heading, length, width, center = handleInput(useZ, heading, length, width, center)
|
||||||
|
if useZ then
|
||||||
|
minZ, maxZ = handleZ(minZ, maxZ)
|
||||||
|
createdZone.minZ = minZ
|
||||||
|
createdZone.maxZ = maxZ
|
||||||
|
end
|
||||||
|
createdZone:setLength(length)
|
||||||
|
createdZone:setWidth(width)
|
||||||
|
createdZone:setHeading(heading)
|
||||||
|
createdZone:setCenter(center)
|
||||||
|
Wait(0)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
function boxFinish()
|
||||||
|
TriggerServerEvent("polyzone:printBox",
|
||||||
|
{name=createdZone.name, center=createdZone.center, length=createdZone.length, width=createdZone.width, heading=createdZone.offsetRot, minZ=createdZone.minZ, maxZ=createdZone.maxZ})
|
||||||
|
end
|
||||||
54
resources/[core]/PolyZone/creation/client/CircleZone.lua
Normal file
54
resources/[core]/PolyZone/creation/client/CircleZone.lua
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
local function handleInput(radius, center, useZ)
|
||||||
|
local delta = 0.05
|
||||||
|
BlockWeaponWheelThisFrame()
|
||||||
|
|
||||||
|
if IsDisabledControlPressed(0, 36) then -- ctrl held down
|
||||||
|
delta = 0.01
|
||||||
|
end
|
||||||
|
|
||||||
|
if IsDisabledControlJustPressed(0, 81) then -- scroll wheel down just pressed
|
||||||
|
|
||||||
|
if IsDisabledControlPressed(0, 19) then -- alt held down
|
||||||
|
return radius, vector3(center.x, center.y, center.z - delta), useZ
|
||||||
|
end
|
||||||
|
return math.max(0.0, radius - delta), center, useZ
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
if IsDisabledControlJustPressed(0, 99) then -- scroll wheel up just pressed
|
||||||
|
|
||||||
|
if IsDisabledControlPressed(0, 19) then -- alt held down
|
||||||
|
return radius, vector3(center.x, center.y, center.z + delta), useZ
|
||||||
|
end
|
||||||
|
return radius + delta, center, useZ
|
||||||
|
end
|
||||||
|
|
||||||
|
if IsDisabledControlJustPressed(0, 20) then -- Z pressed
|
||||||
|
return radius, center, not useZ
|
||||||
|
end
|
||||||
|
|
||||||
|
local rot = GetGameplayCamRot(2)
|
||||||
|
center = handleArrowInput(center, rot.z)
|
||||||
|
|
||||||
|
return radius, center, useZ
|
||||||
|
end
|
||||||
|
|
||||||
|
function circleStart(name, radius, useZ)
|
||||||
|
local center = GetEntityCoords(PlayerPedId())
|
||||||
|
useZ = useZ or false
|
||||||
|
createdZone = CircleZone:Create(center, radius, {name = tostring(name), useZ = useZ})
|
||||||
|
Citizen.CreateThread(function()
|
||||||
|
while createdZone do
|
||||||
|
radius, center, useZ = handleInput(radius, center, useZ)
|
||||||
|
createdZone:setRadius(radius)
|
||||||
|
createdZone:setCenter(center)
|
||||||
|
createdZone.useZ = useZ
|
||||||
|
Wait(0)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
function circleFinish()
|
||||||
|
TriggerServerEvent("polyzone:printCircle",
|
||||||
|
{name=createdZone.name, center=createdZone.center, radius=createdZone.radius, useZ=createdZone.useZ})
|
||||||
|
end
|
||||||
60
resources/[core]/PolyZone/creation/client/PolyZone.lua
Normal file
60
resources/[core]/PolyZone/creation/client/PolyZone.lua
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
local minZ, maxZ = nil, nil
|
||||||
|
|
||||||
|
local function handleInput(center)
|
||||||
|
local rot = GetGameplayCamRot(2)
|
||||||
|
center = handleArrowInput(center, rot.z)
|
||||||
|
return center
|
||||||
|
end
|
||||||
|
|
||||||
|
function polyStart(name)
|
||||||
|
local coords = GetEntityCoords(PlayerPedId())
|
||||||
|
createdZone = PolyZone:Create({vector2(coords.x, coords.y)}, {name = tostring(name), useGrid=false})
|
||||||
|
Citizen.CreateThread(function()
|
||||||
|
while createdZone do
|
||||||
|
-- Have to convert the point to a vector3 prior to calling handleInput,
|
||||||
|
-- then convert it back to vector2 afterwards
|
||||||
|
lastPoint = createdZone.points[#createdZone.points]
|
||||||
|
lastPoint = vector3(lastPoint.x, lastPoint.y, 0.0)
|
||||||
|
lastPoint = handleInput(lastPoint)
|
||||||
|
createdZone.points[#createdZone.points] = lastPoint.xy
|
||||||
|
Wait(0)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
minZ, maxZ = coords.z, coords.z
|
||||||
|
end
|
||||||
|
|
||||||
|
function polyFinish()
|
||||||
|
TriggerServerEvent("polyzone:printPoly",
|
||||||
|
{name=createdZone.name, points=createdZone.points, minZ=minZ, maxZ=maxZ})
|
||||||
|
end
|
||||||
|
|
||||||
|
RegisterNetEvent("polyzone:pzadd")
|
||||||
|
AddEventHandler("polyzone:pzadd", function()
|
||||||
|
if createdZone == nil or createdZoneType ~= 'poly' then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local coords = GetEntityCoords(PlayerPedId())
|
||||||
|
|
||||||
|
if (coords.z > maxZ) then
|
||||||
|
maxZ = coords.z
|
||||||
|
end
|
||||||
|
|
||||||
|
if (coords.z < minZ) then
|
||||||
|
minZ = coords.z
|
||||||
|
end
|
||||||
|
|
||||||
|
createdZone.points[#createdZone.points + 1] = vector2(coords.x, coords.y)
|
||||||
|
end)
|
||||||
|
|
||||||
|
RegisterNetEvent("polyzone:pzundo")
|
||||||
|
AddEventHandler("polyzone:pzundo", function()
|
||||||
|
if createdZone == nil or createdZoneType ~= 'poly' then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
createdZone.points[#createdZone.points] = nil
|
||||||
|
if #createdZone.points == 0 then
|
||||||
|
TriggerEvent("polyzone:pzcancel")
|
||||||
|
end
|
||||||
|
end)
|
||||||
68
resources/[core]/PolyZone/creation/client/commands.lua
Normal file
68
resources/[core]/PolyZone/creation/client/commands.lua
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
RegisterCommand("pzcreate", function(src, args)
|
||||||
|
local zoneType = args[1]
|
||||||
|
if zoneType == nil then
|
||||||
|
TriggerEvent('chat:addMessage', {
|
||||||
|
color = { 255, 0, 0},
|
||||||
|
multiline = true,
|
||||||
|
args = {"Me", "Please add zone type to create (poly, circle, box)!"}
|
||||||
|
})
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if zoneType ~= 'poly' and zoneType ~= 'circle' and zoneType ~= 'box' then
|
||||||
|
TriggerEvent('chat:addMessage', {
|
||||||
|
color = { 255, 0, 0},
|
||||||
|
multiline = true,
|
||||||
|
args = {"Me", "Zone type must be one of: poly, circle, box"}
|
||||||
|
})
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local name = nil
|
||||||
|
if #args >= 2 then name = args[2]
|
||||||
|
else name = GetUserInput("Enter name of zone:") end
|
||||||
|
if name == nil or name == "" then
|
||||||
|
TriggerEvent('chat:addMessage', {
|
||||||
|
color = { 255, 0, 0},
|
||||||
|
multiline = true,
|
||||||
|
args = {"Me", "Please add a name!"}
|
||||||
|
})
|
||||||
|
return
|
||||||
|
end
|
||||||
|
TriggerEvent("polyzone:pzcreate", zoneType, name, args)
|
||||||
|
end)
|
||||||
|
|
||||||
|
RegisterCommand("pzadd", function(src, args)
|
||||||
|
TriggerEvent("polyzone:pzadd")
|
||||||
|
end)
|
||||||
|
|
||||||
|
RegisterCommand("pzundo", function(src, args)
|
||||||
|
TriggerEvent("polyzone:pzundo")
|
||||||
|
end)
|
||||||
|
|
||||||
|
RegisterCommand("pzfinish", function(src, args)
|
||||||
|
TriggerEvent("polyzone:pzfinish")
|
||||||
|
end)
|
||||||
|
|
||||||
|
RegisterCommand("pzlast", function(src, args)
|
||||||
|
TriggerEvent("polyzone:pzlast")
|
||||||
|
end)
|
||||||
|
|
||||||
|
RegisterCommand("pzcancel", function(src, args)
|
||||||
|
TriggerEvent("polyzone:pzcancel")
|
||||||
|
end)
|
||||||
|
|
||||||
|
RegisterCommand("pzcomboinfo", function (src, args)
|
||||||
|
TriggerEvent("polyzone:pzcomboinfo")
|
||||||
|
end)
|
||||||
|
|
||||||
|
Citizen.CreateThread(function()
|
||||||
|
TriggerEvent('chat:addSuggestion', '/pzcreate', 'Starts creation of a zone for PolyZone of one of the available types: circle, box, poly', {
|
||||||
|
{name="zoneType", help="Zone Type (required)"},
|
||||||
|
})
|
||||||
|
|
||||||
|
TriggerEvent('chat:addSuggestion', '/pzadd', 'Adds point to zone.', {})
|
||||||
|
TriggerEvent('chat:addSuggestion', '/pzundo', 'Undoes the last point added.', {})
|
||||||
|
TriggerEvent('chat:addSuggestion', '/pzfinish', 'Finishes and prints zone.', {})
|
||||||
|
TriggerEvent('chat:addSuggestion', '/pzlast', 'Starts creation of the last zone you finished (only works on BoxZone and CircleZone)', {})
|
||||||
|
TriggerEvent('chat:addSuggestion', '/pzcancel', 'Cancel zone creation.', {})
|
||||||
|
TriggerEvent('chat:addSuggestion', '/pzcomboinfo', 'Prints some useful info for all created ComboZones', {})
|
||||||
|
end)
|
||||||
158
resources/[core]/PolyZone/creation/client/creation.lua
Normal file
158
resources/[core]/PolyZone/creation/client/creation.lua
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
lastCreatedZoneType = nil
|
||||||
|
lastCreatedZone = nil
|
||||||
|
createdZoneType = nil
|
||||||
|
createdZone = nil
|
||||||
|
drawZone = false
|
||||||
|
|
||||||
|
RegisterNetEvent("polyzone:pzcreate")
|
||||||
|
AddEventHandler("polyzone:pzcreate", function(zoneType, name, args)
|
||||||
|
if createdZone ~= nil then
|
||||||
|
TriggerEvent('chat:addMessage', {
|
||||||
|
color = { 255, 0, 0},
|
||||||
|
multiline = true,
|
||||||
|
args = {"Me", "A shape is already being created!"}
|
||||||
|
})
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if zoneType == 'poly' then
|
||||||
|
polyStart(name)
|
||||||
|
elseif zoneType == "circle" then
|
||||||
|
local radius = nil
|
||||||
|
if #args >= 3 then radius = tonumber(args[3])
|
||||||
|
else radius = tonumber(GetUserInput("Enter radius:")) end
|
||||||
|
if radius == nil then
|
||||||
|
TriggerEvent('chat:addMessage', {
|
||||||
|
color = { 255, 0, 0},
|
||||||
|
multiline = true,
|
||||||
|
args = {"Me", "CircleZone requires a radius (must be a number)!"}
|
||||||
|
})
|
||||||
|
return
|
||||||
|
end
|
||||||
|
circleStart(name, radius)
|
||||||
|
elseif zoneType == "box" then
|
||||||
|
local length = nil
|
||||||
|
if #args >= 3 then length = tonumber(args[3])
|
||||||
|
else length = tonumber(GetUserInput("Enter length:")) end
|
||||||
|
if length == nil or length < 0.0 then
|
||||||
|
TriggerEvent('chat:addMessage', {
|
||||||
|
color = { 255, 0, 0},
|
||||||
|
multiline = true,
|
||||||
|
args = {"Me", "BoxZone requires a length (must be a positive number)!"}
|
||||||
|
})
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local width = nil
|
||||||
|
if #args >= 4 then width = tonumber(args[4])
|
||||||
|
else width = tonumber(GetUserInput("Enter width:")) end
|
||||||
|
if width == nil or width < 0.0 then
|
||||||
|
TriggerEvent('chat:addMessage', {
|
||||||
|
color = { 255, 0, 0},
|
||||||
|
multiline = true,
|
||||||
|
args = {"Me", "BoxZone requires a width (must be a positive number)!"}
|
||||||
|
})
|
||||||
|
return
|
||||||
|
end
|
||||||
|
boxStart(name, 0, length, width)
|
||||||
|
else
|
||||||
|
return
|
||||||
|
end
|
||||||
|
createdZoneType = zoneType
|
||||||
|
drawZone = true
|
||||||
|
disableControlKeyInput()
|
||||||
|
drawThread()
|
||||||
|
end)
|
||||||
|
|
||||||
|
RegisterNetEvent("polyzone:pzfinish")
|
||||||
|
AddEventHandler("polyzone:pzfinish", function()
|
||||||
|
if createdZone == nil then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if createdZoneType == 'poly' then
|
||||||
|
polyFinish()
|
||||||
|
elseif createdZoneType == "circle" then
|
||||||
|
circleFinish()
|
||||||
|
elseif createdZoneType == "box" then
|
||||||
|
boxFinish()
|
||||||
|
end
|
||||||
|
|
||||||
|
TriggerEvent('chat:addMessage', {
|
||||||
|
color = { 0, 255, 0},
|
||||||
|
multiline = true,
|
||||||
|
args = {"Me", "Check PolyZone's root folder for polyzone_created_zones.txt to get the zone!"}
|
||||||
|
})
|
||||||
|
|
||||||
|
lastCreatedZoneType = createdZoneType
|
||||||
|
lastCreatedZone = createdZone
|
||||||
|
|
||||||
|
drawZone = false
|
||||||
|
createdZone = nil
|
||||||
|
createdZoneType = nil
|
||||||
|
end)
|
||||||
|
|
||||||
|
RegisterNetEvent("polyzone:pzlast")
|
||||||
|
AddEventHandler("polyzone:pzlast", function()
|
||||||
|
if createdZone ~= nil or lastCreatedZone == nil then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if lastCreatedZoneType == 'poly' then
|
||||||
|
TriggerEvent('chat:addMessage', {
|
||||||
|
color = { 0, 255, 0},
|
||||||
|
multiline = true,
|
||||||
|
args = {"Me", "The command pzlast only supports BoxZone and CircleZone for now"}
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
local name = GetUserInput("Enter name (or leave empty to reuse last zone's name):")
|
||||||
|
if name == nil then
|
||||||
|
return
|
||||||
|
elseif name == "" then
|
||||||
|
name = lastCreatedZone.name
|
||||||
|
end
|
||||||
|
createdZoneType = lastCreatedZoneType
|
||||||
|
if createdZoneType == 'box' then
|
||||||
|
local minHeight, maxHeight
|
||||||
|
if lastCreatedZone.minZ then
|
||||||
|
minHeight = lastCreatedZone.center.z - lastCreatedZone.minZ
|
||||||
|
end
|
||||||
|
if lastCreatedZone.maxZ then
|
||||||
|
maxHeight = lastCreatedZone.maxZ - lastCreatedZone.center.z
|
||||||
|
end
|
||||||
|
boxStart(name, lastCreatedZone.offsetRot, lastCreatedZone.length, lastCreatedZone.width, minHeight, maxHeight)
|
||||||
|
elseif createdZoneType == 'circle' then
|
||||||
|
circleStart(name, lastCreatedZone.radius, lastCreatedZone.useZ)
|
||||||
|
end
|
||||||
|
drawZone = true
|
||||||
|
disableControlKeyInput()
|
||||||
|
drawThread()
|
||||||
|
end)
|
||||||
|
|
||||||
|
RegisterNetEvent("polyzone:pzcancel")
|
||||||
|
AddEventHandler("polyzone:pzcancel", function()
|
||||||
|
if createdZone == nil then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
TriggerEvent('chat:addMessage', {
|
||||||
|
color = {255, 0, 0},
|
||||||
|
multiline = true,
|
||||||
|
args = {"Me", "Zone creation canceled!"}
|
||||||
|
})
|
||||||
|
|
||||||
|
drawZone = false
|
||||||
|
createdZone = nil
|
||||||
|
createdZoneType = nil
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- Drawing
|
||||||
|
function drawThread()
|
||||||
|
Citizen.CreateThread(function()
|
||||||
|
while drawZone do
|
||||||
|
if createdZone then
|
||||||
|
createdZone:draw(true)
|
||||||
|
end
|
||||||
|
Wait(0)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
75
resources/[core]/PolyZone/creation/client/utils.lua
Normal file
75
resources/[core]/PolyZone/creation/client/utils.lua
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
-- GetUserInput function inspired by vMenu (https://github.com/TomGrobbe/vMenu/blob/master/vMenu/CommonFunctions.cs)
|
||||||
|
function GetUserInput(windowTitle, defaultText, maxInputLength)
|
||||||
|
-- Create the window title string.
|
||||||
|
local resourceName = string.upper(GetCurrentResourceName())
|
||||||
|
local textEntry = resourceName .. "_WINDOW_TITLE"
|
||||||
|
if windowTitle == nil then
|
||||||
|
windowTitle = "Enter:"
|
||||||
|
end
|
||||||
|
AddTextEntry(textEntry, windowTitle)
|
||||||
|
|
||||||
|
-- Display the input box.
|
||||||
|
DisplayOnscreenKeyboard(1, textEntry, "", defaultText or "", "", "", "", maxInputLength or 30)
|
||||||
|
Wait(0)
|
||||||
|
-- Wait for a result.
|
||||||
|
while true do
|
||||||
|
local keyboardStatus = UpdateOnscreenKeyboard();
|
||||||
|
if keyboardStatus == 3 then -- not displaying input field anymore somehow
|
||||||
|
return nil
|
||||||
|
elseif keyboardStatus == 2 then -- cancelled
|
||||||
|
return nil
|
||||||
|
elseif keyboardStatus == 1 then -- finished editing
|
||||||
|
return GetOnscreenKeyboardResult()
|
||||||
|
else
|
||||||
|
Wait(0)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function handleArrowInput(center, heading)
|
||||||
|
delta = 0.05
|
||||||
|
|
||||||
|
if IsDisabledControlPressed(0, 36) then -- ctrl held down
|
||||||
|
delta = 0.01
|
||||||
|
end
|
||||||
|
|
||||||
|
if IsDisabledControlPressed(0, 172) then -- arrow up
|
||||||
|
local newCenter = PolyZone.rotate(center.xy, vector2(center.x, center.y + delta), heading)
|
||||||
|
return vector3(newCenter.x, newCenter.y, center.z)
|
||||||
|
end
|
||||||
|
|
||||||
|
if IsDisabledControlPressed(0, 173) then -- arrow down
|
||||||
|
local newCenter = PolyZone.rotate(center.xy, vector2(center.x, center.y - delta), heading)
|
||||||
|
return vector3(newCenter.x, newCenter.y, center.z)
|
||||||
|
end
|
||||||
|
|
||||||
|
if IsDisabledControlPressed(0, 174) then -- arrow left
|
||||||
|
local newCenter = PolyZone.rotate(center.xy, vector2(center.x - delta, center.y), heading)
|
||||||
|
return vector3(newCenter.x, newCenter.y, center.z)
|
||||||
|
end
|
||||||
|
|
||||||
|
if IsDisabledControlPressed(0, 175) then -- arrow right
|
||||||
|
local newCenter = PolyZone.rotate(center.xy, vector2(center.x + delta, center.y), heading)
|
||||||
|
return vector3(newCenter.x, newCenter.y, center.z)
|
||||||
|
end
|
||||||
|
|
||||||
|
return center
|
||||||
|
end
|
||||||
|
|
||||||
|
function disableControlKeyInput()
|
||||||
|
Citizen.CreateThread(function()
|
||||||
|
while drawZone do
|
||||||
|
DisableControlAction(0, 36, true) -- Ctrl
|
||||||
|
DisableControlAction(0, 19, true) -- Alt
|
||||||
|
DisableControlAction(0, 20, true) -- 'Z'
|
||||||
|
DisableControlAction(0, 21, true) -- Shift
|
||||||
|
DisableControlAction(0, 81, true) -- Scroll Wheel Down
|
||||||
|
DisableControlAction(0, 99, true) -- Scroll Wheel Up
|
||||||
|
DisableControlAction(0, 172, true) -- Arrow Up
|
||||||
|
DisableControlAction(0, 173, true) -- Arrow Down
|
||||||
|
DisableControlAction(0, 174, true) -- Arrow Left
|
||||||
|
DisableControlAction(0, 175, true) -- Arrow Right
|
||||||
|
Wait(0)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
56
resources/[core]/PolyZone/creation/server/config.lua
Normal file
56
resources/[core]/PolyZone/creation/server/config.lua
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
Config = Config or {}
|
||||||
|
Config.ConfigFormatEnabled = false
|
||||||
|
-- Default Format
|
||||||
|
|
||||||
|
-- Name: TestBox | 2022-04-13T22:46:17Z
|
||||||
|
-- BoxZone:Create(vector3(-344.16, -103.25, 39.02), 1, 1, {
|
||||||
|
-- name = "TestBox",
|
||||||
|
-- heading = 0,
|
||||||
|
-- --debugPoly = true
|
||||||
|
-- })
|
||||||
|
|
||||||
|
-- Name: TestCircle | 2022-04-13T22:46:39Z
|
||||||
|
-- CircleZone:Create(vector3(-344.16, -103.25, 39.02), 1.0, {
|
||||||
|
-- name = "TestCircle",
|
||||||
|
-- useZ = false,
|
||||||
|
-- --debugPoly = true
|
||||||
|
-- })
|
||||||
|
|
||||||
|
-- Name: TestPoly | 2022-04-13T22:46:55Z
|
||||||
|
-- PolyZone:Create({
|
||||||
|
-- vector2(-344.15713500977, -103.24993896484),
|
||||||
|
-- vector2(-343.69491577148, -100.99839019775),
|
||||||
|
-- vector2(-345.53350830078, -102.00588226318)
|
||||||
|
-- }, {
|
||||||
|
-- name = "TestPoly",
|
||||||
|
-- minZ = 39.015644073486,
|
||||||
|
-- maxZ = 39.015865325928
|
||||||
|
-- })
|
||||||
|
|
||||||
|
-- Config Format
|
||||||
|
|
||||||
|
-- Name: TestBox | 2022-04-13T22:34:48Z
|
||||||
|
-- coords = vector3(-342.92, -102.09, 39.02),
|
||||||
|
-- length = 1,
|
||||||
|
-- width = 1,
|
||||||
|
-- name = "TestBox",
|
||||||
|
-- heading = 0,
|
||||||
|
-- debugPoly = true
|
||||||
|
|
||||||
|
-- Name: TestCircle | 2022-04-13T22:35:09Z
|
||||||
|
-- coords = vector3(-342.92, -102.09, 39.02),
|
||||||
|
-- radius = 1.0,
|
||||||
|
-- name = "TestCircle",
|
||||||
|
-- useZ = false,
|
||||||
|
-- debugPoly = true
|
||||||
|
|
||||||
|
-- Name: TestPoly | 2022-04-13T22:35:43Z
|
||||||
|
-- points = {
|
||||||
|
-- vector2(-342.91537475586, -102.09281158447),
|
||||||
|
-- vector2(-344.09732055664, -104.0821762085),
|
||||||
|
-- vector2(-342.01580810547, -105.60903167725)
|
||||||
|
-- },
|
||||||
|
-- name = "TestPoly",
|
||||||
|
-- minZ = 39.015701293945,
|
||||||
|
-- maxZ = 39.015705108643,
|
||||||
|
-- debugPoly = true
|
||||||
109
resources/[core]/PolyZone/creation/server/creation.lua
Normal file
109
resources/[core]/PolyZone/creation/server/creation.lua
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
RegisterNetEvent("polyzone:printPoly")
|
||||||
|
AddEventHandler("polyzone:printPoly", function(zone)
|
||||||
|
local created_zones = LoadResourceFile(GetCurrentResourceName(), "polyzone_created_zones.txt") or ""
|
||||||
|
local output = created_zones .. parsePoly(zone)
|
||||||
|
SaveResourceFile(GetCurrentResourceName(), "polyzone_created_zones.txt", output, -1)
|
||||||
|
end)
|
||||||
|
|
||||||
|
RegisterNetEvent("polyzone:printCircle")
|
||||||
|
AddEventHandler("polyzone:printCircle", function(zone)
|
||||||
|
local created_zones = LoadResourceFile(GetCurrentResourceName(), "polyzone_created_zones.txt") or ""
|
||||||
|
local output = created_zones .. parseCircle(zone)
|
||||||
|
SaveResourceFile(GetCurrentResourceName(), "polyzone_created_zones.txt", output, -1)
|
||||||
|
end)
|
||||||
|
|
||||||
|
RegisterNetEvent("polyzone:printBox")
|
||||||
|
AddEventHandler("polyzone:printBox", function(zone)
|
||||||
|
local created_zones = LoadResourceFile(GetCurrentResourceName(), "polyzone_created_zones.txt") or ""
|
||||||
|
local output = created_zones .. parseBox(zone)
|
||||||
|
SaveResourceFile(GetCurrentResourceName(), "polyzone_created_zones.txt", output, -1)
|
||||||
|
end)
|
||||||
|
|
||||||
|
function round(num, numDecimalPlaces)
|
||||||
|
local mult = 10^(numDecimalPlaces or 0)
|
||||||
|
return math.floor(num * mult + 0.5) / mult
|
||||||
|
end
|
||||||
|
|
||||||
|
function printoutHeader(name)
|
||||||
|
return "-- Name: " .. name .. " | " .. os.date("!%Y-%m-%dT%H:%M:%SZ\n")
|
||||||
|
end
|
||||||
|
|
||||||
|
function parsePoly(zone)
|
||||||
|
if Config.ConfigFormatEnabled then
|
||||||
|
local printout = printoutHeader(zone.name)
|
||||||
|
printout = printout .. "points = {\n"
|
||||||
|
for i = 1, #zone.points do
|
||||||
|
if i ~= #zone.points then
|
||||||
|
printout = printout .. " vector2(" .. tostring(zone.points[i].x) .. ", " .. tostring(zone.points[i].y) .."),\n"
|
||||||
|
else
|
||||||
|
printout = printout .. " vector2(" .. tostring(zone.points[i].x) .. ", " .. tostring(zone.points[i].y) ..")\n"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
printout = printout .. "},\nname = \"" .. zone.name .. "\",\n--minZ = " .. zone.minZ .. ",\n--maxZ = " .. zone.maxZ .. ",\n--debugPoly = true\n\n"
|
||||||
|
return printout
|
||||||
|
else
|
||||||
|
local printout = printoutHeader(zone.name)
|
||||||
|
printout = printout .. "PolyZone:Create({\n"
|
||||||
|
for i = 1, #zone.points do
|
||||||
|
if i ~= #zone.points then
|
||||||
|
printout = printout .. " vector2(" .. tostring(zone.points[i].x) .. ", " .. tostring(zone.points[i].y) .."),\n"
|
||||||
|
else
|
||||||
|
printout = printout .. " vector2(" .. tostring(zone.points[i].x) .. ", " .. tostring(zone.points[i].y) ..")\n"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
printout = printout .. "}, {\n name = \"" .. zone.name .. "\",\n --minZ = " .. zone.minZ .. ",\n --maxZ = " .. zone.maxZ .. "\n})\n\n"
|
||||||
|
return printout
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function parseCircle(zone)
|
||||||
|
if Config.ConfigFormatEnabled then
|
||||||
|
local printout = printoutHeader(zone.name)
|
||||||
|
printout = printout .. "coords = "
|
||||||
|
printout = printout .. "vector3(" .. tostring(round(zone.center.x, 2)) .. ", " .. tostring(round(zone.center.y, 2)) .. ", " .. tostring(round(zone.center.z, 2)) .."),\n"
|
||||||
|
printout = printout .. "radius = " .. tostring(zone.radius) .. ",\n"
|
||||||
|
printout = printout .. "name = \"" .. zone.name .. "\",\nuseZ = " .. tostring(zone.useZ) .. ",\n--debugPoly = true\n\n"
|
||||||
|
return printout
|
||||||
|
else
|
||||||
|
local printout = printoutHeader(zone.name)
|
||||||
|
printout = printout .. "CircleZone:Create("
|
||||||
|
printout = printout .. "vector3(" .. tostring(round(zone.center.x, 2)) .. ", " .. tostring(round(zone.center.y, 2)) .. ", " .. tostring(round(zone.center.z, 2)) .."), "
|
||||||
|
printout = printout .. tostring(zone.radius) .. ", "
|
||||||
|
printout = printout .. "{\n name = \"" .. zone.name .. "\",\n useZ = " .. tostring(zone.useZ) .. ",\n --debugPoly = true\n})\n\n"
|
||||||
|
return printout
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function parseBox(zone)
|
||||||
|
if Config.ConfigFormatEnabled then
|
||||||
|
local printout = printoutHeader(zone.name)
|
||||||
|
printout = printout .. "coords = "
|
||||||
|
printout = printout .. "vector3(" .. tostring(round(zone.center.x, 2)) .. ", " .. tostring(round(zone.center.y, 2)) .. ", " .. tostring(round(zone.center.z, 2)) .."),\n"
|
||||||
|
printout = printout .. "length = " .. tostring(zone.length) .. ",\n"
|
||||||
|
printout = printout .. "width = " .. tostring(zone.width) .. ",\n"
|
||||||
|
printout = printout .. "name = \"" .. zone.name .. "\",\nheading = " .. zone.heading .. ",\n--debugPoly = true"
|
||||||
|
if zone.minZ then
|
||||||
|
printout = printout .. ",\nminZ = " .. tostring(round(zone.minZ, 2))
|
||||||
|
end
|
||||||
|
if zone.maxZ then
|
||||||
|
printout = printout .. ",\nmaxZ = " .. tostring(round(zone.maxZ, 2))
|
||||||
|
end
|
||||||
|
printout = printout .. "\n\n"
|
||||||
|
return printout
|
||||||
|
else
|
||||||
|
local printout = printoutHeader(zone.name)
|
||||||
|
printout = printout .. "BoxZone:Create("
|
||||||
|
printout = printout .. "vector3(" .. tostring(round(zone.center.x, 2)) .. ", " .. tostring(round(zone.center.y, 2)) .. ", " .. tostring(round(zone.center.z, 2)) .."), "
|
||||||
|
printout = printout .. tostring(zone.length) .. ", "
|
||||||
|
printout = printout .. tostring(zone.width) .. ", "
|
||||||
|
printout = printout .. "{\n name = \"" .. zone.name .. "\",\n heading = " .. zone.heading .. ",\n --debugPoly = true"
|
||||||
|
if zone.minZ then
|
||||||
|
printout = printout .. ",\n minZ = " .. tostring(round(zone.minZ, 2))
|
||||||
|
end
|
||||||
|
if zone.maxZ then
|
||||||
|
printout = printout .. ",\n maxZ = " .. tostring(round(zone.maxZ, 2))
|
||||||
|
end
|
||||||
|
printout = printout .. "\n})\n\n"
|
||||||
|
return printout
|
||||||
|
end
|
||||||
|
end
|
||||||
20
resources/[core]/PolyZone/fxmanifest.lua
Normal file
20
resources/[core]/PolyZone/fxmanifest.lua
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
games {'gta5'}
|
||||||
|
|
||||||
|
fx_version 'cerulean'
|
||||||
|
|
||||||
|
description 'Define zones of different shapes and test whether a point is inside or outside of the zone'
|
||||||
|
version '2.6.2'
|
||||||
|
|
||||||
|
client_scripts {
|
||||||
|
'client.lua',
|
||||||
|
'BoxZone.lua',
|
||||||
|
'EntityZone.lua',
|
||||||
|
'CircleZone.lua',
|
||||||
|
'ComboZone.lua',
|
||||||
|
'creation/client/*.lua'
|
||||||
|
}
|
||||||
|
|
||||||
|
server_scripts {
|
||||||
|
'creation/server/*.lua',
|
||||||
|
'server.lua'
|
||||||
|
}
|
||||||
10
resources/[core]/PolyZone/server.lua
Normal file
10
resources/[core]/PolyZone/server.lua
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
local eventPrefix = '__PolyZone__:'
|
||||||
|
|
||||||
|
function triggerZoneEvent(eventName, ...)
|
||||||
|
TriggerClientEvent(eventPrefix .. eventName, -1, ...)
|
||||||
|
end
|
||||||
|
|
||||||
|
RegisterNetEvent("PolyZone:TriggerZoneEvent")
|
||||||
|
AddEventHandler("PolyZone:TriggerZoneEvent", triggerZoneEvent)
|
||||||
|
|
||||||
|
exports("TriggerZoneEvent", triggerZoneEvent)
|
||||||
29
resources/[core]/bob74_ipl/.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
29
resources/[core]/bob74_ipl/.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
---
|
||||||
|
name: Bug report
|
||||||
|
about: Create a report to help us improve
|
||||||
|
title: ''
|
||||||
|
labels: ''
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**First of all**
|
||||||
|
Did you try disabling `bob74_ipl` to see if the issue is still there? Yes/No
|
||||||
|
Did you use the latest version of `bob74_ipl` ? Yes/No
|
||||||
|
Did you use an up to date server [artifact](https://runtime.fivem.net/artifacts/fivem/build_server_windows/master/) ? Yes/No
|
||||||
|
|
||||||
|
**Describe the bug**
|
||||||
|
A clear and concise description of what the bug is.
|
||||||
|
|
||||||
|
**To Reproduce**
|
||||||
|
Coordinates or map screenshot of the location.
|
||||||
|
|
||||||
|
**Expected behavior**
|
||||||
|
A clear and concise description of what you expected to happen, a screenshot from GTA Online if relevant is welcome.
|
||||||
|
|
||||||
|
**Screenshots**
|
||||||
|
If applicable, add screenshots to help explain your problem.
|
||||||
|
|
||||||
|
**Versions**
|
||||||
|
- Game build version
|
||||||
|
- Resource version
|
||||||
21
resources/[core]/bob74_ipl/LICENSE
Normal file
21
resources/[core]/bob74_ipl/LICENSE
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2024 Bob74
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
195
resources/[core]/bob74_ipl/README.md
Normal file
195
resources/[core]/bob74_ipl/README.md
Normal file
@ -0,0 +1,195 @@
|
|||||||
|
# Fix holes and customize the map (Updated to Bottom Dollar Bounties DLC)
|
||||||
|
|
||||||
|
The purpose of this script is to fix the holes in the map by loading zones that aren’t loaded by default. I’ve added quite a lot of places to load, based on [Mikeeh’s script](https://forum.fivem.net/t/release-load-unloaded-ipls/5911). If you just want to fix the holes in the map, then use this resource as provided.
|
||||||
|
|
||||||
|
This resource has been completely rewritten from scratch since v2.0. You can customize almost every storymode and online purchasable interiors from your own resources.
|
||||||
|
|
||||||
|
## Download
|
||||||
|
- Latest version: https://github.com/Bob74/bob74_ipl/releases/latest
|
||||||
|
|
||||||
|
- Source code: https://github.com/Bob74/bob74_ipl
|
||||||
|
|
||||||
|
## [Wiki](https://github.com/Bob74/bob74_ipl/wiki)
|
||||||
|
- The Wiki has been created to help you customize your interiors as you wish. It contains every function you can use for each interior.
|
||||||
|
- Each Wiki page has an example at the bottom of the page to show how you can use it in your own resource.
|
||||||
|
- Also at the bottom of the Wiki will show you the default values set by `IPL_NAME.LoadDefault()`.
|
||||||
|
|
||||||
|
## Install
|
||||||
|
1. Download the [latest version](https://github.com/Bob74/bob74_ipl/releases/latest).
|
||||||
|
2. Extract `bob74_ipl.zip` and copy the `bob74_ipl` into your `resources` folder.
|
||||||
|
3. Add `start bob74_ipl` to your your `server.cfg` file.
|
||||||
|
|
||||||
|
## Screenshots
|
||||||
|
- [After Hours Album](https://imgur.com/a/Qg96l0D)
|
||||||
|
- [Misc. Album](https://imgur.com/a/cs9Ip4d)
|
||||||
|
- [IPL Fix Album](https://imgur.com/a/1Sfl4)
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
|
||||||
|
<details><summary>Click to view</summary>
|
||||||
|
(DD/MM/YYYY)
|
||||||
|
|
||||||
|
---
|
||||||
|
24/08/2024 - 2.3.2
|
||||||
|
- Added Kosatka and "The Music Locker" interiors.
|
||||||
|
- Removed `Citizen` prefix from code.
|
||||||
|
|
||||||
|
10/08/2024 - 2.3.1
|
||||||
|
- Fix world not rendering when inside security offices
|
||||||
|
- Fix typos in "Los Santos Tuners" files
|
||||||
|
|
||||||
|
02/07/2024 - 2.3.0
|
||||||
|
- Added "Bottom Dollar Bounties" support
|
||||||
|
|
||||||
|
14/04/2024 - 2.2.1
|
||||||
|
- Allow disabling San Andreas Mercenaries fixes
|
||||||
|
- Allow setting base game cargo ship as sunk
|
||||||
|
- Rename `ChopShopSalvage.Ipl.Load()` to `ChopShopSalvage.Ipl.Exterior.Load()`
|
||||||
|
- Rename `DrugWarsFreakshop.Ipl.Load()` to `DrugWarsFreakshop.Ipl.Exterior.Load()`
|
||||||
|
- Rename `DrugWarsGarage.Ipl.Load()` to `DrugWarsGarage.Ipl.Exterior.Load()`
|
||||||
|
|
||||||
|
06/04/2024 - 2.2.0
|
||||||
|
- Added "Los Santos Drug Wars" support
|
||||||
|
- Added "San Andreas Mercenaries" support
|
||||||
|
- Added "The Chop Shop" support
|
||||||
|
- Added missing base IPLs
|
||||||
|
|
||||||
|
27/03/2024 - 2.1.4
|
||||||
|
- North Yankton improvements (https://github.com/Bob74/bob74_ipl/pull/131 @TheIndra55)
|
||||||
|
|
||||||
|
05/12/2023 - 2.1.3
|
||||||
|
- Added missing train track near Davis Quartz (https://github.com/Bob74/bob74_ipl/pull/129 @TheIndra55)
|
||||||
|
|
||||||
|
10/01/2023 - 2.1.2
|
||||||
|
- Fix native and update native names (@NeenGame )
|
||||||
|
|
||||||
|
24/10/2022 - 2.1.1
|
||||||
|
- Fix vespucci beach wall hole
|
||||||
|
- Fix Boat House Door in Sandy Shores
|
||||||
|
- Fix GTA 5 24/7 Roof in Sandy Shores
|
||||||
|
- Fix Industrial Building near Lesters Warehouse
|
||||||
|
- Fix Collision Holes near Lost MC compound
|
||||||
|
|
||||||
|
11/10/2022 - 2.1.0a
|
||||||
|
- Make Doomsday Facility Objects non network
|
||||||
|
|
||||||
|
03/08/2022 - 2.1.0
|
||||||
|
- Added "The Criminal Enterprises" support
|
||||||
|
|
||||||
|
02/05/2022 - 2.0.15
|
||||||
|
- Reformatted code
|
||||||
|
- Removed unused .gitignore
|
||||||
|
- Bumped version in fxmanifest.lua
|
||||||
|
- Improved performance
|
||||||
|
|
||||||
|
21/04/2022 - 2.0.14
|
||||||
|
- Fix casino penthouse carpet patterns colors
|
||||||
|
|
||||||
|
12/02/2022 - 2.0.13a
|
||||||
|
- Fix Music Roof
|
||||||
|
|
||||||
|
12/02/2022 - 2.0.13
|
||||||
|
- Added Contract IPLs: Garage, Studio, Offices, Music Roof, Billboards
|
||||||
|
|
||||||
|
10/02/2022 - 2.0.12
|
||||||
|
- Fix FIB roof
|
||||||
|
|
||||||
|
07/02/2022 - 2.0.11
|
||||||
|
- Added Tuners IPLs: Garage, Meth Lab, Meetup
|
||||||
|
|
||||||
|
18/01/2022 - 2.0.10b
|
||||||
|
- Change water in yachts to be non-networked.
|
||||||
|
|
||||||
|
01/08/2021 - 2.0.10a
|
||||||
|
- Improved performance
|
||||||
|
- Fixed hole in the FIB fountain
|
||||||
|
- Fixed error appearing if casino IPL is loaded, but the game build is not sufficient
|
||||||
|
- Fixed a few typos in the README file
|
||||||
|
|
||||||
|
19/07/2021 - 2.0.10
|
||||||
|
- Added Diamond Casino IPLs: Casino, Garage, VIP garage, Penthouse
|
||||||
|
- Import: Forced refresh of CEO Garages
|
||||||
|
- Updated fxmanifest fx_version to cerulean
|
||||||
|
- Updated IPL list link in fxmanifest nad removed outdated Props list and Interior ID list
|
||||||
|
- Fixed export typo in `michael.lua`
|
||||||
|
- Removed unnecessary space in north_yankton IPL
|
||||||
|
|
||||||
|
27/05/2020 - 2.0.9a
|
||||||
|
- Fixed disabling Pillbox Hospital
|
||||||
|
- Fixed `ResetInteriorVariables`
|
||||||
|
|
||||||
|
23/04/2020 - 2.0.9
|
||||||
|
- Replaced deprecated __resource.lua with fxmanifest.lua
|
||||||
|
- Added ferris wheel on the Del Perro Pier
|
||||||
|
- Reformatted client.lua
|
||||||
|
|
||||||
|
20/10/2019 - 2.0.8
|
||||||
|
- Nightclubs: Added dry ice emitters
|
||||||
|
- Heist & Gunrunning: Added water to the yachts hot tubs (to enable/disable)
|
||||||
|
- Offices: Added a way to open and close the safes
|
||||||
|
- Facility: Added privacy glass
|
||||||
|
- Moved Bahama Mamas and PillBox Hospital in their own files
|
||||||
|
- Fixed error `ReleaseNamedRendertarget`
|
||||||
|
- Cleaned and optimized the code
|
||||||
|
|
||||||
|
22/03/2019 - 2.0.7c
|
||||||
|
- CEO Offices: Changed the default loaded garage to ImportCEOGarage4.Part.Garage2 in order to avoid Office glitches
|
||||||
|
|
||||||
|
15/01/2019 - 2.0.7b
|
||||||
|
- Nightclubs: Fixed a typo for the fake lights
|
||||||
|
|
||||||
|
15/01/2019 - 2.0.7a
|
||||||
|
- Nightclubs: Added the ability to set no podium (using `AfterHoursNightclubs.Interior.Podium.none`)
|
||||||
|
|
||||||
|
14/01/2019 - 2.0.7
|
||||||
|
- Changed the way Trevor’s trailer is handled and added a Wiki entry.
|
||||||
|
- Added a way to open or close Zancudo’s gates with a Wiki entry.
|
||||||
|
|
||||||
|
12/01/2019 - 2.0.6
|
||||||
|
- Added nightclubs interior and exteriors
|
||||||
|
- Removed Zancudo gates by default (file bob74_ipl/gtav/base.lua: RequestIpl("CS3_07_MPGates") is now commented)
|
||||||
|
|
||||||
|
29/12/2018 - 2.0.5a
|
||||||
|
- Fixed the name of the BikerClubhouse1 export
|
||||||
|
|
||||||
|
19/12/2018 - 2.0.5
|
||||||
|
- Fixed a typo that prevents the printers, security stuff, and cash piles to spawn in the counterfeit cash factory
|
||||||
|
|
||||||
|
10/11/2018 - 2.0.4
|
||||||
|
- Fixed an issue where the clubhouse2 lower walls wouldn’t be colored on the first resource start
|
||||||
|
- Fixed gang members names using an old format
|
||||||
|
- Disabled the Mod shop from CEO garage 3 (ImportCEOGarage3) because it is overlapping with CEO office 3 (FinanceOffice3)
|
||||||
|
|
||||||
|
08/11/2018 - 2.0.3
|
||||||
|
- Added biker gang’s name, missions, and members pictures
|
||||||
|
- Added CEO office organization’s name
|
||||||
|
|
||||||
|
05/11/2018 - 2.0.1
|
||||||
|
- Removed overlapping Zancudo River
|
||||||
|
- Added the trailer near Zancudo River
|
||||||
|
|
||||||
|
04/11/2018 - 2.0.0
|
||||||
|
- Plugin totally rewritten
|
||||||
|
- Support for all DLC (up to The Doomsday Heist)
|
||||||
|
- Ability to easily customize story mode and online purchasable interiors
|
||||||
|
- You can still use it as it is if you want IPL and interiors to be loaded, the plugin sets a default style for each one
|
||||||
|
- Check out the Wiki to find out how: https://github.com/Bob74/bob74_ipl/wiki
|
||||||
|
|
||||||
|
26/06/2017
|
||||||
|
- Added optional IPL
|
||||||
|
- Bunkers exteriors (enabled)
|
||||||
|
- Bunkers interior
|
||||||
|
- CEO Offices
|
||||||
|
- Bikers places (some are still buggy)
|
||||||
|
- Import/Export locations
|
||||||
|
- Removed the trick to open Lost’s safehouse since the last update already opens it
|
||||||
|
|
||||||
|
19/06/2017
|
||||||
|
- Fix hole in Zancudo River
|
||||||
|
- Fix hole in Cassidy Creek
|
||||||
|
- Add optional graffiti on some billboards (enabled by default)
|
||||||
|
- Opened Lost’s safehouse interior
|
||||||
|
|
||||||
|
14/06/2017
|
||||||
|
- Original release
|
||||||
|
</details>
|
||||||
223
resources/[core]/bob74_ipl/client.lua
Normal file
223
resources/[core]/bob74_ipl/client.lua
Normal file
@ -0,0 +1,223 @@
|
|||||||
|
CreateThread(function()
|
||||||
|
-- ====================================================================
|
||||||
|
-- =--------------------- [GTA V: Single player] ---------------------=
|
||||||
|
-- ====================================================================
|
||||||
|
|
||||||
|
-- Michael: -802.311, 175.056, 72.8446
|
||||||
|
Michael.LoadDefault()
|
||||||
|
|
||||||
|
-- Simeon: -47.16170 -1115.3327 26.5
|
||||||
|
Simeon.LoadDefault()
|
||||||
|
|
||||||
|
-- Franklin's aunt: -9.96562, -1438.54, 31.1015
|
||||||
|
FranklinAunt.LoadDefault()
|
||||||
|
|
||||||
|
-- Franklin
|
||||||
|
Franklin.LoadDefault()
|
||||||
|
|
||||||
|
-- Floyd: -1150.703, -1520.713, 10.633
|
||||||
|
Floyd.LoadDefault()
|
||||||
|
|
||||||
|
-- Trevor: 1985.48132, 3828.76757, 32.5
|
||||||
|
TrevorsTrailer.LoadDefault()
|
||||||
|
|
||||||
|
-- Bahama Mamas: -1388.0013, -618.41967, 30.819599
|
||||||
|
BahamaMamas.Enable(true)
|
||||||
|
|
||||||
|
-- Pillbox hospital: 307.1680, -590.807, 43.280
|
||||||
|
PillboxHospital.Enable(true)
|
||||||
|
|
||||||
|
-- Zancudo Gates (GTAO like): -1600.30100000, 2806.73100000, 18.79683000
|
||||||
|
ZancudoGates.LoadDefault()
|
||||||
|
|
||||||
|
-- Other
|
||||||
|
Ammunations.LoadDefault()
|
||||||
|
LesterFactory.LoadDefault()
|
||||||
|
StripClub.LoadDefault()
|
||||||
|
CargoShip.LoadDefault()
|
||||||
|
|
||||||
|
Graffitis.Enable(true)
|
||||||
|
|
||||||
|
-- UFO
|
||||||
|
UFO.Hippie.Enable(false) -- 2490.47729, 3774.84351, 2414.035
|
||||||
|
UFO.Chiliad.Enable(false) -- 501.52880000, 5593.86500000, 796.23250000
|
||||||
|
UFO.Zancudo.Enable(false) -- -2051.99463, 3237.05835, 1456.97021
|
||||||
|
|
||||||
|
-- Red Carpet: 300.5927, 199.7589, 104.3776
|
||||||
|
RedCarpet.Enable(false)
|
||||||
|
|
||||||
|
-- North Yankton: 3217.697, -4834.826, 111.8152
|
||||||
|
NorthYankton.Enable(false)
|
||||||
|
|
||||||
|
-- ====================================================================
|
||||||
|
-- =-------------------------- [GTA Online] --------------------------=
|
||||||
|
-- ====================================================================
|
||||||
|
GTAOApartmentHi1.LoadDefault() -- -35.31277 -580.4199 88.71221 (4 Integrity Way, Apt 30)
|
||||||
|
GTAOApartmentHi2.LoadDefault() -- -1477.14 -538.7499 55.5264 (Dell Perro Heights, Apt 7)
|
||||||
|
GTAOHouseHi1.LoadDefault() -- -169.286 486.4938 137.4436 (3655 Wild Oats Drive)
|
||||||
|
GTAOHouseHi2.LoadDefault() -- 340.9412 437.1798 149.3925 (2044 North Conker Avenue)
|
||||||
|
GTAOHouseHi3.LoadDefault() -- 373.023 416.105 145.7006 (2045 North Conker Avenue)
|
||||||
|
GTAOHouseHi4.LoadDefault() -- -676.127 588.612 145.1698 (2862 Hillcrest Avenue)
|
||||||
|
GTAOHouseHi5.LoadDefault() -- -763.107 615.906 144.1401 (2868 Hillcrest Avenue)
|
||||||
|
GTAOHouseHi6.LoadDefault() -- -857.798 682.563 152.6529 (2874 Hillcrest Avenue)
|
||||||
|
GTAOHouseHi7.LoadDefault() -- 120.5 549.952 184.097 (2677 Whispymound Drive)
|
||||||
|
GTAOHouseHi8.LoadDefault() -- -1288 440.748 97.69459 (2133 Mad Wayne Thunder)
|
||||||
|
GTAOHouseMid1.LoadDefault() -- 347.2686 -999.2955 -99.19622
|
||||||
|
GTAOHouseLow1.LoadDefault() -- 261.4586 -998.8196 -99.00863
|
||||||
|
|
||||||
|
-- ====================================================================
|
||||||
|
-- =------------------------ [DLC: High life] ------------------------=
|
||||||
|
-- ====================================================================
|
||||||
|
HLApartment1.LoadDefault() -- -1468.14 -541.815 73.4442 (Dell Perro Heights, Apt 4)
|
||||||
|
HLApartment2.LoadDefault() -- -915.811 -379.432 113.6748 (Richard Majestic, Apt 2)
|
||||||
|
HLApartment3.LoadDefault() -- -614.86 40.6783 97.60007 (Tinsel Towers, Apt 42)
|
||||||
|
HLApartment4.LoadDefault() -- -773.407 341.766 211.397 (EclipseTowers, Apt 3)
|
||||||
|
HLApartment5.LoadDefault() -- -18.07856 -583.6725 79.46569 (4 Integrity Way, Apt 28)
|
||||||
|
HLApartment6.LoadDefault() -- -609.56690000 51.28212000 -183.98080
|
||||||
|
|
||||||
|
-- ====================================================================
|
||||||
|
-- =-------------------------- [DLC: Heists] -------------------------=
|
||||||
|
-- ====================================================================
|
||||||
|
HeistCarrier.Enable(true) -- 3082.3117, -4717.1191, 15.2622
|
||||||
|
HeistYacht.LoadDefault() -- -2043.974,-1031.582, 11.981
|
||||||
|
|
||||||
|
-- ====================================================================
|
||||||
|
-- =--------------- [DLC: Executives & Other Criminals] --------------=
|
||||||
|
-- ====================================================================
|
||||||
|
ExecApartment1.LoadDefault() -- -787.7805 334.9232 215.8384 (EclipseTowers, Penthouse Suite 1)
|
||||||
|
ExecApartment2.LoadDefault() -- -773.2258 322.8252 194.8862 (EclipseTowers, Penthouse Suite 2)
|
||||||
|
ExecApartment3.LoadDefault() -- -787.7805 334.9232 186.1134 (EclipseTowers, Penthouse Suite 3)
|
||||||
|
|
||||||
|
-- ====================================================================
|
||||||
|
-- =-------------------- [DLC: Finance & Felony] --------------------=
|
||||||
|
-- ====================================================================
|
||||||
|
FinanceOffice1.LoadDefault() -- -141.1987, -620.913, 168.8205 (Arcadius Business Centre)
|
||||||
|
FinanceOffice2.LoadDefault() -- -75.8466, -826.9893, 243.3859 (Maze Bank Building)
|
||||||
|
FinanceOffice3.LoadDefault() -- -1579.756, -565.0661, 108.523 (Lom Bank)
|
||||||
|
FinanceOffice4.LoadDefault() -- -1392.667, -480.4736, 72.04217 (Maze Bank West)
|
||||||
|
|
||||||
|
-- ====================================================================
|
||||||
|
-- =-------------------------- [DLC: Bikers] -------------------------=
|
||||||
|
-- ====================================================================
|
||||||
|
BikerCocaine.LoadDefault() -- Cocaine lockup: 1093.6, -3196.6, -38.99841
|
||||||
|
BikerCounterfeit.LoadDefault() -- Counterfeit cash factory: 1121.897, -3195.338, -40.4025
|
||||||
|
BikerDocumentForgery.LoadDefault() -- Document forgery: 1165, -3196.6, -39.01306
|
||||||
|
BikerMethLab.LoadDefault() -- Meth lab: 1009.5, -3196.6, -38.99682
|
||||||
|
BikerWeedFarm.LoadDefault() -- Weed farm: 1051.491, -3196.536, -39.14842
|
||||||
|
BikerClubhouse1.LoadDefault() -- 1107.04, -3157.399, -37.51859
|
||||||
|
BikerClubhouse2.LoadDefault() -- 998.4809, -3164.711, -38.90733
|
||||||
|
|
||||||
|
-- ====================================================================
|
||||||
|
-- =---------------------- [DLC: Import/Export] ----------------------=
|
||||||
|
-- ====================================================================
|
||||||
|
ImportCEOGarage1.LoadDefault() -- Arcadius Business Centre
|
||||||
|
ImportCEOGarage2.LoadDefault() -- Maze Bank Building /!\ Do not load parts Garage1, Garage2 and Garage3 at the same time (overlaping issues)
|
||||||
|
ImportCEOGarage3.LoadDefault() -- Lom Bank /!\ Do not load parts Garage1, Garage2 and Garage3 at the same time (overlaping issues)
|
||||||
|
ImportCEOGarage4.LoadDefault() -- Maze Bank West /!\ Do not load parts Garage1, Garage2 and Garage3 at the same time (overlaping issues)
|
||||||
|
ImportVehicleWarehouse.LoadDefault() -- Vehicle warehouse: 994.5925, -3002.594, -39.64699
|
||||||
|
|
||||||
|
-- ====================================================================
|
||||||
|
-- =------------------------ [DLC: Gunrunning] -----------------------=
|
||||||
|
-- ====================================================================
|
||||||
|
GunrunningBunker.LoadDefault() -- 892.6384, -3245.8664, -98.2645
|
||||||
|
GunrunningYacht.LoadDefault() -- -1363.724, 6734.108, 2.44598
|
||||||
|
|
||||||
|
-- ====================================================================
|
||||||
|
-- =---------------------- [DLC: Smuggler's Run] ---------------------=
|
||||||
|
-- ====================================================================
|
||||||
|
SmugglerHangar.LoadDefault() -- -1267.0 -3013.135 -49.5
|
||||||
|
|
||||||
|
-- ====================================================================
|
||||||
|
-- =-------------------- [DLC: The Doomsday Heist] -------------------=
|
||||||
|
-- ====================================================================
|
||||||
|
DoomsdayFacility.LoadDefault()
|
||||||
|
|
||||||
|
-- ====================================================================
|
||||||
|
-- =----------------------- [DLC: After Hours] -----------------------=
|
||||||
|
-- ====================================================================
|
||||||
|
AfterHoursNightclubs.LoadDefault() -- -1604.664, -3012.583, -78.000
|
||||||
|
|
||||||
|
-- ====================================================================
|
||||||
|
-- =------------------- [DLC: Diamond Casino Resort] -----------------=
|
||||||
|
-- ====================================================================
|
||||||
|
if GetGameBuildNumber() >= 2060 then
|
||||||
|
DiamondCasino.LoadDefault() -- 1100.000, 220.000, -50.000
|
||||||
|
DiamondPenthouse.LoadDefault() -- 976.636, 70.295, 115.164
|
||||||
|
end
|
||||||
|
|
||||||
|
-- ====================================================================
|
||||||
|
-- =-------------------- [DLC: Cayo Perico Heist] --------------------=
|
||||||
|
-- ====================================================================
|
||||||
|
if GetGameBuildNumber() >= 2189 then
|
||||||
|
CayoPericoNightclub.LoadDefault() -- 1550.0, 250.0, -50.0
|
||||||
|
CayoPericoSubmarine.LoadDefault() -- 1560.0, 400.0, -50.0
|
||||||
|
end
|
||||||
|
|
||||||
|
-- ====================================================================
|
||||||
|
-- =------------------- [DLC: Los Santos Tuners] ---------------------=
|
||||||
|
-- ====================================================================
|
||||||
|
if GetGameBuildNumber() >= 2372 then
|
||||||
|
TunerGarage.LoadDefault() -- -1350.0, 160.0, -100.0
|
||||||
|
TunerMethLab.LoadDefault() -- 981.9999, -143.0, -50.0
|
||||||
|
TunerMeetup.LoadDefault() -- -2000.0, 1113.211, -25.36243
|
||||||
|
end
|
||||||
|
|
||||||
|
-- ====================================================================
|
||||||
|
-- =------------------- [DLC: Los Santos The Contract] ---------------------=
|
||||||
|
-- ====================================================================
|
||||||
|
if GetGameBuildNumber() >= 2545 then
|
||||||
|
MpSecurityGarage.LoadDefault() -- -1071.4387, -77.033875, -93.525505
|
||||||
|
MpSecurityMusicRoofTop.LoadDefault() -- -592.6896, 273.1052, 116.302444
|
||||||
|
MpSecurityStudio.LoadDefault() -- -1000.7252, -70.559875, -98.10669
|
||||||
|
MpSecurityBillboards.LoadDefault() -- -592.6896, 273.1052, 116.302444
|
||||||
|
MpSecurityOffice1.LoadDefault() -- -1021.86084, -427.74564, 68.95764
|
||||||
|
MpSecurityOffice2.LoadDefault() -- 383.4156, -59.878227, 108.4595
|
||||||
|
MpSecurityOffice3.LoadDefault() -- -1004.23035, -761.2084, 66.99069
|
||||||
|
MpSecurityOffice4.LoadDefault() -- -587.87213, -716.84937, 118.10156
|
||||||
|
end
|
||||||
|
|
||||||
|
-- ====================================================================
|
||||||
|
-- =------------------- [DLC: The Criminal Enterprise] ---------------------=
|
||||||
|
-- ====================================================================
|
||||||
|
if GetGameBuildNumber() >= 2699 then
|
||||||
|
CriminalEnterpriseSmeonFix.LoadDefault() -- -50.2248, -1098.8325, 26.049742
|
||||||
|
CriminalEnterpriseVehicleWarehouse.LoadDefault() -- 800.13696, -3001.4297, -65.14074
|
||||||
|
CriminalEnterpriseWarehouse.LoadDefault() -- 849.1047, -3000.209, -45.974354
|
||||||
|
end
|
||||||
|
|
||||||
|
-- ====================================================================
|
||||||
|
-- =------------------- [DLC: Los Santos Drug Wars] ------------------=
|
||||||
|
-- ====================================================================
|
||||||
|
if GetGameBuildNumber() >= 2802 then
|
||||||
|
DrugWarsFreakshop.LoadDefault() -- 570.9713, -420.0727, -70.000
|
||||||
|
DrugWarsGarage.LoadDefault() -- 519.2477, -2618.788, -50.000
|
||||||
|
DrugWarsLab.LoadDefault() -- 483.4252, -2625.071, -50.000
|
||||||
|
end
|
||||||
|
|
||||||
|
-- ====================================================================
|
||||||
|
-- =------------------- [DLC: San Andreas Mercenaries] ---------------=
|
||||||
|
-- ====================================================================
|
||||||
|
if GetGameBuildNumber() >= 2944 then
|
||||||
|
MercenariesClub.LoadDefault() -- 1202.407, -3251.251, -50.000
|
||||||
|
MercenariesLab.LoadDefault() -- -1916.119, 3749.719, -100.000
|
||||||
|
MercenariesFixes.LoadDefault()
|
||||||
|
end
|
||||||
|
|
||||||
|
-- ====================================================================
|
||||||
|
-- =------------------- [DLC: The Chop Shop] -------------------------=
|
||||||
|
-- ====================================================================
|
||||||
|
if GetGameBuildNumber() >= 3095 then
|
||||||
|
ChopShopCargoShip.LoadDefault() -- -344.4349, -4062.832, 17.000
|
||||||
|
ChopShopCartelGarage.LoadDefault() -- 1220.133, -2277.844, -50.000
|
||||||
|
ChopShopLifeguard.LoadDefault() -- -1488.153, -1021.166, 5.000
|
||||||
|
ChopShopSalvage.LoadDefault() -- 1077.276, -2274.876, -50.000
|
||||||
|
end
|
||||||
|
|
||||||
|
-- ====================================================================
|
||||||
|
-- =------------------ [DLC: Bottom Dollar Bounties] -----------------=
|
||||||
|
-- ====================================================================
|
||||||
|
if GetGameBuildNumber() >= 3258 then
|
||||||
|
SummerCarrier.LoadDefault() -- -3208.03, 3954.54, 14.0
|
||||||
|
SummerOffice.LoadDefault() -- 565.886, -2688.761, -50.0
|
||||||
|
end
|
||||||
|
end)
|
||||||
703
resources/[core]/bob74_ipl/dlc_afterhours/nightclubs.lua
Normal file
703
resources/[core]/bob74_ipl/dlc_afterhours/nightclubs.lua
Normal file
@ -0,0 +1,703 @@
|
|||||||
|
-- Nightclub: -1604.664 -3012.583 -78.000
|
||||||
|
exports('GetAfterHoursNightclubsObject', function()
|
||||||
|
return AfterHoursNightclubs
|
||||||
|
end)
|
||||||
|
|
||||||
|
AfterHoursNightclubs = {
|
||||||
|
interiorId = 271617,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Interior = {
|
||||||
|
ipl = "ba_int_placement_ba_interior_0_dlc_int_01_ba_milo_",
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(AfterHoursNightclubs.Ipl.Interior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(AfterHoursNightclubs.Ipl.Interior.ipl, false)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
Interior = {
|
||||||
|
Name = {
|
||||||
|
galaxy = "Int01_ba_clubname_01",
|
||||||
|
studio = "Int01_ba_clubname_02",
|
||||||
|
omega = "Int01_ba_clubname_03",
|
||||||
|
technologie = "Int01_ba_clubname_04",
|
||||||
|
gefangnis = "Int01_ba_clubname_05",
|
||||||
|
maisonette = "Int01_ba_clubname_06",
|
||||||
|
tony = "Int01_ba_clubname_07",
|
||||||
|
palace = "Int01_ba_clubname_08",
|
||||||
|
paradise = "Int01_ba_clubname_09",
|
||||||
|
|
||||||
|
Set = function(name, refresh)
|
||||||
|
AfterHoursNightclubs.Interior.Name.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(AfterHoursNightclubs.interiorId, name, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
for key, value in pairs(AfterHoursNightclubs.Interior.Name) do
|
||||||
|
if type(value) == "string" then
|
||||||
|
SetIplPropState(AfterHoursNightclubs.interiorId, value, false, refresh)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Style = {
|
||||||
|
trad = "Int01_ba_Style01",
|
||||||
|
edgy = "Int01_ba_Style02",
|
||||||
|
glam = "Int01_ba_Style03",
|
||||||
|
|
||||||
|
Set = function(style, refresh)
|
||||||
|
AfterHoursNightclubs.Interior.Style.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(AfterHoursNightclubs.interiorId, style, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
for key, value in pairs(AfterHoursNightclubs.Interior.Style) do
|
||||||
|
if type(value) == "string" then
|
||||||
|
SetIplPropState(AfterHoursNightclubs.interiorId, value, false, refresh)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Podium = {
|
||||||
|
none = "",
|
||||||
|
trad = "Int01_ba_style01_podium",
|
||||||
|
edgy = "Int01_ba_style02_podium",
|
||||||
|
glam = "Int01_ba_style03_podium",
|
||||||
|
|
||||||
|
Set = function(podium, refresh)
|
||||||
|
AfterHoursNightclubs.Interior.Podium.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(AfterHoursNightclubs.interiorId, podium, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
for key, value in pairs(AfterHoursNightclubs.Interior.Podium) do
|
||||||
|
if type(value) == "string" then
|
||||||
|
SetIplPropState(AfterHoursNightclubs.interiorId, value, false, refresh)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Speakers = {
|
||||||
|
none = "",
|
||||||
|
basic = "Int01_ba_equipment_setup",
|
||||||
|
upgrade = {
|
||||||
|
"Int01_ba_equipment_setup",
|
||||||
|
"Int01_ba_equipment_upgrade"
|
||||||
|
},
|
||||||
|
|
||||||
|
Set = function(speakers, refresh)
|
||||||
|
AfterHoursNightclubs.Interior.Speakers.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(AfterHoursNightclubs.interiorId, speakers, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
for key, value in pairs(AfterHoursNightclubs.Interior.Speakers) do
|
||||||
|
if type(value) == "string" then
|
||||||
|
SetIplPropState(AfterHoursNightclubs.interiorId, value, false, refresh)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Security = {
|
||||||
|
off = "",
|
||||||
|
on = "Int01_ba_security_upgrade",
|
||||||
|
|
||||||
|
Set = function(security, refresh)
|
||||||
|
AfterHoursNightclubs.Interior.Security.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(AfterHoursNightclubs.interiorId, security, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(AfterHoursNightclubs.interiorId, AfterHoursNightclubs.Interior.Security.on, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Turntables = {
|
||||||
|
none = "",
|
||||||
|
style01 = "Int01_ba_dj01",
|
||||||
|
style02 = "Int01_ba_dj02",
|
||||||
|
style03 = "Int01_ba_dj03",
|
||||||
|
style04 = "Int01_ba_dj04",
|
||||||
|
|
||||||
|
Set = function(turntables, refresh)
|
||||||
|
AfterHoursNightclubs.Interior.Turntables.Clear(false)
|
||||||
|
|
||||||
|
if turntables ~= "" then
|
||||||
|
SetIplPropState(AfterHoursNightclubs.interiorId, turntables, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(AfterHoursNightclubs.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
for key, value in pairs(AfterHoursNightclubs.Interior.Turntables) do
|
||||||
|
if type(value) == "string" then
|
||||||
|
SetIplPropState(AfterHoursNightclubs.interiorId, value, false, refresh)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Lights = {
|
||||||
|
Droplets = {
|
||||||
|
yellow = "DJ_01_Lights_01",
|
||||||
|
green = "DJ_02_Lights_01",
|
||||||
|
white = "DJ_03_Lights_01",
|
||||||
|
purple = "DJ_04_Lights_01",
|
||||||
|
|
||||||
|
Set = function(light, refresh)
|
||||||
|
AfterHoursNightclubs.Interior.Lights.Droplets.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(AfterHoursNightclubs.interiorId, light, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
for key, value in pairs(AfterHoursNightclubs.Interior.Lights.Droplets) do
|
||||||
|
if type(value) == "string" then
|
||||||
|
SetIplPropState(AfterHoursNightclubs.interiorId, value, false, refresh)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Neons = {
|
||||||
|
yellow = "DJ_01_Lights_02",
|
||||||
|
white = "DJ_02_Lights_02",
|
||||||
|
purple = "DJ_03_Lights_02",
|
||||||
|
cyan = "DJ_04_Lights_02",
|
||||||
|
|
||||||
|
Set = function(light, refresh)
|
||||||
|
AfterHoursNightclubs.Interior.Lights.Neons.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(AfterHoursNightclubs.interiorId, light, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
for key, value in pairs(AfterHoursNightclubs.Interior.Lights.Neons) do
|
||||||
|
if type(value) == "string" then
|
||||||
|
SetIplPropState(AfterHoursNightclubs.interiorId, value, false, refresh)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Bands = {
|
||||||
|
yellow = "DJ_01_Lights_03",
|
||||||
|
green = "DJ_02_Lights_03",
|
||||||
|
white = "DJ_03_Lights_03",
|
||||||
|
cyan = "DJ_04_Lights_03",
|
||||||
|
|
||||||
|
Set = function(light, refresh)
|
||||||
|
AfterHoursNightclubs.Interior.Lights.Bands.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(AfterHoursNightclubs.interiorId, light, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
for key, value in pairs(AfterHoursNightclubs.Interior.Lights.Bands) do
|
||||||
|
if type(value) == "string" then
|
||||||
|
SetIplPropState(AfterHoursNightclubs.interiorId, value, false, refresh)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Lasers = {
|
||||||
|
yellow = "DJ_01_Lights_04",
|
||||||
|
green = "DJ_02_Lights_04",
|
||||||
|
white = "DJ_03_Lights_04",
|
||||||
|
purple = "DJ_04_Lights_04",
|
||||||
|
|
||||||
|
Set = function(light, refresh)
|
||||||
|
AfterHoursNightclubs.Interior.Lights.Lasers.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(AfterHoursNightclubs.interiorId, light, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
for key, value in pairs(AfterHoursNightclubs.Interior.Lights.Lasers) do
|
||||||
|
if type(value) == "string" then
|
||||||
|
SetIplPropState(AfterHoursNightclubs.interiorId, value, false, refresh)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Clear = function()
|
||||||
|
AfterHoursNightclubs.Interior.Lights.Droplets.Clear()
|
||||||
|
AfterHoursNightclubs.Interior.Lights.Neons.Clear()
|
||||||
|
AfterHoursNightclubs.Interior.Lights.Bands.Clear()
|
||||||
|
AfterHoursNightclubs.Interior.Lights.Lasers.Clear()
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Bar = {
|
||||||
|
Enable = function(state, refresh)
|
||||||
|
SetIplPropState(AfterHoursNightclubs.interiorId, "Int01_ba_bar_content", state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Booze = {
|
||||||
|
A = "Int01_ba_booze_01",
|
||||||
|
B = "Int01_ba_booze_02",
|
||||||
|
C = "Int01_ba_booze_03",
|
||||||
|
|
||||||
|
Enable = function(booze, state, refresh)
|
||||||
|
if type(booze) == "table" then
|
||||||
|
for key, value in pairs(booze) do
|
||||||
|
if type(value) == "string" then
|
||||||
|
SetIplPropState(AfterHoursNightclubs.interiorId, booze, state, refresh)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
SetIplPropState(AfterHoursNightclubs.interiorId, booze, state, refresh)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Trophy = {
|
||||||
|
Color = {
|
||||||
|
bronze = 0,
|
||||||
|
silver = 1,
|
||||||
|
gold = 2
|
||||||
|
},
|
||||||
|
number1 = "Int01_ba_trophy01",
|
||||||
|
battler = "Int01_ba_trophy02",
|
||||||
|
dancer = "Int01_ba_trophy03",
|
||||||
|
|
||||||
|
Enable = function(trophy, state, color, refresh)
|
||||||
|
SetIplPropState(AfterHoursNightclubs.interiorId, trophy, state, refresh)
|
||||||
|
SetInteriorEntitySetColor(AfterHoursNightclubs.interiorId, trophy, color)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
DryIce = {
|
||||||
|
scale = 5.0,
|
||||||
|
Emitters = {
|
||||||
|
{
|
||||||
|
pos = vector3(-1602.932, -3019.1, -79.99),
|
||||||
|
rot = vector3(0.0, -10.0, 66.0)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
pos = vector3(-1593.238, -3017.05, -79.99),
|
||||||
|
rot = vector3(0.0, -10.0, 110.0)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
pos = vector3(-1597.134, -3008.2, -79.99),
|
||||||
|
rot = vector3(0.0, -10.0, -122.53)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
pos = vector3(-1589.966, -3008.518, -79.99),
|
||||||
|
rot = vector3(0.0, -10.0, -166.97)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
Enable = function(state)
|
||||||
|
if state then
|
||||||
|
RequestNamedPtfxAsset("scr_ba_club")
|
||||||
|
while not HasNamedPtfxAssetLoaded("scr_ba_club") do
|
||||||
|
Wait(0)
|
||||||
|
end
|
||||||
|
|
||||||
|
for key, emitter in pairs(AfterHoursNightclubs.Interior.DryIce.Emitters) do
|
||||||
|
UseParticleFxAsset("scr_ba_club")
|
||||||
|
StartParticleFxLoopedAtCoord("scr_ba_club_smoke_machine", emitter.pos.x, emitter.pos.y, emitter.pos.z, emitter.rot.x, emitter.rot.y, emitter.rot.z, AfterHoursNightclubs.Interior.DryIce.scale, false, false, false, true)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
local radius = 1.0
|
||||||
|
|
||||||
|
for key, emitter in pairs(AfterHoursNightclubs.Interior.DryIce.Emitters) do
|
||||||
|
RemoveParticleFxInRange(emitter.pos.x, emitter.pos.y, emitter.pos.z, radius)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
Details = {
|
||||||
|
clutter = "Int01_ba_Clutter", -- Clutter and graffitis
|
||||||
|
worklamps = "Int01_ba_Worklamps", -- Work lamps + trash
|
||||||
|
truck = "Int01_ba_deliverytruck", -- Truck parked in the garage
|
||||||
|
dryIce = "Int01_ba_dry_ice", -- Dry ice machines (no effects)
|
||||||
|
lightRigsOff = "light_rigs_off", -- All light rigs at once but turned off
|
||||||
|
roofLightsOff = "Int01_ba_lightgrid_01", -- Fake lights
|
||||||
|
floorTradLights = "Int01_ba_trad_lights", -- Floor lights meant to go with the trad style
|
||||||
|
chest = "Int01_ba_trophy04", -- Chest on the VIP desk
|
||||||
|
vaultAmmunations = "Int01_ba_trophy05", -- (inside vault) Ammunations
|
||||||
|
vaultMeth = "Int01_ba_trophy07", -- (inside vault) Meth bag
|
||||||
|
vaultFakeID = "Int01_ba_trophy08", -- (inside vault) Fake ID
|
||||||
|
vaultWeed = "Int01_ba_trophy09", -- (inside vault) Opened weed bag
|
||||||
|
vaultCoke = "Int01_ba_trophy10", -- (inside vault) Coke doll
|
||||||
|
vaultCash = "Int01_ba_trophy11", -- (inside vault) Scrunched fake money
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(AfterHoursNightclubs.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
-- 760, -1337, 27
|
||||||
|
Mesa = {
|
||||||
|
id = 0,
|
||||||
|
|
||||||
|
Barrier = {
|
||||||
|
Enable = function(state)
|
||||||
|
if state == nil then
|
||||||
|
state = true
|
||||||
|
end
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Barrier.Enable(AfterHoursNightclubs.Mesa.id, state)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Posters = {
|
||||||
|
Enable = function(poster, state)
|
||||||
|
if state == nil then
|
||||||
|
state = true
|
||||||
|
end
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Posters.Enable(AfterHoursNightclubs.Mesa.id, poster, state)
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
AfterHoursNightclubs.Posters.Clear(AfterHoursNightclubs.Mesa.id)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
-- 348, -979, 30
|
||||||
|
MissionRow = {
|
||||||
|
id = 1,
|
||||||
|
|
||||||
|
Barrier = {
|
||||||
|
Enable = function(state)
|
||||||
|
if state == nil then
|
||||||
|
state = true
|
||||||
|
end
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Barrier.Enable(AfterHoursNightclubs.MissionRow.id, state)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Posters = {
|
||||||
|
Enable = function(poster, state)
|
||||||
|
if state == nil then
|
||||||
|
state = true
|
||||||
|
end
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Posters.Enable(AfterHoursNightclubs.MissionRow.id, poster, state)
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
AfterHoursNightclubs.Posters.Clear(AfterHoursNightclubs.MissionRow.id)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
-- -118, -1260, 30
|
||||||
|
Strawberry = {
|
||||||
|
id = 2,
|
||||||
|
|
||||||
|
Barrier = {
|
||||||
|
Enable = function(state)
|
||||||
|
if state == nil then
|
||||||
|
state = true
|
||||||
|
end
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Barrier.Enable(AfterHoursNightclubs.Strawberry.id, state)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Posters = {
|
||||||
|
Enable = function(poster, state)
|
||||||
|
if state == nil then
|
||||||
|
state = true
|
||||||
|
end
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Posters.Enable(AfterHoursNightclubs.Strawberry.id, poster, state)
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
AfterHoursNightclubs.Posters.Clear(AfterHoursNightclubs.Strawberry.id)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
-- 9, 221, 109
|
||||||
|
VinewoodWest = {
|
||||||
|
id = 3,
|
||||||
|
|
||||||
|
Barrier = {
|
||||||
|
Enable = function(state)
|
||||||
|
if state == nil then
|
||||||
|
state = true
|
||||||
|
end
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Barrier.Enable(AfterHoursNightclubs.VinewoodWest.id, state)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Posters = {
|
||||||
|
Enable = function(poster, state)
|
||||||
|
if state == nil then
|
||||||
|
state = true
|
||||||
|
end
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Posters.Enable(AfterHoursNightclubs.VinewoodWest.id, poster, state)
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
AfterHoursNightclubs.Posters.Clear(AfterHoursNightclubs.VinewoodWest.id)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
-- 868, -2098, 31
|
||||||
|
Cypress = {
|
||||||
|
id = 4,
|
||||||
|
|
||||||
|
Barrier = {
|
||||||
|
Enable = function(state)
|
||||||
|
if state == nil then
|
||||||
|
state = true
|
||||||
|
end
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Barrier.Enable(AfterHoursNightclubs.Cypress.id, state)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Posters = {
|
||||||
|
Enable = function(poster, state)
|
||||||
|
if state == nil then
|
||||||
|
state = true
|
||||||
|
end
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Posters.Enable(AfterHoursNightclubs.Cypress.id, poster, state)
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
AfterHoursNightclubs.Posters.Clear(AfterHoursNightclubs.Cypress.id)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
-- -1287, -647, 27
|
||||||
|
DelPerro = {
|
||||||
|
id = 5,
|
||||||
|
|
||||||
|
Barrier = {
|
||||||
|
Enable = function(state)
|
||||||
|
if state == nil then
|
||||||
|
state = true
|
||||||
|
end
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Barrier.Enable(AfterHoursNightclubs.DelPerro.id, state)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Posters = {
|
||||||
|
Enable = function(poster, state)
|
||||||
|
if state == nil then
|
||||||
|
state = true
|
||||||
|
end
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Posters.Enable(AfterHoursNightclubs.DelPerro.id, poster, state)
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
AfterHoursNightclubs.Posters.Clear(AfterHoursNightclubs.DelPerro.id)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
-- -680, -2461, 14
|
||||||
|
Airport = {
|
||||||
|
id = 6,
|
||||||
|
|
||||||
|
Barrier = {
|
||||||
|
Enable = function(state)
|
||||||
|
if state == nil then
|
||||||
|
state = true
|
||||||
|
end
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Barrier.Enable(AfterHoursNightclubs.Airport.id, state)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Posters = {
|
||||||
|
Enable = function(poster, state)
|
||||||
|
if state == nil then
|
||||||
|
state = true
|
||||||
|
end
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Posters.Enable(AfterHoursNightclubs.Airport.id, poster, state)
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
AfterHoursNightclubs.Posters.Clear(AfterHoursNightclubs.Airport.id)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
-- 192, -3168, 6
|
||||||
|
Elysian = {
|
||||||
|
id = 7,
|
||||||
|
|
||||||
|
Barrier = {
|
||||||
|
Enable = function(state)
|
||||||
|
if state == nil then
|
||||||
|
state = true
|
||||||
|
end
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Barrier.Enable(AfterHoursNightclubs.Elysian.id, state)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Posters = {
|
||||||
|
Enable = function(poster, state)
|
||||||
|
if state == nil then
|
||||||
|
state = true
|
||||||
|
end
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Posters.Enable(AfterHoursNightclubs.Elysian.id, poster, state)
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
AfterHoursNightclubs.Posters.Clear(AfterHoursNightclubs.Elysian.id)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
-- 373, 254, 103
|
||||||
|
Vinewood = {
|
||||||
|
id = 8,
|
||||||
|
|
||||||
|
Barrier = {
|
||||||
|
Enable = function(state)
|
||||||
|
if state == nil then
|
||||||
|
state = true
|
||||||
|
end
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Barrier.Enable(AfterHoursNightclubs.Vinewood.id, state)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Posters = {
|
||||||
|
Enable = function(poster, state)
|
||||||
|
if state == nil then
|
||||||
|
state = true
|
||||||
|
end
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Posters.Enable(AfterHoursNightclubs.Vinewood.id, poster, state)
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
AfterHoursNightclubs.Posters.Clear(AfterHoursNightclubs.Vinewood.id)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
-- -1171, -1150, 6
|
||||||
|
Vespucci = {
|
||||||
|
id = 9,
|
||||||
|
Barrier = {
|
||||||
|
Enable = function(state)
|
||||||
|
if state == nil then
|
||||||
|
state = true
|
||||||
|
end
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Barrier.Enable(AfterHoursNightclubs.Vespucci.id, state)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Posters = {
|
||||||
|
Enable = function(poster, state)
|
||||||
|
if state == nil then
|
||||||
|
state = true
|
||||||
|
end
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Posters.Enable(AfterHoursNightclubs.Vespucci.id, poster, state)
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
AfterHoursNightclubs.Posters.Clear(AfterHoursNightclubs.Vespucci.id)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
Barrier = {
|
||||||
|
barrier = "ba_barriers_caseX",
|
||||||
|
|
||||||
|
Enable = function(clubId, state)
|
||||||
|
value = AfterHoursNightclubs.Barrier.barrier:gsub("caseX", "case" .. tostring(clubId))
|
||||||
|
|
||||||
|
EnableIpl(value, state)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Posters = {
|
||||||
|
forSale = "ba_caseX_forsale",
|
||||||
|
dixon = "ba_caseX_dixon",
|
||||||
|
madonna = "ba_caseX_madonna",
|
||||||
|
solomun = "ba_caseX_solomun",
|
||||||
|
taleOfUs = "ba_caseX_taleofus",
|
||||||
|
|
||||||
|
Enable = function(clubId, poster, state)
|
||||||
|
if type(poster) == "table" then
|
||||||
|
for key, value in pairs(poster) do
|
||||||
|
if type(value) == "string" then
|
||||||
|
value = value:gsub("caseX", "case" .. tostring(clubId))
|
||||||
|
|
||||||
|
EnableIpl(value, state)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
poster = poster:gsub("caseX", "case" .. tostring(clubId))
|
||||||
|
|
||||||
|
EnableIpl(poster, state)
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(clubId)
|
||||||
|
for key, value in pairs(AfterHoursNightclubs.Posters) do
|
||||||
|
if type(value) == "string" then
|
||||||
|
value = value:gsub("caseX", "case" .. tostring(clubId))
|
||||||
|
|
||||||
|
EnableIpl(value, false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
-- Interior setup
|
||||||
|
AfterHoursNightclubs.Ipl.Interior.Load()
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Interior.Name.Set(AfterHoursNightclubs.Interior.Name.galaxy)
|
||||||
|
AfterHoursNightclubs.Interior.Style.Set(AfterHoursNightclubs.Interior.Style.edgy)
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Interior.Podium.Set(AfterHoursNightclubs.Interior.Podium.edgy)
|
||||||
|
AfterHoursNightclubs.Interior.Speakers.Set(AfterHoursNightclubs.Interior.Speakers.upgrade)
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Interior.Security.Set(AfterHoursNightclubs.Interior.Security.on)
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Interior.Turntables.Set(AfterHoursNightclubs.Interior.Turntables.style01)
|
||||||
|
AfterHoursNightclubs.Interior.Lights.Bands.Set(AfterHoursNightclubs.Interior.Lights.Bands.cyan)
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Interior.Bar.Enable(true)
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Interior.Booze.Enable(AfterHoursNightclubs.Interior.Booze, true)
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Interior.Trophy.Enable(AfterHoursNightclubs.Interior.Trophy.number1, true, AfterHoursNightclubs.Interior.Trophy.Color.gold)
|
||||||
|
|
||||||
|
RefreshInterior(AfterHoursNightclubs.interiorId)
|
||||||
|
|
||||||
|
-- Exterior IPL
|
||||||
|
AfterHoursNightclubs.Mesa.Barrier.Enable(true)
|
||||||
|
AfterHoursNightclubs.Mesa.Posters.Enable(AfterHoursNightclubs.Posters, true)
|
||||||
|
AfterHoursNightclubs.Mesa.Posters.Enable(AfterHoursNightclubs.Posters.forSale, false)
|
||||||
|
|
||||||
|
AfterHoursNightclubs.MissionRow.Barrier.Enable(true)
|
||||||
|
AfterHoursNightclubs.MissionRow.Posters.Enable(AfterHoursNightclubs.Posters, true)
|
||||||
|
AfterHoursNightclubs.MissionRow.Posters.Enable(AfterHoursNightclubs.Posters.forSale, false)
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Strawberry.Barrier.Enable(true)
|
||||||
|
AfterHoursNightclubs.Strawberry.Posters.Enable(AfterHoursNightclubs.Posters, true)
|
||||||
|
AfterHoursNightclubs.Strawberry.Posters.Enable(AfterHoursNightclubs.Posters.forSale, false)
|
||||||
|
|
||||||
|
AfterHoursNightclubs.VinewoodWest.Barrier.Enable(true)
|
||||||
|
AfterHoursNightclubs.VinewoodWest.Posters.Enable(AfterHoursNightclubs.Posters, true)
|
||||||
|
AfterHoursNightclubs.VinewoodWest.Posters.Enable(AfterHoursNightclubs.Posters.forSale, false)
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Cypress.Barrier.Enable(true)
|
||||||
|
AfterHoursNightclubs.Cypress.Posters.Enable(AfterHoursNightclubs.Posters, true)
|
||||||
|
AfterHoursNightclubs.Cypress.Posters.Enable(AfterHoursNightclubs.Posters.forSale, false)
|
||||||
|
|
||||||
|
AfterHoursNightclubs.DelPerro.Barrier.Enable(true)
|
||||||
|
AfterHoursNightclubs.DelPerro.Posters.Enable(AfterHoursNightclubs.Posters, true)
|
||||||
|
AfterHoursNightclubs.DelPerro.Posters.Enable(AfterHoursNightclubs.Posters.forSale, false)
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Airport.Barrier.Enable(true)
|
||||||
|
AfterHoursNightclubs.Airport.Posters.Enable(AfterHoursNightclubs.Posters, true)
|
||||||
|
AfterHoursNightclubs.Airport.Posters.Enable(AfterHoursNightclubs.Posters.forSale, false)
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Elysian.Barrier.Enable(true)
|
||||||
|
AfterHoursNightclubs.Elysian.Posters.Enable(AfterHoursNightclubs.Posters, true)
|
||||||
|
AfterHoursNightclubs.Elysian.Posters.Enable(AfterHoursNightclubs.Posters.forSale, false)
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Vinewood.Barrier.Enable(true)
|
||||||
|
AfterHoursNightclubs.Vinewood.Posters.Enable(AfterHoursNightclubs.Posters, true)
|
||||||
|
AfterHoursNightclubs.Vinewood.Posters.Enable(AfterHoursNightclubs.Posters.forSale, false)
|
||||||
|
|
||||||
|
AfterHoursNightclubs.Vespucci.Barrier.Enable(true)
|
||||||
|
AfterHoursNightclubs.Vespucci.Posters.Enable(AfterHoursNightclubs.Posters, true)
|
||||||
|
AfterHoursNightclubs.Vespucci.Posters.Enable(AfterHoursNightclubs.Posters.forSale, false)
|
||||||
|
end
|
||||||
|
}
|
||||||
388
resources/[core]/bob74_ipl/dlc_bikers/clubhouse1.lua
Normal file
388
resources/[core]/bob74_ipl/dlc_bikers/clubhouse1.lua
Normal file
@ -0,0 +1,388 @@
|
|||||||
|
-- Clubhouse1: 1107.04, -3157.399, -37.51859
|
||||||
|
exports('GetBikerClubhouse1Object', function()
|
||||||
|
return BikerClubhouse1
|
||||||
|
end)
|
||||||
|
|
||||||
|
BikerClubhouse1 = {
|
||||||
|
interiorId = 246273,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Interior = {
|
||||||
|
ipl = "bkr_biker_interior_placement_interior_0_biker_dlc_int_01_milo",
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(BikerClubhouse1.Ipl.Interior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(BikerClubhouse1.Ipl.Interior.ipl, false)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Walls = {
|
||||||
|
brick = "walls_01",
|
||||||
|
plain = "walls_02",
|
||||||
|
Color = {
|
||||||
|
sable = 0,
|
||||||
|
yellowGray = 1,
|
||||||
|
red = 2,
|
||||||
|
brown = 3,
|
||||||
|
yellow = 4,
|
||||||
|
lightYellow = 5,
|
||||||
|
lightYellowGray = 6,
|
||||||
|
lightGray = 7,
|
||||||
|
orange = 8,
|
||||||
|
gray = 9
|
||||||
|
},
|
||||||
|
|
||||||
|
Set = function(walls, color, refresh)
|
||||||
|
if color == nil then
|
||||||
|
color = 0
|
||||||
|
end
|
||||||
|
|
||||||
|
BikerClubhouse1.Walls.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(BikerClubhouse1.interiorId, walls, true, refresh)
|
||||||
|
SetInteriorEntitySetColor(BikerClubhouse1.interiorId, walls, color)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerClubhouse1.interiorId, {
|
||||||
|
BikerClubhouse1.Walls.brick,
|
||||||
|
BikerClubhouse1.Walls.plain
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Furnitures = {
|
||||||
|
A = "furnishings_01",
|
||||||
|
B = "furnishings_02",
|
||||||
|
|
||||||
|
Set = function(furn, color, refresh)
|
||||||
|
if color == nil then
|
||||||
|
color = 0
|
||||||
|
end
|
||||||
|
|
||||||
|
BikerClubhouse1.Furnitures.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(BikerClubhouse1.interiorId, furn, true, refresh)
|
||||||
|
SetInteriorEntitySetColor(BikerClubhouse1.interiorId, furn, color)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerClubhouse1.interiorId, {
|
||||||
|
BikerClubhouse1.Furnitures.A,
|
||||||
|
BikerClubhouse1.Furnitures.B
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Decoration = {
|
||||||
|
A = "decorative_01",
|
||||||
|
B = "decorative_02",
|
||||||
|
|
||||||
|
Set = function(deco, refresh)
|
||||||
|
BikerClubhouse1.Decoration.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(BikerClubhouse1.interiorId, deco, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerClubhouse1.interiorId, {
|
||||||
|
BikerClubhouse1.Decoration.A,
|
||||||
|
BikerClubhouse1.Decoration.B
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Mural = {
|
||||||
|
none = "",
|
||||||
|
rideFree = "mural_01",
|
||||||
|
mods = "mural_02",
|
||||||
|
brave = "mural_03",
|
||||||
|
fist = "mural_04",
|
||||||
|
forest = "mural_05",
|
||||||
|
mods2 = "mural_06",
|
||||||
|
rideForever = "mural_07",
|
||||||
|
heart = "mural_08",
|
||||||
|
route68 = "mural_09",
|
||||||
|
|
||||||
|
Set = function(mural, refresh)
|
||||||
|
BikerClubhouse1.Mural.Clear(false)
|
||||||
|
|
||||||
|
if mural ~= "" then
|
||||||
|
SetIplPropState(BikerClubhouse1.interiorId, mural, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(BikerClubhouse1.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerClubhouse1.interiorId, {
|
||||||
|
BikerClubhouse1.Mural.rideFree,
|
||||||
|
BikerClubhouse1.Mural.mods,
|
||||||
|
BikerClubhouse1.Mural.brave,
|
||||||
|
BikerClubhouse1.Mural.fist,
|
||||||
|
BikerClubhouse1.Mural.forest,
|
||||||
|
BikerClubhouse1.Mural.mods2,
|
||||||
|
BikerClubhouse1.Mural.rideForever,
|
||||||
|
BikerClubhouse1.Mural.heart,
|
||||||
|
BikerClubhouse1.Mural.route68
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
GunLocker = {
|
||||||
|
none = "",
|
||||||
|
on = "gun_locker",
|
||||||
|
off = "no_gun_locker",
|
||||||
|
|
||||||
|
Set = function(locker, refresh)
|
||||||
|
BikerClubhouse1.GunLocker.Clear(false)
|
||||||
|
|
||||||
|
if locker ~= "" then
|
||||||
|
SetIplPropState(BikerClubhouse1.interiorId, locker, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(BikerClubhouse1.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerClubhouse1.interiorId, {
|
||||||
|
BikerClubhouse1.GunLocker.on,
|
||||||
|
BikerClubhouse1.GunLocker.off
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
ModBooth = {
|
||||||
|
none = "",
|
||||||
|
on = "mod_booth",
|
||||||
|
off = "no_mod_booth",
|
||||||
|
|
||||||
|
Set = function(mod, refresh)
|
||||||
|
BikerClubhouse1.ModBooth.Clear(false)
|
||||||
|
|
||||||
|
if mod ~= "" then
|
||||||
|
SetIplPropState(BikerClubhouse1.interiorId, mod, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(BikerClubhouse1.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerClubhouse1.interiorId, {
|
||||||
|
BikerClubhouse1.ModBooth.on,
|
||||||
|
BikerClubhouse1.ModBooth.off
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Meth = {
|
||||||
|
none = "",
|
||||||
|
stage1 = "meth_stash1",
|
||||||
|
stage2 = {
|
||||||
|
"meth_stash1",
|
||||||
|
"meth_stash2"
|
||||||
|
},
|
||||||
|
stage3 = {
|
||||||
|
"meth_stash1",
|
||||||
|
"meth_stash2",
|
||||||
|
"meth_stash3"
|
||||||
|
},
|
||||||
|
|
||||||
|
Set = function(stage, refresh)
|
||||||
|
BikerClubhouse1.Meth.Clear(false)
|
||||||
|
|
||||||
|
if stage ~= "" then
|
||||||
|
SetIplPropState(BikerClubhouse1.interiorId, stage, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(BikerClubhouse1.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerClubhouse1.interiorId, {
|
||||||
|
BikerClubhouse1.Meth.stage1,
|
||||||
|
BikerClubhouse1.Meth.stage2,
|
||||||
|
BikerClubhouse1.Meth.stage3
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Cash = {
|
||||||
|
none = "",
|
||||||
|
stage1 = "cash_stash1",
|
||||||
|
stage2 = {
|
||||||
|
"cash_stash1",
|
||||||
|
"cash_stash2"
|
||||||
|
},
|
||||||
|
stage3 = {
|
||||||
|
"cash_stash1",
|
||||||
|
"cash_stash2",
|
||||||
|
"cash_stash3"
|
||||||
|
},
|
||||||
|
|
||||||
|
Set = function(stage, refresh)
|
||||||
|
BikerClubhouse1.Cash.Clear(false)
|
||||||
|
|
||||||
|
if stage ~= "" then
|
||||||
|
SetIplPropState(BikerClubhouse1.interiorId, stage, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(BikerClubhouse1.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerClubhouse1.interiorId, {
|
||||||
|
BikerClubhouse1.Cash.stage1,
|
||||||
|
BikerClubhouse1.Cash.stage2,
|
||||||
|
BikerClubhouse1.Cash.stage3
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Weed = {
|
||||||
|
none = "",
|
||||||
|
stage1 = "weed_stash1",
|
||||||
|
stage2 = {
|
||||||
|
"weed_stash1",
|
||||||
|
"weed_stash2"
|
||||||
|
},
|
||||||
|
stage3 = {
|
||||||
|
"weed_stash1",
|
||||||
|
"weed_stash2",
|
||||||
|
"weed_stash3"
|
||||||
|
},
|
||||||
|
|
||||||
|
Set = function(stage, refresh)
|
||||||
|
BikerClubhouse1.Weed.Clear(false)
|
||||||
|
|
||||||
|
if stage ~= "" then
|
||||||
|
SetIplPropState(BikerClubhouse1.interiorId, stage, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(BikerClubhouse1.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerClubhouse1.interiorId, {
|
||||||
|
BikerClubhouse1.Weed.stage1,
|
||||||
|
BikerClubhouse1.Weed.stage2,
|
||||||
|
BikerClubhouse1.Weed.stage3
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Coke = {
|
||||||
|
none = "",
|
||||||
|
stage1 = "coke_stash1",
|
||||||
|
stage2 = {
|
||||||
|
"coke_stash1",
|
||||||
|
"coke_stash2"
|
||||||
|
},
|
||||||
|
stage3 = {
|
||||||
|
"coke_stash1",
|
||||||
|
"coke_stash2",
|
||||||
|
"coke_stash3"
|
||||||
|
},
|
||||||
|
|
||||||
|
Set = function(stage, refresh)
|
||||||
|
BikerClubhouse1.Coke.Clear(false)
|
||||||
|
|
||||||
|
if stage ~= "" then
|
||||||
|
SetIplPropState(BikerClubhouse1.interiorId, stage, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(BikerClubhouse1.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerClubhouse1.interiorId, {
|
||||||
|
BikerClubhouse1.Coke.stage1,
|
||||||
|
BikerClubhouse1.Coke.stage2,
|
||||||
|
BikerClubhouse1.Coke.stage3
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Counterfeit = {
|
||||||
|
none = "",
|
||||||
|
stage1 = "counterfeit_stash1",
|
||||||
|
stage2 = {
|
||||||
|
"counterfeit_stash1",
|
||||||
|
"counterfeit_stash2"
|
||||||
|
},
|
||||||
|
stage3 = {
|
||||||
|
"counterfeit_stash1",
|
||||||
|
"counterfeit_stash2",
|
||||||
|
"counterfeit_stash3"
|
||||||
|
},
|
||||||
|
|
||||||
|
Set = function(stage, refresh)
|
||||||
|
BikerClubhouse1.Counterfeit.Clear(false)
|
||||||
|
|
||||||
|
if stage ~= "" then
|
||||||
|
SetIplPropState(BikerClubhouse1.interiorId, stage, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(BikerClubhouse1.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerClubhouse1.interiorId, {
|
||||||
|
BikerClubhouse1.Counterfeit.stage1,
|
||||||
|
BikerClubhouse1.Counterfeit.stage2,
|
||||||
|
BikerClubhouse1.Counterfeit.stage3
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Documents = {
|
||||||
|
none = "",
|
||||||
|
stage1 = "id_stash1",
|
||||||
|
stage2 = {
|
||||||
|
"id_stash1",
|
||||||
|
"id_stash2"
|
||||||
|
},
|
||||||
|
stage3 = {
|
||||||
|
"id_stash1",
|
||||||
|
"id_stash2",
|
||||||
|
"id_stash3"
|
||||||
|
},
|
||||||
|
|
||||||
|
Set = function(stage, refresh)
|
||||||
|
BikerClubhouse1.Documents.Clear(false)
|
||||||
|
|
||||||
|
if stage ~= "" then
|
||||||
|
SetIplPropState(BikerClubhouse1.interiorId, stage, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(BikerClubhouse1.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerClubhouse1.interiorId, {
|
||||||
|
BikerClubhouse1.Documents.stage1,
|
||||||
|
BikerClubhouse1.Documents.stage2,
|
||||||
|
BikerClubhouse1.Documents.stage3
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
BikerClubhouse1.Ipl.Interior.Load()
|
||||||
|
|
||||||
|
BikerClubhouse1.Walls.Set(BikerClubhouse1.Walls.plain, BikerClubhouse1.Walls.Color.brown)
|
||||||
|
|
||||||
|
BikerClubhouse1.Furnitures.Set(BikerClubhouse1.Furnitures.A, 3)
|
||||||
|
BikerClubhouse1.Decoration.Set(BikerClubhouse1.Decoration.A)
|
||||||
|
BikerClubhouse1.Mural.Set(BikerClubhouse1.Mural.rideFree)
|
||||||
|
|
||||||
|
BikerClubhouse1.ModBooth.Set(BikerClubhouse1.ModBooth.none)
|
||||||
|
BikerClubhouse1.GunLocker.Set(BikerClubhouse1.GunLocker.none)
|
||||||
|
|
||||||
|
BikerClubhouse1.Meth.Set(BikerClubhouse1.Meth.none)
|
||||||
|
BikerClubhouse1.Cash.Set(BikerClubhouse1.Cash.none)
|
||||||
|
BikerClubhouse1.Coke.Set(BikerClubhouse1.Coke.none)
|
||||||
|
BikerClubhouse1.Weed.Set(BikerClubhouse1.Weed.none)
|
||||||
|
BikerClubhouse1.Counterfeit.Set(BikerClubhouse1.Counterfeit.none)
|
||||||
|
BikerClubhouse1.Documents.Set(BikerClubhouse1.Documents.none)
|
||||||
|
|
||||||
|
RefreshInterior(BikerClubhouse1.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
402
resources/[core]/bob74_ipl/dlc_bikers/clubhouse2.lua
Normal file
402
resources/[core]/bob74_ipl/dlc_bikers/clubhouse2.lua
Normal file
@ -0,0 +1,402 @@
|
|||||||
|
-- Clubhouse2: 998.4809, -3164.711, -38.90733
|
||||||
|
exports('GetBikerClubhouse2Object', function()
|
||||||
|
return BikerClubhouse2
|
||||||
|
end)
|
||||||
|
|
||||||
|
BikerClubhouse2 = {
|
||||||
|
interiorId = 246529,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Interior = {
|
||||||
|
ipl = "bkr_biker_interior_placement_interior_1_biker_dlc_int_02_milo",
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(BikerClubhouse2.Ipl.Interior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(BikerClubhouse2.Ipl.Interior.ipl, false)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Walls = {
|
||||||
|
brick = "walls_01",
|
||||||
|
plain = "walls_02",
|
||||||
|
Color = {
|
||||||
|
greenAndGray = 1,
|
||||||
|
multicolor = 2,
|
||||||
|
orangeAndGray = 3,
|
||||||
|
blue = 4,
|
||||||
|
lightBlueAndSable = 5,
|
||||||
|
greenAndRed = 6,
|
||||||
|
yellowAndGray = 7,
|
||||||
|
red = 8,
|
||||||
|
fuchsiaAndGray = 9
|
||||||
|
},
|
||||||
|
|
||||||
|
Set = function(walls, color, refresh)
|
||||||
|
if color == nil then
|
||||||
|
color = 0
|
||||||
|
end
|
||||||
|
|
||||||
|
BikerClubhouse2.Walls.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(BikerClubhouse2.interiorId, walls, true, refresh)
|
||||||
|
SetInteriorEntitySetColor(BikerClubhouse2.interiorId, walls, color)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerClubhouse2.interiorId, {
|
||||||
|
BikerClubhouse2.Walls.brick,
|
||||||
|
BikerClubhouse2.Walls.plain
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
LowerWalls = {
|
||||||
|
default = "lower_walls_default",
|
||||||
|
|
||||||
|
SetColor = function(color, refresh)
|
||||||
|
SetIplPropState(BikerClubhouse2.interiorId, BikerClubhouse2.LowerWalls.default, true, refresh)
|
||||||
|
SetInteriorEntitySetColor(BikerClubhouse2.interiorId, BikerClubhouse2.LowerWalls.default, color)
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
Furnitures = {
|
||||||
|
A = "furnishings_01",
|
||||||
|
B = "furnishings_02",
|
||||||
|
-- Colors for "furnishings_01" only
|
||||||
|
Color = {
|
||||||
|
turquoise = 0,
|
||||||
|
darkBrown = 1,
|
||||||
|
brown = 2,
|
||||||
|
-- 3 equal 1
|
||||||
|
brown2 = 4,
|
||||||
|
gray = 5,
|
||||||
|
red = 6,
|
||||||
|
darkGray = 7,
|
||||||
|
black = 8,
|
||||||
|
red2 = 9
|
||||||
|
},
|
||||||
|
|
||||||
|
Set = function(furn, color, refresh)
|
||||||
|
if color == nil then
|
||||||
|
color = 0
|
||||||
|
end
|
||||||
|
|
||||||
|
BikerClubhouse2.Furnitures.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(BikerClubhouse2.interiorId, furn, true, refresh)
|
||||||
|
SetInteriorEntitySetColor(BikerClubhouse2.interiorId, furn, color)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerClubhouse2.interiorId, {
|
||||||
|
BikerClubhouse2.Furnitures.A,
|
||||||
|
BikerClubhouse2.Furnitures.B
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Decoration = {
|
||||||
|
A = "decorative_01",
|
||||||
|
B = "decorative_02",
|
||||||
|
|
||||||
|
Set = function(deco, refresh)
|
||||||
|
BikerClubhouse2.Decoration.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(BikerClubhouse2.interiorId, deco, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerClubhouse2.interiorId, {
|
||||||
|
BikerClubhouse2.Decoration.A,
|
||||||
|
BikerClubhouse2.Decoration.B
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Mural = {
|
||||||
|
none = "",
|
||||||
|
death1 = "mural_01",
|
||||||
|
cityColor1 = "mural_02",
|
||||||
|
death2 = "mural_03",
|
||||||
|
cityColor2 = "mural_04",
|
||||||
|
graffitis = "mural_05",
|
||||||
|
cityColor3 = "mural_06",
|
||||||
|
cityColor4 = "mural_07",
|
||||||
|
cityBlack = "mural_08",
|
||||||
|
death3 = "mural_09",
|
||||||
|
|
||||||
|
Set = function(mural, refresh)
|
||||||
|
BikerClubhouse2.Mural.Clear(false)
|
||||||
|
|
||||||
|
if mural ~= "" then
|
||||||
|
SetIplPropState(BikerClubhouse2.interiorId, mural, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(BikerClubhouse2.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerClubhouse2.interiorId, {
|
||||||
|
BikerClubhouse2.Mural.death1,
|
||||||
|
BikerClubhouse2.Mural.cityColor1,
|
||||||
|
BikerClubhouse2.Mural.death2,
|
||||||
|
BikerClubhouse2.Mural.cityColor2,
|
||||||
|
BikerClubhouse2.Mural.graffitis,
|
||||||
|
BikerClubhouse2.Mural.cityColor3,
|
||||||
|
BikerClubhouse2.Mural.cityColor4,
|
||||||
|
BikerClubhouse2.Mural.cityBlack,
|
||||||
|
BikerClubhouse2.Mural.death3
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
GunLocker = {
|
||||||
|
on = "gun_locker",
|
||||||
|
off = "no_gun_locker",
|
||||||
|
|
||||||
|
Set = function(locker, refresh)
|
||||||
|
BikerClubhouse2.GunLocker.Clear(false)
|
||||||
|
|
||||||
|
if locker ~= "" then
|
||||||
|
SetIplPropState(BikerClubhouse2.interiorId, locker, true, refresh)
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerClubhouse2.interiorId, {
|
||||||
|
BikerClubhouse2.GunLocker.on,
|
||||||
|
BikerClubhouse2.GunLocker.off
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
ModBooth = {
|
||||||
|
none = "",
|
||||||
|
on = "mod_booth",
|
||||||
|
off = "no_mod_booth",
|
||||||
|
|
||||||
|
Set = function(mod, refresh)
|
||||||
|
BikerClubhouse2.ModBooth.Clear(false)
|
||||||
|
|
||||||
|
if mod ~= "" then
|
||||||
|
SetIplPropState(BikerClubhouse2.interiorId, mod, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(BikerClubhouse2.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerClubhouse2.interiorId, {
|
||||||
|
BikerClubhouse2.ModBooth.on,
|
||||||
|
BikerClubhouse2.ModBooth.off
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Meth = {
|
||||||
|
none = "",
|
||||||
|
stage1 = "meth_small",
|
||||||
|
stage2 = {
|
||||||
|
"meth_small",
|
||||||
|
"meth_medium"
|
||||||
|
},
|
||||||
|
stage3 = {
|
||||||
|
"meth_small",
|
||||||
|
"meth_medium",
|
||||||
|
"meth_large"
|
||||||
|
},
|
||||||
|
|
||||||
|
Set = function(stage, refresh)
|
||||||
|
BikerClubhouse2.Meth.Clear(false)
|
||||||
|
|
||||||
|
if stage ~= "" then
|
||||||
|
SetIplPropState(BikerClubhouse2.interiorId, stage, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(BikerClubhouse2.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerClubhouse2.interiorId, {
|
||||||
|
BikerClubhouse2.Meth.stage1,
|
||||||
|
BikerClubhouse2.Meth.stage2,
|
||||||
|
BikerClubhouse2.Meth.stage3
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Cash = {
|
||||||
|
none = "",
|
||||||
|
stage1 = "cash_small",
|
||||||
|
stage2 = {
|
||||||
|
"cash_small",
|
||||||
|
"cash_medium"
|
||||||
|
},
|
||||||
|
stage3 = {
|
||||||
|
"cash_small",
|
||||||
|
"cash_medium",
|
||||||
|
"cash_large"
|
||||||
|
},
|
||||||
|
|
||||||
|
Set = function(stage, refresh)
|
||||||
|
BikerClubhouse2.Cash.Clear(false)
|
||||||
|
|
||||||
|
if stage ~= "" then
|
||||||
|
SetIplPropState(BikerClubhouse2.interiorId, stage, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(BikerClubhouse2.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerClubhouse2.interiorId, {
|
||||||
|
BikerClubhouse2.Cash.stage1,
|
||||||
|
BikerClubhouse2.Cash.stage2,
|
||||||
|
BikerClubhouse2.Cash.stage3
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Weed = {
|
||||||
|
none = "",
|
||||||
|
stage1 = "weed_small",
|
||||||
|
stage2 = {
|
||||||
|
"weed_small",
|
||||||
|
"weed_medium"
|
||||||
|
},
|
||||||
|
stage3 = {
|
||||||
|
"weed_small",
|
||||||
|
"weed_medium",
|
||||||
|
"weed_large"
|
||||||
|
},
|
||||||
|
|
||||||
|
Set = function(stage, refresh)
|
||||||
|
BikerClubhouse2.Weed.Clear(false)
|
||||||
|
|
||||||
|
if stage ~= "" then
|
||||||
|
SetIplPropState(BikerClubhouse2.interiorId, stage, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(BikerClubhouse2.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerClubhouse2.interiorId, {
|
||||||
|
BikerClubhouse2.Weed.stage1,
|
||||||
|
BikerClubhouse2.Weed.stage2,
|
||||||
|
BikerClubhouse2.Weed.stage3
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Coke = {
|
||||||
|
none = "",
|
||||||
|
stage1 = "coke_small",
|
||||||
|
stage2 = {
|
||||||
|
"coke_small",
|
||||||
|
"coke_medium"
|
||||||
|
},
|
||||||
|
stage3 = {
|
||||||
|
"coke_small",
|
||||||
|
"coke_medium",
|
||||||
|
"coke_large"
|
||||||
|
},
|
||||||
|
|
||||||
|
Set = function(stage, refresh)
|
||||||
|
BikerClubhouse2.Coke.Clear(false)
|
||||||
|
|
||||||
|
if stage ~= "" then
|
||||||
|
SetIplPropState(BikerClubhouse2.interiorId, stage, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(BikerClubhouse2.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerClubhouse2.interiorId, {
|
||||||
|
BikerClubhouse2.Coke.stage1,
|
||||||
|
BikerClubhouse2.Coke.stage2,
|
||||||
|
BikerClubhouse2.Coke.stage3
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Counterfeit = {
|
||||||
|
none = "",
|
||||||
|
stage1 = "counterfeit_small",
|
||||||
|
stage2 = {
|
||||||
|
"counterfeit_small",
|
||||||
|
"counterfeit_medium"
|
||||||
|
},
|
||||||
|
stage3 = {
|
||||||
|
"counterfeit_small",
|
||||||
|
"counterfeit_medium",
|
||||||
|
"counterfeit_large"
|
||||||
|
},
|
||||||
|
|
||||||
|
Set = function(stage, refresh)
|
||||||
|
BikerClubhouse2.Counterfeit.Clear(false)
|
||||||
|
|
||||||
|
if stage ~= "" then
|
||||||
|
SetIplPropState(BikerClubhouse2.interiorId, stage, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(BikerClubhouse2.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerClubhouse2.interiorId, {
|
||||||
|
BikerClubhouse2.Counterfeit.stage1,
|
||||||
|
BikerClubhouse2.Counterfeit.stage2,
|
||||||
|
BikerClubhouse2.Counterfeit.stage3
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Documents = {
|
||||||
|
none = "",
|
||||||
|
stage1 = "id_small",
|
||||||
|
stage2 = {
|
||||||
|
"id_small",
|
||||||
|
"id_medium"
|
||||||
|
},
|
||||||
|
stage3 = {
|
||||||
|
"id_small",
|
||||||
|
"id_medium",
|
||||||
|
"id_large"
|
||||||
|
},
|
||||||
|
|
||||||
|
Set = function(stage, refresh)
|
||||||
|
BikerClubhouse2.Documents.Clear(false)
|
||||||
|
|
||||||
|
if stage ~= "" then
|
||||||
|
SetIplPropState(BikerClubhouse2.interiorId, stage, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then RefreshInterior(BikerClubhouse2.interiorId) end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerClubhouse2.interiorId, {
|
||||||
|
BikerClubhouse2.Documents.stage1,
|
||||||
|
BikerClubhouse2.Documents.stage2,
|
||||||
|
BikerClubhouse2.Documents.stage3
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
BikerClubhouse2.Ipl.Interior.Load()
|
||||||
|
|
||||||
|
BikerClubhouse2.Walls.Set(BikerClubhouse2.Walls.brick, BikerClubhouse2.Walls.Color.red)
|
||||||
|
BikerClubhouse2.LowerWalls.SetColor(BikerClubhouse2.Walls.Color.red)
|
||||||
|
|
||||||
|
BikerClubhouse2.Furnitures.Set(BikerClubhouse2.Furnitures.B, BikerClubhouse2.Furnitures.Color.black)
|
||||||
|
BikerClubhouse2.Decoration.Set(BikerClubhouse2.Decoration.B)
|
||||||
|
BikerClubhouse2.Mural.Set(BikerClubhouse2.Mural.death3)
|
||||||
|
|
||||||
|
BikerClubhouse2.ModBooth.Set(BikerClubhouse2.ModBooth.off)
|
||||||
|
BikerClubhouse2.GunLocker.Set(BikerClubhouse2.GunLocker.off)
|
||||||
|
|
||||||
|
BikerClubhouse2.Meth.Set(BikerClubhouse2.Meth.none)
|
||||||
|
BikerClubhouse2.Cash.Set(BikerClubhouse2.Cash.none)
|
||||||
|
BikerClubhouse2.Coke.Set(BikerClubhouse2.Coke.none)
|
||||||
|
BikerClubhouse2.Weed.Set(BikerClubhouse2.Weed.none)
|
||||||
|
BikerClubhouse2.Counterfeit.Set(BikerClubhouse2.Counterfeit.none)
|
||||||
|
BikerClubhouse2.Documents.Set(BikerClubhouse2.Documents.none)
|
||||||
|
|
||||||
|
RefreshInterior(BikerClubhouse2.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
98
resources/[core]/bob74_ipl/dlc_bikers/cocaine.lua
Normal file
98
resources/[core]/bob74_ipl/dlc_bikers/cocaine.lua
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
-- Cocaine lockup: 1093.6, -3196.6, -38.99841
|
||||||
|
exports('GetBikerCocaineObject', function()
|
||||||
|
return BikerCocaine
|
||||||
|
end)
|
||||||
|
|
||||||
|
BikerCocaine = {
|
||||||
|
interiorId = 247553,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Interior = {
|
||||||
|
ipl = "bkr_biker_interior_placement_interior_4_biker_dlc_int_ware03_milo",
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(BikerCocaine.Ipl.Interior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(BikerCocaine.Ipl.Interior.ipl, false)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Style = {
|
||||||
|
none = "",
|
||||||
|
basic = {
|
||||||
|
"set_up",
|
||||||
|
"equipment_basic",
|
||||||
|
"coke_press_basic",
|
||||||
|
"production_basic",
|
||||||
|
"table_equipment"
|
||||||
|
},
|
||||||
|
upgrade = {
|
||||||
|
"set_up",
|
||||||
|
"equipment_upgrade",
|
||||||
|
"coke_press_upgrade",
|
||||||
|
"production_upgrade",
|
||||||
|
"table_equipment_upgrade"
|
||||||
|
},
|
||||||
|
|
||||||
|
Set = function(style, refresh)
|
||||||
|
BikerCocaine.Style.Clear(false)
|
||||||
|
|
||||||
|
if style ~= "" then
|
||||||
|
SetIplPropState(BikerCocaine.interiorId, style, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(BikerCocaine.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerCocaine.interiorId, {
|
||||||
|
BikerCocaine.Style.basic,
|
||||||
|
BikerCocaine.Style.upgrade
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Security = {
|
||||||
|
none = "",
|
||||||
|
basic = "security_low",
|
||||||
|
upgrade = "security_high",
|
||||||
|
|
||||||
|
Set = function(security, refresh)
|
||||||
|
BikerCocaine.Security.Clear(false)
|
||||||
|
|
||||||
|
if security ~= "" then
|
||||||
|
SetIplPropState(BikerCocaine.interiorId, security, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(BikerCocaine.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerCocaine.interiorId, {
|
||||||
|
BikerCocaine.Security.basic,
|
||||||
|
BikerCocaine.Security.upgrade
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Details = {
|
||||||
|
cokeBasic1 = "coke_cut_01", -- On the basic tables
|
||||||
|
cokeBasic2 = "coke_cut_02", -- On the basic tables
|
||||||
|
cokeBasic3 = "coke_cut_03", -- On the basic tables
|
||||||
|
cokeUpgrade1 = "coke_cut_04", -- On the upgraded tables
|
||||||
|
cokeUpgrade2 = "coke_cut_05", -- On the upgraded tables
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(BikerCocaine.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
BikerCocaine.Ipl.Interior.Load()
|
||||||
|
BikerCocaine.Style.Set(BikerCocaine.Style.basic)
|
||||||
|
BikerCocaine.Security.Set(BikerCocaine.Security.none)
|
||||||
|
|
||||||
|
RefreshInterior(BikerCocaine.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
206
resources/[core]/bob74_ipl/dlc_bikers/counterfeit_cash.lua
Normal file
206
resources/[core]/bob74_ipl/dlc_bikers/counterfeit_cash.lua
Normal file
@ -0,0 +1,206 @@
|
|||||||
|
-- Counterfeit cash factory: 1121.897, -3195.338, -40.4025
|
||||||
|
exports('GetBikerCounterfeitObject', function()
|
||||||
|
return BikerCounterfeit
|
||||||
|
end)
|
||||||
|
|
||||||
|
BikerCounterfeit = {
|
||||||
|
interiorId = 247809,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Interior = {
|
||||||
|
ipl = "bkr_biker_interior_placement_interior_5_biker_dlc_int_ware04_milo",
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(BikerCounterfeit.Ipl.Interior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(BikerCounterfeit.Ipl.Interior.ipl, false)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Printer = {
|
||||||
|
none = "",
|
||||||
|
basic = "counterfeit_standard_equip_no_prod",
|
||||||
|
basicProd = "counterfeit_standard_equip",
|
||||||
|
upgrade = "counterfeit_upgrade_equip_no_prod",
|
||||||
|
upgradeProd = "counterfeit_upgrade_equip",
|
||||||
|
|
||||||
|
Set = function(printer, refresh)
|
||||||
|
BikerCounterfeit.Printer.Clear(false)
|
||||||
|
|
||||||
|
if printer ~= "" then
|
||||||
|
SetIplPropState(BikerCounterfeit.interiorId, printer, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(BikerCounterfeit.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerCounterfeit.interiorId, {
|
||||||
|
BikerCounterfeit.Printer.basic,
|
||||||
|
BikerCounterfeit.Printer.basicProd,
|
||||||
|
BikerCounterfeit.Printer.upgrade,
|
||||||
|
BikerCounterfeit.Printer.upgradeProd
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Security = {
|
||||||
|
basic = "counterfeit_low_security",
|
||||||
|
upgrade = "counterfeit_security",
|
||||||
|
|
||||||
|
Set = function(security, refresh)
|
||||||
|
BikerCounterfeit.Security.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(BikerCounterfeit.interiorId, security, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerCounterfeit.interiorId, {
|
||||||
|
BikerCounterfeit.Security.basic,
|
||||||
|
BikerCounterfeit.Security.upgrade
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Dryer1 = {
|
||||||
|
none = "",
|
||||||
|
on = "dryera_on",
|
||||||
|
off = "dryera_off",
|
||||||
|
open = "dryera_open",
|
||||||
|
|
||||||
|
Set = function(dryer, refresh)
|
||||||
|
BikerCounterfeit.Dryer1.Clear(false)
|
||||||
|
|
||||||
|
if dryer ~= "" then
|
||||||
|
SetIplPropState(BikerCounterfeit.interiorId, dryer, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(BikerCounterfeit.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerCounterfeit.interiorId, {
|
||||||
|
BikerCounterfeit.Dryer1.on,
|
||||||
|
BikerCounterfeit.Dryer1.off,
|
||||||
|
BikerCounterfeit.Dryer1.open
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Dryer2 = {
|
||||||
|
none = "",
|
||||||
|
on = "dryerb_on",
|
||||||
|
off = "dryerb_off",
|
||||||
|
open = "dryerb_open",
|
||||||
|
|
||||||
|
Set = function(dryer, refresh)
|
||||||
|
BikerCounterfeit.Dryer2.Clear(false)
|
||||||
|
|
||||||
|
if dryer ~= "" then
|
||||||
|
SetIplPropState(BikerCounterfeit.interiorId, dryer, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(BikerCounterfeit.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerCounterfeit.interiorId, {
|
||||||
|
BikerCounterfeit.Dryer2.on,
|
||||||
|
BikerCounterfeit.Dryer2.off,
|
||||||
|
BikerCounterfeit.Dryer2.open
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Dryer3 = {
|
||||||
|
none = "",
|
||||||
|
on = "dryerc_on",
|
||||||
|
off = "dryerc_off",
|
||||||
|
open = "dryerc_open",
|
||||||
|
|
||||||
|
Set = function(dryer, refresh)
|
||||||
|
BikerCounterfeit.Dryer3.Clear(false)
|
||||||
|
|
||||||
|
if dryer ~= "" then
|
||||||
|
SetIplPropState(BikerCounterfeit.interiorId, dryer, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(BikerCounterfeit.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerCounterfeit.interiorId, {
|
||||||
|
BikerCounterfeit.Dryer3.on,
|
||||||
|
BikerCounterfeit.Dryer3.off,
|
||||||
|
BikerCounterfeit.Dryer3.open
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Dryer4 = {
|
||||||
|
none = "",
|
||||||
|
on = "dryerd_on",
|
||||||
|
off = "dryerd_off",
|
||||||
|
open = "dryerd_open",
|
||||||
|
|
||||||
|
Set = function(dryer, refresh)
|
||||||
|
BikerCounterfeit.Dryer4.Clear(false)
|
||||||
|
|
||||||
|
if dryer ~= "" then
|
||||||
|
SetIplPropState(BikerCounterfeit.interiorId, dryer, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(BikerCounterfeit.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerCounterfeit.interiorId, {
|
||||||
|
BikerCounterfeit.Dryer4.on,
|
||||||
|
BikerCounterfeit.Dryer4.off,
|
||||||
|
BikerCounterfeit.Dryer4.open
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Details = {
|
||||||
|
Cash10 = {
|
||||||
|
A = "counterfeit_cashpile10a",
|
||||||
|
B = "counterfeit_cashpile10b",
|
||||||
|
C = "counterfeit_cashpile10c",
|
||||||
|
D = "counterfeit_cashpile10d",
|
||||||
|
},
|
||||||
|
Cash20 = {
|
||||||
|
A = "counterfeit_cashpile20a",
|
||||||
|
B = "counterfeit_cashpile20b",
|
||||||
|
C = "counterfeit_cashpile20c",
|
||||||
|
D = "counterfeit_cashpile20d",
|
||||||
|
},
|
||||||
|
Cash100 = {
|
||||||
|
A = "counterfeit_cashpile100a",
|
||||||
|
B = "counterfeit_cashpile100b",
|
||||||
|
C = "counterfeit_cashpile100c",
|
||||||
|
D = "counterfeit_cashpile100d",
|
||||||
|
},
|
||||||
|
chairs = "special_chairs", -- Brown chairs at the end of the room
|
||||||
|
cutter = "money_cutter", -- Money cutting machine
|
||||||
|
furnitures = "counterfeit_setup", -- Paper, counting machines, cups
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(BikerCounterfeit.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
BikerCounterfeit.Ipl.Interior.Load()
|
||||||
|
BikerCounterfeit.Printer.Set(BikerCounterfeit.Printer.basicProd)
|
||||||
|
BikerCounterfeit.Security.Set(BikerCounterfeit.Security.upgrade)
|
||||||
|
BikerCounterfeit.Dryer1.Set(BikerCounterfeit.Dryer1.open)
|
||||||
|
BikerCounterfeit.Dryer2.Set(BikerCounterfeit.Dryer2.on)
|
||||||
|
BikerCounterfeit.Dryer3.Set(BikerCounterfeit.Dryer3.on)
|
||||||
|
BikerCounterfeit.Dryer4.Set(BikerCounterfeit.Dryer4.on)
|
||||||
|
BikerCounterfeit.Details.Enable(BikerCounterfeit.Details.cutter, true)
|
||||||
|
BikerCounterfeit.Details.Enable(BikerCounterfeit.Details.furnitures, true)
|
||||||
|
BikerCounterfeit.Details.Enable(BikerCounterfeit.Details.Cash100, true)
|
||||||
|
|
||||||
|
RefreshInterior(BikerCounterfeit.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
107
resources/[core]/bob74_ipl/dlc_bikers/document_forgery.lua
Normal file
107
resources/[core]/bob74_ipl/dlc_bikers/document_forgery.lua
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
-- Document forgery: 1165, -3196.6, -39.01306
|
||||||
|
exports('GetBikerDocumentForgeryObject', function()
|
||||||
|
return BikerDocumentForgery
|
||||||
|
end)
|
||||||
|
|
||||||
|
BikerDocumentForgery = {
|
||||||
|
interiorId = 246785,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Interior = {
|
||||||
|
ipl = "bkr_biker_interior_placement_interior_6_biker_dlc_int_ware05_milo",
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(BikerDocumentForgery.Ipl.Interior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(BikerDocumentForgery.Ipl.Interior.ipl, false)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Style = {
|
||||||
|
basic = "interior_basic",
|
||||||
|
upgrade = "interior_upgrade",
|
||||||
|
|
||||||
|
Set = function(style, refresh)
|
||||||
|
BikerDocumentForgery.Style.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(BikerDocumentForgery.interiorId, style, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerDocumentForgery.interiorId, {
|
||||||
|
BikerDocumentForgery.Style.basic,
|
||||||
|
BikerDocumentForgery.Style.upgrade
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Equipment = {
|
||||||
|
none = "",
|
||||||
|
basic = "equipment_basic",
|
||||||
|
upgrade = "equipment_upgrade",
|
||||||
|
|
||||||
|
Set = function(eqpt, refresh)
|
||||||
|
BikerDocumentForgery.Equipment.Clear(false)
|
||||||
|
|
||||||
|
if eqpt ~= "" then
|
||||||
|
SetIplPropState(BikerDocumentForgery.interiorId, eqpt, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(BikerDocumentForgery.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerDocumentForgery.interiorId, {
|
||||||
|
BikerDocumentForgery.Equipment.basic,
|
||||||
|
BikerDocumentForgery.Equipment.upgrade
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Security = {
|
||||||
|
basic = "security_low",
|
||||||
|
upgrade = "security_high",
|
||||||
|
|
||||||
|
Set = function(security, refresh)
|
||||||
|
BikerDocumentForgery.Security.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(BikerDocumentForgery.interiorId, security, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerDocumentForgery.interiorId, {
|
||||||
|
BikerDocumentForgery.Security.basic,
|
||||||
|
BikerDocumentForgery.Security.upgrade
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Details = {
|
||||||
|
Chairs = {
|
||||||
|
A = "chair01",
|
||||||
|
B = "chair02",
|
||||||
|
C = "chair03",
|
||||||
|
D = "chair04",
|
||||||
|
E = "chair05",
|
||||||
|
F = "chair06",
|
||||||
|
G = "chair07"
|
||||||
|
},
|
||||||
|
production = "production", -- Papers, pencils
|
||||||
|
furnitures = "set_up", -- Printers, shredders
|
||||||
|
clutter = "clutter", -- Pizza boxes, cups
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(BikerDocumentForgery.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
BikerDocumentForgery.Ipl.Interior.Load()
|
||||||
|
BikerDocumentForgery.Style.Set(BikerDocumentForgery.Style.basic)
|
||||||
|
BikerDocumentForgery.Security.Set(BikerDocumentForgery.Security.basic)
|
||||||
|
BikerDocumentForgery.Equipment.Set(BikerDocumentForgery.Equipment.basic)
|
||||||
|
BikerDocumentForgery.Details.Enable(BikerDocumentForgery.Details.production, false)
|
||||||
|
BikerDocumentForgery.Details.Enable(BikerDocumentForgery.Details.setup, false)
|
||||||
|
BikerDocumentForgery.Details.Enable(BikerDocumentForgery.Details.clutter, false)
|
||||||
|
BikerDocumentForgery.Details.Enable(BikerDocumentForgery.Details.Chairs, true)
|
||||||
|
|
||||||
|
RefreshInterior(BikerDocumentForgery.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
608
resources/[core]/bob74_ipl/dlc_bikers/gang.lua
Normal file
608
resources/[core]/bob74_ipl/dlc_bikers/gang.lua
Normal file
@ -0,0 +1,608 @@
|
|||||||
|
exports('GetBikerGangObject', function()
|
||||||
|
return BikerGang
|
||||||
|
end)
|
||||||
|
|
||||||
|
AddEventHandler('onClientResourceStop', function(res)
|
||||||
|
if GetCurrentResourceName() ~= res then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
BikerGang.Clubhouse.ClearAll()
|
||||||
|
end)
|
||||||
|
|
||||||
|
BikerGang = {
|
||||||
|
Name = {
|
||||||
|
Colors = {
|
||||||
|
black = 0,
|
||||||
|
gray = 1,
|
||||||
|
white = 2,
|
||||||
|
orange = 3,
|
||||||
|
red = 4,
|
||||||
|
green = 5,
|
||||||
|
yellow = 6,
|
||||||
|
blue = 7
|
||||||
|
},
|
||||||
|
Fonts = {
|
||||||
|
font1 = 0,
|
||||||
|
font2 = 1,
|
||||||
|
font3 = 2,
|
||||||
|
font4 = 3,
|
||||||
|
font5 = 4,
|
||||||
|
font6 = 5,
|
||||||
|
font7 = 6,
|
||||||
|
font8 = 7,
|
||||||
|
font9 = 8,
|
||||||
|
font10 = 9,
|
||||||
|
font11 = 10,
|
||||||
|
font12 = 11,
|
||||||
|
font13 = 12
|
||||||
|
},
|
||||||
|
name = "",
|
||||||
|
color = 0,
|
||||||
|
font = 0,
|
||||||
|
|
||||||
|
Set = function(name, color, font)
|
||||||
|
BikerGang.Name.name = name
|
||||||
|
BikerGang.Name.color = color
|
||||||
|
BikerGang.Name.font = font
|
||||||
|
BikerGang.Clubhouse.ClubName.stage = 0
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Emblem = {
|
||||||
|
Logo = {
|
||||||
|
eagle = "MPClubPreset1",
|
||||||
|
skull = "MPClubPreset2",
|
||||||
|
ace = "MPClubPreset3",
|
||||||
|
brassKnuckles = "MPClubPreset4",
|
||||||
|
UR = "MPClubPreset5",
|
||||||
|
fox = "MPClubPreset6",
|
||||||
|
city = "MPClubPreset7",
|
||||||
|
dices = "MPClubPreset8",
|
||||||
|
target = "MPClubPreset9"
|
||||||
|
},
|
||||||
|
emblem = "MPClubPreset1",
|
||||||
|
rot = 90.0, -- Rotation for 0.0 to 360.0
|
||||||
|
|
||||||
|
Set = function(logo, rotation)
|
||||||
|
BikerGang.Emblem.emblem = logo
|
||||||
|
BikerGang.Emblem.rot = rotation
|
||||||
|
BikerGang.Clubhouse.Emblem.stage = 0
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Clubhouse = {
|
||||||
|
interiorId1 = 246273,
|
||||||
|
interiorId2 = 246529,
|
||||||
|
|
||||||
|
Members = {
|
||||||
|
President = {
|
||||||
|
needToLoad = false,
|
||||||
|
loaded = false,
|
||||||
|
renderId = -1,
|
||||||
|
textureDict = "",
|
||||||
|
pedheadshot = -1,
|
||||||
|
target = "memorial_wall_president",
|
||||||
|
prop = "bkr_prop_rt_memorial_president",
|
||||||
|
stage = 0,
|
||||||
|
|
||||||
|
Init = function()
|
||||||
|
DrawEmptyRect(BikerGang.Clubhouse.Members.President.target, BikerGang.Clubhouse.Members.President.prop)
|
||||||
|
end,
|
||||||
|
Enable = function(state)
|
||||||
|
BikerGang.Clubhouse.Members.President.needToLoad = state
|
||||||
|
end,
|
||||||
|
Set = function(ped)
|
||||||
|
BikerGang.Clubhouse.Members.Set(BikerGang.Clubhouse.Members.President, ped)
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
BikerGang.Clubhouse.Members.Clear(BikerGang.Clubhouse.Members.President)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
VicePresident = {
|
||||||
|
needToLoad = false,
|
||||||
|
loaded = false,
|
||||||
|
renderId = -1,
|
||||||
|
textureDict = "",
|
||||||
|
pedheadshot = -1,
|
||||||
|
target = "memorial_wall_vice_president",
|
||||||
|
prop = "bkr_prop_rt_memorial_vice_pres",
|
||||||
|
stage = 0,
|
||||||
|
|
||||||
|
Init = function()
|
||||||
|
DrawEmptyRect(BikerGang.Clubhouse.Members.VicePresident.target, BikerGang.Clubhouse.Members.VicePresident.prop)
|
||||||
|
end,
|
||||||
|
Enable = function(state)
|
||||||
|
BikerGang.Clubhouse.Members.VicePresident.needToLoad = state
|
||||||
|
end,
|
||||||
|
Set = function(ped)
|
||||||
|
BikerGang.Clubhouse.Members.Set(BikerGang.Clubhouse.Members.VicePresident, ped)
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
BikerGang.Clubhouse.Members.Clear(BikerGang.Clubhouse.Members.VicePresident)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
RoadCaptain = {
|
||||||
|
needToLoad = false,
|
||||||
|
loaded = false,
|
||||||
|
renderId = -1,
|
||||||
|
textureDict = "",
|
||||||
|
pedheadshot = -1,
|
||||||
|
target = "memorial_wall_active_01",
|
||||||
|
prop = "bkr_prop_rt_memorial_active_01",
|
||||||
|
stage = 0,
|
||||||
|
|
||||||
|
Init = function()
|
||||||
|
DrawEmptyRect(BikerGang.Clubhouse.Members.RoadCaptain.target, BikerGang.Clubhouse.Members.RoadCaptain.prop)
|
||||||
|
end,
|
||||||
|
Enable = function(state)
|
||||||
|
BikerGang.Clubhouse.Members.RoadCaptain.needToLoad = state
|
||||||
|
end,
|
||||||
|
Set = function(ped)
|
||||||
|
BikerGang.Clubhouse.Members.Set(BikerGang.Clubhouse.Members.RoadCaptain, ped)
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
BikerGang.Clubhouse.Members.Clear(BikerGang.Clubhouse.Members.RoadCaptain)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Enforcer = {
|
||||||
|
needToLoad = false,
|
||||||
|
loaded = false,
|
||||||
|
renderId = -1,
|
||||||
|
textureDict = "",
|
||||||
|
pedheadshot = -1,
|
||||||
|
target = "memorial_wall_active_02",
|
||||||
|
prop = "bkr_prop_rt_memorial_active_02",
|
||||||
|
stage = 0,
|
||||||
|
|
||||||
|
Init = function()
|
||||||
|
DrawEmptyRect(BikerGang.Clubhouse.Members.Enforcer.target, BikerGang.Clubhouse.Members.Enforcer.prop)
|
||||||
|
end,
|
||||||
|
Enable = function(state)
|
||||||
|
BikerGang.Clubhouse.Members.Enforcer.needToLoad = state
|
||||||
|
end,
|
||||||
|
Set = function(ped)
|
||||||
|
BikerGang.Clubhouse.Members.Set(BikerGang.Clubhouse.Members.Enforcer, ped)
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
BikerGang.Clubhouse.Members.Clear(BikerGang.Clubhouse.Members.Enforcer)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
SergeantAtArms = {
|
||||||
|
needToLoad = false,
|
||||||
|
loaded = false,
|
||||||
|
renderId = -1,
|
||||||
|
textureDict = "",
|
||||||
|
pedheadshot = -1,
|
||||||
|
target = "memorial_wall_active_03",
|
||||||
|
prop = "bkr_prop_rt_memorial_active_03",
|
||||||
|
stage = 0,
|
||||||
|
|
||||||
|
Init = function()
|
||||||
|
DrawEmptyRect(BikerGang.Clubhouse.Members.SergeantAtArms.target, BikerGang.Clubhouse.Members.SergeantAtArms.prop)
|
||||||
|
end,
|
||||||
|
Enable = function(state)
|
||||||
|
BikerGang.Clubhouse.Members.SergeantAtArms.needToLoad = state
|
||||||
|
end,
|
||||||
|
Set = function(ped)
|
||||||
|
BikerGang.Clubhouse.Members.Set(BikerGang.Clubhouse.Members.SergeantAtArms, ped)
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
BikerGang.Clubhouse.Members.Clear(BikerGang.Clubhouse.Members.SergeantAtArms)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Set = function(member, ped)
|
||||||
|
member.Clear()
|
||||||
|
member.pedheadshot = GetPedheadshot(ped)
|
||||||
|
|
||||||
|
if member.pedheadshot ~= -1 then
|
||||||
|
member.textureDict = GetPedheadshotTxdString(member.pedheadshot)
|
||||||
|
|
||||||
|
local IsTextureDictLoaded = LoadStreamedTextureDict(member.textureDict)
|
||||||
|
|
||||||
|
if not IsTextureDictLoaded then
|
||||||
|
print("ERROR: BikerClubhouseDrawMembers - Textures dictionnary \"" .. tostring(member.textureDict) .. "\" cannot be loaded.")
|
||||||
|
end
|
||||||
|
else
|
||||||
|
print("ERROR: BikerClubhouseDrawMembers - PedHeadShot not ready.")
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(member)
|
||||||
|
if IsNamedRendertargetRegistered(member.target) then
|
||||||
|
ReleaseNamedRendertarget(GetHashKey(member.target))
|
||||||
|
end
|
||||||
|
|
||||||
|
if member.pedheadshot ~= -1 then
|
||||||
|
UnregisterPedheadshot(member.pedheadshot)
|
||||||
|
end
|
||||||
|
|
||||||
|
if member.textureDict ~= "" then
|
||||||
|
SetStreamedTextureDictAsNoLongerNeeded(member.textureDict)
|
||||||
|
end
|
||||||
|
|
||||||
|
member.renderId = -1
|
||||||
|
member.textureDict = ""
|
||||||
|
member.pedheadshot = -1
|
||||||
|
member.stage = 0
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
ClubName = {
|
||||||
|
needToLoad = false,
|
||||||
|
loaded = false,
|
||||||
|
target = "clubname_blackboard_01a",
|
||||||
|
prop = "bkr_prop_clubhouse_blackboard_01a",
|
||||||
|
renderId = -1,
|
||||||
|
movieId = -1,
|
||||||
|
stage = 0,
|
||||||
|
|
||||||
|
Init = function()
|
||||||
|
DrawEmptyRect(BikerGang.Clubhouse.ClubName.target, BikerGang.Clubhouse.ClubName.prop)
|
||||||
|
end,
|
||||||
|
Enable = function(state)
|
||||||
|
BikerGang.Clubhouse.ClubName.needToLoad = state
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
if IsNamedRendertargetRegistered(BikerGang.Clubhouse.ClubName.target) then
|
||||||
|
ReleaseNamedRendertarget(GetHashKey(BikerGang.Clubhouse.ClubName.target))
|
||||||
|
end
|
||||||
|
|
||||||
|
if HasScaleformMovieFilenameLoaded(BikerGang.Clubhouse.ClubName.movieId) then
|
||||||
|
SetScaleformMovieAsNoLongerNeeded(BikerGang.Clubhouse.ClubName.movieId)
|
||||||
|
end
|
||||||
|
|
||||||
|
BikerGang.Clubhouse.ClubName.renderId = -1
|
||||||
|
BikerGang.Clubhouse.ClubName.movieId = -1
|
||||||
|
BikerGang.Clubhouse.ClubName.stage = 0
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
Emblem = {
|
||||||
|
needToLoad = false,
|
||||||
|
loaded = false,
|
||||||
|
target = "clubhouse_table",
|
||||||
|
prop = "bkr_prop_rt_clubhouse_table",
|
||||||
|
renderId = -1,
|
||||||
|
movieId = -1,
|
||||||
|
stage = 0,
|
||||||
|
|
||||||
|
Enable = function(state)
|
||||||
|
BikerGang.Clubhouse.Emblem.needToLoad = state
|
||||||
|
end,
|
||||||
|
Init = function()
|
||||||
|
DrawEmptyRect(BikerGang.Clubhouse.Emblem.target, BikerGang.Clubhouse.Emblem.prop)
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
if IsNamedRendertargetRegistered(BikerGang.Clubhouse.Emblem.target) then
|
||||||
|
ReleaseNamedRendertarget(GetHashKey(BikerGang.Clubhouse.Emblem.target))
|
||||||
|
end
|
||||||
|
|
||||||
|
BikerGang.Clubhouse.Emblem.renderId = -1
|
||||||
|
BikerGang.Clubhouse.Emblem.stage = 0
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
MissionsWall = {
|
||||||
|
Missions = {
|
||||||
|
Titles = {
|
||||||
|
byThePoundUpper = "BDEAL_DEALN",
|
||||||
|
byThePound = "DEAL_DEALN",
|
||||||
|
prisonerOfWarUpper = "BIGM_RESCN",
|
||||||
|
prisonerOfWar = "CELL_BIKER_RESC",
|
||||||
|
gunsForHire = "LR_INTRO_ST",
|
||||||
|
weaponOfChoice = "CELL_BIKER_CK",
|
||||||
|
gunrunningUpper = "GB_BIGUNLOAD_U",
|
||||||
|
gunrunning = "GB_BIGUNLOAD_T",
|
||||||
|
nineTenthsOfTheLawUpper = "SB_INTRO_TITLE",
|
||||||
|
nineTenthsOfTheLaw = "SB_MENU_TITLE",
|
||||||
|
jailbreakUpper = "FP_INTRO_TITLE",
|
||||||
|
jailbreak = "FP_MENU_TITLE",
|
||||||
|
crackedUpper = "SC_INTRO_TITLE",
|
||||||
|
cracked = "SC_MENU_TITLE",
|
||||||
|
fragileGoodsUpper = "DV_SH_BIG",
|
||||||
|
fragileGoods = "DV_SH_TITLE",
|
||||||
|
torchedUpper = "BA_SH_BIG",
|
||||||
|
torched = "BA_SH_TITLE",
|
||||||
|
outriderUpper = "SHU_SH_BIG",
|
||||||
|
outrider = "SHU_SH_TITLE"
|
||||||
|
},
|
||||||
|
Descriptions = {
|
||||||
|
byThePound = "DEAL_DEALND",
|
||||||
|
prisonerOfWar = "CELL_BIKER_RESD",
|
||||||
|
gunsForHire = "GFH_MENU_DESC",
|
||||||
|
weaponOfChoice = "CELL_BIKER_CKD",
|
||||||
|
gunrunning = "GB_BIGUNLOAD_D",
|
||||||
|
nineTenthsOfTheLaw = "SB_MENU_DESC",
|
||||||
|
jailbreak = "FP_MENU_DESC",
|
||||||
|
cracked = "SC_MENU_DESC",
|
||||||
|
fragileGoods = "DV_MENU_DESC",
|
||||||
|
torched = "BA_MENU_DESC",
|
||||||
|
outrider = "SHU_MENU_DESC"
|
||||||
|
},
|
||||||
|
Pictures = {
|
||||||
|
byThePound = "CHM_IMG0", -- Pickup car parked
|
||||||
|
prisonerOfWar = "CHM_IMG8", -- Police with man down
|
||||||
|
gunsForHire = "CHM_IMG4", -- Limo
|
||||||
|
weaponOfChoice = "CHM_IMG10", -- Prisoner being beaten
|
||||||
|
gunrunning = "CHM_IMG3", -- Shipment
|
||||||
|
nineTenthsOfTheLaw = "CHM_IMG6", -- Wheeling
|
||||||
|
jailbreak = "CHM_IMG5", -- Prison bus
|
||||||
|
cracked = "CHM_IMG1", -- Safe
|
||||||
|
fragileGoods = "CHM_IMG2", -- Lost Van
|
||||||
|
torched = "CHM_IMG9", -- Explosive crate
|
||||||
|
outrider = "CHM_IMG7" -- Sport ride
|
||||||
|
},
|
||||||
|
},
|
||||||
|
needToLoad = false,
|
||||||
|
loaded = false,
|
||||||
|
target = "clubhouse_Plan_01a",
|
||||||
|
prop = "bkr_prop_rt_clubhouse_plan_01a",
|
||||||
|
renderId = -1,
|
||||||
|
movieId = -1,
|
||||||
|
stage = 0,
|
||||||
|
Position = {
|
||||||
|
none = -1,
|
||||||
|
left = 0,
|
||||||
|
middle = 1,
|
||||||
|
right = 2
|
||||||
|
},
|
||||||
|
|
||||||
|
Init = function()
|
||||||
|
if not DrawEmptyRect(BikerGang.Clubhouse.MissionsWall.target, BikerGang.Clubhouse.MissionsWall.prop) then
|
||||||
|
print("ERROR: BikerGang.Clubhouse.MissionsWall.Init() - DrawEmptyRect - Timeout")
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Enable = function(state)
|
||||||
|
BikerGang.Clubhouse.MissionsWall.needToLoad = state
|
||||||
|
end,
|
||||||
|
SelectMission = function(position)
|
||||||
|
if BikerGang.Clubhouse.MissionsWall.movieId ~= -1 then
|
||||||
|
BeginScaleformMovieMethod(BikerGang.Clubhouse.MissionsWall.movieId, "SET_SELECTED_MISSION")
|
||||||
|
ScaleformMovieMethodAddParamInt(position) -- Mission index 0 to 2 (-1 = no mission)
|
||||||
|
EndScaleformMovieMethod()
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
SetMission = function(position, title, desc, textDict, x, y)
|
||||||
|
if BikerGang.Clubhouse.MissionsWall.needToLoad then
|
||||||
|
if not HasScaleformMovieFilenameLoaded(BikerGang.Clubhouse.MissionsWall.movieId) then
|
||||||
|
BikerGang.Clubhouse.MissionsWall.movieId = LoadScaleform("BIKER_MISSION_WALL")
|
||||||
|
end
|
||||||
|
|
||||||
|
if BikerGang.Clubhouse.MissionsWall.movieId ~= -1 then
|
||||||
|
if position > -1 then
|
||||||
|
BeginScaleformMovieMethod(BikerGang.Clubhouse.MissionsWall.movieId, "SET_MISSION")
|
||||||
|
ScaleformMovieMethodAddParamInt(position) -- Mission index 0 to 2 (-1 = no mission)
|
||||||
|
ScaleformMovieMethodAddParamTextureNameString(title)
|
||||||
|
ScaleformMovieMethodAddParamTextureNameString(desc)
|
||||||
|
ScaleformMovieMethodAddParamPlayerNameString(textDict)
|
||||||
|
ScaleformMovieMethodAddParamFloat(x) -- Mission 0: world coordinates X
|
||||||
|
ScaleformMovieMethodAddParamFloat(y) -- Mission 0: world coordinates Y
|
||||||
|
EndScaleformMovieMethod()
|
||||||
|
else
|
||||||
|
-- Remove all missions
|
||||||
|
for key, value in pairs(BikerGang.Clubhouse.MissionsWall.Position) do
|
||||||
|
BikerGang.Clubhouse.MissionsWall.RemoveMission(value)
|
||||||
|
end
|
||||||
|
|
||||||
|
BikerGang.Clubhouse.MissionsWall.SelectMission(BikerGang.Clubhouse.MissionsWall.Position.none)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
RemoveMission = function(position)
|
||||||
|
BeginScaleformMovieMethod(BikerGang.Clubhouse.MissionsWall.movieId, "HIDE_MISSION")
|
||||||
|
ScaleformMovieMethodAddParamInt(position)
|
||||||
|
EndScaleformMovieMethod()
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
-- Removing missions
|
||||||
|
BikerGang.Clubhouse.MissionsWall.SelectMission(BikerGang.Clubhouse.MissionsWall.Position.none)
|
||||||
|
BikerGang.Clubhouse.MissionsWall.SetMission(BikerGang.Clubhouse.MissionsWall.Position.none)
|
||||||
|
|
||||||
|
-- Releasing handles
|
||||||
|
if IsNamedRendertargetRegistered(BikerGang.Clubhouse.MissionsWall.prop) then
|
||||||
|
ReleaseNamedRendertarget(GetHashKey(BikerGang.Clubhouse.MissionsWall.prop))
|
||||||
|
end
|
||||||
|
|
||||||
|
if HasScaleformMovieFilenameLoaded(BikerGang.Clubhouse.MissionsWall.movieId) then
|
||||||
|
SetScaleformMovieAsNoLongerNeeded(BikerGang.Clubhouse.MissionsWall.movieId)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Resetting
|
||||||
|
BikerGang.Clubhouse.MissionsWall.renderId = -1
|
||||||
|
BikerGang.Clubhouse.MissionsWall.movieId = -1
|
||||||
|
BikerGang.Clubhouse.MissionsWall.stage = 0
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
ClearAll = function()
|
||||||
|
BikerGang.Clubhouse.ClubName.Clear()
|
||||||
|
BikerGang.Clubhouse.ClubName.loaded = false
|
||||||
|
|
||||||
|
BikerGang.Clubhouse.Emblem.Clear()
|
||||||
|
BikerGang.Clubhouse.Emblem.loaded = false
|
||||||
|
|
||||||
|
BikerGang.Clubhouse.MissionsWall.Clear()
|
||||||
|
BikerGang.Clubhouse.MissionsWall.loaded = false
|
||||||
|
|
||||||
|
for key, member in pairs(BikerGang.Clubhouse.Members) do
|
||||||
|
if type(member) == "table" then
|
||||||
|
member.Clear()
|
||||||
|
member.loaded = false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CreateThread(function()
|
||||||
|
-- Removing the black texture
|
||||||
|
BikerGang.Clubhouse.Members.President.Init()
|
||||||
|
BikerGang.Clubhouse.Members.VicePresident.Init()
|
||||||
|
BikerGang.Clubhouse.Members.RoadCaptain.Init()
|
||||||
|
BikerGang.Clubhouse.Members.Enforcer.Init()
|
||||||
|
BikerGang.Clubhouse.Members.SergeantAtArms.Init()
|
||||||
|
|
||||||
|
BikerGang.Clubhouse.ClubName.Init()
|
||||||
|
BikerGang.Clubhouse.Emblem.Init()
|
||||||
|
BikerGang.Clubhouse.MissionsWall.Init()
|
||||||
|
|
||||||
|
while true do
|
||||||
|
if BikerGang.Clubhouse.ClubName.needToLoad or BikerGang.Clubhouse.Emblem.needToLoad or BikerGang.Clubhouse.MissionsWall.needToLoad or BikerGang.Clubhouse.Members.President.needToLoad or BikerGang.Clubhouse.Members.VicePresident.needToLoad or BikerGang.Clubhouse.Members.RoadCaptain.needToLoad or BikerGang.Clubhouse.Members.Enforcer.needToLoad or BikerGang.Clubhouse.Members.SergeantAtArms.needToLoad then
|
||||||
|
-- If we are inside a clubhouse, then we load
|
||||||
|
if Global.Biker.isInsideClubhouse1 or Global.Biker.isInsideClubhouse2 then
|
||||||
|
-- Club name
|
||||||
|
if BikerGang.Clubhouse.ClubName.needToLoad then
|
||||||
|
DrawClubName(BikerGang.Name.name, BikerGang.Name.color, BikerGang.Name.font)
|
||||||
|
|
||||||
|
BikerGang.Clubhouse.ClubName.loaded = true
|
||||||
|
elseif BikerGang.Clubhouse.ClubName.loaded then
|
||||||
|
BikerGang.Clubhouse.ClubName.Clear()
|
||||||
|
BikerGang.Clubhouse.ClubName.loaded = false
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Emblem
|
||||||
|
if BikerGang.Clubhouse.Emblem.needToLoad then
|
||||||
|
DrawEmblem(BikerGang.Emblem.emblem, BikerGang.Emblem.rot)
|
||||||
|
|
||||||
|
BikerGang.Clubhouse.Emblem.loaded = true
|
||||||
|
elseif BikerGang.Clubhouse.Emblem.loaded then
|
||||||
|
BikerGang.Clubhouse.Emblem.Clear()
|
||||||
|
BikerGang.Clubhouse.Emblem.loaded = false
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Missions wall
|
||||||
|
if BikerGang.Clubhouse.MissionsWall.needToLoad then
|
||||||
|
DrawMissions()
|
||||||
|
|
||||||
|
BikerGang.Clubhouse.MissionsWall.loaded = true
|
||||||
|
elseif BikerGang.Clubhouse.MissionsWall.loaded then
|
||||||
|
BikerGang.Clubhouse.MissionsWall.Clear()
|
||||||
|
BikerGang.Clubhouse.MissionsWall.loaded = false
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Members: President
|
||||||
|
for key, member in pairs(BikerGang.Clubhouse.Members) do
|
||||||
|
if type(member) == "table" then
|
||||||
|
if member.needToLoad then
|
||||||
|
DrawMember(member)
|
||||||
|
member.loaded = true
|
||||||
|
elseif member.loaded then
|
||||||
|
member.Clear()
|
||||||
|
member.loaded = false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Wait(0) -- We need to call all this every frame
|
||||||
|
else
|
||||||
|
-- Not in a clubhouse
|
||||||
|
Wait(1000)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
-- No load needed
|
||||||
|
Wait(1000)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
function DrawClubName(name, color, font)
|
||||||
|
if BikerGang.Clubhouse.ClubName.stage == 0 then
|
||||||
|
if BikerGang.Clubhouse.ClubName.renderId == -1 then
|
||||||
|
BikerGang.Clubhouse.ClubName.renderId = CreateNamedRenderTargetForModel(BikerGang.Clubhouse.ClubName.target, BikerGang.Clubhouse.ClubName.prop)
|
||||||
|
end
|
||||||
|
|
||||||
|
if BikerGang.Clubhouse.ClubName.movieId == -1 then
|
||||||
|
BikerGang.Clubhouse.ClubName.movieId = RequestScaleformMovie("CLUBHOUSE_NAME")
|
||||||
|
end
|
||||||
|
|
||||||
|
BikerGang.Clubhouse.ClubName.stage = 1
|
||||||
|
elseif BikerGang.Clubhouse.ClubName.stage == 1 then
|
||||||
|
if HasScaleformMovieLoaded(BikerGang.Clubhouse.ClubName.movieId) then
|
||||||
|
local parameters = {
|
||||||
|
p0 = {type = "string", value = name},
|
||||||
|
p1 = {type = "int", value = color},
|
||||||
|
p2 = {type = "int", value = font}
|
||||||
|
}
|
||||||
|
|
||||||
|
SetupScaleform(BikerGang.Clubhouse.ClubName.movieId, "SET_CLUBHOUSE_NAME", parameters)
|
||||||
|
|
||||||
|
BikerGang.Clubhouse.ClubName.stage = 2
|
||||||
|
else
|
||||||
|
BikerGang.Clubhouse.ClubName.movieId = RequestScaleformMovie("CLUBHOUSE_NAME")
|
||||||
|
end
|
||||||
|
elseif BikerGang.Clubhouse.ClubName.stage == 2 then
|
||||||
|
SetTextRenderId(BikerGang.Clubhouse.ClubName.renderId)
|
||||||
|
SetScriptGfxDrawOrder(4)
|
||||||
|
SetScriptGfxDrawBehindPausemenu(true)
|
||||||
|
SetScriptGfxAlign(73, 73)
|
||||||
|
DrawScaleformMovie(BikerGang.Clubhouse.ClubName.movieId, 0.0975, 0.105, 0.235, 0.35, 255, 255, 255, 255, 0)
|
||||||
|
SetTextRenderId(GetDefaultScriptRendertargetRenderId())
|
||||||
|
ResetScriptGfxAlign()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function DrawEmblem(texturesDict, rotation)
|
||||||
|
if BikerGang.Clubhouse.Emblem.stage == 0 then
|
||||||
|
if BikerGang.Clubhouse.Emblem.renderId == -1 then
|
||||||
|
BikerGang.Clubhouse.Emblem.renderId = CreateNamedRenderTargetForModel(BikerGang.Clubhouse.Emblem.target, BikerGang.Clubhouse.Emblem.prop)
|
||||||
|
end
|
||||||
|
|
||||||
|
local IsTextureDictLoaded = LoadStreamedTextureDict(texturesDict)
|
||||||
|
|
||||||
|
if not IsTextureDictLoaded then
|
||||||
|
print("ERROR: DrawEmblem - Textures dictionnary cannot be loaded.")
|
||||||
|
end
|
||||||
|
|
||||||
|
BikerGang.Clubhouse.Emblem.stage = 1
|
||||||
|
elseif BikerGang.Clubhouse.Emblem.stage == 1 then
|
||||||
|
BikerGang.Clubhouse.Emblem.renderId = CreateNamedRenderTargetForModel(BikerGang.Clubhouse.Emblem.target, BikerGang.Clubhouse.Emblem.prop)
|
||||||
|
BikerGang.Clubhouse.Emblem.stage = 2
|
||||||
|
elseif BikerGang.Clubhouse.Emblem.stage == 2 then
|
||||||
|
SetTextRenderId(BikerGang.Clubhouse.Emblem.renderId)
|
||||||
|
SetScriptGfxAlign(73, 73)
|
||||||
|
SetScriptGfxDrawOrder(4)
|
||||||
|
SetScriptGfxDrawBehindPausemenu(true)
|
||||||
|
DrawInteractiveSprite(texturesDict, texturesDict, 0.5, 0.5, 1.0, 1.0, rotation, 255, 255, 255, 255);
|
||||||
|
ResetScriptGfxAlign()
|
||||||
|
SetTextRenderId(GetDefaultScriptRendertargetRenderId())
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function DrawMissions()
|
||||||
|
if BikerGang.Clubhouse.MissionsWall.stage == 0 then
|
||||||
|
if BikerGang.Clubhouse.MissionsWall.renderId == -1 then
|
||||||
|
BikerGang.Clubhouse.MissionsWall.renderId = CreateNamedRenderTargetForModel(BikerGang.Clubhouse.MissionsWall.target, BikerGang.Clubhouse.MissionsWall.prop)
|
||||||
|
end
|
||||||
|
|
||||||
|
BikerGang.Clubhouse.MissionsWall.stage = 1
|
||||||
|
elseif BikerGang.Clubhouse.MissionsWall.stage == 1 then
|
||||||
|
if HasScaleformMovieLoaded(BikerGang.Clubhouse.MissionsWall.movieId) then
|
||||||
|
BikerGang.Clubhouse.MissionsWall.stage = 2
|
||||||
|
else
|
||||||
|
BikerGang.Clubhouse.MissionsWall.movieId = RequestScaleformMovie("BIKER_MISSION_WALL")
|
||||||
|
end
|
||||||
|
elseif BikerGang.Clubhouse.MissionsWall.stage == 2 then
|
||||||
|
SetTextRenderId(BikerGang.Clubhouse.MissionsWall.renderId)
|
||||||
|
SetScriptGfxDrawOrder(4)
|
||||||
|
SetScriptGfxDrawBehindPausemenu(false)
|
||||||
|
DrawScaleformMovie(BikerGang.Clubhouse.MissionsWall.movieId, 0.5, 0.5, 1.0, 1.0, 255, 255, 255, 255, 0)
|
||||||
|
SetTextRenderId(GetDefaultScriptRendertargetRenderId())
|
||||||
|
SetScaleformFitRendertarget(BikerGang.Clubhouse.MissionsWall.movieId, true)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function DrawMember(member)
|
||||||
|
if member.stage == 0 then
|
||||||
|
member.stage = 1
|
||||||
|
elseif member.stage == 1 then
|
||||||
|
member.renderId = CreateNamedRenderTargetForModel(member.target, member.prop)
|
||||||
|
member.stage = 2
|
||||||
|
elseif member.stage == 2 then
|
||||||
|
if HasStreamedTextureDictLoaded(member.textureDict) then
|
||||||
|
SetTextRenderId(member.renderId)
|
||||||
|
SetScriptGfxAlign(73, 73)
|
||||||
|
DrawInteractiveSprite(member.textureDict, member.textureDict, 0.5, 0.5, 1.0, 1.0, 0.0, 255, 255, 255, 255)
|
||||||
|
ResetScriptGfxAlign()
|
||||||
|
SetTextRenderId(GetDefaultScriptRendertargetRenderId())
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
87
resources/[core]/bob74_ipl/dlc_bikers/meth.lua
Normal file
87
resources/[core]/bob74_ipl/dlc_bikers/meth.lua
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
-- Meth lab: 1009.5, -3196.6, -38.99682
|
||||||
|
exports('GetBikerMethLabObject', function()
|
||||||
|
return BikerMethLab
|
||||||
|
end)
|
||||||
|
|
||||||
|
BikerMethLab = {
|
||||||
|
interiorId = 247041,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Interior = {
|
||||||
|
ipl = "bkr_biker_interior_placement_interior_2_biker_dlc_int_ware01_milo",
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(BikerMethLab.Ipl.Interior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(BikerMethLab.Ipl.Interior.ipl, false)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Style = {
|
||||||
|
none = "",
|
||||||
|
empty = "meth_lab_empty",
|
||||||
|
basic = {
|
||||||
|
"meth_lab_basic",
|
||||||
|
"meth_lab_setup"
|
||||||
|
},
|
||||||
|
upgrade = {
|
||||||
|
"meth_lab_upgrade",
|
||||||
|
"meth_lab_setup"
|
||||||
|
},
|
||||||
|
|
||||||
|
Set = function(style, refresh)
|
||||||
|
BikerMethLab.Style.Clear(false)
|
||||||
|
|
||||||
|
if style ~= "" then
|
||||||
|
SetIplPropState(BikerMethLab.interiorId, style, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(BikerMethLab.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerMethLab.interiorId, {
|
||||||
|
BikerMethLab.Style.empty,
|
||||||
|
BikerMethLab.Style.basic,
|
||||||
|
BikerMethLab.Style.upgrade
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Security = {
|
||||||
|
none = "",
|
||||||
|
upgrade = "meth_lab_security_high",
|
||||||
|
|
||||||
|
Set = function(security, refresh)
|
||||||
|
BikerMethLab.Security.Clear(false)
|
||||||
|
|
||||||
|
if security ~= "" then
|
||||||
|
SetIplPropState(BikerMethLab.interiorId, security, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(BikerMethLab.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerMethLab.interiorId, BikerMethLab.Security.upgrade, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Details = {
|
||||||
|
production = "meth_lab_production", -- Products
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(BikerMethLab.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
BikerMethLab.Ipl.Interior.Load()
|
||||||
|
BikerMethLab.Style.Set(BikerMethLab.Style.empty)
|
||||||
|
BikerMethLab.Security.Set(BikerMethLab.Security.none)
|
||||||
|
BikerMethLab.Details.Enable(BikerMethLab.Details.production, false)
|
||||||
|
|
||||||
|
RefreshInterior(BikerMethLab.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
549
resources/[core]/bob74_ipl/dlc_bikers/weed.lua
Normal file
549
resources/[core]/bob74_ipl/dlc_bikers/weed.lua
Normal file
@ -0,0 +1,549 @@
|
|||||||
|
-- Weed farm: 1051.491, -3196.536, -39.14842
|
||||||
|
exports('GetBikerWeedFarmObject', function()
|
||||||
|
return BikerWeedFarm
|
||||||
|
end)
|
||||||
|
|
||||||
|
BikerWeedFarm = {
|
||||||
|
interiorId = 247297,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Interior = {
|
||||||
|
ipl = "bkr_biker_interior_placement_interior_3_biker_dlc_int_ware02_milo",
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(BikerWeedFarm.Ipl.Interior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(BikerWeedFarm.Ipl.Interior.ipl, false)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Style = {
|
||||||
|
basic = "weed_standard_equip",
|
||||||
|
upgrade = "weed_upgrade_equip",
|
||||||
|
|
||||||
|
Set = function(style, refresh)
|
||||||
|
BikerWeedFarm.Style.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, style, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, {
|
||||||
|
BikerWeedFarm.Style.basic,
|
||||||
|
BikerWeedFarm.Style.upgrade
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Security = {
|
||||||
|
basic = "weed_low_security",
|
||||||
|
upgrade = "weed_security_upgrade",
|
||||||
|
|
||||||
|
Set = function(security, refresh)
|
||||||
|
BikerWeedFarm.Security.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, security, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, {
|
||||||
|
BikerWeedFarm.Security.basic,
|
||||||
|
BikerWeedFarm.Security.upgrade
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Plant1 = {
|
||||||
|
Stage = {
|
||||||
|
small = "weed_growtha_stage1",
|
||||||
|
medium = "weed_growtha_stage2",
|
||||||
|
full = "weed_growtha_stage3",
|
||||||
|
|
||||||
|
Set = function(stage, refresh)
|
||||||
|
BikerWeedFarm.Plant1.Stage.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, stage, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, {
|
||||||
|
BikerWeedFarm.Plant1.Stage.small,
|
||||||
|
BikerWeedFarm.Plant1.Stage.medium,
|
||||||
|
BikerWeedFarm.Plant1.Stage.full
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Light = {
|
||||||
|
basic = "light_growtha_stage23_standard",
|
||||||
|
upgrade = "light_growtha_stage23_upgrade",
|
||||||
|
|
||||||
|
Set = function(light, refresh)
|
||||||
|
BikerWeedFarm.Plant1.Light.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, light, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, {
|
||||||
|
BikerWeedFarm.Plant1.Light.basic,
|
||||||
|
BikerWeedFarm.Plant1.Light.upgrade
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Hose = {
|
||||||
|
Enable = function(state, refresh)
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, "weed_hosea", state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Set = function(stage, upgrade, refresh)
|
||||||
|
BikerWeedFarm.Plant1.Stage.Set(stage, false)
|
||||||
|
BikerWeedFarm.Plant1.Light.Set(upgrade, false)
|
||||||
|
BikerWeedFarm.Plant1.Hose.Enable(true, true)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
BikerWeedFarm.Plant1.Stage.Clear()
|
||||||
|
BikerWeedFarm.Plant1.Light.Clear()
|
||||||
|
BikerWeedFarm.Plant1.Hose.Enable(false, true)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Plant2 = {
|
||||||
|
Stage = {
|
||||||
|
small = "weed_growthb_stage1",
|
||||||
|
medium = "weed_growthb_stage2",
|
||||||
|
full = "weed_growthb_stage3",
|
||||||
|
|
||||||
|
Set = function(stage, refresh)
|
||||||
|
BikerWeedFarm.Plant2.Stage.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, stage, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, {
|
||||||
|
BikerWeedFarm.Plant2.Stage.small,
|
||||||
|
BikerWeedFarm.Plant2.Stage.medium,
|
||||||
|
BikerWeedFarm.Plant2.Stage.full
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Light = {
|
||||||
|
basic = "light_growthb_stage23_standard",
|
||||||
|
upgrade = "light_growthb_stage23_upgrade",
|
||||||
|
|
||||||
|
Set = function(light, refresh)
|
||||||
|
BikerWeedFarm.Plant2.Light.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, light, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, {
|
||||||
|
BikerWeedFarm.Plant2.Light.basic,
|
||||||
|
BikerWeedFarm.Plant2.Light.upgrade
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Hose = {
|
||||||
|
Enable = function(state, refresh)
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, "weed_hoseb", state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Set = function(stage, upgrade, refresh)
|
||||||
|
BikerWeedFarm.Plant2.Stage.Set(stage, false)
|
||||||
|
BikerWeedFarm.Plant2.Light.Set(upgrade, false)
|
||||||
|
BikerWeedFarm.Plant2.Hose.Enable(true, true)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
BikerWeedFarm.Plant2.Stage.Clear()
|
||||||
|
BikerWeedFarm.Plant2.Light.Clear()
|
||||||
|
BikerWeedFarm.Plant2.Hose.Enable(false, true)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Plant3 = {
|
||||||
|
Stage = {
|
||||||
|
small = "weed_growthc_stage1",
|
||||||
|
medium = "weed_growthc_stage2",
|
||||||
|
full = "weed_growthc_stage3",
|
||||||
|
|
||||||
|
Set = function(stage, refresh)
|
||||||
|
BikerWeedFarm.Plant3.Stage.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, stage, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, {
|
||||||
|
BikerWeedFarm.Plant3.Stage.small,
|
||||||
|
BikerWeedFarm.Plant3.Stage.medium,
|
||||||
|
BikerWeedFarm.Plant3.Stage.full
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Light = {
|
||||||
|
basic = "light_growthc_stage23_standard",
|
||||||
|
upgrade = "light_growthc_stage23_upgrade",
|
||||||
|
|
||||||
|
Set = function(light, refresh)
|
||||||
|
BikerWeedFarm.Plant3.Light.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, light, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, {
|
||||||
|
BikerWeedFarm.Plant3.Light.basic,
|
||||||
|
BikerWeedFarm.Plant3.Light.upgrade
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Hose = {
|
||||||
|
Enable = function(state, refresh)
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, "weed_hosec", state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Set = function(stage, upgrade, refresh)
|
||||||
|
BikerWeedFarm.Plant3.Stage.Set(stage, false)
|
||||||
|
BikerWeedFarm.Plant3.Light.Set(upgrade, false)
|
||||||
|
BikerWeedFarm.Plant3.Hose.Enable(true, true)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
BikerWeedFarm.Plant3.Stage.Clear()
|
||||||
|
BikerWeedFarm.Plant3.Light.Clear()
|
||||||
|
BikerWeedFarm.Plant3.Hose.Enable(false, true)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Plant4 = {
|
||||||
|
Stage = {
|
||||||
|
small = "weed_growthd_stage1",
|
||||||
|
medium = "weed_growthd_stage2",
|
||||||
|
full = "weed_growthd_stage3",
|
||||||
|
|
||||||
|
Set = function(stage, refresh)
|
||||||
|
BikerWeedFarm.Plant4.Stage.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, stage, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, {
|
||||||
|
BikerWeedFarm.Plant4.Stage.small,
|
||||||
|
BikerWeedFarm.Plant4.Stage.medium,
|
||||||
|
BikerWeedFarm.Plant4.Stage.full
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Light = {
|
||||||
|
basic = "light_growthd_stage23_standard",
|
||||||
|
upgrade = "light_growthd_stage23_upgrade",
|
||||||
|
|
||||||
|
Set = function(light, refresh)
|
||||||
|
BikerWeedFarm.Plant4.Light.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, light, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, {
|
||||||
|
BikerWeedFarm.Plant4.Light.basic,
|
||||||
|
BikerWeedFarm.Plant4.Light.upgrade
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Hose = {
|
||||||
|
Enable = function(state, refresh)
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, "weed_hosed", state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Set = function(stage, upgrade, refresh)
|
||||||
|
BikerWeedFarm.Plant4.Stage.Set(stage, false)
|
||||||
|
BikerWeedFarm.Plant4.Light.Set(upgrade, false)
|
||||||
|
BikerWeedFarm.Plant4.Hose.Enable(true, true)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
BikerWeedFarm.Plant4.Stage.Clear()
|
||||||
|
BikerWeedFarm.Plant4.Light.Clear()
|
||||||
|
BikerWeedFarm.Plant4.Hose.Enable(false, true)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Plant5 = {
|
||||||
|
Stage = {
|
||||||
|
small = "weed_growthe_stage1",
|
||||||
|
medium = "weed_growthe_stage2",
|
||||||
|
full = "weed_growthe_stage3",
|
||||||
|
|
||||||
|
Set = function(stage, refresh)
|
||||||
|
BikerWeedFarm.Plant5.Stage.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, stage, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, {
|
||||||
|
BikerWeedFarm.Plant5.Stage.small,
|
||||||
|
BikerWeedFarm.Plant5.Stage.medium,
|
||||||
|
BikerWeedFarm.Plant5.Stage.full
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Light = {
|
||||||
|
basic = "light_growthe_stage23_standard",
|
||||||
|
upgrade = "light_growthe_stage23_upgrade",
|
||||||
|
|
||||||
|
Set = function(light, refresh)
|
||||||
|
BikerWeedFarm.Plant5.Light.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, light, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, {
|
||||||
|
BikerWeedFarm.Plant5.Light.basic,
|
||||||
|
BikerWeedFarm.Plant5.Light.upgrade
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Hose = {
|
||||||
|
Enable = function(state, refresh)
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, "weed_hosee", state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Set = function(stage, upgrade, refresh)
|
||||||
|
BikerWeedFarm.Plant5.Stage.Set(stage, false)
|
||||||
|
BikerWeedFarm.Plant5.Light.Set(upgrade, false)
|
||||||
|
BikerWeedFarm.Plant5.Hose.Enable(true, true)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
BikerWeedFarm.Plant5.Stage.Clear()
|
||||||
|
BikerWeedFarm.Plant5.Light.Clear()
|
||||||
|
BikerWeedFarm.Plant5.Hose.Enable(false, true)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Plant6 = {
|
||||||
|
Stage = {
|
||||||
|
small = "weed_growthf_stage1",
|
||||||
|
medium = "weed_growthf_stage2",
|
||||||
|
full = "weed_growthf_stage3",
|
||||||
|
|
||||||
|
Set = function(stage, refresh)
|
||||||
|
BikerWeedFarm.Plant6.Stage.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, stage, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, {
|
||||||
|
BikerWeedFarm.Plant6.Stage.small,
|
||||||
|
BikerWeedFarm.Plant6.Stage.medium,
|
||||||
|
BikerWeedFarm.Plant6.Stage.full
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Light = {
|
||||||
|
basic = "light_growthf_stage23_standard",
|
||||||
|
upgrade = "light_growthf_stage23_upgrade",
|
||||||
|
|
||||||
|
Set = function(light, refresh)
|
||||||
|
BikerWeedFarm.Plant6.Light.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, light, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, {
|
||||||
|
BikerWeedFarm.Plant6.Light.basic,
|
||||||
|
BikerWeedFarm.Plant6.Light.upgrade
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Hose = {
|
||||||
|
Enable = function(state, refresh)
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, "weed_hosef", state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Set = function(stage, upgrade, refresh)
|
||||||
|
BikerWeedFarm.Plant6.Stage.Set(stage, false)
|
||||||
|
BikerWeedFarm.Plant6.Light.Set(upgrade, false)
|
||||||
|
BikerWeedFarm.Plant6.Hose.Enable(true, true)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
BikerWeedFarm.Plant6.Stage.Clear()
|
||||||
|
BikerWeedFarm.Plant6.Light.Clear()
|
||||||
|
BikerWeedFarm.Plant6.Hose.Enable(false, true)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Plant7 = {
|
||||||
|
Stage = {
|
||||||
|
small = "weed_growthg_stage1",
|
||||||
|
medium = "weed_growthg_stage2",
|
||||||
|
full = "weed_growthg_stage3",
|
||||||
|
|
||||||
|
Set = function(stage, refresh)
|
||||||
|
BikerWeedFarm.Plant7.Stage.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, stage, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, {
|
||||||
|
BikerWeedFarm.Plant7.Stage.small,
|
||||||
|
BikerWeedFarm.Plant7.Stage.medium,
|
||||||
|
BikerWeedFarm.Plant7.Stage.full
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Light = {
|
||||||
|
basic = "light_growthg_stage23_standard",
|
||||||
|
upgrade = "light_growthg_stage23_upgrade",
|
||||||
|
|
||||||
|
Set = function(light, refresh)
|
||||||
|
BikerWeedFarm.Plant7.Light.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, light, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, {
|
||||||
|
BikerWeedFarm.Plant7.Light.basic,
|
||||||
|
BikerWeedFarm.Plant7.Light.upgrade
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Hose = {
|
||||||
|
Enable = function(state, refresh)
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, "weed_hoseg", state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Set = function(stage, upgrade, refresh)
|
||||||
|
BikerWeedFarm.Plant7.Stage.Set(stage, false)
|
||||||
|
BikerWeedFarm.Plant7.Light.Set(upgrade, false)
|
||||||
|
BikerWeedFarm.Plant7.Hose.Enable(true, true)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
BikerWeedFarm.Plant7.Stage.Clear()
|
||||||
|
BikerWeedFarm.Plant7.Light.Clear()
|
||||||
|
BikerWeedFarm.Plant7.Hose.Enable(false, true)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Plant8 = {
|
||||||
|
Stage = {
|
||||||
|
small = "weed_growthh_stage1",
|
||||||
|
medium = "weed_growthh_stage2",
|
||||||
|
full = "weed_growthh_stage3",
|
||||||
|
|
||||||
|
Set = function(stage, refresh)
|
||||||
|
BikerWeedFarm.Plant8.Stage.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, stage, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, {
|
||||||
|
BikerWeedFarm.Plant8.Stage.small,
|
||||||
|
BikerWeedFarm.Plant8.Stage.medium,
|
||||||
|
BikerWeedFarm.Plant8.Stage.full
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Light = {
|
||||||
|
basic = "light_growthh_stage23_standard",
|
||||||
|
upgrade = "light_growthh_stage23_upgrade",
|
||||||
|
|
||||||
|
Set = function(light, refresh)
|
||||||
|
BikerWeedFarm.Plant8.Light.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, light, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, {
|
||||||
|
BikerWeedFarm.Plant8.Light.basic,
|
||||||
|
BikerWeedFarm.Plant8.Light.upgrade
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Hose = {
|
||||||
|
Enable = function(state, refresh)
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, "weed_hoseh", state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Set = function(stage, upgrade, refresh)
|
||||||
|
BikerWeedFarm.Plant8.Stage.Set(stage, false)
|
||||||
|
BikerWeedFarm.Plant8.Light.Set(upgrade, false)
|
||||||
|
BikerWeedFarm.Plant8.Hose.Enable(true, true)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
BikerWeedFarm.Plant8.Stage.Clear()
|
||||||
|
BikerWeedFarm.Plant8.Light.Clear()
|
||||||
|
BikerWeedFarm.Plant8.Hose.Enable(false, true)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Plant9 = {
|
||||||
|
Stage = {
|
||||||
|
small = "weed_growthi_stage1",
|
||||||
|
medium = "weed_growthi_stage2",
|
||||||
|
full = "weed_growthi_stage3",
|
||||||
|
|
||||||
|
Set = function(stage, refresh)
|
||||||
|
BikerWeedFarm.Plant9.Stage.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, stage, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, {
|
||||||
|
BikerWeedFarm.Plant9.Stage.small,
|
||||||
|
BikerWeedFarm.Plant9.Stage.medium,
|
||||||
|
BikerWeedFarm.Plant9.Stage.full
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Light = {
|
||||||
|
basic = "light_growthi_stage23_standard",
|
||||||
|
upgrade = "light_growthi_stage23_upgrade",
|
||||||
|
|
||||||
|
Set = function(light, refresh)
|
||||||
|
BikerWeedFarm.Plant9.Light.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, light, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, {
|
||||||
|
BikerWeedFarm.Plant9.Light.basic,
|
||||||
|
BikerWeedFarm.Plant9.Light.upgrade
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Hose = {
|
||||||
|
Enable = function(state, refresh)
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, "weed_hosei", state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Set = function(stage, upgrade, refresh)
|
||||||
|
BikerWeedFarm.Plant9.Stage.Set(stage, false)
|
||||||
|
BikerWeedFarm.Plant9.Light.Set(upgrade, false)
|
||||||
|
BikerWeedFarm.Plant9.Hose.Enable(true, true)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
BikerWeedFarm.Plant9.Stage.Clear()
|
||||||
|
BikerWeedFarm.Plant9.Light.Clear()
|
||||||
|
BikerWeedFarm.Plant9.Hose.Enable(false, true)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Details = {
|
||||||
|
production = "weed_production", -- Weed on the tables
|
||||||
|
fans = "weed_set_up", -- Fans + mold buckets
|
||||||
|
drying = "weed_drying", -- Drying weed hooked to the ceiling
|
||||||
|
chairs = "weed_chairs", -- Chairs at the tables
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(BikerWeedFarm.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
BikerWeedFarm.Ipl.Interior.Load()
|
||||||
|
BikerWeedFarm.Style.Set(BikerWeedFarm.Style.upgrade)
|
||||||
|
BikerWeedFarm.Security.Set(BikerWeedFarm.Security.basic)
|
||||||
|
BikerWeedFarm.Details.Enable(BikerWeedFarm.Details.drying, false)
|
||||||
|
BikerWeedFarm.Details.Enable(BikerWeedFarm.Details.chairs, false)
|
||||||
|
BikerWeedFarm.Details.Enable(BikerWeedFarm.Details.production, false)
|
||||||
|
|
||||||
|
BikerWeedFarm.Details.Enable({
|
||||||
|
BikerWeedFarm.Details.production,
|
||||||
|
BikerWeedFarm.Details.chairs,
|
||||||
|
BikerWeedFarm.Details.drying
|
||||||
|
}, true)
|
||||||
|
|
||||||
|
BikerWeedFarm.Plant1.Set(BikerWeedFarm.Plant1.Stage.medium, BikerWeedFarm.Plant1.Light.basic)
|
||||||
|
BikerWeedFarm.Plant2.Set(BikerWeedFarm.Plant2.Stage.full, BikerWeedFarm.Plant2.Light.basic)
|
||||||
|
BikerWeedFarm.Plant3.Set(BikerWeedFarm.Plant3.Stage.medium, BikerWeedFarm.Plant3.Light.basic)
|
||||||
|
BikerWeedFarm.Plant4.Set(BikerWeedFarm.Plant4.Stage.full, BikerWeedFarm.Plant4.Light.basic)
|
||||||
|
BikerWeedFarm.Plant5.Set(BikerWeedFarm.Plant5.Stage.medium, BikerWeedFarm.Plant5.Light.basic)
|
||||||
|
BikerWeedFarm.Plant6.Set(BikerWeedFarm.Plant6.Stage.full, BikerWeedFarm.Plant6.Light.basic)
|
||||||
|
BikerWeedFarm.Plant7.Set(BikerWeedFarm.Plant7.Stage.medium, BikerWeedFarm.Plant7.Light.basic)
|
||||||
|
BikerWeedFarm.Plant8.Set(BikerWeedFarm.Plant8.Stage.full, BikerWeedFarm.Plant8.Light.basic)
|
||||||
|
BikerWeedFarm.Plant9.Set(BikerWeedFarm.Plant9.Stage.full, BikerWeedFarm.Plant9.Light.basic)
|
||||||
|
|
||||||
|
RefreshInterior(BikerWeedFarm.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
70
resources/[core]/bob74_ipl/dlc_casino/casino.lua
Normal file
70
resources/[core]/bob74_ipl/dlc_casino/casino.lua
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
exports('GetDiamondCasinoObject', function()
|
||||||
|
return DiamondCasino
|
||||||
|
end)
|
||||||
|
|
||||||
|
DiamondCasino = {
|
||||||
|
Ipl = {
|
||||||
|
Building = {
|
||||||
|
ipl = {
|
||||||
|
"hei_dlc_windows_casino",
|
||||||
|
"hei_dlc_casino_aircon",
|
||||||
|
"vw_dlc_casino_door",
|
||||||
|
"hei_dlc_casino_door"
|
||||||
|
},
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(DiamondCasino.Ipl.Building.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(DiamondCasino.Ipl.Building.ipl, false)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Main = {
|
||||||
|
ipl = "vw_casino_main",
|
||||||
|
|
||||||
|
-- Normal Version: 1110.20, 216.60 -49.45
|
||||||
|
-- Heist Version: 2490.67, -280.40, -58.71
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(DiamondCasino.Ipl.Main.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(DiamondCasino.Ipl.Main.ipl, false)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Garage = {
|
||||||
|
ipl = "vw_casino_garage",
|
||||||
|
|
||||||
|
-- Loading Bay Garage: 2536.276, -278.98, -64.722
|
||||||
|
-- Vault Lobby: 2483.151, -278.58, -70.694
|
||||||
|
-- Vault: 2516.765, -238.056, -70.737
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(DiamondCasino.Ipl.Garage.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(DiamondCasino.Ipl.Garage.ipl, false)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Carpark = {
|
||||||
|
ipl = "vw_casino_carpark",
|
||||||
|
|
||||||
|
-- Carpark Garage: 1380.000 200.000 -50.000
|
||||||
|
-- VIP Carpark Garage: 1295.000 230.000 -50.000
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(DiamondCasino.Ipl.Carpark.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(DiamondCasino.Ipl.Carpark.ipl, false)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
DiamondCasino.Ipl.Building.Load()
|
||||||
|
DiamondCasino.Ipl.Main.Load()
|
||||||
|
DiamondCasino.Ipl.Carpark.Load()
|
||||||
|
DiamondCasino.Ipl.Garage.Load()
|
||||||
|
end
|
||||||
|
}
|
||||||
335
resources/[core]/bob74_ipl/dlc_casino/penthouse.lua
Normal file
335
resources/[core]/bob74_ipl/dlc_casino/penthouse.lua
Normal file
@ -0,0 +1,335 @@
|
|||||||
|
exports('GetDiamondPenthouseObject', function()
|
||||||
|
return DiamondPenthouse
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- Penthouse: 976.636 70.295 115.164
|
||||||
|
|
||||||
|
DiamondPenthouse = {
|
||||||
|
interiorId = 274689,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Interior = {
|
||||||
|
ipl = "vw_casino_penthouse",
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(DiamondPenthouse.Ipl.Interior.ipl, true)
|
||||||
|
SetIplPropState(DiamondPenthouse.interiorId, "Set_Pent_Tint_Shell", true, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(DiamondPenthouse.Ipl.Interior.ipl, false)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Colors = {
|
||||||
|
default = 0,
|
||||||
|
sharp = 1,
|
||||||
|
vibrant = 2,
|
||||||
|
timeless = 3
|
||||||
|
},
|
||||||
|
Interior = {
|
||||||
|
Walls = {
|
||||||
|
SetColor = function(color, refresh)
|
||||||
|
SetInteriorEntitySetColor(DiamondPenthouse.interiorId, "Set_Pent_Tint_Shell", color)
|
||||||
|
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(DiamondPenthouse.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Pattern = {
|
||||||
|
pattern01 = "Set_Pent_Pattern_01",
|
||||||
|
pattern02 = "Set_Pent_Pattern_02",
|
||||||
|
pattern03 = "Set_Pent_Pattern_03",
|
||||||
|
pattern04 = "Set_Pent_Pattern_04",
|
||||||
|
pattern05 = "Set_Pent_Pattern_05",
|
||||||
|
pattern06 = "Set_Pent_Pattern_06",
|
||||||
|
pattern07 = "Set_Pent_Pattern_07",
|
||||||
|
pattern08 = "Set_Pent_Pattern_08",
|
||||||
|
pattern09 = "Set_Pent_Pattern_09",
|
||||||
|
|
||||||
|
Set = function(pattern, refresh)
|
||||||
|
DiamondPenthouse.Interior.Pattern.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(DiamondPenthouse.interiorId, pattern, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
for key, value in pairs(DiamondPenthouse.Interior.Pattern) do
|
||||||
|
if type(value) == "string" then
|
||||||
|
SetIplPropState(DiamondPenthouse.interiorId, value, false, refresh)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
SetColor = function(pattern, color, refresh)
|
||||||
|
SetInteriorEntitySetColor(DiamondPenthouse.interiorId, pattern, color)
|
||||||
|
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(DiamondPenthouse.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
SpaBar = {
|
||||||
|
open = "Set_Pent_Spa_Bar_Open",
|
||||||
|
closed = "Set_Pent_Spa_Bar_Closed",
|
||||||
|
|
||||||
|
Set = function(state, refresh)
|
||||||
|
DiamondPenthouse.Interior.SpaBar.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(DiamondPenthouse.interiorId, state, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
for key, value in pairs(DiamondPenthouse.Interior.SpaBar) do
|
||||||
|
if type(value) == "string" then
|
||||||
|
SetIplPropState(DiamondPenthouse.interiorId, value, false, refresh)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
MediaBar = {
|
||||||
|
open = "Set_Pent_Media_Bar_Open",
|
||||||
|
closed = "Set_Pent_Media_Bar_Closed",
|
||||||
|
|
||||||
|
Set = function(state, refresh)
|
||||||
|
DiamondPenthouse.Interior.MediaBar.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(DiamondPenthouse.interiorId, state, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
for key, value in pairs(DiamondPenthouse.Interior.MediaBar) do
|
||||||
|
if type(value) == "string" then
|
||||||
|
SetIplPropState(DiamondPenthouse.interiorId, value, false, refresh)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Dealer = {
|
||||||
|
open = "Set_Pent_Dealer",
|
||||||
|
closed = "Set_Pent_NoDealer",
|
||||||
|
|
||||||
|
Set = function(state, refresh)
|
||||||
|
DiamondPenthouse.Interior.Dealer.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(DiamondPenthouse.interiorId, state, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
for key, value in pairs(DiamondPenthouse.Interior.Dealer) do
|
||||||
|
if type(value) == "string" then
|
||||||
|
SetIplPropState(DiamondPenthouse.interiorId, value, false, refresh)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Arcade = {
|
||||||
|
none = "",
|
||||||
|
retro = "Set_Pent_Arcade_Retro",
|
||||||
|
modern = "Set_Pent_Arcade_Modern",
|
||||||
|
|
||||||
|
Set = function(arcade, refresh)
|
||||||
|
DiamondPenthouse.Interior.Arcade.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(DiamondPenthouse.interiorId, arcade, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
for key, value in pairs(DiamondPenthouse.Interior.Arcade) do
|
||||||
|
if type(value) == "string" then
|
||||||
|
SetIplPropState(DiamondPenthouse.interiorId, value, false, refresh)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Clutter = {
|
||||||
|
bar = "Set_Pent_Bar_Clutter",
|
||||||
|
clutter01 = "Set_Pent_Clutter_01",
|
||||||
|
clutter02 = "Set_Pent_Clutter_02",
|
||||||
|
clutter03 = "Set_Pent_Clutter_03",
|
||||||
|
|
||||||
|
Set = function(clutter, refresh)
|
||||||
|
DiamondPenthouse.Interior.Clutter.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(DiamondPenthouse.interiorId, clutter, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
for key, value in pairs(DiamondPenthouse.Interior.Clutter) do
|
||||||
|
if type(value) == "string" then
|
||||||
|
SetIplPropState(DiamondPenthouse.interiorId, value, false, refresh)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
BarLight = {
|
||||||
|
none = "",
|
||||||
|
light0 = "set_pent_bar_light_0",
|
||||||
|
light1 = "set_pent_bar_light_01",
|
||||||
|
light2 = "set_pent_bar_light_02",
|
||||||
|
|
||||||
|
Set = function(light, refresh)
|
||||||
|
DiamondPenthouse.Interior.BarLight.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(DiamondPenthouse.interiorId, light, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
for key, value in pairs(DiamondPenthouse.Interior.BarLight) do
|
||||||
|
if type(value) == "string" then
|
||||||
|
SetIplPropState(DiamondPenthouse.interiorId, value, false, refresh)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
BarParty = {
|
||||||
|
none = "",
|
||||||
|
party0 = "set_pent_bar_party_0",
|
||||||
|
party1 = "set_pent_bar_party_1",
|
||||||
|
party2 = "set_pent_bar_party_2",
|
||||||
|
partyafter = "set_pent_bar_party_after",
|
||||||
|
|
||||||
|
Set = function(party, refresh)
|
||||||
|
DiamondPenthouse.Interior.BarParty.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(DiamondPenthouse.interiorId, party, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
for key, value in pairs(DiamondPenthouse.Interior.BarParty) do
|
||||||
|
if type(value) == "string" then
|
||||||
|
SetIplPropState(DiamondPenthouse.interiorId, value, false, refresh)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Blockers = {
|
||||||
|
Guest = {
|
||||||
|
enabled = "Set_Pent_GUEST_BLOCKER",
|
||||||
|
disabled = "",
|
||||||
|
|
||||||
|
Set = function(blocker, refresh)
|
||||||
|
DiamondPenthouse.Interior.Blockers.Guest.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(DiamondPenthouse.interiorId, blocker, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
for key, value in pairs(DiamondPenthouse.Interior.Blockers.Guest) do
|
||||||
|
if type(value) == "string" then
|
||||||
|
SetIplPropState(DiamondPenthouse.interiorId, value, false, refresh)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Lounge = {
|
||||||
|
enabled = "Set_Pent_LOUNGE_BLOCKER",
|
||||||
|
disabled = "",
|
||||||
|
|
||||||
|
Set = function(blocker, refresh)
|
||||||
|
DiamondPenthouse.Interior.Blockers.Lounge.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(DiamondPenthouse.interiorId, blocker, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
for key, value in pairs(DiamondPenthouse.Interior.Blockers.Lounge) do
|
||||||
|
if type(value) == "string" then
|
||||||
|
SetIplPropState(DiamondPenthouse.interiorId, value, false, refresh)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Office = {
|
||||||
|
enabled = "Set_Pent_OFFICE_BLOCKER",
|
||||||
|
disabled = "",
|
||||||
|
|
||||||
|
Set = function(blocker, refresh)
|
||||||
|
DiamondPenthouse.Interior.Blockers.Office.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(DiamondPenthouse.interiorId, blocker, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
for key, value in pairs(DiamondPenthouse.Interior.Blockers.Office) do
|
||||||
|
if type(value) == "string" then
|
||||||
|
SetIplPropState(DiamondPenthouse.interiorId, value, false, refresh)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Cinema = {
|
||||||
|
enabled = "Set_Pent_CINE_BLOCKER",
|
||||||
|
disabled = "",
|
||||||
|
|
||||||
|
Set = function(blocker, refresh)
|
||||||
|
DiamondPenthouse.Interior.Blockers.Cinema.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(DiamondPenthouse.interiorId, blocker, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
for key, value in pairs(DiamondPenthouse.Interior.Blockers.Cinema) do
|
||||||
|
if type(value) == "string" then
|
||||||
|
SetIplPropState(DiamondPenthouse.interiorId, value, false, refresh)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Spa = {
|
||||||
|
enabled = "Set_Pent_SPA_BLOCKER",
|
||||||
|
disabled = "",
|
||||||
|
|
||||||
|
Set = function(blocker, refresh)
|
||||||
|
DiamondPenthouse.Interior.Blockers.Spa.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(DiamondPenthouse.interiorId, blocker, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
for key, value in pairs(DiamondPenthouse.Interior.Blockers.Spa) do
|
||||||
|
if type(value) == "string" then
|
||||||
|
SetIplPropState(DiamondPenthouse.interiorId, value, false, refresh)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Bar = {
|
||||||
|
enabled = "Set_Pent_BAR_BLOCKER",
|
||||||
|
disabled = "",
|
||||||
|
|
||||||
|
Set = function(blocker, refresh)
|
||||||
|
DiamondPenthouse.Interior.Blockers.Bar.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(DiamondPenthouse.interiorId, blocker, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
for key, value in pairs(DiamondPenthouse.Interior.Blockers.Bar) do
|
||||||
|
if type(value) == "string" then
|
||||||
|
SetIplPropState(DiamondPenthouse.interiorId, value, false, refresh)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
EnableAllBlockers = function()
|
||||||
|
DiamondPenthouse.Interior.Blockers.Bar.Set(DiamondPenthouse.Interior.Blockers.Bar.enabled)
|
||||||
|
DiamondPenthouse.Interior.Blockers.Guest.Set(DiamondPenthouse.Interior.Blockers.Guest.enabled)
|
||||||
|
DiamondPenthouse.Interior.Blockers.Spa.Set(DiamondPenthouse.Interior.Blockers.Spa.enabled)
|
||||||
|
DiamondPenthouse.Interior.Blockers.Cinema.Set(DiamondPenthouse.Interior.Blockers.Cinema.enabled)
|
||||||
|
DiamondPenthouse.Interior.Blockers.Lounge.Set(DiamondPenthouse.Interior.Blockers.Lounge.enabled)
|
||||||
|
DiamondPenthouse.Interior.Blockers.Office.Set(DiamondPenthouse.Interior.Blockers.Office.enabled)
|
||||||
|
end,
|
||||||
|
DisableAllBlockers = function()
|
||||||
|
DiamondPenthouse.Interior.Blockers.Bar.Set(DiamondPenthouse.Interior.Blockers.Bar.disabled)
|
||||||
|
DiamondPenthouse.Interior.Blockers.Guest.Set(DiamondPenthouse.Interior.Blockers.Guest.disabled)
|
||||||
|
DiamondPenthouse.Interior.Blockers.Spa.Set(DiamondPenthouse.Interior.Blockers.Spa.disabled)
|
||||||
|
DiamondPenthouse.Interior.Blockers.Cinema.Set(DiamondPenthouse.Interior.Blockers.Cinema.disabled)
|
||||||
|
DiamondPenthouse.Interior.Blockers.Lounge.Set(DiamondPenthouse.Interior.Blockers.Lounge.disabled)
|
||||||
|
DiamondPenthouse.Interior.Blockers.Office.Set(DiamondPenthouse.Interior.Blockers.Office.disabled)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
local styleColor = DiamondPenthouse.Colors.sharp
|
||||||
|
local stylePattern = DiamondPenthouse.Interior.Pattern.pattern01
|
||||||
|
|
||||||
|
DiamondPenthouse.Ipl.Interior.Load()
|
||||||
|
|
||||||
|
DiamondPenthouse.Interior.Walls.SetColor(styleColor)
|
||||||
|
DiamondPenthouse.Interior.Pattern.Set(stylePattern)
|
||||||
|
DiamondPenthouse.Interior.Pattern.SetColor(stylePattern, styleColor)
|
||||||
|
|
||||||
|
DiamondPenthouse.Interior.SpaBar.Set(DiamondPenthouse.Interior.SpaBar.open)
|
||||||
|
DiamondPenthouse.Interior.MediaBar.Set(DiamondPenthouse.Interior.MediaBar.open)
|
||||||
|
DiamondPenthouse.Interior.Dealer.Set(DiamondPenthouse.Interior.Dealer.open)
|
||||||
|
|
||||||
|
RefreshInterior(DiamondPenthouse.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
3
resources/[core]/bob74_ipl/dlc_cayoperico/base.lua
Normal file
3
resources/[core]/bob74_ipl/dlc_cayoperico/base.lua
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
CreateThread(function()
|
||||||
|
RequestIpl("h4_ch2_mansion_final")
|
||||||
|
end)
|
||||||
207
resources/[core]/bob74_ipl/dlc_cayoperico/nightclub.lua
Normal file
207
resources/[core]/bob74_ipl/dlc_cayoperico/nightclub.lua
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
-- The Music Locker: 1550.0, 250.0, -50.0
|
||||||
|
exports('GetCayoPericoNightclub', function()
|
||||||
|
return CayoPericoNightclub
|
||||||
|
end)
|
||||||
|
|
||||||
|
CayoPericoNightclub = {
|
||||||
|
interiorId = 281089,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Posters = {
|
||||||
|
palmstraxx = "h4_clubposter_palmstraxx",
|
||||||
|
moodymann = "h4_clubposter_moodymann",
|
||||||
|
keinemusik = "h4_clubposter_keinemusik",
|
||||||
|
|
||||||
|
Enable = function(poster, state)
|
||||||
|
EnableIpl(poster, state)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
Security = {
|
||||||
|
security = "int01_ba_security_upgrade",
|
||||||
|
|
||||||
|
Enable = function(state, refresh)
|
||||||
|
SetIplPropState(CayoPericoNightclub.interiorId, CayoPericoNightclub.Security.security, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
Speakers = {
|
||||||
|
basic = "int01_ba_equipment_setup",
|
||||||
|
upgrade = {
|
||||||
|
"int01_ba_equipment_setup",
|
||||||
|
"int01_ba_equipment_upgrade"
|
||||||
|
},
|
||||||
|
|
||||||
|
Set = function(speakers, refresh)
|
||||||
|
CayoPericoNightclub.Speakers.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(CayoPericoNightclub.interiorId, speakers, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(CayoPericoNightclub.interiorId, {
|
||||||
|
CayoPericoNightclub.Speakers.basic,
|
||||||
|
CayoPericoNightclub.Speakers.upgrade
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
Podium = {
|
||||||
|
podium = "int01_ba_style02_podium",
|
||||||
|
|
||||||
|
Enable = function(state, refresh)
|
||||||
|
SetIplPropState(CayoPericoNightclub.interiorId, CayoPericoNightclub.Podium.podium, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
Turntables = {
|
||||||
|
style01 = "int01_ba_dj01",
|
||||||
|
style02 = "int01_ba_dj02",
|
||||||
|
style03 = "int01_ba_dj03",
|
||||||
|
style04 = "int01_ba_dj04",
|
||||||
|
style05 = "int01_ba_dj_palms_trax",
|
||||||
|
style06 = "int01_ba_dj_keinemusik",
|
||||||
|
style07 = "int01_ba_dj_moodyman",
|
||||||
|
|
||||||
|
Set = function(style, refresh)
|
||||||
|
CayoPericoNightclub.Turntables.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(CayoPericoNightclub.interiorId, style, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
for key, value in pairs(CayoPericoNightclub.Turntables) do
|
||||||
|
if type(value) == "string" then
|
||||||
|
SetIplPropState(CayoPericoNightclub.interiorId, value, false, refresh)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
Bar = {
|
||||||
|
bar = "int01_ba_bar_content",
|
||||||
|
|
||||||
|
Enable = function(state, refresh)
|
||||||
|
SetIplPropState(CayoPericoNightclub.interiorId, CayoPericoNightclub.Bar.bar, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
Screen = {
|
||||||
|
front = "int01_ba_lights_screen",
|
||||||
|
back = "int01_ba_screen",
|
||||||
|
|
||||||
|
Enable = function(screen, state, refresh)
|
||||||
|
SetIplPropState(CayoPericoNightclub.interiorId, screen, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
Lights = {
|
||||||
|
Droplets = {
|
||||||
|
style01 = "dj_01_lights_01",
|
||||||
|
style02 = "dj_02_lights_01",
|
||||||
|
style03 = "dj_03_lights_01",
|
||||||
|
style04 = "dj_04_lights_01",
|
||||||
|
|
||||||
|
Set = function(lights, refresh)
|
||||||
|
CayoPericoNightclub.Lights.Droplets.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(CayoPericoNightclub.interiorId, lights, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(CayoPericoNightclub.interiorId, {
|
||||||
|
CayoPericoNightclub.Lights.Droplets.style01,
|
||||||
|
CayoPericoNightclub.Lights.Droplets.style02,
|
||||||
|
CayoPericoNightclub.Lights.Droplets.style03,
|
||||||
|
CayoPericoNightclub.Lights.Droplets.style04
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
Neons = {
|
||||||
|
style01 = "dj_01_lights_02",
|
||||||
|
style02 = "dj_02_lights_02",
|
||||||
|
style03 = "dj_03_lights_02",
|
||||||
|
style04 = "dj_04_lights_02",
|
||||||
|
|
||||||
|
Set = function(lights, refresh)
|
||||||
|
CayoPericoNightclub.Lights.Neons.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(CayoPericoNightclub.interiorId, lights, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(CayoPericoNightclub.interiorId, {
|
||||||
|
CayoPericoNightclub.Lights.Neons.style01,
|
||||||
|
CayoPericoNightclub.Lights.Neons.style02,
|
||||||
|
CayoPericoNightclub.Lights.Neons.style03,
|
||||||
|
CayoPericoNightclub.Lights.Neons.style04
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
Bands = {
|
||||||
|
style01 = "dj_01_lights_03",
|
||||||
|
style02 = "dj_02_lights_03",
|
||||||
|
style03 = "dj_03_lights_03",
|
||||||
|
style04 = "dj_04_lights_03",
|
||||||
|
|
||||||
|
Set = function(lights, refresh)
|
||||||
|
CayoPericoNightclub.Lights.Bands.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(CayoPericoNightclub.interiorId, lights, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(CayoPericoNightclub.interiorId, {
|
||||||
|
CayoPericoNightclub.Lights.Bands.style01,
|
||||||
|
CayoPericoNightclub.Lights.Bands.style02,
|
||||||
|
CayoPericoNightclub.Lights.Bands.style03,
|
||||||
|
CayoPericoNightclub.Lights.Bands.style04
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
Lasers = {
|
||||||
|
style01 = "dj_01_lights_04",
|
||||||
|
style02 = "dj_02_lights_04",
|
||||||
|
style03 = "dj_03_lights_04",
|
||||||
|
style04 = "dj_04_lights_04",
|
||||||
|
|
||||||
|
Set = function(lights, refresh)
|
||||||
|
CayoPericoNightclub.Lights.Lasers.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(CayoPericoNightclub.interiorId, lights, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(CayoPericoNightclub.interiorId, {
|
||||||
|
CayoPericoNightclub.Lights.Lasers.style01,
|
||||||
|
CayoPericoNightclub.Lights.Lasers.style02,
|
||||||
|
CayoPericoNightclub.Lights.Lasers.style03,
|
||||||
|
CayoPericoNightclub.Lights.Lasers.style04
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
Clear = function(refresh)
|
||||||
|
CayoPericoNightclub.Lights.Droplets.Clear(refresh)
|
||||||
|
CayoPericoNightclub.Lights.Neons.Clear(refresh)
|
||||||
|
CayoPericoNightclub.Lights.Bands.Clear(refresh)
|
||||||
|
CayoPericoNightclub.Lights.Lasers.Clear(refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
-- Interior
|
||||||
|
CayoPericoNightclub.Security.Enable(true, false)
|
||||||
|
CayoPericoNightclub.Speakers.Set(CayoPericoNightclub.Speakers.basic, false)
|
||||||
|
CayoPericoNightclub.Podium.Enable(true, false)
|
||||||
|
CayoPericoNightclub.Turntables.Set(CayoPericoNightclub.Turntables.style01, false)
|
||||||
|
CayoPericoNightclub.Bar.Enable(true, false)
|
||||||
|
CayoPericoNightclub.Screen.Enable(CayoPericoNightclub.Screen.front, true, false)
|
||||||
|
CayoPericoNightclub.Lights.Lasers.Set(CayoPericoNightclub.Lights.Lasers.style04, false)
|
||||||
|
|
||||||
|
-- Exterior
|
||||||
|
CayoPericoNightclub.Ipl.Posters.Enable(CayoPericoNightclub.Ipl.Posters.palmstraxx, true)
|
||||||
|
CayoPericoNightclub.Ipl.Posters.Enable(CayoPericoNightclub.Ipl.Posters.moodymann, true)
|
||||||
|
CayoPericoNightclub.Ipl.Posters.Enable(CayoPericoNightclub.Ipl.Posters.keinemusik, true)
|
||||||
|
|
||||||
|
RefreshInterior(CayoPericoNightclub.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
71
resources/[core]/bob74_ipl/dlc_cayoperico/submarine.lua
Normal file
71
resources/[core]/bob74_ipl/dlc_cayoperico/submarine.lua
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
-- Submarine: 1560.0, 400.0, -50.0
|
||||||
|
exports('GetCayoPericoSubmarine', function()
|
||||||
|
return CayoPericoSubmarine
|
||||||
|
end)
|
||||||
|
|
||||||
|
CayoPericoSubmarine = {
|
||||||
|
interiorId = 281345,
|
||||||
|
|
||||||
|
Workshop = {
|
||||||
|
brig = "entity_set_brig",
|
||||||
|
workshop = "entity_set_weapons",
|
||||||
|
|
||||||
|
Set = function(room, refresh)
|
||||||
|
CayoPericoSubmarine.Workshop.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(CayoPericoSubmarine.interiorId, room, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(CayoPericoSubmarine.interiorId, {
|
||||||
|
CayoPericoSubmarine.Workshop.brig,
|
||||||
|
CayoPericoSubmarine.Workshop.workshop
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
Chairs = {
|
||||||
|
chairs = "entity_set_guide",
|
||||||
|
|
||||||
|
Enable = function(state, refresh)
|
||||||
|
SetIplPropState(CayoPericoSubmarine.interiorId, CayoPericoSubmarine.Chairs.chairs, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
Lights = {
|
||||||
|
on = "entity_set_hatch_lights_on",
|
||||||
|
off = "entity_set_hatch_lights_off",
|
||||||
|
|
||||||
|
Set = function(lights, refresh)
|
||||||
|
CayoPericoSubmarine.Lights.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(CayoPericoSubmarine.interiorId, lights, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(CayoPericoSubmarine.interiorId, {
|
||||||
|
CayoPericoSubmarine.Lights.on,
|
||||||
|
CayoPericoSubmarine.Lights.off
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
Details = {
|
||||||
|
bomb = "entity_set_demolition",
|
||||||
|
torch = "entity_set_acetylene",
|
||||||
|
cutter = "entity_set_plasma",
|
||||||
|
fingerprint = "entity_set_fingerprint",
|
||||||
|
suppressors = "entity_set_suppressors",
|
||||||
|
jammer = "entity_set_jammer",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(CayoPericoSubmarine.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
CayoPericoSubmarine.Workshop.Set(CayoPericoSubmarine.Workshop.brig, false)
|
||||||
|
CayoPericoSubmarine.Chairs.Enable(true, false)
|
||||||
|
CayoPericoSubmarine.Lights.Set(CayoPericoSubmarine.Lights.off, false)
|
||||||
|
|
||||||
|
RefreshInterior(CayoPericoSubmarine.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
7
resources/[core]/bob74_ipl/dlc_chopshop/base.lua
Normal file
7
resources/[core]/bob74_ipl/dlc_chopshop/base.lua
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
CreateThread(function()
|
||||||
|
RequestIpl("m23_2_acp_collision_fixes_01")
|
||||||
|
RequestIpl("m23_2_acp_collision_fixes_02")
|
||||||
|
RequestIpl("m23_2_tug_collision")
|
||||||
|
RequestIpl("m23_2_hei_yacht_collision_fixes")
|
||||||
|
RequestIpl("m23_2_vinewood_garage")
|
||||||
|
end)
|
||||||
24
resources/[core]/bob74_ipl/dlc_chopshop/cargoship.lua
Normal file
24
resources/[core]/bob74_ipl/dlc_chopshop/cargoship.lua
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
-- Cargo ship: -344.4349, -4062.832, 17.000
|
||||||
|
exports('GetChopShopCargoShipObject', function()
|
||||||
|
return ChopShopCargoShip
|
||||||
|
end)
|
||||||
|
|
||||||
|
ChopShopCargoShip = {
|
||||||
|
Ipl = {
|
||||||
|
ipl = {
|
||||||
|
"m23_2_cargoship",
|
||||||
|
"m23_2_cargoship_bridge"
|
||||||
|
},
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(ChopShopCargoShip.Ipl.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(ChopShopCargoShip.Ipl.ipl, false)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
ChopShopCargoShip.Ipl.Load()
|
||||||
|
end
|
||||||
|
}
|
||||||
22
resources/[core]/bob74_ipl/dlc_chopshop/cartel_garage.lua
Normal file
22
resources/[core]/bob74_ipl/dlc_chopshop/cartel_garage.lua
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
-- Cartel Garage: 1220.133, -2277.844, -50.000
|
||||||
|
exports('GetChopShopCartelGarageObject', function()
|
||||||
|
return ChopShopCartelGarage
|
||||||
|
end)
|
||||||
|
|
||||||
|
ChopShopCartelGarage = {
|
||||||
|
interiorId = 293633,
|
||||||
|
|
||||||
|
Entities = {
|
||||||
|
entities = "mp2023_02_dlc_int_6_cb",
|
||||||
|
|
||||||
|
Enable = function(state, refresh)
|
||||||
|
SetIplPropState(ChopShopCartelGarage.interiorId, ChopShopCartelGarage.Entities.entities, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
ChopShopCartelGarage.Entities.Enable(true, false)
|
||||||
|
|
||||||
|
RefreshInterior(ChopShopCartelGarage.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
21
resources/[core]/bob74_ipl/dlc_chopshop/lifeguard.lua
Normal file
21
resources/[core]/bob74_ipl/dlc_chopshop/lifeguard.lua
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
-- Lifeguard: -1488.153, -1021.166, 5.000
|
||||||
|
exports('GetChopShopLifeguardObject', function()
|
||||||
|
return ChopShopLifeguard
|
||||||
|
end)
|
||||||
|
|
||||||
|
ChopShopLifeguard = {
|
||||||
|
Ipl = {
|
||||||
|
ipl = "m23_2_lifeguard_access",
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(ChopShopLifeguard.Ipl.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(ChopShopLifeguard.Ipl.ipl, false)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
ChopShopLifeguard.Ipl.Load()
|
||||||
|
end
|
||||||
|
}
|
||||||
115
resources/[core]/bob74_ipl/dlc_chopshop/salvage.lua
Normal file
115
resources/[core]/bob74_ipl/dlc_chopshop/salvage.lua
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
-- Salvage Yard: 1077.276, -2274.876, -50.000
|
||||||
|
exports('GetChopShopSalvageObject', function()
|
||||||
|
return ChopShopSalvage
|
||||||
|
end)
|
||||||
|
|
||||||
|
ChopShopSalvage = {
|
||||||
|
interiorId = 293377,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Exterior = {
|
||||||
|
ipl = {
|
||||||
|
"m23_2_sp1_03_reds",
|
||||||
|
"m23_2_sc1_03_reds",
|
||||||
|
"m23_2_id2_04_reds",
|
||||||
|
"m23_2_cs1_05_reds",
|
||||||
|
"m23_2_cs4_11_reds",
|
||||||
|
},
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(ChopShopSalvage.Ipl.Exterior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(ChopShopSalvage.Ipl.Exterior.ipl, false)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
Style = {
|
||||||
|
basic = {
|
||||||
|
"set_mechanic_basic",
|
||||||
|
"set_safe_basic"
|
||||||
|
},
|
||||||
|
upgrade = {
|
||||||
|
"set_mechanic_upgrade",
|
||||||
|
"set_safe_upgrade"
|
||||||
|
},
|
||||||
|
|
||||||
|
Set = function(style, refresh)
|
||||||
|
ChopShopSalvage.Style.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(ChopShopSalvage.interiorId, style, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(ChopShopSalvage.interiorId, {
|
||||||
|
ChopShopSalvage.Style.basic,
|
||||||
|
ChopShopSalvage.Style.upgrade
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
Lift1 = {
|
||||||
|
down = "set_car_lift_01_down",
|
||||||
|
up = "set_car_lift_01_up",
|
||||||
|
|
||||||
|
Set = function(lift, refresh)
|
||||||
|
ChopShopSalvage.Lift1.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(ChopShopSalvage.interiorId, lift, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(ChopShopSalvage.interiorId, {
|
||||||
|
ChopShopSalvage.Lift1.down,
|
||||||
|
ChopShopSalvage.Lift1.up
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
Lift2 = {
|
||||||
|
down = "set_car_lift_02_down",
|
||||||
|
up = "set_car_lift_02_up",
|
||||||
|
|
||||||
|
Set = function(lift, refresh)
|
||||||
|
ChopShopSalvage.Lift2.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(ChopShopSalvage.interiorId, lift, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(ChopShopSalvage.interiorId, {
|
||||||
|
ChopShopSalvage.Lift2.down,
|
||||||
|
ChopShopSalvage.Lift2.up
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
Tint = {
|
||||||
|
gray = 1,
|
||||||
|
red = 2,
|
||||||
|
blue = 3,
|
||||||
|
orange = 4,
|
||||||
|
yellow = 5,
|
||||||
|
green = 6,
|
||||||
|
pink = 7,
|
||||||
|
teal = 8,
|
||||||
|
darkGray = 9,
|
||||||
|
|
||||||
|
SetColor = function(color, refresh)
|
||||||
|
SetIplPropState(ChopShopSalvage.interiorId, "set_tint_b", true, refresh)
|
||||||
|
SetInteriorEntitySetColor(ChopShopSalvage.interiorId, "set_tint_b", color)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
-- Exterior
|
||||||
|
ChopShopSalvage.Ipl.Exterior.Load()
|
||||||
|
|
||||||
|
-- Interior
|
||||||
|
ChopShopSalvage.Tint.SetColor(ChopShopSalvage.Tint.gray, false)
|
||||||
|
ChopShopSalvage.Style.Set(ChopShopSalvage.Style.upgrade, false)
|
||||||
|
|
||||||
|
ChopShopSalvage.Lift1.Set(ChopShopSalvage.Lift1.up, false)
|
||||||
|
ChopShopSalvage.Lift2.Set(ChopShopSalvage.Lift2.up, false)
|
||||||
|
|
||||||
|
RefreshInterior(ChopShopSalvage.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
421
resources/[core]/bob74_ipl/dlc_doomsday/facility.lua
Normal file
421
resources/[core]/bob74_ipl/dlc_doomsday/facility.lua
Normal file
@ -0,0 +1,421 @@
|
|||||||
|
-- DoomsdayFacility: 345.00000000 4842.00000000 -60.00000000
|
||||||
|
exports('GetDoomsdayFacilityObject', function()
|
||||||
|
return DoomsdayFacility
|
||||||
|
end)
|
||||||
|
|
||||||
|
DoomsdayFacility = {
|
||||||
|
interiorId = 269313,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Interior = {
|
||||||
|
ipl = "xm_x17dlc_int_placement_interior_33_x17dlc_int_02_milo_",
|
||||||
|
|
||||||
|
Load = function(color)
|
||||||
|
EnableIpl(DoomsdayFacility.Ipl.Interior.ipl, true)
|
||||||
|
SetIplPropState(DoomsdayFacility.interiorId, "set_int_02_shell", true, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(DoomsdayFacility.Ipl.Interior.ipl, false)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Exterior = {
|
||||||
|
ipl = {
|
||||||
|
"xm_hatch_01_cutscene", -- 1286.924 2846.06 49.39426
|
||||||
|
"xm_hatch_02_cutscene", -- 18.633 2610.834 86.0
|
||||||
|
"xm_hatch_03_cutscene", -- 2768.574 3919.924 45.82
|
||||||
|
"xm_hatch_04_cutscene", -- 3406.90 5504.77 26.28
|
||||||
|
"xm_hatch_06_cutscene", -- 1.90 6832.18 15.82
|
||||||
|
"xm_hatch_07_cutscene", -- -2231.53 2418.42 12.18
|
||||||
|
"xm_hatch_08_cutscene", -- -6.92 3327.0 41.63
|
||||||
|
"xm_hatch_09_cutscene", -- 2073.62 1748.77 104.51
|
||||||
|
"xm_hatch_10_cutscene", -- 1874.35 284.34 164.31
|
||||||
|
"xm_hatch_closed", -- Closed hatches (all)
|
||||||
|
"xm_siloentranceclosed_x17", -- Closed silo: 598.4869 5556.846 716.7615
|
||||||
|
"xm_bunkerentrance_door", -- Bunker entrance closed door: 2050.85 2950.0 47.75
|
||||||
|
"xm_hatches_terrain", -- Terrain adjustments for facilities (all) + silo
|
||||||
|
"xm_hatches_terrain_lod"
|
||||||
|
},
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(DoomsdayFacility.Ipl.Exterior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(DoomsdayFacility.Ipl.Exterior.ipl, false)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Colors = {
|
||||||
|
utility = 1,
|
||||||
|
expertise = 2,
|
||||||
|
altitude = 3,
|
||||||
|
power = 4,
|
||||||
|
authority = 5,
|
||||||
|
influence = 6,
|
||||||
|
order = 7,
|
||||||
|
empire = 8,
|
||||||
|
supremacy = 9
|
||||||
|
},
|
||||||
|
Walls = {
|
||||||
|
SetColor = function(color, refresh)
|
||||||
|
SetInteriorEntitySetColor(DoomsdayFacility.interiorId, "set_int_02_shell", color)
|
||||||
|
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(DoomsdayFacility.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Decals = {
|
||||||
|
none = "",
|
||||||
|
style01 = "set_int_02_decal_01",
|
||||||
|
style02 = "set_int_02_decal_02",
|
||||||
|
style03 = "set_int_02_decal_03",
|
||||||
|
style04 = "set_int_02_decal_04",
|
||||||
|
style05 = "set_int_02_decal_05",
|
||||||
|
style06 = "set_int_02_decal_06",
|
||||||
|
style07 = "set_int_02_decal_07",
|
||||||
|
style08 = "set_int_02_decal_08",
|
||||||
|
style09 = "set_int_02_decal_09",
|
||||||
|
|
||||||
|
Set = function(decal, refresh)
|
||||||
|
DoomsdayFacility.Decals.Clear(refresh)
|
||||||
|
|
||||||
|
if decal ~= "" then
|
||||||
|
SetIplPropState(DoomsdayFacility.interiorId, decal, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(DoomsdayFacility.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(DoomsdayFacility.interiorId, {
|
||||||
|
DoomsdayFacility.Decals.style01, DoomsdayFacility.Decals.style02, DoomsdayFacility.Decals.style03,
|
||||||
|
DoomsdayFacility.Decals.style04, DoomsdayFacility.Decals.style05, DoomsdayFacility.Decals.style06,
|
||||||
|
DoomsdayFacility.Decals.style07, DoomsdayFacility.Decals.style08, DoomsdayFacility.Decals.style09
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Lounge = {
|
||||||
|
utility = "set_int_02_lounge1",
|
||||||
|
prestige = "set_int_02_lounge2",
|
||||||
|
premier = "set_int_02_lounge3",
|
||||||
|
|
||||||
|
Set = function(lounge, color, refresh)
|
||||||
|
DoomsdayFacility.Lounge.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(DoomsdayFacility.interiorId, lounge, true, refresh)
|
||||||
|
SetInteriorEntitySetColor(DoomsdayFacility.interiorId, lounge, color)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(DoomsdayFacility.interiorId, {
|
||||||
|
DoomsdayFacility.Lounge.utility,
|
||||||
|
DoomsdayFacility.Lounge.prestige,
|
||||||
|
DoomsdayFacility.Lounge.premier
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Sleeping = {
|
||||||
|
none = "set_int_02_no_sleep",
|
||||||
|
utility = "set_int_02_sleep",
|
||||||
|
prestige = "set_int_02_sleep2",
|
||||||
|
premier = "set_int_02_sleep3",
|
||||||
|
|
||||||
|
Set = function(sleep, color, refresh)
|
||||||
|
DoomsdayFacility.Sleeping.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(DoomsdayFacility.interiorId, sleep, true, refresh)
|
||||||
|
SetInteriorEntitySetColor(DoomsdayFacility.interiorId, sleep, color)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(DoomsdayFacility.interiorId, {
|
||||||
|
DoomsdayFacility.Sleeping.none,
|
||||||
|
DoomsdayFacility.Sleeping.utility,
|
||||||
|
DoomsdayFacility.Sleeping.prestige,
|
||||||
|
DoomsdayFacility.Sleeping.premier
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Security = {
|
||||||
|
off = "set_int_02_no_security",
|
||||||
|
on = "set_int_02_security",
|
||||||
|
|
||||||
|
Set = function(security, color, refresh)
|
||||||
|
DoomsdayFacility.Security.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(DoomsdayFacility.interiorId, security, true, refresh)
|
||||||
|
SetInteriorEntitySetColor(DoomsdayFacility.interiorId, security, color)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(DoomsdayFacility.interiorId, {
|
||||||
|
DoomsdayFacility.Security.off,
|
||||||
|
DoomsdayFacility.Security.on
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Cannon = {
|
||||||
|
off = "set_int_02_no_cannon",
|
||||||
|
on = "set_int_02_cannon",
|
||||||
|
|
||||||
|
Set = function(cannon, color, refresh)
|
||||||
|
DoomsdayFacility.Cannon.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(DoomsdayFacility.interiorId, cannon, true, refresh)
|
||||||
|
SetInteriorEntitySetColor(DoomsdayFacility.interiorId, cannon, color)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(DoomsdayFacility.interiorId, {
|
||||||
|
DoomsdayFacility.Cannon.off,
|
||||||
|
DoomsdayFacility.Cannon.on
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
PrivacyGlass = {
|
||||||
|
controlModelHash = `xm_prop_x17_tem_control_01`,
|
||||||
|
|
||||||
|
Bedroom = {
|
||||||
|
Enable = function(state)
|
||||||
|
local handle = GetClosestObjectOfType(367.99, 4827.745, -59.0, 1.0, `xm_prop_x17_l_glass_03`, false, false, false)
|
||||||
|
|
||||||
|
if state then
|
||||||
|
if handle == 0 then
|
||||||
|
local model = `xm_prop_x17_l_glass_03`
|
||||||
|
|
||||||
|
RequestModel(model)
|
||||||
|
while not HasModelLoaded(model) do
|
||||||
|
Wait(0)
|
||||||
|
end
|
||||||
|
|
||||||
|
local privacyGlass = CreateObject(model, 367.99, 4827.745, -59.0, false, false, false)
|
||||||
|
|
||||||
|
SetEntityAsMissionEntity(privacyGlass, true, 0)
|
||||||
|
SetEntityCompletelyDisableCollision(privacyGlass, false, 0)
|
||||||
|
SetEntityInvincible(privacyGlass, true)
|
||||||
|
SetEntityAlpha(privacyGlass, 254, false)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if handle ~= 0 then
|
||||||
|
SetEntityAsMissionEntity(handle, false, false)
|
||||||
|
DeleteEntity(handle)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
|
||||||
|
Control = {
|
||||||
|
position = vector3(372.115, 4827.504, -58.47),
|
||||||
|
rotation = vector3(0.0, 0.0, 0.0),
|
||||||
|
|
||||||
|
Enable = function(state)
|
||||||
|
local handle = GetClosestObjectOfType(DoomsdayFacility.PrivacyGlass.Bedroom.Control.position.x, DoomsdayFacility.PrivacyGlass.Bedroom.Control.position.y, DoomsdayFacility.PrivacyGlass.Bedroom.Control.position.z, 1.0, DoomsdayFacility.PrivacyGlass.controlModelHash, false, false, false)
|
||||||
|
|
||||||
|
if state then
|
||||||
|
if handle == 0 then
|
||||||
|
RequestModel(DoomsdayFacility.PrivacyGlass.controlModelHash)
|
||||||
|
while not HasModelLoaded(DoomsdayFacility.PrivacyGlass.controlModelHash) do
|
||||||
|
Wait(0)
|
||||||
|
end
|
||||||
|
|
||||||
|
local privacyGlass = CreateObjectNoOffset(DoomsdayFacility.PrivacyGlass.controlModelHash, DoomsdayFacility.PrivacyGlass.Bedroom.Control.position.x, DoomsdayFacility.PrivacyGlass.Bedroom.Control.position.y, DoomsdayFacility.PrivacyGlass.Bedroom.Control.position.z, false, false, false)
|
||||||
|
|
||||||
|
SetEntityRotation(privacyGlass, DoomsdayFacility.PrivacyGlass.Bedroom.Control.rotation.x, DoomsdayFacility.PrivacyGlass.Bedroom.Control.rotation.y, DoomsdayFacility.PrivacyGlass.Bedroom.Control.rotation.z, 2, true)
|
||||||
|
FreezeEntityPosition(privacyGlass, true)
|
||||||
|
SetEntityAsMissionEntity(privacyGlass, false, false)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if handle ~= 0 then
|
||||||
|
SetEntityAsMissionEntity(handle, false, false)
|
||||||
|
DeleteEntity(handle)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Lounge = {
|
||||||
|
Glasses = {
|
||||||
|
{
|
||||||
|
modelHash = `xm_prop_x17_l_door_glass_01`,
|
||||||
|
entityHash = `xm_prop_x17_l_door_frame_01`,
|
||||||
|
entityPos = vector3(359.22, 4846.043, -58.85)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
modelHash = `xm_prop_x17_l_door_glass_01`,
|
||||||
|
entityHash = `xm_prop_x17_l_door_frame_01`,
|
||||||
|
entityPos = vector3(369.066, 4846.273, -58.85)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
modelHash = `xm_prop_x17_l_glass_01`,
|
||||||
|
entityHash = `xm_prop_x17_l_frame_01`,
|
||||||
|
entityPos = vector3(358.843, 4845.103, -60.0)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
modelHash = `xm_prop_x17_l_glass_02`,
|
||||||
|
entityHash = `xm_prop_x17_l_frame_02`,
|
||||||
|
entityPos = vector3(366.309, 4847.281, -60.0)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
modelHash = `xm_prop_x17_l_glass_03`,
|
||||||
|
entityHash = `xm_prop_x17_l_frame_03`,
|
||||||
|
entityPos = vector3(371.194, 4841.27, -60.0)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
Enable = function(state)
|
||||||
|
for key, glass in pairs(DoomsdayFacility.PrivacyGlass.Lounge.Glasses) do
|
||||||
|
local handle = GetClosestObjectOfType(glass.entityPos.x, glass.entityPos.y, glass.entityPos.z, 1.0, glass.modelHash, false, false, false)
|
||||||
|
|
||||||
|
if state then
|
||||||
|
if handle == 0 then
|
||||||
|
local entityToAttach = GetClosestObjectOfType(glass.entityPos.x, glass.entityPos.y, glass.entityPos.z, 1.0, glass.entityHash, false, false, false)
|
||||||
|
|
||||||
|
if entityToAttach ~= 0 then
|
||||||
|
RequestModel(glass.modelHash)
|
||||||
|
while not HasModelLoaded(glass.modelHash) do
|
||||||
|
Wait(0)
|
||||||
|
end
|
||||||
|
|
||||||
|
local privacyGlass = CreateObject(glass.modelHash, glass.entityPos.x, glass.entityPos.y, glass.entityPos.z, false, false, false)
|
||||||
|
|
||||||
|
SetEntityAsMissionEntity(privacyGlass, true, false)
|
||||||
|
SetEntityCompletelyDisableCollision(privacyGlass, false, 0)
|
||||||
|
SetEntityInvincible(privacyGlass, true)
|
||||||
|
SetEntityAlpha(privacyGlass, 254, false)
|
||||||
|
AttachEntityToEntity(privacyGlass, entityToAttach, -1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 2, 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if handle ~= 0 then
|
||||||
|
SetEntityAsMissionEntity(handle, false, false)
|
||||||
|
DeleteEntity(handle)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
|
||||||
|
Control = {
|
||||||
|
position = vector3(367.317, 4846.729, -58.448),
|
||||||
|
rotation = vector3(0.0, 0.0, -16.0),
|
||||||
|
|
||||||
|
Enable = function(state)
|
||||||
|
local handle = GetClosestObjectOfType(DoomsdayFacility.PrivacyGlass.Lounge.Control.position.x, DoomsdayFacility.PrivacyGlass.Lounge.Control.position.y, DoomsdayFacility.PrivacyGlass.Lounge.Control.position.z, 1.0, DoomsdayFacility.PrivacyGlass.controlModelHash, false, false, false)
|
||||||
|
|
||||||
|
if state then
|
||||||
|
if handle == 0 then
|
||||||
|
RequestModel(DoomsdayFacility.PrivacyGlass.controlModelHash)
|
||||||
|
while not HasModelLoaded(DoomsdayFacility.PrivacyGlass.controlModelHash) do
|
||||||
|
Wait(0)
|
||||||
|
end
|
||||||
|
|
||||||
|
local privacyGlass = CreateObjectNoOffset(DoomsdayFacility.PrivacyGlass.controlModelHash, DoomsdayFacility.PrivacyGlass.Lounge.Control.position.x, DoomsdayFacility.PrivacyGlass.Lounge.Control.position.y, DoomsdayFacility.PrivacyGlass.Lounge.Control.position.z, false, false, false)
|
||||||
|
|
||||||
|
SetEntityRotation(privacyGlass, DoomsdayFacility.PrivacyGlass.Lounge.Control.rotation.x, DoomsdayFacility.PrivacyGlass.Lounge.Control.rotation.y, DoomsdayFacility.PrivacyGlass.Lounge.Control.rotation.z, 2, true)
|
||||||
|
FreezeEntityPosition(privacyGlass, true)
|
||||||
|
SetEntityAsMissionEntity(privacyGlass, false, false)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if handle ~= 0 then
|
||||||
|
SetEntityAsMissionEntity(handle, false, false)
|
||||||
|
DeleteEntity(handle)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Details = {
|
||||||
|
KhanjaliParts = {
|
||||||
|
A = "Set_Int_02_Parts_Panther1",
|
||||||
|
B = "Set_Int_02_Parts_Panther2",
|
||||||
|
C = "Set_Int_02_Parts_Panther3"
|
||||||
|
},
|
||||||
|
RiotParts = {
|
||||||
|
A = "Set_Int_02_Parts_Riot1",
|
||||||
|
B = "Set_Int_02_Parts_Riot2",
|
||||||
|
C = "Set_Int_02_Parts_Riot3"
|
||||||
|
},
|
||||||
|
ChenoParts = {
|
||||||
|
A = "Set_Int_02_Parts_Cheno1",
|
||||||
|
B = "Set_Int_02_Parts_Cheno2",
|
||||||
|
C = "Set_Int_02_Parts_Cheno3"
|
||||||
|
},
|
||||||
|
ThrusterParts = {
|
||||||
|
A = "Set_Int_02_Parts_Thruster1",
|
||||||
|
B = "Set_Int_02_Parts_Thruster2",
|
||||||
|
C = "Set_Int_02_Parts_Thruster3"
|
||||||
|
},
|
||||||
|
AvengerParts = {
|
||||||
|
A = "Set_Int_02_Parts_Avenger1",
|
||||||
|
B = "Set_Int_02_Parts_Avenger2",
|
||||||
|
C = "Set_Int_02_Parts_Avenger3"
|
||||||
|
},
|
||||||
|
Outfits = {
|
||||||
|
paramedic = "Set_Int_02_outfit_paramedic",
|
||||||
|
morgue = "Set_Int_02_outfit_morgue",
|
||||||
|
serverFarm = "Set_Int_02_outfit_serverfarm",
|
||||||
|
iaa = "Set_Int_02_outfit_iaa",
|
||||||
|
stealAvenger = "Set_Int_02_outfit_steal_avenger",
|
||||||
|
foundry = "Set_Int_02_outfit_foundry",
|
||||||
|
riot = "Set_Int_02_outfit_riot_van",
|
||||||
|
stromberg = "Set_Int_02_outfit_stromberg",
|
||||||
|
submarine = "Set_Int_02_outfit_sub_finale",
|
||||||
|
predator = "Set_Int_02_outfit_predator",
|
||||||
|
khanjali = "Set_Int_02_outfit_khanjali",
|
||||||
|
volatol = "Set_Int_02_outfit_volatol"
|
||||||
|
},
|
||||||
|
Trophies = {
|
||||||
|
eagle = "set_int_02_trophy1",
|
||||||
|
iaa = "set_int_02_trophy_iaa",
|
||||||
|
submarine = "set_int_02_trophy_sub",
|
||||||
|
|
||||||
|
SetColor = function(color, refresh)
|
||||||
|
SetInteriorEntitySetColor(DoomsdayFacility.interiorId, "set_int_02_trophy_sub", color)
|
||||||
|
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(DoomsdayFacility.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Clutter = {
|
||||||
|
A = "set_int_02_clutter1",
|
||||||
|
B = "set_int_02_clutter2",
|
||||||
|
C = "set_int_02_clutter3",
|
||||||
|
D = "set_int_02_clutter4",
|
||||||
|
E = "set_int_02_clutter5"
|
||||||
|
},
|
||||||
|
crewEmblem = "set_int_02_crewemblem",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(DoomsdayFacility.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
DoomsdayFacility.Ipl.Exterior.Load()
|
||||||
|
DoomsdayFacility.Ipl.Interior.Load()
|
||||||
|
|
||||||
|
DoomsdayFacility.Walls.SetColor(DoomsdayFacility.Colors.utility)
|
||||||
|
DoomsdayFacility.Decals.Set(DoomsdayFacility.Decals.style01)
|
||||||
|
DoomsdayFacility.Lounge.Set(DoomsdayFacility.Lounge.premier, DoomsdayFacility.Colors.utility)
|
||||||
|
DoomsdayFacility.Sleeping.Set(DoomsdayFacility.Sleeping.premier, DoomsdayFacility.Colors.utility)
|
||||||
|
DoomsdayFacility.Security.Set(DoomsdayFacility.Security.on, DoomsdayFacility.Colors.utility)
|
||||||
|
DoomsdayFacility.Cannon.Set(DoomsdayFacility.Cannon.on, DoomsdayFacility.Colors.utility)
|
||||||
|
|
||||||
|
-- Privacy glass remote
|
||||||
|
DoomsdayFacility.PrivacyGlass.Bedroom.Control.Enable(true)
|
||||||
|
DoomsdayFacility.PrivacyGlass.Lounge.Control.Enable(true)
|
||||||
|
|
||||||
|
DoomsdayFacility.Details.Enable(DoomsdayFacility.Details.crewEmblem, false)
|
||||||
|
|
||||||
|
DoomsdayFacility.Details.Enable(DoomsdayFacility.Details.AvengerParts, true)
|
||||||
|
|
||||||
|
DoomsdayFacility.Details.Enable(DoomsdayFacility.Details.Outfits, true)
|
||||||
|
|
||||||
|
DoomsdayFacility.Details.Enable(DoomsdayFacility.Details.Trophies, true)
|
||||||
|
DoomsdayFacility.Details.Trophies.SetColor(DoomsdayFacility.Colors.utility)
|
||||||
|
|
||||||
|
DoomsdayFacility.Details.Enable({
|
||||||
|
DoomsdayFacility.Details.Clutter.A,
|
||||||
|
DoomsdayFacility.Details.Clutter.B
|
||||||
|
}, true)
|
||||||
|
|
||||||
|
RefreshInterior(DoomsdayFacility.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
5
resources/[core]/bob74_ipl/dlc_drugwars/base.lua
Normal file
5
resources/[core]/bob74_ipl/dlc_drugwars/base.lua
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
CreateThread(function()
|
||||||
|
RequestIpl("xm3_collision_fixes")
|
||||||
|
RequestIpl("xm3_sum2_fix")
|
||||||
|
RequestIpl("xm3_security_fix")
|
||||||
|
end)
|
||||||
51
resources/[core]/bob74_ipl/dlc_drugwars/freakshop.lua
Normal file
51
resources/[core]/bob74_ipl/dlc_drugwars/freakshop.lua
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
-- Freakshop: 570.9713, -420.0727, -70.000
|
||||||
|
exports('GetDrugWarsFreakshopObject', function()
|
||||||
|
return DrugWarsFreakshop
|
||||||
|
end)
|
||||||
|
|
||||||
|
DrugWarsFreakshop = {
|
||||||
|
interiorId = 290817,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Exterior = {
|
||||||
|
ipl = {
|
||||||
|
"xm3_warehouse",
|
||||||
|
"xm3_warehouse_grnd"
|
||||||
|
},
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(DrugWarsFreakshop.Ipl.Exterior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(DrugWarsFreakshop.Ipl.Exterior.ipl, false)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
Door = {
|
||||||
|
opened = "entity_set_roller_door_open",
|
||||||
|
closed = "entity_set_roller_door_closed",
|
||||||
|
|
||||||
|
Set = function(door, refresh)
|
||||||
|
DrugWarsFreakshop.Door.Clear()
|
||||||
|
|
||||||
|
SetIplPropState(DrugWarsFreakshop.interiorId, door, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(DrugWarsFreakshop.interiorId, {
|
||||||
|
DrugWarsFreakshop.Door.opened,
|
||||||
|
DrugWarsFreakshop.Door.closed
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
-- Exterior
|
||||||
|
DrugWarsFreakshop.Ipl.Exterior.Load()
|
||||||
|
|
||||||
|
-- Interior
|
||||||
|
DrugWarsFreakshop.Door.Set(DrugWarsFreakshop.Door.closed, false)
|
||||||
|
|
||||||
|
RefreshInterior(DrugWarsFreakshop.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
114
resources/[core]/bob74_ipl/dlc_drugwars/garage.lua
Normal file
114
resources/[core]/bob74_ipl/dlc_drugwars/garage.lua
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
-- Eclipse Boulevard Garage: 519.2477, -2618.788, -50.000
|
||||||
|
exports('GetDrugWarsGarageObject', function()
|
||||||
|
return DrugWarsGarage
|
||||||
|
end)
|
||||||
|
|
||||||
|
DrugWarsGarage = {
|
||||||
|
interiorId = 290561,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Exterior = {
|
||||||
|
ipl = "xm3_garage_fix",
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(DrugWarsGarage.Ipl.Exterior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(DrugWarsGarage.Ipl.Exterior.ipl, false)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
Banner = {
|
||||||
|
model = `ss1_13_clth_ss1_13`,
|
||||||
|
position = vector3(-277.1116, 281.5493, 98.6691),
|
||||||
|
|
||||||
|
Hide = function()
|
||||||
|
CreateModelHide(DrugWarsGarage.Banner.position, 10.0, DrugWarsGarage.Banner.model, true)
|
||||||
|
end,
|
||||||
|
Restore = function()
|
||||||
|
RemoveModelHide(DrugWarsGarage.Banner.position, 10.0, DrugWarsGarage.Banner.model, false)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
Numbering = {
|
||||||
|
none = "",
|
||||||
|
level1 = "entity_set_numbers_01",
|
||||||
|
level2 = "entity_set_numbers_02",
|
||||||
|
level3 = "entity_set_numbers_03",
|
||||||
|
level4 = "entity_set_numbers_04",
|
||||||
|
level5 = "entity_set_numbers_05",
|
||||||
|
|
||||||
|
Set = function(num, refresh)
|
||||||
|
DrugWarsGarage.Numbering.Clear(false)
|
||||||
|
|
||||||
|
if num ~= "" then
|
||||||
|
SetIplPropState(DrugWarsGarage.interiorId, num, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(DrugWarsGarage.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(DrugWarsGarage.interiorId, {
|
||||||
|
DrugWarsGarage.Numbering.level1,
|
||||||
|
DrugWarsGarage.Numbering.level2,
|
||||||
|
DrugWarsGarage.Numbering.level3,
|
||||||
|
DrugWarsGarage.Numbering.level4,
|
||||||
|
DrugWarsGarage.Numbering.level5
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
Style = {
|
||||||
|
immaculate = "entity_set_shell_01",
|
||||||
|
industrial = "entity_set_shell_02",
|
||||||
|
indulgent = "entity_set_shell_03",
|
||||||
|
|
||||||
|
Set = function(style, refresh)
|
||||||
|
DrugWarsGarage.Style.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(DrugWarsGarage.interiorId, style, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(DrugWarsGarage.interiorId, {
|
||||||
|
DrugWarsGarage.Style.immaculate,
|
||||||
|
DrugWarsGarage.Style.industrial,
|
||||||
|
DrugWarsGarage.Style.indulgent
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
Tint = {
|
||||||
|
white = 1,
|
||||||
|
gray = 2,
|
||||||
|
black = 3,
|
||||||
|
purple = 4,
|
||||||
|
orange = 5,
|
||||||
|
yellow = 6,
|
||||||
|
blue = 7,
|
||||||
|
red = 8,
|
||||||
|
green = 9,
|
||||||
|
lightBlue = 10,
|
||||||
|
lightGreen = 11,
|
||||||
|
|
||||||
|
SetColor = function(color, refresh)
|
||||||
|
SetIplPropState(DrugWarsGarage.interiorId, "entity_set_tint_01", true, refresh)
|
||||||
|
SetInteriorEntitySetColor(DrugWarsGarage.interiorId, "entity_set_tint_01", color)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
-- Exterior
|
||||||
|
DrugWarsGarage.Ipl.Exterior.Load()
|
||||||
|
DrugWarsGarage.Banner.Hide()
|
||||||
|
|
||||||
|
-- Interior
|
||||||
|
DrugWarsGarage.Numbering.Set(DrugWarsGarage.Numbering.level1, false)
|
||||||
|
DrugWarsGarage.Style.Set(DrugWarsGarage.Style.immaculate, false)
|
||||||
|
DrugWarsGarage.Tint.SetColor(DrugWarsGarage.Tint.white, false)
|
||||||
|
|
||||||
|
RefreshInterior(DrugWarsGarage.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
38
resources/[core]/bob74_ipl/dlc_drugwars/lab.lua
Normal file
38
resources/[core]/bob74_ipl/dlc_drugwars/lab.lua
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
-- Acid Lab: 483.4252, -2625.071, -50.000
|
||||||
|
exports('GetDrugWarsLabObject', function()
|
||||||
|
return DrugWarsLab
|
||||||
|
end)
|
||||||
|
|
||||||
|
DrugWarsLab = {
|
||||||
|
interiorId = 290305,
|
||||||
|
|
||||||
|
Details = {
|
||||||
|
products = {
|
||||||
|
"set_product_01",
|
||||||
|
"set_product_02",
|
||||||
|
"set_product_03",
|
||||||
|
"set_product_04",
|
||||||
|
"set_product_05"
|
||||||
|
},
|
||||||
|
supplies = {
|
||||||
|
"set_supplies_01",
|
||||||
|
"set_supplies_02",
|
||||||
|
"set_supplies_03",
|
||||||
|
"set_supplies_04",
|
||||||
|
"set_supplies_05",
|
||||||
|
},
|
||||||
|
equipment = "set_equipment_upgrade",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(DrugWarsLab.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
DrugWarsLab.Details.Enable(DrugWarsLab.Details.products, true, false)
|
||||||
|
DrugWarsLab.Details.Enable(DrugWarsLab.Details.supplies, true, false)
|
||||||
|
DrugWarsLab.Details.Enable(DrugWarsLab.Details.equipment, true, false)
|
||||||
|
|
||||||
|
RefreshInterior(DrugWarsLab.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
12
resources/[core]/bob74_ipl/dlc_drugwars/traincrash.lua
Normal file
12
resources/[core]/bob74_ipl/dlc_drugwars/traincrash.lua
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
-- Train crash: 2630.595, 1458.144, 25.3669
|
||||||
|
exports('GetDrugWarsTrainCrashObject', function()
|
||||||
|
return DrugWarsTrainCrash
|
||||||
|
end)
|
||||||
|
|
||||||
|
DrugWarsTrainCrash = {
|
||||||
|
ipl = "xm3_train_crash",
|
||||||
|
|
||||||
|
Enable = function(state)
|
||||||
|
EnableIpl(DrugWarsTrainCrash.ipl, state)
|
||||||
|
end
|
||||||
|
}
|
||||||
136
resources/[core]/bob74_ipl/dlc_executive/apartment1.lua
Normal file
136
resources/[core]/bob74_ipl/dlc_executive/apartment1.lua
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
-- Apartment 1: -787.78050000 334.92320000 215.83840000
|
||||||
|
exports('GetExecApartment1Object', function()
|
||||||
|
return ExecApartment1
|
||||||
|
end)
|
||||||
|
|
||||||
|
ExecApartment1 = {
|
||||||
|
currentInteriorId = -1,
|
||||||
|
|
||||||
|
Style = {
|
||||||
|
Theme = {
|
||||||
|
modern = {
|
||||||
|
interiorId = 227329,
|
||||||
|
ipl = "apa_v_mp_h_01_a"
|
||||||
|
},
|
||||||
|
moody = {
|
||||||
|
interiorId = 228097,
|
||||||
|
ipl = "apa_v_mp_h_02_a"
|
||||||
|
},
|
||||||
|
vibrant = {
|
||||||
|
interiorId = 228865,
|
||||||
|
ipl = "apa_v_mp_h_03_a"
|
||||||
|
},
|
||||||
|
sharp = {
|
||||||
|
interiorId = 229633,
|
||||||
|
ipl = "apa_v_mp_h_04_a"
|
||||||
|
},
|
||||||
|
monochrome = {
|
||||||
|
interiorId = 230401,
|
||||||
|
ipl = "apa_v_mp_h_05_a"
|
||||||
|
},
|
||||||
|
seductive = {
|
||||||
|
interiorId = 231169,
|
||||||
|
ipl = "apa_v_mp_h_06_a"
|
||||||
|
},
|
||||||
|
regal = {
|
||||||
|
interiorId = 231937,
|
||||||
|
ipl = "apa_v_mp_h_07_a"
|
||||||
|
},
|
||||||
|
aqua = {
|
||||||
|
interiorId = 232705,
|
||||||
|
ipl = "apa_v_mp_h_08_a"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
Set = function(style, refresh)
|
||||||
|
if type(style) == "table" then
|
||||||
|
ExecApartment1.Style.Clear()
|
||||||
|
ExecApartment1.currentInteriorId = style.interiorId
|
||||||
|
|
||||||
|
EnableIpl(style.ipl, true)
|
||||||
|
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(style.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
for key, value in pairs(ExecApartment1.Style.Theme) do
|
||||||
|
SetIplPropState(value.interiorId, {
|
||||||
|
"Apart_Hi_Strip_A",
|
||||||
|
"Apart_Hi_Strip_B",
|
||||||
|
"Apart_Hi_Strip_C"
|
||||||
|
}, false)
|
||||||
|
SetIplPropState(value.interiorId, {
|
||||||
|
"Apart_Hi_Booze_A",
|
||||||
|
"Apart_Hi_Booze_B",
|
||||||
|
"Apart_Hi_Booze_C"
|
||||||
|
}, false)
|
||||||
|
SetIplPropState(value.interiorId, {
|
||||||
|
"Apart_Hi_Smokes_A",
|
||||||
|
"Apart_Hi_Smokes_B",
|
||||||
|
"Apart_Hi_Smokes_C"
|
||||||
|
}, false, true)
|
||||||
|
EnableIpl(value.ipl, false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Strip = {
|
||||||
|
A = "Apart_Hi_Strip_A",
|
||||||
|
B = "Apart_Hi_Strip_B",
|
||||||
|
C = "Apart_Hi_Strip_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(ExecApartment1.currentInteriorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Booze = {
|
||||||
|
A = "Apart_Hi_Booze_A",
|
||||||
|
B = "Apart_Hi_Booze_B",
|
||||||
|
C = "Apart_Hi_Booze_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(ExecApartment1.currentInteriorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Smoke = {
|
||||||
|
none = "",
|
||||||
|
stage1 = "Apart_Hi_Smokes_A",
|
||||||
|
stage2 = "Apart_Hi_Smokes_B",
|
||||||
|
stage3 = "Apart_Hi_Smokes_C",
|
||||||
|
|
||||||
|
Set = function(smoke, refresh)
|
||||||
|
ExecApartment1.Smoke.Clear(false)
|
||||||
|
|
||||||
|
if smoke ~= nil then
|
||||||
|
SetIplPropState(ExecApartment1.currentInteriorId, smoke, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(ExecApartment1.currentInteriorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(ExecApartment1.currentInteriorId, {
|
||||||
|
ExecApartment1.Smoke.stage1,
|
||||||
|
ExecApartment1.Smoke.stage2,
|
||||||
|
ExecApartment1.Smoke.stage3
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
ExecApartment1.Style.Set(ExecApartment1.Style.Theme.modern, true)
|
||||||
|
ExecApartment1.Strip.Enable({
|
||||||
|
ExecApartment1.Strip.A,
|
||||||
|
ExecApartment1.Strip.B,
|
||||||
|
ExecApartment1.Strip.C
|
||||||
|
}, false)
|
||||||
|
ExecApartment1.Booze.Enable({
|
||||||
|
ExecApartment1.Booze.A,
|
||||||
|
ExecApartment1.Booze.B,
|
||||||
|
ExecApartment1.Booze.C
|
||||||
|
}, false)
|
||||||
|
ExecApartment1.Smoke.Set(ExecApartment1.Smoke.none)
|
||||||
|
end
|
||||||
|
}
|
||||||
135
resources/[core]/bob74_ipl/dlc_executive/apartment2.lua
Normal file
135
resources/[core]/bob74_ipl/dlc_executive/apartment2.lua
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
-- Apartment 2: -773.22580000 322.82520000 194.88620000
|
||||||
|
exports('GetExecApartment2Object', function()
|
||||||
|
return ExecApartment2
|
||||||
|
end)
|
||||||
|
|
||||||
|
ExecApartment2 = {
|
||||||
|
currentInteriorId = -1,
|
||||||
|
|
||||||
|
Style = {
|
||||||
|
Theme = {
|
||||||
|
modern = {
|
||||||
|
interiorId = 227585,
|
||||||
|
ipl = "apa_v_mp_h_01_b"
|
||||||
|
},
|
||||||
|
moody = {
|
||||||
|
interiorId = 228353,
|
||||||
|
ipl = "apa_v_mp_h_02_b"
|
||||||
|
},
|
||||||
|
vibrant = {
|
||||||
|
interiorId = 229121,
|
||||||
|
ipl = "apa_v_mp_h_03_b"
|
||||||
|
},
|
||||||
|
sharp = {
|
||||||
|
interiorId = 229889,
|
||||||
|
ipl = "apa_v_mp_h_04_b"
|
||||||
|
},
|
||||||
|
monochrome = {
|
||||||
|
interiorId = 230657,
|
||||||
|
ipl = "apa_v_mp_h_05_b"
|
||||||
|
},
|
||||||
|
seductive = {
|
||||||
|
interiorId = 231425,
|
||||||
|
ipl = "apa_v_mp_h_06_b"
|
||||||
|
},
|
||||||
|
regal = {
|
||||||
|
interiorId = 232193,
|
||||||
|
ipl = "apa_v_mp_h_07_b"
|
||||||
|
},
|
||||||
|
aqua = {
|
||||||
|
interiorId = 232961,
|
||||||
|
ipl = "apa_v_mp_h_08_b"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
Set = function(style, refresh)
|
||||||
|
if type(style) == "table" then
|
||||||
|
ExecApartment2.Style.Clear()
|
||||||
|
ExecApartment2.currentInteriorId = style.interiorId
|
||||||
|
|
||||||
|
EnableIpl(style.ipl, true)
|
||||||
|
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(style.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
for key, value in pairs(ExecApartment2.Style.Theme) do
|
||||||
|
SetIplPropState(value.interiorId, {
|
||||||
|
"Apart_Hi_Strip_A",
|
||||||
|
"Apart_Hi_Strip_B",
|
||||||
|
"Apart_Hi_Strip_C"}, false)
|
||||||
|
SetIplPropState(value.interiorId, {
|
||||||
|
"Apart_Hi_Booze_A",
|
||||||
|
"Apart_Hi_Booze_B",
|
||||||
|
"Apart_Hi_Booze_C"
|
||||||
|
}, false)
|
||||||
|
SetIplPropState(value.interiorId, {
|
||||||
|
"Apart_Hi_Smokes_A",
|
||||||
|
"Apart_Hi_Smokes_B",
|
||||||
|
"Apart_Hi_Smokes_C"
|
||||||
|
}, false, true)
|
||||||
|
EnableIpl(value.ipl, false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Strip = {
|
||||||
|
A = "Apart_Hi_Strip_A",
|
||||||
|
B = "Apart_Hi_Strip_B",
|
||||||
|
C = "Apart_Hi_Strip_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(ExecApartment2.currentInteriorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Booze = {
|
||||||
|
A = "Apart_Hi_Booze_A",
|
||||||
|
B = "Apart_Hi_Booze_B",
|
||||||
|
C = "Apart_Hi_Booze_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(ExecApartment2.currentInteriorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Smoke = {
|
||||||
|
none = "",
|
||||||
|
stage1 = "Apart_Hi_Smokes_A",
|
||||||
|
stage2 = "Apart_Hi_Smokes_B",
|
||||||
|
stage3 = "Apart_Hi_Smokes_C",
|
||||||
|
|
||||||
|
Set = function(smoke, refresh)
|
||||||
|
ExecApartment2.Smoke.Clear(false)
|
||||||
|
|
||||||
|
if smoke ~= nil then
|
||||||
|
SetIplPropState(ExecApartment2.currentInteriorId, smoke, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(ExecApartment2.currentInteriorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(ExecApartment2.currentInteriorId, {
|
||||||
|
ExecApartment2.Smoke.stage1,
|
||||||
|
ExecApartment2.Smoke.stage2,
|
||||||
|
ExecApartment2.Smoke.stage3
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
ExecApartment2.Style.Set(ExecApartment2.Style.Theme.seductive, true)
|
||||||
|
ExecApartment2.Strip.Enable({
|
||||||
|
ExecApartment2.Strip.A,
|
||||||
|
ExecApartment2.Strip.B,
|
||||||
|
ExecApartment2.Strip.C
|
||||||
|
}, false)
|
||||||
|
ExecApartment2.Booze.Enable({
|
||||||
|
ExecApartment2.Booze.A,
|
||||||
|
ExecApartment2.Booze.B,
|
||||||
|
ExecApartment2.Booze.C
|
||||||
|
}, false)
|
||||||
|
ExecApartment2.Smoke.Set(ExecApartment2.Smoke.none)
|
||||||
|
end
|
||||||
|
}
|
||||||
136
resources/[core]/bob74_ipl/dlc_executive/apartment3.lua
Normal file
136
resources/[core]/bob74_ipl/dlc_executive/apartment3.lua
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
-- Apartment 3: -787.78050000 334.92320000 186.11340000
|
||||||
|
exports('GetExecApartment3Object', function()
|
||||||
|
return ExecApartment3
|
||||||
|
end)
|
||||||
|
|
||||||
|
ExecApartment3 = {
|
||||||
|
currentInteriorId = -1,
|
||||||
|
|
||||||
|
Style = {
|
||||||
|
Theme = {
|
||||||
|
modern = {
|
||||||
|
interiorId = 227841,
|
||||||
|
ipl = "apa_v_mp_h_01_c"
|
||||||
|
},
|
||||||
|
moody = {
|
||||||
|
interiorId = 228609,
|
||||||
|
ipl = "apa_v_mp_h_02_c"
|
||||||
|
},
|
||||||
|
vibrant = {
|
||||||
|
interiorId = 229377,
|
||||||
|
ipl = "apa_v_mp_h_03_c"
|
||||||
|
},
|
||||||
|
sharp = {
|
||||||
|
interiorId = 230145,
|
||||||
|
ipl = "apa_v_mp_h_04_c"
|
||||||
|
},
|
||||||
|
monochrome = {
|
||||||
|
interiorId = 230913,
|
||||||
|
ipl = "apa_v_mp_h_05_c"
|
||||||
|
},
|
||||||
|
seductive = {
|
||||||
|
interiorId = 231681,
|
||||||
|
ipl = "apa_v_mp_h_06_c"
|
||||||
|
},
|
||||||
|
regal = {
|
||||||
|
interiorId = 232449,
|
||||||
|
ipl = "apa_v_mp_h_07_c"
|
||||||
|
},
|
||||||
|
aqua = {
|
||||||
|
interiorId = 233217,
|
||||||
|
ipl = "apa_v_mp_h_08_c"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
Set = function(style, refresh)
|
||||||
|
if type(style) == "table" then
|
||||||
|
ExecApartment3.Style.Clear()
|
||||||
|
ExecApartment3.currentInteriorId = style.interiorId
|
||||||
|
|
||||||
|
EnableIpl(style.ipl, true)
|
||||||
|
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(style.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
for key, value in pairs(ExecApartment3.Style.Theme) do
|
||||||
|
SetIplPropState(value.interiorId, {
|
||||||
|
"Apart_Hi_Strip_A",
|
||||||
|
"Apart_Hi_Strip_B",
|
||||||
|
"Apart_Hi_Strip_C"
|
||||||
|
}, false)
|
||||||
|
SetIplPropState(value.interiorId, {
|
||||||
|
"Apart_Hi_Booze_A",
|
||||||
|
"Apart_Hi_Booze_B",
|
||||||
|
"Apart_Hi_Booze_C"
|
||||||
|
}, false)
|
||||||
|
SetIplPropState(value.interiorId, {
|
||||||
|
"Apart_Hi_Smokes_A",
|
||||||
|
"Apart_Hi_Smokes_B",
|
||||||
|
"Apart_Hi_Smokes_C"
|
||||||
|
}, false, true)
|
||||||
|
EnableIpl(value.ipl, false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Strip = {
|
||||||
|
A = "Apart_Hi_Strip_A",
|
||||||
|
B = "Apart_Hi_Strip_B",
|
||||||
|
C = "Apart_Hi_Strip_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(ExecApartment3.currentInteriorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Booze = {
|
||||||
|
A = "Apart_Hi_Booze_A",
|
||||||
|
B = "Apart_Hi_Booze_B",
|
||||||
|
C = "Apart_Hi_Booze_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(ExecApartment3.currentInteriorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Smoke = {
|
||||||
|
none = "",
|
||||||
|
stage1 = "Apart_Hi_Smokes_A",
|
||||||
|
stage2 = "Apart_Hi_Smokes_B",
|
||||||
|
stage3 = "Apart_Hi_Smokes_C",
|
||||||
|
|
||||||
|
Set = function(smoke, refresh)
|
||||||
|
ExecApartment3.Smoke.Clear(false)
|
||||||
|
|
||||||
|
if smoke ~= nil then
|
||||||
|
SetIplPropState(ExecApartment3.currentInteriorId, smoke, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(ExecApartment3.currentInteriorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(ExecApartment3.currentInteriorId, {
|
||||||
|
ExecApartment3.Smoke.stage1,
|
||||||
|
ExecApartment3.Smoke.stage2,
|
||||||
|
ExecApartment3.Smoke.stage3
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
ExecApartment3.Style.Set(ExecApartment3.Style.Theme.sharp, true)
|
||||||
|
ExecApartment3.Strip.Enable({
|
||||||
|
ExecApartment3.Strip.A,
|
||||||
|
ExecApartment3.Strip.B,
|
||||||
|
ExecApartment3.Strip.C
|
||||||
|
}, false)
|
||||||
|
ExecApartment3.Booze.Enable({
|
||||||
|
ExecApartment3.Booze.A,
|
||||||
|
ExecApartment3.Booze.B,
|
||||||
|
ExecApartment3.Booze.C
|
||||||
|
}, false)
|
||||||
|
ExecApartment3.Smoke.Set(ExecApartment3.Smoke.none)
|
||||||
|
end
|
||||||
|
}
|
||||||
324
resources/[core]/bob74_ipl/dlc_finance/office1.lua
Normal file
324
resources/[core]/bob74_ipl/dlc_finance/office1.lua
Normal file
@ -0,0 +1,324 @@
|
|||||||
|
-- Office 1: -141.1987, -620.913, 168.8205 (Arcadius Business Centre)
|
||||||
|
exports('GetFinanceOffice1Object', function()
|
||||||
|
return FinanceOffice1
|
||||||
|
end)
|
||||||
|
|
||||||
|
FinanceOffice1 = {
|
||||||
|
currentInteriorId = -1,
|
||||||
|
currentSafeDoors = {
|
||||||
|
hashL = "",
|
||||||
|
hashR = ""
|
||||||
|
},
|
||||||
|
|
||||||
|
Style = {
|
||||||
|
Theme = {
|
||||||
|
warm = {
|
||||||
|
interiorId = 236289,
|
||||||
|
ipl = "ex_dt1_02_office_01a",
|
||||||
|
safe = "ex_prop_safedoor_office1a"
|
||||||
|
},
|
||||||
|
classical = {
|
||||||
|
interiorId = 236545,
|
||||||
|
ipl = "ex_dt1_02_office_01b",
|
||||||
|
safe = "ex_prop_safedoor_office1b"
|
||||||
|
},
|
||||||
|
vintage = {
|
||||||
|
interiorId = 236801,
|
||||||
|
ipl = "ex_dt1_02_office_01c",
|
||||||
|
safe = "ex_prop_safedoor_office1c"
|
||||||
|
},
|
||||||
|
contrast = {
|
||||||
|
interiorId = 237057,
|
||||||
|
ipl = "ex_dt1_02_office_02a",
|
||||||
|
safe = "ex_prop_safedoor_office2a"
|
||||||
|
},
|
||||||
|
rich = {
|
||||||
|
interiorId = 237313,
|
||||||
|
ipl = "ex_dt1_02_office_02b",
|
||||||
|
safe = "ex_prop_safedoor_office2a"
|
||||||
|
},
|
||||||
|
cool = {
|
||||||
|
interiorId = 237569,
|
||||||
|
ipl = "ex_dt1_02_office_02c",
|
||||||
|
safe = "ex_prop_safedoor_office2a"
|
||||||
|
},
|
||||||
|
ice = {
|
||||||
|
interiorId = 237825,
|
||||||
|
ipl = "ex_dt1_02_office_03a",
|
||||||
|
safe = "ex_prop_safedoor_office3a"
|
||||||
|
},
|
||||||
|
conservative = {
|
||||||
|
interiorId = 238081,
|
||||||
|
ipl = "ex_dt1_02_office_03b",
|
||||||
|
safe = "ex_prop_safedoor_office3a"
|
||||||
|
},
|
||||||
|
polished = {
|
||||||
|
interiorId = 238337,
|
||||||
|
ipl = "ex_dt1_02_office_03c",
|
||||||
|
safe = "ex_prop_safedoor_office3c"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Set = function(style, refresh)
|
||||||
|
if refresh == nil then
|
||||||
|
refresh = false
|
||||||
|
end
|
||||||
|
|
||||||
|
if type(style) == "table" then
|
||||||
|
FinanceOffice1.Style.Clear()
|
||||||
|
FinanceOffice1.currentInteriorId = style.interiorId
|
||||||
|
FinanceOffice1.currentSafeDoors = {
|
||||||
|
hashL = GetHashKey(style.safe .. "_l"),
|
||||||
|
hashR = GetHashKey(style.safe .. "_r")
|
||||||
|
}
|
||||||
|
|
||||||
|
EnableIpl(style.ipl, true)
|
||||||
|
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(style.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
for themeKey, themeValue in pairs(FinanceOffice1.Style.Theme) do
|
||||||
|
for swagKey, swagValue in pairs(FinanceOffice1.Swag) do
|
||||||
|
if type(swagValue) == "table" then
|
||||||
|
SetIplPropState(themeValue.interiorId, {
|
||||||
|
swagValue.A,
|
||||||
|
swagValue.B,
|
||||||
|
swagValue.C
|
||||||
|
}, false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
SetIplPropState(themeValue.interiorId, "office_chairs", false, false)
|
||||||
|
SetIplPropState(themeValue.interiorId, "office_booze", false, true)
|
||||||
|
|
||||||
|
FinanceOffice1.currentSafeDoors = {
|
||||||
|
hashL = 0,
|
||||||
|
hashR = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
EnableIpl(themeValue.ipl, false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Safe = {
|
||||||
|
doorHeadingL = 96.0, -- Only need the heading of the Left door to get the Right ones
|
||||||
|
Position = vector3(-124.25, -641.30, 168.870), -- Approximately between the two doors
|
||||||
|
-- These values are checked from "doorHandler.lua" and
|
||||||
|
isLeftDoorOpen = false,
|
||||||
|
isRightDoorOpen = false,
|
||||||
|
|
||||||
|
-- Safe door API
|
||||||
|
Open = function(doorSide)
|
||||||
|
if doorSide:lower() == "left" then
|
||||||
|
FinanceOffice1.Safe.isLeftDoorOpen = true
|
||||||
|
elseif doorSide:lower() == "right" then
|
||||||
|
FinanceOffice1.Safe.isRightDoorOpen = true
|
||||||
|
else
|
||||||
|
print("[bob74_ipl] Warning: " .. doorSide .. " is not a correct value. Valid values are: left right")
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Close = function(doorSide)
|
||||||
|
if doorSide:lower() == "left" then
|
||||||
|
FinanceOffice1.Safe.isLeftDoorOpen = false
|
||||||
|
elseif doorSide:lower() == "right" then
|
||||||
|
FinanceOffice1.Safe.isRightDoorOpen = false
|
||||||
|
else
|
||||||
|
print("[bob74_ipl] Warning: " .. doorSide .. " is not a correct value. Valid values are: left right")
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
|
||||||
|
-- Internal use only
|
||||||
|
SetDoorState = function(doorSide, open)
|
||||||
|
local doorHandle = 0
|
||||||
|
local heading = FinanceOffice1.Safe.doorHeadingL
|
||||||
|
|
||||||
|
if doorSide:lower() == "left" then
|
||||||
|
doorHandle = FinanceOffice1.Safe.GetDoorHandle(FinanceOffice1.currentSafeDoors.hashL)
|
||||||
|
|
||||||
|
if open then
|
||||||
|
heading = heading - 90.0
|
||||||
|
end
|
||||||
|
elseif doorSide:lower() == "right" then
|
||||||
|
doorHandle = FinanceOffice1.Safe.GetDoorHandle(FinanceOffice1.currentSafeDoors.hashR)
|
||||||
|
heading = heading - 180
|
||||||
|
|
||||||
|
if open then
|
||||||
|
heading = heading + 90.0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if doorHandle == 0 then
|
||||||
|
print("[bob74_ipl] Warning: " .. doorSide .. " safe door handle is 0")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
SetEntityHeading(doorHandle, heading)
|
||||||
|
end,
|
||||||
|
|
||||||
|
-- /!\ handle changes whenever the interior is refreshed /!\
|
||||||
|
GetDoorHandle = function(doorHash)
|
||||||
|
local timeout = 4
|
||||||
|
local doorHandle = GetClosestObjectOfType(FinanceOffice1.Safe.Position.x, FinanceOffice1.Safe.Position.y, FinanceOffice1.Safe.Position.z, 5.0, doorHash, false, false, false)
|
||||||
|
|
||||||
|
while doorHandle == 0 do
|
||||||
|
Wait(25)
|
||||||
|
|
||||||
|
doorHandle = GetClosestObjectOfType(FinanceOffice1.Safe.Position.x, FinanceOffice1.Safe.Position.y, FinanceOffice1.Safe.Position.z, 5.0, doorHash, false, false, false)
|
||||||
|
timeout = timeout - 1
|
||||||
|
|
||||||
|
if timeout <= 0 then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return doorHandle
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Swag = {
|
||||||
|
Cash = {
|
||||||
|
A = "cash_set_01",
|
||||||
|
B = "cash_set_02",
|
||||||
|
C = "cash_set_03",
|
||||||
|
D = "cash_set_04",
|
||||||
|
E = "cash_set_05",
|
||||||
|
F = "cash_set_06",
|
||||||
|
G = "cash_set_07",
|
||||||
|
H = "cash_set_08",
|
||||||
|
I = "cash_set_09",
|
||||||
|
J = "cash_set_10",
|
||||||
|
K = "cash_set_11",
|
||||||
|
L = "cash_set_12",
|
||||||
|
M = "cash_set_13",
|
||||||
|
N = "cash_set_14",
|
||||||
|
O = "cash_set_15",
|
||||||
|
P = "cash_set_16",
|
||||||
|
Q = "cash_set_17",
|
||||||
|
R = "cash_set_18",
|
||||||
|
S = "cash_set_19",
|
||||||
|
T = "cash_set_20",
|
||||||
|
U = "cash_set_21",
|
||||||
|
V = "cash_set_22",
|
||||||
|
W = "cash_set_23",
|
||||||
|
X = "cash_set_24"
|
||||||
|
},
|
||||||
|
BoozeCigs = {
|
||||||
|
A = "swag_booze_cigs",
|
||||||
|
B = "swag_booze_cigs2",
|
||||||
|
C = "swag_booze_cigs3"
|
||||||
|
},
|
||||||
|
Counterfeit = {
|
||||||
|
A = "swag_counterfeit",
|
||||||
|
B = "swag_counterfeit2",
|
||||||
|
C = "swag_counterfeit3"
|
||||||
|
},
|
||||||
|
DrugBags = {
|
||||||
|
A = "swag_drugbags",
|
||||||
|
B = "swag_drugbags2",
|
||||||
|
C = "swag_drugbags3"
|
||||||
|
},
|
||||||
|
DrugStatue = {
|
||||||
|
A = "swag_drugstatue",
|
||||||
|
B = "swag_drugstatue2",
|
||||||
|
C = "swag_drugstatue3"
|
||||||
|
},
|
||||||
|
Electronic = {
|
||||||
|
A = "swag_electronic",
|
||||||
|
B = "swag_electronic2",
|
||||||
|
C = "swag_electronic3"
|
||||||
|
},
|
||||||
|
FurCoats = {
|
||||||
|
A = "swag_furcoats",
|
||||||
|
B = "swag_furcoats2",
|
||||||
|
C = "swag_furcoats3"
|
||||||
|
},
|
||||||
|
Gems = {
|
||||||
|
A = "swag_gems",
|
||||||
|
B = "swag_gems2",
|
||||||
|
C = "swag_gems3"
|
||||||
|
},
|
||||||
|
Guns = {
|
||||||
|
A = "swag_guns",
|
||||||
|
B = "swag_guns2",
|
||||||
|
C = "swag_guns3"
|
||||||
|
},
|
||||||
|
Ivory = {
|
||||||
|
A = "swag_ivory",
|
||||||
|
B = "swag_ivory2",
|
||||||
|
C = "swag_ivory3"
|
||||||
|
},
|
||||||
|
Jewel = {
|
||||||
|
A = "swag_jewelwatch",
|
||||||
|
B = "swag_jewelwatch2",
|
||||||
|
C = "swag_jewelwatch3"
|
||||||
|
},
|
||||||
|
Med = {
|
||||||
|
A = "swag_med",
|
||||||
|
B = "swag_med2",
|
||||||
|
C = "swag_med3"
|
||||||
|
},
|
||||||
|
Painting = {
|
||||||
|
A = "swag_art",
|
||||||
|
B = "swag_art2",
|
||||||
|
C = "swag_art3"
|
||||||
|
},
|
||||||
|
Pills = {
|
||||||
|
A = "swag_pills",
|
||||||
|
B = "swag_pills2",
|
||||||
|
C = "swag_pills3"
|
||||||
|
},
|
||||||
|
Silver = {
|
||||||
|
A = "swag_silver",
|
||||||
|
B = "swag_silver2",
|
||||||
|
C = "swag_silver3"
|
||||||
|
},
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(FinanceOffice1.currentInteriorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Chairs = {
|
||||||
|
off = "",
|
||||||
|
on = "office_chairs",
|
||||||
|
|
||||||
|
Set = function(chairs, refresh)
|
||||||
|
FinanceOffice1.Chairs.Clear(false)
|
||||||
|
|
||||||
|
if chairs ~= nil then
|
||||||
|
SetIplPropState(FinanceOffice1.currentInteriorId, chairs, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(FinanceOffice1.currentInteriorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(FinanceOffice1.currentInteriorId, FinanceOffice1.Chairs.on, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Booze = {
|
||||||
|
off = "",
|
||||||
|
on = "office_booze",
|
||||||
|
|
||||||
|
Set = function(booze, refresh)
|
||||||
|
FinanceOffice1.Booze.Clear(false)
|
||||||
|
|
||||||
|
if booze ~= nil then
|
||||||
|
SetIplPropState(FinanceOffice1.currentInteriorId, booze, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(FinanceOffice1.currentInteriorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(FinanceOffice1.currentInteriorId, FinanceOffice1.Booze.on, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
FinanceOffice1.Style.Set(FinanceOffice1.Style.Theme.polished)
|
||||||
|
FinanceOffice1.Chairs.Set(FinanceOffice1.Chairs.on, true)
|
||||||
|
end
|
||||||
|
}
|
||||||
324
resources/[core]/bob74_ipl/dlc_finance/office2.lua
Normal file
324
resources/[core]/bob74_ipl/dlc_finance/office2.lua
Normal file
@ -0,0 +1,324 @@
|
|||||||
|
-- Office 2: -75.8466, -826.9893, 243.3859 (Maze Bank Building)
|
||||||
|
exports('GetFinanceOffice2Object', function()
|
||||||
|
return FinanceOffice2
|
||||||
|
end)
|
||||||
|
|
||||||
|
FinanceOffice2 = {
|
||||||
|
currentInteriorId = -1,
|
||||||
|
currentSafeDoors = {
|
||||||
|
hashL = "",
|
||||||
|
hashR = ""
|
||||||
|
},
|
||||||
|
|
||||||
|
Style = {
|
||||||
|
Theme = {
|
||||||
|
warm = {
|
||||||
|
interiorId = 238593,
|
||||||
|
ipl = "ex_dt1_11_office_01a",
|
||||||
|
safe = "ex_prop_safedoor_office1a"
|
||||||
|
},
|
||||||
|
classical = {
|
||||||
|
interiorId = 238849,
|
||||||
|
ipl = "ex_dt1_11_office_01b",
|
||||||
|
safe = "ex_prop_safedoor_office1b"
|
||||||
|
},
|
||||||
|
vintage = {
|
||||||
|
interiorId = 239105,
|
||||||
|
ipl = "ex_dt1_11_office_01c",
|
||||||
|
safe = "ex_prop_safedoor_office1c"
|
||||||
|
},
|
||||||
|
contrast = {
|
||||||
|
interiorId = 239361,
|
||||||
|
ipl = "ex_dt1_11_office_02a",
|
||||||
|
safe = "ex_prop_safedoor_office2a"
|
||||||
|
},
|
||||||
|
rich = {
|
||||||
|
interiorId = 239617,
|
||||||
|
ipl = "ex_dt1_11_office_02b",
|
||||||
|
safe = "ex_prop_safedoor_office2a"
|
||||||
|
},
|
||||||
|
cool = {
|
||||||
|
interiorId = 239873,
|
||||||
|
ipl = "ex_dt1_11_office_02c",
|
||||||
|
safe = "ex_prop_safedoor_office2a"
|
||||||
|
},
|
||||||
|
ice = {
|
||||||
|
interiorId = 240129,
|
||||||
|
ipl = "ex_dt1_11_office_03a",
|
||||||
|
safe = "ex_prop_safedoor_office3a"
|
||||||
|
},
|
||||||
|
conservative = {
|
||||||
|
interiorId = 240385,
|
||||||
|
ipl = "ex_dt1_11_office_03b",
|
||||||
|
safe = "ex_prop_safedoor_office3a"
|
||||||
|
},
|
||||||
|
polished = {
|
||||||
|
interiorId = 240641,
|
||||||
|
ipl = "ex_dt1_11_office_03c",
|
||||||
|
safe = "ex_prop_safedoor_office3c"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Set = function(style, refresh)
|
||||||
|
if refresh == nil then
|
||||||
|
refresh = false
|
||||||
|
end
|
||||||
|
|
||||||
|
if type(style) == "table" then
|
||||||
|
FinanceOffice2.Style.Clear()
|
||||||
|
FinanceOffice2.currentInteriorId = style.interiorId
|
||||||
|
FinanceOffice2.currentSafeDoors = {
|
||||||
|
hashL = GetHashKey(style.safe .. "_l"),
|
||||||
|
hashR = GetHashKey(style.safe .. "_r")
|
||||||
|
}
|
||||||
|
|
||||||
|
EnableIpl(style.ipl, true)
|
||||||
|
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(style.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
for themeKey, themeValue in pairs(FinanceOffice2.Style.Theme) do
|
||||||
|
for swagKey, swagValue in pairs(FinanceOffice2.Swag) do
|
||||||
|
if type(swagValue) == "table" then
|
||||||
|
SetIplPropState(themeValue.interiorId, {
|
||||||
|
swagValue.A,
|
||||||
|
swagValue.B,
|
||||||
|
swagValue.C
|
||||||
|
}, false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
SetIplPropState(themeValue.interiorId, "office_chairs", false, false)
|
||||||
|
SetIplPropState(themeValue.interiorId, "office_booze", false, true)
|
||||||
|
|
||||||
|
FinanceOffice2.currentSafeDoors = {
|
||||||
|
hashL = 0,
|
||||||
|
hashR = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
EnableIpl(themeValue.ipl, false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Safe = {
|
||||||
|
doorHeadingL = 250.0, -- Only need the heading of the Left door to get the Right ones
|
||||||
|
Position = vector3(-82.593, -801.0, 243.385), -- Approximately between the two doors
|
||||||
|
-- These values are checked from "doorHandler.lua" and
|
||||||
|
isLeftDoorOpen = false,
|
||||||
|
isRightDoorOpen = false,
|
||||||
|
|
||||||
|
-- Safe door API
|
||||||
|
Open = function(doorSide)
|
||||||
|
if doorSide:lower() == "left" then
|
||||||
|
FinanceOffice2.Safe.isLeftDoorOpen = true
|
||||||
|
elseif doorSide:lower() == "right" then
|
||||||
|
FinanceOffice2.Safe.isRightDoorOpen = true
|
||||||
|
else
|
||||||
|
print("[bob74_ipl] Warning: " .. doorSide .. " is not a correct value. Valid values are: left right")
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Close = function(doorSide)
|
||||||
|
if doorSide:lower() == "left" then
|
||||||
|
FinanceOffice2.Safe.isLeftDoorOpen = false
|
||||||
|
elseif doorSide:lower() == "right" then
|
||||||
|
FinanceOffice2.Safe.isRightDoorOpen = false
|
||||||
|
else
|
||||||
|
print("[bob74_ipl] Warning: " .. doorSide .. " is not a correct value. Valid values are: left right")
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
|
||||||
|
-- Internal use only
|
||||||
|
SetDoorState = function(doorSide, open)
|
||||||
|
local doorHandle = 0
|
||||||
|
local heading = FinanceOffice2.Safe.doorHeadingL
|
||||||
|
|
||||||
|
if doorSide:lower() == "left" then
|
||||||
|
doorHandle = FinanceOffice2.Safe.GetDoorHandle(FinanceOffice2.currentSafeDoors.hashL)
|
||||||
|
|
||||||
|
if open then
|
||||||
|
heading = heading - 90.0
|
||||||
|
end
|
||||||
|
elseif doorSide:lower() == "right" then
|
||||||
|
doorHandle = FinanceOffice2.Safe.GetDoorHandle(FinanceOffice2.currentSafeDoors.hashR)
|
||||||
|
heading = heading - 180
|
||||||
|
|
||||||
|
if open then
|
||||||
|
heading = heading + 90.0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if doorHandle == 0 then
|
||||||
|
print("[bob74_ipl] Warning: " .. doorSide .. " safe door handle is 0")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
SetEntityHeading(doorHandle, heading)
|
||||||
|
end,
|
||||||
|
|
||||||
|
-- /!\ handle changes whenever the interior is refreshed /!\
|
||||||
|
GetDoorHandle = function(doorHash)
|
||||||
|
local timeout = 4
|
||||||
|
local doorHandle = GetClosestObjectOfType(FinanceOffice2.Safe.Position.x, FinanceOffice2.Safe.Position.y, FinanceOffice2.Safe.Position.z, 5.0, doorHash, false, false, false)
|
||||||
|
|
||||||
|
while doorHandle == 0 do
|
||||||
|
Wait(25)
|
||||||
|
|
||||||
|
doorHandle = GetClosestObjectOfType(FinanceOffice2.Safe.Position.x, FinanceOffice2.Safe.Position.y, FinanceOffice2.Safe.Position.z, 5.0, doorHash, false, false, false)
|
||||||
|
timeout = timeout - 1
|
||||||
|
|
||||||
|
if timeout <= 0 then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return doorHandle
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Swag = {
|
||||||
|
Cash = {
|
||||||
|
A = "cash_set_01",
|
||||||
|
B = "cash_set_02",
|
||||||
|
C = "cash_set_03",
|
||||||
|
D = "cash_set_04",
|
||||||
|
E = "cash_set_05",
|
||||||
|
F = "cash_set_06",
|
||||||
|
G = "cash_set_07",
|
||||||
|
H = "cash_set_08",
|
||||||
|
I = "cash_set_09",
|
||||||
|
J = "cash_set_10",
|
||||||
|
K = "cash_set_11",
|
||||||
|
L = "cash_set_12",
|
||||||
|
M = "cash_set_13",
|
||||||
|
N = "cash_set_14",
|
||||||
|
O = "cash_set_15",
|
||||||
|
P = "cash_set_16",
|
||||||
|
Q = "cash_set_17",
|
||||||
|
R = "cash_set_18",
|
||||||
|
S = "cash_set_19",
|
||||||
|
T = "cash_set_20",
|
||||||
|
U = "cash_set_21",
|
||||||
|
V = "cash_set_22",
|
||||||
|
W = "cash_set_23",
|
||||||
|
X = "cash_set_24"
|
||||||
|
},
|
||||||
|
BoozeCigs = {
|
||||||
|
A = "swag_booze_cigs",
|
||||||
|
B = "swag_booze_cigs2",
|
||||||
|
C = "swag_booze_cigs3"
|
||||||
|
},
|
||||||
|
Counterfeit = {
|
||||||
|
A = "swag_counterfeit",
|
||||||
|
B = "swag_counterfeit2",
|
||||||
|
C = "swag_counterfeit3"
|
||||||
|
},
|
||||||
|
DrugBags = {
|
||||||
|
A = "swag_drugbags",
|
||||||
|
B = "swag_drugbags2",
|
||||||
|
C = "swag_drugbags3"
|
||||||
|
},
|
||||||
|
DrugStatue = {
|
||||||
|
A = "swag_drugstatue",
|
||||||
|
B = "swag_drugstatue2",
|
||||||
|
C = "swag_drugstatue3"
|
||||||
|
},
|
||||||
|
Electronic = {
|
||||||
|
A = "swag_electronic",
|
||||||
|
B = "swag_electronic2",
|
||||||
|
C = "swag_electronic3"
|
||||||
|
},
|
||||||
|
FurCoats = {
|
||||||
|
A = "swag_furcoats",
|
||||||
|
B = "swag_furcoats2",
|
||||||
|
C = "swag_furcoats3"
|
||||||
|
},
|
||||||
|
Gems = {
|
||||||
|
A = "swag_gems",
|
||||||
|
B = "swag_gems2",
|
||||||
|
C = "swag_gems3"
|
||||||
|
},
|
||||||
|
Guns = {
|
||||||
|
A = "swag_guns",
|
||||||
|
B = "swag_guns2",
|
||||||
|
C = "swag_guns3"
|
||||||
|
},
|
||||||
|
Ivory = {
|
||||||
|
A = "swag_ivory",
|
||||||
|
B = "swag_ivory2",
|
||||||
|
C = "swag_ivory3"
|
||||||
|
},
|
||||||
|
Jewel = {
|
||||||
|
A = "swag_jewelwatch",
|
||||||
|
B = "swag_jewelwatch2",
|
||||||
|
C = "swag_jewelwatch3"
|
||||||
|
},
|
||||||
|
Med = {
|
||||||
|
A = "swag_med",
|
||||||
|
B = "swag_med2",
|
||||||
|
C = "swag_med3"
|
||||||
|
},
|
||||||
|
Painting = {
|
||||||
|
A = "swag_art",
|
||||||
|
B = "swag_art2",
|
||||||
|
C = "swag_art3"
|
||||||
|
},
|
||||||
|
Pills = {
|
||||||
|
A = "swag_pills",
|
||||||
|
B = "swag_pills2",
|
||||||
|
C = "swag_pills3"
|
||||||
|
},
|
||||||
|
Silver = {
|
||||||
|
A = "swag_silver",
|
||||||
|
B = "swag_silver2",
|
||||||
|
C = "swag_silver3"
|
||||||
|
},
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(FinanceOffice2.currentInteriorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Chairs = {
|
||||||
|
off = "",
|
||||||
|
on = "office_chairs",
|
||||||
|
|
||||||
|
Set = function(chairs, refresh)
|
||||||
|
FinanceOffice2.Chairs.Clear(false)
|
||||||
|
|
||||||
|
if chairs ~= nil then
|
||||||
|
SetIplPropState(FinanceOffice2.currentInteriorId, chairs, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(FinanceOffice2.currentInteriorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(FinanceOffice2.currentInteriorId, FinanceOffice2.Chairs.on, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Booze = {
|
||||||
|
off = "",
|
||||||
|
on = "office_booze",
|
||||||
|
|
||||||
|
Set = function(booze, refresh)
|
||||||
|
FinanceOffice2.Booze.Clear(false)
|
||||||
|
|
||||||
|
if booze ~= nil then
|
||||||
|
SetIplPropState(FinanceOffice2.currentInteriorId, booze, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(FinanceOffice2.currentInteriorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(FinanceOffice2.currentInteriorId, FinanceOffice2.Booze.on, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
FinanceOffice2.Style.Set(FinanceOffice2.Style.Theme.warm)
|
||||||
|
FinanceOffice2.Chairs.Set(FinanceOffice2.Chairs.on, true)
|
||||||
|
end
|
||||||
|
}
|
||||||
324
resources/[core]/bob74_ipl/dlc_finance/office3.lua
Normal file
324
resources/[core]/bob74_ipl/dlc_finance/office3.lua
Normal file
@ -0,0 +1,324 @@
|
|||||||
|
-- Office 3: -1579.756, -565.0661, 108.523 (Lom Bank)
|
||||||
|
exports('GetFinanceOffice3Object', function()
|
||||||
|
return FinanceOffice3
|
||||||
|
end)
|
||||||
|
|
||||||
|
FinanceOffice3 = {
|
||||||
|
currentInteriorId = -1,
|
||||||
|
currentSafeDoors = {
|
||||||
|
hashL = "",
|
||||||
|
hashR = ""
|
||||||
|
},
|
||||||
|
|
||||||
|
Style = {
|
||||||
|
Theme = {
|
||||||
|
warm = {
|
||||||
|
interiorId = 240897,
|
||||||
|
ipl = "ex_sm_13_office_01a",
|
||||||
|
safe = "ex_prop_safedoor_office1a"
|
||||||
|
},
|
||||||
|
classical = {
|
||||||
|
interiorId = 241153,
|
||||||
|
ipl = "ex_sm_13_office_01b",
|
||||||
|
safe = "ex_prop_safedoor_office1b"
|
||||||
|
},
|
||||||
|
vintage = {
|
||||||
|
interiorId = 241409,
|
||||||
|
ipl = "ex_sm_13_office_01c",
|
||||||
|
safe = "ex_prop_safedoor_office1c"
|
||||||
|
},
|
||||||
|
contrast = {
|
||||||
|
interiorId = 241665,
|
||||||
|
ipl = "ex_sm_13_office_02a",
|
||||||
|
safe = "ex_prop_safedoor_office2a"
|
||||||
|
},
|
||||||
|
rich = {
|
||||||
|
interiorId = 241921,
|
||||||
|
ipl = "ex_sm_13_office_02b",
|
||||||
|
safe = "ex_prop_safedoor_office2a"
|
||||||
|
},
|
||||||
|
cool = {
|
||||||
|
interiorId = 242177,
|
||||||
|
ipl = "ex_sm_13_office_02c",
|
||||||
|
safe = "ex_prop_safedoor_office2a"
|
||||||
|
},
|
||||||
|
ice = {
|
||||||
|
interiorId = 242433,
|
||||||
|
ipl = "ex_sm_13_office_03a",
|
||||||
|
safe = "ex_prop_safedoor_office3a"
|
||||||
|
},
|
||||||
|
conservative = {
|
||||||
|
interiorId = 242689,
|
||||||
|
ipl = "ex_sm_13_office_03b",
|
||||||
|
safe = "ex_prop_safedoor_office3a"
|
||||||
|
},
|
||||||
|
polished = {
|
||||||
|
interiorId = 242945,
|
||||||
|
ipl = "ex_sm_13_office_03c",
|
||||||
|
safe = "ex_prop_safedoor_office3c"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Set = function(style, refresh)
|
||||||
|
if refresh == nil then
|
||||||
|
refresh = false
|
||||||
|
end
|
||||||
|
|
||||||
|
if type(style) == "table" then
|
||||||
|
FinanceOffice3.Style.Clear()
|
||||||
|
FinanceOffice3.currentInteriorId = style.interiorId
|
||||||
|
FinanceOffice3.currentSafeDoors = {
|
||||||
|
hashL = GetHashKey(style.safe .. "_l"),
|
||||||
|
hashR = GetHashKey(style.safe .. "_r")
|
||||||
|
}
|
||||||
|
|
||||||
|
EnableIpl(style.ipl, true)
|
||||||
|
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(style.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
for themeKey, themeValue in pairs(FinanceOffice3.Style.Theme) do
|
||||||
|
for swagKey, swagValue in pairs(FinanceOffice3.Swag) do
|
||||||
|
if type(swagValue) == "table" then
|
||||||
|
SetIplPropState(themeValue.interiorId, {
|
||||||
|
swagValue.A,
|
||||||
|
swagValue.B,
|
||||||
|
swagValue.C
|
||||||
|
}, false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
SetIplPropState(themeValue.interiorId, "office_chairs", false, false)
|
||||||
|
SetIplPropState(themeValue.interiorId, "office_booze", false, true)
|
||||||
|
|
||||||
|
FinanceOffice3.currentSafeDoors = {
|
||||||
|
hashL = 0,
|
||||||
|
hashR = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
EnableIpl(themeValue.ipl, false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Safe = {
|
||||||
|
doorHeadingL = 126.0, -- Only need the heading of the Left door to get the Right ones
|
||||||
|
Position = vector3(-1554.08, -573.7122, 108.5272), -- Approximately between the two doors
|
||||||
|
-- These values are checked from "doorHandler.lua" and
|
||||||
|
isLeftDoorOpen = false,
|
||||||
|
isRightDoorOpen = false,
|
||||||
|
|
||||||
|
-- Safe door API
|
||||||
|
Open = function(doorSide)
|
||||||
|
if doorSide:lower() == "left" then
|
||||||
|
FinanceOffice3.Safe.isLeftDoorOpen = true
|
||||||
|
elseif doorSide:lower() == "right" then
|
||||||
|
FinanceOffice3.Safe.isRightDoorOpen = true
|
||||||
|
else
|
||||||
|
print("[bob74_ipl] Warning: " .. doorSide .. " is not a correct value. Valid values are: left right")
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Close = function(doorSide)
|
||||||
|
if doorSide:lower() == "left" then
|
||||||
|
FinanceOffice3.Safe.isLeftDoorOpen = false
|
||||||
|
elseif doorSide:lower() == "right" then
|
||||||
|
FinanceOffice3.Safe.isRightDoorOpen = false
|
||||||
|
else
|
||||||
|
print("[bob74_ipl] Warning: " .. doorSide .. " is not a correct value. Valid values are: left right")
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
|
||||||
|
-- Internal use only
|
||||||
|
SetDoorState = function(doorSide, open)
|
||||||
|
local doorHandle = 0
|
||||||
|
local heading = FinanceOffice3.Safe.doorHeadingL
|
||||||
|
|
||||||
|
if doorSide:lower() == "left" then
|
||||||
|
doorHandle = FinanceOffice3.Safe.GetDoorHandle(FinanceOffice3.currentSafeDoors.hashL)
|
||||||
|
|
||||||
|
if open then
|
||||||
|
heading = heading - 90.0
|
||||||
|
end
|
||||||
|
elseif doorSide:lower() == "right" then
|
||||||
|
doorHandle = FinanceOffice3.Safe.GetDoorHandle(FinanceOffice3.currentSafeDoors.hashR)
|
||||||
|
heading = heading - 180
|
||||||
|
|
||||||
|
if open then
|
||||||
|
heading = heading + 90.0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if doorHandle == 0 then
|
||||||
|
print("[bob74_ipl] Warning: " .. doorSide .. " safe door handle is 0")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
SetEntityHeading(doorHandle, heading)
|
||||||
|
end,
|
||||||
|
|
||||||
|
-- /!\ handle changes whenever the interior is refreshed /!\
|
||||||
|
GetDoorHandle = function(doorHash)
|
||||||
|
local timeout = 4
|
||||||
|
local doorHandle = GetClosestObjectOfType(FinanceOffice3.Safe.Position.x, FinanceOffice3.Safe.Position.y, FinanceOffice3.Safe.Position.z, 5.0, doorHash, false, false, false)
|
||||||
|
|
||||||
|
while doorHandle == 0 do
|
||||||
|
Wait(25)
|
||||||
|
|
||||||
|
doorHandle = GetClosestObjectOfType(FinanceOffice3.Safe.Position.x, FinanceOffice3.Safe.Position.y, FinanceOffice3.Safe.Position.z, 5.0, doorHash, false, false, false)
|
||||||
|
timeout = timeout - 1
|
||||||
|
|
||||||
|
if timeout <= 0 then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return doorHandle
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Swag = {
|
||||||
|
Cash = {
|
||||||
|
A = "cash_set_01",
|
||||||
|
B = "cash_set_02",
|
||||||
|
C = "cash_set_03",
|
||||||
|
D = "cash_set_04",
|
||||||
|
E = "cash_set_05",
|
||||||
|
F = "cash_set_06",
|
||||||
|
G = "cash_set_07",
|
||||||
|
H = "cash_set_08",
|
||||||
|
I = "cash_set_09",
|
||||||
|
J = "cash_set_10",
|
||||||
|
K = "cash_set_11",
|
||||||
|
L = "cash_set_12",
|
||||||
|
M = "cash_set_13",
|
||||||
|
N = "cash_set_14",
|
||||||
|
O = "cash_set_15",
|
||||||
|
P = "cash_set_16",
|
||||||
|
Q = "cash_set_17",
|
||||||
|
R = "cash_set_18",
|
||||||
|
S = "cash_set_19",
|
||||||
|
T = "cash_set_20",
|
||||||
|
U = "cash_set_21",
|
||||||
|
V = "cash_set_22",
|
||||||
|
W = "cash_set_23",
|
||||||
|
X = "cash_set_24"
|
||||||
|
},
|
||||||
|
BoozeCigs = {
|
||||||
|
A = "swag_booze_cigs",
|
||||||
|
B = "swag_booze_cigs2",
|
||||||
|
C = "swag_booze_cigs3"
|
||||||
|
},
|
||||||
|
Counterfeit = {
|
||||||
|
A = "swag_counterfeit",
|
||||||
|
B = "swag_counterfeit2",
|
||||||
|
C = "swag_counterfeit3"
|
||||||
|
},
|
||||||
|
DrugBags = {
|
||||||
|
A = "swag_drugbags",
|
||||||
|
B = "swag_drugbags2",
|
||||||
|
C = "swag_drugbags3"
|
||||||
|
},
|
||||||
|
DrugStatue = {
|
||||||
|
A = "swag_drugstatue",
|
||||||
|
B = "swag_drugstatue2",
|
||||||
|
C = "swag_drugstatue3"
|
||||||
|
},
|
||||||
|
Electronic = {
|
||||||
|
A = "swag_electronic",
|
||||||
|
B = "swag_electronic2",
|
||||||
|
C = "swag_electronic3"
|
||||||
|
},
|
||||||
|
FurCoats = {
|
||||||
|
A = "swag_furcoats",
|
||||||
|
B = "swag_furcoats2",
|
||||||
|
C = "swag_furcoats3"
|
||||||
|
},
|
||||||
|
Gems = {
|
||||||
|
A = "swag_gems",
|
||||||
|
B = "swag_gems2",
|
||||||
|
C = "swag_gems3"
|
||||||
|
},
|
||||||
|
Guns = {
|
||||||
|
A = "swag_guns",
|
||||||
|
B = "swag_guns2",
|
||||||
|
C = "swag_guns3"
|
||||||
|
},
|
||||||
|
Ivory = {
|
||||||
|
A = "swag_ivory",
|
||||||
|
B = "swag_ivory2",
|
||||||
|
C = "swag_ivory3"
|
||||||
|
},
|
||||||
|
Jewel = {
|
||||||
|
A = "swag_jewelwatch",
|
||||||
|
B = "swag_jewelwatch2",
|
||||||
|
C = "swag_jewelwatch3"
|
||||||
|
},
|
||||||
|
Med = {
|
||||||
|
A = "swag_med",
|
||||||
|
B = "swag_med2",
|
||||||
|
C = "swag_med3"
|
||||||
|
},
|
||||||
|
Painting = {
|
||||||
|
A = "swag_art",
|
||||||
|
B = "swag_art2",
|
||||||
|
C = "swag_art3"
|
||||||
|
},
|
||||||
|
Pills = {
|
||||||
|
A = "swag_pills",
|
||||||
|
B = "swag_pills2",
|
||||||
|
C = "swag_pills3"
|
||||||
|
},
|
||||||
|
Silver = {
|
||||||
|
A = "swag_silver",
|
||||||
|
B = "swag_silver2",
|
||||||
|
C = "swag_silver3"
|
||||||
|
},
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(FinanceOffice3.currentInteriorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Chairs = {
|
||||||
|
off = "",
|
||||||
|
on = "office_chairs",
|
||||||
|
|
||||||
|
Set = function(chairs, refresh)
|
||||||
|
FinanceOffice3.Chairs.Clear(false)
|
||||||
|
|
||||||
|
if chairs ~= nil then
|
||||||
|
SetIplPropState(FinanceOffice3.currentInteriorId, chairs, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(FinanceOffice3.currentInteriorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(FinanceOffice3.currentInteriorId, FinanceOffice3.Chairs.on, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Booze = {
|
||||||
|
off = "",
|
||||||
|
on = "office_booze",
|
||||||
|
|
||||||
|
Set = function(booze, refresh)
|
||||||
|
FinanceOffice3.Booze.Clear(false)
|
||||||
|
|
||||||
|
if booze ~= nil then
|
||||||
|
SetIplPropState(FinanceOffice3.currentInteriorId, booze, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(FinanceOffice3.currentInteriorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(FinanceOffice3.currentInteriorId, FinanceOffice3.Booze.on, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
FinanceOffice3.Style.Set(FinanceOffice3.Style.Theme.conservative)
|
||||||
|
FinanceOffice3.Chairs.Set(FinanceOffice3.Chairs.on, true)
|
||||||
|
end
|
||||||
|
}
|
||||||
324
resources/[core]/bob74_ipl/dlc_finance/office4.lua
Normal file
324
resources/[core]/bob74_ipl/dlc_finance/office4.lua
Normal file
@ -0,0 +1,324 @@
|
|||||||
|
-- Office 4: -1392.667, -480.4736, 72.04217 (Maze Bank West)
|
||||||
|
exports('GetFinanceOffice4Object', function()
|
||||||
|
return FinanceOffice4
|
||||||
|
end)
|
||||||
|
|
||||||
|
FinanceOffice4 = {
|
||||||
|
currentInteriorId = -1,
|
||||||
|
currentSafeDoors = {
|
||||||
|
hashL = "",
|
||||||
|
hashR = ""
|
||||||
|
},
|
||||||
|
|
||||||
|
Style = {
|
||||||
|
Theme = {
|
||||||
|
warm = {
|
||||||
|
interiorId = 243201,
|
||||||
|
ipl = "ex_sm_15_office_01a",
|
||||||
|
safe = "ex_prop_safedoor_office1a"
|
||||||
|
},
|
||||||
|
classical = {
|
||||||
|
interiorId = 243457,
|
||||||
|
ipl = "ex_sm_15_office_01b",
|
||||||
|
safe = "ex_prop_safedoor_office1b"
|
||||||
|
},
|
||||||
|
vintage = {
|
||||||
|
interiorId = 243713,
|
||||||
|
ipl = "ex_sm_15_office_01c",
|
||||||
|
safe = "ex_prop_safedoor_office1c"
|
||||||
|
},
|
||||||
|
contrast = {
|
||||||
|
interiorId = 243969,
|
||||||
|
ipl = "ex_sm_15_office_02a",
|
||||||
|
safe = "ex_prop_safedoor_office2a"
|
||||||
|
},
|
||||||
|
rich = {
|
||||||
|
interiorId = 244225,
|
||||||
|
ipl = "ex_sm_15_office_02b",
|
||||||
|
safe = "ex_prop_safedoor_office2a"
|
||||||
|
},
|
||||||
|
cool = {
|
||||||
|
interiorId = 244481,
|
||||||
|
ipl = "ex_sm_15_office_02c",
|
||||||
|
safe = "ex_prop_safedoor_office2a"
|
||||||
|
},
|
||||||
|
ice = {
|
||||||
|
interiorId = 244737,
|
||||||
|
ipl = "ex_sm_15_office_03a",
|
||||||
|
safe = "ex_prop_safedoor_office3a"
|
||||||
|
},
|
||||||
|
conservative = {
|
||||||
|
interiorId = 244993,
|
||||||
|
ipl = "ex_sm_15_office_03b",
|
||||||
|
safe = "ex_prop_safedoor_office3a"
|
||||||
|
},
|
||||||
|
polished = {
|
||||||
|
interiorId = 245249,
|
||||||
|
ipl = "ex_sm_15_office_03c",
|
||||||
|
safe = "ex_prop_safedoor_office3c"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Set = function(style, refresh)
|
||||||
|
if refresh == nil then
|
||||||
|
refresh = false
|
||||||
|
end
|
||||||
|
|
||||||
|
if type(style) == "table" then
|
||||||
|
FinanceOffice4.Style.Clear()
|
||||||
|
FinanceOffice4.currentInteriorId = style.interiorId
|
||||||
|
FinanceOffice4.currentSafeDoors = {
|
||||||
|
hashL = GetHashKey(style.safe .. "_l"),
|
||||||
|
hashR = GetHashKey(style.safe .. "_r")
|
||||||
|
}
|
||||||
|
|
||||||
|
EnableIpl(style.ipl, true)
|
||||||
|
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(style.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
for themeKey, themeValue in pairs(FinanceOffice4.Style.Theme) do
|
||||||
|
for swagKey, swagValue in pairs(FinanceOffice4.Swag) do
|
||||||
|
if type(swagValue) == "table" then
|
||||||
|
SetIplPropState(themeValue.interiorId, {
|
||||||
|
swagValue.A,
|
||||||
|
swagValue.B,
|
||||||
|
swagValue.C
|
||||||
|
}, false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
SetIplPropState(themeValue.interiorId, "office_chairs", false, false)
|
||||||
|
SetIplPropState(themeValue.interiorId, "office_booze", false, true)
|
||||||
|
|
||||||
|
FinanceOffice4.currentSafeDoors = {
|
||||||
|
hashL = 0,
|
||||||
|
hashR = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
EnableIpl(themeValue.ipl, false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Safe = {
|
||||||
|
doorHeadingL = 188.0, -- Only need the heading of the Left door to get the Right ones
|
||||||
|
Position = vector3(-1372.905, -462.08, 72.05), -- Approximately between the two doors
|
||||||
|
-- These values are checked from "doorHandler.lua" and
|
||||||
|
isLeftDoorOpen = false,
|
||||||
|
isRightDoorOpen = false,
|
||||||
|
|
||||||
|
-- Safe door API
|
||||||
|
Open = function(doorSide)
|
||||||
|
if doorSide:lower() == "left" then
|
||||||
|
FinanceOffice4.Safe.isLeftDoorOpen = true
|
||||||
|
elseif doorSide:lower() == "right" then
|
||||||
|
FinanceOffice4.Safe.isRightDoorOpen = true
|
||||||
|
else
|
||||||
|
print("[bob74_ipl] Warning: " .. doorSide .. " is not a correct value. Valid values are: left right")
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Close = function(doorSide)
|
||||||
|
if doorSide:lower() == "left" then
|
||||||
|
FinanceOffice4.Safe.isLeftDoorOpen = false
|
||||||
|
elseif doorSide:lower() == "right" then
|
||||||
|
FinanceOffice4.Safe.isRightDoorOpen = false
|
||||||
|
else
|
||||||
|
print("[bob74_ipl] Warning: " .. doorSide .. " is not a correct value. Valid values are: left right")
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
|
||||||
|
-- Internal use only
|
||||||
|
SetDoorState = function(doorSide, open)
|
||||||
|
local doorHandle = 0
|
||||||
|
local heading = FinanceOffice4.Safe.doorHeadingL
|
||||||
|
|
||||||
|
if doorSide:lower() == "left" then
|
||||||
|
doorHandle = FinanceOffice4.Safe.GetDoorHandle(FinanceOffice4.currentSafeDoors.hashL)
|
||||||
|
|
||||||
|
if open then
|
||||||
|
heading = heading - 90.0
|
||||||
|
end
|
||||||
|
elseif doorSide:lower() == "right" then
|
||||||
|
doorHandle = FinanceOffice4.Safe.GetDoorHandle(FinanceOffice4.currentSafeDoors.hashR)
|
||||||
|
heading = heading - 180
|
||||||
|
|
||||||
|
if open then
|
||||||
|
heading = heading + 90.0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if doorHandle == 0 then
|
||||||
|
print("[bob74_ipl] Warning: " .. doorSide .. " safe door handle is 0")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
SetEntityHeading(doorHandle, heading)
|
||||||
|
end,
|
||||||
|
|
||||||
|
-- /!\ handle changes whenever the interior is refreshed /!\
|
||||||
|
GetDoorHandle = function(doorHash)
|
||||||
|
local timeout = 4
|
||||||
|
local doorHandle = GetClosestObjectOfType(FinanceOffice4.Safe.Position.x, FinanceOffice4.Safe.Position.y, FinanceOffice4.Safe.Position.z, 5.0, doorHash, false, false, false)
|
||||||
|
|
||||||
|
while doorHandle == 0 do
|
||||||
|
Wait(25)
|
||||||
|
|
||||||
|
doorHandle = GetClosestObjectOfType(FinanceOffice4.Safe.Position.x, FinanceOffice4.Safe.Position.y, FinanceOffice4.Safe.Position.z, 5.0, doorHash, false, false, false)
|
||||||
|
timeout = timeout - 1
|
||||||
|
|
||||||
|
if timeout <= 0 then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return doorHandle
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Swag = {
|
||||||
|
Cash = {
|
||||||
|
A = "cash_set_01",
|
||||||
|
B = "cash_set_02",
|
||||||
|
C = "cash_set_03",
|
||||||
|
D = "cash_set_04",
|
||||||
|
E = "cash_set_05",
|
||||||
|
F = "cash_set_06",
|
||||||
|
G = "cash_set_07",
|
||||||
|
H = "cash_set_08",
|
||||||
|
I = "cash_set_09",
|
||||||
|
J = "cash_set_10",
|
||||||
|
K = "cash_set_11",
|
||||||
|
L = "cash_set_12",
|
||||||
|
M = "cash_set_13",
|
||||||
|
N = "cash_set_14",
|
||||||
|
O = "cash_set_15",
|
||||||
|
P = "cash_set_16",
|
||||||
|
Q = "cash_set_17",
|
||||||
|
R = "cash_set_18",
|
||||||
|
S = "cash_set_19",
|
||||||
|
T = "cash_set_20",
|
||||||
|
U = "cash_set_21",
|
||||||
|
V = "cash_set_22",
|
||||||
|
W = "cash_set_23",
|
||||||
|
X = "cash_set_24"
|
||||||
|
},
|
||||||
|
BoozeCigs = {
|
||||||
|
A = "swag_booze_cigs",
|
||||||
|
B = "swag_booze_cigs2",
|
||||||
|
C = "swag_booze_cigs3"
|
||||||
|
},
|
||||||
|
Counterfeit = {
|
||||||
|
A = "swag_counterfeit",
|
||||||
|
B = "swag_counterfeit2",
|
||||||
|
C = "swag_counterfeit3"
|
||||||
|
},
|
||||||
|
DrugBags = {
|
||||||
|
A = "swag_drugbags",
|
||||||
|
B = "swag_drugbags2",
|
||||||
|
C = "swag_drugbags3"
|
||||||
|
},
|
||||||
|
DrugStatue = {
|
||||||
|
A = "swag_drugstatue",
|
||||||
|
B = "swag_drugstatue2",
|
||||||
|
C = "swag_drugstatue3"
|
||||||
|
},
|
||||||
|
Electronic = {
|
||||||
|
A = "swag_electronic",
|
||||||
|
B = "swag_electronic2",
|
||||||
|
C = "swag_electronic3"
|
||||||
|
},
|
||||||
|
FurCoats = {
|
||||||
|
A = "swag_furcoats",
|
||||||
|
B = "swag_furcoats2",
|
||||||
|
C = "swag_furcoats3"
|
||||||
|
},
|
||||||
|
Gems = {
|
||||||
|
A = "swag_gems",
|
||||||
|
B = "swag_gems2",
|
||||||
|
C = "swag_gems3"
|
||||||
|
},
|
||||||
|
Guns = {
|
||||||
|
A = "swag_guns",
|
||||||
|
B = "swag_guns2",
|
||||||
|
C = "swag_guns3"
|
||||||
|
},
|
||||||
|
Ivory = {
|
||||||
|
A = "swag_ivory",
|
||||||
|
B = "swag_ivory2",
|
||||||
|
C = "swag_ivory3"
|
||||||
|
},
|
||||||
|
Jewel = {
|
||||||
|
A = "swag_jewelwatch",
|
||||||
|
B = "swag_jewelwatch2",
|
||||||
|
C = "swag_jewelwatch3"
|
||||||
|
},
|
||||||
|
Med = {
|
||||||
|
A = "swag_med",
|
||||||
|
B = "swag_med2",
|
||||||
|
C = "swag_med3"
|
||||||
|
},
|
||||||
|
Painting = {
|
||||||
|
A = "swag_art",
|
||||||
|
B = "swag_art2",
|
||||||
|
C = "swag_art3"
|
||||||
|
},
|
||||||
|
Pills = {
|
||||||
|
A = "swag_pills",
|
||||||
|
B = "swag_pills2",
|
||||||
|
C = "swag_pills3"
|
||||||
|
},
|
||||||
|
Silver = {
|
||||||
|
A = "swag_silver",
|
||||||
|
B = "swag_silver2",
|
||||||
|
C = "swag_silver3"
|
||||||
|
},
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(FinanceOffice4.currentInteriorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Chairs = {
|
||||||
|
off = "",
|
||||||
|
on = "office_chairs",
|
||||||
|
|
||||||
|
Set = function(chairs, refresh)
|
||||||
|
FinanceOffice4.Chairs.Clear(false)
|
||||||
|
|
||||||
|
if chairs ~= nil then
|
||||||
|
SetIplPropState(FinanceOffice4.currentInteriorId, chairs, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(FinanceOffice4.currentInteriorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(FinanceOffice4.currentInteriorId, FinanceOffice4.Chairs.on, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Booze = {
|
||||||
|
off = "",
|
||||||
|
on = "office_booze",
|
||||||
|
|
||||||
|
Set = function(booze, refresh)
|
||||||
|
FinanceOffice4.Booze.Clear(false)
|
||||||
|
|
||||||
|
if booze ~= nil then
|
||||||
|
SetIplPropState(FinanceOffice4.currentInteriorId, booze, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(FinanceOffice4.currentInteriorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(FinanceOffice4.currentInteriorId, FinanceOffice4.Booze.on, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
FinanceOffice4.Style.Set(FinanceOffice4.Style.Theme.cool)
|
||||||
|
FinanceOffice4.Chairs.Set(FinanceOffice4.Chairs.on, true)
|
||||||
|
end
|
||||||
|
}
|
||||||
162
resources/[core]/bob74_ipl/dlc_finance/organization.lua
Normal file
162
resources/[core]/bob74_ipl/dlc_finance/organization.lua
Normal file
@ -0,0 +1,162 @@
|
|||||||
|
exports('GetFinanceOrganizationObject', function()
|
||||||
|
return FinanceOrganization
|
||||||
|
end)
|
||||||
|
|
||||||
|
AddEventHandler('onClientResourceStop', function(res)
|
||||||
|
if GetCurrentResourceName() ~= res then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
FinanceOrganization.Office.Clear()
|
||||||
|
end)
|
||||||
|
|
||||||
|
FinanceOrganization = {
|
||||||
|
Name = {
|
||||||
|
Colors = {
|
||||||
|
black = 0,
|
||||||
|
gray = 1,
|
||||||
|
yellow = 2,
|
||||||
|
blue = 3,
|
||||||
|
orange = 5,
|
||||||
|
red = 6,
|
||||||
|
green = 7
|
||||||
|
},
|
||||||
|
Fonts = {
|
||||||
|
font1 = 0,
|
||||||
|
font2 = 1,
|
||||||
|
font3 = 2,
|
||||||
|
font4 = 3,
|
||||||
|
font5 = 4,
|
||||||
|
font6 = 5,
|
||||||
|
font7 = 6,
|
||||||
|
font8 = 7,
|
||||||
|
font9 = 8,
|
||||||
|
font10 = 9,
|
||||||
|
font11 = 10,
|
||||||
|
font12 = 11,
|
||||||
|
font13 = 12
|
||||||
|
},
|
||||||
|
Style = {
|
||||||
|
normal = 3,
|
||||||
|
light = 1
|
||||||
|
},
|
||||||
|
name = "",
|
||||||
|
style = 0,
|
||||||
|
color = 0,
|
||||||
|
font = 0,
|
||||||
|
|
||||||
|
Set = function(name, style, color, font)
|
||||||
|
FinanceOrganization.Name.name = name
|
||||||
|
FinanceOrganization.Name.style = style
|
||||||
|
FinanceOrganization.Name.color = color
|
||||||
|
FinanceOrganization.Name.font = font
|
||||||
|
FinanceOrganization.Office.stage = 0
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Office = {
|
||||||
|
needToLoad = false,
|
||||||
|
loaded = false,
|
||||||
|
target = "prop_ex_office_text",
|
||||||
|
prop = "ex_prop_ex_office_text",
|
||||||
|
renderId = -1,
|
||||||
|
movieId = -1,
|
||||||
|
stage = 0,
|
||||||
|
|
||||||
|
Init = function()
|
||||||
|
DrawEmptyRect(FinanceOrganization.Office.target, FinanceOrganization.Office.prop)
|
||||||
|
end,
|
||||||
|
Enable = function(state)
|
||||||
|
FinanceOrganization.Office.needToLoad = state
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
if IsNamedRendertargetRegistered(FinanceOrganization.Office.target) then
|
||||||
|
ReleaseNamedRendertarget(GetHashKey(FinanceOrganization.Office.target))
|
||||||
|
end
|
||||||
|
|
||||||
|
if HasScaleformMovieFilenameLoaded(FinanceOrganization.Office.movieId) then
|
||||||
|
SetScaleformMovieAsNoLongerNeeded(FinanceOrganization.Office.movieId)
|
||||||
|
end
|
||||||
|
|
||||||
|
FinanceOrganization.Office.renderId = -1
|
||||||
|
FinanceOrganization.Office.movieId = -1
|
||||||
|
FinanceOrganization.Office.stage = 0
|
||||||
|
end
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CreateThread(function()
|
||||||
|
FinanceOrganization.Office.Init()
|
||||||
|
|
||||||
|
while true do
|
||||||
|
if FinanceOrganization.Office.needToLoad then
|
||||||
|
-- Need to load
|
||||||
|
if Global.FinanceOffices.isInsideOffice1 or Global.FinanceOffices.isInsideOffice2 or Global.FinanceOffices.isInsideOffice3 or Global.FinanceOffices.isInsideOffice4 then
|
||||||
|
DrawOrganizationName(FinanceOrganization.Name.name, FinanceOrganization.Name.style, FinanceOrganization.Name.color, FinanceOrganization.Name.font)
|
||||||
|
|
||||||
|
FinanceOrganization.Office.loaded = true
|
||||||
|
|
||||||
|
Wait(0) -- We need to call all this every frame
|
||||||
|
else
|
||||||
|
Wait(1000) -- We are not inside an office
|
||||||
|
end
|
||||||
|
elseif FinanceOrganization.Office.loaded then
|
||||||
|
-- Loaded and need to unload
|
||||||
|
FinanceOrganization.Office.Clear()
|
||||||
|
FinanceOrganization.Office.loaded = false
|
||||||
|
|
||||||
|
Wait(1000) -- We can wait longer when we don't need to display text
|
||||||
|
else
|
||||||
|
-- Not needed to load
|
||||||
|
Wait(1000) -- We can wait longer when we don't need to display text
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
function DrawOrganizationName(name, style, color, font)
|
||||||
|
if FinanceOrganization.Office.stage == 0 then
|
||||||
|
if FinanceOrganization.Office.renderId == -1 then
|
||||||
|
FinanceOrganization.Office.renderId = CreateNamedRenderTargetForModel(FinanceOrganization.Office.target, FinanceOrganization.Office.prop)
|
||||||
|
end
|
||||||
|
|
||||||
|
if FinanceOrganization.Office.movieId == -1 then
|
||||||
|
FinanceOrganization.Office.movieId = RequestScaleformMovie("ORGANISATION_NAME")
|
||||||
|
end
|
||||||
|
|
||||||
|
FinanceOrganization.Office.stage = 1
|
||||||
|
elseif FinanceOrganization.Office.stage == 1 then
|
||||||
|
if HasScaleformMovieLoaded(FinanceOrganization.Office.movieId) then
|
||||||
|
local parameters = {
|
||||||
|
p0 = {
|
||||||
|
type = "string",
|
||||||
|
value = name
|
||||||
|
},
|
||||||
|
p1 = {
|
||||||
|
type = "int",
|
||||||
|
value = style
|
||||||
|
},
|
||||||
|
p2 = {
|
||||||
|
type = "int",
|
||||||
|
value = color
|
||||||
|
},
|
||||||
|
p3 = {
|
||||||
|
type = "int",
|
||||||
|
value = font
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SetupScaleform(FinanceOrganization.Office.movieId, "SET_ORGANISATION_NAME", parameters)
|
||||||
|
|
||||||
|
FinanceOrganization.Office.stage = 2
|
||||||
|
else
|
||||||
|
FinanceOrganization.Office.movieId = RequestScaleformMovie("ORGANISATION_NAME")
|
||||||
|
end
|
||||||
|
elseif FinanceOrganization.Office.stage == 2 then
|
||||||
|
SetTextRenderId(FinanceOrganization.Office.renderId)
|
||||||
|
SetScriptGfxDrawOrder(4)
|
||||||
|
SetScriptGfxDrawBehindPausemenu(true)
|
||||||
|
SetScriptGfxAlign(73, 73)
|
||||||
|
DrawScaleformMovie(FinanceOrganization.Office.movieId, 0.196, 0.245, 0.46, 0.66, 255, 255, 255, 255, 0)
|
||||||
|
SetTextRenderId(GetDefaultScriptRendertargetRenderId())
|
||||||
|
ResetScriptGfxAlign()
|
||||||
|
end
|
||||||
|
end
|
||||||
155
resources/[core]/bob74_ipl/dlc_gunrunning/bunkers.lua
Normal file
155
resources/[core]/bob74_ipl/dlc_gunrunning/bunkers.lua
Normal file
@ -0,0 +1,155 @@
|
|||||||
|
exports('GetGunrunningBunkerObject', function()
|
||||||
|
return GunrunningBunker
|
||||||
|
end)
|
||||||
|
|
||||||
|
GunrunningBunker = {
|
||||||
|
interiorId = 258561,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Interior = {
|
||||||
|
ipl = "gr_grdlc_interior_placement_interior_1_grdlc_int_02_milo_",
|
||||||
|
|
||||||
|
-- Load interiors IPLs.
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(GunrunningBunker.Ipl.Interior.ipl, true)
|
||||||
|
end,
|
||||||
|
-- Remove interiors IPLs.
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(GunrunningBunker.Ipl.Interior.ipl, false)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Exterior = {
|
||||||
|
ipl = {
|
||||||
|
"gr_case0_bunkerclosed", -- Desert: 848.6175, 2996.567, 45.81612
|
||||||
|
"gr_case1_bunkerclosed",-- SmokeTree: 2126.785, 3335.04, 48.21422
|
||||||
|
"gr_case2_bunkerclosed", -- Scrapyard: 2493.654, 3140.399, 51.28789
|
||||||
|
"gr_case3_bunkerclosed", -- Oilfields: 481.0465, 2995.135, 43.96672
|
||||||
|
"gr_case4_bunkerclosed", -- RatonCanyon: -391.3216, 4363.728, 58.65862
|
||||||
|
"gr_case5_bunkerclosed", -- Grapeseed: 1823.961, 4708.14, 42.4991
|
||||||
|
"gr_case6_bunkerclosed", -- Farmhouse: 1570.372, 2254.549, 78.89397
|
||||||
|
"gr_case7_bunkerclosed", -- Paletto: -783.0755, 5934.686, 24.31475
|
||||||
|
"gr_case9_bunkerclosed", -- Route68: 24.43542, 2959.705, 58.35517
|
||||||
|
"gr_case10_bunkerclosed", -- Zancudo: -3058.714, 3329.19, 12.5844
|
||||||
|
"gr_case11_bunkerclosed" -- Great Ocean Highway: -3180.466, 1374.192, 19.9597
|
||||||
|
},
|
||||||
|
|
||||||
|
-- Load exteriors IPLs.
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(GunrunningBunker.Ipl.Exterior.ipl, true)
|
||||||
|
end,
|
||||||
|
-- Remove exteriors IPLs.
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(GunrunningBunker.Ipl.Exterior.ipl, false)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Style = {
|
||||||
|
default = "Bunker_Style_A",
|
||||||
|
blue = "Bunker_Style_B",
|
||||||
|
yellow = "Bunker_Style_C",
|
||||||
|
|
||||||
|
-- Set the style (color) of the bunker.
|
||||||
|
-- style: Wall color (values: GunrunningBunker.Style.default / GunrunningBunker.Style.blue / GunrunningBunker.Style.yellow)
|
||||||
|
-- refresh: Reload the whole interior (values: true / false)
|
||||||
|
Set = function(style, refresh)
|
||||||
|
GunrunningBunker.Style.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(GunrunningBunker.interiorId, style, true, refresh)
|
||||||
|
end,
|
||||||
|
-- Removes the style.
|
||||||
|
-- refresh: Reload the whole interior (values: true / false)
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(GunrunningBunker.interiorId, {
|
||||||
|
GunrunningBunker.Style.default,
|
||||||
|
GunrunningBunker.Style.blue,
|
||||||
|
GunrunningBunker.Style.yellow
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Tier = {
|
||||||
|
default = "standard_bunker_set",
|
||||||
|
upgrade = "upgrade_bunker_set",
|
||||||
|
|
||||||
|
-- Set the tier (quality) of the bunker.
|
||||||
|
-- tier: Upgrade state (values: GunrunningBunker.Tier.default / GunrunningBunker.Tier.upgrade)
|
||||||
|
-- refresh: Reload the whole interior (values: true / false)
|
||||||
|
Set = function(tier, refresh)
|
||||||
|
GunrunningBunker.Tier.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(GunrunningBunker.interiorId, tier, true, refresh)
|
||||||
|
end,
|
||||||
|
-- Removes the tier.
|
||||||
|
-- refresh: Reload the whole interior (values: true / false)
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(GunrunningBunker.interiorId, {
|
||||||
|
GunrunningBunker.Tier.default,
|
||||||
|
GunrunningBunker.Tier.upgrade
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Security = {
|
||||||
|
noEntryGate = "",
|
||||||
|
default = "standard_security_set",
|
||||||
|
upgrade = "security_upgrade",
|
||||||
|
|
||||||
|
-- Set the security stage of the bunker.
|
||||||
|
-- security: Upgrade state (values: GunrunningBunker.Security.default / GunrunningBunker.Security.upgrade)
|
||||||
|
-- refresh: Reload the whole interior (values: true / false)
|
||||||
|
Set = function(security, refresh)
|
||||||
|
GunrunningBunker.Security.Clear(false)
|
||||||
|
|
||||||
|
if security ~= "" then
|
||||||
|
SetIplPropState(GunrunningBunker.interiorId, security, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(GunrunningBunker.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
-- Removes the security.
|
||||||
|
-- refresh: Reload the whole interior (values: true / false)
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(GunrunningBunker.interiorId, {
|
||||||
|
GunrunningBunker.Security.default,
|
||||||
|
GunrunningBunker.Security.upgrade
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Details = {
|
||||||
|
office = "Office_Upgrade_set", -- Office interior
|
||||||
|
officeLocked = "Office_blocker_set", -- Metal door blocking access to the office
|
||||||
|
locker = "gun_locker_upgrade", -- Locker next to the office door
|
||||||
|
rangeLights = "gun_range_lights", -- Lights next to the shooting range
|
||||||
|
rangeWall = "gun_wall_blocker", -- Wall blocking access to the shooting range
|
||||||
|
rangeLocked = "gun_range_blocker_set", -- Metal door blocking access to the shooting range
|
||||||
|
schematics = "Gun_schematic_set", -- Gun schematic on the table and whiteboard
|
||||||
|
|
||||||
|
-- Enable or disable a detail.
|
||||||
|
-- details: Prop to enable or disable (values: GunrunningBunker.Details.office / GunrunningBunker.Details.officeLocked / GunrunningBunker.Details.locker...)
|
||||||
|
-- state: Enable or Disable (values: true / false)
|
||||||
|
-- refresh: Reload the whole interior (values: true / false)
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(GunrunningBunker.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
GunrunningBunker.Ipl.Interior.Load()
|
||||||
|
GunrunningBunker.Ipl.Exterior.Load()
|
||||||
|
|
||||||
|
GunrunningBunker.Style.Set(GunrunningBunker.Style.default)
|
||||||
|
GunrunningBunker.Tier.Set(GunrunningBunker.Tier.default)
|
||||||
|
GunrunningBunker.Security.Set(GunrunningBunker.Security.default)
|
||||||
|
|
||||||
|
GunrunningBunker.Details.Enable(GunrunningBunker.Details.office, true)
|
||||||
|
GunrunningBunker.Details.Enable(GunrunningBunker.Details.officeLocked, false)
|
||||||
|
GunrunningBunker.Details.Enable(GunrunningBunker.Details.locker, true)
|
||||||
|
GunrunningBunker.Details.Enable(GunrunningBunker.Details.rangeLights, true)
|
||||||
|
GunrunningBunker.Details.Enable(GunrunningBunker.Details.rangeWall, false)
|
||||||
|
GunrunningBunker.Details.Enable(GunrunningBunker.Details.rangeLocked, false)
|
||||||
|
GunrunningBunker.Details.Enable(GunrunningBunker.Details.schematics, false)
|
||||||
|
|
||||||
|
-- Must be called in order to spawn or remove the props
|
||||||
|
RefreshInterior(GunrunningBunker.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
57
resources/[core]/bob74_ipl/dlc_gunrunning/yacht.lua
Normal file
57
resources/[core]/bob74_ipl/dlc_gunrunning/yacht.lua
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
-- Gunrunning Yacht: -1363.724, 6734.108, 2.44598
|
||||||
|
exports('GetGunrunningYachtObject', function()
|
||||||
|
return GunrunningYacht
|
||||||
|
end)
|
||||||
|
|
||||||
|
GunrunningYacht = {
|
||||||
|
ipl = {
|
||||||
|
"gr_heist_yacht2",
|
||||||
|
"gr_heist_yacht2_bar",
|
||||||
|
"gr_heist_yacht2_bar_lod",
|
||||||
|
"gr_heist_yacht2_bedrm",
|
||||||
|
"gr_heist_yacht2_bedrm_lod",
|
||||||
|
"gr_heist_yacht2_bridge",
|
||||||
|
"gr_heist_yacht2_bridge_lod",
|
||||||
|
"gr_heist_yacht2_enginrm",
|
||||||
|
"gr_heist_yacht2_enginrm_lod",
|
||||||
|
"gr_heist_yacht2_lod",
|
||||||
|
"gr_heist_yacht2_lounge",
|
||||||
|
"gr_heist_yacht2_lounge_lod",
|
||||||
|
"gr_heist_yacht2_slod",
|
||||||
|
},
|
||||||
|
|
||||||
|
Enable = function(state)
|
||||||
|
EnableIpl(GunrunningYacht.ipl, state)
|
||||||
|
end,
|
||||||
|
Water = {
|
||||||
|
modelHash = `apa_mp_apa_yacht_jacuzzi_ripple1`,
|
||||||
|
|
||||||
|
Enable = function(state)
|
||||||
|
local handle = GetClosestObjectOfType(-1369.0, 6736.0, 5.40, 5.0, GunrunningYacht.Water.modelHash, false, false, false)
|
||||||
|
|
||||||
|
if state then
|
||||||
|
-- Enable
|
||||||
|
if handle == 0 then
|
||||||
|
RequestModel(GunrunningYacht.Water.modelHash)
|
||||||
|
while not HasModelLoaded(GunrunningYacht.Water.modelHash) do
|
||||||
|
Wait(0)
|
||||||
|
end
|
||||||
|
|
||||||
|
local water = CreateObjectNoOffset(GunrunningYacht.Water.modelHash, -1369.0, 6736.0, 5.40, false, false, false)
|
||||||
|
|
||||||
|
SetEntityAsMissionEntity(water, false, false)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
-- Disable
|
||||||
|
if handle ~= 0 then
|
||||||
|
SetEntityAsMissionEntity(handle, false, false)
|
||||||
|
DeleteEntity(handle)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
GunrunningYacht.Enable(true)
|
||||||
|
end
|
||||||
|
}
|
||||||
28
resources/[core]/bob74_ipl/dlc_heists/carrier.lua
Normal file
28
resources/[core]/bob74_ipl/dlc_heists/carrier.lua
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
-- Heist Carrier: 3082.3117 -4717.1191 15.2622
|
||||||
|
exports('GetHeistCarrierObject', function()
|
||||||
|
return HeistCarrier
|
||||||
|
end)
|
||||||
|
|
||||||
|
HeistCarrier = {
|
||||||
|
ipl = {
|
||||||
|
"hei_carrier",
|
||||||
|
"hei_carrier_int1",
|
||||||
|
"hei_carrier_int1_lod",
|
||||||
|
"hei_carrier_int2",
|
||||||
|
"hei_carrier_int2_lod",
|
||||||
|
"hei_carrier_int3",
|
||||||
|
"hei_carrier_int3_lod",
|
||||||
|
"hei_carrier_int4",
|
||||||
|
"hei_carrier_int4_lod",
|
||||||
|
"hei_carrier_int5",
|
||||||
|
"hei_carrier_int5_lod",
|
||||||
|
"hei_carrier_int6",
|
||||||
|
"hei_carrier_int6_lod",
|
||||||
|
"hei_carrier_lod",
|
||||||
|
"hei_carrier_slod"
|
||||||
|
},
|
||||||
|
|
||||||
|
Enable = function(state)
|
||||||
|
EnableIpl(HeistCarrier.ipl, state)
|
||||||
|
end
|
||||||
|
}
|
||||||
57
resources/[core]/bob74_ipl/dlc_heists/yacht.lua
Normal file
57
resources/[core]/bob74_ipl/dlc_heists/yacht.lua
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
-- Heist Yatch: -2043.974,-1031.582, 11.981
|
||||||
|
exports('GetHeistYachtObject', function()
|
||||||
|
return HeistYacht
|
||||||
|
end)
|
||||||
|
|
||||||
|
HeistYacht = {
|
||||||
|
ipl = {
|
||||||
|
"hei_yacht_heist",
|
||||||
|
"hei_yacht_heist_bar",
|
||||||
|
"hei_yacht_heist_bar_lod",
|
||||||
|
"hei_yacht_heist_bedrm",
|
||||||
|
"hei_yacht_heist_bedrm_lod",
|
||||||
|
"hei_yacht_heist_bridge",
|
||||||
|
"hei_yacht_heist_bridge_lod",
|
||||||
|
"hei_yacht_heist_enginrm",
|
||||||
|
"hei_yacht_heist_enginrm_lod",
|
||||||
|
"hei_yacht_heist_lod",
|
||||||
|
"hei_yacht_heist_lounge",
|
||||||
|
"hei_yacht_heist_lounge_lod",
|
||||||
|
"hei_yacht_heist_slod"
|
||||||
|
},
|
||||||
|
|
||||||
|
Enable = function(state)
|
||||||
|
EnableIpl(HeistYacht.ipl, state)
|
||||||
|
end,
|
||||||
|
Water = {
|
||||||
|
modelHash = `apa_mp_apa_yacht_jacuzzi_ripple1`,
|
||||||
|
|
||||||
|
Enable = function(state)
|
||||||
|
local handle = GetClosestObjectOfType(-2023.773, -1038.0, 5.40, 5.0, HeistYacht.Water.modelHash, false, false, false)
|
||||||
|
|
||||||
|
if state then
|
||||||
|
-- Enable
|
||||||
|
if handle == 0 then
|
||||||
|
RequestModel(HeistYacht.Water.modelHash)
|
||||||
|
while not HasModelLoaded(HeistYacht.Water.modelHash) do
|
||||||
|
Wait(0)
|
||||||
|
end
|
||||||
|
|
||||||
|
local water = CreateObjectNoOffset(HeistYacht.Water.modelHash, -2023.773, -1038.0, 5.40, false, false, false)
|
||||||
|
|
||||||
|
SetEntityAsMissionEntity(water, false, false)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
-- Disable
|
||||||
|
if handle ~= 0 then
|
||||||
|
SetEntityAsMissionEntity(handle, false, false)
|
||||||
|
DeleteEntity(handle)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
HeistYacht.Enable(true)
|
||||||
|
end
|
||||||
|
}
|
||||||
69
resources/[core]/bob74_ipl/dlc_high_life/apartment1.lua
Normal file
69
resources/[core]/bob74_ipl/dlc_high_life/apartment1.lua
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
-- Apartment 1: -1462.28100000, -539.62760000, 72.44434000
|
||||||
|
exports('GetHLApartment1Object', function()
|
||||||
|
return HLApartment1
|
||||||
|
end)
|
||||||
|
|
||||||
|
HLApartment1 = {
|
||||||
|
interiorId = 145921,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Interior = {
|
||||||
|
ipl = "mpbusiness_int_placement_interior_v_mp_apt_h_01_milo_",
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(HLApartment1.Ipl.Interior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(HLApartment1.Ipl.Interior.ipl, false)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Strip = {
|
||||||
|
A = "Apart_Hi_Strip_A",
|
||||||
|
B = "Apart_Hi_Strip_B",
|
||||||
|
C = "Apart_Hi_Strip_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(HLApartment1.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Booze = {
|
||||||
|
A = "Apart_Hi_Booze_A",
|
||||||
|
B = "Apart_Hi_Booze_B",
|
||||||
|
C = "Apart_Hi_Booze_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(HLApartment1.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Smoke = {
|
||||||
|
A = "Apart_Hi_Smokes_A",
|
||||||
|
B = "Apart_Hi_Smokes_B",
|
||||||
|
C = "Apart_Hi_Smokes_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(HLApartment1.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
HLApartment1.Ipl.Interior.Load()
|
||||||
|
HLApartment1.Strip.Enable({
|
||||||
|
HLApartment1.Strip.A,
|
||||||
|
HLApartment1.Strip.B,
|
||||||
|
HLApartment1.Strip.C
|
||||||
|
}, false)
|
||||||
|
HLApartment1.Booze.Enable({
|
||||||
|
HLApartment1.Booze.A,
|
||||||
|
HLApartment1.Booze.B,
|
||||||
|
HLApartment1.Booze.C
|
||||||
|
}, false)
|
||||||
|
HLApartment1.Smoke.Enable({
|
||||||
|
HLApartment1.Smoke.A,
|
||||||
|
HLApartment1.Smoke.B,
|
||||||
|
HLApartment1.Smoke.C
|
||||||
|
}, false)
|
||||||
|
|
||||||
|
RefreshInterior(HLApartment1.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
69
resources/[core]/bob74_ipl/dlc_high_life/apartment2.lua
Normal file
69
resources/[core]/bob74_ipl/dlc_high_life/apartment2.lua
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
-- Apartment 2: -914.90260000, -374.87310000, 112.6748
|
||||||
|
exports('GetHLApartment2Object', function()
|
||||||
|
return HLApartment2
|
||||||
|
end)
|
||||||
|
|
||||||
|
HLApartment2 = {
|
||||||
|
interiorId = 146177,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Interior = {
|
||||||
|
ipl = "mpbusiness_int_placement_interior_v_mp_apt_h_01_milo__1",
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(HLApartment2.Ipl.Interior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(HLApartment2.Ipl.Interior.ipl, false)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Strip = {
|
||||||
|
A = "Apart_Hi_Strip_A",
|
||||||
|
B = "Apart_Hi_Strip_B",
|
||||||
|
C = "Apart_Hi_Strip_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(HLApartment2.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Booze = {
|
||||||
|
A = "Apart_Hi_Booze_A",
|
||||||
|
B = "Apart_Hi_Booze_B",
|
||||||
|
C = "Apart_Hi_Booze_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(HLApartment2.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Smoke = {
|
||||||
|
A = "Apart_Hi_Smokes_A",
|
||||||
|
B = "Apart_Hi_Smokes_B",
|
||||||
|
C = "Apart_Hi_Smokes_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(HLApartment2.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
HLApartment2.Ipl.Interior.Load()
|
||||||
|
HLApartment2.Strip.Enable({
|
||||||
|
HLApartment2.Strip.A,
|
||||||
|
HLApartment2.Strip.B,
|
||||||
|
HLApartment2.Strip.C
|
||||||
|
}, false)
|
||||||
|
HLApartment2.Booze.Enable({
|
||||||
|
HLApartment2.Booze.A,
|
||||||
|
HLApartment2.Booze.B,
|
||||||
|
HLApartment2.Booze.C
|
||||||
|
}, false)
|
||||||
|
HLApartment2.Smoke.Enable({
|
||||||
|
HLApartment2.Smoke.A,
|
||||||
|
HLApartment2.Smoke.B,
|
||||||
|
HLApartment2.Smoke.C
|
||||||
|
}, false)
|
||||||
|
|
||||||
|
RefreshInterior(HLApartment2.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
69
resources/[core]/bob74_ipl/dlc_high_life/apartment3.lua
Normal file
69
resources/[core]/bob74_ipl/dlc_high_life/apartment3.lua
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
-- Apartment 3: -609.56690000, 51.28212000, 96.60023000
|
||||||
|
exports('GetHLApartment3Object', function()
|
||||||
|
return HLApartment3
|
||||||
|
end)
|
||||||
|
|
||||||
|
HLApartment3 = {
|
||||||
|
interiorId = 146689,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Interior = {
|
||||||
|
ipl = "mpbusiness_int_placement_interior_v_mp_apt_h_01_milo__2",
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(HLApartment3.Ipl.Interior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(HLApartment3.Ipl.Interior.ipl, false)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Strip = {
|
||||||
|
A = "Apart_Hi_Strip_A",
|
||||||
|
B = "Apart_Hi_Strip_B",
|
||||||
|
C = "Apart_Hi_Strip_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(HLApartment3.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Booze = {
|
||||||
|
A = "Apart_Hi_Booze_A",
|
||||||
|
B = "Apart_Hi_Booze_B",
|
||||||
|
C = "Apart_Hi_Booze_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(HLApartment3.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Smoke = {
|
||||||
|
A = "Apart_Hi_Smokes_A",
|
||||||
|
B = "Apart_Hi_Smokes_B",
|
||||||
|
C = "Apart_Hi_Smokes_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(HLApartment3.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
HLApartment3.Ipl.Interior.Load()
|
||||||
|
HLApartment3.Strip.Enable({
|
||||||
|
HLApartment3.Strip.A,
|
||||||
|
HLApartment3.Strip.B,
|
||||||
|
HLApartment3.Strip.C
|
||||||
|
}, false)
|
||||||
|
HLApartment3.Booze.Enable({
|
||||||
|
HLApartment3.Booze.A,
|
||||||
|
HLApartment3.Booze.B,
|
||||||
|
HLApartment3.Booze.C
|
||||||
|
}, false)
|
||||||
|
HLApartment3.Smoke.Enable({
|
||||||
|
HLApartment3.Smoke.A,
|
||||||
|
HLApartment3.Smoke.B,
|
||||||
|
HLApartment3.Smoke.C
|
||||||
|
}, false)
|
||||||
|
|
||||||
|
RefreshInterior(HLApartment3.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
69
resources/[core]/bob74_ipl/dlc_high_life/apartment4.lua
Normal file
69
resources/[core]/bob74_ipl/dlc_high_life/apartment4.lua
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
-- Apartment 4: -778.50610000, 331.31600000, 210.39720
|
||||||
|
exports('GetHLApartment4Object', function()
|
||||||
|
return HLApartment4
|
||||||
|
end)
|
||||||
|
|
||||||
|
HLApartment4 = {
|
||||||
|
interiorId = 146945,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Interior = {
|
||||||
|
ipl = "mpbusiness_int_placement_interior_v_mp_apt_h_01_milo__3",
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(HLApartment4.Ipl.Interior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(HLApartment4.Ipl.Interior.ipl, false)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Strip = {
|
||||||
|
A = "Apart_Hi_Strip_A",
|
||||||
|
B = "Apart_Hi_Strip_B",
|
||||||
|
C = "Apart_Hi_Strip_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(HLApartment4.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Booze = {
|
||||||
|
A = "Apart_Hi_Booze_A",
|
||||||
|
B = "Apart_Hi_Booze_B",
|
||||||
|
C = "Apart_Hi_Booze_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(HLApartment4.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Smoke = {
|
||||||
|
A = "Apart_Hi_Smokes_A",
|
||||||
|
B = "Apart_Hi_Smokes_B",
|
||||||
|
C = "Apart_Hi_Smokes_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(HLApartment4.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
HLApartment4.Ipl.Interior.Load()
|
||||||
|
HLApartment4.Strip.Enable({
|
||||||
|
HLApartment4.Strip.A,
|
||||||
|
HLApartment4.Strip.B,
|
||||||
|
HLApartment4.Strip.C
|
||||||
|
}, false)
|
||||||
|
HLApartment4.Booze.Enable({
|
||||||
|
HLApartment4.Booze.A,
|
||||||
|
HLApartment4.Booze.B,
|
||||||
|
HLApartment4.Booze.C
|
||||||
|
}, false)
|
||||||
|
HLApartment4.Smoke.Enable({
|
||||||
|
HLApartment4.Smoke.A,
|
||||||
|
HLApartment4.Smoke.B,
|
||||||
|
HLApartment4.Smoke.C
|
||||||
|
}, false)
|
||||||
|
|
||||||
|
RefreshInterior(HLApartment4.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
69
resources/[core]/bob74_ipl/dlc_high_life/apartment5.lua
Normal file
69
resources/[core]/bob74_ipl/dlc_high_life/apartment5.lua
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
-- Apartment 5: -22.61353000, -590.14320000, 78.430910
|
||||||
|
exports('GetHLApartment5Object', function()
|
||||||
|
return HLApartment5
|
||||||
|
end)
|
||||||
|
|
||||||
|
HLApartment5 = {
|
||||||
|
interiorId = 147201,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Interior = {
|
||||||
|
ipl = "mpbusiness_int_placement_interior_v_mp_apt_h_01_milo__4",
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(HLApartment5.Ipl.Interior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(HLApartment5.Ipl.Interior.ipl, false)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Strip = {
|
||||||
|
A = "Apart_Hi_Strip_A",
|
||||||
|
B = "Apart_Hi_Strip_B",
|
||||||
|
C = "Apart_Hi_Strip_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(HLApartment5.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Booze = {
|
||||||
|
A = "Apart_Hi_Booze_A",
|
||||||
|
B = "Apart_Hi_Booze_B",
|
||||||
|
C = "Apart_Hi_Booze_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(HLApartment5.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Smoke = {
|
||||||
|
A = "Apart_Hi_Smokes_A",
|
||||||
|
B = "Apart_Hi_Smokes_B",
|
||||||
|
C = "Apart_Hi_Smokes_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(HLApartment5.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
HLApartment5.Ipl.Interior.Load()
|
||||||
|
HLApartment5.Strip.Enable({
|
||||||
|
HLApartment5.Strip.A,
|
||||||
|
HLApartment5.Strip.B,
|
||||||
|
HLApartment5.Strip.C
|
||||||
|
}, false)
|
||||||
|
HLApartment5.Booze.Enable({
|
||||||
|
HLApartment5.Booze.A,
|
||||||
|
HLApartment5.Booze.B,
|
||||||
|
HLApartment5.Booze.C
|
||||||
|
}, false)
|
||||||
|
HLApartment5.Smoke.Enable({
|
||||||
|
HLApartment5.Smoke.A,
|
||||||
|
HLApartment5.Smoke.B,
|
||||||
|
HLApartment5.Smoke.C
|
||||||
|
}, false)
|
||||||
|
|
||||||
|
RefreshInterior(HLApartment5.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
69
resources/[core]/bob74_ipl/dlc_high_life/apartment6.lua
Normal file
69
resources/[core]/bob74_ipl/dlc_high_life/apartment6.lua
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
-- Apartment 6: -609.56690000, 51.28212000, -183.98080
|
||||||
|
exports('GetHLApartment6Object', function()
|
||||||
|
return HLApartment6
|
||||||
|
end)
|
||||||
|
|
||||||
|
HLApartment6 = {
|
||||||
|
interiorId = 147457,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Interior = {
|
||||||
|
ipl = "mpbusiness_int_placement_interior_v_mp_apt_h_01_milo__5",
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(HLApartment6.Ipl.Interior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(HLApartment6.Ipl.Interior.ipl, false)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Strip = {
|
||||||
|
A = "Apart_Hi_Strip_A",
|
||||||
|
B = "Apart_Hi_Strip_B",
|
||||||
|
C = "Apart_Hi_Strip_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(HLApartment6.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Booze = {
|
||||||
|
A = "Apart_Hi_Booze_A",
|
||||||
|
B = "Apart_Hi_Booze_B",
|
||||||
|
C = "Apart_Hi_Booze_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(HLApartment6.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Smoke = {
|
||||||
|
A = "Apart_Hi_Smokes_A",
|
||||||
|
B = "Apart_Hi_Smokes_B",
|
||||||
|
C = "Apart_Hi_Smokes_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(HLApartment6.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
HLApartment6.Ipl.Interior.Load()
|
||||||
|
HLApartment6.Strip.Enable({
|
||||||
|
HLApartment6.Strip.A,
|
||||||
|
HLApartment6.Strip.B,
|
||||||
|
HLApartment6.Strip.C
|
||||||
|
}, false)
|
||||||
|
HLApartment6.Booze.Enable({
|
||||||
|
HLApartment6.Booze.A,
|
||||||
|
HLApartment6.Booze.B,
|
||||||
|
HLApartment6.Booze.C
|
||||||
|
}, false)
|
||||||
|
HLApartment6.Smoke.Enable({
|
||||||
|
HLApartment6.Smoke.A,
|
||||||
|
HLApartment6.Smoke.B,
|
||||||
|
HLApartment6.Smoke.C
|
||||||
|
}, false)
|
||||||
|
|
||||||
|
RefreshInterior(HLApartment6.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
202
resources/[core]/bob74_ipl/dlc_import/garage1.lua
Normal file
202
resources/[core]/bob74_ipl/dlc_import/garage1.lua
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
-- Garage 1: Arcadius Business Centre
|
||||||
|
exports('GetImportCEOGarage1Object', function()
|
||||||
|
return ImportCEOGarage1
|
||||||
|
end)
|
||||||
|
|
||||||
|
ImportCEOGarage1 = {
|
||||||
|
Part = {
|
||||||
|
Garage1 = { -- -191.0133, -579.1428, 135.0000
|
||||||
|
interiorId = 253441,
|
||||||
|
ipl = "imp_dt1_02_cargarage_a"
|
||||||
|
},
|
||||||
|
Garage2 = { -- -117.4989, -568.1132, 135.0000
|
||||||
|
interiorId = 253697,
|
||||||
|
ipl = "imp_dt1_02_cargarage_b"
|
||||||
|
},
|
||||||
|
Garage3 = { -- -136.0780, -630.1852, 135.0000
|
||||||
|
interiorId = 253953,
|
||||||
|
ipl = "imp_dt1_02_cargarage_c"
|
||||||
|
},
|
||||||
|
ModShop = { -- -146.6166, -596.6301, 166.0000
|
||||||
|
interiorId = 254209,
|
||||||
|
ipl = "imp_dt1_02_modgarage"
|
||||||
|
},
|
||||||
|
|
||||||
|
Load = function(part)
|
||||||
|
EnableIpl(part.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function(part)
|
||||||
|
EnableIpl(part.ipl, false)
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
EnableIpl({
|
||||||
|
ImportCEOGarage1.Part.Garage1.ipl,
|
||||||
|
ImportCEOGarage1.Part.Garage2.ipl,
|
||||||
|
ImportCEOGarage1.Part.Garage3.ipl
|
||||||
|
}, false)
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
Style = {
|
||||||
|
concrete = "garage_decor_01",
|
||||||
|
plain = "garage_decor_02",
|
||||||
|
marble = "garage_decor_03",
|
||||||
|
wooden = "garage_decor_04",
|
||||||
|
|
||||||
|
Set = function(part, style, refresh)
|
||||||
|
ImportCEOGarage1.Style.Clear(part)
|
||||||
|
|
||||||
|
SetIplPropState(part.interiorId, style, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(part)
|
||||||
|
SetIplPropState(part.interiorId, {
|
||||||
|
ImportCEOGarage1.Style.concrete,
|
||||||
|
ImportCEOGarage1.Style.plain,
|
||||||
|
ImportCEOGarage1.Style.marble,
|
||||||
|
ImportCEOGarage1.Style.wooden
|
||||||
|
}, false, true)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Numbering = {
|
||||||
|
none = "",
|
||||||
|
Level1 = {
|
||||||
|
style1 = "numbering_style01_n1",
|
||||||
|
style2 = "numbering_style02_n1",
|
||||||
|
style3 = "numbering_style03_n1",
|
||||||
|
style4 = "numbering_style04_n1",
|
||||||
|
style5 = "numbering_style05_n1",
|
||||||
|
style6 = "numbering_style06_n1",
|
||||||
|
style7 = "numbering_style07_n1",
|
||||||
|
style8 = "numbering_style08_n1",
|
||||||
|
style9 = "numbering_style09_n1"
|
||||||
|
},
|
||||||
|
Level2 = {
|
||||||
|
style1 = "numbering_style01_n2",
|
||||||
|
style2 = "numbering_style02_n2",
|
||||||
|
style3 = "numbering_style03_n2",
|
||||||
|
style4 = "numbering_style04_n2",
|
||||||
|
style5 = "numbering_style05_n2",
|
||||||
|
style6 = "numbering_style06_n2",
|
||||||
|
style7 = "numbering_style07_n2",
|
||||||
|
style8 = "numbering_style08_n2",
|
||||||
|
style9 = "numbering_style09_n2"
|
||||||
|
},
|
||||||
|
Level3 = {
|
||||||
|
style1 = "numbering_style01_n3",
|
||||||
|
style2 = "numbering_style02_n3",
|
||||||
|
style3 = "numbering_style03_n3",
|
||||||
|
style4 = "numbering_style04_n3",
|
||||||
|
style5 = "numbering_style05_n3",
|
||||||
|
style6 = "numbering_style06_n3",
|
||||||
|
style7 = "numbering_style07_n3",
|
||||||
|
style8 = "numbering_style08_n3",
|
||||||
|
style9 = "numbering_style09_n3"
|
||||||
|
},
|
||||||
|
|
||||||
|
Set = function(part, num, refresh)
|
||||||
|
ImportCEOGarage1.Numbering.Clear(part)
|
||||||
|
|
||||||
|
if num ~= nil then
|
||||||
|
SetIplPropState(part.interiorId, num, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(part.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(part)
|
||||||
|
SetIplPropState(part.interiorId, {
|
||||||
|
ImportCEOGarage1.Numbering.Level1,
|
||||||
|
ImportCEOGarage1.Numbering.Level2,
|
||||||
|
ImportCEOGarage1.Numbering.Level3
|
||||||
|
}, false, true)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Lighting = {
|
||||||
|
none = "",
|
||||||
|
style1 = "lighting_option01",
|
||||||
|
style2 = "lighting_option02",
|
||||||
|
style3 = "lighting_option03",
|
||||||
|
style4 = "lighting_option04",
|
||||||
|
style5 = "lighting_option05",
|
||||||
|
style6 = "lighting_option06",
|
||||||
|
style7 = "lighting_option07",
|
||||||
|
style8 = "lighting_option08",
|
||||||
|
style9 = "lighting_option09",
|
||||||
|
|
||||||
|
Set = function(part, light, refresh)
|
||||||
|
ImportCEOGarage1.Lighting.Clear(part)
|
||||||
|
|
||||||
|
if light ~= nil then
|
||||||
|
SetIplPropState(part.interiorId, light, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(part.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(part)
|
||||||
|
SetIplPropState(part.interiorId, {
|
||||||
|
ImportCEOGarage1.Lighting.style1, ImportCEOGarage1.Lighting.style2, ImportCEOGarage1.Lighting.style3,
|
||||||
|
ImportCEOGarage1.Lighting.style4, ImportCEOGarage1.Lighting.style5, ImportCEOGarage1.Lighting.style6,
|
||||||
|
ImportCEOGarage1.Lighting.style7, ImportCEOGarage1.Lighting.style8, ImportCEOGarage1.Lighting.style9
|
||||||
|
}, false, true)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
ModShop = {
|
||||||
|
Floor = {
|
||||||
|
default = "",
|
||||||
|
city = "floor_vinyl_01",
|
||||||
|
seabed = "floor_vinyl_02",
|
||||||
|
aliens = "floor_vinyl_03",
|
||||||
|
clouds = "floor_vinyl_04",
|
||||||
|
money = "floor_vinyl_05",
|
||||||
|
zebra = "floor_vinyl_06",
|
||||||
|
blackWhite = "floor_vinyl_07",
|
||||||
|
barcode = "floor_vinyl_08",
|
||||||
|
paintbrushBW = "floor_vinyl_09",
|
||||||
|
grid = "floor_vinyl_10",
|
||||||
|
splashes = "floor_vinyl_11",
|
||||||
|
squares = "floor_vinyl_12",
|
||||||
|
mosaic = "floor_vinyl_13",
|
||||||
|
paintbrushColor = "floor_vinyl_14",
|
||||||
|
curvesColor = "floor_vinyl_15",
|
||||||
|
marbleBrown = "floor_vinyl_16",
|
||||||
|
marbleBlue = "floor_vinyl_17",
|
||||||
|
marbleBW = "floor_vinyl_18",
|
||||||
|
maze = "floor_vinyl_19",
|
||||||
|
|
||||||
|
Set = function(floor, refresh)
|
||||||
|
ImportCEOGarage1.ModShop.Floor.Clear()
|
||||||
|
|
||||||
|
if floor ~= nil then
|
||||||
|
SetIplPropState(ImportCEOGarage1.Part.ModShop.interiorId, floor, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(ImportCEOGarage1.Part.ModShop.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
SetIplPropState(ImportCEOGarage1.Part.ModShop.interiorId, {
|
||||||
|
ImportCEOGarage1.ModShop.Floor.city, ImportCEOGarage1.ModShop.Floor.seabed, ImportCEOGarage1.ModShop.Floor.aliens,
|
||||||
|
ImportCEOGarage1.ModShop.Floor.clouds, ImportCEOGarage1.ModShop.Floor.money, ImportCEOGarage1.ModShop.Floor.zebra,
|
||||||
|
ImportCEOGarage1.ModShop.Floor.blackWhite, ImportCEOGarage1.ModShop.Floor.barcode, ImportCEOGarage1.ModShop.Floor.paintbrushBW,
|
||||||
|
ImportCEOGarage1.ModShop.Floor.grid, ImportCEOGarage1.ModShop.Floor.splashes, ImportCEOGarage1.ModShop.Floor.squares,
|
||||||
|
ImportCEOGarage1.ModShop.Floor.mosaic, ImportCEOGarage1.ModShop.Floor.paintbrushColor, ImportCEOGarage1.ModShop.Floor.curvesColor,
|
||||||
|
ImportCEOGarage1.ModShop.Floor.marbleBrown, ImportCEOGarage1.ModShop.Floor.marbleBlue, ImportCEOGarage1.ModShop.Floor.marbleBW,
|
||||||
|
ImportCEOGarage1.ModShop.Floor.maze
|
||||||
|
}, false, true)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
ImportCEOGarage1.Part.Load(ImportCEOGarage1.Part.Garage1)
|
||||||
|
ImportCEOGarage1.Style.Set(ImportCEOGarage1.Part.Garage1, ImportCEOGarage1.Style.concrete)
|
||||||
|
ImportCEOGarage1.Numbering.Set(ImportCEOGarage1.Part.Garage1, ImportCEOGarage1.Numbering.Level1.style1)
|
||||||
|
ImportCEOGarage1.Lighting.Set(ImportCEOGarage1.Part.Garage1, ImportCEOGarage1.Lighting.style1, true)
|
||||||
|
|
||||||
|
ImportCEOGarage1.Part.Load(ImportCEOGarage1.Part.ModShop)
|
||||||
|
ImportCEOGarage1.ModShop.Floor.Set(ImportCEOGarage1.ModShop.Floor.default, true)
|
||||||
|
end
|
||||||
|
}
|
||||||
201
resources/[core]/bob74_ipl/dlc_import/garage2.lua
Normal file
201
resources/[core]/bob74_ipl/dlc_import/garage2.lua
Normal file
@ -0,0 +1,201 @@
|
|||||||
|
-- Garage 2: Maze Bank Building
|
||||||
|
exports('GetImportCEOGarage2Object', function()
|
||||||
|
return ImportCEOGarage2
|
||||||
|
end)
|
||||||
|
|
||||||
|
ImportCEOGarage2 = {
|
||||||
|
Part = {
|
||||||
|
Garage1 = { -- -84.2193, -823.0851, 221.0000
|
||||||
|
interiorId = 254465,
|
||||||
|
ipl = "imp_dt1_11_cargarage_a"
|
||||||
|
},
|
||||||
|
Garage2 = { -- -69.8627, -824.7498, 221.0000
|
||||||
|
interiorId = 254721,
|
||||||
|
ipl = "imp_dt1_11_cargarage_b"
|
||||||
|
},
|
||||||
|
Garage3 = { -- -80.4318, -813.2536, 221.0000
|
||||||
|
interiorId = 254977,
|
||||||
|
ipl = "imp_dt1_11_cargarage_c"
|
||||||
|
},
|
||||||
|
ModShop = { -- -73.9039, -821.6204, 284.0000
|
||||||
|
interiorId = 255233,
|
||||||
|
ipl = "imp_dt1_11_modgarage"
|
||||||
|
},
|
||||||
|
|
||||||
|
Load = function(part)
|
||||||
|
EnableIpl(part.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function(part)
|
||||||
|
EnableIpl(part.ipl, false)
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
EnableIpl({
|
||||||
|
ImportCEOGarage2.Part.Garage1.ipl,
|
||||||
|
ImportCEOGarage2.Part.Garage2.ipl,
|
||||||
|
ImportCEOGarage2.Part.Garage3.ipl
|
||||||
|
}, false)
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
Style = {
|
||||||
|
concrete = "garage_decor_01",
|
||||||
|
plain = "garage_decor_02",
|
||||||
|
marble = "garage_decor_03",
|
||||||
|
wooden = "garage_decor_04",
|
||||||
|
|
||||||
|
Set = function(part, style, refresh)
|
||||||
|
ImportCEOGarage2.Style.Clear(part)
|
||||||
|
|
||||||
|
SetIplPropState(part.interiorId, style, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(part)
|
||||||
|
SetIplPropState(part.interiorId, {
|
||||||
|
ImportCEOGarage2.Style.concrete,
|
||||||
|
ImportCEOGarage2.Style.plain,
|
||||||
|
ImportCEOGarage2.Style.marble,
|
||||||
|
ImportCEOGarage2.Style.wooden
|
||||||
|
}, false, true)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Numbering = {
|
||||||
|
none = "",
|
||||||
|
Level1 = {
|
||||||
|
style1 = "numbering_style01_n1",
|
||||||
|
style2 = "numbering_style02_n1",
|
||||||
|
style3 = "numbering_style03_n1",
|
||||||
|
style4 = "numbering_style04_n1",
|
||||||
|
style5 = "numbering_style05_n1",
|
||||||
|
style6 = "numbering_style06_n1",
|
||||||
|
style7 = "numbering_style07_n1",
|
||||||
|
style8 = "numbering_style08_n1",
|
||||||
|
style9 = "numbering_style09_n1"
|
||||||
|
},
|
||||||
|
Level2 = {
|
||||||
|
style1 = "numbering_style01_n2",
|
||||||
|
style2 = "numbering_style02_n2",
|
||||||
|
style3 = "numbering_style03_n2",
|
||||||
|
style4 = "numbering_style04_n2",
|
||||||
|
style5 = "numbering_style05_n2",
|
||||||
|
style6 = "numbering_style06_n2",
|
||||||
|
style7 = "numbering_style07_n2",
|
||||||
|
style8 = "numbering_style08_n2",
|
||||||
|
style9 = "numbering_style09_n2"
|
||||||
|
},
|
||||||
|
Level3 = {
|
||||||
|
style1 = "numbering_style01_n3",
|
||||||
|
style2 = "numbering_style02_n3",
|
||||||
|
style3 = "numbering_style03_n3",
|
||||||
|
style4 = "numbering_style04_n3",
|
||||||
|
style5 = "numbering_style05_n3",
|
||||||
|
style6 = "numbering_style06_n3",
|
||||||
|
style7 = "numbering_style07_n3",
|
||||||
|
style8 = "numbering_style08_n3",
|
||||||
|
style9 = "numbering_style09_n3"
|
||||||
|
},
|
||||||
|
Set = function(part, num, refresh)
|
||||||
|
ImportCEOGarage2.Numbering.Clear(part)
|
||||||
|
|
||||||
|
if num ~= nil then
|
||||||
|
SetIplPropState(part.interiorId, num, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(part.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(part)
|
||||||
|
SetIplPropState(part.interiorId, {
|
||||||
|
ImportCEOGarage2.Numbering.Level1,
|
||||||
|
ImportCEOGarage2.Numbering.Level2,
|
||||||
|
ImportCEOGarage2.Numbering.Level3
|
||||||
|
}, false, true)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Lighting = {
|
||||||
|
none = "",
|
||||||
|
style1 = "lighting_option01",
|
||||||
|
style2 = "lighting_option02",
|
||||||
|
style3 = "lighting_option03",
|
||||||
|
style4 = "lighting_option04",
|
||||||
|
style5 = "lighting_option05",
|
||||||
|
style6 = "lighting_option06",
|
||||||
|
style7 = "lighting_option07",
|
||||||
|
style8 = "lighting_option08",
|
||||||
|
style9 = "lighting_option09",
|
||||||
|
|
||||||
|
Set = function(part, light, refresh)
|
||||||
|
ImportCEOGarage2.Lighting.Clear(part)
|
||||||
|
|
||||||
|
if light ~= nil then
|
||||||
|
SetIplPropState(part.interiorId, light, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(part.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(part)
|
||||||
|
SetIplPropState(part.interiorId, {
|
||||||
|
ImportCEOGarage2.Lighting.style1, ImportCEOGarage2.Lighting.style2, ImportCEOGarage2.Lighting.style3,
|
||||||
|
ImportCEOGarage2.Lighting.style4, ImportCEOGarage2.Lighting.style5, ImportCEOGarage2.Lighting.style6,
|
||||||
|
ImportCEOGarage2.Lighting.style7, ImportCEOGarage2.Lighting.style8, ImportCEOGarage2.Lighting.style9
|
||||||
|
}, false, true)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
ModShop = {
|
||||||
|
Floor = {
|
||||||
|
default = "",
|
||||||
|
city = "floor_vinyl_01",
|
||||||
|
seabed = "floor_vinyl_02",
|
||||||
|
aliens = "floor_vinyl_03",
|
||||||
|
clouds = "floor_vinyl_04",
|
||||||
|
money = "floor_vinyl_05",
|
||||||
|
zebra = "floor_vinyl_06",
|
||||||
|
blackWhite = "floor_vinyl_07",
|
||||||
|
barcode = "floor_vinyl_08",
|
||||||
|
paintbrushBW = "floor_vinyl_09",
|
||||||
|
grid = "floor_vinyl_10",
|
||||||
|
splashes = "floor_vinyl_11",
|
||||||
|
squares = "floor_vinyl_12",
|
||||||
|
mosaic = "floor_vinyl_13",
|
||||||
|
paintbrushColor = "floor_vinyl_14",
|
||||||
|
curvesColor = "floor_vinyl_15",
|
||||||
|
marbleBrown = "floor_vinyl_16",
|
||||||
|
marbleBlue = "floor_vinyl_17",
|
||||||
|
marbleBW = "floor_vinyl_18",
|
||||||
|
maze = "floor_vinyl_19",
|
||||||
|
|
||||||
|
Set = function(floor, refresh)
|
||||||
|
ImportCEOGarage2.ModShop.Floor.Clear()
|
||||||
|
|
||||||
|
if floor ~= nil then
|
||||||
|
SetIplPropState(ImportCEOGarage2.Part.ModShop.interiorId, floor, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(ImportCEOGarage2.Part.ModShop.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
SetIplPropState(ImportCEOGarage2.Part.ModShop.interiorId, {
|
||||||
|
ImportCEOGarage2.ModShop.Floor.city, ImportCEOGarage2.ModShop.Floor.seabed, ImportCEOGarage2.ModShop.Floor.aliens,
|
||||||
|
ImportCEOGarage2.ModShop.Floor.clouds, ImportCEOGarage2.ModShop.Floor.money, ImportCEOGarage2.ModShop.Floor.zebra,
|
||||||
|
ImportCEOGarage2.ModShop.Floor.blackWhite, ImportCEOGarage2.ModShop.Floor.barcode, ImportCEOGarage2.ModShop.Floor.paintbrushBW,
|
||||||
|
ImportCEOGarage2.ModShop.Floor.grid, ImportCEOGarage2.ModShop.Floor.splashes, ImportCEOGarage2.ModShop.Floor.squares,
|
||||||
|
ImportCEOGarage2.ModShop.Floor.mosaic, ImportCEOGarage2.ModShop.Floor.paintbrushColor, ImportCEOGarage2.ModShop.Floor.curvesColor,
|
||||||
|
ImportCEOGarage2.ModShop.Floor.marbleBrown, ImportCEOGarage2.ModShop.Floor.marbleBlue, ImportCEOGarage2.ModShop.Floor.marbleBW,
|
||||||
|
ImportCEOGarage2.ModShop.Floor.maze
|
||||||
|
}, false, true)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
ImportCEOGarage2.Part.Load(ImportCEOGarage2.Part.Garage1)
|
||||||
|
ImportCEOGarage2.Style.Set(ImportCEOGarage2.Part.Garage1, ImportCEOGarage2.Style.concrete, false)
|
||||||
|
ImportCEOGarage2.Numbering.Set(ImportCEOGarage2.Part.Garage1, ImportCEOGarage2.Numbering.Level1.style1, false)
|
||||||
|
ImportCEOGarage2.Lighting.Set(ImportCEOGarage2.Part.Garage1, ImportCEOGarage2.Lighting.style1, true)
|
||||||
|
|
||||||
|
ImportCEOGarage2.Part.Load(ImportCEOGarage2.Part.ModShop)
|
||||||
|
ImportCEOGarage2.ModShop.Floor.Set(ImportCEOGarage2.ModShop.Floor.default, true)
|
||||||
|
end
|
||||||
|
}
|
||||||
201
resources/[core]/bob74_ipl/dlc_import/garage3.lua
Normal file
201
resources/[core]/bob74_ipl/dlc_import/garage3.lua
Normal file
@ -0,0 +1,201 @@
|
|||||||
|
-- Garage 3: Lom Bank
|
||||||
|
exports('GetImportCEOGarage3Object', function()
|
||||||
|
return ImportCEOGarage3
|
||||||
|
end)
|
||||||
|
|
||||||
|
ImportCEOGarage3 = {
|
||||||
|
Part = {
|
||||||
|
Garage1 = { -- -1581.1120, -567.2450, 85.5000
|
||||||
|
interiorId = 255489,
|
||||||
|
ipl = "imp_sm_13_cargarage_a"
|
||||||
|
},
|
||||||
|
Garage2 = { -- -1568.7390, -562.0455, 85.5000
|
||||||
|
interiorId = 255745,
|
||||||
|
ipl = "imp_sm_13_cargarage_b"
|
||||||
|
},
|
||||||
|
Garage3 = { -- -1563.5570, -574.4314, 85.5000
|
||||||
|
interiorId = 256001,
|
||||||
|
ipl = "imp_sm_13_cargarage_c"
|
||||||
|
},
|
||||||
|
ModShop = { -- -1578.0230, -576.4251, 104.2000
|
||||||
|
interiorId = 256257,
|
||||||
|
ipl = "imp_sm_13_modgarage"
|
||||||
|
},
|
||||||
|
|
||||||
|
Load = function(part)
|
||||||
|
EnableIpl(part.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function(part)
|
||||||
|
EnableIpl(part.ipl, false)
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
EnableIpl({
|
||||||
|
ImportCEOGarage3.Part.Garage1.ipl,
|
||||||
|
ImportCEOGarage3.Part.Garage2.ipl,
|
||||||
|
ImportCEOGarage3.Part.Garage3.ipl
|
||||||
|
}, false)
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
Style = {
|
||||||
|
concrete = "garage_decor_01",
|
||||||
|
plain = "garage_decor_02",
|
||||||
|
marble = "garage_decor_03",
|
||||||
|
wooden = "garage_decor_04",
|
||||||
|
|
||||||
|
Set = function(part, style, refresh)
|
||||||
|
ImportCEOGarage3.Style.Clear(part)
|
||||||
|
|
||||||
|
SetIplPropState(part.interiorId, style, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(part)
|
||||||
|
SetIplPropState(part.interiorId, {
|
||||||
|
ImportCEOGarage3.Style.concrete,
|
||||||
|
ImportCEOGarage3.Style.plain,
|
||||||
|
ImportCEOGarage3.Style.marble,
|
||||||
|
ImportCEOGarage3.Style.wooden
|
||||||
|
}, false, true)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Numbering = {
|
||||||
|
none = "",
|
||||||
|
Level1 = {
|
||||||
|
style1 = "numbering_style01_n1",
|
||||||
|
style2 = "numbering_style02_n1",
|
||||||
|
style3 = "numbering_style03_n1",
|
||||||
|
style4 = "numbering_style04_n1",
|
||||||
|
style5 = "numbering_style05_n1",
|
||||||
|
style6 = "numbering_style06_n1",
|
||||||
|
style7 = "numbering_style07_n1",
|
||||||
|
style8 = "numbering_style08_n1",
|
||||||
|
style9 = "numbering_style09_n1"
|
||||||
|
},
|
||||||
|
Level2 = {
|
||||||
|
style1 = "numbering_style01_n2",
|
||||||
|
style2 = "numbering_style02_n2",
|
||||||
|
style3 = "numbering_style03_n2",
|
||||||
|
style4 = "numbering_style04_n2",
|
||||||
|
style5 = "numbering_style05_n2",
|
||||||
|
style6 = "numbering_style06_n2",
|
||||||
|
style7 = "numbering_style07_n2",
|
||||||
|
style8 = "numbering_style08_n2",
|
||||||
|
style9 = "numbering_style09_n2"
|
||||||
|
},
|
||||||
|
Level3 = {
|
||||||
|
style1 = "numbering_style01_n3",
|
||||||
|
style2 = "numbering_style02_n3",
|
||||||
|
style3 = "numbering_style03_n3",
|
||||||
|
style4 = "numbering_style04_n3",
|
||||||
|
style5 = "numbering_style05_n3",
|
||||||
|
style6 = "numbering_style06_n3",
|
||||||
|
style7 = "numbering_style07_n3",
|
||||||
|
style8 = "numbering_style08_n3",
|
||||||
|
style9 = "numbering_style09_n3"
|
||||||
|
},
|
||||||
|
Set = function(part, num, refresh)
|
||||||
|
ImportCEOGarage3.Numbering.Clear(part)
|
||||||
|
|
||||||
|
if num ~= nil then
|
||||||
|
SetIplPropState(part.interiorId, num, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(part.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(part)
|
||||||
|
SetIplPropState(part.interiorId, {
|
||||||
|
ImportCEOGarage3.Numbering.Level1,
|
||||||
|
ImportCEOGarage3.Numbering.Level2,
|
||||||
|
ImportCEOGarage3.Numbering.Level3
|
||||||
|
}, false, true)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Lighting = {
|
||||||
|
none = "",
|
||||||
|
style1 = "lighting_option01",
|
||||||
|
style2 = "lighting_option02",
|
||||||
|
style3 = "lighting_option03",
|
||||||
|
style4 = "lighting_option04",
|
||||||
|
style5 = "lighting_option05",
|
||||||
|
style6 = "lighting_option06",
|
||||||
|
style7 = "lighting_option07",
|
||||||
|
style8 = "lighting_option08",
|
||||||
|
style9 = "lighting_option09",
|
||||||
|
|
||||||
|
Set = function(part, light, refresh)
|
||||||
|
ImportCEOGarage3.Lighting.Clear(part)
|
||||||
|
|
||||||
|
if light ~= nil then
|
||||||
|
SetIplPropState(part.interiorId, light, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(part.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(part)
|
||||||
|
SetIplPropState(part.interiorId, {
|
||||||
|
ImportCEOGarage3.Lighting.style1, ImportCEOGarage3.Lighting.style2, ImportCEOGarage3.Lighting.style3,
|
||||||
|
ImportCEOGarage3.Lighting.style4, ImportCEOGarage3.Lighting.style5, ImportCEOGarage3.Lighting.style6,
|
||||||
|
ImportCEOGarage3.Lighting.style7, ImportCEOGarage3.Lighting.style8, ImportCEOGarage3.Lighting.style9
|
||||||
|
}, false, true)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
ModShop = {
|
||||||
|
Floor = {
|
||||||
|
default = "",
|
||||||
|
city = "floor_vinyl_01",
|
||||||
|
seabed = "floor_vinyl_02",
|
||||||
|
aliens = "floor_vinyl_03",
|
||||||
|
clouds = "floor_vinyl_04",
|
||||||
|
money = "floor_vinyl_05",
|
||||||
|
zebra = "floor_vinyl_06",
|
||||||
|
blackWhite = "floor_vinyl_07",
|
||||||
|
barcode = "floor_vinyl_08",
|
||||||
|
paintbrushBW = "floor_vinyl_09",
|
||||||
|
grid = "floor_vinyl_10",
|
||||||
|
splashes = "floor_vinyl_11",
|
||||||
|
squares = "floor_vinyl_12",
|
||||||
|
mosaic = "floor_vinyl_13",
|
||||||
|
paintbrushColor = "floor_vinyl_14",
|
||||||
|
curvesColor = "floor_vinyl_15",
|
||||||
|
marbleBrown = "floor_vinyl_16",
|
||||||
|
marbleBlue = "floor_vinyl_17",
|
||||||
|
marbleBW = "floor_vinyl_18",
|
||||||
|
maze = "floor_vinyl_19",
|
||||||
|
|
||||||
|
Set = function(floor, refresh)
|
||||||
|
ImportCEOGarage3.ModShop.Floor.Clear()
|
||||||
|
|
||||||
|
if floor ~= nil then
|
||||||
|
SetIplPropState(ImportCEOGarage3.Part.ModShop.interiorId, floor, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(ImportCEOGarage3.Part.ModShop.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
SetIplPropState(ImportCEOGarage3.Part.ModShop.interiorId, {
|
||||||
|
ImportCEOGarage3.ModShop.Floor.city, ImportCEOGarage3.ModShop.Floor.seabed, ImportCEOGarage3.ModShop.Floor.aliens,
|
||||||
|
ImportCEOGarage3.ModShop.Floor.clouds, ImportCEOGarage3.ModShop.Floor.money, ImportCEOGarage3.ModShop.Floor.zebra,
|
||||||
|
ImportCEOGarage3.ModShop.Floor.blackWhite, ImportCEOGarage3.ModShop.Floor.barcode, ImportCEOGarage3.ModShop.Floor.paintbrushBW,
|
||||||
|
ImportCEOGarage3.ModShop.Floor.grid, ImportCEOGarage3.ModShop.Floor.splashes, ImportCEOGarage3.ModShop.Floor.squares,
|
||||||
|
ImportCEOGarage3.ModShop.Floor.mosaic, ImportCEOGarage3.ModShop.Floor.paintbrushColor, ImportCEOGarage3.ModShop.Floor.curvesColor,
|
||||||
|
ImportCEOGarage3.ModShop.Floor.marbleBrown, ImportCEOGarage3.ModShop.Floor.marbleBlue, ImportCEOGarage3.ModShop.Floor.marbleBW,
|
||||||
|
ImportCEOGarage3.ModShop.Floor.maze
|
||||||
|
}, false, true)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
ImportCEOGarage3.Part.Load(ImportCEOGarage3.Part.Garage1)
|
||||||
|
ImportCEOGarage3.Style.Set(ImportCEOGarage3.Part.Garage1, ImportCEOGarage3.Style.concrete, false)
|
||||||
|
ImportCEOGarage3.Numbering.Set(ImportCEOGarage3.Part.Garage1, ImportCEOGarage3.Numbering.Level1.style1, false)
|
||||||
|
ImportCEOGarage3.Lighting.Set(ImportCEOGarage3.Part.Garage1, ImportCEOGarage3.Lighting.style1, true)
|
||||||
|
|
||||||
|
-- No mod shop since it overlapses CEO office
|
||||||
|
ImportCEOGarage3.Part.Remove(ImportCEOGarage3.Part.ModShop)
|
||||||
|
end
|
||||||
|
}
|
||||||
204
resources/[core]/bob74_ipl/dlc_import/garage4.lua
Normal file
204
resources/[core]/bob74_ipl/dlc_import/garage4.lua
Normal file
@ -0,0 +1,204 @@
|
|||||||
|
-- Garage 4: Maze Bank West
|
||||||
|
-- Be careful, ImportCEOGarage4.Part.Garage1 and ImportCEOGarage4.Part.Garage3 overlaps with FinanceOffice4
|
||||||
|
exports('GetImportCEOGarage4Object', function()
|
||||||
|
return ImportCEOGarage4
|
||||||
|
end)
|
||||||
|
|
||||||
|
ImportCEOGarage4 = {
|
||||||
|
Part = {
|
||||||
|
Garage1 = { -- -1388.8400, -478.7402, 56.1000
|
||||||
|
interiorId = 256513,
|
||||||
|
ipl = "imp_sm_15_cargarage_a"
|
||||||
|
},
|
||||||
|
Garage2 = { -- -1388.8600, -478.7574, 48.1000
|
||||||
|
interiorId = 256769,
|
||||||
|
ipl = "imp_sm_15_cargarage_b"
|
||||||
|
},
|
||||||
|
Garage3 = { -- -1374.6820, -474.3586, 56.1000
|
||||||
|
interiorId = 257025,
|
||||||
|
ipl = "imp_sm_15_cargarage_c"
|
||||||
|
},
|
||||||
|
ModShop = { -- -1391.2450, -473.9638, 77.2000
|
||||||
|
interiorId = 257281,
|
||||||
|
ipl = "imp_sm_15_modgarage"
|
||||||
|
},
|
||||||
|
|
||||||
|
Load = function(part)
|
||||||
|
EnableIpl(part.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function(part)
|
||||||
|
EnableIpl(part.ipl, false)
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
EnableIpl({
|
||||||
|
ImportCEOGarage4.Part.Garage1.ipl,
|
||||||
|
ImportCEOGarage4.Part.Garage2.ipl,
|
||||||
|
ImportCEOGarage4.Part.Garage3.ipl
|
||||||
|
}, false)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Style = {
|
||||||
|
concrete = "garage_decor_01",
|
||||||
|
plain = "garage_decor_02",
|
||||||
|
marble = "garage_decor_03",
|
||||||
|
wooden = "garage_decor_04",
|
||||||
|
|
||||||
|
Set = function(part, style, refresh)
|
||||||
|
ImportCEOGarage4.Style.Clear(part)
|
||||||
|
|
||||||
|
SetIplPropState(part.interiorId, style, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(part)
|
||||||
|
SetIplPropState(part.interiorId, {
|
||||||
|
ImportCEOGarage4.Style.concrete,
|
||||||
|
ImportCEOGarage4.Style.plain,
|
||||||
|
ImportCEOGarage4.Style.marble,
|
||||||
|
ImportCEOGarage4.Style.wooden
|
||||||
|
}, false, true)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Numbering = {
|
||||||
|
none = "",
|
||||||
|
Level1 = {
|
||||||
|
style1 = "numbering_style01_n1",
|
||||||
|
style2 = "numbering_style02_n1",
|
||||||
|
style3 = "numbering_style03_n1",
|
||||||
|
style4 = "numbering_style04_n1",
|
||||||
|
style5 = "numbering_style05_n1",
|
||||||
|
style6 = "numbering_style06_n1",
|
||||||
|
style7 = "numbering_style07_n1",
|
||||||
|
style8 = "numbering_style08_n1",
|
||||||
|
style9 = "numbering_style09_n1"
|
||||||
|
},
|
||||||
|
Level2 = {
|
||||||
|
style1 = "numbering_style01_n2",
|
||||||
|
style2 = "numbering_style02_n2",
|
||||||
|
style3 = "numbering_style03_n2",
|
||||||
|
style4 = "numbering_style04_n2",
|
||||||
|
style5 = "numbering_style05_n2",
|
||||||
|
style6 = "numbering_style06_n2",
|
||||||
|
style7 = "numbering_style07_n2",
|
||||||
|
style8 = "numbering_style08_n2",
|
||||||
|
style9 = "numbering_style09_n2"
|
||||||
|
},
|
||||||
|
Level3 = {
|
||||||
|
style1 = "numbering_style01_n3",
|
||||||
|
style2 = "numbering_style02_n3",
|
||||||
|
style3 = "numbering_style03_n3",
|
||||||
|
style4 = "numbering_style04_n3",
|
||||||
|
style5 = "numbering_style05_n3",
|
||||||
|
style6 = "numbering_style06_n3",
|
||||||
|
style7 = "numbering_style07_n3",
|
||||||
|
style8 = "numbering_style08_n3",
|
||||||
|
style9 = "numbering_style09_n3"
|
||||||
|
},
|
||||||
|
|
||||||
|
Set = function(part, num, refresh)
|
||||||
|
ImportCEOGarage4.Numbering.Clear(part)
|
||||||
|
|
||||||
|
if num ~= nil then
|
||||||
|
SetIplPropState(part.interiorId, num, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(part.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(part)
|
||||||
|
SetIplPropState(part.interiorId, {
|
||||||
|
ImportCEOGarage4.Numbering.Level1,
|
||||||
|
ImportCEOGarage4.Numbering.Level2,
|
||||||
|
ImportCEOGarage4.Numbering.Level3
|
||||||
|
}, false, true)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Lighting = {
|
||||||
|
none = "",
|
||||||
|
style1 = "lighting_option01",
|
||||||
|
style2 = "lighting_option02",
|
||||||
|
style3 = "lighting_option03",
|
||||||
|
style4 = "lighting_option04",
|
||||||
|
style5 = "lighting_option05",
|
||||||
|
style6 = "lighting_option06",
|
||||||
|
style7 = "lighting_option07",
|
||||||
|
style8 = "lighting_option08",
|
||||||
|
style9 = "lighting_option09",
|
||||||
|
|
||||||
|
Set = function(part, light, refresh)
|
||||||
|
ImportCEOGarage4.Lighting.Clear(part)
|
||||||
|
|
||||||
|
if light ~= nil then
|
||||||
|
SetIplPropState(part.interiorId, light, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(part.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(part)
|
||||||
|
SetIplPropState(part.interiorId, {
|
||||||
|
ImportCEOGarage4.Lighting.style1, ImportCEOGarage4.Lighting.style2, ImportCEOGarage4.Lighting.style3,
|
||||||
|
ImportCEOGarage4.Lighting.style4, ImportCEOGarage4.Lighting.style5, ImportCEOGarage4.Lighting.style6,
|
||||||
|
ImportCEOGarage4.Lighting.style7, ImportCEOGarage4.Lighting.style8, ImportCEOGarage4.Lighting.style9
|
||||||
|
}, false, true)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
ModShop = {
|
||||||
|
Floor = {
|
||||||
|
default = "",
|
||||||
|
city = "floor_vinyl_01",
|
||||||
|
seabed = "floor_vinyl_02",
|
||||||
|
aliens = "floor_vinyl_03",
|
||||||
|
clouds = "floor_vinyl_04",
|
||||||
|
money = "floor_vinyl_05",
|
||||||
|
zebra = "floor_vinyl_06",
|
||||||
|
blackWhite = "floor_vinyl_07",
|
||||||
|
barcode = "floor_vinyl_08",
|
||||||
|
paintbrushBW = "floor_vinyl_09",
|
||||||
|
grid = "floor_vinyl_10",
|
||||||
|
splashes = "floor_vinyl_11",
|
||||||
|
squares = "floor_vinyl_12",
|
||||||
|
mosaic = "floor_vinyl_13",
|
||||||
|
paintbrushColor = "floor_vinyl_14",
|
||||||
|
curvesColor = "floor_vinyl_15",
|
||||||
|
marbleBrown = "floor_vinyl_16",
|
||||||
|
marbleBlue = "floor_vinyl_17",
|
||||||
|
marbleBW = "floor_vinyl_18",
|
||||||
|
maze = "floor_vinyl_19",
|
||||||
|
|
||||||
|
Set = function(floor, refresh)
|
||||||
|
ImportCEOGarage4.ModShop.Floor.Clear()
|
||||||
|
|
||||||
|
if floor ~= nil then
|
||||||
|
SetIplPropState(ImportCEOGarage4.Part.ModShop.interiorId, floor, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(ImportCEOGarage4.Part.ModShop.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
SetIplPropState(ImportCEOGarage4.Part.ModShop.interiorId, {
|
||||||
|
ImportCEOGarage4.ModShop.Floor.city, ImportCEOGarage4.ModShop.Floor.seabed, ImportCEOGarage4.ModShop.Floor.aliens,
|
||||||
|
ImportCEOGarage4.ModShop.Floor.clouds, ImportCEOGarage4.ModShop.Floor.money, ImportCEOGarage4.ModShop.Floor.zebra,
|
||||||
|
ImportCEOGarage4.ModShop.Floor.blackWhite, ImportCEOGarage4.ModShop.Floor.barcode, ImportCEOGarage4.ModShop.Floor.paintbrushBW,
|
||||||
|
ImportCEOGarage4.ModShop.Floor.grid, ImportCEOGarage4.ModShop.Floor.splashes, ImportCEOGarage4.ModShop.Floor.squares,
|
||||||
|
ImportCEOGarage4.ModShop.Floor.mosaic, ImportCEOGarage4.ModShop.Floor.paintbrushColor, ImportCEOGarage4.ModShop.Floor.curvesColor,
|
||||||
|
ImportCEOGarage4.ModShop.Floor.marbleBrown, ImportCEOGarage4.ModShop.Floor.marbleBlue, ImportCEOGarage4.ModShop.Floor.marbleBW,
|
||||||
|
ImportCEOGarage4.ModShop.Floor.maze
|
||||||
|
}, false, true)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
ImportCEOGarage4.Part.Load(ImportCEOGarage4.Part.Garage2)
|
||||||
|
|
||||||
|
ImportCEOGarage4.Style.Set(ImportCEOGarage4.Part.Garage2, ImportCEOGarage4.Style.concrete, false)
|
||||||
|
ImportCEOGarage4.Numbering.Set(ImportCEOGarage4.Part.Garage2, ImportCEOGarage4.Numbering.Level1.style1, false)
|
||||||
|
ImportCEOGarage4.Lighting.Set(ImportCEOGarage4.Part.Garage2, ImportCEOGarage4.Lighting.style1, true)
|
||||||
|
|
||||||
|
ImportCEOGarage4.Part.Load(ImportCEOGarage4.Part.ModShop)
|
||||||
|
ImportCEOGarage4.ModShop.Floor.Set(ImportCEOGarage4.ModShop.Floor.default, true)
|
||||||
|
end
|
||||||
|
}
|
||||||
96
resources/[core]/bob74_ipl/dlc_import/vehicle_warehouse.lua
Normal file
96
resources/[core]/bob74_ipl/dlc_import/vehicle_warehouse.lua
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
-- Vehicle warehouse
|
||||||
|
-- Upper: 994.5925, -3002.594, -39.64699
|
||||||
|
-- Lower: 969.5376, -3000.411, -48.64689
|
||||||
|
exports('GetImportVehicleWarehouseObject', function()
|
||||||
|
return ImportVehicleWarehouse
|
||||||
|
end)
|
||||||
|
|
||||||
|
ImportVehicleWarehouse = {
|
||||||
|
Upper = {
|
||||||
|
interiorId = 252673,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Interior = {
|
||||||
|
ipl = "imp_impexp_interior_placement_interior_1_impexp_intwaremed_milo_",
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(ImportVehicleWarehouse.Upper.Ipl.Interior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(ImportVehicleWarehouse.Upper.Ipl.Interior.ipl, false)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Style = {
|
||||||
|
basic = "basic_style_set",
|
||||||
|
branded = "branded_style_set",
|
||||||
|
urban = "urban_style_set",
|
||||||
|
|
||||||
|
Set = function(style, refresh)
|
||||||
|
ImportVehicleWarehouse.Upper.Style.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(ImportVehicleWarehouse.Upper.interiorId, style, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(ImportVehicleWarehouse.Upper.interiorId, {
|
||||||
|
ImportVehicleWarehouse.Upper.Style.basic,
|
||||||
|
ImportVehicleWarehouse.Upper.Style.branded,
|
||||||
|
ImportVehicleWarehouse.Upper.Style.urban
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Details = {
|
||||||
|
floorHatch = "car_floor_hatch",
|
||||||
|
doorBlocker = "door_blocker", -- Invisible wall
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(ImportVehicleWarehouse.Upper.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Lower = {
|
||||||
|
interiorId = 253185,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Interior = {
|
||||||
|
ipl = "imp_impexp_interior_placement_interior_3_impexp_int_02_milo_",
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(ImportVehicleWarehouse.Lower.Ipl.Interior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(ImportVehicleWarehouse.Lower.Ipl.Interior.ipl, false)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Details = {
|
||||||
|
Pumps = {
|
||||||
|
pump1 = "pump_01",
|
||||||
|
pump2 = "pump_02",
|
||||||
|
pump3 = "pump_03",
|
||||||
|
pump4 = "pump_04",
|
||||||
|
pump5 = "pump_05",
|
||||||
|
pump6 = "pump_06",
|
||||||
|
pump7 = "pump_07",
|
||||||
|
pump8 = "pump_08"
|
||||||
|
},
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(ImportVehicleWarehouse.Lower.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
ImportVehicleWarehouse.Upper.Ipl.Interior.Load()
|
||||||
|
ImportVehicleWarehouse.Upper.Style.Set(ImportVehicleWarehouse.Upper.Style.branded)
|
||||||
|
ImportVehicleWarehouse.Upper.Details.Enable(ImportVehicleWarehouse.Upper.Details.floorHatch, true)
|
||||||
|
ImportVehicleWarehouse.Upper.Details.Enable(ImportVehicleWarehouse.Upper.Details.doorBlocker, false)
|
||||||
|
|
||||||
|
RefreshInterior(ImportVehicleWarehouse.Upper.interiorId)
|
||||||
|
|
||||||
|
ImportVehicleWarehouse.Lower.Ipl.Interior.Load()
|
||||||
|
ImportVehicleWarehouse.Lower.Details.Enable(ImportVehicleWarehouse.Lower.Details.Pumps, true)
|
||||||
|
|
||||||
|
RefreshInterior(ImportVehicleWarehouse.Lower.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
44
resources/[core]/bob74_ipl/dlc_mercenaries/club.lua
Normal file
44
resources/[core]/bob74_ipl/dlc_mercenaries/club.lua
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
-- Vinewood Car Club: 1202.407, -3251.251, -50.000
|
||||||
|
exports('GetMercenariesClubObject', function()
|
||||||
|
return MercenariesClub
|
||||||
|
end)
|
||||||
|
|
||||||
|
MercenariesClub = {
|
||||||
|
interiorId = 291841,
|
||||||
|
|
||||||
|
Style = {
|
||||||
|
empty = "entity_set_no_plus", -- The lamps if the podium is not there
|
||||||
|
club = {
|
||||||
|
"entity_set_plus",
|
||||||
|
"entity_set_backdrop_frames",
|
||||||
|
"entity_set_signs"
|
||||||
|
},
|
||||||
|
|
||||||
|
Set = function(style, refresh)
|
||||||
|
MercenariesClub.Style.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(MercenariesClub.interiorId, style, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(MercenariesClub.interiorId, {
|
||||||
|
MercenariesClub.Style.empty,
|
||||||
|
MercenariesClub.Style.club
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
Stairs = {
|
||||||
|
stairs = "entity_set_stairs",
|
||||||
|
|
||||||
|
Enable = function(state, refresh)
|
||||||
|
SetIplPropState(MercenariesClub.interiorId, MercenariesClub.Stairs.stairs, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
MercenariesClub.Style.Set(MercenariesClub.Style.club, false)
|
||||||
|
MercenariesClub.Stairs.Enable(true, false)
|
||||||
|
|
||||||
|
RefreshInterior(MercenariesClub.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
16
resources/[core]/bob74_ipl/dlc_mercenaries/fixes.lua
Normal file
16
resources/[core]/bob74_ipl/dlc_mercenaries/fixes.lua
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
-- Map fixes
|
||||||
|
exports('GetMercenariesFixesObject', function()
|
||||||
|
return MercenariesFixes
|
||||||
|
end)
|
||||||
|
|
||||||
|
MercenariesFixes = {
|
||||||
|
ipl = "m23_1_legacy_fixes",
|
||||||
|
|
||||||
|
Enable = function(state)
|
||||||
|
EnableIpl(MercenariesFixes.ipl, state)
|
||||||
|
end,
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
MercenariesFixes.Enable(true)
|
||||||
|
end
|
||||||
|
}
|
||||||
28
resources/[core]/bob74_ipl/dlc_mercenaries/lab.lua
Normal file
28
resources/[core]/bob74_ipl/dlc_mercenaries/lab.lua
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
-- Fort Zancudo Lab: -1916.119, 3749.719, -100.000
|
||||||
|
exports('GetMercenariesLabObject', function()
|
||||||
|
return MercenariesLab
|
||||||
|
end)
|
||||||
|
|
||||||
|
MercenariesLab = {
|
||||||
|
interiorId = 292097,
|
||||||
|
|
||||||
|
Details = {
|
||||||
|
levers = "entity_set_levers",
|
||||||
|
crates = "entity_set_crates",
|
||||||
|
weapons = "entity_set_weapons",
|
||||||
|
lights = "entity_set_lift_lights",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(MercenariesLab.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
MercenariesLab.Details.Enable(MercenariesLab.Details.levers, true, false)
|
||||||
|
MercenariesLab.Details.Enable(MercenariesLab.Details.crates, true, false)
|
||||||
|
MercenariesLab.Details.Enable(MercenariesLab.Details.weapons, true, false)
|
||||||
|
MercenariesLab.Details.Enable(MercenariesLab.Details.lights, true, false)
|
||||||
|
|
||||||
|
RefreshInterior(MercenariesLab.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
24
resources/[core]/bob74_ipl/dlc_security/billboards.lua
Normal file
24
resources/[core]/bob74_ipl/dlc_security/billboards.lua
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
exports('GetMpSecurityBillboardsObject', function()
|
||||||
|
return MpSecurityBillboards
|
||||||
|
end)
|
||||||
|
|
||||||
|
MpSecurityBillboards = {
|
||||||
|
Ipl = {
|
||||||
|
Interior = {
|
||||||
|
ipl = {
|
||||||
|
'sf_billboards',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(MpSecurityBillboards.Ipl.Interior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(MpSecurityBillboards.Ipl.Interior.ipl, false)
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
MpSecurityBillboards.Ipl.Load()
|
||||||
|
end
|
||||||
|
}
|
||||||
73
resources/[core]/bob74_ipl/dlc_security/garage.lua
Normal file
73
resources/[core]/bob74_ipl/dlc_security/garage.lua
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
exports('GetMpSecurityGarageObject', function()
|
||||||
|
return MpSecurityGarage
|
||||||
|
end)
|
||||||
|
|
||||||
|
MpSecurityGarage = {
|
||||||
|
InteriorId = 286721,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Interior = {
|
||||||
|
ipl = {
|
||||||
|
'sf_int_placement_sec_interior_2_dlc_garage_sec_milo_'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(MpSecurityGarage.Ipl.Interior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(MpSecurityGarage.Ipl.Interior.ipl, false)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Entities = {
|
||||||
|
Entity_Set_Workshop_Wall = false,
|
||||||
|
Entity_Set_Wallpaper_01 = false,
|
||||||
|
Entity_Set_Wallpaper_02 = false,
|
||||||
|
Entity_Set_Wallpaper_03 = false,
|
||||||
|
Entity_Set_Wallpaper_04 = false,
|
||||||
|
Entity_Set_Wallpaper_05 = false,
|
||||||
|
Entity_Set_Wallpaper_06 = false,
|
||||||
|
Entity_Set_Wallpaper_07 = true,
|
||||||
|
Entity_Set_Wallpaper_08 = false,
|
||||||
|
Entity_Set_Wallpaper_09 = false,
|
||||||
|
Entity_Set_Art_1 = false,
|
||||||
|
Entity_Set_Art_2 = false,
|
||||||
|
Entity_Set_Art_3 = false,
|
||||||
|
Entity_Set_Art_1_NoMod = false,
|
||||||
|
Entity_Set_Art_2_NoMod = false,
|
||||||
|
Entity_Set_Art_3_NoMod = false,
|
||||||
|
entity_set_tints = true,
|
||||||
|
Entity_Set_Workshop_Lights = true,
|
||||||
|
|
||||||
|
Set = function(name, state)
|
||||||
|
for entity, _ in pairs(MpSecurityGarage.Entities) do
|
||||||
|
if entity == name then
|
||||||
|
MpSecurityGarage.Entities[entity] = state
|
||||||
|
MpSecurityGarage.Entities.Clear()
|
||||||
|
MpSecurityGarage.Entities.Load()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Load = function()
|
||||||
|
for entity, state in pairs(MpSecurityGarage.Entities) do
|
||||||
|
if type(entity) == 'string' and state then
|
||||||
|
ActivateInteriorEntitySet(MpSecurityGarage.InteriorId, entity)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
for entity, _ in pairs(MpSecurityGarage.Entities) do
|
||||||
|
if type(entity) == 'string' then
|
||||||
|
DeactivateInteriorEntitySet(MpSecurityGarage.InteriorId, entity)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
MpSecurityGarage.Ipl.Load()
|
||||||
|
MpSecurityGarage.Entities.Load()
|
||||||
|
|
||||||
|
RefreshInterior(MpSecurityGarage.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
24
resources/[core]/bob74_ipl/dlc_security/musicrooftop.lua
Normal file
24
resources/[core]/bob74_ipl/dlc_security/musicrooftop.lua
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
exports('GetMpSecurityMusicRoofTopObject', function()
|
||||||
|
return MpSecurityMusicRoofTop
|
||||||
|
end)
|
||||||
|
|
||||||
|
MpSecurityMusicRoofTop = {
|
||||||
|
Ipl = {
|
||||||
|
Interior = {
|
||||||
|
ipl = {
|
||||||
|
'sf_musicrooftop'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(MpSecurityMusicRoofTop.Ipl.Interior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(MpSecurityMusicRoofTop.Ipl.Interior.ipl, false)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
MpSecurityMusicRoofTop.Ipl.Load()
|
||||||
|
end
|
||||||
|
}
|
||||||
106
resources/[core]/bob74_ipl/dlc_security/office1.lua
Normal file
106
resources/[core]/bob74_ipl/dlc_security/office1.lua
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
exports('GetMpSecurityOffice1Object', function()
|
||||||
|
return MpSecurityOffice1
|
||||||
|
end)
|
||||||
|
|
||||||
|
MpSecurityOffice1 = {
|
||||||
|
InteriorId = 287489,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Interior = {
|
||||||
|
ipl = {
|
||||||
|
'sf_fixeroffice_bh1_05'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(MpSecurityOffice1.Ipl.Interior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(MpSecurityOffice1.Ipl.Interior.ipl, false)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Entities = {
|
||||||
|
Entity_Set_Armoury = false,
|
||||||
|
Entity_Set_Standard_Office = true,
|
||||||
|
Entity_Set_Blocker = false,
|
||||||
|
Entity_Set_Wpaper_1 = false,
|
||||||
|
Entity_Set_Wpaper_3 = false,
|
||||||
|
Entity_Set_Wpaper_2 = false,
|
||||||
|
Entity_Set_Wpaper_4 = false,
|
||||||
|
Entity_Set_Wpaper_5 = false,
|
||||||
|
Entity_Set_Wpaper_6 = false,
|
||||||
|
Entity_Set_Wpaper_7 = false,
|
||||||
|
Entity_Set_Wpaper_8 = true,
|
||||||
|
Entity_Set_Wpaper_9 = false,
|
||||||
|
Entity_Set_Moving = true,
|
||||||
|
Entity_Set_Tint_AG = true,
|
||||||
|
Entity_Set_Spare_Seats = true,
|
||||||
|
Entity_Set_Player_Seats = true,
|
||||||
|
Entity_Set_Player_Desk = true,
|
||||||
|
Entity_Set_M_Golf_Intro = true,
|
||||||
|
Entity_Set_M_Setup = true,
|
||||||
|
Entity_Set_M_Nightclub = true,
|
||||||
|
Entity_Set_M_Yacht = true,
|
||||||
|
Entity_Set_M_Promoter = true,
|
||||||
|
Entity_Set_M_Limo_Photo = true,
|
||||||
|
Entity_Set_M_Limo_Wallet = true,
|
||||||
|
Entity_Set_M_The_Way = true,
|
||||||
|
Entity_Set_M_Billionaire = true,
|
||||||
|
Entity_Set_M_Families = true,
|
||||||
|
Entity_Set_M_Ballas = true,
|
||||||
|
Entity_Set_M_Hood = true,
|
||||||
|
Entity_Set_M_Fire_Booth = true,
|
||||||
|
Entity_Set_M_50 = true,
|
||||||
|
Entity_Set_M_Taxi = true,
|
||||||
|
Entity_Set_M_Gone_Golfing = true,
|
||||||
|
Entity_Set_M_Motel = true,
|
||||||
|
Entity_Set_M_Construction = true,
|
||||||
|
Entity_Set_M_Hit_List = true,
|
||||||
|
Entity_Set_M_Tuner = true,
|
||||||
|
Entity_Set_M_Attack = true,
|
||||||
|
Entity_Set_M_Vehicles = true,
|
||||||
|
Entity_Set_M_Trip_01 = true,
|
||||||
|
Entity_Set_M_Trip_02 = true,
|
||||||
|
Entity_Set_M_Trip_03 = true,
|
||||||
|
Entity_set_disc_01 = true,
|
||||||
|
Entity_set_disc_02 = false,
|
||||||
|
Entity_set_disc_03 = false,
|
||||||
|
Entity_set_disc_04 = false,
|
||||||
|
Entity_set_disc_05 = false,
|
||||||
|
Entity_set_disc_06 = false,
|
||||||
|
Entity_Set_Art_1 = true,
|
||||||
|
Entity_Set_Art_2 = false,
|
||||||
|
Entity_Set_Art_3 = false,
|
||||||
|
|
||||||
|
Set = function(name, state)
|
||||||
|
for entity, _ in pairs(MpSecurityOffice1.Entities) do
|
||||||
|
if entity == name then
|
||||||
|
MpSecurityOffice1.Entities[entity] = state
|
||||||
|
MpSecurityOffice1.Entities.Clear()
|
||||||
|
MpSecurityOffice1.Entities.Load()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Load = function()
|
||||||
|
for entity, state in pairs(MpSecurityOffice1.Entities) do
|
||||||
|
if type(entity) == 'string' and state then
|
||||||
|
ActivateInteriorEntitySet(MpSecurityOffice1.InteriorId, entity)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
for entity, _ in pairs(MpSecurityOffice1.Entities) do
|
||||||
|
if type(entity) == 'string' then
|
||||||
|
DeactivateInteriorEntitySet(MpSecurityOffice1.InteriorId, entity)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
MpSecurityOffice1.Ipl.Load()
|
||||||
|
MpSecurityOffice1.Entities.Load()
|
||||||
|
|
||||||
|
RefreshInterior(MpSecurityOffice1.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
106
resources/[core]/bob74_ipl/dlc_security/office2.lua
Normal file
106
resources/[core]/bob74_ipl/dlc_security/office2.lua
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
exports('GetMpSecurityOffice2Object', function()
|
||||||
|
return MpSecurityOffice2
|
||||||
|
end)
|
||||||
|
|
||||||
|
MpSecurityOffice2 = {
|
||||||
|
InteriorId = 288257,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Interior = {
|
||||||
|
ipl = {
|
||||||
|
'sf_fixeroffice_hw1_08'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(MpSecurityOffice2.Ipl.Interior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(MpSecurityOffice2.Ipl.Interior.ipl, false)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Entities = {
|
||||||
|
Entity_Set_Armoury = true,
|
||||||
|
Entity_Set_Standard_Office = false,
|
||||||
|
Entity_Set_Blocker = false,
|
||||||
|
Entity_Set_Wpaper_1 = false,
|
||||||
|
Entity_Set_Wpaper_3 = false,
|
||||||
|
Entity_Set_Wpaper_2 = false,
|
||||||
|
Entity_Set_Wpaper_4 = false,
|
||||||
|
Entity_Set_Wpaper_5 = false,
|
||||||
|
Entity_Set_Wpaper_6 = false,
|
||||||
|
Entity_Set_Wpaper_7 = false,
|
||||||
|
Entity_Set_Wpaper_8 = false,
|
||||||
|
Entity_Set_Wpaper_9 = true,
|
||||||
|
Entity_Set_Moving = true,
|
||||||
|
Entity_Set_Tint_AG = true,
|
||||||
|
Entity_Set_Spare_Seats = true,
|
||||||
|
Entity_Set_Player_Seats = true,
|
||||||
|
Entity_Set_Player_Desk = true,
|
||||||
|
Entity_Set_M_Golf_Intro = true,
|
||||||
|
Entity_Set_M_Setup = true,
|
||||||
|
Entity_Set_M_Nightclub = true,
|
||||||
|
Entity_Set_M_Yacht = true,
|
||||||
|
Entity_Set_M_Promoter = true,
|
||||||
|
Entity_Set_M_Limo_Photo = true,
|
||||||
|
Entity_Set_M_Limo_Wallet = true,
|
||||||
|
Entity_Set_M_The_Way = true,
|
||||||
|
Entity_Set_M_Billionaire = true,
|
||||||
|
Entity_Set_M_Families = true,
|
||||||
|
Entity_Set_M_Ballas = true,
|
||||||
|
Entity_Set_M_Hood = true,
|
||||||
|
Entity_Set_M_Fire_Booth = true,
|
||||||
|
Entity_Set_M_50 = true,
|
||||||
|
Entity_Set_M_Taxi = true,
|
||||||
|
Entity_Set_M_Gone_Golfing = true,
|
||||||
|
Entity_Set_M_Motel = true,
|
||||||
|
Entity_Set_M_Construction = true,
|
||||||
|
Entity_Set_M_Hit_List = true,
|
||||||
|
Entity_Set_M_Tuner = true,
|
||||||
|
Entity_Set_M_Attack = true,
|
||||||
|
Entity_Set_M_Vehicles = true,
|
||||||
|
Entity_Set_M_Trip_01 = true,
|
||||||
|
Entity_Set_M_Trip_02 = true,
|
||||||
|
Entity_Set_M_Trip_03 = true,
|
||||||
|
Entity_set_disc_01 = false,
|
||||||
|
Entity_set_disc_02 = true,
|
||||||
|
Entity_set_disc_03 = false,
|
||||||
|
Entity_set_disc_04 = false,
|
||||||
|
Entity_set_disc_05 = false,
|
||||||
|
Entity_set_disc_06 = false,
|
||||||
|
Entity_Set_Art_1 = false,
|
||||||
|
Entity_Set_Art_2 = true,
|
||||||
|
Entity_Set_Art_3 = false,
|
||||||
|
|
||||||
|
Set = function(name, state)
|
||||||
|
for entity, _ in pairs(MpSecurityOffice2.Entities) do
|
||||||
|
if entity == name then
|
||||||
|
MpSecurityOffice2.Entities[entity] = state
|
||||||
|
MpSecurityOffice2.Entities.Clear()
|
||||||
|
MpSecurityOffice2.Entities.Load()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Load = function()
|
||||||
|
for entity, state in pairs(MpSecurityOffice2.Entities) do
|
||||||
|
if type(entity) == 'string' and state then
|
||||||
|
ActivateInteriorEntitySet(MpSecurityOffice2.InteriorId, entity)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
for entity, _ in pairs(MpSecurityOffice2.Entities) do
|
||||||
|
if type(entity) == 'string' then
|
||||||
|
DeactivateInteriorEntitySet(MpSecurityOffice2.InteriorId, entity)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
MpSecurityOffice2.Ipl.Load()
|
||||||
|
|
||||||
|
MpSecurityOffice2.Entities.Load()
|
||||||
|
RefreshInterior(MpSecurityOffice2.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
105
resources/[core]/bob74_ipl/dlc_security/office3.lua
Normal file
105
resources/[core]/bob74_ipl/dlc_security/office3.lua
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
exports('GetMpSecurityOffice3Object', function()
|
||||||
|
return MpSecurityOffice3
|
||||||
|
end)
|
||||||
|
|
||||||
|
MpSecurityOffice3 = {
|
||||||
|
InteriorId = 288001,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Interior = {
|
||||||
|
ipl = {
|
||||||
|
'sf_fixeroffice_kt1_05'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(MpSecurityOffice3.Ipl.Interior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(MpSecurityOffice3.Ipl.Interior.ipl, false)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Entities = {
|
||||||
|
Entity_Set_Armoury = false,
|
||||||
|
Entity_Set_Standard_Office = true,
|
||||||
|
Entity_Set_Blocker = false,
|
||||||
|
Entity_Set_Wpaper_1 = false,
|
||||||
|
Entity_Set_Wpaper_3 = false,
|
||||||
|
Entity_Set_Wpaper_2 = true,
|
||||||
|
Entity_Set_Wpaper_4 = false,
|
||||||
|
Entity_Set_Wpaper_5 = false,
|
||||||
|
Entity_Set_Wpaper_6 = false,
|
||||||
|
Entity_Set_Wpaper_7 = false,
|
||||||
|
Entity_Set_Wpaper_8 = false,
|
||||||
|
Entity_Set_Wpaper_9 = false,
|
||||||
|
Entity_Set_Moving = true,
|
||||||
|
Entity_Set_Tint_AG = true,
|
||||||
|
Entity_Set_Spare_Seats = true,
|
||||||
|
Entity_Set_Player_Seats = true,
|
||||||
|
Entity_Set_Player_Desk = true,
|
||||||
|
Entity_Set_M_Golf_Intro = true,
|
||||||
|
Entity_Set_M_Setup = true,
|
||||||
|
Entity_Set_M_Nightclub = true,
|
||||||
|
Entity_Set_M_Yacht = true,
|
||||||
|
Entity_Set_M_Promoter = true,
|
||||||
|
Entity_Set_M_Limo_Photo = true,
|
||||||
|
Entity_Set_M_Limo_Wallet = true,
|
||||||
|
Entity_Set_M_The_Way = true,
|
||||||
|
Entity_Set_M_Billionaire = true,
|
||||||
|
Entity_Set_M_Families = true,
|
||||||
|
Entity_Set_M_Ballas = true,
|
||||||
|
Entity_Set_M_Hood = true,
|
||||||
|
Entity_Set_M_Fire_Booth = true,
|
||||||
|
Entity_Set_M_50 = true,
|
||||||
|
Entity_Set_M_Taxi = true,
|
||||||
|
Entity_Set_M_Gone_Golfing = true,
|
||||||
|
Entity_Set_M_Motel = true,
|
||||||
|
Entity_Set_M_Construction = true,
|
||||||
|
Entity_Set_M_Hit_List = true,
|
||||||
|
Entity_Set_M_Tuner = true,
|
||||||
|
Entity_Set_M_Attack = true,
|
||||||
|
Entity_Set_M_Vehicles = true,
|
||||||
|
Entity_Set_M_Trip_01 = true,
|
||||||
|
Entity_Set_M_Trip_02 = true,
|
||||||
|
Entity_Set_M_Trip_03 = true,
|
||||||
|
Entity_set_disc_01 = false,
|
||||||
|
Entity_set_disc_02 = true,
|
||||||
|
Entity_set_disc_03 = false,
|
||||||
|
Entity_set_disc_04 = false,
|
||||||
|
Entity_set_disc_05 = false,
|
||||||
|
Entity_set_disc_06 = false,
|
||||||
|
Entity_Set_Art_1 = false,
|
||||||
|
Entity_Set_Art_2 = false,
|
||||||
|
Entity_Set_Art_3 = true,
|
||||||
|
|
||||||
|
Set = function(name, state)
|
||||||
|
for entity, _ in pairs(MpSecurityOffice3.Entities) do
|
||||||
|
if entity == name then
|
||||||
|
MpSecurityOffice3.Entities[entity] = state
|
||||||
|
MpSecurityOffice3.Entities.Clear()
|
||||||
|
MpSecurityOffice3.Entities.Load()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Load = function()
|
||||||
|
for entity, state in pairs(MpSecurityOffice3.Entities) do
|
||||||
|
if type(entity) == 'string' and state then
|
||||||
|
ActivateInteriorEntitySet(MpSecurityOffice3.InteriorId, entity)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
for entity, _ in pairs(MpSecurityOffice3.Entities) do
|
||||||
|
if type(entity) == 'string' then
|
||||||
|
DeactivateInteriorEntitySet(MpSecurityOffice3.InteriorId, entity)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
MpSecurityOffice3.Ipl.Load()
|
||||||
|
MpSecurityOffice3.Entities.Load()
|
||||||
|
|
||||||
|
RefreshInterior(MpSecurityOffice3.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
106
resources/[core]/bob74_ipl/dlc_security/office4.lua
Normal file
106
resources/[core]/bob74_ipl/dlc_security/office4.lua
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
exports('GetMpSecurityOffice4Object', function()
|
||||||
|
return MpSecurityOffice4
|
||||||
|
end)
|
||||||
|
|
||||||
|
MpSecurityOffice4 = {
|
||||||
|
InteriorId = 287745,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Interior = {
|
||||||
|
ipl = {
|
||||||
|
'sf_fixeroffice_kt1_08'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(MpSecurityOffice4.Ipl.Interior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(MpSecurityOffice4.Ipl.Interior.ipl, false)
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
Entities = {
|
||||||
|
Entity_Set_Armoury = true,
|
||||||
|
Entity_Set_Standard_Office = false,
|
||||||
|
Entity_Set_Blocker = false,
|
||||||
|
Entity_Set_Wpaper_1 = false,
|
||||||
|
Entity_Set_Wpaper_3 = true,
|
||||||
|
Entity_Set_Wpaper_2 = false,
|
||||||
|
Entity_Set_Wpaper_4 = false,
|
||||||
|
Entity_Set_Wpaper_5 = false,
|
||||||
|
Entity_Set_Wpaper_6 = false,
|
||||||
|
Entity_Set_Wpaper_7 = false,
|
||||||
|
Entity_Set_Wpaper_8 = false,
|
||||||
|
Entity_Set_Wpaper_9 = false,
|
||||||
|
Entity_Set_Moving = true,
|
||||||
|
Entity_Set_Tint_AG = true,
|
||||||
|
Entity_Set_Spare_Seats = true,
|
||||||
|
Entity_Set_Player_Seats = true,
|
||||||
|
Entity_Set_Player_Desk = true,
|
||||||
|
Entity_Set_M_Golf_Intro = true,
|
||||||
|
Entity_Set_M_Setup = true,
|
||||||
|
Entity_Set_M_Nightclub = true,
|
||||||
|
Entity_Set_M_Yacht = true,
|
||||||
|
Entity_Set_M_Promoter = true,
|
||||||
|
Entity_Set_M_Limo_Photo = true,
|
||||||
|
Entity_Set_M_Limo_Wallet = true,
|
||||||
|
Entity_Set_M_The_Way = true,
|
||||||
|
Entity_Set_M_Billionaire = true,
|
||||||
|
Entity_Set_M_Families = true,
|
||||||
|
Entity_Set_M_Ballas = true,
|
||||||
|
Entity_Set_M_Hood = true,
|
||||||
|
Entity_Set_M_Fire_Booth = true,
|
||||||
|
Entity_Set_M_50 = true,
|
||||||
|
Entity_Set_M_Taxi = true,
|
||||||
|
Entity_Set_M_Gone_Golfing = true,
|
||||||
|
Entity_Set_M_Motel = true,
|
||||||
|
Entity_Set_M_Construction = true,
|
||||||
|
Entity_Set_M_Hit_List = true,
|
||||||
|
Entity_Set_M_Tuner = true,
|
||||||
|
Entity_Set_M_Attack = true,
|
||||||
|
Entity_Set_M_Vehicles = true,
|
||||||
|
Entity_Set_M_Trip_01 = true,
|
||||||
|
Entity_Set_M_Trip_02 = true,
|
||||||
|
Entity_Set_M_Trip_03 = true,
|
||||||
|
Entity_set_disc_01 = false,
|
||||||
|
Entity_set_disc_02 = false,
|
||||||
|
Entity_set_disc_03 = false,
|
||||||
|
Entity_set_disc_04 = false,
|
||||||
|
Entity_set_disc_05 = true,
|
||||||
|
Entity_set_disc_06 = false,
|
||||||
|
Entity_Set_Art_1 = true,
|
||||||
|
Entity_Set_Art_2 = false,
|
||||||
|
Entity_Set_Art_3 = false,
|
||||||
|
|
||||||
|
Set = function(name, state)
|
||||||
|
for entity, _ in pairs(MpSecurityOffice4.Entities) do
|
||||||
|
if entity == name then
|
||||||
|
MpSecurityOffice4.Entities[entity] = state
|
||||||
|
MpSecurityOffice4.Entities.Clear()
|
||||||
|
MpSecurityOffice4.Entities.Load()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Load = function()
|
||||||
|
for entity, state in pairs(MpSecurityOffice4.Entities) do
|
||||||
|
if type(entity) == 'string' and state then
|
||||||
|
ActivateInteriorEntitySet(MpSecurityOffice4.InteriorId, entity)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
for entity, _ in pairs(MpSecurityOffice4.Entities) do
|
||||||
|
if type(entity) == 'string' then
|
||||||
|
DeactivateInteriorEntitySet(MpSecurityOffice4.InteriorId, entity)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
MpSecurityOffice4.Ipl.Load()
|
||||||
|
MpSecurityOffice4.Entities.Load()
|
||||||
|
|
||||||
|
RefreshInterior(MpSecurityOffice4.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
60
resources/[core]/bob74_ipl/dlc_security/studio.lua
Normal file
60
resources/[core]/bob74_ipl/dlc_security/studio.lua
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
exports('GetMpSecurityStudioObject', function()
|
||||||
|
return MpSecurityStudio
|
||||||
|
end)
|
||||||
|
|
||||||
|
MpSecurityStudio = {
|
||||||
|
InteriorId = 286977,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Interior = {
|
||||||
|
ipl = {
|
||||||
|
'sf_int_placement_sec_interior_1_dlc_studio_sec_milo_ '
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(MpSecurityStudio.Ipl.Interior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(MpSecurityStudio.Ipl.Interior.ipl, false)
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
Entities = {
|
||||||
|
Entity_Set_FIX_STU_EXT_P3A1 = false,
|
||||||
|
Entity_Set_FIX_TRIP1_INT_P2 = false,
|
||||||
|
Entity_Set_FIX_STU_EXT_P1 = false,
|
||||||
|
Entity_Set_Fire = true,
|
||||||
|
entity_set_default = true,
|
||||||
|
|
||||||
|
Set = function(name, state)
|
||||||
|
for entity, _ in pairs(MpSecurityStudio.Entities) do
|
||||||
|
if entity == name then
|
||||||
|
MpSecurityStudio.Entities[entity] = state
|
||||||
|
MpSecurityStudio.Entities.Clear()
|
||||||
|
MpSecurityStudio.Entities.Load()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Load = function()
|
||||||
|
for entity, state in pairs(MpSecurityStudio.Entities) do
|
||||||
|
if type(entity) == 'string' and state then
|
||||||
|
ActivateInteriorEntitySet(MpSecurityStudio.InteriorId, entity)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
for entity, _ in pairs(MpSecurityStudio.Entities) do
|
||||||
|
if type(entity) == 'string' then
|
||||||
|
DeactivateInteriorEntitySet(MpSecurityStudio.InteriorId, entity)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
MpSecurityStudio.Ipl.Load()
|
||||||
|
MpSecurityStudio.Entities.Load()
|
||||||
|
|
||||||
|
RefreshInterior(MpSecurityStudio.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
333
resources/[core]/bob74_ipl/dlc_smuggler/hangar.lua
Normal file
333
resources/[core]/bob74_ipl/dlc_smuggler/hangar.lua
Normal file
@ -0,0 +1,333 @@
|
|||||||
|
-- SmugglerHangar: -1267.0 -3013.135 -49.5
|
||||||
|
exports('GetSmugglerHangarObject', function()
|
||||||
|
return SmugglerHangar
|
||||||
|
end)
|
||||||
|
|
||||||
|
SmugglerHangar = {
|
||||||
|
interiorId = 260353,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Interior = {
|
||||||
|
ipl = "sm_smugdlc_interior_placement_interior_0_smugdlc_int_01_milo_",
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(SmugglerHangar.Ipl.Interior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(SmugglerHangar.Ipl.Interior.ipl, false)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Colors = {
|
||||||
|
colorSet1 = 1, -- sable, red, gray
|
||||||
|
colorSet2 = 2, -- white, blue, gray
|
||||||
|
colorSet3 = 3, -- gray, orange, blue
|
||||||
|
colorSet4 = 4, -- gray, blue, orange
|
||||||
|
colorSet5 = 5, -- gray, light gray, red
|
||||||
|
colorSet6 = 6, -- yellow, gray, light gray
|
||||||
|
colorSet7 = 7, -- light Black and white
|
||||||
|
colorSet8 = 8, -- dark Black and white
|
||||||
|
colorSet9 = 9 -- sable and gray
|
||||||
|
},
|
||||||
|
Walls = {
|
||||||
|
default = "set_tint_shell",
|
||||||
|
|
||||||
|
SetColor = function(color, refresh)
|
||||||
|
SetIplPropState(SmugglerHangar.interiorId, SmugglerHangar.Walls.default, true, refresh)
|
||||||
|
SetInteriorEntitySetColor(SmugglerHangar.interiorId, SmugglerHangar.Walls.default, color)
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
Floor = {
|
||||||
|
Style = {
|
||||||
|
raw = "set_floor_1",
|
||||||
|
plain = "set_floor_2",
|
||||||
|
|
||||||
|
Set = function(floor, refresh)
|
||||||
|
SmugglerHangar.Floor.Style.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(SmugglerHangar.interiorId, floor, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(SmugglerHangar.interiorId, {
|
||||||
|
SmugglerHangar.Floor.Style.raw,
|
||||||
|
SmugglerHangar.Floor.Style.plain
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Decals = {
|
||||||
|
decal1 = "set_floor_decal_1",
|
||||||
|
decal2 = "set_floor_decal_2",
|
||||||
|
decal4 = "set_floor_decal_3",
|
||||||
|
decal3 = "set_floor_decal_4",
|
||||||
|
decal5 = "set_floor_decal_5",
|
||||||
|
decal6 = "set_floor_decal_6",
|
||||||
|
decal7 = "set_floor_decal_7",
|
||||||
|
decal8 = "set_floor_decal_8",
|
||||||
|
decal9 = "set_floor_decal_9",
|
||||||
|
|
||||||
|
Set = function(decal, color, refresh)
|
||||||
|
if color == nil then
|
||||||
|
color = 1
|
||||||
|
end
|
||||||
|
|
||||||
|
SmugglerHangar.Floor.Decals.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(SmugglerHangar.interiorId, decal, true, refresh)
|
||||||
|
SetInteriorEntitySetColor(SmugglerHangar.interiorId, decal, color)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(SmugglerHangar.interiorId, {
|
||||||
|
SmugglerHangar.Floor.Decals.decal1,
|
||||||
|
SmugglerHangar.Floor.Decals.decal2,
|
||||||
|
SmugglerHangar.Floor.Decals.decal3,
|
||||||
|
SmugglerHangar.Floor.Decals.decal4,
|
||||||
|
SmugglerHangar.Floor.Decals.decal5,
|
||||||
|
SmugglerHangar.Floor.Decals.decal6,
|
||||||
|
SmugglerHangar.Floor.Decals.decal7,
|
||||||
|
SmugglerHangar.Floor.Decals.decal8,
|
||||||
|
SmugglerHangar.Floor.Decals.decal9
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Cranes = {
|
||||||
|
on = "set_crane_tint",
|
||||||
|
off = "",
|
||||||
|
|
||||||
|
Set = function(crane, color, refresh)
|
||||||
|
SmugglerHangar.Cranes.Clear()
|
||||||
|
|
||||||
|
if crane ~= "" then
|
||||||
|
SetIplPropState(SmugglerHangar.interiorId, crane, true, refresh)
|
||||||
|
SetInteriorEntitySetColor(SmugglerHangar.interiorId, crane, color)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(SmugglerHangar.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(SmugglerHangar.interiorId, SmugglerHangar.Cranes.default, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
ModArea = {
|
||||||
|
on = "set_modarea",
|
||||||
|
off = "",
|
||||||
|
|
||||||
|
Set = function(mod, color, refresh)
|
||||||
|
if color == nil then
|
||||||
|
color = 1
|
||||||
|
end
|
||||||
|
|
||||||
|
SmugglerHangar.ModArea.Clear(false)
|
||||||
|
|
||||||
|
if mod ~= "" then
|
||||||
|
SetIplPropState(SmugglerHangar.interiorId, mod, true, refresh)
|
||||||
|
SetInteriorEntitySetColor(SmugglerHangar.interiorId, mod, color)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(SmugglerHangar.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(SmugglerHangar.interiorId, SmugglerHangar.ModArea.mod, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Office = {
|
||||||
|
basic = "set_office_basic",
|
||||||
|
modern = "set_office_modern",
|
||||||
|
traditional = "set_office_traditional",
|
||||||
|
|
||||||
|
Set = function(office, refresh)
|
||||||
|
SmugglerHangar.Office.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(SmugglerHangar.interiorId, office, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(SmugglerHangar.interiorId, {
|
||||||
|
SmugglerHangar.Office.basic,
|
||||||
|
SmugglerHangar.Office.modern,
|
||||||
|
SmugglerHangar.Office.traditional
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Bedroom = {
|
||||||
|
Style = {
|
||||||
|
none = "",
|
||||||
|
modern = {
|
||||||
|
"set_bedroom_modern",
|
||||||
|
"set_bedroom_tint"
|
||||||
|
},
|
||||||
|
traditional = {
|
||||||
|
"set_bedroom_traditional",
|
||||||
|
"set_bedroom_tint"
|
||||||
|
},
|
||||||
|
|
||||||
|
Set = function(bed, color, refresh)
|
||||||
|
if color == nil then
|
||||||
|
color = 1
|
||||||
|
end
|
||||||
|
|
||||||
|
SmugglerHangar.Bedroom.Style.Clear(false)
|
||||||
|
|
||||||
|
if bed ~= "" then
|
||||||
|
SetIplPropState(SmugglerHangar.interiorId, bed, true, refresh)
|
||||||
|
SetInteriorEntitySetColor(SmugglerHangar.interiorId, "set_bedroom_tint", color)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(SmugglerHangar.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(SmugglerHangar.interiorId, {
|
||||||
|
SmugglerHangar.Bedroom.Style.modern,
|
||||||
|
SmugglerHangar.Bedroom.Style.traditional
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Blinds = {
|
||||||
|
none = "",
|
||||||
|
opened = "set_bedroom_blinds_open",
|
||||||
|
closed = "set_bedroom_blinds_closed",
|
||||||
|
|
||||||
|
Set = function(blinds, refresh)
|
||||||
|
SmugglerHangar.Bedroom.Blinds.Clear(false)
|
||||||
|
|
||||||
|
if blinds ~= "" then
|
||||||
|
SetIplPropState(SmugglerHangar.interiorId, blinds, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(SmugglerHangar.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(SmugglerHangar.interiorId, {
|
||||||
|
SmugglerHangar.Bedroom.Blinds.opened,
|
||||||
|
SmugglerHangar.Bedroom.Blinds.closed
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Lighting = {
|
||||||
|
FakeLights = {
|
||||||
|
none = "",
|
||||||
|
yellow = 2,
|
||||||
|
blue = 1,
|
||||||
|
white = 0,
|
||||||
|
|
||||||
|
Set = function(light, refresh)
|
||||||
|
SmugglerHangar.Lighting.FakeLights.Clear(false)
|
||||||
|
|
||||||
|
if light ~= "" then
|
||||||
|
SetIplPropState(SmugglerHangar.interiorId, "set_lighting_tint_props", true, refresh)
|
||||||
|
SetInteriorEntitySetColor(SmugglerHangar.interiorId, "set_lighting_tint_props", light)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(SmugglerHangar.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(SmugglerHangar.interiorId, "set_lighting_tint_props", false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Ceiling = {
|
||||||
|
none = "",
|
||||||
|
yellow = "set_lighting_hangar_a",
|
||||||
|
blue = "set_lighting_hangar_b",
|
||||||
|
white = "set_lighting_hangar_c",
|
||||||
|
|
||||||
|
Set = function(light, refresh)
|
||||||
|
SmugglerHangar.Lighting.Ceiling.Clear(false)
|
||||||
|
|
||||||
|
if light ~= "" then
|
||||||
|
SetIplPropState(SmugglerHangar.interiorId, light, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(SmugglerHangar.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(SmugglerHangar.interiorId, {
|
||||||
|
SmugglerHangar.Lighting.Ceiling.yellow,
|
||||||
|
SmugglerHangar.Lighting.Ceiling.blue,
|
||||||
|
SmugglerHangar.Lighting.Ceiling.white
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Walls = {
|
||||||
|
none = "",
|
||||||
|
neutral = "set_lighting_wall_neutral",
|
||||||
|
blue = "set_lighting_wall_tint01",
|
||||||
|
orange = "set_lighting_wall_tint02",
|
||||||
|
lightYellow = "set_lighting_wall_tint03",
|
||||||
|
lightYellow2 = "set_lighting_wall_tint04",
|
||||||
|
dimmed = "set_lighting_wall_tint05",
|
||||||
|
strongYellow = "set_lighting_wall_tint06",
|
||||||
|
white = "set_lighting_wall_tint07",
|
||||||
|
lightGreen = "set_lighting_wall_tint08",
|
||||||
|
yellow = "set_lighting_wall_tint09",
|
||||||
|
|
||||||
|
Set = function(light, refresh)
|
||||||
|
SmugglerHangar.Lighting.Walls.Clear(false)
|
||||||
|
|
||||||
|
if light ~= "" then
|
||||||
|
SetIplPropState(SmugglerHangar.interiorId, light, true, refresh)
|
||||||
|
else
|
||||||
|
if refresh then
|
||||||
|
RefreshInterior(SmugglerHangar.interiorId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(SmugglerHangar.interiorId, {
|
||||||
|
SmugglerHangar.Lighting.Walls.neutral,
|
||||||
|
SmugglerHangar.Lighting.Walls.blue,
|
||||||
|
SmugglerHangar.Lighting.Walls.orange,
|
||||||
|
SmugglerHangar.Lighting.Walls.lightYellow,
|
||||||
|
SmugglerHangar.Lighting.Walls.lightYellow2,
|
||||||
|
SmugglerHangar.Lighting.Walls.dimmed,
|
||||||
|
SmugglerHangar.Lighting.Walls.strongYellow,
|
||||||
|
SmugglerHangar.Lighting.Walls.white,
|
||||||
|
SmugglerHangar.Lighting.Walls.lightGreen,
|
||||||
|
SmugglerHangar.Lighting.Walls.yellow
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Details = {
|
||||||
|
bedroomClutter = "set_bedroom_clutter",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(SmugglerHangar.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
SmugglerHangar.Ipl.Interior.Load()
|
||||||
|
|
||||||
|
SmugglerHangar.Walls.SetColor(SmugglerHangar.Colors.colorSet1)
|
||||||
|
SmugglerHangar.Cranes.Set(SmugglerHangar.Cranes.on, SmugglerHangar.Colors.colorSet1)
|
||||||
|
SmugglerHangar.Floor.Style.Set(SmugglerHangar.Floor.Style.plain)
|
||||||
|
SmugglerHangar.Floor.Decals.Set(SmugglerHangar.Floor.Decals.decal1, SmugglerHangar.Colors.colorSet1)
|
||||||
|
|
||||||
|
SmugglerHangar.Lighting.Ceiling.Set(SmugglerHangar.Lighting.Ceiling.yellow)
|
||||||
|
SmugglerHangar.Lighting.Walls.Set(SmugglerHangar.Lighting.Walls.neutral)
|
||||||
|
SmugglerHangar.Lighting.FakeLights.Set(SmugglerHangar.Lighting.FakeLights.yellow)
|
||||||
|
|
||||||
|
SmugglerHangar.ModArea.Set(SmugglerHangar.ModArea.on, SmugglerHangar.Colors.colorSet1)
|
||||||
|
|
||||||
|
SmugglerHangar.Office.Set(SmugglerHangar.Office.basic)
|
||||||
|
|
||||||
|
SmugglerHangar.Bedroom.Style.Set(SmugglerHangar.Bedroom.Style.modern, SmugglerHangar.Colors.colorSet1)
|
||||||
|
SmugglerHangar.Bedroom.Blinds.Set(SmugglerHangar.Bedroom.Blinds.opened)
|
||||||
|
|
||||||
|
SmugglerHangar.Details.Enable(SmugglerHangar.Details.bedroomClutter, false)
|
||||||
|
|
||||||
|
RefreshInterior(SmugglerHangar.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
4
resources/[core]/bob74_ipl/dlc_summer/base.lua
Normal file
4
resources/[core]/bob74_ipl/dlc_summer/base.lua
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
CreateThread(function()
|
||||||
|
RequestIpl("m24_1_legacyfixes")
|
||||||
|
RequestIpl("m24_1_pizzasigns")
|
||||||
|
end)
|
||||||
25
resources/[core]/bob74_ipl/dlc_summer/carrier.lua
Normal file
25
resources/[core]/bob74_ipl/dlc_summer/carrier.lua
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
-- Aircraft carrier: -3208.03, 3954.54, 14.0
|
||||||
|
exports('GetSummerCarrierObject', function()
|
||||||
|
return SummerCarrier
|
||||||
|
end)
|
||||||
|
|
||||||
|
SummerCarrier = {
|
||||||
|
ipl = {
|
||||||
|
"m24_1_carrier",
|
||||||
|
"m24_1_carrier_int1",
|
||||||
|
"m24_1_carrier_int2",
|
||||||
|
"m24_1_carrier_int3",
|
||||||
|
"m24_1_carrier_int4",
|
||||||
|
"m24_1_carrier_int5",
|
||||||
|
"m24_1_carrier_int6",
|
||||||
|
"m24_1_carrier_ladders"
|
||||||
|
},
|
||||||
|
|
||||||
|
Enable = function(state)
|
||||||
|
EnableIpl(SummerCarrier.ipl, state)
|
||||||
|
end,
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
SummerCarrier.Enable(true)
|
||||||
|
end
|
||||||
|
}
|
||||||
114
resources/[core]/bob74_ipl/dlc_summer/office.lua
Normal file
114
resources/[core]/bob74_ipl/dlc_summer/office.lua
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
-- Bail office: 565.886, -2688.761, -50.0
|
||||||
|
exports('GetSummerOfficeObject', function()
|
||||||
|
return SummerOffice
|
||||||
|
end)
|
||||||
|
|
||||||
|
SummerOffice = {
|
||||||
|
interiorId = 295425,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Exterior = {
|
||||||
|
ipl = {
|
||||||
|
"m24_1_bailoffice_davis",
|
||||||
|
"m24_1_bailoffice_delperro",
|
||||||
|
"m24_1_bailoffice_missionrow",
|
||||||
|
"m24_1_bailoffice_paletobay",
|
||||||
|
"m24_1_bailoffice_vinewood"
|
||||||
|
},
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(SummerOffice.Ipl.Exterior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(SummerOffice.Ipl.Exterior.ipl, false)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
Style = {
|
||||||
|
vintage = "set_style_01",
|
||||||
|
patterns = "set_style_02",
|
||||||
|
teak = "set_style_03",
|
||||||
|
|
||||||
|
Set = function(style, refresh)
|
||||||
|
SummerOffice.Style.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(SummerOffice.interiorId, style, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(SummerOffice.interiorId, {
|
||||||
|
SummerOffice.Style.vintage,
|
||||||
|
SummerOffice.Style.patterns,
|
||||||
|
SummerOffice.Style.teak
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
Desk = {
|
||||||
|
files = "set_no_staff",
|
||||||
|
computers = "set_staff_upgrade",
|
||||||
|
|
||||||
|
Set = function(style, refresh)
|
||||||
|
SummerOffice.Desk.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(SummerOffice.interiorId, style, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(SummerOffice.interiorId, {
|
||||||
|
SummerOffice.Desk.files,
|
||||||
|
SummerOffice.Desk.computers
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
Gunsafe = {
|
||||||
|
cabinet = "set_gunsafe_off",
|
||||||
|
gunsafe = "set_gunsafe_on",
|
||||||
|
|
||||||
|
Set = function(style, refresh)
|
||||||
|
SummerOffice.Gunsafe.Clear(false)
|
||||||
|
|
||||||
|
SetIplPropState(SummerOffice.interiorId, style, true, refresh)
|
||||||
|
end,
|
||||||
|
Clear = function(refresh)
|
||||||
|
SetIplPropState(SummerOffice.interiorId, {
|
||||||
|
SummerOffice.Gunsafe.cabinet,
|
||||||
|
SummerOffice.Gunsafe.gunsafe
|
||||||
|
}, false, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
Trophy = {
|
||||||
|
plaque = "set_trophy_10x",
|
||||||
|
badge = "set_trophy_24x",
|
||||||
|
handcuffs = "set_trophy_100x",
|
||||||
|
|
||||||
|
Enable = function(trophy, state, refresh)
|
||||||
|
SetIplPropState(SummerOffice.interiorId, trophy, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
Plant = {
|
||||||
|
plant = "set_new_plant",
|
||||||
|
|
||||||
|
Enable = function(state, refresh)
|
||||||
|
SetIplPropState(SummerOffice.interiorId, SummerOffice.Plant.plant, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
SummerOffice.Ipl.Exterior.Load()
|
||||||
|
|
||||||
|
SummerOffice.Style.Set(SummerOffice.Style.teak, false)
|
||||||
|
SummerOffice.Desk.Set(SummerOffice.Desk.files, false)
|
||||||
|
SummerOffice.Gunsafe.Set(SummerOffice.Gunsafe.cabinet, false)
|
||||||
|
|
||||||
|
SummerOffice.Trophy.Enable(SummerOffice.Trophy.plaque, true, false)
|
||||||
|
SummerOffice.Trophy.Enable(SummerOffice.Trophy.badge, true, false)
|
||||||
|
SummerOffice.Trophy.Enable(SummerOffice.Trophy.handcuffs, true, false)
|
||||||
|
|
||||||
|
SummerOffice.Plant.Enable(true, false)
|
||||||
|
|
||||||
|
RefreshInterior(SummerOffice.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
94
resources/[core]/bob74_ipl/dlc_tuner/garage.lua
Normal file
94
resources/[core]/bob74_ipl/dlc_tuner/garage.lua
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
exports('GetTunerGarageObject', function()
|
||||||
|
return TunerGarage
|
||||||
|
end)
|
||||||
|
|
||||||
|
TunerGarage = {
|
||||||
|
InteriorId = 285953,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Exterior = {
|
||||||
|
ipl = {
|
||||||
|
'tr_tuner_shop_burton',
|
||||||
|
'tr_tuner_shop_mesa',
|
||||||
|
'tr_tuner_shop_mission',
|
||||||
|
'tr_tuner_shop_rancho',
|
||||||
|
'tr_tuner_shop_strawberry'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(TunerGarage.Ipl.Exterior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(TunerGarage.Ipl.Exterior.ipl, false)
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
Entities = {
|
||||||
|
entity_set_bedroom = true,
|
||||||
|
entity_set_bedroom_empty = false,
|
||||||
|
entity_set_bombs = true,
|
||||||
|
entity_set_box_clutter = false,
|
||||||
|
entity_set_cabinets = false,
|
||||||
|
entity_set_car_lift_cutscene = true,
|
||||||
|
entity_set_car_lift_default = true,
|
||||||
|
entity_set_car_lift_purchase = true,
|
||||||
|
entity_set_chalkboard = false,
|
||||||
|
entity_set_container = false,
|
||||||
|
entity_set_cut_seats = false,
|
||||||
|
entity_set_def_table = false,
|
||||||
|
entity_set_drive = true,
|
||||||
|
entity_set_ecu = true,
|
||||||
|
entity_set_IAA = true,
|
||||||
|
entity_set_jammers = true,
|
||||||
|
entity_set_laptop = true,
|
||||||
|
entity_set_lightbox = true,
|
||||||
|
entity_set_methLab = false,
|
||||||
|
entity_set_plate = true,
|
||||||
|
entity_set_scope = true,
|
||||||
|
entity_set_style_1 = false,
|
||||||
|
entity_set_style_2 = false,
|
||||||
|
entity_set_style_3 = false,
|
||||||
|
entity_set_style_4 = false,
|
||||||
|
entity_set_style_5 = false,
|
||||||
|
entity_set_style_6 = false,
|
||||||
|
entity_set_style_7 = false,
|
||||||
|
entity_set_style_8 = false,
|
||||||
|
entity_set_style_9 = true,
|
||||||
|
entity_set_table = false,
|
||||||
|
entity_set_thermal = true,
|
||||||
|
entity_set_tints = true,
|
||||||
|
entity_set_train = true,
|
||||||
|
entity_set_virus = true,
|
||||||
|
|
||||||
|
Set = function(name, state)
|
||||||
|
for entity, _ in pairs(TunerGarage.Entities) do
|
||||||
|
if entity == name then
|
||||||
|
TunerGarage.Entities[entity] = state
|
||||||
|
TunerGarage.Entities.Clear()
|
||||||
|
TunerGarage.Entities.Load()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Load = function()
|
||||||
|
for entity, state in pairs(TunerGarage.Entities) do
|
||||||
|
if type(entity) == 'string' and state then
|
||||||
|
ActivateInteriorEntitySet(TunerGarage.InteriorId, entity)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
for entity, _ in pairs(TunerGarage.Entities) do
|
||||||
|
if type(entity) == 'string' then
|
||||||
|
DeactivateInteriorEntitySet(TunerGarage.InteriorId, entity)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
TunerGarage.Ipl.Load()
|
||||||
|
TunerGarage.Entities.Load()
|
||||||
|
|
||||||
|
RefreshInterior(TunerGarage.InteriorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
65
resources/[core]/bob74_ipl/dlc_tuner/meetup.lua
Normal file
65
resources/[core]/bob74_ipl/dlc_tuner/meetup.lua
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
-- Los Santos Car Meet: -2000.0, 1113.211, -25.36243
|
||||||
|
exports('GetTunerMeetupObject', function()
|
||||||
|
return TunerMeetup
|
||||||
|
end)
|
||||||
|
|
||||||
|
TunerMeetup = {
|
||||||
|
InteriorId = 285697,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Exterior = {
|
||||||
|
ipl = {
|
||||||
|
'tr_tuner_meetup',
|
||||||
|
'tr_tuner_race_line'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(TunerMeetup.Ipl.Exterior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(TunerMeetup.Ipl.Exterior.ipl, false)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Entities = {
|
||||||
|
entity_set_meet_crew = true,
|
||||||
|
entity_set_meet_lights = true,
|
||||||
|
entity_set_meet_lights_cheap = false,
|
||||||
|
entity_set_player = true,
|
||||||
|
entity_set_test_crew = false,
|
||||||
|
entity_set_test_lights = true,
|
||||||
|
entity_set_test_lights_cheap = false,
|
||||||
|
entity_set_time_trial = true,
|
||||||
|
|
||||||
|
Set = function(name, state)
|
||||||
|
for entity, _ in pairs(TunerMeetup.Entities) do
|
||||||
|
if entity == name then
|
||||||
|
TunerMeetup.Entities[entity] = state
|
||||||
|
TunerMeetup.Entities.Clear()
|
||||||
|
TunerMeetup.Entities.Load()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Load = function()
|
||||||
|
for entity, state in pairs(TunerMeetup.Entities) do
|
||||||
|
if type(entity) == 'string' and state then
|
||||||
|
ActivateInteriorEntitySet(TunerMeetup.InteriorId, entity)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
for entity, _ in pairs(TunerMeetup.Entities) do
|
||||||
|
if type(entity) == 'string' then
|
||||||
|
DeactivateInteriorEntitySet(TunerMeetup.InteriorId, entity)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
TunerMeetup.Ipl.Load()
|
||||||
|
TunerMeetup.Entities.Load()
|
||||||
|
|
||||||
|
RefreshInterior(TunerMeetup.InteriorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
42
resources/[core]/bob74_ipl/dlc_tuner/methlab.lua
Normal file
42
resources/[core]/bob74_ipl/dlc_tuner/methlab.lua
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
exports('GetTunerMethLabObject', function()
|
||||||
|
return TunerMethLab
|
||||||
|
end)
|
||||||
|
|
||||||
|
TunerMethLab = {
|
||||||
|
InteriorId = 284673,
|
||||||
|
|
||||||
|
Entities = {
|
||||||
|
tintable_walls = true,
|
||||||
|
|
||||||
|
Set = function(name, state)
|
||||||
|
for entity, _ in pairs(TunerMethLab.Entities) do
|
||||||
|
if entity == name then
|
||||||
|
TunerMethLab.Entities[entity] = state
|
||||||
|
TunerMethLab.Entities.Clear()
|
||||||
|
TunerMethLab.Entities.Load()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Load = function()
|
||||||
|
for entity, state in pairs(TunerMethLab.Entities) do
|
||||||
|
if type(entity) == 'string' and state then
|
||||||
|
ActivateInteriorEntitySet(TunerMethLab.InteriorId, entity)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
for entity, _ in pairs(TunerMethLab.Entities) do
|
||||||
|
if type(entity) == 'string' then
|
||||||
|
DeactivateInteriorEntitySet(TunerMethLab.InteriorId, entity)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
TunerMethLab.Entities.Load()
|
||||||
|
|
||||||
|
SetInteriorEntitySetColor(TunerMethLab.InteriorId, TunerMethLab.Entities.tintable_walls, 3)
|
||||||
|
RefreshInterior(TunerMethLab.InteriorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
157
resources/[core]/bob74_ipl/fxmanifest.lua
Normal file
157
resources/[core]/bob74_ipl/fxmanifest.lua
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
fx_version 'cerulean'
|
||||||
|
game 'gta5'
|
||||||
|
|
||||||
|
author 'Bob_74'
|
||||||
|
description 'Load and customize your map'
|
||||||
|
version '2.3.2'
|
||||||
|
|
||||||
|
lua54 "yes"
|
||||||
|
|
||||||
|
client_scripts {
|
||||||
|
"lib/common.lua"
|
||||||
|
, "lib/observers/interiorIdObserver.lua"
|
||||||
|
, "lib/observers/officeSafeDoorHandler.lua"
|
||||||
|
, "lib/observers/officeCullHandler.lua"
|
||||||
|
, "client.lua"
|
||||||
|
|
||||||
|
-- GTA V
|
||||||
|
, "gtav/base.lua" -- Base IPLs to fix holes
|
||||||
|
, "gtav/ammunations.lua"
|
||||||
|
, "gtav/bahama.lua"
|
||||||
|
, "gtav/cargoship.lua"
|
||||||
|
, "gtav/floyd.lua"
|
||||||
|
, "gtav/franklin.lua"
|
||||||
|
, "gtav/franklin_aunt.lua"
|
||||||
|
, "gtav/graffitis.lua"
|
||||||
|
, "gtav/pillbox_hospital.lua"
|
||||||
|
, "gtav/lester_factory.lua"
|
||||||
|
, "gtav/michael.lua"
|
||||||
|
, "gtav/north_yankton.lua"
|
||||||
|
, "gtav/red_carpet.lua"
|
||||||
|
, "gtav/simeon.lua"
|
||||||
|
, "gtav/stripclub.lua"
|
||||||
|
, "gtav/trevors_trailer.lua"
|
||||||
|
, "gtav/ufo.lua"
|
||||||
|
, "gtav/zancudo_gates.lua"
|
||||||
|
|
||||||
|
-- GTA Online
|
||||||
|
, "gta_online/apartment_hi_1.lua"
|
||||||
|
, "gta_online/apartment_hi_2.lua"
|
||||||
|
, "gta_online/house_hi_1.lua"
|
||||||
|
, "gta_online/house_hi_2.lua"
|
||||||
|
, "gta_online/house_hi_3.lua"
|
||||||
|
, "gta_online/house_hi_4.lua"
|
||||||
|
, "gta_online/house_hi_5.lua"
|
||||||
|
, "gta_online/house_hi_6.lua"
|
||||||
|
, "gta_online/house_hi_7.lua"
|
||||||
|
, "gta_online/house_hi_8.lua"
|
||||||
|
, "gta_online/house_mid_1.lua"
|
||||||
|
, "gta_online/house_low_1.lua"
|
||||||
|
|
||||||
|
-- DLC High Life
|
||||||
|
, "dlc_high_life/apartment1.lua"
|
||||||
|
, "dlc_high_life/apartment2.lua"
|
||||||
|
, "dlc_high_life/apartment3.lua"
|
||||||
|
, "dlc_high_life/apartment4.lua"
|
||||||
|
, "dlc_high_life/apartment5.lua"
|
||||||
|
, "dlc_high_life/apartment6.lua"
|
||||||
|
|
||||||
|
-- DLC Heists
|
||||||
|
, "dlc_heists/carrier.lua"
|
||||||
|
, "dlc_heists/yacht.lua"
|
||||||
|
|
||||||
|
-- DLC Executives & Other Criminals
|
||||||
|
, "dlc_executive/apartment1.lua"
|
||||||
|
, "dlc_executive/apartment2.lua"
|
||||||
|
, "dlc_executive/apartment3.lua"
|
||||||
|
|
||||||
|
-- DLC Finance & Felony
|
||||||
|
, "dlc_finance/office1.lua"
|
||||||
|
, "dlc_finance/office2.lua"
|
||||||
|
, "dlc_finance/office3.lua"
|
||||||
|
, "dlc_finance/office4.lua"
|
||||||
|
, "dlc_finance/organization.lua"
|
||||||
|
|
||||||
|
-- DLC Bikers
|
||||||
|
, "dlc_bikers/cocaine.lua"
|
||||||
|
, "dlc_bikers/counterfeit_cash.lua"
|
||||||
|
, "dlc_bikers/document_forgery.lua"
|
||||||
|
, "dlc_bikers/meth.lua"
|
||||||
|
, "dlc_bikers/weed.lua"
|
||||||
|
, "dlc_bikers/clubhouse1.lua"
|
||||||
|
, "dlc_bikers/clubhouse2.lua"
|
||||||
|
, "dlc_bikers/gang.lua"
|
||||||
|
|
||||||
|
-- DLC Import/Export
|
||||||
|
, "dlc_import/garage1.lua"
|
||||||
|
, "dlc_import/garage2.lua"
|
||||||
|
, "dlc_import/garage3.lua"
|
||||||
|
, "dlc_import/garage4.lua"
|
||||||
|
, "dlc_import/vehicle_warehouse.lua"
|
||||||
|
|
||||||
|
-- DLC Gunrunning
|
||||||
|
, "dlc_gunrunning/bunkers.lua"
|
||||||
|
, "dlc_gunrunning/yacht.lua"
|
||||||
|
|
||||||
|
-- DLC Smuggler's Run
|
||||||
|
, "dlc_smuggler/hangar.lua"
|
||||||
|
|
||||||
|
-- DLC Doomsday Heist
|
||||||
|
, "dlc_doomsday/facility.lua"
|
||||||
|
|
||||||
|
-- DLC After Hours
|
||||||
|
, "dlc_afterhours/nightclubs.lua"
|
||||||
|
|
||||||
|
-- DLC Diamond Casino (Requires forced build 2060 or higher)
|
||||||
|
, "dlc_casino/casino.lua"
|
||||||
|
, "dlc_casino/penthouse.lua"
|
||||||
|
|
||||||
|
-- DLC Cayo Perico Heist (Requires forced build 2189 or higher)
|
||||||
|
, "dlc_cayoperico/base.lua"
|
||||||
|
, "dlc_cayoperico/nightclub.lua"
|
||||||
|
, "dlc_cayoperico/submarine.lua"
|
||||||
|
|
||||||
|
-- DLC Tuners (Requires forced build 2372 or higher)
|
||||||
|
, "dlc_tuner/garage.lua"
|
||||||
|
, "dlc_tuner/meetup.lua"
|
||||||
|
, "dlc_tuner/methlab.lua"
|
||||||
|
|
||||||
|
-- DLC The Contract (Requires forced build 2545 or higher)
|
||||||
|
, "dlc_security/studio.lua"
|
||||||
|
, "dlc_security/billboards.lua"
|
||||||
|
, "dlc_security/musicrooftop.lua"
|
||||||
|
, "dlc_security/garage.lua"
|
||||||
|
, "dlc_security/office1.lua"
|
||||||
|
, "dlc_security/office2.lua"
|
||||||
|
, "dlc_security/office3.lua"
|
||||||
|
, "dlc_security/office4.lua"
|
||||||
|
|
||||||
|
-- DLC The Criminal Enterprises (Requires forced build 2699 or higher)
|
||||||
|
, "gta_mpsum2/simeonfix.lua"
|
||||||
|
, "gta_mpsum2/vehicle_warehouse.lua"
|
||||||
|
, "gta_mpsum2/warehouse.lua"
|
||||||
|
|
||||||
|
-- DLC Los Santos Drug Wars (Requires forced build 2802 or higher)
|
||||||
|
, "dlc_drugwars/base.lua"
|
||||||
|
, "dlc_drugwars/freakshop.lua"
|
||||||
|
, "dlc_drugwars/garage.lua"
|
||||||
|
, "dlc_drugwars/lab.lua"
|
||||||
|
, "dlc_drugwars/traincrash.lua"
|
||||||
|
|
||||||
|
-- DLC San Andreas Mercenaries (Requires forced build 2944 or higher)
|
||||||
|
, "dlc_mercenaries/club.lua"
|
||||||
|
, "dlc_mercenaries/lab.lua"
|
||||||
|
, "dlc_mercenaries/fixes.lua"
|
||||||
|
|
||||||
|
-- DLC The Chop Shop (Requires forced build 3095 or higher)
|
||||||
|
, "dlc_chopshop/base.lua"
|
||||||
|
, "dlc_chopshop/cargoship.lua"
|
||||||
|
, "dlc_chopshop/cartel_garage.lua"
|
||||||
|
, "dlc_chopshop/lifeguard.lua"
|
||||||
|
, "dlc_chopshop/salvage.lua"
|
||||||
|
|
||||||
|
-- DLC Bottom Dollar Bounties (Requires forced build 3258 or higher)
|
||||||
|
, "dlc_summer/base.lua"
|
||||||
|
, "dlc_summer/carrier.lua"
|
||||||
|
, "dlc_summer/office.lua"
|
||||||
|
}
|
||||||
55
resources/[core]/bob74_ipl/gta_mpsum2/simeonfix.lua
Normal file
55
resources/[core]/bob74_ipl/gta_mpsum2/simeonfix.lua
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
exports('GetCriminalEnterpriseSmeonFixObject', function()
|
||||||
|
return CriminalEnterpriseSmeonFix
|
||||||
|
end)
|
||||||
|
|
||||||
|
CriminalEnterpriseSmeonFix = {
|
||||||
|
InteriorId = 7170,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Interior = {
|
||||||
|
ipl = {
|
||||||
|
'reh_simeonfix',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(CriminalEnterpriseSmeonFix.Ipl.Interior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(CriminalEnterpriseSmeonFix.Ipl.Interior.ipl, false)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Entities = {
|
||||||
|
|
||||||
|
Set = function(name, state)
|
||||||
|
for entity, _ in pairs(CriminalEnterpriseSmeonFix.Entities) do
|
||||||
|
if entity == name then
|
||||||
|
CriminalEnterpriseSmeonFix.Entities[entity] = state
|
||||||
|
CriminalEnterpriseSmeonFix.Entities.Clear()
|
||||||
|
CriminalEnterpriseSmeonFix.Entities.Load()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Load = function()
|
||||||
|
for entity, state in pairs(CriminalEnterpriseSmeonFix.Entities) do
|
||||||
|
if type(entity) == 'string' and state then
|
||||||
|
ActivateInteriorEntitySet(CriminalEnterpriseSmeonFix.InteriorId, entity)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
for entity, _ in pairs(CriminalEnterpriseSmeonFix.Entities) do
|
||||||
|
if type(entity) == 'string' then
|
||||||
|
DeactivateInteriorEntitySet(CriminalEnterpriseSmeonFix.InteriorId, entity)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
CriminalEnterpriseSmeonFix.Ipl.Load()
|
||||||
|
CriminalEnterpriseSmeonFix.Entities.Load()
|
||||||
|
|
||||||
|
RefreshInterior(CriminalEnterpriseSmeonFix.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
60
resources/[core]/bob74_ipl/gta_mpsum2/vehicle_warehouse.lua
Normal file
60
resources/[core]/bob74_ipl/gta_mpsum2/vehicle_warehouse.lua
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
exports('GetCriminalEnterpriseVehicleWarehouseObject', function()
|
||||||
|
return CriminalEnterpriseVehicleWarehouse
|
||||||
|
end)
|
||||||
|
|
||||||
|
CriminalEnterpriseVehicleWarehouse = {
|
||||||
|
InteriorId = 289537,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Interior = {
|
||||||
|
ipl = {
|
||||||
|
'reh_int_placement_sum2_interior_0_dlc_int_03_sum2_milo_',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(CriminalEnterpriseVehicleWarehouse.Ipl.Interior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(CriminalEnterpriseVehicleWarehouse.Ipl.Interior.ipl, false)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Entities = {
|
||||||
|
entity_set_office = true,
|
||||||
|
entity_set_light_option_1 = true,
|
||||||
|
entity_set_light_option_2 = true,
|
||||||
|
entity_set_light_option_3 = true,
|
||||||
|
entity_set_tint_options = true,
|
||||||
|
|
||||||
|
Set = function(name, state)
|
||||||
|
for entity, _ in pairs(CriminalEnterpriseVehicleWarehouse.Entities) do
|
||||||
|
if entity == name then
|
||||||
|
CriminalEnterpriseVehicleWarehouse.Entities[entity] = state
|
||||||
|
CriminalEnterpriseVehicleWarehouse.Entities.Clear()
|
||||||
|
CriminalEnterpriseVehicleWarehouse.Entities.Load()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Load = function()
|
||||||
|
for entity, state in pairs(CriminalEnterpriseVehicleWarehouse.Entities) do
|
||||||
|
if type(entity) == 'string' and state then
|
||||||
|
ActivateInteriorEntitySet(CriminalEnterpriseVehicleWarehouse.InteriorId, entity)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
for entity, _ in pairs(CriminalEnterpriseVehicleWarehouse.Entities) do
|
||||||
|
if type(entity) == 'string' then
|
||||||
|
DeactivateInteriorEntitySet(CriminalEnterpriseVehicleWarehouse.InteriorId, entity)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
CriminalEnterpriseVehicleWarehouse.Ipl.Load()
|
||||||
|
CriminalEnterpriseVehicleWarehouse.Entities.Load()
|
||||||
|
|
||||||
|
RefreshInterior(CriminalEnterpriseVehicleWarehouse.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
60
resources/[core]/bob74_ipl/gta_mpsum2/warehouse.lua
Normal file
60
resources/[core]/bob74_ipl/gta_mpsum2/warehouse.lua
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
exports('GetCriminalEnterpriseWarehouseObject', function()
|
||||||
|
return CriminalEnterpriseWarehouse
|
||||||
|
end)
|
||||||
|
|
||||||
|
CriminalEnterpriseWarehouse = {
|
||||||
|
InteriorId = 289793,
|
||||||
|
|
||||||
|
Ipl = {
|
||||||
|
Interior = {
|
||||||
|
ipl = {
|
||||||
|
'reh_int_placement_sum2_interior_1_dlc_int_04_sum2_milo_',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
Load = function()
|
||||||
|
EnableIpl(CriminalEnterpriseWarehouse.Ipl.Interior.ipl, true)
|
||||||
|
end,
|
||||||
|
Remove = function()
|
||||||
|
EnableIpl(CriminalEnterpriseWarehouse.Ipl.Interior.ipl, false)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Entities = {
|
||||||
|
entity_set_style_1 = false,
|
||||||
|
entity_set_style_2 = false,
|
||||||
|
entity_set_style_3 = false,
|
||||||
|
entity_set_style_4 = false,
|
||||||
|
entity_set_style_5 = true,
|
||||||
|
|
||||||
|
Set = function(name, state)
|
||||||
|
for entity, _ in pairs(CriminalEnterpriseWarehouse.Entities) do
|
||||||
|
if entity == name then
|
||||||
|
CriminalEnterpriseWarehouse.Entities[entity] = state
|
||||||
|
CriminalEnterpriseWarehouse.Entities.Clear()
|
||||||
|
CriminalEnterpriseWarehouse.Entities.Load()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Load = function()
|
||||||
|
for entity, state in pairs(CriminalEnterpriseWarehouse.Entities) do
|
||||||
|
if type(entity) == 'string' and state then
|
||||||
|
ActivateInteriorEntitySet(CriminalEnterpriseWarehouse.InteriorId, entity)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
Clear = function()
|
||||||
|
for entity, _ in pairs(CriminalEnterpriseWarehouse.Entities) do
|
||||||
|
if type(entity) == 'string' then
|
||||||
|
DeactivateInteriorEntitySet(CriminalEnterpriseWarehouse.InteriorId, entity)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
CriminalEnterpriseWarehouse.Ipl.Load()
|
||||||
|
CriminalEnterpriseWarehouse.Entities.Load()
|
||||||
|
|
||||||
|
RefreshInterior(CriminalEnterpriseWarehouse.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
56
resources/[core]/bob74_ipl/gta_online/apartment_hi_1.lua
Normal file
56
resources/[core]/bob74_ipl/gta_online/apartment_hi_1.lua
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
-- 4 Integrity Way, Apt 30
|
||||||
|
-- High end apartment 1: -35.31277 -580.4199 88.71221
|
||||||
|
exports('GetGTAOApartmentHi1Object', function()
|
||||||
|
return GTAOApartmentHi1
|
||||||
|
end)
|
||||||
|
|
||||||
|
GTAOApartmentHi1 = {
|
||||||
|
interiorId = 141313,
|
||||||
|
|
||||||
|
Strip = {
|
||||||
|
A = "Apart_Hi_Strip_A",
|
||||||
|
B = "Apart_Hi_Strip_B",
|
||||||
|
C = "Apart_Hi_Strip_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(GTAOApartmentHi1.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Booze = {
|
||||||
|
A = "Apart_Hi_Booze_A",
|
||||||
|
B = "Apart_Hi_Booze_B",
|
||||||
|
C = "Apart_Hi_Booze_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(GTAOApartmentHi1.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Smoke = {
|
||||||
|
A = "Apart_Hi_Smokes_A",
|
||||||
|
B = "Apart_Hi_Smokes_B",
|
||||||
|
C = "Apart_Hi_Smokes_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(GTAOApartmentHi1.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
LoadDefault = function()
|
||||||
|
GTAOApartmentHi1.Strip.Enable({
|
||||||
|
GTAOApartmentHi1.Strip.A,
|
||||||
|
GTAOApartmentHi1.Strip.B,
|
||||||
|
GTAOApartmentHi1.Strip.C
|
||||||
|
}, false)
|
||||||
|
GTAOApartmentHi1.Booze.Enable({
|
||||||
|
GTAOApartmentHi1.Booze.A,
|
||||||
|
GTAOApartmentHi1.Booze.B,
|
||||||
|
GTAOApartmentHi1.Booze.C
|
||||||
|
}, false)
|
||||||
|
GTAOApartmentHi1.Smoke.Enable({
|
||||||
|
GTAOApartmentHi1.Smoke.A,
|
||||||
|
GTAOApartmentHi1.Smoke.B,
|
||||||
|
GTAOApartmentHi1.Smoke.C
|
||||||
|
}, false)
|
||||||
|
|
||||||
|
RefreshInterior(GTAOApartmentHi1.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
57
resources/[core]/bob74_ipl/gta_online/apartment_hi_2.lua
Normal file
57
resources/[core]/bob74_ipl/gta_online/apartment_hi_2.lua
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
-- Dell Perro Heights, Apt 7
|
||||||
|
-- High end apartment 2: -1477.14 -538.7499 55.5264
|
||||||
|
exports('GetGTAOApartmentHi2Object', function()
|
||||||
|
return GTAOApartmentHi2
|
||||||
|
end)
|
||||||
|
|
||||||
|
GTAOApartmentHi2 = {
|
||||||
|
interiorId = 145665,
|
||||||
|
|
||||||
|
Strip = {
|
||||||
|
A = "Apart_Hi_Strip_A",
|
||||||
|
B = "Apart_Hi_Strip_B",
|
||||||
|
C = "Apart_Hi_Strip_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(GTAOApartmentHi2.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Booze = {
|
||||||
|
A = "Apart_Hi_Booze_A",
|
||||||
|
B = "Apart_Hi_Booze_B",
|
||||||
|
C = "Apart_Hi_Booze_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(GTAOApartmentHi2.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Smoke = {
|
||||||
|
A = "Apart_Hi_Smokes_A",
|
||||||
|
B = "Apart_Hi_Smokes_B",
|
||||||
|
C = "Apart_Hi_Smokes_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(GTAOApartmentHi2.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
GTAOApartmentHi2.Strip.Enable({
|
||||||
|
GTAOApartmentHi2.Strip.A,
|
||||||
|
GTAOApartmentHi2.Strip.B,
|
||||||
|
GTAOApartmentHi2.Strip.C
|
||||||
|
}, false)
|
||||||
|
GTAOApartmentHi2.Booze.Enable({
|
||||||
|
GTAOApartmentHi2.Booze.A,
|
||||||
|
GTAOApartmentHi2.Booze.B,
|
||||||
|
GTAOApartmentHi2.Booze.C
|
||||||
|
}, false)
|
||||||
|
GTAOApartmentHi2.Smoke.Enable({
|
||||||
|
GTAOApartmentHi2.Smoke.A,
|
||||||
|
GTAOApartmentHi2.Smoke.B,
|
||||||
|
GTAOApartmentHi2.Smoke.C
|
||||||
|
}, false)
|
||||||
|
|
||||||
|
RefreshInterior(GTAOApartmentHi2.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
57
resources/[core]/bob74_ipl/gta_online/house_hi_1.lua
Normal file
57
resources/[core]/bob74_ipl/gta_online/house_hi_1.lua
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
-- 3655 Wild Oats Drive
|
||||||
|
-- High end house 1: -169.286 486.4938 137.4436
|
||||||
|
exports('GetGTAOHouseHi1Object', function()
|
||||||
|
return GTAOHouseHi1
|
||||||
|
end)
|
||||||
|
|
||||||
|
GTAOHouseHi1 = {
|
||||||
|
interiorId = 207105,
|
||||||
|
|
||||||
|
Strip = {
|
||||||
|
A = "Apart_Hi_Strip_A",
|
||||||
|
B = "Apart_Hi_Strip_B",
|
||||||
|
C = "Apart_Hi_Strip_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(GTAOHouseHi1.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Booze = {
|
||||||
|
A = "Apart_Hi_Booze_A",
|
||||||
|
B = "Apart_Hi_Booze_B",
|
||||||
|
C = "Apart_Hi_Booze_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(GTAOHouseHi1.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Smoke = {
|
||||||
|
A = "Apart_Hi_Smokes_A",
|
||||||
|
B = "Apart_Hi_Smokes_B",
|
||||||
|
C = "Apart_Hi_Smokes_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(GTAOHouseHi1.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
GTAOHouseHi1.Strip.Enable({
|
||||||
|
GTAOHouseHi1.Strip.A,
|
||||||
|
GTAOHouseHi1.Strip.B,
|
||||||
|
GTAOHouseHi1.Strip.C
|
||||||
|
}, false)
|
||||||
|
GTAOHouseHi1.Booze.Enable({
|
||||||
|
GTAOHouseHi1.Booze.A,
|
||||||
|
GTAOHouseHi1.Booze.B,
|
||||||
|
GTAOHouseHi1.Booze.C
|
||||||
|
}, false)
|
||||||
|
GTAOHouseHi1.Smoke.Enable({
|
||||||
|
GTAOHouseHi1.Smoke.A,
|
||||||
|
GTAOHouseHi1.Smoke.B,
|
||||||
|
GTAOHouseHi1.Smoke.C
|
||||||
|
}, false)
|
||||||
|
|
||||||
|
RefreshInterior(GTAOHouseHi1.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
57
resources/[core]/bob74_ipl/gta_online/house_hi_2.lua
Normal file
57
resources/[core]/bob74_ipl/gta_online/house_hi_2.lua
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
-- 2044 North Conker Avenue
|
||||||
|
-- High end house 2: 340.9412 437.1798 149.3925
|
||||||
|
exports('GetGTAOHouseHi2Object', function()
|
||||||
|
return GTAOHouseHi2
|
||||||
|
end)
|
||||||
|
|
||||||
|
GTAOHouseHi2 = {
|
||||||
|
interiorId = 206081,
|
||||||
|
|
||||||
|
Strip = {
|
||||||
|
A = "Apart_Hi_Strip_A",
|
||||||
|
B = "Apart_Hi_Strip_B",
|
||||||
|
C = "Apart_Hi_Strip_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(GTAOHouseHi2.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Booze = {
|
||||||
|
A = "Apart_Hi_Booze_A",
|
||||||
|
B = "Apart_Hi_Booze_B",
|
||||||
|
C = "Apart_Hi_Booze_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(GTAOHouseHi2.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Smoke = {
|
||||||
|
A = "Apart_Hi_Smokes_A",
|
||||||
|
B = "Apart_Hi_Smokes_B",
|
||||||
|
C = "Apart_Hi_Smokes_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(GTAOHouseHi2.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
GTAOHouseHi2.Strip.Enable({
|
||||||
|
GTAOHouseHi2.Strip.A,
|
||||||
|
GTAOHouseHi2.Strip.B,
|
||||||
|
GTAOHouseHi2.Strip.C
|
||||||
|
}, false)
|
||||||
|
GTAOHouseHi2.Booze.Enable({
|
||||||
|
GTAOHouseHi2.Booze.A,
|
||||||
|
GTAOHouseHi2.Booze.B,
|
||||||
|
GTAOHouseHi2.Booze.C
|
||||||
|
}, false)
|
||||||
|
GTAOHouseHi2.Smoke.Enable({
|
||||||
|
GTAOHouseHi2.Smoke.A,
|
||||||
|
GTAOHouseHi2.Smoke.B,
|
||||||
|
GTAOHouseHi2.Smoke.C
|
||||||
|
}, false)
|
||||||
|
|
||||||
|
RefreshInterior(GTAOHouseHi2.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
57
resources/[core]/bob74_ipl/gta_online/house_hi_3.lua
Normal file
57
resources/[core]/bob74_ipl/gta_online/house_hi_3.lua
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
-- 2045 North Conker Avenue
|
||||||
|
-- High end house 3: 373.023 416.105 145.7006
|
||||||
|
exports('GetGTAOHouseHi3Object', function()
|
||||||
|
return GTAOHouseHi3
|
||||||
|
end)
|
||||||
|
|
||||||
|
GTAOHouseHi3 = {
|
||||||
|
interiorId = 206337,
|
||||||
|
|
||||||
|
Strip = {
|
||||||
|
A = "Apart_Hi_Strip_A",
|
||||||
|
B = "Apart_Hi_Strip_B",
|
||||||
|
C = "Apart_Hi_Strip_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(GTAOHouseHi3.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Booze = {
|
||||||
|
A = "Apart_Hi_Booze_A",
|
||||||
|
B = "Apart_Hi_Booze_B",
|
||||||
|
C = "Apart_Hi_Booze_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(GTAOHouseHi3.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Smoke = {
|
||||||
|
A = "Apart_Hi_Smokes_A",
|
||||||
|
B = "Apart_Hi_Smokes_B",
|
||||||
|
C = "Apart_Hi_Smokes_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(GTAOHouseHi3.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
GTAOHouseHi3.Strip.Enable({
|
||||||
|
GTAOHouseHi3.Strip.A,
|
||||||
|
GTAOHouseHi3.Strip.B,
|
||||||
|
GTAOHouseHi3.Strip.C
|
||||||
|
}, false)
|
||||||
|
GTAOHouseHi3.Booze.Enable({
|
||||||
|
GTAOHouseHi3.Booze.A,
|
||||||
|
GTAOHouseHi3.Booze.B,
|
||||||
|
GTAOHouseHi3.Booze.C
|
||||||
|
}, false)
|
||||||
|
GTAOHouseHi3.Smoke.Enable({
|
||||||
|
GTAOHouseHi3.Smoke.A,
|
||||||
|
GTAOHouseHi3.Smoke.B,
|
||||||
|
GTAOHouseHi3.Smoke.C
|
||||||
|
}, false)
|
||||||
|
|
||||||
|
RefreshInterior(GTAOHouseHi3.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
57
resources/[core]/bob74_ipl/gta_online/house_hi_4.lua
Normal file
57
resources/[core]/bob74_ipl/gta_online/house_hi_4.lua
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
-- 2862 Hillcrest Avenue
|
||||||
|
-- High end house 4: -676.127 588.612 145.1698
|
||||||
|
exports('GetGTAOHouseHi4Object', function()
|
||||||
|
return GTAOHouseHi4
|
||||||
|
end)
|
||||||
|
|
||||||
|
GTAOHouseHi4 = {
|
||||||
|
interiorId = 208129,
|
||||||
|
|
||||||
|
Strip = {
|
||||||
|
A = "Apart_Hi_Strip_A",
|
||||||
|
B = "Apart_Hi_Strip_B",
|
||||||
|
C = "Apart_Hi_Strip_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(GTAOHouseHi4.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Booze = {
|
||||||
|
A = "Apart_Hi_Booze_A",
|
||||||
|
B = "Apart_Hi_Booze_B",
|
||||||
|
C = "Apart_Hi_Booze_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(GTAOHouseHi4.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Smoke = {
|
||||||
|
A = "Apart_Hi_Smokes_A",
|
||||||
|
B = "Apart_Hi_Smokes_B",
|
||||||
|
C = "Apart_Hi_Smokes_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(GTAOHouseHi4.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
GTAOHouseHi4.Strip.Enable({
|
||||||
|
GTAOHouseHi4.Strip.A,
|
||||||
|
GTAOHouseHi4.Strip.B,
|
||||||
|
GTAOHouseHi4.Strip.C
|
||||||
|
}, false)
|
||||||
|
GTAOHouseHi4.Booze.Enable({
|
||||||
|
GTAOHouseHi4.Booze.A,
|
||||||
|
GTAOHouseHi4.Booze.B,
|
||||||
|
GTAOHouseHi4.Booze.C
|
||||||
|
}, false)
|
||||||
|
GTAOHouseHi4.Smoke.Enable({
|
||||||
|
GTAOHouseHi4.Smoke.A,
|
||||||
|
GTAOHouseHi4.Smoke.B,
|
||||||
|
GTAOHouseHi4.Smoke.C
|
||||||
|
}, false)
|
||||||
|
|
||||||
|
RefreshInterior(GTAOHouseHi4.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
57
resources/[core]/bob74_ipl/gta_online/house_hi_5.lua
Normal file
57
resources/[core]/bob74_ipl/gta_online/house_hi_5.lua
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
-- 2868 Hillcrest Avenue
|
||||||
|
-- High end house 5: -763.107 615.906 144.1401
|
||||||
|
exports('GetGTAOHouseHi5Object', function()
|
||||||
|
return GTAOHouseHi5
|
||||||
|
end)
|
||||||
|
|
||||||
|
GTAOHouseHi5 = {
|
||||||
|
interiorId = 207617,
|
||||||
|
|
||||||
|
Strip = {
|
||||||
|
A = "Apart_Hi_Strip_A",
|
||||||
|
B = "Apart_Hi_Strip_B",
|
||||||
|
C = "Apart_Hi_Strip_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(GTAOHouseHi5.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Booze = {
|
||||||
|
A = "Apart_Hi_Booze_A",
|
||||||
|
B = "Apart_Hi_Booze_B",
|
||||||
|
C = "Apart_Hi_Booze_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(GTAOHouseHi5.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
Smoke = {
|
||||||
|
A = "Apart_Hi_Smokes_A",
|
||||||
|
B = "Apart_Hi_Smokes_B",
|
||||||
|
C = "Apart_Hi_Smokes_C",
|
||||||
|
|
||||||
|
Enable = function(details, state, refresh)
|
||||||
|
SetIplPropState(GTAOHouseHi5.interiorId, details, state, refresh)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
LoadDefault = function()
|
||||||
|
GTAOHouseHi5.Strip.Enable({
|
||||||
|
GTAOHouseHi5.Strip.A,
|
||||||
|
GTAOHouseHi5.Strip.B,
|
||||||
|
GTAOHouseHi5.Strip.C
|
||||||
|
}, false)
|
||||||
|
GTAOHouseHi5.Booze.Enable({
|
||||||
|
GTAOHouseHi5.Booze.A,
|
||||||
|
GTAOHouseHi5.Booze.B,
|
||||||
|
GTAOHouseHi5.Booze.C
|
||||||
|
}, false)
|
||||||
|
GTAOHouseHi5.Smoke.Enable({
|
||||||
|
GTAOHouseHi5.Smoke.A,
|
||||||
|
GTAOHouseHi5.Smoke.B,
|
||||||
|
GTAOHouseHi5.Smoke.C
|
||||||
|
}, false)
|
||||||
|
|
||||||
|
RefreshInterior(GTAOHouseHi5.interiorId)
|
||||||
|
end
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user