Jump to content

DNL291

Retired Staff
  • Posts

    3,875
  • Joined

  • Days Won

    67

Everything posted by DNL291

  1. 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 )
  2. 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.
  3. 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.
  4. 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.
  5. GuilhermeP, Sempre que você for abrir um tópico em português, por favor postar sempre nesta seção: https://forum.multitheftauto.com/forum/127-programação-em-lua/ ( Other languages > Portuguese / Português )
  6. Tem certeza que o /debugscript 3 não mostra erro?
  7. 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
  8. Deve ter sido isso, e quando usa funções no lado errado, o debug mostra erro.
  9. 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.
  10. Use a checagem isElement na função DestroyVeiculo e também corrija a função getElementData, que deve ser assim: (getElementData( source, "Pegou" ) == true)
  11. 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 )
  12. 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.
  13. 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.
  14. Então você ainda não corrigiu, se está o mesmo erro é porque a string QuitType está no lugar do jogador. Coloque source como eu disse.
  15. Parameters string quitType, string reason, element responsibleElement O parâmetro tá errado, tire thePlayer e substitua por source. Edit: Você pode usar a variável hilux pra obter o veículo. Ou também esta função: function destroyPlayerVehicles( p ) local vehicles = getElementsByType( "vehicle" ) for _,v in pairs(vehicles) do local syncer = getElementSyncer(v) if p and syncer == p then destroyElement(v) end end end
  16. Não sei o motivo de não dar a quebra de linha, estranho, teria que funcionar da forma que está, pode ser algum bug do MTA, problema com codificação, sei lá Tem outra forma de qubrar a linha com [[ ]] quer seria assim: [[recruta (membro)]] Dai você poderia usar as funções de strings pra separar. Nunca testei isso, mas talvez funcione. Edit: Curioso isso, talvez seja um bug mesmo e a solução seja refazer o \n por código.
  17. Você usa (membro) somente quando está como recruta? Se for isso mesmo, é só fazer assim que deve funcionar: local patente = xmlACLValues[i][2] == "recruta" and "recruta\n(membro)" or xmlACLValues[i][2] buttons[i][k] = guiCreateButton (250, 50*(k-1)-30, 150, 40, patente, false, PainelTAG) E claro, remove (membro) do arquivo XML.
  18. Aqui engloba tudo da linguagem Lua, como se fosse as áreas Scripting e Resources mescladas. Mas se fosse na parte principal do subfórum acho que não teria problemas também, já que se trata da venda de um script, e não showcase por exemplo. Aqui não tem nenhuma regra especifica pra tópicos de venda de script, então tudo com ligação à programação tem o mesmo caráter.
  19. @Daniel Reis, aí você já quer tudo na sua mão né? Primeiro seja mais grato às pessoas, teve posts bem útil pra você aprender aqui e você simplesmente ignora e sequer agradece. Você mesmo pediu pra que te ensinasse e agora quer tudo pronto? Até agora você não demostrou interesse em aprender nada, apenas posta comentários curtos e que se dane o resto...
  20. Não tem problema em postar aqui, na verdade é a área correta.
  21. DNL291

    Help

    Use the exported function getPlayerCountry of the admin resource.
  22. Troca pelo botão de aceitar no evento "onClientGUIClick", assim: addEventHandler("onClientGUIClick", Aceitar, onGridListClick, false) E na verificação da função guiGridListGetItemText cria o blip, fecha a janela, seta no emprego, etc.
  23. Adiciona o evento "onClientGUIClick" para a gridList, por exemplo: addEventHandler("onClientGUIClick", Lista, onGridListClick) E chame a função: function onGridListClick() local itemrow,itemcolumn = guiGridListGetSelectedItem(Lista) if itemrow ~= -1 then if guiGridListGetItemText( Lista, itemrow, 1 ) == "Piloto" then end end end
  24. Como você não digitou a mensagem do debug toda, não sei exatamente o que tem errado no código, pra mim não parece ter nenhum erro. Será que não foi o nick do jogador inválido?Agora percebi o erro, na linha 4, troque playerTarget por playerName, deixe assim: local playerTarget = getPlayerFromPartialName( playerName ) Nem esquenta, não leva muito tempo pra fazer código assim e sempre gostei mais de ajudar do que de fazer scripts pra mim mesmo.
×
×
  • Create New...