Jump to content

COMO CRIAR OBJETO


Recommended Posts

Pessoal, estou editando um script de agência de emprego onde tem um trabalho de eletricista, porém ele só cria um marker em baixo do poste e eu queria deixar mais RP, queria que criasse uma escada subindo no poste e o marker fosse criado lá em cima e logo em seguida após terminar o conserto e o trabalhador descer da escada ele pisar novamente no marker para destruir a escada. Desde já agradeço quem puder me ajudar.

Link to comment

Segue o codigo do trabalho abaixo @DNL291:

Client Side
 

local entradaB = createMarker(-2663.881, 239.237, 4.336, "cylinder", 1, 255, 255, 255, 0)

addEventHandler( "onClientRender", root, function (  )
       local x, y, z = getElementPosition( entradaB )
       local Mx, My, Mz = getCameraMatrix(   )
        if ( getDistanceBetweenPoints3D( x, y, z, Mx, My, Mz ) <= 20 ) then
           local WorldPositionX, WorldPositionY = getScreenFromWorldPosition( x, y, z +1, 0.07 )
            if ( WorldPositionX and WorldPositionY ) then
			    dxDrawText("Eletricista", WorldPositionX - 1, WorldPositionY + 1, WorldPositionX - 1, WorldPositionY + 1, tocolor(0, 0, 0, 255), 1.52, "default-bold", "center", "center", false, false, false, false, false)
			    dxDrawText("Eletricista", WorldPositionX - 1, WorldPositionY + 1, WorldPositionX - 1, WorldPositionY + 1, tocolor(255, 255, 255, 255), 1.50, "default-bold", "center", "center", false, false, false, false, false)
            end
      end
end 
)

local money = math.random(450, 1050);
local pacienty = { -- Coordenadas dos postes + Dinheiro
{1845.9543457031, 1138.2568359375, 11.62566280365,money},
{2017.7882080078, 1088.1586914063, 10.8203125,money},
{2022.1553955078, 1255.1987304688, 10.8203125,money},
{2224.9050292969, 2016.9425048828, 10.836261749268,money},
{2537.3610839844, 2119.03515625, 10.8203125,money},
{1932.7332763672, 2201.7548828125, 10.812517166138,money},
{1524.2006835938, 2208.3811035156, 11.239343643188,money},
{2143.5793457031, 1675.9582519531, 10.8203125,money},
{2143.1501464844, 1689.9729003906, 10.8203125,money},
{2598.1975097656, 1831.4290771484, 10.9765625,money},
{2598.1733398438, 1785.2888183594, 10.9765625,money},
{2605.8676757813, 1671.9998779297, 10.9765625,money},
}

local pickupMed = { -- Local pra começar o trabalho
{1706.3438720703, 998.7783203125, 10.8203125},
}

electricianMessages = -- Lista de problemas
{
	"Mal funcionamento no gerador.",
	"Afrouxamento da polia.",
    "Mal contato com o solo.",
    "Esgotamento de um filamento.",
    "Circuito aberto.",
    "Fio quebrado.",
}

for a=1,#pickupMed do
    local x,y,z = pickupMed[a][1],pickupMed[a][2],pickupMed[a][3]
    local marker = createMarker( x, y, z-0.85, "cylinder", 1, 255, 50, 50, 100)
    setElementData(marker,"Электрик_маркер_устроиться",a)
end

local sw,sh = guiGetScreenSize()
local window={}
local label={}
local button={}

window[1] = guiCreateWindow((sw-550)/2,(sh-200)/2,500,120,"Trabalho eletricista",false)
label[1] = guiCreateLabel(0,25,490,30,"Bem-vindo ao trabalho de eletricista. \nVocê encontra e repara várias falhas em coisas de energia.",false,window[1])
guiSetFont(label[1], "default-bold-small")
guiLabelSetHorizontalAlign(label[1], "center", false)
button[1] = guiCreateButton(10,70,200,30,"...",false,window[1])
button[2] = guiCreateButton(290,70,200,30,"Fechar",false,window[1])
guiSetVisible(window[1],false)

function createMarkerElectrician(player)
    if player == getLocalPlayer() then
        local d = math.random(1,#pacienty)
        local x,y,z = pacienty[d][1],pacienty[d][2],pacienty[d][3]
        local marker = createMarker( x, y, z-0.85, "cylinder", 1, 255, 0, 0, 20)
        setElementData(marker,"Электрик_маркер_пациент",true)
        setElementData(player,"Электрик_маркер_пациент",marker)
        local blip = createBlip(x,y,z,41,3)
        setElementData(player,"Электрик_пациент_блип",blip)
        setElementData(player,"Пациент_Кэш",pacienty[d][4])
    end
end

function deleteMarkerElectrician(player)
    if player == getLocalPlayer() then
        local ped = getElementData(player,"Электрик_пациент")
        local blip = getElementData(player,"Электрик_пациент_блип")
        local marker = getElementData(player,"Электрик_маркер_пациент")
        if marker then
            if isElement(marker) then destroyElement(marker) end
        end
        if blip then
            if isElement(blip) then destroyElement(blip) end
        end
        if ped then
            if isElement(ped) then destroyElement(ped) end
        end
    end
end
addEvent("deleteMarkerElectrician", true)
addEventHandler("deleteMarkerElectrician", getRootElement(), deleteMarkerElectrician)

function startClick()
    local player = getLocalPlayer()
    if (source == button[1]) then
        guiSetVisible(window[1],false)
        showCursor(false)
        local state = getElementData(player,"Электрик_работает")
        local a1 = getElementData(player,"Электрик_маркер_устроиться")
        if not state then
        local level = tonumber(getElementData(player, "Level")) or 0
        if level <= 12 then
                exports._infobox:addNotification(source, "Voce nao tem level suficiente para "..Trab.."", "info")
		else	
            triggerServerEvent("start_Electrician",player,player)
            setElementData(player,"Электрик_работает",0)
            setElementData(player,"Электрик_машина_пациент",0)
            setElementData(player,"Электрик_работает_номер",a1)
            createMarkerElectrician(player)
            exports._infobox:addNotification(source, "Voce Começou a trabalhar "..Trab..", Siga o blip do mapa", "info")
        end    
        else
            local hodok = tonumber(state)
            local profit = getElementData(player,"Электрик_Прибавление")
            if not profit then profit = 0 end
            
            setElementData(player,"Электрик_Прибавление",nil)
            setElementData(player,"Пациент_Кэш",nil)
            triggerServerEvent("stop_Electrician",player,player)
            triggerServerEvent("giveMoneyElectrician",player,player,profit)
            setElementData(player,"Электрик_работает",nil)
            setElementData(player,"Электрик_работает_номер",nil)
    end
    elseif (source == button[2]) then
        guiSetVisible(window[1],false)
        showCursor(false)
    end
end
addEventHandler("onClientGUIClick", getRootElement(), startClick)

function onClientMarkerHit(player, mdim )
    if player == getLocalPlayer() then
        if mdim then
            local marker = source
            local veh = getPedOccupiedVehicle(player)
            local state = getElementData(player,"Электрик_работает")
            local a1 = getElementData(marker,"Электрик_маркер_устроиться")
            if a1 then
                if not veh then
                    guiSetVisible(window[1],true)
                    showCursor(true)
                    setElementData(player,"Электрик_маркер_устроиться",a1)
                    if not state then
                        guiSetText(button[1],"Começar")
                    else
                        guiSetText(button[1],"Receber")
                    end
                end
            elseif getElementData(marker,"Электрик_маркер_пациент") then
                if not veh then
                    setElementFrozen(player,true)
                    setPedAnimation(player,"BOMBER","BOM_Plant",15000,false,true,true,false)
                    setElementData(player,"Электрик_машина_пациент",tonumber(getElementData(player,"Электрик_машина_пациент")) + 1)
                    exports._infobox:addNotification(source, "Aguarde voce esta arrumando a energia do poste", "info")
                    setTimer(function()
                        if isElement(player) and getElementData(player,"Электрик_работает") then
                            local pacienty = tonumber(getElementData(player,"Электрик_машина_пациент"))
                            if pacienty > 0 then
                                setElementData(player,"Электрик_работает",tonumber(state) + pacienty)
                                setElementData(player,"Электрик_машина_пациент",0)
                                if not getElementData(player,"Электрик_Прибавление") then
                                setElementData(player,"Электрик_Прибавление",0)
                                end
                                if not getElementData(player,"Пациент_Кэш") then setElementData(player,"Пациент_Кэш",0) end
                                setElementData(player,"Электрик_Прибавление",getElementData(player,"Электрик_Прибавление") + getElementData(player,"Пациент_Кэш"))
                        
                                deleteMarkerElectrician(player)
                                setElementFrozen(player,false)
                                setPedAnimation(player,false)
                                createMarkerElectrician(player)           
                               exports._infobox:addNotification(source, "A rede elétrica está configurada", "info")
                            end
                        end
                    end,15000,1)
                end
            end
        end
    end
end
addEventHandler("onClientMarkerHit", getRootElement(), onClientMarkerHit )

function job_quit_Medik()
    local player = source
	    if player == getLocalPlayer() then
        local state = getElementData(player,"Электрик_работает")
        if state then
            local profit = getElementData(player,"Электрик_Прибавление")
            if not profit then profit = 0 end
            
            setElementData(player,"Электрик_Прибавление",nil)
            setElementData(player,"Пациент_Кэш",nil)
            triggerServerEvent("stop_Electrician",player,player)
            triggerServerEvent("giveMoneyElectrician",player,player,profit)
            exports._infobox:addNotification(source, "Trabalho concluído com sucesso. Esse e seu salário: R$"..profit..".", "info")
        end
	end
end
addEventHandler("onClientPlayerWasted", root, job_quit_Medik)

 

Edited by ZaaKScripter
Link to comment

Não vou conseguir passar o código, mas vou explicar como fazer esse tipo de trabalho.

Primeiro, ao spawnar o veículo do emprego, crie junto um colshape e use attachelement para grudá-lo no veículo na parte traseira.
Depois, crie um evento para quando passar encima desse colshape criar uma escada e use novamente o attachelements para grudar a escada no player, configure a rotação da escada de maneira que ela fica um pouco na diagonal para o player conseguir subir.
Depois, crie um bindKey para que quando o player apertar dar um detachElements na escada, aí ela irá ficar no chão na posição em que o player quiser, crie também um marker no local que o player apertou o E para que quando ele apertar novamente a escada seja guardada.

Basicamente é assim que é feito um script de eletricista, infelizmente estou sem tempo para fazer o código, mas não é nada muito complicado não. 

  • Thanks 1
Link to comment

O comando é 

createObject ( int modelid, float x, float y, float z, [ float rx, float ry, float rz, bool isLowLOD = false ] )

sendo como argumentos obrigatórios:

ID do objeto (pode achar todos os objetos em sites também que são melhores organizados), posição x, posição y, posição z

argumentos opcionais:

rotação x, rotação y, rotação z e se é LowLOD

pode ver mais informações na página da função: createObject

  • Thanks 1
Link to comment
On 04/11/2020 at 10:56, ZaaKScripter said:

@BoechatComo eu faria para que esse objeto fosse destruido apos o reparo do poste?

 

Você usa o destroyElement. Pode destruir assim que a tarefa foi concluída, ou criar um market junto ao objeto e destruir o market + o objeto assim que ele sair do market

Algo mais ou menos assim:

local objetoExemplo = createObject ( 1945, 1530, -1090, 21, 0, 0, 90 ) 
local markerExemplo = createMarker ( 1945, 1530, 21, "cylinder", 3, 255, 255, 0, 0 ) --Recomendo deixar o Alpha em 0 para que o marker fique invisível, pro player será como se ele simplesmente se afastasse do objeto e o objeto sumisse

function markerLeave ( leavingPlayer, matchingDimension )
	if leavingPlayer == localPlayer and source == marketExemplo then
    		destroyElement(objetoExemplo) --Recomendo que chame essa função de destruir o objeto assim que terminar o uso do objeto também, mas como não tenho seu script vou dar o exemplo de saindo do market
		destroyElement(markerExemplo)
   	end
end

addEventHandler ( "onClientMarkerLeave", getRootElement(), markerLeave )

 

Edited by Boechat
  • Thanks 1
Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...