Ir para conteúdo
  • Cadastre-se

(Resolvido)[PEDIDO] Uma arma, várias munições.


Ir para solução Resolvido por zipter98,

Posts Recomendados

EDITADO E ARRUMADO

 

Olá pessoal!

 

 

 

Em meu server quero um lança-granadas estilo Resident Evil 5, que o lançador dispara diferentes munições e cada uma tem um efeito, que vai desde a de ácido, fogo, explosão, até raios e etc. 

Funcionará assim:

 

o item 2447 precisa estar equipado no slot de arma(SLOT_LEFT)

if getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid ~= item.itemid then


        doPlayerSendCancel(cid, "O lançador deve estar equipado no slot da arma.") return true

 

a munição(ID de 11395 até 11400) precisa estar no slot de munição(SLOT_AMMO)

if getPlayerSlotItem(cid, CONST_SLOT_AMMO).itemid ~= item.itemid then


        doPlayerSendCancel(cid, "A munição deve estar equipado no slot da arma.") return true

 

 

O lançador será usado como arma(Use With no alvo) e só funcionará se tiver alguma das munições equipadas, e cada munição terá um effect, dist effect e damage diferentes(preciso mesmo é do script, pq configurar eu posso fazer).

 

 

 

Esperando ajuda, e a quem ajudar.. grato desde já!

Editado por biel.stocco (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Então, estava pensando aqui sobre isso e pelo jeito terá de ser um sistema diferente, irei até abrir um na seção de pedidos..

Funcionará assim:

 

o item 2447 precisa estar equipado no slot de arma(SLOT_LEFT)

if getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid ~= item.itemid then


        doPlayerSendCancel(cid, "O lançador deve estar equipado no slot da arma.") return true

 

a munição(ID de 11395 até 11400) precisa estar no slot de munição(SLOT_AMMO)

if getPlayerSlotItem(cid, CONST_SLOT_AMMO).itemid ~= item.itemid then


        doPlayerSendCancel(cid, "A munição deve estar equipado no slot da arma.") return true

 

 

O lançador será usado como arma(Use With no alvo) e só funcionará se tiver alguma das munições equipadas, e cada munição terá um effect, dist effect e damage diferentes

Link para o post
Compartilhar em outros sites
  • Solução
local ar1 = createCombatArea{
    {0, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0, 0},
    {0, 0, 1, 1, 1, 0, 0},
    {0, 0, 1, 3, 1, 0, 0},
    {0, 0, 1, 1, 1, 0, 0},
    {0, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0, 0}
}
local ar2 = createCombatArea{
    {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
    {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
    {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0},
    {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
    {1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1},
    {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
    {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0},
    {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
    {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}
}
local ar3 = createCombatArea{
    {0, 0, 0, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 1, 1, 1, 0, 0, 0},
    {0, 0, 1, 1, 1, 1, 1, 0, 0},
    {0, 0, 1, 1, 3, 1, 1, 0, 0},
    {0, 0, 1, 1, 1, 1, 1, 0, 0},
    {0, 0, 0, 1, 1, 1, 0, 0, 0},
    {0, 0, 0, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0, 0, 0, 0}
}
 
function doPlayerShootBazooka(cid, target, times, delay, area, min, max, effect, dist_effect, exhaust, rounds)
    if rounds == nil then rounds = 1 end
    exhaustion.set(cid, 57193, exhaust)
    doSendDistanceShoot(getCreaturePosition(cid), getThingPos(target), dist_effect)
    doAreaCombatHealth(cid, COMBAT_FIREDAMAGE, getThingPos(target), area, -min, -max, effect)
    if rounds == times then
        return true
    end
    addEvent(doPlayerShootBazooka, shots_delay, cid, target, times, delay, area, min, max, effect, dist_effect, exhaust, rounds+1)
end
 
function onUse(cid, item, fromPosition, itemEx, toPosition)
    local weapons = { -- [ID da arma] = {tiros, delay_dos_tiros, ammo, area, dano_min, dano_max, efeito, distance_effect, exhaustion},
        [2449] = {
            shots = 1,
            shots_delay = 50, 
            area = ar1,
            exha = 5,
            ammo = {
                --Configure aqui as munições da arma.
                [11399] = {min = 25600, max = 35720, effect = 23, dist_effect = 35},
                [itemid] = {min = minDamage, max = maxDamage, effect = effect, dist_effect = distanceEffect},
                [itemid] = {min = minDamage, max = maxDamage, effect = effect, dist_effect = distanceEffect},
                [itemid] = {min = minDamage, max = maxDamage, effect = effect, dist_effect = distanceEffect},
            },
        },
    }
    local gun = weapons[item.itemid]
    
    if gun then
        if getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid ~= item.itemid then
            doPlayerSendCancel(cid, "O lançador deve estar equipado no slot da arma.") return true
        elseif getPlayerStorageValue(cid, 18391) == 1 then
            doPlayerSendCancel(cid, "Você não pode atirar enquanto dirige.") return true
        elseif getPlayerStorageValue(cid, 18393) == 1 then
            doPlayerSendCancel(cid, "Você não pode atirar com o capacete.") return true
        elseif exhaustion.check(cid, 57193) then
            doPlayerSendCancel(cid, "Você está exausto.") return true
        elseif getPlayerSlotItem(cid, CONST_SLOT_AMMO).uid < 1 then
            return doPlayerSendCancel(cid, "A munição deve estar equipada no slot da munição.")
        elseif not gun.ammo[getPlayerSlotItem(cid, CONST_SLOT_AMMO).itemid] then
            return doPlayerSendCancel(cid, "Wrong ammo for this gun.")
        elseif getPlayerItemCount(cid, getPlayerSlotItem(cid, CONST_SLOT_AMMO).itemid) < gun.shots then
            doPlayerSendCancel(cid, "Você não possui munição.") return true
        end
        local ammo = gun.ammo[getPlayerSlotItem(cid, CONST_SLOT_AMMO).itemid]
        doPlayerRemoveItem(cid, getPlayerSlotItem(cid, CONST_SLOT_AMMO).itemid, gun.shots) 
        doPlayerShootBazooka(cid, itemEx.uid, gun.shots, gun.shots_delay, gun.area, ammo.min, ammo.max, ammo.effect, ammo.dist_effect, gun.exha)
    end
    return true
end
Editado por zipter98 (veja o histórico de edições)

não respondo pms solicitando suporte em programação/scripting

Link para o post
Compartilhar em outros sites

Vlww manin, REP+ pra vc, muito grato!!

configurei e ficou assim

local ar1 = createCombatArea{


{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
{0, 0, 0, 0, 1, 3, 1, 0, 0, 0, 0},
{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
}
 
function doPlayerShootBazooka(cid, target, times, delay, area, min, max, effect, dist_effect, exhaust, rounds)
    if rounds == nil then rounds = 1 end
    exhaustion.set(cid, 57193, exhaust)
    doSendDistanceShoot(getCreaturePosition(cid), getThingPos(target), dist_effect)
    doAreaCombatHealth(cid, COMBAT_FIREDAMAGE, getThingPos(target), area, -min, -max, effect)
    if rounds == times then
        return true
    end
    addEvent(doPlayerShootBazooka, shots_delay, cid, target, times, delay, area, min, max, effect, dist_effect, exhaust, rounds+1)
end
 
function onUse(cid, item, fromPosition, itemEx, toPosition)
    local weapons = { -- [iD da arma] = {tiros, delay_dos_tiros, ammo, area, dano_min, dano_max, efeito, distance_effect, exhaustion},
        [2447] = {
            shots = 1,
            shots_delay = 50,
            area = ar1,
            exha = 5,
            ammo = {
                --Configure aqui as munições da arma.
                [11400] = {min = 25600, max = 35720, effect = 15, dist_effect = 8},
                [11399] = {min = 25600, max = 35720, effect = 48, dist_effect = 8},
                [11398] = {min = 25600, max = 35720, effect = 51, dist_effect = 8},
                [11397] = {min = 25600, max = 35720, effect = 43, dist_effect = 8},
                [11396] = {min = 25600, max = 35720, effect = 7, dist_effect = 8},
                [11395] = {min = 25600, max = 35720, effect = 20, dist_effect = 8},
            },
        },
    }
    local gun = weapons[item.itemid]
    
    if gun then
        if getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid ~= item.itemid then
            doPlayerSendCancel(cid, "O lançador deve estar equipado no slot da arma.") return true
        elseif getPlayerStorageValue(cid, 18391) == 1 then
            doPlayerSendCancel(cid, "Você não pode atirar enquanto dirige.") return true
        elseif getPlayerStorageValue(cid, 18393) == 1 then
            doPlayerSendCancel(cid, "Você não pode atirar com o capacete.") return true
        elseif exhaustion.check(cid, 57193) then
            doPlayerSendCancel(cid, "Você está exausto.") return true
        elseif getPlayerSlotItem(cid, CONST_SLOT_AMMO).uid < 1 then
            return doPlayerSendCancel(cid, "A munição deve estar equipada no slot da munição.")
        elseif not gun.ammo[getPlayerSlotItem(cid, CONST_SLOT_AMMO).itemid] then
            return doPlayerSendCancel(cid, "Wrong ammo for this gun.")
        elseif getPlayerItemCount(cid, getPlayerSlotItem(cid, CONST_SLOT_AMMO).itemid) < gun.shots then
            doPlayerSendCancel(cid, "Você não possui munição.") return true
        end
        local ammo = gun.ammo[getPlayerSlotItem(cid, CONST_SLOT_AMMO).itemid]
        doPlayerRemoveItem(cid, getPlayerSlotItem(cid, CONST_SLOT_AMMO).itemid, gun.shots)
        doPlayerShootBazooka(cid, itemEx.uid, gun.shots, gun.shots_delay, gun.area, ammo.min, ammo.max, ammo.effect, ammo.dist_effect, gun.exha)
    end
    return true
end

 

 

tem apenas um problema que não to conseguindo resolver, tem que encostar no target pra poder atirar(no código base não precisava) ;x

e queria saber como faz para as munições terem efeito:

 

11400 - Burn

11399 - Paralise

11398 - Confusion

11397 - Freeze( congelar )

11395 - Poison

se possível, queria que desse pra configurar o tempo
grato, novamente!

Link para o post
Compartilhar em outros sites

Quando você tenta atirar de longe no target, o que acontece? O jogador anda até ele ou aparece alguma mensagem?

Sobre os efeitos, eu nunca mexi com conditions no Tibia. Qualquer coisa, eu procuro depois como elas funcionam e altero o código.

não respondo pms solicitando suporte em programação/scripting

Link para o post
Compartilhar em outros sites

Quando você tenta atirar de longe no target, o que acontece? O jogador anda até ele ou aparece alguma mensagem?

Sobre os efeitos, eu nunca mexi com conditions no Tibia. Qualquer coisa, eu procuro depois como elas funcionam e altero o código.

Simplesmente anda até o alvo para atirar, e se colocar na hotkey, fala em branco no meio inferior da tela: Too far away

e quanto aos efeitos, não tem problema huehue, vc já me ajudou bastante arrumando as munições, sou muito grato!

Editado por biel.stocco (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

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

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo