Jump to content

Samu


Recommended Posts

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
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 by Brendo
Link to comment
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...

GuP8M-CzSzqUIW32rtS19Q.png

Link to comment
  • Other Languages Moderators

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)

 

  • Thanks 1
Link to comment
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

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)

 

  • Thanks 1
Link to comment
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 by Brendo
Link to comment
  • Other Languages Moderators

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 by Lord Henry
  • Thanks 1
  • Haha 1
Link to comment

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
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 by Lord Henry
  • Thanks 1
Link to comment
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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...