Ir para conteúdo
  • 0

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


fefuxd

Pergunta

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

 

 

 

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

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

 

Link para o comentário
Compartilhar em outros sites

  • 0

 

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

 

Link para o comentário
Compartilhar em outros sites

  • 0
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 por fefuxd
Link para o comentário
Compartilhar em outros sites

  • 0
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

 

Link para o comentário
Compartilhar em outros sites

  • 0
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?

Link para o comentário
Compartilhar em outros sites

  • 0
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
Link para o comentário
Compartilhar em outros sites

  • 0
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 por fefuxd
Link para o comentário
Compartilhar em outros sites

  • 0
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.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...