0% found this document useful (0 votes)
27 views

Message 2

Uploaded by

Yxelf Flexy
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
27 views

Message 2

Uploaded by

Yxelf Flexy
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 29

local func = {};

local screen = {guiGetScreenSize()};


local cache = {
opensans = dxCreateFont("files/fonts/opensans.ttf",12);
opensans2 = dxCreateFont("files/fonts/opensans.ttf",14);
OpenSansB = dxCreateFont("files/fonts/OpenSansB.ttf",12);
OpenSansB2 = dxCreateFont("files/fonts/OpenSansB.ttf",15);
OpenSansEB = dxCreateFont("files/fonts/OpenSansEB.ttf",12);
OpenSansEB2 = dxCreateFont("files/fonts/OpenSansEB.ttf",15);
menu = 1;
menuPoint = 0;
menuType = 1;
selected = 0;
selectedDoor = 0;
shader = "";
models = {
wall = 16271;
walldoor = 9104;
bigwall = 7983;
floor2 = 11531;
floor4 = 16010;
floor8 = 16230;
halfwall = 8412;
};
doors = {
{1505}; --blue
};
hover = {
door = nil;
object = nil;
};
wheel = 0;
move = {
progress = 0;
door = {
state = "";
};
};
wall = {
cash = 0;
};
};
local objectCache = {};
local interiorObjects = {};
texturedObjects = {};

local specularPower = 10;


local effectMaxDistance = 50;
local isPostAura = true;

local sx, sy = guiGetScreenSize ();


local myRT = dxCreateRenderTarget(sx, sy, true);
local pwEffectEnabled = false;
local wallShader = {};
local shaders = {};
local renderCache = {};
local notTriggered = {};

function Object:createOutline(color)
if not shaders[self] then
shaders[self] = DxShader("files/fx/post_edge.fx", 1, effectMaxDistance,
true, "object")
end
if (shaders[self]) then
shaders[self]:setValue("sTex0", myRT)
shaders[self]:setValue("sRes", sx, sy)

pwEffectEnabled = true
if not wallShader[self] then
wallShader[self] = DxShader("files/fx/outlineMrt.fx", 1,
effectMaxDistance, true, "object")
end

if not wallShader[self] then


return false, "hiba -> nincs elég memória shaderre"
end
if not myRT then
return false, "hiba -> nincs rendertarget"
end
wallShader[self]:setValue("secondRT", myRT)
wallShader[self]:setValue("sColorizePed", {color[1]/255, color[2]/255,
color[3]/255, color[4]/255})
wallShader[self]:setValue("sSpecularPower", specularPower)
wallShader[self]:applyToWorldTexture("*", self)
--
engineRemoveShaderFromWorldTexture(wallShader[self],"muzzle_texture*", self) --
sztem ide ez nem kell
return true
end
end

function Object:destroyOutline()
if wallShader[self] then
wallShader[self]:removeFromWorldTexture("*" , self)
wallShader[self]:destroy()
wallShader[self] = nil
local c = 0;
for i,v in ipairs(wallShader) do
if v then
c = c + 1
end
end
if c == 0 then
pwEffectEnabled = false
end
end
end

addEventHandler( "onClientPreRender", root,


function()
if not pwEffectEnabled then return end
dxSetRenderTarget( myRT, true )
dxSetRenderTarget()
end
, true, "high" )

addEventHandler( "onClientHUDRender", root,


function()
if not pwEffectEnabled then return end
for i,v in pairs(shaders) do
dxDrawImage( 0, 0, sx, sy, v )
end
end
)

func.start = function()
setElementFrozen(localPlayer,false)
engineImportTXD(engineLoadTXD("files/models/floor.txd"), cache.models.floor4)
engineReplaceModel(engineLoadDFF("files/models/floor.dff",
cache.models.floor4), cache.models.floor4)
engineReplaceCOL(engineLoadCOL ("files/models/floor.col" ),
cache.models.floor4)

engineImportTXD(engineLoadTXD("files/models/wall.txd"), cache.models.wall)
engineReplaceModel(engineLoadDFF("files/models/wall.dff", cache.models.wall),
cache.models.wall)
engineReplaceCOL(engineLoadCOL ("files/models/wall.col" ), cache.models.wall)

engineImportTXD(engineLoadTXD("files/models/wall_door.txd"),
cache.models.walldoor)
engineReplaceModel(engineLoadDFF("files/models/wall_door.dff",
cache.models.walldoor), cache.models.walldoor)
engineReplaceCOL(engineLoadCOL ("files/models/wall_door.col" ),
cache.models.walldoor)

engineImportTXD(engineLoadTXD("files/models/wall_half.txd"),
cache.models.halfwall)
engineReplaceModel(engineLoadDFF("files/models/wall_half.dff",
cache.models.halfwall), cache.models.halfwall)
engineReplaceCOL(engineLoadCOL ("files/models/wall_half.col" ),
cache.models.halfwall)

--default custom 1 int50

if getElementDimension(localPlayer) > 0 then


createInteriorObjects(getElementDimension(localPlayer))
end
if getElementData(localPlayer,"interior:editing") then
-- setElementData(localPlayer,"interior:editing",false);
-- setElementData(localPlayer,"hudVisible",true);
-- showChat(true);
end

end
addEventHandler("onClientResourceStart",resourceRoot,func.start)

func.stop = function()
setElementFrozen(localPlayer,true)
end
addEventHandler("onClientResourceStop",resourceRoot,func.stop)

func.streamIn = function()
if getElementType(source) == "marker" and
getElementData(source,"isIntOutMarker") and getElementData(source,"custom") and
getElementData(source,"custom") > 0 then
createInteriorObjects(getElementDimension(source));
end
if getElementType(source) == "object" and getElementInterior(source) ==
getElementInterior(localPlayer) and getElementDimension(source) ==
getElementDimension(localPlayer) and not objectCache[source] then
objectCache[source] = true;
end
end
addEventHandler("onClientElementStreamIn",getRootElement(),func.streamIn)

func.streamOut = function()
if getElementType(source) == "marker" and
getElementData(source,"isIntOutMarker") and getElementData(source,"custom") and
getElementData(source,"custom") > 0 then
destroyInteriorObjects(getElementDimension(source))
end
if getElementType(source) == "object" and objectCache[source] then
objectCache[source] = nil;
end
end
addEventHandler( "onClientElementStreamOut",getRootElement(),func.streamOut)

func.destroy = function()
if getElementType(source) == "object" and objectCache[source] then
objectCache[source] = nil;
end
end
addEventHandler("onClientElementDestroy", getRootElement(),func.destroy)

func.deleteInteriorObjectSync = function(dimension)
for v,k in pairs(objectCache) do
if getElementDimension(v) == dimension then
destroyElement(v)
end
end
end
addEvent("deleteInteriorObjectSync",true)
addEventHandler("deleteInteriorObjectSync",getRootElement(),func.deleteInteriorObje
ctSync)

func.syncUpdateInteriorObjects = function(data)
for k,v in pairs(data) do
if not interiorObjects[v.id] then
interiorObjects[v.id] = {
id = tonumber(v.id);
x = tonumber(v.x);
y = tonumber(v.y);
z = tonumber(v.z);
rx = tonumber(v.rx);
ry = tonumber(v.ry);
rz = tonumber(v.rz);
interior = tonumber(v.interior);
dimension = tonumber(v.dimension);
texture = "";
texID = 0;
model = tonumber(v.model);
type = v.type;
isdefault = false;
defaultdoor = false;
folder1 = "";
folder2 = "";
doorLock = v.doorLock;
};

local object = createObject(v.model,v.x,v.y,v.z,v.rx,v.ry,v.rz);


if not objectCache[object] then
if v.defaultdoor then
setElementData(object,"custom:default:door",true)
setElementData(object,"custom:door:model",v.model)
setElementData(object,"custom:door:pos",
{v.x,v.y,v.z});
setElementCollisionsEnabled(object,false);
end
if v.texture ~= "" then
local folder = "files/textures/"..(v.folder1).."/"..
(v.folder2).."/"..(v.texID)
setElementData(object,"custom:folder",folder)
setObjectTextureC(object,v.texture,folder)
end
setElementData(object,"isCustom",true)
setElementData(object,"custom:dbid",v.id)
setElementData(object,"custom:texture",v.texture)
setElementData(object,"custom:texid",v.texID)
setElementData(object,"custom:default",v.isdefault)
setElementData(object,"custom:type",v.type)
if v.type == "door" then
local pos1 =
object.matrix:transformPosition(Vector3(0.75,-1,1))
local pos2 =
object.matrix:transformPosition(Vector3(0.75,1,1))
setElementData(object,"custom:matrix1",{pos1.x,
pos1.y, pos1.z})
setElementData(object,"custom:matrix2",{pos2.x,
pos2.y, pos2.z})
setElementFrozen(object,v.doorLock)
if v.texID > 0 then
local folder = "files/textures/"..
(v.folder1).."/"..(v.folder2).."/"..(v.texID)
setElementData(object,"custom:folder",folder)
setObjectTextureC(object,v.texture,folder)
end
end
setElementInterior(object,v.interior)
setElementDimension(object,v.dimension)
objectCache[object] = true;
end
end
end
end
addEvent("syncUpdateInteriorObjects",true)
addEventHandler("syncUpdateInteriorObjects",getRootElement(),func.syncUpdateInterio
rObjects)

function createInteriorObjects(dimension)

triggerServerEvent("createInteriorObjectsServer",localPlayer,localPlayer,dimension)
end

function destroyInteriorObjects(dimension)
if getElementData(localPlayer,"interior:editing") then
setElementData(localPlayer,"interior:editing",false);
if cache.hover.object then
cache.hover.object:destroyOutline();
cache.hover.object = nil;
end

cache.selectedDoor = 0;
cache.move.progress = 0;
cache.move.door.state = ""
cache.menu = 1;
cache.menuPoint = 0;
cache.menuType = 1;
if cache.hover.door then
cache.hover.door = nil;
end

end
interiorObjects = {};
for v,k in pairs(objectCache) do
if getElementDimension(v) == dimension then
destroyElement(v)
end
end
end

func.syncClientDoorObject = function(data)
for v,k in pairs(objectCache) do
if getElementData(v,"custom:default:door") then
if getElementData(v,"custom:door:model") ~= data.model then
setElementModel(v,data.model)
setElementData(v,"custom:door:model",data.model)
end
setElementData(v,"custom:door:pos",{data.x,data.y,data.z});
setElementPosition(v,data.x,data.y,data.z)
end
end
end
addEvent("syncClientDoorObject",true)
addEventHandler("syncClientDoorObject",getRootElement(),func.syncClientDoorObject)

function interiorObjectsSync(data)
interiorObjects = data
for k,v in pairs(data) do
local object = createObject(v.model,v.x,v.y,v.z,v.rx,v.ry,v.rz);
if not objectCache[object] then
if v.defaultdoor then
setElementData(object,"custom:default:door",true)
setElementData(object,"custom:door:model",v.model)
setElementData(object,"custom:door:pos",{v.x,v.y,v.z});
setElementCollisionsEnabled(object,false);
end
if v.texture ~= "" then
local folder = "files/textures/"..(v.folder1).."/"..
(v.folder2).."/"..(v.texID)
setElementData(object,"custom:folder",folder)
setObjectTextureC(object,v.texture,folder)
end
setElementData(object,"isCustom",true)
setElementData(object,"custom:dbid",v.id)
setElementData(object,"custom:texture",v.texture)
setElementData(object,"custom:texid",v.texID)
setElementData(object,"custom:default",v.isdefault)
setElementData(object,"custom:type",v.type)
setElementInterior(object,v.interior)
setElementDimension(object,v.dimension)
if v.type == "door" then
local pos1 = object.matrix:transformPosition(Vector3(0.75,-
1,1))
local pos2 =
object.matrix:transformPosition(Vector3(0.75,1,1))
setElementData(object,"custom:matrix1",{pos1.x, pos1.y,
pos1.z})
setElementData(object,"custom:matrix2",{pos2.x, pos2.y,
pos2.z})
setElementFrozen(object,v.doorLock)
--[[if v.texID > 0 then
local folder = "files/textures/"..(v.folder1).."/"..
(v.folder2).."/"..(v.texID)
setElementData(object,"custom:folder",folder)
setObjectTextureC(object,v.texture,folder)
end]]
end
objectCache[object] = true;
end
end
end
addEvent("interiorObjectsSync",true)
addEventHandler("interiorObjectsSync",getRootElement(),interiorObjectsSync)

func.syncWallDoorLock = function(id,state)
if interiorObjects[id].doorLock ~= state then
interiorObjects[id].doorLock = state;
for v,k in pairs(objectCache) do
if getElementData(v,"custom:type") and
getElementData(v,"custom:type") == "door" and getElementData(v,"custom:dbid") == id
then
setElementFrozen(v,state)
if state then
setElementRotation(v,getElementRotation(v))
end
end
end
end
end
addEvent("syncWallDoorLock",true)
addEventHandler("syncWallDoorLock",getRootElement(),func.syncWallDoorLock)

func.getTextureFromDistance = function(object)
local state = "";
local disc =
getDistanceBetweenPoints3D(cache.hover.object.matrix:transformPosition(Vector3(1,0,
0)),localPlayer.position);
local disc2 =
getDistanceBetweenPoints3D(cache.hover.object.matrix:transformPosition(Vector3(-
1,0,0)),localPlayer.position);

if disc > disc2 then


state = "a"
end

if disc2 > disc then


state = "b"
end
return state
end

hoverElement = nil

function isElementMoving (theElement )


if isElement ( theElement ) then -- First
check if the given argument is an element
return Vector3( getElementVelocity( theElement ) ).length ~= 0
end
return false
end

func.render = function()
if cache.hover.object then

end
if getElementDimension(localPlayer) > 0 and
exports["sarp_interiors"]:isInteriorOwner(getElementDimension(localPlayer)) then
for v,k in pairs(objectCache) do
if (getElementModel(v) == 1502 or getElementModel(v) == 1491) and
getElementData(v,"custom:type") == "door" then
local matrix1 =
Vector3(unpack(getElementData(v,"custom:matrix1")))
if matrix1 then
local disc1 =
getDistanceBetweenPoints3D(matrix1,localPlayer.position);
if disc1 <= 0.4 then
dxDrawRectangle(screen[1]/2-30,screen[2]-
200,60,60,tocolor(0,0,0,160))
local locked = getElementData(v,"door:locked")
local lockimage = "open"
if locked then
lockimage = "close"
end
local lockR,lockG,lockB = 255,255,255
if func.inBox(screen[1]/2-24,screen[2]-
194,48,48) then
lockR,lockG,lockB = 124,197,118
end
dxDrawImage(screen[1]/2-24,screen[2]-
194,48,48,"files/images/"..lockimage..".png",0,0,0,tocolor(lockR,lockG,lockB))
end
end

local matrix2 =
Vector3(unpack(getElementData(v,"custom:matrix2")))
if matrix2 then
local disc2 =
getDistanceBetweenPoints3D(matrix2,localPlayer.position);
if disc2 <= 0.4 then
dxDrawRectangle(screen[1]/2-30,screen[2]-
200,60,60,tocolor(0,0,0,160))
local locked = getElementData(v,"door:locked")
local lockimage = "open"
if locked then
lockimage = "close"
end
local lockR,lockG,lockB = 255,255,255
if func.inBox(screen[1]/2-24,screen[2]-
194,48,48) then
lockR,lockG,lockB = 124,197,118
end
dxDrawImage(screen[1]/2-24,screen[2]-
194,48,48,"files/images/"..lockimage..".png",0,0,0,tocolor(lockR,lockG,lockB))
end
end
end
end
end

if getElementData(localPlayer,"interior:editing") then
--showChat(false);
createBlur(screen[1]-195,screen[2]-195-260,195,screen[2],255)
dxDrawRectangle(screen[1]-195,screen[2]-195-
260,195,screen[2],tocolor(22,22,22,220))

for i = 1,#furnitureMenus do
local name = furnitureMenus[i].name;
if func.inBox(screen[1]-10
-dxGetTextWidth(name,1,cache.OpenSansEB),screen[2]-195-275+2+
(i*28),dxGetTextWidth(name,1,cache.OpenSansEB),16) or cache.menu == i then
dxDrawText(name,screen[1]-10,screen[2]-195-275+
(i*28),screen[1]-10,screen[2]-195-275+
(i*28),tocolor(255,255,255,255),1,cache.OpenSansEB,"right","top")
else
dxDrawText(name,screen[1]-10,screen[2]-195-275+
(i*28),screen[1]-10,screen[2]-195-275+
(i*28),tocolor(160,160,160,255),1,cache.OpenSansEB,"right","top")
end
end

if cache.menu == 1 then
if cache.menuPoint > 0 and cache.menuType > 0 then
createBlur(0,screen[2]-195,screen[1]-195,195,255)
dxDrawRectangle(0,screen[2]-195,screen[1]-
195,195,tocolor(22,22,22,220))
dxDrawRectangle(0,screen[2]-195-
46,90,46,tocolor(22,22,22,220))
if func.inBox(8,screen[2]-195-38,30,30) then
dxDrawImage(8,screen[2]-195-
38,30,30,"files/icons/save.png",0,0,0,tocolor(124,197,118,255))
else
dxDrawImage(8,screen[2]-195-
38,30,30,"files/icons/save.png",0,0,0,tocolor(255,255,255,255))
end

if func.inBox(52,screen[2]-195-38,30,30) then
dxDrawImage(52,screen[2]-195-
38,30,30,"files/icons/close.png",0,0,0,tocolor(210,49,49,255))
else
dxDrawImage(52,screen[2]-195-
38,30,30,"files/icons/close.png",0,0,0,tocolor(255,255,255,255))
end

dxDrawRectangle(0,screen[2]-
195,32,195,tocolor(24,24,24,100))
dxDrawRectangle(screen[1]-195-32,screen[2]-
195,32,195,tocolor(24,24,24,100))

if func.inBox(screen[1]-195-32,screen[2]-195,32,195) then
dxDrawImage(screen[1]-225,screen[2]-
108,28,28,"files/icons/arrow.png",0,0,0,tocolor(124,197,118,255))
else
dxDrawImage(screen[1]-225,screen[2]-
108,28,28,"files/icons/arrow.png",0,0,0,tocolor(255,255,255,255))
end

if func.inBox(0,screen[2]-195,32,195) then
dxDrawImage(1,screen[2]-
108,28,28,"files/icons/arrow.png",180,0,0,tocolor(124,197,118,255))
else
dxDrawImage(1,screen[2]-
108,28,28,"files/icons/arrow.png",180,0,0,tocolor(255,255,255,255))
end
end

for i = 1,#furnitureMenus[cache.menu] do
local name = furnitureMenus[cache.menu][i].name;
if func.inBox(screen[1]-97
-dxGetTextWidth(name,1,cache.opensans)/2,screen[2]-195-170+
(i*22),dxGetTextWidth(name,1,cache.opensans),20) or cache.menuPoint == i then
dxDrawText(name,screen[1]-97,screen[2]-195-160+
(i*22),screen[1]-97,screen[2]-195-160+
(i*22),tocolor(124,197,118,255),1,cache.opensans,"center","center")
else
dxDrawText(name,screen[1]-97,screen[2]-195-160+
(i*22),screen[1]-97,screen[2]-195-160+
(i*22),tocolor(255,255,255,255),1,cache.opensans,"center","center")
end
end
if cache.menuPoint > 0 and cache.menuType > 0 then
dxDrawRectangle(screen[1]-98
-dxGetTextWidth(furnitureMenus[cache.menu][cache.menuPoint]
[cache.menuType].typeName,1,cache.OpenSansB2)/2,screen[2]-
218,dxGetTextWidth(furnitureMenus[cache.menu][cache.menuPoint]
[cache.menuType].typeName,1,cache.OpenSansB2),1,tocolor(255,255,255,255))
dxDrawText(furnitureMenus[cache.menu][cache.menuPoint]
[cache.menuType].typeName,screen[1]-98,screen[2]-232,screen[1]-98,screen[2]-
232,tocolor(255,255,255,255),1,cache.OpenSansB2,"center","center")
if func.inBox(screen[1]-35,screen[2]-248,30,30) then
dxDrawImage(screen[1]-35,screen[2]-
248,30,30,"files/icons/arrow.png",0,0,0,tocolor(124,197,118,255))
else
dxDrawImage(screen[1]-35,screen[2]-
248,30,30,"files/icons/arrow.png",0,0,0,tocolor(255,255,255,255))
end
if func.inBox(screen[1]-190,screen[2]-248,30,30) then
dxDrawImage(screen[1]-190,screen[2]-
248,30,30,"files/icons/arrow.png",180,0,0,tocolor(124,197,118,255))
else
dxDrawImage(screen[1]-190,screen[2]-
248,30,30,"files/icons/arrow.png",180,0,0,tocolor(255,255,255,255))
end
if cache.menuPoint == 4 then
local folder = "files/images/doors";
local count = 0
for i = 1,#furnitureMenus[cache.menu]
[cache.menuPoint][cache.menuType] do
if i > cache.wheel and count < 11 then
count = count+1
dxDrawRectangle(-90 +(count*148)-
5,screen[2]-170-5,128+10,154+10,tocolor(24,24,24,100))
dxDrawImage(-90 +(count*148),screen[2]-
170,128,128,folder.."/"..i..".png")
if func.inBox(-90 +(count*148),screen[2]-
170,128,128) or cache.selected == i then
func.border(-90 +
(count*148),screen[2]-170,128,128,4,tocolor(124,197,118,200))
end

dxDrawText(func.formatMoney(furnitureMenus[cache.menu][cache.menuPoint]
[cache.menuType][i].money).."#ffffff $",-26 +(count*148),screen[2]-25,-26 +
(count*148),screen[2]-
25,tocolor(124,197,118,255),1,cache.opensans,"center","center",false,false,false,tr
ue)
end
end
else
local folder =
"files/textures/"..furnitureMenus[cache.menu]
[cache.menuPoint].menu.."/"..furnitureMenus[cache.menu][cache.menuPoint]
[cache.menuType].type;
local count = 0
for i = 1,#furnitureMenus[cache.menu]
[cache.menuPoint][cache.menuType] do
if i > cache.wheel and count < 11 then
count = count+1
dxDrawRectangle(-90 +(count*148)-
5,screen[2]-170-5,128+10,154+10,tocolor(24,24,24,100))
dxDrawImage(-90 +(count*148),screen[2]-
170,128,128,folder.."/"..i..".png")
if func.inBox(-90 +(count*148),screen[2]-
170,128,128) or cache.selected == i then
func.border(-90 +
(count*148),screen[2]-170,128,128,4,tocolor(124,197,118,200))
end

dxDrawText(func.formatMoney(furnitureMenus[cache.menu][cache.menuPoint]
[cache.menuType][i]).."#ffffff $",-26 +(count*148),screen[2]-25,-26 +
(count*148),screen[2]-
25,tocolor(124,197,118,255),1,cache.opensans,"center","center",false,false,false,tr
ue)
end
end
end
end
elseif cache.menu == 2 then
--renderCache = {}
dxDrawRectangle(screen[1]-
90,screen[2]/2+39,90,46,tocolor(22,22,22,220))
if func.inBox(screen[1]-81,screen[2]/2+47,30,30) then
dxDrawImage(screen[1]-
81,screen[2]/2+47,30,30,"files/icons/save.png",0,0,0,tocolor(124,197,118,255))
else
dxDrawImage(screen[1]-
81,screen[2]/2+47,30,30,"files/icons/save.png",0,0,0,tocolor(255,255,255,255))
end

if func.inBox(screen[1]-39,screen[2]/2+47,30,30) then
dxDrawImage(screen[1]-
39,screen[2]/2+47,30,30,"files/icons/close.png",0,0,0,tocolor(210,49,49,255))
else
dxDrawImage(screen[1]-
39,screen[2]/2+47,30,30,"files/icons/close.png",0,0,0,tocolor(255,255,255,255))
end

for k,v in pairs(objectCache) do


if isElement(k) and isElementOnScreen(k) and
getElementData(k,"custom:type") == "floor" then
local x0, y0, z0, x1, y1, z1 =
getElementBoundingBox(k)
local posPlayer = Vector3(getCameraMatrix())--
localPlayer.position
local pos = k.matrix
local point = {}
point[4] = pos:transformPosition(x1, y1, z1 + 0.01)
local pointD = pos:transformPosition(0, y1, z1 +
0.01) -- // ez már jó
point[4 .. "world"] = pointD
local pointdoor = pos:transformPosition(0.77,
y1+0.03, z1 + 0.01) -- // ez már jó
point[4 .. "door"] = pointdoor
local posX, posY = getScreenFromWorldPosition(pointD)
local lineClear =
getDistanceBetweenPoints3D(localPlayer.position, pointD) <= 3
--isLineOfSightClear(posPlayer, pointD, true, false, false, true, false, false,
false, localPlayer)
if posX and posY and lineClear then
point[4 .. "screen"] = pointD
end

point[3] = pos:transformPosition(x1, -y1, z1 + 0.01)


local pointD = pos:transformPosition(x1, 0, z1 +
0.01)
point[3 .. "world"] = pointD
local pointdoor = pos:transformPosition(x1-0.03,
0.77, z1 + 0.01)
point[3 .. "door"] = pointdoor
local posX, posY = getScreenFromWorldPosition(pointD)
local lineClear =
getDistanceBetweenPoints3D(localPlayer.position, pointD) <= 3
--isLineOfSightClear(posPlayer, pointD, true, false, false, true, false, false,
false, localPlayer)
if posX and posY and lineClear then
point[3 .. "screen"] = pointD
end
point[2] = pos:transformPosition(-x1, -y1, z1 + 0.01)
local pointD = pos:transformPosition(0, -y1, z1 +
0.01)
point[2 .. "world"] = pointD
local pointdoor = pos:transformPosition(0.77,
-y1+0.03, z1 + 0.01)
point[2 .. "door"] = pointdoor
local posX, posY = getScreenFromWorldPosition(pointD)
local lineClear =
getDistanceBetweenPoints3D(localPlayer.position, pointD) <= 3
--isLineOfSightClear(posPlayer, pointD, true, false, false, true, false, false,
false, localPlayer)
if posX and posY and lineClear then
point[2 .. "screen"] = pointD
end

point[1] = pos:transformPosition(-x1, y1, z1 + 0.01)


local pointD = pos:transformPosition(-x1, 0, z1 +
0.01)
point[1 .. "world"] = pointD
local pointdoor = pos:transformPosition(-x1-0.03,
0.77, z1 + 0.01)
point[1 .. "door"] = pointdoor
local posX, posY = getScreenFromWorldPosition(pointD)
local lineClear =
getDistanceBetweenPoints3D(localPlayer.position, pointD) <= 3
--isLineOfSightClear(posPlayer, pointD, true, false, false, true, false, false,
false, localPlayer)
if posX and posY and lineClear then
point[1 .. "screen"] = pointD
end

renderCache[k] = point
end
end

for k,v in pairs(renderCache) do


local point = v
for i = 1, 4 do
point["color"..i] = tocolor(100,100,100)
if point[i.."screen"] and isLineOfSightClear
(Vector3(getElementPosition(localPlayer)),point[i.."world"],true,false,false,true,f
alse,false,false) then
local pointD = point[i.."world"]
local posX, posY =
getScreenFromWorldPosition(pointD)
if posX and posY then
if func.inBox(posX - 20/2, posY - 20/2,
25, 25) then
point["color"..i] =
tocolor(124,197,118)
dxDrawImage(posX - 20/2, posY -
20/2, 30, 30,'files/click.png', 0, 0, 0, tocolor(124,197,118, 255))
else
dxDrawImage(posX - 20/2, posY -
20/2, 25, 25,'files/click.png', 0, 0, 0, tocolor(200,200,200, 255))
end
end
end
local i2 = i + 1
if i2 > 4 then i2 = 1 end
dxDrawLine3D(point[i], point[i2], point["color"..i],
1)
end
end

for i = 1,#furnitureMenus[cache.menu] do
local name = furnitureMenus[cache.menu][i].name;
if func.inBox(screen[1]-97
-dxGetTextWidth(name,1,cache.opensans)/2,screen[2]-195-170+
(i*22),dxGetTextWidth(name,1,cache.opensans),20) or cache.menuPoint == i then
dxDrawText(name,screen[1]-97,screen[2]-195-160+
(i*22),screen[1]-97,screen[2]-195-160+
(i*22),tocolor(124,197,118,255),1,cache.opensans,"center","center")
else
dxDrawText(name,screen[1]-97,screen[2]-195-160+
(i*22),screen[1]-97,screen[2]-195-160+
(i*22),tocolor(255,255,255,255),1,cache.opensans,"center","center")
end
end

dxDrawText("Eddig
fizetendő:\n#7cc576"..func.formatMoney(cache.wall.cash).."#ffffff $",screen[1]-
92,screen[2]-195-10,screen[1]-92,screen[2]-195-
10,tocolor(255,255,255,255),1,cache.opensans,"center","center",false,false,false,tr
ue)
elseif cache.menu == 3 then
createBlur(0,screen[2]-195,screen[1]-195,195,255)
dxDrawRectangle(0,screen[2]-195,screen[1]-
195,195,tocolor(22,22,22,220))
dxDrawRectangle(0,screen[2]-195-46,90,46,tocolor(22,22,22,220))

dxDrawRectangle(0,screen[2]-195,32,195,tocolor(24,24,24,100))
dxDrawRectangle(screen[1]-195-32,screen[2]-
195,32,195,tocolor(24,24,24,100))

if func.inBox(8,screen[2]-195-38,30,30) then
dxDrawImage(8,screen[2]-195-
38,30,30,"files/icons/save.png",0,0,0,tocolor(124,197,118,255))
else
dxDrawImage(8,screen[2]-195-
38,30,30,"files/icons/save.png",0,0,0,tocolor(255,255,255,255))
end

if func.inBox(52,screen[2]-195-38,30,30) then
dxDrawImage(52,screen[2]-195-
38,30,30,"files/icons/close.png",0,0,0,tocolor(210,49,49,255))
else
dxDrawImage(52,screen[2]-195-
38,30,30,"files/icons/close.png",0,0,0,tocolor(255,255,255,255))
end

if func.inBox(screen[1]-195-32,screen[2]-195,32,195) then
dxDrawImage(screen[1]-225,screen[2]-
108,28,28,"files/icons/arrow.png",0,0,0,tocolor(124,197,118,255))
else
dxDrawImage(screen[1]-225,screen[2]-
108,28,28,"files/icons/arrow.png",0,0,0,tocolor(255,255,255,255))
end

if func.inBox(0,screen[2]-195,32,195) then
dxDrawImage(1,screen[2]-
108,28,28,"files/icons/arrow.png",180,0,0,tocolor(124,197,118,255))
else
dxDrawImage(1,screen[2]-
108,28,28,"files/icons/arrow.png",180,0,0,tocolor(255,255,255,255))
end

local count = 0
local folder = "files/images/doors"
for i = 1,#doors do
count = count+1
dxDrawRectangle(-90 +(count*148),screen[2]-
42,128,26,tocolor(80,80,80,100))
dxDrawRectangle(-90 +(count*148),screen[2]-
170,128,128,tocolor(100,100,100,100))
dxDrawImage(-90 +(count*148),screen[2]-170+10,128,128-
20,folder.."/"..doors[i].model..".png")
if func.inBox(-90 +(count*148),screen[2]-170,128,128) or
cache.selectedDoor == i then
func.border(-90 +(count*148),screen[2]-
170,128,128,1,tocolor(124,197,118,200))
end
dxDrawText(func.formatMoney(doors[i].money).."#ffffff $",-
26 +(count*148),screen[2]-29,-26 +(count*148),screen[2]-
29,tocolor(124,197,118,255),1,cache.opensans,"center","center",false,false,false,tr
ue)
end

local playerX,playerY,playerZ = getElementPosition(localPlayer)


local objectX,objectY,objectZ =
getElementPosition(cache.hover.door)

local scr = {getScreenFromWorldPosition(objectX,objectY-


0.74,objectZ+1.4)};
local distance =
getDistanceBetweenPoints3D(objectX,objectY,objectZ,playerX,playerY,playerZ)
local size = distance/2
if scr[1] or scr[2] then
if func.inBox(scr[1]+size/2,scr[2]+size/2,50-size,50-size)
or cache.move.door.state == "right" then
dxDrawImage(scr[1]+size/2,scr[2]+size/2,50-size,50-
size,"files/icons/move-arrow.png",0,0,0,tocolor(124,197,118,255))
else
dxDrawImage(scr[1]+size/2,scr[2]+size/2,50-size,50-
size,"files/icons/move-arrow.png",0,0,0,tocolor(255,255,255,255))
end

if func.inBox(scr[1]+size/2-58,scr[2]+size/2,50-size,50-
size) or cache.move.door.state == "left" then
dxDrawImage(scr[1]+size/2-58,scr[2]+size/2,50-
size,50-size,"files/icons/move-arrow.png",180,0,0,tocolor(124,197,118,255))
else
dxDrawImage(scr[1]+size/2-58,scr[2]+size/2,50-
size,50-size,"files/icons/move-arrow.png",180,0,0,tocolor(255,255,255,255))
end
end
if not isCursorShowing() then
if cache.move.door.state ~= "" then
local pos = cache.hover.door.position

if cache.move.door.state == "right" then


cache.move.progress = cache.move.progress+0.01
cache.move.posY = pos.y+0.01
elseif cache.move.door.state == "left" then
cache.move.progress = cache.move.progress-0.01
cache.move.posY = pos.y-0.01
end

setElementPosition(cache.hover.door,pos.x,cache.move.posY,pos.z)
end
end
end
end
end
addEventHandler("onClientRender",getRootElement(),func.render)

func.onKey = function(button,state)
if button == "mouse1" and not state then
if cache.menu == 3 and cache.hover.door then
if cache.move.door.state ~= "" then
local markerElement =
func.findMarkerElement(getElementInterior(localPlayer),getElementDimension(localPla
yer));
if markerElement then
local x,y,z = getElementPosition(markerElement)

setElementPosition(markerElement,x,y+cache.move.progress,z)
end
cache.move.progress = 0;
showCursor(true);
cache.move.door.state = "";
end
end
end
end
addEventHandler("onClientKey",getRootElement(),func.onKey)

func.showCursor = function()
showCursor(not isCursorShowing())
end
bindKey("m","down",func.showCursor)

func.click = function(button, state, absoluteX, absoluteY, worldX, worldY, worldZ,


clickedElement)
if button == "left" and state == "down" then
if getElementDimension(localPlayer) > 0 and
exports["sarp_interiors"]:isInteriorOwner(getElementDimension(localPlayer)) then
for v,k in pairs(objectCache) do
if (getElementModel(v) == 1502 or getElementModel(v) ==
1491) and getElementData(v,"custom:type") == "door" then
local matrix1 =
Vector3(unpack(getElementData(v,"custom:matrix1")))
if matrix1 then
local disc1 =
getDistanceBetweenPoints3D(matrix1,localPlayer.position);
if disc1 <= 0.4 then
if func.inBox(screen[1]/2-24,screen[2]-
194,48,48) then
setElementData(v,"door:locked",not
getElementData(v,"door:locked"))
if getElementData(v,"door:locked")
then
setElementFrozen(v,true)

setElementRotation(v,getElementRotation(v))

interiorObjects[getElementData(v,"custom:dbid")].doorLock = true;

triggerServerEvent("changeWalldoorLock",localPlayer,localPlayer,getElementDimension
(localPlayer),getElementData(v,"custom:dbid"),getElementInterior(localPlayer),true)
else
setElementFrozen(v,false)

interiorObjects[getElementData(v,"custom:dbid")].doorLock = false;

triggerServerEvent("changeWalldoorLock",localPlayer,localPlayer,getElementDimension
(localPlayer),getElementData(v,"custom:dbid"),getElementInterior(localPlayer),false
)
end
end
end
end

local matrix2 =
Vector3(unpack(getElementData(v,"custom:matrix2")))
if matrix2 then
local disc2 =
getDistanceBetweenPoints3D(matrix2,localPlayer.position);
if disc2 <= 0.4 then
if func.inBox(screen[1]/2-24,screen[2]-
194,48,48) then
setElementData(v,"door:locked",not
getElementData(v,"door:locked"))
if getElementData(v,"door:locked")
then
setElementFrozen(v,true)

setElementRotation(v,getElementRotation(v))

interiorObjects[getElementData(v,"custom:dbid")].doorLock = true;

triggerServerEvent("changeWalldoorLock",localPlayer,localPlayer,getElementDimension
(localPlayer),getElementData(v,"custom:dbid"),getElementInterior(localPlayer),true)
else
setElementFrozen(v,false)

interiorObjects[getElementData(v,"custom:dbid")].doorLock = false;

triggerServerEvent("changeWalldoorLock",localPlayer,localPlayer,getElementDimension
(localPlayer),getElementData(v,"custom:dbid"),getElementInterior(localPlayer),false
)
end
end
end
end
end
end
end
end

if getElementData(localPlayer,"interior:editing") then
if button == "left" and state == "down" then
for i = 1,#furnitureMenus do
local name = furnitureMenus[i].name;
if func.inBox(screen[1]-10
-dxGetTextWidth(name,1,cache.OpenSansEB),screen[2]-195-275+2+
(i*28),dxGetTextWidth(name,1,cache.OpenSansEB),16) then
if cache.menu ~= i and cache.menu ~= 2 then
cache.menu = i
cache.menuPoint = 0;
cache.menuType = 1;
cache.wheel = 0;
if cache.hover.door then
cache.hover.door = nil;
end
if cache.hover.object then
cache.hover.object:destroyOutline();
cache.hover.object = nil
cache.selected = 0;
end
if cache.menu == 3 then
if not cache.hover.door then
for v,k in pairs(objectCache) do
if
getElementData(v,"custom:default:door") then
cache.hover.door = v;
end
end
end
elseif cache.menu == 2 then
--amikor megnyitja a felhúzást
cache.menuPoint = 1;
end
end
end
end

if cache.menu == 1 then
if cache.menuPoint > 0 and cache.menuType > 0 then
if func.inBox(screen[1]-35,screen[2]-248,30,30) then
if #furnitureMenus[cache.menu][cache.menuPoint]
> cache.menuType then
cache.menuType = cache.menuType+1
cache.wheel = 0
end
elseif func.inBox(screen[1]-190,screen[2]-248,30,30)
then
if cache.menuType > 1 then
cache.menuType = cache.menuType-1
cache.wheel = 0
end
end
if func.inBox(0,screen[2]-195,32,195) then
cache.wheel = cache.wheel - 1
if cache.wheel < 1 then
cache.wheel = 0
end
elseif func.inBox(screen[1]-195-32,screen[2]-
195,32,195) then
cache.wheel = cache.wheel + 1
if cache.wheel > #furnitureMenus[cache.menu]
[cache.menuPoint][cache.menuType] - 11 then
cache.wheel = #furnitureMenus[cache.menu]
[cache.menuPoint][cache.menuType] - 11
end
end

if cache.hover.object then
if func.inBox(8,screen[2]-195-38,30,30) then
if cache.selected > 0 then
if furnitureMenus[cache.menu]
[cache.menuPoint][cache.menuType][cache.selected] then
if
getElementData(cache.hover.object,"custom:texid") ~= cache.selected then
local folder1 =
furnitureMenus[cache.menu][cache.menuPoint].menu;
local folder2 =
furnitureMenus[cache.menu][cache.menuPoint][cache.menuType].type;
local texture =
cache.shader;
if
texturedObjects[cache.hover.object] then

removeObjectTextureC(cache.hover.object)
end
--outputChatBox(texture)

triggerServerEvent("updateInteriorObjectTexture",localPlayer,localPlayer,getElement
Dimension(localPlayer),tonumber(getElementData(cache.hover.object,"custom:dbid")),f
older1,folder2,texture,cache.selected)

cache.hover.object:destroyOutline();
cache.hover.object = nil
return
else

exports.sarp_hud:showAlert("error", "Ez a fajta már rajta van.")


end
end
end
elseif func.inBox(52,screen[2]-195-38,30,30)
then
if texturedObjects[cache.hover.object]
then
if
getElementData(cache.hover.object,"custom:texture") == "" then
removeObjectTextureC(cache.hover.object)
else

setObjectTextureC(cache.hover.object,getElementData(cache.hover.object,"custom:text
ure"),getElementData(cache.hover.object,"custom:folder"))
end
end
cache.selected = 0;
cache.hover.object:destroyOutline();
cache.hover.object = nil

cache.menuPoint = 0
cache.menuType = 1;
cache.wheel = 0;
return
end

if cache.menuPoint == 4 then
local folder =
"files/textures/"..furnitureMenus[cache.menu]
[cache.menuPoint].menu.."/"..furnitureMenus[cache.menu][cache.menuPoint]
[cache.menuType].type;
local count = 0
for i = 1,#furnitureMenus[cache.menu]
[cache.menuPoint][cache.menuType] do
if i > cache.wheel and count < 11
then
count = count+1
if func.inBox(-90 +
(count*148),screen[2]-170,128,128) then
if cache.selected ~= i
then
cache.selected = i
if
cache.hover.object then
if
getElementModel(cache.hover.object) ~= furnitureMenus[cache.menu][cache.menuPoint]
[cache.menuType][cache.selected].model then

setElementModel(cache.hover.object,furnitureMenus[cache.menu]
[cache.menuPoint][cache.menuType][cache.selected].model)
end
if
furnitureMenus[cache.menu][cache.menuPoint][cache.menuType]
[cache.selected].isTextured then

removeObjectTextureC(cache.hover.object)

setObjectTextureC(cache.hover.object,furnitureMenus[cache.menu]
[cache.menuPoint][cache.menuType]
[cache.selected].texname,folder.."/"..cache.selected)
else

removeObjectTextureC(cache.hover.object)
end
end
end
end
end
end
else
local count = 0
for i = 1,#furnitureMenus[cache.menu]
[cache.menuPoint][cache.menuType] do
if i > cache.wheel and count < 11
then
count = count+1
if func.inBox(-90 +
(count*148),screen[2]-170,128,128) then
if cache.selected ~= i
then
if
getElementData(cache.hover.object,"isCustom") --[[and
getElementData(cache.hover.object,"custom:default")]] then

cache.selected = i
folder =
"files/textures/"..furnitureMenus[cache.menu]
[cache.menuPoint].menu.."/"..furnitureMenus[cache.menu][cache.menuPoint]
[cache.menuType].type.."/"..i
if
texturedObjects[cache.hover.object] then

removeObjectTextureC(cache.hover.object)
end

local shader
= "b"
if
getElementData(cache.hover.object,"custom:type") == furnitureMenus[cache.menu]
[cache.menuPoint].menu then
if
getElementData(cache.hover.object,"custom:type") == "floor" then

shader = "a"
elseif
getElementData(cache.hover.object,"custom:type") == "roof" then

shader = "a"
elseif
getElementData(cache.hover.object,"custom:type") == "wall" then

shader = func.getTextureFromDistance(cache.hover.object)
end

cache.shader = shader

setObjectTextureC(cache.hover.object, shader,folder)
end
end
end
end
end
end
end
end
end
if clickedElement and objectCache[clickedElement] then
if getElementData(clickedElement,"isCustom") --[[and
getElementData(clickedElement,"custom:default")]] then
if func.inBox(screen[1]-195,screen[2]-195-
260,195,screen[2]) then
else
if func.inBox(0,screen[2]-195,screen[1]-
195,195) and cache.menuPoint > 0 and cache.menuType > 0 then
elseif func.inBox(0,screen[2]-195-
46,90,46) and cache.menuPoint > 0 and cache.menuType > 0 then
else

if cache.hover.object then
cache.selected = 0;
if
texturedObjects[cache.hover.object] then
if
getElementData(cache.hover.object,"custom:texture") == "" then

removeObjectTextureC(cache.hover.object)
else

setObjectTextureC(cache.hover.object,getElementData(cache.hover.object,"custom:text
ure"),getElementData(cache.hover.object,"custom:folder"))
end
end;

cache.hover.object:destroyOutline()
cache.hover.object = nil
cache.menuPoint = 0
cache.menuType = 1;
cache.wheel = 0;
end
if not cache.hover.object then
cache.hover.object =
clickedElement

cache.hover.object:createOutline({210,49,49, 255})
local thisSelected = 0
if
getElementData(clickedElement,"custom:type") == "floor" then
thisSelected = 1
elseif
getElementData(clickedElement,"custom:type") == "wall" then
thisSelected = 3
elseif
getElementData(clickedElement,"custom:type") == "roof" then
thisSelected = 2
elseif
getElementData(clickedElement,"custom:type") == "door" then
thisSelected = 4
end

if cache.menuPoint ~=
thisSelected then
cache.menuPoint =
thisSelected
cache.menuType = 1;
cache.wheel = 0;
end
end
end
end
end
end
elseif cache.menu == 2 then
for k,v in pairs(renderCache) do
local point = v
for i = 1, 4 do
if point[i.."screen"] and isLineOfSightClear
(Vector3(getElementPosition(localPlayer)),point[i.."world"],true,false,false,true,f
alse,false,false) then
local pointD = point[i.."world"]
local posX, posY =
getScreenFromWorldPosition(pointD)
if posX and posY then
if func.inBox(posX - 20/2, posY -
20/2, 20, 20) then
local newI = i
if i == 3 then newI = 2 end
if i == 2 then newI = 1 end
if i == 1 then newI = 2 end
if i == 4 then newI = 1 end
local _pointD = pointD
local pointdoor =
point[i.."door"]
--local pointDoor = pointD
local pointD =
point[newI.."world"]
if pointD then
local rot =
func.findRotation(pointD.x, pointD.y, k.position.x, k.position.y)
local object =
createObject(furnitureMenus[cache.menu]
[cache.menuPoint].model,_pointD.x,_pointD.y,_pointD.z+1.74)

setElementRotation(object, 0, 0, rot)

setElementInterior(object,localPlayer.interior)

setElementDimension(object,localPlayer.dimension)
notTriggered[object] =
true;
local money = 600;
if cache.menuPoint == 3
then
money = 820;
local door =
createObject(furnitureMenus[cache.menu][cache.menuPoint]
[cache.selected].model,pointdoor.x,pointdoor.y,pointdoor.z-0.01)

setElementRotation(door, 0, 0, rot-90)

setElementInterior(door,localPlayer.interior)
setElementDimension(door,localPlayer.dimension)
notTriggered[door]
= true;
end
cache.wall.cash =
cache.wall.cash+money;
return
end
end
end
end
local i2 = i + 1
if i2 > 4 then i2 = 1 end
end
end

if func.inBox(screen[1]-84,screen[2]/2+47,30,30) then
if notTriggered then
cache.menu = 1;
cache.menuPoint = 0;
cache.menuType = 1;
cache.wheel = 0;

local serverCache = {};


for v,k in pairs(notTriggered) do
if v and getElementModel(v) and
getElementModel(v) > 0 then
local pos =
Vector3(getElementPosition(v));
local rot =
Vector3(getElementRotation(v));
local typ = "wall";
if getElementModel(v) == 1502 or
getElementModel(v) == 1491 then
typ = "door";
end
serverCache[#serverCache+1] = {
x = pos.x;
y = pos.y;
z = pos.z;
rx = rot.x;
ry = rot.y;
rz = rot.z;
interior =
getElementInterior(v);
dimension =
getElementDimension(v);
model = getElementModel(v);
type = typ;
};
end
end

triggerServerEvent("createInteriorWalls",localPlayer,localPlayer,getElementDimensio
n(localPlayer),getElementInterior(localPlayer),serverCache)
for v,k in pairs(notTriggered) do
destroyElement(v);
notTriggered[v] = nil;
end

end
end

if func.inBox(screen[1]-39,screen[2]/2+47,30,30) then
cache.menu = 1;
cache.menuPoint = 0;
cache.menuType = 1;
cache.wheel = 0;
for v,k in pairs(notTriggered) do
destroyElement(v);
notTriggered[v] = nil;
end
end

for i = 1,#furnitureMenus[cache.menu] do
local name = furnitureMenus[cache.menu][i].name;
if func.inBox(screen[1]-97
-dxGetTextWidth(name,1,cache.opensans)/2,screen[2]-195-170+
(i*22),dxGetTextWidth(name,1,cache.opensans),20) then
if i ~= 2 then
if cache.menuPoint ~= i then
cache.menuPoint = i
if i == 3 then
cache.selected = 1;
end
end
else
exports.sarp_hud:showAlert("info", "Ez a
funkció még nem érhető el.")
end
end
end

if cache.menuPoint == 3 then
if func.inBox(screen[1]-195-32,screen[2]-195,32,195)
then

end

if func.inBox(0,screen[2]-195,32,195) then

end

local count = 0
for i = 1,#furnitureMenus[cache.menu]
[cache.menuPoint] do
if i > cache.wheel and count < 11 then
count = count+1
if func.inBox(-90 +(count*148),screen[2]-
170,128,128) then
if cache.selected ~= i then
cache.selected = i
end
end
end
end
if func.inBox(0,screen[2]-195,32,195) then
cache.wheel = cache.wheel - 1
if cache.wheel < 1 then
cache.wheel = 0
end
elseif func.inBox(screen[1]-195-32,screen[2]-
195,32,195) then
cache.wheel = cache.wheel + 1
if cache.wheel > #furnitureMenus[cache.menu]
[cache.menuPoint] - 11 then
cache.wheel = #furnitureMenus[cache.menu]
[cache.menuPoint] - 11
end
end

end

elseif cache.menu == 3 then


local count = 0
for i = 1,#doors do
count = count+1
if func.inBox(-90 +(count*148),screen[2]-170,128,128)
then
if cache.selectedDoor ~= i then
cache.selectedDoor = i;

setElementModel(cache.hover.door,doors[cache.selectedDoor].model)
end
end
end

if func.inBox(8,screen[2]-195-38,30,30) then
local marker =
func.findMarkerElement(getElementInterior(localPlayer),getElementDimension(localPla
yer));
if marker then
local markerX,markerY,markerZ =
getElementPosition(marker);
local doorX,doorY,doorZ =
getElementPosition(cache.hover.door);

triggerServerEvent("updateDefaultDoor",localPlayer,localPlayer,getElementDimension(
localPlayer),getElementData(cache.hover.door,"custom:dbid"),marker,markerX,markerY,
markerZ,doorX,doorY,doorZ,getElementModel(cache.hover.door))
end
end

if func.inBox(52,screen[2]-195-38,30,30) then
if cache.selectedDoor > 0 then
cache.selectedDoor = 0;

setElementModel(cache.hover.door,getElementData(cache.hover.door,"custom:door:model
"))
end
local x,y,z =
unpack(getElementData(cache.hover.door,"custom:door:pos"));
setElementPosition(cache.hover.door,x,y,z)
--cache.move.progress

local markerElement =
func.findMarkerElement(getElementInterior(localPlayer),getElementDimension(localPla
yer));
if markerElement then
local x,y,z =
getElementData(markerElement,"x"),getElementData(markerElement,"y"),getElementData(
markerElement,"z")
setElementPosition(markerElement,x,y-
cache.move.progress,z-1.45)
end
cache.move.progress = 0;
cache.move.door.state = ""
cache.menu = 1;
cache.menuPoint = 0;
cache.menuType = 1;
cache.hover.door = nil;
return
end

local playerX,playerY,playerZ =
getElementPosition(localPlayer)
local objectX,objectY,objectZ =
getElementPosition(cache.hover.door)

local scr = {getScreenFromWorldPosition(objectX,objectY-


0.74,objectZ+1.4)};
local distance =
getDistanceBetweenPoints3D(objectX,objectY,objectZ,playerX,playerY,playerZ)
local size = distance/2
if scr[1] or scr[2] then
cache.move.door.state = "";
if func.inBox(scr[1]+size/2,scr[2]+size/2,50-size,50-
size) then
cache.move.door.state = "right";
showCursor(false)
cache.move.posY = objectY
end

if func.inBox(scr[1]+size/2-58,scr[2]+size/2,50-
size,50-size) then
cache.move.door.state = "left";
showCursor(false)
cache.move.posY = objectY
end
end
end
end
end
end
addEventHandler("onClientClick",getRootElement(),func.click)

func.editInterior = function()
if getElementData(localPlayer,"loggedIn") then
if getElementInterior(localPlayer) == 23 or
getElementDimension(localPlayer) > 0 then
local state,owner =
exports["sarp_interiors"]:findInteriorOwnerByDbid(getElementDimension(localPlayer))
;
if state and owner == getElementData(localPlayer,"char.ID") then
if getElementData(localPlayer,"interior:editing") then
exports.sarp_hud:showAlert("success", "Kiléptél az
interior szerkesztő módból.")
setElementData(localPlayer,"interior:editing",false);
exports["sarp_hud"]:toggleHUD(not DashBoard)
showChat(not DashBoard)
--setElementData(localPlayer,"hudVisible",true);
--showChat(true);
else
exports.sarp_hud:showAlert("success", "Bekapcsoltad
az interior szerkesztést.")
setElementData(localPlayer,"interior:editing",true);
exports["sarp_hud"]:toggleHUD(DashBoard)
showChat(DashBoard)
--setElementData(localPlayer,"hudVisible",false);
-- showChat(false);
end
else
exports.sarp_hud:showAlert("error", "Ezt az interiort te
nem tudod szerkeszteni.")
end
end
end
end
addCommandHandler("edit",func.editInterior)

func.updateInteriorObjectTex = function(data,id,f1,f2,tex,texid)
if interiorObjects and interiorObjects[id] then
interiorObjects[id] = {
id = data.id;
x = data.x;
y = data.y;
z = data.z;
rx = data.rx;
ry = data.ry;
rz = data.rz;
interior = data.interior;
dimension = data.dimension;
texture = data.texture;
texID = data.texID;
model = data.model;
type = data.type;
isdefault = data.isdefault;
defaultdoor = data.defaultdoor;
folder1 = data.folder1;
folder2 = data.folder2;
}
local folder = "files/textures/"..(data.folder1).."/"..
(data.folder2).."/"..(data.texID)
for v,k in pairs(objectCache) do
if getElementData(v,"custom:dbid") == id then
setObjectTextureC(v,tex,folder)
setElementData(v,"custom:folder",folder)
setElementData(v,"custom:texid",data.texID)
setElementData(v,"custom:texture",data.texture)
end
end
end
end
addEvent("updateInteriorObjectTex",true)
addEventHandler("updateInteriorObjectTex",getRootElement(),func.updateInteriorObjec
tTex)

func.findMarkerElement = function(interior,dimension)
for k,v in ipairs(getElementsByType("marker")) do
if getElementData(v,"isIntOutMarker") and getElementData(v,"owner") ==
getElementData(localPlayer,"char.ID") and getElementInterior(v) == interior and
getElementDimension(v) == dimension then
return v;
end
end
return nil;
end

func.inBox = function(x,y,w,h)
if(isCursorShowing()) then
local cursorX, cursorY = getCursorPosition();
cursorX, cursorY = cursorX*screen[1], cursorY*screen[2];
if(cursorX >= x and cursorX <= x+w and cursorY >= y and cursorY <= y+h)
then
return true;
else
return false;
end
end
end

func.formatMoney = function(amount)
local formatted = amount
while true do
formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1 %2')
if (k==0) then
break
end
end
return formatted
end

func.border = function(x, y, w, h, radius, color)


dxDrawRectangle(x - radius, y, radius, h, color)
dxDrawRectangle(x + w, y, radius, h, color)
dxDrawRectangle(x - radius, y - radius, w + (radius * 2), radius, color)
dxDrawRectangle(x - radius, y + h, w + (radius * 2), radius, color)
end

func.findRotation = function( x1, y1, x2, y2 )


local t = -math.deg( math.atan2( x2 - x1, y2 - y1 ) )
return t < 0 and t + 360 or t
end

You might also like