Jump to content

Tempo de explosão da granada


Recommended Posts

  • Other Languages Moderators

Olá.

Sim, é possível. Fiz até um código de teste. A granada explode 500ms após ser lançada.

addEventHandler("onClientProjectileCreation", root, function(creator)
    iprint(getProjectileType(source))

    if getProjectileType(source) == 16 then
        setProjectileCounter(source, 500)
    end
end)

Funções:

Evento:

  • onClientProjectileCreation - o evento é client-side, porém ele sincroniza para todos assim que alguém cria um projétil; seja molotov, granada, basuca.
  • Like 1
  • Thanks 1
Link to comment
  • 2 weeks later...
On 23/04/2021 at 09:47, andr0xy said:

Olá.

Sim, é possível. Fiz até um código de teste. A granada explode 500ms após ser lançada.


addEventHandler("onClientProjectileCreation", root, function(creator)
    iprint(getProjectileType(source))

    if getProjectileType(source) == 16 then
        setProjectileCounter(source, 500)
    end
end)

Funções:

Evento:

  • onClientProjectileCreation - o evento é client-side, porém ele sincroniza para todos assim que alguém cria um projétil; seja molotov, granada, basuca.

Muito obrigado, e tbm seria possivel fazela explodir ao bater em algo, como no chão por exemplo ou na parede?

 

Link to comment
  • Other Languages Moderators

Sim, é possível. Fiz para explodir quando bater no chão. Segue o código de testes:

Spoiler

local createdGrenades = {}

local function processGrenades()
    for index, grenade in pairs(createdGrenades) do
        if isElement(grenade) then
            local gx, gy, gz = getElementPosition(grenade)
            local ground = getGroundPosition(gx, gy, gz)

            if gz < ground + 0.55 then
                iprint("Hit!")
                setProjectileCounter(grenade, 0)
            end
        else
            table.remove(createdGrenades, index)
            if #createdGrenades == 0 then
                removeEventHandler("onClientPreRender", root, processGrenades)
            end
        end
    end
end

addEventHandler("onClientProjectileCreation", root, function(creator)
    if getProjectileType(source) == 16 then
        table.insert(createdGrenades, source)
        setProjectileCounter(source, 10000)

        if #createdGrenades == 1 then
            addEventHandler("onClientPreRender", root, processGrenades)
        end
    end
end)

 

Agora, para fazer com que qualquer hit na granada, fizesse a explodir, seria um pouco mais complexo. Fiz alguns testes, mas não funcionou muito bem. Caso se interesse, tentei usando a função isLineOfSightClear.

  • Like 1
  • Thanks 1
Link to comment
9 hours ago, andr0xy said:

Sim, é possível. Fiz para explodir quando bater no chão. Segue o código de testes:

  Hide contents


local createdGrenades = {}

local function processGrenades()
    for index, grenade in pairs(createdGrenades) do
        if isElement(grenade) then
            local gx, gy, gz = getElementPosition(grenade)
            local ground = getGroundPosition(gx, gy, gz)

            if gz < ground + 0.55 then
                iprint("Hit!")
                setProjectileCounter(grenade, 0)
            end
        else
            table.remove(createdGrenades, index)
            if #createdGrenades == 0 then
                removeEventHandler("onClientPreRender", root, processGrenades)
            end
        end
    end
end

addEventHandler("onClientProjectileCreation", root, function(creator)
    if getProjectileType(source) == 16 then
        table.insert(createdGrenades, source)
        setProjectileCounter(source, 10000)

        if #createdGrenades == 1 then
            addEventHandler("onClientPreRender", root, processGrenades)
        end
    end
end)

 

Agora, para fazer com que qualquer hit na granada, fizesse a explodir, seria um pouco mais complexo. Fiz alguns testes, mas não funcionou muito bem. Caso se interesse, tentei usando a função isLineOfSightClear.

muito bom obrigado, vc quer fazer uns trabalhos pra min? pago o preço que sugerir!
add discord L0KZERA#1826

Link to comment
4 hours ago, andr0xy said:

De nada. Agradeço a oferta, mas no momento não. :)

Muito obrigado pela ajuda, sem querer pedir muito poderia me ajudar na ultima coisa, precisava de um script que faria o boneco andar somente no modo walk('ALT')  por id, se ru adicionar o id da skin 200, somente essa skin vai andar no walk. 

 

Bom desde ja agradeço 

Link to comment
if ( getElementModel (thePlayer) == ) then

A sua condição está errada, thePlayer não é um elemento. Os parâmetros desse evento são o modelo antigo e o novo modelo, não um player como vc passou pra sua função, já o source é o elemento que está sendo modificado. E também faltou o 200 depois do == para verificar. O que você poderia fazer, semelhante ao que você fez mas de uma forma correta, é:  if getElementModel(source) == 200 then  ...

Mas por questão de desempenho é melhor pegar o newModel (que é o atual model/skin do elemento) e verificar se é 200, em vez de chamar a função getElementModel pra isso...

function onPlayerModelChange (oldModel, newModel ) --Os parâmetros são a antiga e a nova skin
    if ( newModel == 200 ) then -- Verifica se a nova skin é a de ID 200
        toggleControl ( source, "sprint", false ) --Se for:
    else
        toggleControl ( source, "sprint", true ) --Se não for:
    end
end
addEventHandler ( "onElementModelChange", root, onPlayerModelChange ) -- Aqui também tinha faltado o elemento a qual o evento vai ser anexado, no caso o root.

Eu nunca usei esse evento e nem testei aqui, veja se funciona pra você e qualquer coisa posta aí no fórum ;) 

Edited by Boechat
  • Like 1
Link to comment
  • Other Languages Moderators

O código que o Boechat te mandou parece bom e parece funcionar. Só um adendo: faça uma tabela das skins que irão andar apenas no modo lento, pra evitar fazer 10 condições desnecessárias.

Usando o código do Boechat:

local nonSprintSkins = {
    -- [ID DA SKIN] = true
    [200] = true,
    [2] = true,
    [51] = true
}

function onPlayerModelChange (oldModel, newModel) --Os parâmetros são a antiga e a nova skin
    if ( nonSprintSkins[newModel] ) then -- Verifica se a nova skin é a de ID 200
        toggleControl ( source, "sprint", false ) --Se for:
    else
        toggleControl ( source, "sprint", true ) --Se não for:
    end
end
addEventHandler ( "onElementModelChange", root, onPlayerModelChange ) -- Aqui também tinha faltado o elemento a qual o evento vai ser anexado, no caso o root.

 

Link to comment
3 hours ago, andr0xy said:

O código que o Boechat te mandou parece bom e parece funcionar. Só um adendo: faça uma tabela das skins que irão andar apenas no modo lento, pra evitar fazer 10 condições desnecessárias.

Usando o código do Boechat:


local nonSprintSkins = {
    -- [ID DA SKIN] = true
    [200] = true,
    [2] = true,
    [51] = true
}

function onPlayerModelChange (oldModel, newModel) --Os parâmetros são a antiga e a nova skin
    if ( nonSprintSkins[newModel] ) then -- Verifica se a nova skin é a de ID 200
        toggleControl ( source, "sprint", false ) --Se for:
    else
        toggleControl ( source, "sprint", true ) --Se não for:
    end
end
addEventHandler ( "onElementModelChange", root, onPlayerModelChange ) -- Aqui também tinha faltado o elemento a qual o evento vai ser anexado, no caso o root.

 

Caraca vcs me ajudaram muito, muito obrigado, vou utilizar muito essa ferramenta. 

  • Haha 1
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...