DNL291

Other Languages Moderators
  • Content count

    1,855
  • Joined

  • Last visited

Community Reputation

64 Popular

About DNL291

  • Rank
    Portuguese Section Moderator
  • Birthday 06/05/94

Details

  • Gang
    SAF
  • Location
    Brazil
  • Interests
    Programming/Scripting

Recent Profile Visitors

2,156 profile views
  1. [Help] Freeroam

    Do you want to disable it for the button "Create vehicle" too? Try this: function createSelectedVehicle(leaf) if (getElementDimension(localPlayer) ~= 0) then return outputChatBox("You cannot create vehicle as you are not in the Freeroam arena!", 255, 0, 0) end if not leaf then leaf = getSelectedGridListLeaf(wndCreateVehicle, 'vehicles') if not leaf then return end end server.giveMeVehicles(leaf.id) end That function is at line 944 (fr_client.lua), you can just put the if statement at the beginning of the function. For the command: function createVehicleCommand(cmd, ...) if (getElementDimension(localPlayer) ~= 0) then return outputChatBox("You cannot create vehicle as you are not in the Freeroam arena!", 255, 0, 0) end local vehID local vehiclesToCreate = {} local args = { ... } for i,v in ipairs(args) do vehID = tonumber(v) if not vehID then vehID = getVehicleModelFromName(v) end if vehID then table.insert(vehiclesToCreate, math.floor(vehID)) end end server.giveMeVehicles(vehiclesToCreate) end addCommandHandler('createvehicle', createVehicleCommand) addCommandHandler('cv', createVehicleCommand)
  2. Consegui entender toda ideia, ótima ilustração por sinal. Sobre obter a posição dos outros objetos anexados ao guindasteTop eu não entendi o por que de não receber as coordenadas, seria por conta da rotação do elemento ao qual os outros estão anexados? De qualquer forma: Tente usar essa função para obter as coordenadas duma offSet: function getPositionFromElementOffset(element,offX,offY,offZ) local m = getElementMatrix ( element ) -- Get the matrix local x = offX * m[1][1] + offY * m[2][1] + offZ * m[3][1] + m[4][1] -- Apply transform local y = offX * m[1][2] + offY * m[2][2] + offZ * m[3][2] + m[4][2] local z = offX * m[1][3] + offY * m[2][3] + offZ * m[3][3] + m[4][3] return x, y, z -- Return the transformed point end -- Obtendo a posição da offSet do guindasteTop x, y, z = getPositionFromElementOffset( guindasteTop, 0, 50, 3.45 )
  3. Sim, isso que eu tava achando estranho, por isso que perguntei sobre o debug, mas quando perguntei, ainda não tinha percebido o erro do seu código. Acho que o @TeixeiraRB não usou o comando do debug (/debugscript 3). Eu costumo sempre dar Ctrl+C - Ctrl+V em coisas assim, no meu caso é por força de hábito.
  4. (Ajuda)Sons de carros MTA

    Você quer dizer som do motor do carro? A função setWorldSoundEnabled pode desabilitar qualquer som do ambiente do GTA, e playSound3D toca um som personalizado.
  5. Você tá usando o código acima do Lord Henry? Se sim, o erro é por causa do nome da função errada no manipulador de eventos. Está faltando um r em entraLenhador, linha 14.
  6. script de boot / boot script

    GuilhermeP, Sempre que você for abrir um tópico em português, por favor postar sempre nesta seção: https://forum.mtasa.com/forum/127-programação-em-lua/ ( Other languages > Portuguese / Português )
  7. Tem certeza que o /debugscript 3 não mostra erro?
  8. [Ajuda] Dificuldade do trigger

    Tente: addEventHandler( "onClientResourceStart", resourceRoot, function() addEventHandler( "onClientMarkerHit", resourceRoot, onJobMarkerHit ) end ) function onGridListClick() local itemrow,itemcolumn = guiGridListGetSelectedItem(Lista) if itemrow ~= -1 and guiGridListGetItemText( Lista, itemrow, 1 ) == "Piloto" then piloto_marker = createMarker( ) piloto_blip = createBlipAttachedTo(piloto_marker) outputChatBox("Local marcador vá até o [T]") guiSetVisible(AgenciaT, false) showCursor(false) elseif itemrow ~= -1 and guiGridListGetItemText( Lista, itemrow, 1 ) == "Fazendeiro" then fazendeiro_marker = createMarker( ) fazendeiro_blip = createBlipAttachedTo(fazendeiro_marker) outputChatBox("Local marcador vá até o [T]") guiSetVisible(AgenciaT, false) showCursor(false) end end function onJobMarkerHit( theElement, d ) if theElement == localPlayer and d then if source == piloto_marker then triggerServerEvent( "server:takeJob", theElement, coloca_o_id_do_carro ) elseif source == fazendeiro_marker then triggerServerEvent( "server:takeJob", theElement, coloca_o_id_do_carro ) end end end
  9. Deve ter sido isso, e quando usa funções no lado errado, o debug mostra erro.
  10. O código que postei não funciona? Não vejo nada errado no código. E acabei de testar, a marca de entrar no emprego funciona e dá o veículo. Se não tiver funcionando com você, mostre o seu meta.xml.
  11. Erro debug @DestroyElement

    Use a checagem isElement na função DestroyVeiculo e também corrija a função getElementData, que deve ser assim: (getElementData( source, "Pegou" ) == true)
  12. Então carlos eduardo, Você já tinha me enviado uma MP sobre esse mesmo problema, e eu tinha feito um código adicionando o element-data, não sei se chegou a mensagem pra você, mas vou postar o código aqui. Client: ---------------------------------Criadores-------------------------------- ---Feito Por ~#Nops'^ e com a ajuda de DNL291--- -------------------------------------------------------------------------- addEventHandler( "onClientResourceStart", resourceRoot, function() ----------------------------------Marcas---------------------------------- MarkerTrab = createMarker (2182.1667480469, -1984.1248779297, 12.551010131836, "cylinder",2.0 , 255, 255, 0, 255) -------------------------------------------------------------------------- ----------------------------------Blips---------------------------------- BlipTrab = createBlipAttachedTo( MarkerTrab, 56 ) -------------------------------------------------------------------------- addEventHandler( "onClientMarkerHit", resourceRoot, onMarkerHitHandler ) end ) ------------------------------------------------------------------------------------------- ----------------------------------1Marcação------------------------------------------------ function onMarkerHitHandler( hitElement, mesmaDimensao ) if source == MarkerTrab1 then -- Primeira rota if getElementType(hitElement) == "vehicle" and getVehicleOccupant(hitElement) == localPlayer and mesmaDimensao then if getElementData( localPlayer, "Emprego" ) ~= "lixeiro" then return end; setElementFrozen( localPlayer, true ) -- true: Congelado | false: Descongelado setTimer( function(p) setElementFrozen( p, false ) end, 10000, 1, localPlayer ) outputChatBox ( "#0077ff====================", 255, 0, 0, true ) outputChatBox ( "#00ff77Aguardando pegar o lixo", 255, 0, 0, true ) outputChatBox ( "#0077ff====================", 255, 0, 0, true ) destroyElement (source) destroyElement (BlipTrab1) -- Criar segunda rota setTimer( function() MarkerTrab2 = createMarker (2182.1667480469, -1984.1248779297, 12.551010131836, "cylinder",2.0 , 255, 255, 0, 255) BlipTrab2 = createBlipAttachedTo( MarkerTrab2, 41 ) end, 1000, 1 ) end elseif source == MarkerTrab then -- Entrar no emprego if hitElement == localPlayer and mesmaDimensao then if getElementData( localPlayer, "Emprego" ) == "lixeiro" then return outputChatBox( "Você já está trabalhando nessa profissão!", 230,0,0 ) end triggerServerEvent( "server:criarVeiculo", localPlayer, 403 ) outputChatBox ( "#00ff77====================", 255, 0, 0, true ) outputChatBox ( "#0077ffVocê esta trabalhando de lixeiro, siga as marcas até o final para pegar seu $", 255, 0, 0, true ) outputChatBox ( "#00ff77====================", 255, 0, 0, true ) MarkerTrab1 = createMarker (2218.8298339844, -1784.7091064453, 12.234619140625, "cylinder",2.0 , 255, 255, 0, 255) BlipTrab1 = createBlipAttachedTo( MarkerTrab1, 41 ) end end end ------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------- Server: local veh = { } function criarVeiculo( ID ) if ( isElement(veh[source]) ) then destroyElement(veh[source]) end veh[source] = createVehicle(tonumber(ID), getElementPosition(source)) warpPedIntoVehicle(source, veh[source]) setElementData( source, "Emprego", "lixeiro" ) end addEvent( "server:criarVeiculo", true ) addEventHandler( "server:criarVeiculo", root, criarVeiculo )
  13. [Ajuda] Dificuldade do trigger

    Ok. Sobre a marca no lado server, a questão é que você não vai querer mostrar elas a outros jogadores e vai ter que ficar usando setElementVisibleTo pra deixar visível só pro jogador que está trabalhando, já criando no lado client, vai ser sempre criado pro jogador local e dispensa esse trabalho extra de ter que ocultar dos outros jogadores.
  14. [Ajuda] Dificuldade do trigger

    Client: function opengui_func() AgenciaT = guiCreateWindow(412, 90, 546, 486, "Agencia de Empregos", false) Aceitar = guiCreateButton(78, 436, 130, 27, "Aceitar", false, AgenciaT) Cancelar = guiCreateButton(348, 436, 130, 27, "Cancelar", false, AgenciaT) Lista = guiCreateGridList(53, 170, 451, 253, false, AgenciaT) guiGridListAddColumn(Lista, "Empregos", 0.3) guiGridListAddColumn(Lista, "Salários", 0.3) guiGridListAddColumn(Lista, "Cidades", 0.3) for i = 1, 2 do guiGridListAddRow(Lista) end guiGridListSetItemText(Lista, 0, 1, "Piloto", false, false) guiGridListSetItemText(Lista, 0, 2, "1500", false, false) guiGridListSetItemText(Lista, 0, 3, "Los Santos", false, false) guiGridListSetItemText(Lista, 1, 1, "Fazendeiro", false, false) guiGridListSetItemText(Lista, 1, 2, "1000", false, false) guiGridListSetItemText(Lista, 1, 3, "Los Santos", false, false) Messager = guiCreateMemo(48, 38, 451, 124, "Seja Bem Vindo a Prefeitura do Servidor, BRASIL TOP RPG para você começar a trabalhar precisa selecionar o emprego que você deseja trabalhar e apertar em Aceitar. Boa Sorte com seu novo emprego", false, AgenciaT) guiMemoSetReadOnly ( Messager, true) addEventHandler("onClientGUIClick", Cancelar, function() guiSetVisible(AgenciaT, false) showCursor(false) end, false) addEventHandler("onClientGUIClick", Aceitar, onGridListClick) end addEventHandler( "onClientResourceStart", resourceRoot, opengui_func ) function guioeffnen(player, d) if player == localPlayer and d then guiSetVisible(AgenciaT, true) showCursor(true) end end addEventHandler("onClientMarkerHit",marker,guioeffnen) function onGridListClick() local itemrow,itemcolumn = guiGridListGetSelectedItem(Lista) if itemrow ~= -1 and guiGridListGetItemText( Lista, itemrow, 1 ) == "Piloto" then piloto_marker = createMarker( ) piloto_blip = createBlipAttachedTo(piloto_marker) addEventHandler( "onClientMarkerHit", piloto_marker, onJobMarkerHit ) triggerServerEvent( "server:takeJob", localPlayer, coloca_o_id_do_carro ) outputChatBox("Local marcador vá até o [T]") guiSetVisible(AgenciaT, false) showCursor(false) elseif itemrow ~= -1 and guiGridListGetItemText( Lista, itemrow, 1 ) == "Fazendeiro" then fazendeiro_marker = createMarker( ) fazendeiro_blip = createBlipAttachedTo(fazendeiro_marker) addEventHandler( "onClientMarkerHit", fazendeiro_marker, onJobMarkerHit ) triggerServerEvent( "server:takeJob", localPlayer, coloca_o_id_do_carro ) outputChatBox("Local marcador vá até o [T]") guiSetVisible(AgenciaT, false) showCursor(false) end end function onJobMarkerHit( thePlayer ) -- end Server: local veh = {} function takeJob( vehID ) -- quero usar o marker de la para fazer essa função if veh[source] and isElement( veh[source] ) then destroyElement ( veh[source] ) veh[source] = nil end veh[source] = createVehicle( tonumber(vehID), getElementPosition(source) ) warpPedIntoVehicle( source, veh[source] ) end addEvent("server:takeJob",true) addEventHandler("server:takeJob", root, takeJob) Coloquei as marcas no lado client porque é o lado mais apropriado, apenas o veículo deve ficar no lado server. O código tava muito confuso, então refiz quase tudo. E a função onJobMarkerHit vai ser chamada quando uma das marcas ou do piloto ou fazendeiro for atingida.