-
Posts
4,006 -
Joined
-
Last visited
-
Days Won
184
Everything posted by Lord Henry
-
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.
-
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.
-
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.
-
[Dúvida] Fazer para painel dx não bugar
Lord Henry replied to Nice_x #Scripting;'s topic in Programação em Lua
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) -
Já existe um parâmetro de distância, aprenda a ler códigos em vez de só copiar.
-
Vc não declarou weapon em lugar nenhum.
-
[Dúvida] Fazer para painel dx não bugar
Lord Henry replied to Nice_x #Scripting;'s topic in Programação em Lua
Faça tudo com posição e tamanho fixo, sem ser relativo. -
createBlipAttachedTo (anexe no thePlayer) O ID do blip de coração é o 21.
-
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)
- 1 reply
-
- 1
-
-
De nada. Deixe um thanks pra me ajudar.
-
Não entendi nada. Seu texto é ilegível. (vou deixar quote, pra caso vc resolva editar)
-
Da próxima vez, veja as regras do fórum e poste na seção correta que é no OffTopic. Regras:
-
Top List MTA
Lord Henry replied to zTokyoGamer's topic in Ajudas relacionadas ao MTA:SA (Cliente/Servidor)
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. -
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)
-
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.
-
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)
-
Ele quis dizer que está faltando a parte do render. Que tem os dxDraw.
-
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.
-
@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.
-
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
-
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.
-
Não sei. Não temos como adivinhar como vc está trabalhando com o level.
-
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)
-
Claro que vai, só n coloquei pq ela fica fora daquela função.
-
Editei a resposta.