Brendo Posted February 13, 2019 Share Posted February 13, 2019 Olha eu aquiiiiiii kkk, parei....To com um problema aqui e não consigo identificar oque é, vi que tem outro membro com a mesma dúvida porém ele não esta sabendo postar corretamente, então pra saciar a dúvida dele e a minha é o seguinte, to com um mod de samu que ao chegar aos 30% de vida o boneco cai, até ai tudo bem o porém é que inicia uma contagem de 3 minutos e antes de dar os 3 minutos o boneco morre, cheguem nos help, vou deixar o client e o server aqui pq o erro pode estar em qualquer um dos dois né, vai saber. Client: local screenW, screenH = guiGetScreenSize() local resW, resH = 1360,768 local x, y = (screenW/resW), (screenH/resH) local screenWidth, screenHeight = guiGetScreenSize() local myScreenSource = dxCreateScreenSource(screenWidth, screenHeight) local flickerStrength = 0 local dxfont0_fonte = dxCreateFont("font/fonte.ttf", 13) addEventHandler("onClientKey", root, function (button, press) if getElementData(getLocalPlayer(),"playerFallen") then if button == "F2" or button == "F3" or button == "F4" or button == "F5" or button == "F6" or button == "F7" or button == "b" or button == "F9" or button == "F10" or button == "F11" or button == "F12" then cancelEvent() end end end ) function blockDead() if getElementHealth(localPlayer) <= 30 then if not getElementData(localPlayer, "jobSAMU") then if not getElementData(localPlayer, "playerFallen") then cancelEvent() end end end end addEventHandler("onClientPlayerDamage", localPlayer, blockDead) function text() for _, player in ipairs(getElementsByType('player')) do if isElementOnScreen(player) and getElementData(player, "playerFallen") then local x, y, z = getElementPosition(player) local cx, cy, cz = getCameraMatrix() local vx, vy, vz = getPedBonePosition(player, 8) local dist = getDistanceBetweenPoints3D(cx, cy, cz, vx, vy, vz) local drawDistance = 30.0 if (dist < drawDistance or player == target) then if(isLineOfSightClear(cx, cy, cz, vx, vy, vz, true, false, false)) then local x, y = getScreenFromWorldPosition (vx, vy, vz + 0.6) if(x and y) then local px, py = getScreenFromWorldPosition (vx, vy, vz + 0.3) local w = dxGetTextWidth("PRECISANDO DE CURA!", 1, "default-bold") local h = dxGetFontHeight(1, "default-bold") dxDrawImage(x -6 - w / 2,y - 15 - h - 12, w + 25, h + 115, 'images/hp.png', 0, 0, 0, tocolor(255, 0, 0, math.abs(math.sin(getTickCount()/170))*200)) dxDrawRectangle(x -6 - w / 2,y - 15 - h - 12, w + 9, h, tocolor(0, 0, 0, 194), false) dxDrawText("#FFFFFFPRECISANDO DE #FF0000CURA#FFFFFF!", x - 0 - w / 2,y - 15 - h - 12, w, h, tocolor(255,0,0, math.abs(math.sin(getTickCount()/170))*200), 1, "default-bold", "left", "top", false, false, false, true, false) end end end end end end addEventHandler("onClientRender", root, text) function convertTime(ms) local min = math.floor ( ms/60000 ) local sec = math.floor( (ms/1000)%60 ) return min, sec end function isEventHandlerAdded( sEventName, pElementAttachedTo, func ) if type( sEventName ) == 'string' and isElement( pElementAttachedTo ) and type( func ) == 'function' then local aAttachedFunctions = getEventHandlers( sEventName, pElementAttachedTo ) if type( aAttachedFunctions ) == 'table' and #aAttachedFunctions > 0 then for i, v in ipairs( aAttachedFunctions ) do if v == func then return true end end end end return false end function contador() local timer = interpolateBetween(deadTime, 0, 0, 0, 0, 0, (getTickCount()-tick)/deadTime, "Linear") local minutes, seconds = convertTime(timer) dxDrawText("Tempo de vida restante: "..minutes..":"..seconds, (screenW * 0.3801) + 1, (screenH * 0.9089) + 1, (screenW * 0.7059) + 1, (screenH * 1.0299) + 1, tocolor(0, 0, 0, 132), 1.00, dxfont0_fonte, "left", "top", false, false, false, false, false) dxDrawText("Tempo de vida restante: #FF0000"..minutes.."#FFFFFF:#FF0000"..seconds, screenW * 0.3801, screenH * 0.9089, screenW * 0.7059, screenH * 1.0299, tocolor(255, 255, 255, 255), 1.00, dxfont0_fonte, "left", "top", false, false, false, true, false) end function createShader() oldFilmShader, oldFilmTec = dxCreateShader("shaders/old_film.fx") end function updateShader() upDateScreenSource() if (oldFilmShader) then local flickering = math.random(100 - flickerStrength, 100)/100 dxSetShaderValue(oldFilmShader, "ScreenSource", myScreenSource); dxSetShaderValue(oldFilmShader, "Flickering", flickering); dxDrawImage(0, 0, screenWidth, screenHeight, oldFilmShader) end end function upDateScreenSource() dxUpdateScreenSource(myScreenSource) end function render() if not isEventHandlerAdded("onClientRender", root, contador) then tick = getTickCount() createShader() addEventHandler("onClientRender", root, contador) addEventHandler("onClientPreRender", root, updateShader) end end addEvent("startDeadTime", true) addEventHandler("startDeadTime", root, render) function remove() if isEventHandlerAdded("onClientRender", root, contador) then removeEventHandler("onClientRender", root, contador) removeEventHandler("onClientPreRender", root, updateShader) end end addEvent("stopDeadTime", true) addEventHandler("stopDeadTime", root, remove) Server: addEventHandler("onResourceStart", resourceRoot, function() for i,v in ipairs(getElementsByType('player')) do setElementData(v, "data.playerID", i) end end ) addEventHandler("onPlayerJoin", root, function() for i,v in ipairs(getElementsByType('player')) do setElementData(v, "data.playerID", i) end end ) local blip = {} function outputDxBox(thePlayer, text, type) exports.Scripts_Dxmessages:outputDx(thePlayer, text, type) end function getPlayerFromPartialName(name) local name = name and name:gsub("#%x%x%x%x%x%x", ""):lower() or nil if name then for _, player in ipairs(getElementsByType("player")) do local name_ = getPlayerName(player):gsub("#%x%x%x%x%x%x", ""):lower() if name_:find(name, 1, true) then return player end end end end function setPlayerFallen(player, state) if state == true then toggleAllControls(player, false) toggleControl(player, "chatbox", true) setElementHealth(player, 80) setElementData(player, "playerFallen", true) setElementFrozen(player, true) triggerClientEvent(player, "startDeadTime", player) end if state == false then setElementHealth(player, 80) triggerClientEvent(player, "stopDeadTime", player) toggleAllControls(player, true) setElementData(player, "playerFallen", false) setElementFrozen(player, false) end end function checkData() for i, player in pairs (getElementsByType("player")) do if isObjectInACLGroup("user."..getAccountName(getPlayerAccount(player)), aclGetGroup("SAMU")) then if not getElementData(player, "jobSAMU") then setElementData(player, "jobSAMU", true) end end end end addEventHandler("onPlayerLogin", root, checkData) addEventHandler("onPlayerSpawn", root, checkData) addEventHandler("onResourceStart", resourceRoot, checkData) function checkHealth() for i, player in pairs (getElementsByType("player")) do if not getElementData(player, "playerFallen") then local conta = getAccountName(getPlayerAccount(player)) if not isObjectInACLGroup("user."..conta, aclGetGroup("SAMU")) then if getElementHealth(player) >= 1 then if getElementHealth(player) <= hpFallen then removePedFromVehicle(player) setPlayerFallen(player, true) setPedAnimation(player, "SWEET", "Sweet_injuredloop", 1000, false, false, false, true) triggerClientEvent(player, "startDeadTime", player) outputDxBox(player, 'Aperte F1 e solicite o SAMU ou morrerá em 3 minutos!', "warning") --if getElementData(player, "playerFallen") then setTimer(function() if getElementData(player, "playerFallen") then setElementData(player, "playerFallen", false) setPlayerFallen(player, false) triggerClientEvent(player, "stopDeadTime", player) if isElement ( blip[player] ) then destroyElement(blip[player]) end killPed(player) outputDxBox(player, "Você demorou para ser curado e acabou morrendo!", "info") end end, 180000, 1) --end end end end end end end setTimer(checkHealth, 1000, 0) function helpCommand(source) for i, player in pairs (getElementsByType("player")) do if getElementData(source, "playerFallen") then local accName = getAccountName ( getPlayerAccount ( player ) ) if ( isObjectInACLGroup ("user."..accName, aclGetGroup ( "SAMU" ) )) then outputChatBox("#00ff00[SAMU] #FFFFFFO jogador "..getPlayerName(source).." #FFFFFFestá pedindo socorro! Procurem o blip de coração.", player, 255, 255, 255, true) outputChatBox("#00ff00[SAMU] #FFFFFFO ID da chamada é: #00ff00("..getElementData(source, "data.playerID")..")", player, 255, 255, 255, true) outputDxBox(source, "Você ligou para o número de emergência! Aguarde.", "info") if blip[source] and isElement(blip[source]) then destroyElement(blip[source]) blip[source] = nil end local x, y, z = getElementPosition(source) blip[source] = createBlip(x, y, z, 21) --setElementVisibleTo(blip[source], root, false) --setElementVisibleTo(blip[source], player, true) end else outputDxBox(source, "Você não precisa de atendimento.", "error") end end end addCommandHandler("1922", helpCommand) function onWasted(killer) if getElementData(source, "playerFallen") then setPlayerFallen(source, false) setElementData(source, "playerFallen", false) triggerClientEvent(source, "stopDeadTime", source) if blip[source] and isElement(blip[source]) then destroyElement(blip[source]) blip[source] = nil end end end addEventHandler("onPlayerWasted", root, onWasted) function onQuit() for i, player in pairs (getElementsByType("player")) do if getElementData(player, "playerFallen") then if blip[player] and isElement(blip[player]) then destroyElement(blip[player]) blip[player] = nil end end end end addEventHandler("onPlayerQuit", root, onQuit) function secret() for i, player in pairs (getElementsByType("player")) do setPlayerFallen(player, false) end end addCommandHandler("levantarmorto", secret) function curarPlayer(thePlayer, command, nameP) if nameP then if getPlayerFromPartialName(nameP) then local conta = getAccountName (getPlayerAccount(thePlayer)) if isObjectInACLGroup("user."..conta, aclGetGroup("SAMU")) then local namePlayer = getPlayerFromPartialName(nameP) local nameR = getPlayerName(namePlayer) local wanted = getPlayerWantedLevel(namePlayer) local px, py, pz = getElementPosition(thePlayer) local rx, ry, rz = getElementPosition(namePlayer) local distancia = getDistanceBetweenPoints3D(px, py, pz, rx, ry, rz) local medKit = getElementData(thePlayer, "KitMedico") if (distancia > 3) then outputDxBox(thePlayer, "Você precisa chegar mais perto do jogador para curá-lo.", "error") elseif (distancia < 2) then if getElementData(namePlayer, "playerFallen") then if medKit > 0 then setPedAnimation(thePlayer, "BOMBER", "BOM_Plant", 1000, false) if isElement ( blip[namePlayer] ) then destroyElement(blip[namePlayer]) end setElementData(thePlayer, "KitMedico", medKit - 1) outputDxBox(thePlayer, "Curando jogador...", "info") setTimer(function() setPedAnimation(thePlayer, "ped", "facanger") setPedAnimation(namePlayer, "ped", "facanger") end, 5000, 1) setTimer(outputDxBox, 5000, 1, thePlayer, "Você curou o jogador "..nameR, "success") --setTimer(outputDxBox, 5000, 1, thePlayer, "Caso fique bugado use #00ff00/debug", "success") setTimer(outputDxBox, 5000, 1, namePlayer, "Você foi curado por um médico!", "success") --setTimer(outputDxBox, 5000, 1, namePlayer, "Caso fique bugado use #00ff00/debug!", "success") setTimer(givePlayerMoney, 5000, 1, thePlayer, 3000) setTimer(setPlayerFallen, 5000, 1, namePlayer, false) setTimer(function() setElementData ( thePlayer, "AirNewSCR_LiberarXP", "Sim" ) setPedAnimation ( thePlayer ) setPedAnimation ( namePlayer ) end, 6000, 1) else outputDxBox(thePlayer, "Você precisa de um Kit Médico.", "error") end else outputDxBox(thePlayer, "O jogador não precisa ser curado.", "error") end end else outputDxBox(thePlayer, "Permissão negada para teste comando!", "error") end end else outputDxBox(thePlayer, "Erro! O correto é /curar Nome", "error") end end addCommandHandler("curar", curarPlayer) Link to comment
Other Languages Moderators Lord Henry Posted February 13, 2019 Other Languages Moderators Share Posted February 13, 2019 Sua função convertTime está errada. 1 Link to comment
Brendo Posted February 13, 2019 Author Share Posted February 13, 2019 (edited) 18 minutes ago, Lord Henry said: Sua função convertTime está errada. Eu nem manjo dessa função, como eu arrumo? Edit: abri o sv pra testar com um amg meu e os players as vezes fica imortal, a vida chega a 30 e não abaixa mais... Edited February 13, 2019 by Brendo Link to comment
Other Languages Moderators Lord Henry Posted February 13, 2019 Other Languages Moderators Share Posted February 13, 2019 function convertTime (ms) local min = math.floor (ms/60000) local sec = math.floor (ms/1000) return min, sec end 1 Link to comment
Brendo Posted February 13, 2019 Author Share Posted February 13, 2019 31 minutes ago, Lord Henry said: function convertTime (ms) local min = math.floor (ms/60000) local sec = math.floor (ms/1000) return min, secend Agora o contador bugou... E como eu disse...abri o sv pra testar com um amg meu e os players as vezes fica imortal, a vida chega a 30 e não abaixa mais... Link to comment
Other Languages Moderators Lord Henry Posted February 13, 2019 Other Languages Moderators Share Posted February 13, 2019 Ali na linha 21, me explique cada linha da função blockDead. function blockDead() if getElementHealth(localPlayer) <= 30 then -- COMENTÁRIO AQUI if not getElementData(localPlayer, "jobSAMU") then -- COMENTÁRIO AQUI if not getElementData(localPlayer, "playerFallen") then -- COMENTÁRIO AQUI cancelEvent() -- COMENTÁRIO AQUI end end end end addEventHandler("onClientPlayerDamage", localPlayer, blockDead) 1 Link to comment
Brendo Posted February 13, 2019 Author Share Posted February 13, 2019 14 hours ago, Lord Henry said: Ali na linha 21, me explique cada linha da função blockDead. function blockDead() if getElementHealth(localPlayer) <= 30 then -- COMENTÁRIO AQUI if not getElementData(localPlayer, "jobSAMU") then -- COMENTÁRIO AQUI if not getElementData(localPlayer, "playerFallen") then -- COMENTÁRIO AQUI cancelEvent() -- COMENTÁRIO AQUI end end endendaddEventHandler("onClientPlayerDamage", localPlayer, blockDead) Não fui eu que fiz o script então não sei explicar muito bem, fora a parte de eu ser leigo kkk mais a função blockdead obviamente evita do player morrer e quem ta como "SAMU" Não cai, ele morre direto. Link to comment
Other Languages Moderators Lord Henry Posted February 13, 2019 Other Languages Moderators Share Posted February 13, 2019 Então vou explicar pra vc e dai vc arruma: function blockDead() if getElementHealth(localPlayer) <= 30 then -- Se o player estiver com 30 ou menos de vida, então: if not getElementData(localPlayer, "jobSAMU") then -- Se o player NÃO estiver com a data jobSAMU, então: if not getElementData(localPlayer, "playerFallen") then -- Se o player NÃO estiver com a data playerFallen, então: cancelEvent() -- Cancela o dano no player. end end end end addEventHandler("onClientPlayerDamage", localPlayer, blockDead) 1 Link to comment
Brendo Posted February 13, 2019 Author Share Posted February 13, 2019 (edited) 2 hours ago, Lord Henry said: Então vou explicar pra vc e dai vc arruma: function blockDead() if getElementHealth(localPlayer) <= 30 then -- Se o player estiver com 30 ou menos de vida, então: if not getElementData(localPlayer, "jobSAMU") then -- Se o player NÃO estiver com a data jobSAMU, então: if not getElementData(localPlayer, "playerFallen") then -- Se o player NÃO estiver com a data playerFallen, então: cancelEvent() -- Cancela o dano no player. end end endendaddEventHandler("onClientPlayerDamage", localPlayer, blockDead) ta, como vou arrumar se n entendi foi nd? Edited February 13, 2019 by Brendo Link to comment
Other Languages Moderators Lord Henry Posted February 13, 2019 Other Languages Moderators Share Posted February 13, 2019 (edited) Putz, dai tu complica né mano. Vc baixa o resource e n entende nem a lógica dele? E dai como vc espera que a gente te ajude se vc não sabe nem como ele funciona? Quer que a gente faça tudo pra vc? Aliás se vc soubesse lógica de programação, vc já poderia descobrir o que está errado ali. Edited February 13, 2019 by Lord Henry 1 1 Link to comment
Brendo Posted February 13, 2019 Author Share Posted February 13, 2019 Te entendo man, porém como a resource é pronta então acreditei que viria sem erros e acredite, a ultima coisa que faço é perguntar pra vocês aqui! antes disso eu faço uma pesquisa, tento ler o código (com o pouco conhecimento que tenho) pra tentar identificar onde esta o erro e então se eu não tiver sucesso que eu venho pra cá, sei que ultimamente é o que eu mais faço e sei que da um puta trampo eu entregar a dúvida e o código aqui pra vocês e vocês tentarem resolver e por isso sempre tento ajudar deixando thanks quando me ajudam e também quando não ajudam pois sei que pararam pelo menos pra da uma atenção. Mais realmente, eu não sei onde ta o erro...msm assim obg por tentar ajudar. Link to comment
Other Languages Moderators Lord Henry Posted February 13, 2019 Other Languages Moderators Share Posted February 13, 2019 (edited) function blockDead() if getElementHealth(localPlayer) <= 30 then -- ERRO: localPlayer nem sempre é quem está levando dano. Quem sempre está levando dano é o source. if not getElementData(localPlayer, "jobSAMU") then -- Se o player NÃO estiver trabalhando como SAMU, então: if not getElementData(localPlayer, "playerFallen") then -- Se o player NÃO estiver aguardando atendimento do SAMU, então: (ERRO) cancelEvent() -- Cancela o dano no player. ERRO: Vai cancelar o dano em jogadores saudáveis. Pois eles não estão trabalhando no SAMU e não estão aguardando atendimento do SAMU. E a verificação de vida nem sempre é deles. end end end end addEventHandler("onClientPlayerDamage", localPlayer, blockDead) Eu faria algo assim: function blockDead() if source == localPlayer then -- Se o elemento que tomou dano for o localPlayer, então: (Garante que essa função só funcionará no cliente do localPlayer que estiver tomando dano. Além de evitar que source seja outro tipo de elemento.) if getElementHealth (source) <= 30 then -- Se o jogador que tomou dano ficar com 30 ou menos de vida após o dano, então: if not getElementData (source, "jobSAMU") then -- Se o player que domou dano NÃO estiver trabalhando como SAMU, então: if getElementData (source, "playerFallen") then -- Se o player que tomou dano estiver SIM aguardando atendimento do SAMU, então: cancelEvent() -- Cancela o dano no player, fazendo com que a vida volte ao que estava antes desse dano. -- Se o jogador estiver com 45 de vida e o dano for de 15 ou mais, então ele não vai perder vida, pois ficaria com 30 ou menos. end end end end end addEventHandler("onClientPlayerDamage", localPlayer, blockDead) Obs: Não testei. E pelo que andei olhando no resto do código, tem outros erros também. Como por exemplo uma variável que não existe sendo usada em comparação. Edited February 13, 2019 by Lord Henry 1 Link to comment
Brendo Posted February 14, 2019 Author Share Posted February 14, 2019 16 hours ago, Lord Henry said: function blockDead() if getElementHealth(localPlayer) <= 30 then -- ERRO: localPlayer nem sempre é quem está levando dano. Quem sempre está levando dano é o source. if not getElementData(localPlayer, "jobSAMU") then -- Se o player NÃO estiver trabalhando como SAMU, então: if not getElementData(localPlayer, "playerFallen") then -- Se o player NÃO estiver aguardando atendimento do SAMU, então: (ERRO) cancelEvent() -- Cancela o dano no player. ERRO: Vai cancelar o dano em jogadores saudáveis. Pois eles não estão trabalhando no SAMU e não estão aguardando atendimento do SAMU. E a verificação de vida nem sempre é deles. end end endendaddEventHandler("onClientPlayerDamage", localPlayer, blockDead) Eu faria algo assim: function blockDead() if source == localPlayer then -- Se o elemento que tomou dano for o localPlayer, então: (Garante que essa função só funcionará no cliente do localPlayer que estiver tomando dano. Além de evitar que source seja outro tipo de elemento.) if getElementHealth (source) <= 30 then -- Se o jogador que tomou dano ficar com 30 ou menos de vida após o dano, então: if not getElementData (source, "jobSAMU") then -- Se o player que domou dano NÃO estiver trabalhando como SAMU, então: if getElementData (source, "playerFallen") then -- Se o player que tomou dano estiver SIM aguardando atendimento do SAMU, então: cancelEvent() -- Cancela o dano no player, fazendo com que a vida volte ao que estava antes desse dano. -- Se o jogador estiver com 45 de vida e o dano for de 15 ou mais, então ele não vai perder vida, pois ficaria com 30 ou menos. end end end endendaddEventHandler("onClientPlayerDamage", localPlayer, blockDead) Obs: Não testei. E pelo que andei olhando no resto do código, tem outros erros também. Como por exemplo uma variável que não existe sendo usada em comparação. dei uma olhada e acabei retirando o block dead e em quesito as variáveis já resolvi tbm vlw. Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now