FE
suporte scripts

Loot aleatório para todos que matarem determinado monstro de evento

Por fefuxd, 07 de mar. de 2017 em Resolvidos

9
2.3k
fefuxdF
07 de março de 2017 às 19:58

Ola,

Possuo um código aqui que ao matar determinado monstro de evento todos que atacaram ganham 20k em moedas.. o que eu gostaria de implementar é que além desses 20k cada um ganhasse também um item aleatório de uma lista de itens que eu criar..

como posso fazer essa implementação no meu código??

 

segue script abaixo

 

Citar

eventloot.lua

Spoiler

 

local config = {
monster = {"Kokarzinho"}, -- nome dos monstros, separado por vírgulas.
item = {[1] = 2160}, -- [um numero maior que o anterior] = ID do item1, ID do item2, ID do item3...
qnt = {[1] = 2 }, -- [um numero maior que o anterior] = quantidade do item1, quantidade do item2, quantidade do item3...
effect = 27, -- efeito ao matar o monstro.
}

function onKill(cid, target)
    if isInArray(config.monster, getCreatureName(target)) then
        for i = 1, #config.item do
            doPlayerAddItem (cid, config.item, config.qnt)
        end

        doPlayerSendTextMessage (cid, 19, "Você receberá uma recompensa por derrotar o "..getCreatureName(target)..".")
        doSendMagicEffect (getThingPos (cid), config.effect)
    end
return true
end

 

 

 

CrypterC
08 de março de 2017 às 13:00

 

local config = {items = {13941,13948,13969,13962,13955,13983,13976,13990,14667,14674,14681,14688,14695,14702,14709,14716,14723,14730,14742}, -- items aleatorios que ira ganharmonster = {"Kokarzinho"}, -- nome dos monstros, separado por vírgulas.item = {[1] = 2160}, -- [um numero maior que o anterior] = ID do item1, ID do item2, ID do item3...qnt = {[1] = 2 }, -- [um numero maior que o anterior] = quantidade do item1, quantidade do item2, quantidade do item3...effect = 27, -- efeito ao matar o monstro.}tabela = config.itemspremios = tabela[math.random(#tabela)]function onKill(cid, target)    if isInArray(config.monster, getCreatureName(target)) then        for i = 1, #config.item do            doPlayerAddItem (cid, config.item, config.qnt)            doPlayerAddItem(cid, premios, 1)        end        doPlayerSendTextMessage (cid, 19, "Você receberá uma recompensa por derrotar o "..getCreatureName(target)..".")        doSendMagicEffect (getThingPos (cid), config.effect)    endreturn trueend

 

fefuxdF
08 de março de 2017 às 18:06
11 horas atrás, Crypter disse:

 

@Crypter eu implementei o código mas o player parou de granhar as duas moedas e está ganhando só o primeiro  item da minha lista de itens..e na distro me da esse erro:

[08/03/2017 18:46:40] [Error - CreatureScript Interface] 
[08/03/2017 18:46:40] data/creaturescripts/scripts/eventloot.lua:onKill
[08/03/2017 18:46:40] Description: 
[08/03/2017 18:46:40] (luaDoPlayerAddItem) Item not found
 

quando mato o monstro

Citar
local config = {

items = {13941,13948,13969,13962,13955,13983,13976,13990,14667,14674,14681,14688,14695,14702,14709,14716,14723,14730,14742}, -- items aleatorios que ira ganhar
monster = {"Kokarzinho"}, -- nome dos monstros, separado por vírgulas.
item = {[1] = 2160}, -- [um numero maior que o anterior] = ID do item1, ID do item2, ID do item3...
qnt = {[1] = 2 }, -- [um numero maior que o anterior] = quantidade do item1, quantidade do item2, quantidade do item3...
effect = 27, -- efeito ao matar o monstro.
}
tabela = config.items
premios = tabela[math.random(#tabela)]
function onKill(cid, target)
    if isInArray(config.monster, getCreatureName(target)) then
        for i = 1, #config.item do
            doPlayerAddItem (cid, config.item, config.qnt)
            doPlayerAddItem(cid, premios, 1)
        end
        doPlayerSendTextMessage (cid, 19, "Você receberá uma recompensa por derrotar o "..getCreatureName(target)..".")
        doSendMagicEffect (getThingPos (cid), config.effect)
    end
return true
end

 

 

Editado Março 9 por fefuxd

CrypterC
09 de março de 2017 às 12:26
18 horas atrás, fefuxd disse:

@Crypter eu implementei o código mas o player parou de granhar as duas moedas e está ganhando só o primeiro  item da minha lista de itens..e na distro me da esse erro:

[08/03/2017 18:46:40] [Error - CreatureScript Interface] 
[08/03/2017 18:46:40] data/creaturescripts/scripts/eventloot.lua:onKill
[08/03/2017 18:46:40] Description: 
[08/03/2017 18:46:40] (luaDoPlayerAddItem) Item not found
 

quando mato o monstro

 

 

local config = {

items = {13941,13948,13969,13962,13955,13983,13976,13990,14667,14674,14681,14688,14695,14702,14709,14716,14723,14730,14742}, -- items aleatorios que ira ganhar
monster = {"Kokarzinho"}, -- nome dos monstros, separado por vírgulas.
item = 2160 --- moeda
qnt = 2 -- qtd
effect = 27, -- efeito ao matar o monstro.
}
tabela = config.items
premios = tabela[math.random(#tabela)]
function onKill(cid, target)
    if isInArray(config.monster, getCreatureName(target)) then
        for i = 1, #config.item do
            doPlayerAddItem (cid, config.item, config.qnt)
            doPlayerAddItem(cid, premios, 1)
        end
        doPlayerSendTextMessage (cid, 19, "Você receberá uma recompensa por derrotar o "..getCreatureName(target)..".")
        doSendMagicEffect (getThingPos (cid), config.effect)
    end
return true
end

 

fefuxdF
09 de março de 2017 às 22:33
9 horas atrás, Crypter disse:

 

local config = {

items = {13941,13948,13969,13962,13955,13983,13976,13990,14667,14674,14681,14688,14695,14702,14709,14716,14723,14730,14742}, -- items aleatorios que ira ganhar
monster = {"Kokarzinho"}, -- nome dos monstros, separado por vírgulas.
item = 2160 --- moeda
qnt = 2 -- qtd
effect = 27, -- efeito ao matar o monstro.
}
tabela = config.items
premios = tabela[math.random(#tabela)]
function onKill(cid, target)
    if isInArray(config.monster, getCreatureName(target)) then
        for i = 1, #config.item do
            doPlayerAddItem (cid, config.item, config.qnt)
            doPlayerAddItem(cid, premios, 1)
        end
        doPlayerSendTextMessage (cid, 19, "Você receberá uma recompensa por derrotar o "..getCreatureName(target)..".")
        doSendMagicEffect (getThingPos (cid), config.effect)
    end
return true
end

 

 

@Crypter coloquei exatamente como está ai.. mas o monstro morre e nada acontece.. nem erro na distro da...

alguma ideia?

wevertonvrbW
10 de março de 2017 às 02:08
3 horas atrás, fefuxd disse:

 

@Crypter coloquei exatamente como está ai.. mas o monstro morre e nada acontece.. nem erro na distro da...

alguma ideia?

aee man tenta assim
 

local config = {

items = {13941,13948,13969,13962,13955,13983,13976,13990,14667,14674,14681,14688,14695,14702,14709,14716,14723,14730,14742}, -- items aleatorios que ira ganhar
monster = {"Kokarzinho"}, -- nome dos monstros, separado por vírgulas.
item = {[1] = 2160}, -- [um numero maior que o anterior] = ID do item1, ID do item2, ID do item3...
qnt = {[1] = 2 }, -- [um numero maior que o anterior] = quantidade do item1, quantidade do item2, quantidade do item3...
effect = 27, -- efeito ao matar o monstro.
}
tabela = config.items
premios = tabela[math.random(#tabela)]
function onKill(cid, target)
local rand = math.random(config.items)
    if isInArray(config.monster, getCreatureName(target)) then
        for i = 1, #config.item do
            doPlayerAddItem (cid, config.item, config.qnt)
            doPlayerAddItem(cid, rand, 1)
        end
        doPlayerSendTextMessage (cid, 19, "Você receberá uma recompensa por derrotar o "..getCreatureName(target)..".")
        doSendMagicEffect (getThingPos (cid), config.effect)
    end
return true
end
fefuxdF
10 de março de 2017 às 02:50
8 horas atrás, wevertonvrb disse:

aee man tenta assim

 

local config = {items = {13941,13948,13969,13962,13955,13983,13976,13990,14667,14674,14681,14688,14695,14702,14709,14716,14723,14730,14742}, -- items aleatorios que ira ganharmonster = {"Kokarzinho"}, -- nome dos monstros, separado por vírgulas.item = {[1] = 2160}, -- [um numero maior que o anterior] = ID do item1, ID do item2, ID do item3...qnt = {[1] = 2 }, -- [um numero maior que o anterior] = quantidade do item1, quantidade do item2, quantidade do item3...effect = 27, -- efeito ao matar o monstro.}tabela = config.itemspremios = tabela[math.random(#tabela)]function onKill(cid, target)local rand = math.random(config.items)    if isInArray(config.monster, getCreatureName(target)) then        for i = 1, #config.item do            doPlayerAddItem (cid, config.item, config.qnt)            doPlayerAddItem(cid, rand, 1)        end        doPlayerSendTextMessage (cid, 19, "Você receberá uma recompensa por derrotar o "..getCreatureName(target)..".")        doSendMagicEffect (getThingPos (cid), config.effect)    endreturn trueend

 

não rolou também... 

o monstro não morre.. fica com 0 de vida vivo e continua batendo..

e da essa mensagem na distro:

 

[10/03/2017 10:33:19] [Error - CreatureScript Interface] 

[10/03/2017 10:33:19] data/creaturescripts/scripts/eventloot.lua:onKill

[10/03/2017 10:33:19] Description: 

[10/03/2017 10:33:19] data/creaturescripts/scripts/eventloot.lua:12: bad argument #1 to 'random' (number expected, got table)

[10/03/2017 10:33:19] stack traceback:

[10/03/2017 10:33:19]     [C]: in function 'random'

[10/03/2017 10:33:19]     data/creaturescripts/scripts/eventloot.lua:12: in function <data/creaturescripts/scripts/eventloot.lua:11>

Editado Março 10 por fefuxd

fefuxdF
10 de março de 2017 às 11:27
Melhor resposta

depois de quebrar um pouco a cabeça eu consegui adaptar a função do @Crypter com algumas coisas que eu encontrei na internet e funcionou do jeito que eu precisava..

para quem quiser, segue o código abaixo

 

Spoiler

local config = {
monster = {"Kokarzinho"}, -- nome dos monstros, separado por vírgulas.
items = {2518,2519,2520}, -- items aleatorios que ira ganhar
effect = 27, -- efeito ao matar o monstro.
}
function onKill(cid, target)
local rand = math.random(1,#config.items)
local qtde = config.qnt
    if isInArray(config.monster, getCreatureName(target)) then
        for i = 1, 1 do
            doPlayerAddItem(cid, config.items[rand], 1)
            doPlayerAddItem(cid, 2160, 2)
        end
        doPlayerSendTextMessage (cid, 19, "Você receberá uma recompensa por derrotar o "..getCreatureName(target)..".")
        doSendMagicEffect (getThingPos (cid), config.effect)
    end
return true
end

 

otteNO
12 de março de 2017 às 16:40
Em 10/03/2017 at 11:27, fefuxd disse:

depois de quebrar um pouco a cabeça eu consegui adaptar a função do @Crypter com algumas coisas que eu encontrei na internet e funcionou do jeito que eu precisava..

para quem quiser, segue o código abaixo

 

  Ocultar conteúdo

local config = {
monster = {"Kokarzinho"}, -- nome dos monstros, separado por vírgulas.
items = {2518,2519,2520}, -- items aleatorios que ira ganhar
effect = 27, -- efeito ao matar o monstro.
}
function onKill(cid, target)
local rand = math.random(1,#config.items)
local qtde = config.qnt
    if isInArray(config.monster, getCreatureName(target)) then
        for i = 1, 1 do
            doPlayerAddItem(cid, config.items[rand], 1)
            doPlayerAddItem(cid, 2160, 2)
        end
        doPlayerSendTextMessage (cid, 19, "Você receberá uma recompensa por derrotar o "..getCreatureName(target)..".")
        doSendMagicEffect (getThingPos (cid), config.effect)
    end
return true
end

 

O erro na função do wever é que ele só passou um argumento pro método random.