Ir para conteúdo
Propaganda

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


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
https://tibiadevs.com/forums/topic/703-altera%C3%A7%C3%A3o-de-onuse-para-automatico-sistema-de-tiro/
Compartilhar em outros sites

  • Moderador
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
https://tibiadevs.com/forums/topic/703-altera%C3%A7%C3%A3o-de-onuse-para-automatico-sistema-de-tiro/#findComment-3678
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
https://tibiadevs.com/forums/topic/703-altera%C3%A7%C3%A3o-de-onuse-para-automatico-sistema-de-tiro/#findComment-3688
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
https://tibiadevs.com/forums/topic/703-altera%C3%A7%C3%A3o-de-onuse-para-automatico-sistema-de-tiro/#findComment-3689
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
https://tibiadevs.com/forums/topic/703-altera%C3%A7%C3%A3o-de-onuse-para-automatico-sistema-de-tiro/#findComment-3690
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
https://tibiadevs.com/forums/topic/703-altera%C3%A7%C3%A3o-de-onuse-para-automatico-sistema-de-tiro/#findComment-3695
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
  • Criar Novo...