Jump to content

Lord Henry

Other Languages Moderators
  • Posts

    4,006
  • Joined

  • Last visited

  • Days Won

    184

Everything posted by Lord Henry

  1. Eu faria o valor da recompensa ser de acordo com o dano do veículo a ser consertado. Por exemplo: Veículo que estava mais danificado dará mais dinheiro ao mecânico.
  2. Se vc tivesse acessado o link da Wiki do onClientVehicleDamage que eu mandei na primeira resposta, saberia onde declarar o weapon. Parâmetro de função.
  3. Pois é. A lógica está errada. Deveria ter um >= ali. Pois se a distância for exatamente 335, não vai entrar em nenhuma condição. Além disso essas distâncias estão grandes demais, dai é óbvio que o cara vai conseguir algemar players que estão longe.
  4. Vc precisa obter a resolução do jogador com guiGetScreenSize. Dai na posição X do painel, vc coloca o tamanho x da tela do jogador menos o tamanho x do painel. Ex: screenX, screenY = guiGetScreenSize () function renderPainel() dxDrawRectangle (screenX - 400, 0, 400, 300, tocolor(255, 255, 0, 150)) -- Painel tem tamanho X:400 e Y:300 end addEventHandler ("onClientRender", getRootElement(), renderPainel)
  5. Já existe um parâmetro de distância, aprenda a ler códigos em vez de só copiar.
  6. Vc não declarou weapon em lugar nenhum.
  7. Faça tudo com posição e tamanho fixo, sem ser relativo.
  8. createBlipAttachedTo (anexe no thePlayer) O ID do blip de coração é o 21.
  9. acls = { "Console", "Admin", -- Mais quantas quiser... } function teleprotect (thePlayer) local Deadusergroup = getAccountName(getPlayerAccount(thePlayer)) for _, acl in ipairs (acls) do if isObjectInACLGroup("user."..Deadusergroup, aclGetGroup(acl)) then setElementPosition (thePlayer, 1541.3057861328, -1366.1774902344, 329.796875) -- outputChatBox ('#000000[ #ff0000 /Comando #000000 ]#ffffff ' .. getPlayerName(thePlayer) .. ' #00FF00Foi para Base #000000[ Nome #000000]', getRootElement(), 255, 255, 255, true) return end end -- outputChatBox (getPlayerName(thePlayer) .. '#ff0000Somente Quem tem permissão da #000000[ Nome #000000 ] #ff0000Pode Ir para Base', source, 255, 255, 255, true) end addCommandHandler ("prisao", teleprotect)
  10. De nada. Deixe um thanks pra me ajudar.
  11. Não entendi nada. Seu texto é ilegível. (vou deixar quote, pra caso vc resolva editar)
  12. Lord Henry

    Scripter

    Da próxima vez, veja as regras do fórum e poste na seção correta que é no OffTopic. Regras:
  13. Atualmente o serviço de Toplist já está cheio. Mas você pode submeter o IP do seu servidor na fila para que ele entre na toplist quando abrir uma vaga. Acesse https://mtasa.com/toplist/ e informe o IP do seu servidor para mais detalhes de preço.
  14. client: function updateWanted (level) if numberLabel then guiSetText(numberLabel,"Nivel de Procurado: "..level) end end addEvent ("wantedClient", true) addEventHandler ("wantedClient", getRootElement(), updateWanted) function click(button, state, absoluteX, absoluteY, worldX, worldY, worldZ, clickedElement) if isElement(chaseWindow) and button == "left" and state == "down" then if clickedElement and getElementType(clickedElement) == "vehicle" then local sx,sy,sz = getElementVelocity(clickedElement) local driver = getVehicleController(clickedElement) local realSpeed = ((sx^2 + sy^2 + sz^2)^(0.5)) * 180 guiSetText(speedLabel,"Velocidade de: "..math.floor(realSpeed).." км/H") if driver then guiSetText(driverLabel,"Motorista: "..getPlayerName(driver)) triggerServerEvent ("wantedServer", localPlayer, driver) else guiSetText(driverLabel,"Motorista: Não encontrado") end if realSpeed >= chaseSpeedLimit then guiSetEnabled(chaseButton,true) guiLabelSetColor(speedLabel,255,0,0) else guiSetEnabled(chaseButton,false) guiLabelSetColor(speedLabel,255,255,255) end clickedVeh = clickedElement end end end addEventHandler ("onClientClick", getRootElement(), click) server: function getWantedServer (theDriver) if isElement (theDriver) then local wantedLevel = getPlayerWantedLevel (theDriver) triggerClientEvent (client, "wantedClient", client, wantedLevel) end end addEvent ("wantedServer", true) addEventHandler ("wantedServer", getRootElement(), getWantedServer)
  15. Tente com getVehicleController. function click(button, state, absoluteX, absoluteY, worldX, worldY, worldZ, clickedElement) if isElement(chaseWindow) and button == "left" and state == "down" then if clickedElement and getElementType(clickedElement) == "vehicle" then local sx,sy,sz = getElementVelocity(clickedElement) local driver = getVehicleController(clickedElement) local realSpeed = ((sx^2 + sy^2 + sz^2)^(0.5)) * 180 guiSetText(speedLabel,"Velocidade de: "..math.floor(realSpeed).." км/H") if driver then guiSetText(driverLabel,"Motorista: "..getPlayerName(driver)) else guiSetText(driverLabel,"Motorista: Não encontrado") end if numberLabel then guiSetText(numberLabel,"Nivel de Procurado: "..getPlayerWantedLevel(driver)) end if realSpeed >= chaseSpeedLimit then guiSetEnabled(chaseButton,true) guiLabelSetColor(speedLabel,255,0,0) else guiSetEnabled(chaseButton,false) guiLabelSetColor(speedLabel,255,255,255) end clickedVeh = clickedElement end end end EDIT: Testei aqui e descobri. A função getPlayerWantedLevel sempre retornará o nível de procurado do localPlayer quando executada client-side. Tanto é que ela não usa parâmetros se estiver client-side.
  16. Verifiquei aqui e detectei alguns erros na parte server-side. Aparentemente o onPlayerMarkerHit só funciona anexado ao root mesmo, o que é bem estranho... Também havia problemas com o timer, que não é capaz de obter source de outro evento, sendo necessário passar o source por parâmetro nele. Então ficou assim: local theTimers = {} local theMarker = createMarker (1409.666, -1790.515, 12.6, "cylinder", 1.2, 200, 50, 0, 150) function DeltaSCRAbrir (marker, matchingDimension) if marker == theMarker then if getPedOccupiedVehicle(source) == false then if isTimer(theTimers[source]) then outputChatBox ("╔═════════════════════════════════════════════════╗", source, 200, 50, 0) outputChatBox ("ERRO: #FFFFFFVocê já resgatou seu bônus diário, aguarde para resgatar o próximo", source, 200, 50, 0, true) outputChatBox ("╚═════════════════════════════════════════════════╝", source, 200, 50, 0) else theTimers[source] = setTimer (function (theSource) theTimers[theSource] = nil end, 60000, 1, source) -- 1 minuto. triggerClientEvent (source, "DeltaSCR:Abrir", source) end end end end addEventHandler ("onPlayerMarkerHit", getRootElement(), DeltaSCRAbrir) addEventHandler ("onPlayerLogout", getRootElement(), function (thePreviousAccount, theCurrentAccount) local timerDetails = getTimerDetails (theTimers[source]) -- Nesta função, source = player que deslogou. setAccountData (thePreviousAccount, "DeltaSCR:Timers", timerDetails) end) addEventHandler ("onPlayerQuit", getRootElement(), function() -- OnPlayerQuit não chama o evento onPlayerLogout, vc deve salvar a data aqui também. if isTimer(theTimers[source]) then -- Nesta função, source = player que quitou do server. local timerDetails = getTimerDetails (theTimers[source]) setAccountData (getPlayerAccount(source), "DeltaSCR:Timers", timerDetails) -- Salva a data na conta do player que quitou. killTimer(theTimers[source]) -- Cancela o timer. end theTimers[source] = nil -- Anula a variável do timer, para liberar espaço na memória. end) addEventHandler ("onPlayerLogin", getRootElement(), function (thePreviousAccount, theCurrentAccount) local dataTimer = getAccountData (theCurrentAccount, "DeltaSCR:Timers") if dataTimer then setAccountData (theCurrentAccount, "DeltaSCR:Timers", false) -- Remove o tempo restante da conta do player. Ela será salva novamente caso o player deslogue ou quite do server. theTimers[source] = setTimer (function (theSource) -- Nesta função, source = player que logou. theTimers[theSource] = nil end, dataTimer, 1, source) -- Recria o timer com o tempo restante que estava salvo. end end)
  17. Ele quis dizer que está faltando a parte do render. Que tem os dxDraw.
  18. Faça a parte do dano client-side. Dai você usa o evento onClientVehicleDamage e verifica se o attacker for um player, o motorista não perde vida.
  19. @Tio.Andy pelo jeito vc não sabe nem a lógica de programação, colega. Comece por aqui: Curso de Algoritmos #02 - YouTube Não tem aquele primeiro parênteses antes do getPlayerName, também não tem aquele player ali, só o thePlayer.
  20. Vc está usando 2 parâmetros no getPlayerWantedLevel: thePlayer e proc. E não faz sentido vc usar a variável proc pois ela é igual a driver. Seria mais fácil vc simplesmente usar driver no lugar de proc. function click(button, state, absoluteX, absoluteY, worldX, worldY, worldZ, clickedElement) if isElement(chaseWindow) and button == "left" and state == "down" then if clickedElement and getElementType(clickedElement) == "vehicle" then local sx,sy,sz = getElementVelocity(clickedElement) local driver = getVehicleOccupant(clickedElement) local realSpeed = ((sx^2 + sy^2 + sz^2)^(0.5)) * 180 guiSetText(speedLabel,"Velocidade de: "..math.floor(realSpeed).." км/H") if driver then guiSetText(driverLabel,"Motorista: "..getPlayerName(driver)) else guiSetText(driverLabel,"Motorista: Não encontrado") end if numberLabel then guiSetText(numberLabel,"Nivel de Procurado: "..getPlayerWantedLevel(driver)) end if realSpeed >= chaseSpeedLimit then guiSetEnabled(chaseButton,true) guiLabelSetColor(speedLabel,255,0,0) else guiSetEnabled(chaseButton,false) guiLabelSetColor(speedLabel,255,255,255) end clickedVeh = clickedElement end end end
  21. Não. Só se vc quiser que a função ative em todos os markers do server. Ah, se der erro é pq faltou vc criar o theMarker.
  22. Não sei. Não temos como adivinhar como vc está trabalhando com o level.
  23. local theTimers = {} function DeltaSCRAbrir (theMarker, matchingDimension) if getPedOccupiedVehicle(source) == false then if isTimer(theTimers[source]) then outputChatBox ("╔═════════════════════════════════════════════════╗", source, 200, 50, 0) outputChatBox ("ERRO: #FFFFFFVocê já resgatou seu bônus diario, aguarde para resgatar o próximo", source, 200, 50, 0, true) outputChatBox ("╚═════════════════════════════════════════════════╝", source, 200, 50, 0) else theTimers[source] = setTimer (function () theTimers[source] = nil end, 60000, 1) -- 1 minuto. triggerClientEvent (source, "DeltaSCR:Abrir", source) end end end addEventHandler ("onPlayerMarkerHit", theMarker, DeltaSCRAbrir) addEventHandler ("onPlayerLogout", getRootElement(), function (thePreviousAccount, theCurrentAccount) local timerDetails = getTimerDetails (theTimers[source]) -- Nesta função, source = player que deslogou. setAccountData (thePreviousAccount, "DeltaSCR:Timers", timerDetails) end) addEventHandler ("onPlayerQuit", getRootElement(), function() -- OnPlayerQuit não chama o evento onPlayerLogout, vc deve salvar a data aqui também. if isTimer(theTimers[source]) then -- Nesta função, source = player que quitou do server. local timerDetails = getTimerDetails (theTimers[source]) setAccountData (getPlayerAccount(source), "DeltaSCR:Timers", timerDetails) -- Salva a data na conta do player que quitou. killTimer(theTimers[source]) -- Cancela o timer. end theTimers[source] = nil -- Anula a variável do timer, para liberar espaço na memória. end) addEventHandler ("onPlayerLogin", getRootElement(), function (thePreviousAccount, theCurrentAccount) local dataTimer = getAccountData (theCurrentAccount, "DeltaSCR:Timers") if dataTimer then setAccountData (theCurrentAccount, "DeltaSCR:Timers", false) -- Remove o tempo restante da conta do player. Ela será salva novamente caso o player deslogue ou quite do server. theTimers[source] = setTimer (function () -- Nesta função, source = player que logou. theTimers[source] = nil end, dataTimer, 1) -- Recria o timer com o tempo restante que estava salvo. end end)
  24. Claro que vai, só n coloquei pq ela fica fora daquela função.
×
×
  • Create New...