Jump to content

Uma ajuda !


Recommended Posts

  • Other Languages Moderators

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 comment
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 comment
  • Other Languages Moderators

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