From 9c3c225b11da9f40011ab639dec00670be543508 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=20Gerg=C5=91?= <69343477+Rav3n95@users.noreply.github.com> Date: Fri, 16 Dec 2022 17:20:54 +0100 Subject: [PATCH 1/3] refactor playerclass --- [esx]/es_extended/server/classes/player.lua | 1085 ++++++++++--------- 1 file changed, 566 insertions(+), 519 deletions(-) diff --git a/[esx]/es_extended/server/classes/player.lua b/[esx]/es_extended/server/classes/player.lua index 39e303cf..14b1eb9a 100644 --- a/[esx]/es_extended/server/classes/player.lua +++ b/[esx]/es_extended/server/classes/player.lua @@ -1,400 +1,425 @@ -local SetTimeout = SetTimeout -local GetPlayerPed = GetPlayerPed -local DoesEntityExist = DoesEntityExist -local GetEntityCoords = GetEntityCoords -local GetEntityHeading = GetEntityHeading - function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, weight, job, loadout, name, coords) local targetOverrides = Config.PlayerFunctionOverride and Core.PlayerFunctionOverrides[Config.PlayerFunctionOverride] or {} - - local self = {} + local xPlayer = { + accounts = accounts, + coords = coords, + group = group, + identifier = identifier, + inventory = inventory, + job = job, + loadout = loadout, + name = name, + playerId = playerId, + source = playerId, + ped = GetPlayerPed(playerId), + variables = {}, + weight = weight, + maxWeight = Config.MaxWeight, + license = Config.Multichar and 'license'.. identifier:sub(identifier:find(':'), identifier:len()) or 'license:'..identifier, - self.accounts = accounts - self.coords = coords - self.group = group - self.identifier = identifier - self.inventory = inventory - self.job = job - self.loadout = loadout - self.name = name - self.playerId = playerId - self.source = playerId - self.variables = {} - self.weight = weight - self.maxWeight = Config.MaxWeight - if Config.Multichar then self.license = 'license'.. identifier:sub(identifier:find(':'), identifier:len()) else self.license = 'license:'..identifier end + triggerEvent = function (self, eventName, ...) + TriggerClientEvent(eventName, self.playerId, ...) + end, - ExecuteCommand(('add_principal identifier.%s group.%s'):format(self.license, self.group)) - - Player(self.source).state:set("identifier", self.identifier, true) - Player(self.source).state:set("license", self.license, true) - Player(self.source).state:set("job", self.job, true) - Player(self.source).state:set("group", self.group, true) - Player(self.source).state:set("name", self.name, true) - - function self.triggerEvent(eventName, ...) - TriggerClientEvent(eventName, self.source, ...) - end - - function self.setCoords(coords) - local Ped = GetPlayerPed(self.source) - local vector = type(coords) == "vector4" and coords or type(coords) == "vector3" and vector4(coords, 0.0) or - vec(coords.x, coords.y, coords.z, coords.heading or 0.0) - SetEntityCoords(Ped, vector.xyz, false, false, false, false) - SetEntityHeading(Ped, vector.w) - end - - function self.updateCoords() - SetTimeout(1000,function() - local Ped = GetPlayerPed(self.source) - if DoesEntityExist(Ped) then - local coords = GetEntityCoords(Ped) - local distance = #(coords - vector3(self.coords.x, self.coords.y, self.coords.z)) - if distance > 1.5 then - local heading = GetEntityHeading(Ped) - self.coords = { - x = coords.x, - y = coords.y, - z = coords.z, - heading = heading or 0.0 - } + updatePed = function(self) + SetTimeout(1000,function() + if self.ped ~= GetPlayerPed(self.playerId) then + self.ped = GetPlayerPed(self.playerId) + self:triggerEvent('esx:updatePed', self.ped) + TriggerEvent('esx:updatePed', self.playerId, self.ped) + Player(self.playerId).state:set("ped", self.ped, true) end - end - self.updateCoords() - end) - end + self:updatePed() + end) + end, - function self.getCoords(vector) - if vector then - return vector3(self.coords.x, self.coords.y, self.coords.z) - else - return self.coords - end - end + getPed = function(self) + return self.ped + end, - function self.kick(reason) - DropPlayer(self.source, reason) - end + setCoords = function(self, coord) + local vector = type(coord) == "vector4" and coord or type(coord) == "vector3" and vector4(coord, 0.0) or + vec(coord.x, coord.y, coord.z, coord.w or 0.0) + SetEntityCoords(self.ped, vector.x, vector.y, vector.z, false, false, false, false) + SetEntityHeading(self.ped, vector.w) + end, - function self.setMoney(money) - money = ESX.Math.Round(money) - self.setAccountMoney('money', money) - end + updateCoords = function(self) + SetTimeout(1000,function() + if DoesEntityExist(self.ped) then + local coord = GetEntityCoords(self.ped) + local distance = #(coord - vector3(self.coords.x, self.coords.y, self.coords.z)) + if distance > 1.5 then + local heading = GetEntityHeading(self.ped) + self.coords = { + x = coords.x, + y = coords.y, + z = coords.z, + heading = heading or 0.0 + } + end + end + self:updateCoords() + end) + end, - function self.getMoney() - return self.getAccount('money').money - end + getCoords = function(self, vector) + return vector and vector3(self.coords.x, self.coords.y, self.coords.z) or self.coords + end, - function self.addMoney(money, reason) - money = ESX.Math.Round(money) - self.addAccountMoney('money', money, reason) - end - - function self.removeMoney(money, reason) - money = ESX.Math.Round(money) - self.removeAccountMoney('money', money, reason) - end - - function self.getIdentifier() - return self.identifier - end - - function self.setGroup(newGroup) - ExecuteCommand(('remove_principal identifier.%s group.%s'):format(self.license, self.group)) - self.group = newGroup - Player(self.source).state:set("group", self.group, true) - ExecuteCommand(('add_principal identifier.%s group.%s'):format(self.license, self.group)) - end - - function self.getGroup() - return self.group - end - - function self.set(k, v) - self.variables[k] = v - Player(self.source).state:set(k, v, true) - end - - function self.get(k) - return self.variables[k] - end - - function self.getAccounts(minimal) - if minimal then - local minimalAccounts = {} + kick = function(self, reason) + DropPlayer(self.playerId, reason) + end, + getAccount = function(self, account) for i=1, #self.accounts do - minimalAccounts[self.accounts[i].name] = self.accounts[i].money + if self.accounts[i].name == account then + return self.accounts[i] + end + end + end, + + getAccounts = function(self, minimal) + if minimal then + local minimalAccounts = {} + + for i=1, #self.accounts do + minimalAccounts[self.accounts[i].name] = self.accounts[i].money + end + + return minimalAccounts + else + return self.accounts + end + end, + + setAccountMoney = function(self, accountName, amount, reason) + reason = reason or 'unknown' + if not tonumber(amount) then + print(('[^1ERROR^7] Tried To Set Account ^5%s^0 For Player ^5%s^0 To An Invalid Number -> ^5%s^7'):format(accountName, self.playerId, amount)) + return + end + if amount >= 0 then + local account = self:getAccount(accountName) + + if account then + amount = account.round and ESX.Math.Round(amount) or amount + self.accounts[account.index].money = amount + self:triggerEvent('esx:setAccountMoney', account) + TriggerEvent('esx:setAccountMoney', self.playerId, accountName, amount, reason) + else + print(('[^1ERROR^7] Tried To Set Invalid Account ^5%s^0 For Player ^5%s^0!'):format(accountName, self.playerId)) + end + else + print(('[^1ERROR^7] Tried To Set Account ^5%s^0 For Player ^5%s^0 To An Invalid Number -> ^5%s^7'):format(accountName, self.playerId, amount)) + end + end, + + addAccountMoney = function(self, accountName, amount, reason) + reason = reason or 'Unknown' + if not tonumber(amount) then + print(('[^1ERROR^7] Tried To Set Account ^5%s^0 For Player ^5%s^0 To An Invalid Number -> ^5%s^7'):format(accountName, self.playerId, amount)) + return + end + if amount > 0 then + local account = self:getAccount(accountName) + if account then + amount = account.round and ESX.Math.Round(amount) or amount + self.accounts[account.index].money += amount + self:triggerEvent('esx:setAccountMoney', account) + TriggerEvent('esx:addAccountMoney', self.playerId, accountName, amount, reason) + else + print(('[^1ERROR^7] Tried To Set Add To Invalid Account ^5%s^0 For Player ^5%s^0!'):format(accountName, self.playerId)) + end + else + print(('[^1ERROR^7] Tried To Set Account ^5%s^0 For Player ^5%s^0 To An Invalid Number -> ^5%s^7'):format(accountName, self.playerId, amount)) + end + end, + + removeAccountMoney = function(self, accountName, amount, reason) + reason = reason or 'Unknown' + if not tonumber(amount) then + print(('[^1ERROR^7] Tried To Set Account ^5%s^0 For Player ^5%s^0 To An Invalid Number -> ^5%s^7'):format(accountName, self.playerId, amount)) + return + end + if amount > 0 then + local account = self:getAccount(accountName) + + if account then + amount = account.round and ESX.Math.Round(amount) or amount + self.accounts[account.index].money -= amount + self:triggerEvent('esx:setAccountMoney', account) + TriggerEvent('esx:removeAccountMoney', self.playerId, accountName, amount, reason) + else + print(('[^1ERROR^7] Tried To Set Add To Invalid Account ^5%s^0 For Player ^5%s^0!'):format(accountName, self.playerId)) + end + else + print(('[^1ERROR^7] Tried To Set Account ^5%s^0 For Player ^5%s^0 To An Invalid Number -> ^5%s^7'):format(accountName, self.playerId, amount)) + end + end, + + setMoney = function (self, amount) + amount = ESX.Math.Round(amount) + self:setAccountMoney('money', amount) + end, + + getMoney = function(self) + return self:getAccount('money').money + end, + + addMoney = function(self, amount, reason) + amount = ESX.Math.Round(amount) + self:addAccountMoney('money', amount, reason) + end, + + removeMoney = function(self, amount, reason) + amount = ESX.Math.Round(amount) + self:removeAccountMoney('money', amount, reason) + end, + + getGroup = function(self) + return self.group + end, + + setGroup = function(self, newGroup) + ExecuteCommand(('remove_principal identifier.%s group.%s'):format(self.license, self.group)) + self.group = newGroup + Player(self.playerId).state:set("group", self.group, true) + ExecuteCommand(('add_principal identifier.%s group.%s'):format(self.license, self.group)) + end, + + getIdentifier = function(self) + return self.identifier + end, + + set = function(self, key, value) + self.variables[key] = value + Player(self.playerId).state:set(key, value, true) + end, + + get = function(self, key) + return self.variables[key] + end, + + getJob = function(self) + return self.job + end, + + setJob = function(self, jobName, grade) + grade = tostring(grade) + local lastJob = json.decode(json.encode(self.job)) + + if ESX.DoesJobExist(jobName, grade) then + local jobObject, gradeObject = ESX.Jobs[jobName], ESX.Jobs[jobName].grades[grade] + + self.job.id = jobObject.id + self.job.name = jobObject.name + self.job.label = jobObject.label + + self.job.grade = tonumber(grade) + self.job.grade_name = gradeObject.name + self.job.grade_label = gradeObject.label + self.job.grade_salary = gradeObject.salary + + if gradeObject.skin_male then + self.job.skin_male = json.decode(gradeObject.skin_male) + else + self.job.skin_male = {} + end + + if gradeObject.skin_female then + self.job.skin_female = json.decode(gradeObject.skin_female) + else + self.job.skin_female = {} + end + + TriggerEvent('esx:setJob', self.playerId, self.job, lastJob) + self:triggerEvent('esx:setJob', self.job) + Player(self.playerId).state:set("job", self.job, true) + else + print(('[es_extended] [^3WARNING^7] Ignoring invalid ^5:setJob()^7 usage for ID: ^5%s^7, Job: ^5%s^7'):format(self.playerId, job)) + end + end, + + getName = function(self) + return self.name + end, + + setName = function(self, newName) + self.name = newName + Player(self.playerId).state:set("name", newName, true) + end, + + getWeight = function(self) + return self.weight + end, + + getMaxWeight = function(self) + return self.maxWeight + end, + + setMaxWeight = function(self, newWeight) + self.maxWeight = newWeight + Player(self.playerId).state:set("maxWeight", newWeight, true) + self:triggerEvent('esx:setMaxWeight', newWeight) + end, + + getInventory = function(self, minimal) + if minimal then + local minimalInventory = {} + + for _, v in ipairs(self.inventory) do + if v.count > 0 then + minimalInventory[v.name] = v.count + end + end + + return minimalInventory end - return minimalAccounts - else - return self.accounts - end - end + return self.inventory + end, - function self.getAccount(account) - for i=1, #self.accounts do - if self.accounts[i].name == account then - return self.accounts[i] + getInventoryItem = function(self, item, metadata) + for _,v in ipairs(self.inventory) do + if v.name == item then + return v + end end - end - end + end, - function self.getInventory(minimal) - if minimal then - local minimalInventory = {} + addInventoryItem = function(self, itemName, count, metadata, slot) + local item = self:getInventoryItem(itemName) - for k, v in ipairs(self.inventory) do - if v.count > 0 then - minimalInventory[v.name] = v.count + if item then + count = ESX.Math.Round(count) + item.count = item.count + count + self.weight = self.weight + (item.weight * count) + TriggerEvent('esx:onAddInventoryItem', self.playerId, item.name, item.count) + self:triggerEvent('esx:addInventoryItem', item.name, item.count) + Player(self.playerId).state:set("weight", self.weight, true) + end + end, + + removeInventoryItem = function(self, itemName, count, metadata, slot) + local item = self:getInventoryItem(itemName) + + if item then + count = ESX.Math.Round(count) + local newCount = item.count - count + + if newCount >= 0 then + item.count = newCount + self.weight = self.weight - (item.weight * count) + TriggerEvent('esx:onRemoveInventoryItem', self.playerId, item.name, item.count) + self:triggerEvent('esx:removeInventoryItem', item.name, item.count) + Player(self.playerId).state:set("weight", self.weight, true) + end + end + end, + + setInventoryItem = function(self, itemName, count, metadata) + local item = self:getInventoryItem(itemName) + + if item and count >= 0 then + count = ESX.Math.Round(count) + + if count > item.count then + self:addInventoryItem(item.name, count - item.count) + else + self:removeInventoryItem(item.name, item.count - count) + end + end + end, + + canCarryItem = function(self, itemName, count, metadata) + if ESX.Items[itemName] then + local currentWeight, itemWeight = self.weight, ESX.Items[itemName].weight + local newWeight = currentWeight + (itemWeight * count) + + return newWeight <= self.maxWeight + else + print(('[^3WARNING^7] Item ^5"%s"^7 was used but does not exist!'):format(itemName)) + end + end, + + canSwapItem = function(self, firstItem, firstItemCount, testItem, testItemCount) + local firstItemObject = self:getInventoryItem(firstItem) + local testItemObject = self:getInventoryItem(testItem) + + if firstItemObject.count >= firstItemCount then + local weightWithoutFirstItem = ESX.Math.Round(self.weight - (firstItemObject.weight * firstItemCount)) + local weightWithTestItem = ESX.Math.Round(weightWithoutFirstItem + (testItemObject.weight * testItemCount)) + + return weightWithTestItem <= self.maxWeight + end + + return false + end, + + hasItem = function(self, itemName, metadata) + for _, v in ipairs(self.inventory) do + if (v.name == itemName) and (v.count >= 1) then + return v, v.count end end - return minimalInventory - end + return false + end, - return self.inventory - end + getLoadout = function(self, minimal) + if minimal then + local minimalLoadout = {} - function self.getJob() - return self.job - end + for _, v in ipairs(self.loadout) do + minimalLoadout[v.name] = {ammo = v.ammo} + if v.tintIndex > 0 then minimalLoadout[v.name].tintIndex = v.tintIndex end - function self.getLoadout(minimal) - if minimal then - local minimalLoadout = {} + if #v.components > 0 then + local components = {} - for k,v in ipairs(self.loadout) do - minimalLoadout[v.name] = {ammo = v.ammo} - if v.tintIndex > 0 then minimalLoadout[v.name].tintIndex = v.tintIndex end + for _, component in ipairs(v.components) do + if component ~= 'clip_default' then + components[#components + 1] = component + end + end - if #v.components > 0 then - local components = {} - - for k2,component in ipairs(v.components) do - if component ~= 'clip_default' then - components[#components + 1] = component + if #components > 0 then + minimalLoadout[v.name].components = components end end + end - if #components > 0 then - minimalLoadout[v.name].components = components - end + return minimalLoadout + else + return self.loadout + end + end, + + hasWeapon = function(self, weaponName) + for _, v in ipairs(self.loadout) do + if v.name == weaponName then + return true end end - return minimalLoadout - else - return self.loadout - end - end + return false + end, - function self.getName() - return self.name - end - - function self.setName(newName) - self.name = newName - Player(self.source).state:set("name", self.name, true) - end - - function self.setAccountMoney(accountName, money, reason) - reason = reason or 'unknown' - if not tonumber(money) then - print(('[^1ERROR^7] Tried To Set Account ^5%s^0 For Player ^5%s^0 To An Invalid Number -> ^5%s^7'):format(accountName, self.playerId, money)) - return - end - if money >= 0 then - local account = self.getAccount(accountName) - - if account then - money = account.round and ESX.Math.Round(money) or money - self.accounts[account.index].money = money - - self.triggerEvent('esx:setAccountMoney', account) - TriggerEvent('esx:setAccountMoney', self.source, accountName, money, reason) - else - print(('[^1ERROR^7] Tried To Set Invalid Account ^5%s^0 For Player ^5%s^0!'):format(accountName, self.playerId)) + getWeapon = function(self, weaponName) + for k,v in ipairs(self.loadout) do + if v.name == weaponName then + return k, v + end end - else - print(('[^1ERROR^7] Tried To Set Account ^5%s^0 For Player ^5%s^0 To An Invalid Number -> ^5%s^7'):format(accountName, self.playerId, money)) - end - end + end, - function self.addAccountMoney(accountName, money, reason) - reason = reason or 'Unknown' - if not tonumber(money) then - print(('[^1ERROR^7] Tried To Set Account ^5%s^0 For Player ^5%s^0 To An Invalid Number -> ^5%s^7'):format(accountName, self.playerId, money)) - return - end - if money > 0 then - local account = self.getAccount(accountName) - if account then - money = account.round and ESX.Math.Round(money) or money - self.accounts[account.index].money += money - - self.triggerEvent('esx:setAccountMoney', account) - TriggerEvent('esx:addAccountMoney', self.source, accountName, money, reason) - else - print(('[^1ERROR^7] Tried To Set Add To Invalid Account ^5%s^0 For Player ^5%s^0!'):format(accountName, self.playerId)) - end - else - print(('[^1ERROR^7] Tried To Set Account ^5%s^0 For Player ^5%s^0 To An Invalid Number -> ^5%s^7'):format(accountName, self.playerId, money)) - end - end - - function self.removeAccountMoney(accountName, money, reason) - reason = reason or 'Unknown' - if not tonumber(money) then - print(('[^1ERROR^7] Tried To Set Account ^5%s^0 For Player ^5%s^0 To An Invalid Number -> ^5%s^7'):format(accountName, self.playerId, money)) - return - end - if money > 0 then - local account = self.getAccount(accountName) - - if account then - money = account.round and ESX.Math.Round(money) or money - self.accounts[account.index].money -= money - - self.triggerEvent('esx:setAccountMoney', account) - TriggerEvent('esx:removeAccountMoney', self.source, accountName, money, reason) - else - print(('[^1ERROR^7] Tried To Set Add To Invalid Account ^5%s^0 For Player ^5%s^0!'):format(accountName, self.playerId)) - end - else - print(('[^1ERROR^7] Tried To Set Account ^5%s^0 For Player ^5%s^0 To An Invalid Number -> ^5%s^7'):format(accountName, self.playerId, money)) - end - end - - function self.getInventoryItem(name, metadata) - for k,v in ipairs(self.inventory) do - if v.name == name then - return v - end - end - end - - function self.addInventoryItem(name, count, metadata, slot) - local item = self.getInventoryItem(name) - - if item then - count = ESX.Math.Round(count) - item.count = item.count + count - self.weight = self.weight + (item.weight * count) - - TriggerEvent('esx:onAddInventoryItem', self.source, item.name, item.count) - self.triggerEvent('esx:addInventoryItem', item.name, item.count) - end - end - - function self.removeInventoryItem(name, count, metadata, slot) - local item = self.getInventoryItem(name) - - if item then - count = ESX.Math.Round(count) - local newCount = item.count - count - - if newCount >= 0 then - item.count = newCount - self.weight = self.weight - (item.weight * count) - - TriggerEvent('esx:onRemoveInventoryItem', self.source, item.name, item.count) - self.triggerEvent('esx:removeInventoryItem', item.name, item.count) - end - end - end - - function self.setInventoryItem(name, count, metadata) - local item = self.getInventoryItem(name) - - if item and count >= 0 then - count = ESX.Math.Round(count) - - if count > item.count then - self.addInventoryItem(item.name, count - item.count) - else - self.removeInventoryItem(item.name, item.count - count) - end - end - end - - function self.getWeight() - return self.weight - end - - function self.getMaxWeight() - return self.maxWeight - end - - function self.canCarryItem(name, count, metadata) - if ESX.Items[name] then - local currentWeight, itemWeight = self.weight, ESX.Items[name].weight - local newWeight = currentWeight + (itemWeight * count) - - return newWeight <= self.maxWeight - else - print(('[^3WARNING^7] Item ^5"%s"^7 was used but does not exist!'):format(name)) - end - end - - function self.canSwapItem(firstItem, firstItemCount, testItem, testItemCount) - local firstItemObject = self.getInventoryItem(firstItem) - local testItemObject = self.getInventoryItem(testItem) - - if firstItemObject.count >= firstItemCount then - local weightWithoutFirstItem = ESX.Math.Round(self.weight - (firstItemObject.weight * firstItemCount)) - local weightWithTestItem = ESX.Math.Round(weightWithoutFirstItem + (testItemObject.weight * testItemCount)) - - return weightWithTestItem <= self.maxWeight - end - - return false - end - - function self.setMaxWeight(newWeight) - self.maxWeight = newWeight - self.triggerEvent('esx:setMaxWeight', self.maxWeight) - end - - function self.setJob(job, grade) - grade = tostring(grade) - local lastJob = json.decode(json.encode(self.job)) - - if ESX.DoesJobExist(job, grade) then - local jobObject, gradeObject = ESX.Jobs[job], ESX.Jobs[job].grades[grade] - - self.job.id = jobObject.id - self.job.name = jobObject.name - self.job.label = jobObject.label - - self.job.grade = tonumber(grade) - self.job.grade_name = gradeObject.name - self.job.grade_label = gradeObject.label - self.job.grade_salary = gradeObject.salary - - if gradeObject.skin_male then - self.job.skin_male = json.decode(gradeObject.skin_male) - else - self.job.skin_male = {} + addWeapon = function(self, weaponName, ammo) + if self:hasWeapon(weaponName) then + print(('[^1ERROR^7] Player already has this weapon ^5%s'):format(weaponName)) + return end - if gradeObject.skin_female then - self.job.skin_female = json.decode(gradeObject.skin_female) - else - self.job.skin_female = {} - end - - TriggerEvent('esx:setJob', self.source, self.job, lastJob) - self.triggerEvent('esx:setJob', self.job) - Player(self.source).state:set("job", self.job, true) - else - print(('[es_extended] [^3WARNING^7] Ignoring invalid ^5.setJob()^7 usage for ID: ^5%s^7, Job: ^5%s^7'):format(self.source, job)) - end - end - - function self.addWeapon(weaponName, ammo) - if not self.hasWeapon(weaponName) then local weaponLabel = ESX.GetWeaponLabel(weaponName) table.insert(self.loadout, { @@ -405,177 +430,199 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, tintIndex = 0 }) - GiveWeaponToPed(GetPlayerPed(self.source), joaat(weaponName), ammo, false, false) - self.triggerEvent('esx:addInventoryItem', weaponLabel, false, true) - end - end + GiveWeaponToPed(self.ped, joaat(weaponName), ammo, false, false) + self:triggerEvent('esx:addInventoryItem', weaponLabel, false, true) + end, - function self.addWeaponComponent(weaponName, weaponComponent) - local loadoutNum, weapon = self.getWeapon(weaponName) - - if weapon then - local component = ESX.GetWeaponComponent(weaponName, weaponComponent) - - if component then - if not self.hasWeaponComponent(weaponName, weaponComponent) then - self.loadout[loadoutNum].components[#self.loadout[loadoutNum].components + 1] = weaponComponent - local componentHash = ESX.GetWeaponComponent(weaponName, weaponComponent).hash - GiveWeaponComponentToPed(GetPlayerPed(self.source), joaat(weaponName), componentHash) - self.triggerEvent('esx:addInventoryItem', component.label, false, true) - end + hasWeaponComponent = function(self, weaponName, weaponComponent) + local loadoutNum, weapon = self:getWeapon(weaponName) + if not weapon then + print(('[^1ERROR^7] Weapon not exist ^5%s'):format(weaponName)) + return false end - end - end - function self.addWeaponAmmo(weaponName, ammoCount) - local loadoutNum, weapon = self.getWeapon(weaponName) - - if weapon then - weapon.ammo = weapon.ammo + ammoCount - SetPedAmmo(GetPlayerPed(self.source), joaat(weaponName), weapon.ammo) - end - end - - function self.updateWeaponAmmo(weaponName, ammoCount) - local loadoutNum, weapon = self.getWeapon(weaponName) - - if weapon then - weapon.ammo = ammoCount - end - end - - function self.setWeaponTint(weaponName, weaponTintIndex) - local loadoutNum, weapon = self.getWeapon(weaponName) - - if weapon then - local weaponNum, weaponObject = ESX.GetWeapon(weaponName) - - if weaponObject.tints and weaponObject.tints[weaponTintIndex] then - self.loadout[loadoutNum].tintIndex = weaponTintIndex - self.triggerEvent('esx:setWeaponTint', weaponName, weaponTintIndex) - self.triggerEvent('esx:addInventoryItem', weaponObject.tints[weaponTintIndex], false, true) - end - end - end - - function self.getWeaponTint(weaponName) - local loadoutNum, weapon = self.getWeapon(weaponName) - - if weapon then - return weapon.tintIndex - end - - return 0 - end - - function self.removeWeapon(weaponName) - local weaponLabel - - for k,v in ipairs(self.loadout) do - if v.name == weaponName then - weaponLabel = v.label - - for k2,v2 in ipairs(v.components) do - self.removeWeaponComponent(weaponName, v2) - end - - table.remove(self.loadout, k) - break - end - end - - if weaponLabel then - self.triggerEvent('esx:removeWeapon', weaponName) - self.triggerEvent('esx:removeInventoryItem', weaponLabel, false, true) - end - end - - function self.removeWeaponComponent(weaponName, weaponComponent) - local loadoutNum, weapon = self.getWeapon(weaponName) - - if weapon then - local component = ESX.GetWeaponComponent(weaponName, weaponComponent) - - if component then - if self.hasWeaponComponent(weaponName, weaponComponent) then - for k,v in ipairs(self.loadout[loadoutNum].components) do - if v == weaponComponent then - table.remove(self.loadout[loadoutNum].components, k) - break - end - end - - self.triggerEvent('esx:removeWeaponComponent', weaponName, weaponComponent) - self.triggerEvent('esx:removeInventoryItem', component.label, false, true) - end - end - end - end - - function self.removeWeaponAmmo(weaponName, ammoCount) - local loadoutNum, weapon = self.getWeapon(weaponName) - - if weapon then - weapon.ammo = weapon.ammo - ammoCount - self.triggerEvent('esx:setWeaponAmmo', weaponName, weapon.ammo) - end - end - - function self.hasWeaponComponent(weaponName, weaponComponent) - local loadoutNum, weapon = self.getWeapon(weaponName) - - if weapon then - for k,v in ipairs(weapon.components) do + for _, v in ipairs(weapon.components) do if v == weaponComponent then return true end end - return false + end, + + addWeaponComponent = function(self, weaponName, weaponComponent) + local loadoutNum, weapon = self:getWeapon(weaponName) + if not weapon then + print(('[^1ERROR^7] Weapon not exist ^5%s'):format(weaponName)) + return + end + + local component = ESX.GetWeaponComponent(weaponName, weaponComponent) + if not component then + print(('[^1ERROR^7] Weapon component not exist ^5%s'):format(weaponComponent)) + return + end + + if not self:hasWeaponComponent(weaponName, weaponComponent) then + print(('[^1ERROR^7] Player not owning this component ^5%s'):format(weaponComponent)) + return + end + + self.loadout[loadoutNum].components[#self.loadout[loadoutNum].components + 1] = weaponComponent + local componentHash = ESX.GetWeaponComponent(weaponName, weaponComponent).hash + GiveWeaponComponentToPed(self.ped, joaat(weaponName), componentHash) + self:triggerEvent('esx:addInventoryItem', component.label, false, true) + end, + + addWeaponAmmo = function(self, weaponName, ammoCount) + local loadoutNum, weapon = self:getWeapon(weaponName) + + if not weapon then + print(('[^1ERROR^7] Weapon not exist ^5%s'):format(weaponName)) + return + end + + weapon.ammo = weapon.ammo + ammoCount + SetPedAmmo(self.ped, joaat(weaponName), weapon.ammo) + end, + + updateWeaponAmmo = function(self, weaponName, ammoCount) + local loadoutNum, weapon = self:getWeapon(weaponName) + + if not weapon then + print(('[^1ERROR^7] Weapon not exist ^5%s'):format(weaponName)) + return + end + + weapon.ammo = ammoCount + end, + + setWeaponTint = function(self, weaponName, weaponTintIndex) + local loadoutNum, weapon = self:getWeapon(weaponName) + + if not weapon then + print(('[^1ERROR^7] Weapon not exist ^5%s'):format(weaponName)) + return + end + + local weaponNum, weaponObject = ESX.GetWeapon(weaponName) + + if weaponObject.tints and weaponObject.tints[weaponTintIndex] then + self.loadout[loadoutNum].tintIndex = weaponTintIndex + self:triggerEvent('esx:setWeaponTint', weaponName, weaponTintIndex) + self:triggerEvent('esx:addInventoryItem', weaponObject.tints[weaponTintIndex], false, true) + end + end, + + getWeaponTint = function(self, weaponName) + local loadoutNum, weapon = self:getWeapon(weaponName) + + if not weapon then + print(('[^1ERROR^7] Weapon not exist ^5%s'):format(weaponName)) + return 0 + end + + return weapon.tintIndex + end, + + removeWeapon = function(self, weaponName) + local weaponLabel + + for k,v in ipairs(self.loadout) do + if v.name == weaponName then + weaponLabel = v.label + + for _, key in ipairs(v.components) do + self:removeWeaponComponent(weaponName, key) + end + + table.remove(self.loadout, k) + break + end + end + + if weaponLabel then + self:triggerEvent('esx:removeWeapon', weaponName) + self:triggerEvent('esx:removeInventoryItem', weaponLabel, false, true) + end + end, + + removeWeaponComponent = function(self, weaponName, weaponComponent) + local loadoutNum, weapon = self:getWeapon(weaponName) + + if not weapon then + print(('[^1ERROR^7] Weapon not exist ^5%s'):format(weaponName)) + return + end + + local component = ESX.GetWeaponComponent(weaponName, weaponComponent) + if not component then + print(('[^1ERROR^7] Weapon component not exist ^5%s'):format(weaponComponent)) + return + end + + if not self:hasWeaponComponent(weaponName, weaponComponent) then + print(('[^1ERROR^7] Player not owning this component ^5%s'):format(weaponComponent)) + return + end + + for k,v in ipairs(self.loadout[loadoutNum].components) do + if v == weaponComponent then + table.remove(self.loadout[loadoutNum].components, k) + break + end + end + + self:triggerEvent('esx:removeWeaponComponent', weaponName, weaponComponent) + self:triggerEvent('esx:removeInventoryItem', component.label, false, true) + end, + + removeWeaponAmmo = function(self, weaponName, ammoCount) + local loadoutNum, weapon = self:getWeapon(weaponName) + + if not weapon then + print(('[^1ERROR^7] Weapon not exist ^5%s'):format(weaponName)) + return + end + weapon.ammo = weapon.ammo - ammoCount + self:triggerEvent('esx:setWeaponAmmo', weaponName, weapon.ammo) + end, + + showNotification = function(self, msg) + self:triggerEvent('esx:showNotification', msg) + end, + + showHelpNotification = function(self, msg, thisFrame, beep, duration) + self:triggerEvent('esx:showHelpNotification', msg, thisFrame, beep, duration) + end + } + + ExecuteCommand(('add_principal identifier.%s group.%s'):format(xPlayer.license, xPlayer.group)) + + -- StateBag + local stateBag = Player(xPlayer.playerId).state + stateBag:set("identifier", xPlayer.identifier, true) + stateBag:set("license", xPlayer.license, true) + stateBag:set("job", xPlayer.job, true) + stateBag:set("group", xPlayer.group, true) + stateBag:set("name", xPlayer.name, true) + stateBag:set("ped", xPlayer.ped, true) + stateBag:set("weight", xPlayer.weight, true) + stateBag:set("maxWeight", xPlayer.maxWeight, true) + + local tempxPlayer = {} + for fnName, fn in pairs(xPlayer) do + if type(fn) == "function" then + tempxPlayer[fnName] = function(...) + return fn(xPlayer, ...) + end else - return false + tempxPlayer[fnName] = fn end - end - - function self.hasWeapon(weaponName) - for k,v in ipairs(self.loadout) do - if v.name == weaponName then - return true - end - end - - return false - end - - function self.hasItem(item, metadata) - for k,v in ipairs(self.inventory) do - if (v.name == item) and (v.count >= 1) then - return v, v.count - end - end - - return false - end - - function self.getWeapon(weaponName) - for k,v in ipairs(self.loadout) do - if v.name == weaponName then - return k, v - end - end - end - - function self.showNotification(msg) - self.triggerEvent('esx:showNotification', msg) - end - - function self.showHelpNotification(msg, thisFrame, beep, duration) - self.triggerEvent('esx:showHelpNotification', msg, thisFrame, beep, duration) - end + end for fnName,fn in pairs(targetOverrides) do - self[fnName] = fn(self) + tempxPlayer[fnName] = fn(tempxPlayer) end - return self + return tempxPlayer end From ea22899afd63654fb80b3fde5d460418689bf79f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=20Gerg=C5=91?= Date: Mon, 19 Dec 2022 14:23:28 +0100 Subject: [PATCH 2/3] Disable few hud component --- [esx]/es_extended/config.lua | 20 ++++++++++---------- [esx_addons]/esx_status/config.lua | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/[esx]/es_extended/config.lua b/[esx]/es_extended/config.lua index a72b3f64..caf9a794 100644 --- a/[esx]/es_extended/config.lua +++ b/[esx]/es_extended/config.lua @@ -19,7 +19,7 @@ Config.Accounts = { Config.StartingAccountMoney = {bank = 50000} Config.EnableSocietyPayouts = false -- pay from the society account that the player is employed at? Requirement: esx_society -Config.EnableHud = true -- enable the default hud? Display current job and accounts (black, bank & cash) +Config.EnableHud = false -- enable the default hud? Display current job and accounts (black, bank & cash) Config.MaxWeight = 24 -- the max inventory weight without backpack Config.PaycheckInterval = 7 * 60000 -- how often to recieve pay checks in milliseconds Config.EnableDebug = false -- Use Debug options? @@ -36,19 +36,19 @@ Config.DisableNPCDrops = false -- stops NPCs from dropping weapons on Config.DisableWeaponWheel = false -- Disables default weapon wheel Config.DisableAimAssist = false -- disables AIM assist (mainly on controllers) Config.RemoveHudCommonents = { - [1] = false, --WANTED_STARS, - [2] = false, --WEAPON_ICON - [3] = false, --CASH - [4] = false, --MP_CASH + [1] = true, --WANTED_STARS, + [2] = true, --WEAPON_ICON + [3] = true, --CASH + [4] = true, --MP_CASH [5] = false, --MP_MESSAGE - [6] = false, --VEHICLE_NAME - [7] = false,-- AREA_NAME - [8] = false,-- VEHICLE_CLASS - [9] = false, --STREET_NAME + [6] = true, --VEHICLE_NAME + [7] = true,-- AREA_NAME + [8] = true,-- VEHICLE_CLASS + [9] = true, --STREET_NAME [10] = false, --HELP_TEXT [11] = false, --FLOATING_HELP_TEXT_1 [12] = false, --FLOATING_HELP_TEXT_2 - [13] = false, --CASH_CHANGE + [13] = true, --CASH_CHANGE [14] = false, --RETICLE [15] = false, --SUBTITLE_TEXT [16] = false, --RADIO_STATIONS diff --git a/[esx_addons]/esx_status/config.lua b/[esx_addons]/esx_status/config.lua index 7f86d835..4120ac64 100644 --- a/[esx_addons]/esx_status/config.lua +++ b/[esx_addons]/esx_status/config.lua @@ -3,4 +3,4 @@ Config = {} Config.StatusMax = 1000000 Config.TickTime = 1000 Config.UpdateInterval = 30000 -Config.Display = true -- Enable the esx_status bars (disable if you are using another HUD) +Config.Display = false -- Enable the esx_status bars (disable if you are using another HUD) From c1e344e9b517c3a1d0652827ef8c598d3bb7d6d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=20Gerg=C5=91?= Date: Mon, 19 Dec 2022 14:30:47 +0100 Subject: [PATCH 3/3] Fuck property --- .gitignore | 1 + [esx_addons]/esx_property/properties.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..1946e67e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +[esx_addons]/esx_property/properties.json \ No newline at end of file diff --git a/[esx_addons]/esx_property/properties.json b/[esx_addons]/esx_property/properties.json index a99deb4e..77915851 100644 --- a/[esx_addons]/esx_property/properties.json +++ b/[esx_addons]/esx_property/properties.json @@ -1 +1 @@ -[{"Locked":false,"Price":25000,"Entrance":{"z":28.57,"y":6206.16,"x":-467.88},"furniture":[],"plysinside":[],"Keys":[],"Owned":false,"Owner":"","OwnerName":"","setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":90.71163940429688,"maxright":-88.02642059326172,"enabled":true,"rot":{"z":2.7542073726654,"y":2.7045992112562097e-8,"x":-9.43104267120361}},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Name":"1076 Procopio Dr","Interior":"low-end"},{"Locked":false,"Price":25000,"Entrance":{"z":29.07,"y":6260.23,"x":-448.02},"furniture":[],"plysinside":[],"Keys":[],"Owned":false,"Owner":"","OwnerName":"","setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":-113.61099243164064,"maxright":70.65039825439453,"enabled":true,"rot":{"z":162.9940643310547,"y":-0.0,"x":3.75689458847045}},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Name":"1075 Procopio Dr","Interior":"low-end"},{"Locked":false,"Owned":false,"Entrance":{"z":27.96,"y":6314.13,"x":-407.35},"furniture":[],"plysinside":[],"Price":25000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":-54.77568435668945,"maxright":135.13072204589845,"enabled":true,"rot":{"z":-138.95835876464845,"y":-0.0,"x":-1.16786921024322}},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Name":"1074 Procopio Dr","Interior":"low-end"},{"Locked":false,"Owned":false,"Entrance":{"z":28.86,"y":6341.62,"x":-368.23},"furniture":[],"plysinside":[],"Price":25000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":-51.56189727783203,"maxright":132.70008850097657,"enabled":true,"rot":{"z":-139.94163513183598,"y":-0.0,"x":-2.56643605232238}},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Name":"1073 Procopio Dr","Interior":"low-end"},{"Locked":false,"Owned":false,"Entrance":{"z":30.52,"y":6400.88,"x":-272.61},"furniture":[],"plysinside":[],"Price":25000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":-65.34387969970703,"maxright":123.2501983642578,"enabled":true,"rot":{"z":-152.39810180664066,"y":-0.0,"x":-7.54235982894897}},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Name":"1071 Procopio Dr","Interior":"low-end"},{"Locked":false,"Owned":false,"Entrance":{"z":30.48,"y":6414.46,"x":-246.14},"furniture":[],"plysinside":[],"Price":25000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":-148.38644409179688,"maxright":38.33782577514648,"enabled":true,"rot":{"z":128.27305603027345,"y":4.379791960218428e-7,"x":-12.92249584197998}},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Name":"1071 Procopio Dr","Interior":"low-end"},{"Locked":false,"Owned":false,"Entrance":{"z":30.22,"y":6445.48,"x":-229.63},"furniture":[],"plysinside":[],"Price":27500,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":-135.48313903808598,"maxright":48.30059432983398,"enabled":true,"rot":{"z":137.8870849609375,"y":2.1444458297992242e-7,"x":-5.53862285614013}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"1070 Procopio Dr","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":28.89,"y":6551.76,"x":-130.8},"furniture":[],"plysinside":[],"Price":27500,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":-46.79578399658203,"maxright":138.85032653808598,"enabled":true,"rot":{"z":-134.93411254882813,"y":1.0691521623584777e-7,"x":3.44796895980834}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"1067 Procopio Dr","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":30.11,"y":6637.3,"x":-41.72},"furniture":[],"plysinside":[],"Price":25000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":-56.39479827880859,"maxright":129.07382202148438,"enabled":true,"rot":{"z":-144.0503692626953,"y":-1.3340336835199196e-8,"x":-0.24611411988735}},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Name":"1065 Procopio Dr","Interior":"low-end"},{"Locked":false,"Owned":false,"Entrance":{"z":30.72,"y":6654.13,"x":-9.62},"furniture":[],"plysinside":[],"Price":25000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":-68.07413482666016,"maxright":116.67019653320313,"enabled":true,"rot":{"z":-155.01153564453126,"y":-1.068413766347477e-7,"x":-2.71219563484191}},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Name":"1064 Procopio Dr","Interior":"low-end"},{"Locked":false,"Owned":false,"Entrance":{"z":30.86,"y":6207.33,"x":-356.82},"furniture":[],"plysinside":[],"Price":25000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":-45.94052505493164,"maxright":135.7574005126953,"enabled":true,"rot":{"z":-133.8831787109375,"y":-0.0,"x":-2.77191710472106}},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Name":"1034 Paleto Blvd","Interior":"low-end"},{"Locked":false,"Owned":false,"Entrance":{"z":30.87,"y":6252.75,"x":-379.92},"furniture":[],"plysinside":[],"Price":25000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":42.09032440185547,"maxright":-131.2773895263672,"enabled":true,"rot":{"z":-40.4444465637207,"y":4.32035335506953e-7,"x":-8.85426330566406}},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Name":"1034 Procopio Dr","Interior":"low-end"},{"Locked":false,"Owned":false,"Entrance":{"z":31.91,"y":6326.99,"x":-302.19},"furniture":[],"plysinside":[],"Price":25000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":133.55870056152345,"maxright":-42.54082870483398,"enabled":true,"rot":{"z":44.16030502319336,"y":-9.440947223993136e-7,"x":-25.26673126220703}},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Name":"1047 Paleto Blvd","Interior":"low-end"},{"Locked":false,"Owned":false,"Entrance":{"z":30.9,"y":6225.21,"x":-347.3},"furniture":[],"plysinside":[],"Price":25000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":-43.60107040405273,"maxright":134.7738800048828,"enabled":true,"rot":{"z":-137.5096435546875,"y":-0.0,"x":-1.57497417926788}},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Name":"1043 Paleto Blvd","Interior":"low-end"},{"Locked":false,"Owned":false,"Entrance":{"z":32.26,"y":6557.45,"x":-15.3},"furniture":[],"plysinside":[],"Price":25000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":43.89247512817383,"maxright":-133.83499145507813,"enabled":true,"rot":{"z":-45.87245941162109,"y":-0.0,"x":-11.80154037475586}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"1059 Paleto Blvd","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":32.1,"y":6568.19,"x":4.43},"furniture":[],"plysinside":[],"Price":27500,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":-139.30752563476566,"maxright":44.53319549560547,"enabled":true,"rot":{"z":129.4863433837891,"y":2.144746105159357e-7,"x":-5.62087059020996}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"1061 Paleto Blvd","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":31.84,"y":6596.46,"x":31.0},"furniture":[],"plysinside":[],"Price":27500,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":-43.43285751342773,"maxright":-159.96804809570313,"enabled":true,"rot":{"z":-94.7632293701172,"y":-0.0,"x":-5.83577966690063}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"1061 Paleto Blvd","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":42.9,"y":4642.33,"x":1725.06},"furniture":[],"plysinside":[],"Price":12500,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-63.00457000732422,"y":-0.0,"x":-6.35934734344482}},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Name":"2016 Grapeseed Main St","Interior":"low-end"},{"Locked":false,"Owned":false,"Entrance":{"z":42.39,"y":4658.22,"x":1674.01},"furniture":[],"plysinside":[],"Price":12500,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":91.53390502929688,"y":2.7858778395284394e-8,"x":-16.72389602661132}},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Name":"2015 Grapeseed Main St","Interior":"low-end"},{"Locked":false,"Owned":false,"Entrance":{"z":42.68,"y":4677.34,"x":1718.91},"furniture":[],"plysinside":[],"Price":7500,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-93.13695526123049,"y":-0.0,"x":-29.83987236022949}},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Name":"2014 Grapeseed Main St","Interior":"low-end"},{"Locked":false,"Owned":false,"Entrance":{"z":42.09,"y":4689.52,"x":1682.85},"furniture":[],"plysinside":[],"Price":7500,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":91.7155303955078,"y":-0.0,"x":-6.32857131958007}},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Name":"2013 Grapeseed Main St","Interior":"low-end"},{"Locked":false,"Owned":false,"Entrance":{"z":41.03,"y":4739.5,"x":1664.0},"furniture":[],"plysinside":[],"Price":10000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":110.03758239746094,"y":-0.0,"x":-18.96443367004394}},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Name":"2011 Grapeseed Main St","Interior":"low-end"},{"Locked":false,"Owned":false,"Entrance":{"z":32.23,"y":3920.59,"x":1880.27},"furniture":[],"plysinside":[],"Price":10000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-77.30774688720703,"y":-0.0,"x":-14.36374378204345}},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Name":"3012 Niland Ave","Interior":"low-end"},{"Locked":false,"Owned":false,"Entrance":{"z":32.48,"y":3914.59,"x":1846.06},"furniture":[],"plysinside":[],"Price":9000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":103.60260009765624,"y":-2.1725810483985698e-7,"x":-10.75266551971435}},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Name":"3013 Niland Ave","Interior":"low-end"},{"Locked":false,"Owned":false,"Entrance":{"z":36.08,"y":3913.8,"x":1803.57},"furniture":[],"plysinside":[],"Price":11500,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-76.59026336669922,"y":-0.0,"x":-20.23343658447265}},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Name":"3013 Marina Dr","Interior":"low-end"},{"Locked":false,"Owned":false,"Entrance":{"z":33.45,"y":3657.13,"x":1435.31},"furniture":[],"plysinside":[],"Price":11500,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":95.02767944335938,"y":-0.0,"x":-5.87784767150878}},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Name":"3025 Lesbos Ln","Interior":"low-end"},{"Locked":false,"Owned":false,"Entrance":{"z":43.5,"y":2607.8,"x":471.15},"furniture":[],"plysinside":[],"Price":12500,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-166.2356719970703,"y":-0.0,"x":-20.86568069458007}},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Name":"4018 Route 68","Interior":"low-end"},{"Locked":false,"Owned":false,"Entrance":{"z":42.28,"y":3087.1,"x":181.03},"furniture":[],"plysinside":[],"Price":7500,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-93.07178497314452,"y":-0.0,"x":-11.2086534500122}},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Name":"4013 Joshua Rd","Interior":"low-end"},{"Locked":false,"Owned":false,"Entrance":{"z":73.50999999999999,"y":-593.38,"x":1386.22},"furniture":[],"plysinside":[],"Price":45000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-127.72049713134766,"y":-0.0,"x":-9.48588275909423}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7340 Nikola Pl","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":73.52,"y":-569.49,"x":1388.94},"furniture":[],"plysinside":[],"Price":45000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-69.5700912475586,"y":-0.0,"x":-9.84068393707275}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7341 Nikola Pl","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":73.71,"y":-555.82,"x":1373.19},"furniture":[],"plysinside":[],"Price":4500,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-114.24230194091796,"y":-0.0,"x":-12.52571487426757}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7341 Nikola Pl","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":73.72999999999999,"y":-606.62,"x":1367.33},"furniture":[],"plysinside":[],"Price":45000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-177.74884033203126,"y":-0.0,"x":-10.93433380126953}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7340 Nikola Pl","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":73.72,"y":-597.26,"x":1341.64},"furniture":[],"plysinside":[],"Price":45000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":62.37366104125976,"y":-0.0,"x":-17.39539337158203}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7339 Nikola Pl","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":72.91,"y":-546.97,"x":1348.31},"furniture":[],"plysinside":[],"Price":45000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-27.96370315551757,"y":4.342483350683324e-7,"x":-10.56496334075927}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7342 Nikola Pl","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":72.27,"y":-583.06,"x":1323.3},"furniture":[],"plysinside":[],"Price":45000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":152.2796173095703,"y":4.441767487151084e-7,"x":-16.03893852233886}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7339 Nikola Pl","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":71.46,"y":-535.91,"x":1328.57},"furniture":[],"plysinside":[],"Price":45000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-111.59012603759766,"y":-0.00000144736395,"x":-53.85140228271484}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7342 Nikola Pl","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":70.75,"y":-574.08,"x":1301.02},"furniture":[],"plysinside":[],"Price":45000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":164.71957397460938,"y":4.6078031346041828e-7,"x":-22.11302947998047}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7339 Nikola Pl","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":70.47999999999999,"y":-527.3,"x":1303.1},"furniture":[],"plysinside":[],"Price":45000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-19.26140213012695,"y":4.363083689895575e-7,"x":-11.92860603332519}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7342 Nikola Pl","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":56.84,"y":-729.5,"x":996.89},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":125.62109375,"y":-0.0,"x":-58.0705451965332}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7322 West Mirror Drive","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":57.24,"y":-716.31,"x":979.11},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":131.13587951660157,"y":-0.0,"x":-15.06083393096923}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7320 West Mirror Drive","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":57.5,"y":-701.3,"x":970.88},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":170.76788330078126,"y":3.3350637806961464e-9,"x":-0.14884614944458}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7320 West Mirror Drive","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":57.47,"y":-669.85,"x":960.15},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":115.8887939453125,"y":4.346124455878453e-7,"x":-10.81925582885742}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7319 West Mirror Drive","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":57.45,"y":-653.51,"x":943.45},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":38.34314727783203,"y":0.00000168464464,"x":-59.54927444458008}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7319 West Mirror Drive","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":58.26,"y":-627.65,"x":980.25},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-144.15000915527345,"y":-0.0,"x":-36.16230392456055}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7318 West Mirror Drive","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":57.26,"y":-639.71,"x":928.82},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":137.4777984619141,"y":-0.0,"x":-15.65773868560791}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7317 West Mirror Drive","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":57.47,"y":-615.51,"x":902.95},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":46.20460510253906,"y":-0.00000160100864,"x":-57.77318572998047}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7317 West Mirror Drive","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":57.47,"y":-608.21,"x":886.77},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":138.07872009277345,"y":-8.718344588487525e-7,"x":-11.68268966674804}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7316 West Mirror Drive","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":57.18,"y":-583.65,"x":861.7},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-176.59844970703126,"y":-0.0,"x":-3.38041257858276}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7316 West Mirror Drive","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":57.01,"y":-562.66,"x":844.12},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":12.50613498687744,"y":-2.1754524937023245e-7,"x":-11.14390087127685}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7312 West Mirror Drive","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":56.95,"y":-532.68,"x":850.25},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":85.02394104003906,"y":-5.362977262279856e-8,"x":-5.74017667770385}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7314 West Mirror Drive","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":56.74,"y":-508.98,"x":861.51},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":46.49221038818359,"y":0.00000154111978,"x":-56.35844421386719}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7313 West Mirror Drive","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":57.11000000000001,"y":-497.87,"x":878.44},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":44.91729354858398,"y":-0.0,"x":-64.80823516845703}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7313 West Mirror Drive","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":58.46,"y":-489.76,"x":906.46},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":19.29909515380859,"y":-0.0,"x":-14.44456386566162}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7311 West Mirror Drive","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":60.1,"y":-477.8,"x":921.78},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-8.25692367553711,"y":-0.0,"x":-19.33738899230957}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7311 West Mirror Drive","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":60.57,"y":-463.17,"x":944.54},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-55.23443603515625,"y":-8.953837777880835e-7,"x":-17.53591918945312}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7309 West Mirror Drive","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":61.81,"y":-451.65,"x":967.16},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":33.32376480102539,"y":8.936335120779404e-7,"x":-17.17726707458496}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7309 West Mirror Drive","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":63.06000000000001,"y":-433.03,"x":987.57},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":34.80197525024414,"y":8.771137913754501e-7,"x":-13.24740600585937}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7307 West Mirror Drive","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":64.36999999999999,"y":-423.38,"x":1010.38},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":123.14452362060549,"y":-4.402644719903037e-7,"x":-14.16050624847412}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7307 West Mirror Drive","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":65.36,"y":-408.36,"x":1028.78},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":41.270263671875,"y":-4.386202476780454e-7,"x":-13.28245830535888}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7305 West Mirror Drive","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":67.25,"y":-378.13,"x":1060.52},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":54.3464241027832,"y":-8.817532943794504e-7,"x":-14.47243404388427}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7305 Bridge St","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":63.52,"y":-469.3,"x":1014.67},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-144.52737426757813,"y":-9.047982416632294e-7,"x":-19.33366966247558}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7306 West Mirror Drive","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":61.16,"y":-502.36,"x":970.55},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-107.44925689697266,"y":-0.0,"x":-8.07564449310302}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7308 West Mirror Drive","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":59.64,"y":-518.94,"x":945.9},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":119.70294189453124,"y":-0.0,"x":-61.49639892578125}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7310 West Mirror Drive","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":58.81,"y":-526.05,"x":924.39},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-151.43536376953126,"y":-0.0,"x":-17.66978073120117}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7312 West Mirror Drive","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":57.53,"y":-540.58,"x":893.24},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-69.45809936523438,"y":-9.24586970540986e-7,"x":-22.57007217407226}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7312 West Mirror Drive","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":57.39,"y":-569.56,"x":919.7},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":28.74713134765625,"y":4.412431167111208e-7,"x":-14.65564727783203}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7312 Nikola Ave","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":58.75,"y":-541.93,"x":965.25},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":32.70853805541992,"y":-4.381802227726439e-7,"x":-13.03651428222656}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7310 Nikola Ave","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":59.71,"y":-525.76,"x":987.84},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":30.89822769165039,"y":9.366781910102872e-7,"x":-24.28778457641601}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7310 Nikola Ave","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":60.01,"y":-510.98,"x":1006.48},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-65.29899597167969,"y":-0.0,"x":-16.08703422546386}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7308 Nikola Ave","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":63.1,"y":-498.06,"x":1046.29},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":144.13137817382813,"y":9.091479000744585e-7,"x":-20.10037040710449}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7306 Bridge St","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":63.32,"y":-470.58,"x":1051.04},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":76.4620132446289,"y":-0.0,"x":-11.98972129821777}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7306 Bridge St","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":65.28,"y":-448.93,"x":1056.24},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":162.82366943359376,"y":-0.0,"x":-8.78071689605712}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7306 Bridge St","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":64.67999999999999,"y":-484.37,"x":1090.46},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-102.9858856201172,"y":-4.4310172597761268e-7,"x":-15.54805183410644}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7344 Bridge St","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":66.33999999999999,"y":-464.52,"x":1098.58},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-15.62946987152099,"y":2.17306606487e-7,"x":-10.81984233856201}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7346 Bridge St","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":66.81,"y":-438.69,"x":1099.44},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":179.49822998046876,"y":-0.0,"x":-11.32894706726074}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7346 Bridge St","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":66.58,"y":-411.33,"x":1101.06},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-93.88529205322266,"y":-5.391471091797939e-8,"x":-8.21971225738525}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7348 Bridge St","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":67.97,"y":-391.27,"x":1114.44},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-112.49811553955078,"y":-0.0,"x":-24.5419979095459}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7348 West Mirror Drive","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":69.03999999999999,"y":-429.86,"x":1262.35},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":112.37248229980468,"y":-2.144359569911103e-7,"x":-5.51487922668457}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7345 East Mirror Dr","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":69.53999999999999,"y":-458.06,"x":1265.74},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":94.98734283447266,"y":-0.0,"x":-14.86165904998779}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7945 East Mirror Dr","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":69.21,"y":-480.18,"x":1259.51},"furniture":[],"plysinside":[],"garage":{"enabled":false,"StoredVehicles":[]},"Owner":"","Price":40000,"setName":"","Keys":[],"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":125.15465545654296,"y":-0.0,"x":-10.50986766815185}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7343 East Mirror Dr","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":68.92999999999999,"y":-494.1,"x":1251.53},"furniture":[],"plysinside":[],"garage":{"enabled":false,"StoredVehicles":[]},"Owner":"","Price":40000,"setName":"","Keys":[],"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":63.34117126464844,"y":-0.0,"x":-16.31183433532715}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7343 East Mirror Dr","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":68.36999999999999,"y":-515.5,"x":1250.9},"furniture":[],"plysinside":[],"garage":{"enabled":false,"StoredVehicles":[]},"Owner":"","Price":40000,"setName":"","Keys":[],"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":77.79755401611328,"y":-0.0,"x":-17.28229522705078}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7343 East Mirror Dr","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":68.67999999999999,"y":-566.43,"x":1241.53},"furniture":[],"plysinside":[],"garage":{"enabled":false,"StoredVehicles":[]},"Owner":"","Price":40000,"setName":"","Keys":[],"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":130.3302459716797,"y":-0.0,"x":-22.43321228027343}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7338 East Mirror Dr","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":68.8,"y":-601.65,"x":1240.54},"furniture":[],"plysinside":[],"garage":{"enabled":false,"StoredVehicles":[]},"Owner":"","Price":40000,"setName":"","Keys":[],"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":91.53223419189452,"y":-1.3435412782314417e-8,"x":-6.82489442825317}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7338 East Mirror Dr","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":68.58999999999999,"y":-620.99,"x":1250.79},"furniture":[],"plysinside":[],"garage":{"enabled":false,"StoredVehicles":[]},"Price":40000,"Owner":"","OwnerName":"","setName":"","Keys":[],"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":27.77294158935547,"y":-2.145688853261163e-7,"x":-5.87094974517822}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7336 East Mirror Dr","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":67.14,"y":-648.63,"x":1265.69},"furniture":[],"plysinside":[],"garage":{"enabled":false,"StoredVehicles":[]},"Owner":"","Price":40000,"setName":"","Keys":[],"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-152.5341949462891,"y":-0.0,"x":-14.65502071380615}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7333 East Mirror Dr","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":65.05,"y":-683.53,"x":1270.98},"furniture":[],"plysinside":[],"garage":{"enabled":false,"StoredVehicles":[]},"Owner":"","Price":40000,"setName":"","Keys":[],"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-171.3050994873047,"y":-0.0,"x":-12.5356969833374}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7333 East Mirror Dr","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":63.93,"y":-702.82,"x":1264.75},"furniture":[],"plysinside":[],"garage":{"enabled":false,"StoredVehicles":[]},"Owner":"","Price":40000,"setName":"","Keys":[],"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":58.4541015625,"y":0.00000175048376,"x":-12.71638584136962}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7328 East Mirror Dr","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":59.98,"y":-725.27,"x":1229.58},"furniture":[],"plysinside":[],"garage":{"enabled":false,"StoredVehicles":[]},"Owner":"","Price":40000,"setName":"","Keys":[],"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-88.46087646484375,"y":-0.0,"x":-11.09668827056884}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7328 East Mirror Dr","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":59.82,"y":-696.93,"x":1223.0},"furniture":[],"plysinside":[],"garage":{"enabled":false,"StoredVehicles":[]},"Owner":"","Price":40000,"setName":"","Keys":[],"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-81.23240661621094,"y":-0.0,"x":-17.37718200683593}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7328 Mirror Park Blvd","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":62.71,"y":-669.31,"x":1221.46},"furniture":[],"plysinside":[],"garage":{"enabled":false,"StoredVehicles":[]},"Owner":"","Price":40000,"setName":"","Keys":[],"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-164.38833618164066,"y":-0.0,"x":-11.55613040924072}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7333 Mirror Park Blvd","Interior":"mid-end"},{"Locked":false,"Owned":false,"Entrance":{"z":65.46,"y":-620.26,"x":1207.46},"furniture":[],"plysinside":[],"Price":40000,"Owner":"","Keys":[],"setName":"","garage":{"enabled":false,"StoredVehicles":[]},"cctv":{"maxleft":80,"maxright":-20,"enabled":false,"rot":{"z":-87.679443359375,"y":1.3399391818325056e-8,"x":-5.38702487945556}},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Name":"7336 Mirror Park Blvd","Interior":"mid-end"},{"Locked":false,"Price":40000,"Entrance":{"z":67.08,"y":-598.41,"x":1203.75},"furniture":[],"setName":"","Owned":false,"Owner":"","garage":{"enabled":false},"cctv":{"enabled":false,"maxright":-20,"maxleft":80,"rot":{"x":-16.58763313293457,"y":-0.0,"z":3.90023970603942}},"Keys":[],"Interior":"mid-end","positions":{"Storage":{"x":343.86859130859377,"y":-1001.140380859375,"z":-99.19619750976563},"Wardrobe":{"x":350.74249267578127,"y":-994.2987060546875,"z":-99.14720153808594}},"Name":"7338 Mirror Park Blvd","plysinside":[]},{"Locked":false,"Price":40000,"Entrance":{"z":68.16,"y":-575.59,"x":1201.01},"furniture":[],"setName":"","Owned":false,"Owner":"","garage":{"enabled":false},"cctv":{"enabled":false,"maxright":-20,"maxleft":80,"rot":{"x":-20.23956108093261,"y":9.099596240957908e-7,"z":-37.31895446777344}},"Keys":[],"Interior":"mid-end","positions":{"Storage":{"x":343.86859130859377,"y":-1001.140380859375,"z":-99.19619750976563},"Wardrobe":{"x":350.74249267578127,"y":-994.2987060546875,"z":-99.14720153808594}},"Name":"7338 Mirror Park Blvd","plysinside":[]}] \ No newline at end of file +[{"cctv":{"rot":{"z":2.7542073726654,"y":2.7045992112562097e-8,"x":-9.43104267120361},"maxright":-88.02642059326172,"maxleft":90.71163940429688,"enabled":true},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Entrance":{"z":28.57,"y":6206.16,"x":-467.88},"Interior":"low-end","OwnerName":"","Owned":false,"Locked":false,"setName":"","Name":"1076 Procopio Dr","Keys":[],"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":25000},{"cctv":{"rot":{"z":162.9940643310547,"y":-0.0,"x":3.75689458847045},"maxright":70.65039825439453,"maxleft":-113.61099243164064,"enabled":true},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Entrance":{"z":29.07,"y":6260.23,"x":-448.02},"Interior":"low-end","OwnerName":"","Owned":false,"Locked":false,"setName":"","Name":"1075 Procopio Dr","Keys":[],"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":25000},{"cctv":{"rot":{"z":-138.95835876464845,"y":-0.0,"x":-1.16786921024322},"maxright":135.13072204589845,"maxleft":-54.77568435668945,"enabled":true},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Entrance":{"z":27.96,"y":6314.13,"x":-407.35},"Interior":"low-end","Keys":[],"Locked":false,"setName":"","Name":"1074 Procopio Dr","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":25000},{"cctv":{"rot":{"z":-139.94163513183598,"y":-0.0,"x":-2.56643605232238},"maxright":132.70008850097657,"maxleft":-51.56189727783203,"enabled":true},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Entrance":{"z":28.86,"y":6341.62,"x":-368.23},"Interior":"low-end","Keys":[],"Locked":false,"setName":"","Name":"1073 Procopio Dr","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":25000},{"cctv":{"rot":{"z":-152.39810180664066,"y":-0.0,"x":-7.54235982894897},"maxright":123.2501983642578,"maxleft":-65.34387969970703,"enabled":true},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Entrance":{"z":30.52,"y":6400.88,"x":-272.61},"Interior":"low-end","Keys":[],"Locked":false,"setName":"","Name":"1071 Procopio Dr","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":25000},{"cctv":{"rot":{"z":128.27305603027345,"y":4.379791960218428e-7,"x":-12.92249584197998},"maxright":38.33782577514648,"maxleft":-148.38644409179688,"enabled":true},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Entrance":{"z":30.48,"y":6414.46,"x":-246.14},"Interior":"low-end","Keys":[],"Locked":false,"setName":"","Name":"1071 Procopio Dr","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":25000},{"cctv":{"rot":{"z":137.8870849609375,"y":2.1444458297992242e-7,"x":-5.53862285614013},"maxright":48.30059432983398,"maxleft":-135.48313903808598,"enabled":true},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":30.22,"y":6445.48,"x":-229.63},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"1070 Procopio Dr","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":27500},{"cctv":{"rot":{"z":-134.93411254882813,"y":1.0691521623584777e-7,"x":3.44796895980834},"maxright":138.85032653808598,"maxleft":-46.79578399658203,"enabled":true},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":28.89,"y":6551.76,"x":-130.8},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"1067 Procopio Dr","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":27500},{"cctv":{"rot":{"z":-144.0503692626953,"y":-1.3340336835199196e-8,"x":-0.24611411988735},"maxright":129.07382202148438,"maxleft":-56.39479827880859,"enabled":true},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Entrance":{"z":30.11,"y":6637.3,"x":-41.72},"Interior":"low-end","Keys":[],"Locked":false,"setName":"","Name":"1065 Procopio Dr","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":25000},{"cctv":{"rot":{"z":-155.01153564453126,"y":-1.068413766347477e-7,"x":-2.71219563484191},"maxright":116.67019653320313,"maxleft":-68.07413482666016,"enabled":true},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Entrance":{"z":30.72,"y":6654.13,"x":-9.62},"Interior":"low-end","Keys":[],"Locked":false,"setName":"","Name":"1064 Procopio Dr","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":25000},{"cctv":{"rot":{"z":-133.8831787109375,"y":-0.0,"x":-2.77191710472106},"maxright":135.7574005126953,"maxleft":-45.94052505493164,"enabled":true},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Entrance":{"z":30.86,"y":6207.33,"x":-356.82},"Interior":"low-end","Keys":[],"Locked":false,"setName":"","Name":"1034 Paleto Blvd","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":25000},{"cctv":{"rot":{"z":-40.4444465637207,"y":4.32035335506953e-7,"x":-8.85426330566406},"maxright":-131.2773895263672,"maxleft":42.09032440185547,"enabled":true},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Entrance":{"z":30.87,"y":6252.75,"x":-379.92},"Interior":"low-end","Keys":[],"Locked":false,"setName":"","Name":"1034 Procopio Dr","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":25000},{"cctv":{"rot":{"z":44.16030502319336,"y":-9.440947223993136e-7,"x":-25.26673126220703},"maxright":-42.54082870483398,"maxleft":133.55870056152345,"enabled":true},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Entrance":{"z":31.91,"y":6326.99,"x":-302.19},"Interior":"low-end","Keys":[],"Locked":false,"setName":"","Name":"1047 Paleto Blvd","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":25000},{"cctv":{"rot":{"z":-137.5096435546875,"y":-0.0,"x":-1.57497417926788},"maxright":134.7738800048828,"maxleft":-43.60107040405273,"enabled":true},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Entrance":{"z":30.9,"y":6225.21,"x":-347.3},"Interior":"low-end","Keys":[],"Locked":false,"setName":"","Name":"1043 Paleto Blvd","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":25000},{"cctv":{"rot":{"z":-45.87245941162109,"y":-0.0,"x":-11.80154037475586},"maxright":-133.83499145507813,"maxleft":43.89247512817383,"enabled":true},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":32.26,"y":6557.45,"x":-15.3},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"1059 Paleto Blvd","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":25000},{"cctv":{"rot":{"z":129.4863433837891,"y":2.144746105159357e-7,"x":-5.62087059020996},"maxright":44.53319549560547,"maxleft":-139.30752563476566,"enabled":true},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":32.1,"y":6568.19,"x":4.43},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"1061 Paleto Blvd","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":27500},{"cctv":{"rot":{"z":-94.7632293701172,"y":-0.0,"x":-5.83577966690063},"maxright":-159.96804809570313,"maxleft":-43.43285751342773,"enabled":true},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":31.84,"y":6596.46,"x":31.0},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"1061 Paleto Blvd","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":27500},{"cctv":{"rot":{"z":-63.00457000732422,"y":-0.0,"x":-6.35934734344482},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Entrance":{"z":42.9,"y":4642.33,"x":1725.06},"Interior":"low-end","Keys":[],"Locked":false,"setName":"","Name":"2016 Grapeseed Main St","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":12500},{"cctv":{"rot":{"z":91.53390502929688,"y":2.7858778395284394e-8,"x":-16.72389602661132},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Entrance":{"z":42.39,"y":4658.22,"x":1674.01},"Interior":"low-end","Keys":[],"Locked":false,"setName":"","Name":"2015 Grapeseed Main St","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":12500},{"cctv":{"rot":{"z":-93.13695526123049,"y":-0.0,"x":-29.83987236022949},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Entrance":{"z":42.68,"y":4677.34,"x":1718.91},"Interior":"low-end","Keys":[],"Locked":false,"setName":"","Name":"2014 Grapeseed Main St","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":7500},{"cctv":{"rot":{"z":91.7155303955078,"y":-0.0,"x":-6.32857131958007},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Entrance":{"z":42.09,"y":4689.52,"x":1682.85},"Interior":"low-end","Keys":[],"Locked":false,"setName":"","Name":"2013 Grapeseed Main St","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":7500},{"cctv":{"rot":{"z":110.03758239746094,"y":-0.0,"x":-18.96443367004394},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Entrance":{"z":41.03,"y":4739.5,"x":1664.0},"Interior":"low-end","Keys":[],"Locked":false,"setName":"","Name":"2011 Grapeseed Main St","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":10000},{"cctv":{"rot":{"z":-77.30774688720703,"y":-0.0,"x":-14.36374378204345},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Entrance":{"z":32.23,"y":3920.59,"x":1880.27},"Interior":"low-end","Keys":[],"Locked":false,"setName":"","Name":"3012 Niland Ave","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":10000},{"cctv":{"rot":{"z":103.60260009765624,"y":-2.1725810483985698e-7,"x":-10.75266551971435},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Entrance":{"z":32.48,"y":3914.59,"x":1846.06},"Interior":"low-end","Keys":[],"Locked":false,"setName":"","Name":"3013 Niland Ave","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":9000},{"cctv":{"rot":{"z":-76.59026336669922,"y":-0.0,"x":-20.23343658447265},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Entrance":{"z":36.08,"y":3913.8,"x":1803.57},"Interior":"low-end","Keys":[],"Locked":false,"setName":"","Name":"3013 Marina Dr","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":11500},{"cctv":{"rot":{"z":95.02767944335938,"y":-0.0,"x":-5.87784767150878},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Entrance":{"z":33.45,"y":3657.13,"x":1435.31},"Interior":"low-end","Keys":[],"Locked":false,"setName":"","Name":"3025 Lesbos Ln","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":11500},{"cctv":{"rot":{"z":-166.2356719970703,"y":-0.0,"x":-20.86568069458007},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Entrance":{"z":43.5,"y":2607.8,"x":471.15},"Interior":"low-end","Keys":[],"Locked":false,"setName":"","Name":"4018 Route 68","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":12500},{"cctv":{"rot":{"z":-93.07178497314452,"y":-0.0,"x":-11.2086534500122},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.00859832763672,"y":-1003.45947265625,"x":259.9942932128906}},"Entrance":{"z":42.28,"y":3087.1,"x":181.03},"Interior":"low-end","Keys":[],"Locked":false,"setName":"","Name":"4013 Joshua Rd","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":7500},{"cctv":{"rot":{"z":-127.72049713134766,"y":-0.0,"x":-9.48588275909423},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":73.50999999999999,"y":-593.38,"x":1386.22},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7340 Nikola Pl","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":45000},{"cctv":{"rot":{"z":-69.5700912475586,"y":-0.0,"x":-9.84068393707275},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":73.52,"y":-569.49,"x":1388.94},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7341 Nikola Pl","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":45000},{"cctv":{"rot":{"z":-114.24230194091796,"y":-0.0,"x":-12.52571487426757},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":73.71,"y":-555.82,"x":1373.19},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7341 Nikola Pl","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":4500},{"cctv":{"rot":{"z":-177.74884033203126,"y":-0.0,"x":-10.93433380126953},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":73.72999999999999,"y":-606.62,"x":1367.33},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7340 Nikola Pl","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":45000},{"cctv":{"rot":{"z":62.37366104125976,"y":-0.0,"x":-17.39539337158203},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":73.72,"y":-597.26,"x":1341.64},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7339 Nikola Pl","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":45000},{"cctv":{"rot":{"z":-27.96370315551757,"y":4.342483350683324e-7,"x":-10.56496334075927},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":72.91,"y":-546.97,"x":1348.31},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7342 Nikola Pl","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":45000},{"cctv":{"rot":{"z":152.2796173095703,"y":4.441767487151084e-7,"x":-16.03893852233886},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":72.27,"y":-583.06,"x":1323.3},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7339 Nikola Pl","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":45000},{"cctv":{"rot":{"z":-111.59012603759766,"y":-0.00000144736395,"x":-53.85140228271484},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":71.46,"y":-535.91,"x":1328.57},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7342 Nikola Pl","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":45000},{"cctv":{"rot":{"z":164.71957397460938,"y":4.6078031346041828e-7,"x":-22.11302947998047},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":70.75,"y":-574.08,"x":1301.02},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7339 Nikola Pl","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":45000},{"cctv":{"rot":{"z":-19.26140213012695,"y":4.363083689895575e-7,"x":-11.92860603332519},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":70.47999999999999,"y":-527.3,"x":1303.1},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7342 Nikola Pl","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":45000},{"cctv":{"rot":{"z":125.62109375,"y":-0.0,"x":-58.0705451965332},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":56.84,"y":-729.5,"x":996.89},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7322 West Mirror Drive","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":131.13587951660157,"y":-0.0,"x":-15.06083393096923},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":57.24,"y":-716.31,"x":979.11},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7320 West Mirror Drive","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":170.76788330078126,"y":3.3350637806961464e-9,"x":-0.14884614944458},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":57.5,"y":-701.3,"x":970.88},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7320 West Mirror Drive","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":115.8887939453125,"y":4.346124455878453e-7,"x":-10.81925582885742},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":57.47,"y":-669.85,"x":960.15},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7319 West Mirror Drive","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":38.34314727783203,"y":0.00000168464464,"x":-59.54927444458008},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":57.45,"y":-653.51,"x":943.45},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7319 West Mirror Drive","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":-144.15000915527345,"y":-0.0,"x":-36.16230392456055},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":58.26,"y":-627.65,"x":980.25},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7318 West Mirror Drive","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":137.4777984619141,"y":-0.0,"x":-15.65773868560791},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":57.26,"y":-639.71,"x":928.82},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7317 West Mirror Drive","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":46.20460510253906,"y":-0.00000160100864,"x":-57.77318572998047},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":57.47,"y":-615.51,"x":902.95},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7317 West Mirror Drive","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":138.07872009277345,"y":-8.718344588487525e-7,"x":-11.68268966674804},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":57.47,"y":-608.21,"x":886.77},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7316 West Mirror Drive","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":-176.59844970703126,"y":-0.0,"x":-3.38041257858276},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":57.18,"y":-583.65,"x":861.7},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7316 West Mirror Drive","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":12.50613498687744,"y":-2.1754524937023245e-7,"x":-11.14390087127685},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":57.01,"y":-562.66,"x":844.12},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7312 West Mirror Drive","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":85.02394104003906,"y":-5.362977262279856e-8,"x":-5.74017667770385},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":56.95,"y":-532.68,"x":850.25},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7314 West Mirror Drive","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":46.49221038818359,"y":0.00000154111978,"x":-56.35844421386719},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":56.74,"y":-508.98,"x":861.51},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7313 West Mirror Drive","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":44.91729354858398,"y":-0.0,"x":-64.80823516845703},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":57.11000000000001,"y":-497.87,"x":878.44},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7313 West Mirror Drive","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":19.29909515380859,"y":-0.0,"x":-14.44456386566162},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":58.46,"y":-489.76,"x":906.46},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7311 West Mirror Drive","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":-8.25692367553711,"y":-0.0,"x":-19.33738899230957},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":60.1,"y":-477.8,"x":921.78},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7311 West Mirror Drive","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":-55.23443603515625,"y":-8.953837777880835e-7,"x":-17.53591918945312},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":60.57,"y":-463.17,"x":944.54},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7309 West Mirror Drive","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":33.32376480102539,"y":8.936335120779404e-7,"x":-17.17726707458496},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":61.81,"y":-451.65,"x":967.16},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7309 West Mirror Drive","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":34.80197525024414,"y":8.771137913754501e-7,"x":-13.24740600585937},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":63.06000000000001,"y":-433.03,"x":987.57},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7307 West Mirror Drive","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":123.14452362060549,"y":-4.402644719903037e-7,"x":-14.16050624847412},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":64.36999999999999,"y":-423.38,"x":1010.38},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7307 West Mirror Drive","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":41.270263671875,"y":-4.386202476780454e-7,"x":-13.28245830535888},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":65.36,"y":-408.36,"x":1028.78},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7305 West Mirror Drive","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":54.3464241027832,"y":-8.817532943794504e-7,"x":-14.47243404388427},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":67.25,"y":-378.13,"x":1060.52},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7305 Bridge St","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":-144.52737426757813,"y":-9.047982416632294e-7,"x":-19.33366966247558},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":63.52,"y":-469.3,"x":1014.67},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7306 West Mirror Drive","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":-107.44925689697266,"y":-0.0,"x":-8.07564449310302},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":61.16,"y":-502.36,"x":970.55},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7308 West Mirror Drive","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":119.70294189453124,"y":-0.0,"x":-61.49639892578125},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":59.64,"y":-518.94,"x":945.9},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7310 West Mirror Drive","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":-151.43536376953126,"y":-0.0,"x":-17.66978073120117},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":58.81,"y":-526.05,"x":924.39},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7312 West Mirror Drive","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":-69.45809936523438,"y":-9.24586970540986e-7,"x":-22.57007217407226},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":57.53,"y":-540.58,"x":893.24},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7312 West Mirror Drive","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":28.74713134765625,"y":4.412431167111208e-7,"x":-14.65564727783203},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":57.39,"y":-569.56,"x":919.7},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7312 Nikola Ave","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":32.70853805541992,"y":-4.381802227726439e-7,"x":-13.03651428222656},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":58.75,"y":-541.93,"x":965.25},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7310 Nikola Ave","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":30.89822769165039,"y":9.366781910102872e-7,"x":-24.28778457641601},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":59.71,"y":-525.76,"x":987.84},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7310 Nikola Ave","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":-65.29899597167969,"y":-0.0,"x":-16.08703422546386},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":60.01,"y":-510.98,"x":1006.48},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7308 Nikola Ave","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":144.13137817382813,"y":9.091479000744585e-7,"x":-20.10037040710449},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":63.1,"y":-498.06,"x":1046.29},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7306 Bridge St","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":76.4620132446289,"y":-0.0,"x":-11.98972129821777},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":63.32,"y":-470.58,"x":1051.04},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7306 Bridge St","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":162.82366943359376,"y":-0.0,"x":-8.78071689605712},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":65.28,"y":-448.93,"x":1056.24},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7306 Bridge St","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":-102.9858856201172,"y":-4.4310172597761268e-7,"x":-15.54805183410644},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":64.67999999999999,"y":-484.37,"x":1090.46},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7344 Bridge St","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":-15.62946987152099,"y":2.17306606487e-7,"x":-10.81984233856201},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":66.33999999999999,"y":-464.52,"x":1098.58},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7346 Bridge St","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":179.49822998046876,"y":-0.0,"x":-11.32894706726074},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":66.81,"y":-438.69,"x":1099.44},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7346 Bridge St","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":-93.88529205322266,"y":-5.391471091797939e-8,"x":-8.21971225738525},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":66.58,"y":-411.33,"x":1101.06},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7348 Bridge St","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":-112.49811553955078,"y":-0.0,"x":-24.5419979095459},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":67.97,"y":-391.27,"x":1114.44},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7348 West Mirror Drive","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":112.37248229980468,"y":-2.144359569911103e-7,"x":-5.51487922668457},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":69.03999999999999,"y":-429.86,"x":1262.35},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7345 East Mirror Dr","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":94.98734283447266,"y":-0.0,"x":-14.86165904998779},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":69.53999999999999,"y":-458.06,"x":1265.74},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7945 East Mirror Dr","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":125.15465545654296,"y":-0.0,"x":-10.50986766815185},"maxright":-20,"maxleft":80,"enabled":false},"Keys":[],"Entrance":{"z":69.21,"y":-480.18,"x":1259.51},"Interior":"mid-end","Owned":false,"Locked":false,"setName":"","Name":"7343 East Mirror Dr","plysinside":[],"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Price":40000},{"cctv":{"rot":{"z":63.34117126464844,"y":-0.0,"x":-16.31183433532715},"maxright":-20,"maxleft":80,"enabled":false},"Keys":[],"Entrance":{"z":68.92999999999999,"y":-494.1,"x":1251.53},"Interior":"mid-end","Owned":false,"Locked":false,"setName":"","Name":"7343 East Mirror Dr","plysinside":[],"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Price":40000},{"cctv":{"rot":{"z":77.79755401611328,"y":-0.0,"x":-17.28229522705078},"maxright":-20,"maxleft":80,"enabled":false},"Keys":[],"Entrance":{"z":68.36999999999999,"y":-515.5,"x":1250.9},"Interior":"mid-end","Owned":false,"Locked":false,"setName":"","Name":"7343 East Mirror Dr","plysinside":[],"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Price":40000},{"cctv":{"rot":{"z":130.3302459716797,"y":-0.0,"x":-22.43321228027343},"maxright":-20,"maxleft":80,"enabled":false},"Keys":[],"Entrance":{"z":68.67999999999999,"y":-566.43,"x":1241.53},"Interior":"mid-end","Owned":false,"Locked":false,"setName":"","Name":"7338 East Mirror Dr","plysinside":[],"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Price":40000},{"cctv":{"rot":{"z":91.53223419189452,"y":-1.3435412782314417e-8,"x":-6.82489442825317},"maxright":-20,"maxleft":80,"enabled":false},"Keys":[],"Entrance":{"z":68.8,"y":-601.65,"x":1240.54},"Interior":"mid-end","Owned":false,"Locked":false,"setName":"","Name":"7338 East Mirror Dr","plysinside":[],"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Price":40000},{"cctv":{"rot":{"z":27.77294158935547,"y":-2.145688853261163e-7,"x":-5.87094974517822},"maxright":-20,"maxleft":80,"enabled":false},"Keys":[],"Entrance":{"z":68.58999999999999,"y":-620.99,"x":1250.79},"Interior":"mid-end","OwnerName":"","Owned":false,"Locked":false,"setName":"","Name":"7336 East Mirror Dr","plysinside":[],"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Price":40000},{"cctv":{"rot":{"z":-152.5341949462891,"y":-0.0,"x":-14.65502071380615},"maxright":-20,"maxleft":80,"enabled":false},"Keys":[],"Entrance":{"z":67.14,"y":-648.63,"x":1265.69},"Interior":"mid-end","Owned":false,"Locked":false,"setName":"","Name":"7333 East Mirror Dr","plysinside":[],"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Price":40000},{"cctv":{"rot":{"z":-171.3050994873047,"y":-0.0,"x":-12.5356969833374},"maxright":-20,"maxleft":80,"enabled":false},"Keys":[],"Entrance":{"z":65.05,"y":-683.53,"x":1270.98},"Interior":"mid-end","Owned":false,"Locked":false,"setName":"","Name":"7333 East Mirror Dr","plysinside":[],"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Price":40000},{"cctv":{"rot":{"z":58.4541015625,"y":0.00000175048376,"x":-12.71638584136962},"maxright":-20,"maxleft":80,"enabled":false},"Keys":[],"Entrance":{"z":63.93,"y":-702.82,"x":1264.75},"Interior":"mid-end","Owned":false,"Locked":false,"setName":"","Name":"7328 East Mirror Dr","plysinside":[],"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Price":40000},{"cctv":{"rot":{"z":-88.46087646484375,"y":-0.0,"x":-11.09668827056884},"maxright":-20,"maxleft":80,"enabled":false},"Keys":[],"Entrance":{"z":59.98,"y":-725.27,"x":1229.58},"Interior":"mid-end","Owned":false,"Locked":false,"setName":"","Name":"7328 East Mirror Dr","plysinside":[],"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Price":40000},{"cctv":{"rot":{"z":-81.23240661621094,"y":-0.0,"x":-17.37718200683593},"maxright":-20,"maxleft":80,"enabled":false},"Keys":[],"Entrance":{"z":59.82,"y":-696.93,"x":1223.0},"Interior":"mid-end","Owned":false,"Locked":false,"setName":"","Name":"7328 Mirror Park Blvd","plysinside":[],"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Price":40000},{"cctv":{"rot":{"z":-164.38833618164066,"y":-0.0,"x":-11.55613040924072},"maxright":-20,"maxleft":80,"enabled":false},"Keys":[],"Entrance":{"z":62.71,"y":-669.31,"x":1221.46},"Interior":"mid-end","Owned":false,"Locked":false,"setName":"","Name":"7333 Mirror Park Blvd","plysinside":[],"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Price":40000},{"cctv":{"rot":{"z":-87.679443359375,"y":1.3399391818325056e-8,"x":-5.38702487945556},"maxright":-20,"maxleft":80,"enabled":false},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Entrance":{"z":65.46,"y":-620.26,"x":1207.46},"Interior":"mid-end","Keys":[],"Locked":false,"setName":"","Name":"7336 Mirror Park Blvd","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"plysinside":[],"Price":40000},{"cctv":{"rot":{"z":3.90023970603942,"y":-0.0,"x":-16.58763313293457},"maxright":-20,"maxleft":80,"enabled":false},"Keys":[],"Entrance":{"z":67.08,"y":-598.41,"x":1203.75},"Interior":"mid-end","plysinside":[],"Locked":false,"setName":"","Name":"7338 Mirror Park Blvd","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Price":40000},{"cctv":{"rot":{"z":-37.31895446777344,"y":9.099596240957908e-7,"x":-20.23956108093261},"maxright":-20,"maxleft":80,"enabled":false},"Keys":[],"Entrance":{"z":68.16,"y":-575.59,"x":1201.01},"Interior":"mid-end","plysinside":[],"Locked":false,"setName":"","Name":"7338 Mirror Park Blvd","Owned":false,"furniture":[],"Owner":"","garage":{"enabled":false,"StoredVehicles":[]},"positions":{"Wardrobe":{"z":-99.14720153808594,"y":-994.2987060546876,"x":350.7424926757813}},"Price":40000}] \ No newline at end of file