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