Ir para conteúdo
Propaganda

Alteração de onuse para automatico sistema de tiro.


paulim78

Posts Recomendados

Galera eu meio que pedi para o chatgpt um código sobre sistema de tiro ele fez deu certo em actions, o problema e que para funciona tem que fica dando use na arma bota ela no hotkey e tals, eu queria vê se tem como adapta no actions ou criar em outro canto para ele atira automático ou seja selecionou o alvo com a arma equipada ele funciona sem precisa dar use.

Sei que o código pode está na pura gambiarra e tals vai fala que da para melhorar porem que gerou foi o chatgpt eu não sei programar kkk então para mim e assim se esta funcionando e o que vale, time que esta ganhando não se mexe kkkk, porem esse meu time ai precisa de algumas substituição kkk

 

o codigo.

 

local WEAPON_ID = 31159 -- ID da sua arma personalizada
local AMMO_ID = 29564 -- ID da munição
local MISSILE_EFFECT = 113 -- Efeito de míssil
local DAMAGE_TYPE = COMBAT_PHYSICALDAMAGE -- Tipo de dano físico

function onUse(player, item, fromPosition, target, toPosition, isHotkey)
    -- Verifica se a arma está equipada na mão direita ou esquerda
    local weaponInRightHand = player:getSlotItem(CONST_SLOT_RIGHT)
    local weaponInLeftHand = player:getSlotItem(CONST_SLOT_LEFT)

    -- Adiciona mensagens de depuração para verificar os itens equipados
    if weaponInRightHand then
    else
    end

    if weaponInLeftHand then
    else
    end

    -- Verificação correta do item equipado
    local isWeaponEquipped = false
    if weaponInRightHand and weaponInRightHand:getId() == WEAPON_ID then
        isWeaponEquipped = true
    elseif weaponInLeftHand and weaponInLeftHand:getId() == WEAPON_ID then
        isWeaponEquipped = true
    end

    -- Envia uma mensagem de erro se a arma não estiver equipada
    if not isWeaponEquipped then
        player:sendCancelMessage("Você precisa equipar a arma na sua mão para usá-la.")
        return false
    end

    -- Verifica se o alvo é um monstro
    if not target or not target:isMonster() then
        player:sendCancelMessage("Você só pode usar essa arma em monstros.")
        return false
    end

    -- Verifica se o jogador tem munição suficiente
    local ammoCount = player:getItemCount(AMMO_ID)
    if ammoCount <= 0 then
        player:sendCancelMessage("Você não tem munição suficiente.")
        return false
    end

    -- Remove a munição
    player:removeItem(AMMO_ID, 1)

    -- Cria o efeito do míssil
    local startPosition = player:getPosition()
    local endPosition = target:getPosition()
    startPosition:sendDistanceEffect(endPosition, MISSILE_EFFECT)

    -- Calcula o dano
    local ammoItem = ItemType(AMMO_ID)
    local minDamage = ammoItem:getAttack() -- O ataque mínimo da munição
    local maxDamage = minDamage * 2 -- Um exemplo, onde o dano máximo é o dobro do mínimo

    -- Aplica o dano ao monstro
    local damage = math.random(minDamage, maxDamage)
    target:addHealth(-damage)
    target:getPosition():sendMagicEffect(CONST_ME_HITAREA) -- Efeito de dano no monstro

    return true
end

 

Alguém de bom coração consegue me ajudar. 

Link para o comentário
Compartilhar em outros sites

  • Suporte
3 horas atrás, paulim78 disse:

Galera eu meio que pedi para o chatgpt um código sobre sistema de tiro ele fez deu certo em actions, o problema e que para funciona tem que fica dando use na arma bota ela no hotkey e tals, eu queria vê se tem como adapta no actions ou criar em outro canto para ele atira automático ou seja selecionou o alvo com a arma equipada ele funciona sem precisa dar use.

Sei que o código pode está na pura gambiarra e tals vai fala que da para melhorar porem que gerou foi o chatgpt eu não sei programar kkk então para mim e assim se esta funcionando e o que vale, time que esta ganhando não se mexe kkkk, porem esse meu time ai precisa de algumas substituição kkk

 

o codigo.

 

local WEAPON_ID = 31159 -- ID da sua arma personalizada
local AMMO_ID = 29564 -- ID da munição
local MISSILE_EFFECT = 113 -- Efeito de míssil
local DAMAGE_TYPE = COMBAT_PHYSICALDAMAGE -- Tipo de dano físico

function onUse(player, item, fromPosition, target, toPosition, isHotkey)
    -- Verifica se a arma está equipada na mão direita ou esquerda
    local weaponInRightHand = player:getSlotItem(CONST_SLOT_RIGHT)
    local weaponInLeftHand = player:getSlotItem(CONST_SLOT_LEFT)

    -- Adiciona mensagens de depuração para verificar os itens equipados
    if weaponInRightHand then
    else
    end

    if weaponInLeftHand then
    else
    end

    -- Verificação correta do item equipado
    local isWeaponEquipped = false
    if weaponInRightHand and weaponInRightHand:getId() == WEAPON_ID then
        isWeaponEquipped = true
    elseif weaponInLeftHand and weaponInLeftHand:getId() == WEAPON_ID then
        isWeaponEquipped = true
    end

    -- Envia uma mensagem de erro se a arma não estiver equipada
    if not isWeaponEquipped then
        player:sendCancelMessage("Você precisa equipar a arma na sua mão para usá-la.")
        return false
    end

    -- Verifica se o alvo é um monstro
    if not target or not target:isMonster() then
        player:sendCancelMessage("Você só pode usar essa arma em monstros.")
        return false
    end

    -- Verifica se o jogador tem munição suficiente
    local ammoCount = player:getItemCount(AMMO_ID)
    if ammoCount <= 0 then
        player:sendCancelMessage("Você não tem munição suficiente.")
        return false
    end

    -- Remove a munição
    player:removeItem(AMMO_ID, 1)

    -- Cria o efeito do míssil
    local startPosition = player:getPosition()
    local endPosition = target:getPosition()
    startPosition:sendDistanceEffect(endPosition, MISSILE_EFFECT)

    -- Calcula o dano
    local ammoItem = ItemType(AMMO_ID)
    local minDamage = ammoItem:getAttack() -- O ataque mínimo da munição
    local maxDamage = minDamage * 2 -- Um exemplo, onde o dano máximo é o dobro do mínimo

    -- Aplica o dano ao monstro
    local damage = math.random(minDamage, maxDamage)
    target:addHealth(-damage)
    target:getPosition():sendMagicEffect(CONST_ME_HITAREA) -- Efeito de dano no monstro

    return true
end

 

Alguém de bom coração consegue me ajudar. 

Tópico aprovado! 

Link para o comentário
Compartilhar em outros sites

23 horas atrás, paulim78 disse:

Galera eu meio que pedi para o chatgpt um código sobre sistema de tiro ele fez deu certo em actions, o problema e que para funciona tem que fica dando use na arma bota ela no hotkey e tals, eu queria vê se tem como adapta no actions ou criar em outro canto para ele atira automático ou seja selecionou o alvo com a arma equipada ele funciona sem precisa dar use.

Sei que o código pode está na pura gambiarra e tals vai fala que da para melhorar porem que gerou foi o chatgpt eu não sei programar kkk então para mim e assim se esta funcionando e o que vale, time que esta ganhando não se mexe kkkk, porem esse meu time ai precisa de algumas substituição kkk

 

o codigo.

 

local WEAPON_ID = 31159 -- ID da sua arma personalizada
local AMMO_ID = 29564 -- ID da munição
local MISSILE_EFFECT = 113 -- Efeito de míssil
local DAMAGE_TYPE = COMBAT_PHYSICALDAMAGE -- Tipo de dano físico

function onUse(player, item, fromPosition, target, toPosition, isHotkey)
    -- Verifica se a arma está equipada na mão direita ou esquerda
    local weaponInRightHand = player:getSlotItem(CONST_SLOT_RIGHT)
    local weaponInLeftHand = player:getSlotItem(CONST_SLOT_LEFT)

    -- Adiciona mensagens de depuração para verificar os itens equipados
    if weaponInRightHand then
    else
    end

    if weaponInLeftHand then
    else
    end

    -- Verificação correta do item equipado
    local isWeaponEquipped = false
    if weaponInRightHand and weaponInRightHand:getId() == WEAPON_ID then
        isWeaponEquipped = true
    elseif weaponInLeftHand and weaponInLeftHand:getId() == WEAPON_ID then
        isWeaponEquipped = true
    end

    -- Envia uma mensagem de erro se a arma não estiver equipada
    if not isWeaponEquipped then
        player:sendCancelMessage("Você precisa equipar a arma na sua mão para usá-la.")
        return false
    end

    -- Verifica se o alvo é um monstro
    if not target or not target:isMonster() then
        player:sendCancelMessage("Você só pode usar essa arma em monstros.")
        return false
    end

    -- Verifica se o jogador tem munição suficiente
    local ammoCount = player:getItemCount(AMMO_ID)
    if ammoCount <= 0 then
        player:sendCancelMessage("Você não tem munição suficiente.")
        return false
    end

    -- Remove a munição
    player:removeItem(AMMO_ID, 1)

    -- Cria o efeito do míssil
    local startPosition = player:getPosition()
    local endPosition = target:getPosition()
    startPosition:sendDistanceEffect(endPosition, MISSILE_EFFECT)

    -- Calcula o dano
    local ammoItem = ItemType(AMMO_ID)
    local minDamage = ammoItem:getAttack() -- O ataque mínimo da munição
    local maxDamage = minDamage * 2 -- Um exemplo, onde o dano máximo é o dobro do mínimo

    -- Aplica o dano ao monstro
    local damage = math.random(minDamage, maxDamage)
    target:addHealth(-damage)
    target:getPosition():sendMagicEffect(CONST_ME_HITAREA) -- Efeito de dano no monstro

    return true
end

 

Alguém de bom coração consegue me ajudar. 

Pedi para o chat, fazer com que fique atirando até usar o item novamente ou acabar a munição:

 

local WEAPON_ID = 31159 -- ID da sua arma personalizada
local AMMO_ID = 29564 -- ID da munição
local MISSILE_EFFECT = 113 -- Efeito de míssil
local DAMAGE_TYPE = COMBAT_PHYSICALDAMAGE -- Tipo de dano físico
local SHOOT_INTERVAL = 1000 -- Intervalo de disparo em milissegundos (1 segundo)
local shooting = false -- Variável de controle para saber se está atirando

local function shoot(player, target)
    -- Verifica se o alvo ainda é válido e se o jogador tem munição
    if not target or not target:isMonster() or player:getItemCount(AMMO_ID) <= 0 then
        player:sendCancelMessage("Você não tem munição suficiente ou o alvo não é válido.")
        shooting = false
        return
    end

    -- Remove a munição
    player:removeItem(AMMO_ID, 1)

    -- Cria o efeito do míssil
    local startPosition = player:getPosition()
    local endPosition = target:getPosition()
    startPosition:sendDistanceEffect(endPosition, MISSILE_EFFECT)

    -- Calcula o dano
    local ammoItem = ItemType(AMMO_ID)
    local minDamage = ammoItem:getAttack()
    local maxDamage = minDamage * 2
    local damage = math.random(minDamage, maxDamage)

    -- Aplica o dano ao monstro
    target:addHealth(-damage)
    target:getPosition():sendMagicEffect(CONST_ME_HITAREA)
end

function onUse(player, item, fromPosition, target, toPosition, isHotkey)
    -- Verifica se a arma está equipada na mão direita ou esquerda
    local weaponInRightHand = player:getSlotItem(CONST_SLOT_RIGHT)
    local weaponInLeftHand = player:getSlotItem(CONST_SLOT_LEFT)
    local isWeaponEquipped = (weaponInRightHand and weaponInRightHand:getId() == WEAPON_ID) or
                             (weaponInLeftHand and weaponInLeftHand:getId() == WEAPON_ID)

    if not isWeaponEquipped then
        player:sendCancelMessage("Você precisa equipar a arma na sua mão para usá-la.")
        return false
    end

    -- Se o jogador já está atirando, interrompe o loop
    if shooting then
        shooting = false
        player:sendCancelMessage("Você parou de atirar.")
        return true
    end

    -- Verifica se o alvo é um monstro
    if not target or not target:isMonster() then
        player:sendCancelMessage("Você só pode usar essa arma em monstros.")
        return false
    end

    -- Ativa o modo de tiro contínuo
    shooting = true
    player:sendCancelMessage("Atirando automaticamente...")

    -- Função que repete o disparo em intervalos definidos
    addEvent(function()
        if shooting and player:isPlayer() then
            shoot(player, target)
            addEvent(onUse, SHOOT_INTERVAL, player, item, fromPosition, target, toPosition, isHotkey)
        end
    end, SHOOT_INTERVAL)

    return true
end

 

Link para o comentário
Compartilhar em outros sites

cara isso praticamente e uma skill de missile ao clicar no item, tecnicaente e um script apenas pra isso, ate poque ta pra vc substituir um item do tibia e depois trocar o missile do no object build para ser de um tiro

 

Link para o comentário
Compartilhar em outros sites

11 horas atrás, Nemysis disse:

cara isso praticamente e uma skill de missile ao clicar no item, tecnicaente e um script apenas pra isso, ate poque ta pra vc substituir um item do tibia e depois trocar o missile do no object build para ser de um tiro

 

No caso é só ele fazer como se fosse um "bow", que já funcionaria perfeitamente.

Link para o comentário
Compartilhar em outros sites

16 horas atrás, Ryohei disse:

Pedi para o chat, fazer com que fique atirando até usar o item novamente ou acabar a munição:

 

local WEAPON_ID = 31159 -- ID da sua arma personalizada
local AMMO_ID = 29564 -- ID da munição
local MISSILE_EFFECT = 113 -- Efeito de míssil
local DAMAGE_TYPE = COMBAT_PHYSICALDAMAGE -- Tipo de dano físico
local SHOOT_INTERVAL = 1000 -- Intervalo de disparo em milissegundos (1 segundo)
local shooting = false -- Variável de controle para saber se está atirando

local function shoot(player, target)
    -- Verifica se o alvo ainda é válido e se o jogador tem munição
    if not target or not target:isMonster() or player:getItemCount(AMMO_ID) <= 0 then
        player:sendCancelMessage("Você não tem munição suficiente ou o alvo não é válido.")
        shooting = false
        return
    end

    -- Remove a munição
    player:removeItem(AMMO_ID, 1)

    -- Cria o efeito do míssil
    local startPosition = player:getPosition()
    local endPosition = target:getPosition()
    startPosition:sendDistanceEffect(endPosition, MISSILE_EFFECT)

    -- Calcula o dano
    local ammoItem = ItemType(AMMO_ID)
    local minDamage = ammoItem:getAttack()
    local maxDamage = minDamage * 2
    local damage = math.random(minDamage, maxDamage)

    -- Aplica o dano ao monstro
    target:addHealth(-damage)
    target:getPosition():sendMagicEffect(CONST_ME_HITAREA)
end

function onUse(player, item, fromPosition, target, toPosition, isHotkey)
    -- Verifica se a arma está equipada na mão direita ou esquerda
    local weaponInRightHand = player:getSlotItem(CONST_SLOT_RIGHT)
    local weaponInLeftHand = player:getSlotItem(CONST_SLOT_LEFT)
    local isWeaponEquipped = (weaponInRightHand and weaponInRightHand:getId() == WEAPON_ID) or
                             (weaponInLeftHand and weaponInLeftHand:getId() == WEAPON_ID)

    if not isWeaponEquipped then
        player:sendCancelMessage("Você precisa equipar a arma na sua mão para usá-la.")
        return false
    end

    -- Se o jogador já está atirando, interrompe o loop
    if shooting then
        shooting = false
        player:sendCancelMessage("Você parou de atirar.")
        return true
    end

    -- Verifica se o alvo é um monstro
    if not target or not target:isMonster() then
        player:sendCancelMessage("Você só pode usar essa arma em monstros.")
        return false
    end

    -- Ativa o modo de tiro contínuo
    shooting = true
    player:sendCancelMessage("Atirando automaticamente...")

    -- Função que repete o disparo em intervalos definidos
    addEvent(function()
        if shooting and player:isPlayer() then
            shoot(player, target)
            addEvent(onUse, SHOOT_INTERVAL, player, item, fromPosition, target, toPosition, isHotkey)
        end
    end, SHOOT_INTERVAL)

    return true
end

 

Esse não funcionou, pois tem que usar o item e quando usa da o erro
 

Lua Script Error: [Main Interface]
in a timer event called from:
(Unknown scriptfile)
LuaScriptInterface::luaAddEvent(). callback parameter should be a function.
stack traceback:
        [C]: in function 'addEvent'
        data/actions/scripts/2024/armas/glock.lua:68: in function <data/actions/scripts/2024/armas/glock.lua:65>



 

 

15 horas atrás, Nemysis disse:

cara isso praticamente e uma skill de missile ao clicar no item, tecnicaente e um script apenas pra isso, ate poque ta pra vc substituir um item do tibia e depois trocar o missile do no object build para ser de um tiro

 

Não importa como vai funcionar, só de não precisa clicar no item da use já esta ótimo kkk.

 

 

3 horas atrás, Ryohei disse:

No caso é só ele fazer como se fosse um "bow", que já funcionaria perfeitamente.

Não e só usar como Bow pq eu msm quero que uma arma usa vários tipo de munição e no usando igual uma bow tem que ser por item.xml e no item.xml o ammotype ele só reconhece 1 tipo de munição, fora que no item.xml não tem como configurar quantos tiro a arma vai dar. Exemplo  uma AK poderia bota para sair 3 tiro por vez, isso e apenas um exemplo, e que eu quero configurar mais coisas na arma e pelo item.xml não da, porem no item.xml não precisa dar use no item pois ele ja faz isso automático.

Link para o comentário
Compartilhar em outros sites

Participe da Conversa

Você pode postar agora e se cadastrar mais tarde. Cadastre-se Agora para publicar com Sua Conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.

×
  • Criar Novo...