Jump to content

Lord Henry

Other Languages Moderators
  • Posts

    3,991
  • Joined

  • Last visited

  • Days Won

    183

Everything posted by Lord Henry

  1. O MTA Server usa mais memoria RAM do que processador. E o nome daquele "prompt de comando preto" é Server Console.
  2. processLineOfSight é meio bugado, além de ser pesado. Você pode verificar a posição do clique e compará-lo com a posição do porta-malas. Se clicou perto da posição do porta-malas, então considera como clicou no porta-malas. function fClientClick (button, state, absoluteX, absoluteY, worldX, worldY, worldZ, clickedElement) if (button == "left") and (state == "up") then if not getPedOccupiedVehicle(localPlayer) and isElement(clickedElement) and getElementType(clickedElement) == "vehicle" then -- if getElementData(clickedElement, "Owner") == localPlayer then local cx, cy, cz = getVehicleComponentPosition(clickedElement, "boot_dummy", "world") -- Obtém a posição do porta-malas if (math.abs(cx - worldX) <= 1) and (math.abs(cy - worldY) <= 1) and (math.abs(cz - worldZ) <= 1) then -- Se a diferença entre a posição clicada e a posição do porta-malas for menor que 1 (clicou perto), então: print("Clicou no porta-malas!") else print("Não clicou no porta-malas.") end if (boot) then destroyElement (boot) end if (target) then destroyElement (target) end boot = createMarker (cx, cy, cz, "corona", 0.1) -- Somente para testes. Marca a posição do porta-malas em azul. target = createMarker (worldX, worldY, worldZ, "corona", 0.1, 255, 0, 0, 255) -- Somente para testes. Marca a posição clicada em vermelho. -- if not guiGetVisible(weaponWindow) then -- guiSetVisible(weaponWindow, true) -- triggerServerEvent("RefreshListWeapons", resourceRoot, getElementModel(clickedElement)) -- triggerServerEvent("OpenVehicleTrunk", resourceRoot, clickedElement, true) -- end -- vehicleClicked = clickedElement -- end end end end addEventHandler ("onClientClick", root, fClientClick) Se você quer que ele aceite cliques mais precisos, vc pode diminuir aqueles 1 da condição. Quanto menor o valor, mais perto do porta-malas precisa ser o clique para ser considerado no porta-malas.
  3. De nada, deixe um Thanks no comentário que lhe ajudou.
  4. Merry Christmas and happy holidays everyone. Feliz natal e feliz fim de ano para todos. E um salve pros BRs ?
  5. function chePlayergr(player,x,y,z,baseName) cheTimer = setTimer(function(player,baseName) if isElement(player) and getElementType(player) == "player" and baseName then if not((checkPlayerPermission(player,"A08") and getElementData(player,"Group") == getGroupNameFromBaseName(baseName)) or isObjectInACLGroup("user."..getAccountName(getPlayerAccount(player)),aclGetGroup("Admin"))) then if isTimer(cheTimer) then killTimer(cheTimer) end setElementPosition(player,x,y,z+1) outputChatBox("Você não tem mais acesso a Base!",player,255,255,255,true) end else killTimer(cheTimer) end end, 2000, 0, player, baseName) end Já vou logo adiantando que vai dar uma série de problemas por usar setTimer server-side e sem indexar no jogador. Outros jogadores causarão conflito neste setTimer.
  6. Na próxima vez, utilize o botão <> do fórum para postar código.
  7. Corrija a indentação. Está difícil de ler assim.
  8. Erro na linha 162. Se o veículo não possuir data de combustível, ele para de ler a função e nada acontece. Use essa: function kocsiindit() local veh = getPedOccupiedVehicle(localPlayer) local state = getVehicleEngineState ( veh ) if not state then m = true if getElementHealth(veh) >= 321 then --Verifica se o carro ta quebrado, se não estiver: m = true else m = false outputChatBox("#1066E7[BVH - Veiculo]: #FFFFFFParece que está com o motor fundido chame por um Mecânico /mecanicos!", 255, 255, 255, true) end if (getElementData(veh, "DNL:Combustivel")) then -- Verifica se o veículo tem dados de gasolina, se tiver: if getElementData(veh, "DNL:Combustivel") > 0 then --Verifica se o veiculo ta sem gasolina, se estiver com gasolina: m = true outputChatBox("#1066E7[BVH - Veiculo]: #FFFFFFVeiculo ligado!", 255, 255, 255, true) else m = false outputChatBox("#1066E7[BVH - Veiculo]: #FFFFFFO Veiculo está sem gasolina", 255, 255, 255, true) end else m = true outputChatBox("#1066E7[BVH - Veiculo]: #FFFFFFO Veiculo ligado. Este modelo não usa gasolina.", 255, 255, 255, true) end else m = false outputChatBox("#1066E7[BVH - Veiculo]: #FFFFFFVeiculo desligado!", 255, 255, 255, true) end triggerServerEvent("vehicleStart",localPlayer,localPlayer,veh,m) end
  9. A função unpack não funciona dessa maneira. Ela serve para "desempacotar" uma table em valores separados. Ex: Voltando ao seu problema, por favor evite de censurar a imagem do erro, pois assim não tem como saber qual função específica está gerando erro. Além disso, ninguém se importa com o nome do seu script. Você tem uma table com as coordenadas aleatórias onde o marker deve aparecer. Com o math.random vc seleciona uma dessas coordenadas e cria o marker nela. O unpack será usado para separar as coordenadas x, y, z em variáveis para poder criar o marker. Mas vale lembrar que não é obrigatório fazer com unpack, vou mostrar ambos os jeitos de ser feito: local arr = { {2455.423, -2079.331, 12.547}, -- Item 1 da table arr {2458.529, -2078.655, 12.547}, -- Item 2 da table arr {2462.126, -2078.502, 12.547}, -- E assim por diante. } function test () -- Exemplo com unpack: local x, y, z = unpack (arr[math.random (#arr)]) -- Desempacota um item aleatório da table arr. Atribuindo seus valores nas variáveis. createMarker (x, y, z, "cylinder", 1.5, 50, 100, 255, 100) end addCommandHandler ("teste", test) function test2 () -- Exemplo sem unpack: local indice = math.random (#arr) -- Gera um valor aleatório de 1 até 3 (pois 3 é o maior índice da table arr) [veja no próximo conteúdo oculto] local x = arr[indice][1] -- Atribui o primeiro valor do item aleatório no x. local y = arr[indice][2] -- Atribui o segundo valor do item aleatório no y. local z = arr[indice][3] -- Atribui o terceiro valor do item aleatório no z. -- Acima fiz basicamente o mesmo trabalho do unpack. createMarker (x, y, z, "cylinder", 1.5, 50, 100, 255, 100) end addCommandHandler ("testar", test2)
  10. Quando o player desloga, o timer dele continua mas o elemento do jogador não existe mais, gerando erro. Vc tem 2 opções: Não faça com setTimer. Adicione uma verificação no setTimer, que vai verificar se o player ainda existe, se não existir, cancela o timer com killTimer e cancela a função com um return.
  11. Tente isso: function verificarACL () local resourceName = getResourceName (resource) -- resource é uma variável predefinida pelo MTA, ela é = getThisResource() if not isObjectInACLGroup ("resource."..resourceName, aclGetGroup("Admin")) then outputDebugString (resourceName..": Adicione este resource na ACL Group 'Admin'") cancelEvent () end end addEventHandler ("onResourceStart", resourceRoot, verificarACL) -- Ativa essa função quando este resource for iniciado. -- resourceRoot também é predefinida pelo MTA, ela é = getResourceRootElement(getThisResource()) Predefined_variables_list Obs: É necessário estar com /debugscript 3 ativado para ver a mensagem.
  12. E mais uma coisa: Se o seu resource não tem permissão admin, ele não vai conseguir dar stopResource.
  13. Pra que usar a variável thisResource? É mais fácil usar direto o getThisResource() E está faltando evento ativador nessa sua função.
  14. Tem o createLight mas não sei se ele interage com objetos customizados.
  15. Eu usaria executeSQLQuery com banco de dados nativo do MTA. Não vejo vantagem em fazer externo com MySQL pois é um pouco mais complicado. E por estar aprendendo, o ideal é começar pelo mais fácil.
  16. Client function stopmusic() if (isElement (sound)) then stopSound(sound) end end addEvent ("pararsom", true) addEventHandler ("pararsom", root, stopmusic) addEventHandler ("onClientResourceStart", resourceRoot, function() setTimer (function() sound = playSound ("joinsound.mp3") end, 2000, 1) end) Server addEventHandler ("onPlayerLogin", root, function() triggerClientEvent (source, "pararsom", source) end)
  17. Ué. Já tentou estudar o realdriveby pra fazer igual?
  18. Utilize o botão <> do fórum para colar códigos. Não cole direto no texto.
  19. Utilize o botão <> do fórum para postar códigos. Não cole direto no texto.
  20. Troque os nomes dos eventos DNL:Pegar_Cargas, DNL:Pegar_Carro, DNL:Pegar_Uniforme(Sedex), DNL:Abrir_Correios e DNL:Fechar_Correios. Você deveria aprender a fazer scripts do 0 em vez de apenas modificar scripts de terceiros.
  21. Solicite suporte na página deles. Não temos relação com servidores específicos.
×
×
  • Create New...