Jump to content

Uma ajuda !


Recommended Posts

Alguém sabe como eu posso fazer para um player morrer sem matar o outro na troca de tiro, no script de HS os dois conseguem morrer se os mesmos acertarem tiro um ao outro.

eu queria que nessa ocasião apenas um morresse.

Link to post
  • Administrators

Thread's been moved into the scripting section, as it's not a client/support question. :)

  • Thanks 1
Link to post

Olá.

Se você deseja realmente fazer isso, será necessário criar um sistema de dano/headshot totalmente do zero, sincronizando o cliente (jogador) ao servidor, pois apenas dessa forma seria possível. Eu já fiz algo assim, não é difícil, mas precisa ter certo conhecimento com a linguagem.

Client-side: necessário apenas o evento onClientPlayerDamage, e a função dele seria enviar as informações de dano ao servidor, usando triggerServerEvent (pode usar triggerLatentServerEvent também, caso queira deixar ainda mais otimizado). As informações que devem ser enviadas, são: o source do evento (quem levou o dano), a weapon (arma), bodypart (parte do corpo) e o loss (dano dado).

Server-side: no evento acionado pelo client-side, aquelas informações enviadas agora estarão presentes lá, no server-side. Uma vez com elas, basta trabalhar com algumas checagens e lógica para remover colete e vida, e também headshot. Para aquele problema não acontecer mais, você deve usar isPedDead no client (pessoa atacando), ou seja, se o jogador que estiver atacando morrer, não executará mais nada a partir disso, nenhum dano será aplicado ao alvo.

Spoiler

-- Client-side
addEventHandler("onClientPlayerDamage", root, function(attacker, weapon, bodypart, loss)
    cancelEvent()

    if attacker == localPlayer then
        triggerServerEvent("onPlayerDamageSync", localPlayer, source, weapon, bodypart, loss)
    end
end)

-- Server-side
local function doHeadshot(...)

end

local function doRemoveArmor(...)

end

local function doRemoveHealth(...)

end

addEvent("onPlayerDamageSync", true)
addEventHandler("onPlayerDamageSync", root, function(target, weapon, bodypart, loss)
    -- O `client` aqui seria o jogador que está atacando o `target` (alvo)
    if isPedDead(client) then
        return outputChatBox(getPlayerName(client) .. " #fffffftentou te atacar estando morto!", target, 255, 255, 255, true)
    end

    local targetHealth = getElementHealth(target)
    local targetArmor = getPedArmor(target)

    -- Lógica para aplicar o headshot, remover colete e depois vida
    if bodypart == 9 then
        return doHeadshot(...)
    end

    if targetArmor > 0 then
        return doRemoveArmor(...)
    end

    if targetHealth > 0 then
        return doRemoveHealth(...)
    end
end)

 

Te dei um exemplo de como seria as coisas por trás, pois acredito que você está começando agora. O resto, você deve fazer. Peça ajuda aqui caso tenha dúvidas. 😊

Link to post
1 hour ago, andr0xy said:

Olá.

Se você deseja realmente fazer isso, será necessário criar um sistema de dano/headshot totalmente do zero, sincronizando o cliente (jogador) ao servidor, pois apenas dessa forma seria possível. Eu já fiz algo assim, não é difícil, mas precisa ter certo conhecimento com a linguagem.

Client-side: necessário apenas o evento onClientPlayerDamage, e a função dele seria enviar as informações de dano ao servidor, usando triggerServerEvent (pode usar triggerLatentServerEvent também, caso queira deixar ainda mais otimizado). As informações que devem ser enviadas, são: o source do evento (quem levou o dano), a weapon (arma), bodypart (parte do corpo) e o loss (dano dado).

Server-side: no evento acionado pelo client-side, aquelas informações enviadas agora estarão presentes lá, no server-side. Uma vez com elas, basta trabalhar com algumas checagens e lógica para remover colete e vida, e também headshot. Para aquele problema não acontecer mais, você deve usar isPedDead no client (pessoa atacando), ou seja, se o jogador que estiver atacando morrer, não executará mais nada a partir disso, nenhum dano será aplicado ao alvo.

  Reveal hidden contents


-- Client-side
addEventHandler("onClientPlayerDamage", root, function(attacker, weapon, bodypart, loss)
    cancelEvent()

    if attacker == localPlayer then
        triggerServerEvent("onPlayerDamageSync", localPlayer, source, weapon, bodypart, loss)
    end
end)

-- Server-side
local function doHeadshot(...)

end

local function doRemoveArmor(...)

end

local function doRemoveHealth(...)

end

addEvent("onPlayerDamageSync", true)
addEventHandler("onPlayerDamageSync", root, function(target, weapon, bodypart, loss)
    -- O `client` aqui seria o jogador que está atacando o `target` (alvo)
    if isPedDead(client) then
        return outputChatBox(getPlayerName(client) .. " #fffffftentou te atacar estando morto!", target, 255, 255, 255, true)
    end

    local targetHealth = getElementHealth(target)
    local targetArmor = getPedArmor(target)

    -- Lógica para aplicar o headshot, remover colete e depois vida
    if bodypart == 9 then
        return doHeadshot(...)
    end

    if targetArmor > 0 then
        return doRemoveArmor(...)
    end

    if targetHealth > 0 then
        return doRemoveHealth(...)
    end
end)

 

Te dei um exemplo de como seria as coisas por trás, pois acredito que você está começando agora. O resto, você deve fazer. Peça ajuda aqui caso tenha dúvidas. 😊

Eu não tenho muita experiência com LUA, sei o básico. 

Link to post

Você pode aprender e tentar. 😃 - quaisquer dúvidas, pode mandar aqui mesmo, sobre o seu problema deste tópico. Nós não damos códigos totalmente prontos aos usuários, pois isso não iria incentivá-los a criar seus próprios scripts.

Link to post

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...