CA

Funções getMonsterLoot...(...)

Por caotic, 20 de dez. de 2012 em Mods, funções e outros

script
7
1.4k
caoticC
20 de dezembro de 2012 às 14:54

Tudo bem galera?

Resolvi fazer 3 funções para manipular loots de monstro

Vamos a elas:

 

1 - getMonsterLootItens(monster)

Ela retorna os itens dos loot de uns

 

function getMonsterLootItens(monster)
t = {}
local monster = io.open("data/monster/"..tostring(monster)..".xml", "r")
for i in monster:read("*a"):gmatch('id="(.-)"') do
table.insert(t, tonumber(i))
end
return t
end

 

Para ultilizar ela e muito facil

Alguns exemplos:

 

#getMonsterLootItens(monster)

 

 

Retorna a quantidade de loot que o monstro tem.

 

getMonsterLootItens(monster)[x]

 

Retorna o id do loot de acordo com a posição X da localização do id no xml.

 

Neste script abaixo ele vai adicionar todos os itens do loot do monstro no player:

 

function onSay(cid, words, param, channel)
for i = 1, #getMonsterLootItens(param) do
doPlayerAddItem(cid, getMonsterLootItens(param)[i])
end
end

 

2- Função getMonsterLootCount(monster, item)

Ela retorna a quantidade maximo que o item pode cair do monstro ou seja ela retorna a "countmax = X"

 

function getMonsterLootCount(monster, item)
t = {}
local monster = io.open("data/monster/"..tostring(monster)..".xml", "r")
for i in monster:read("*a"):gmatch('id="'..item..'" countmax="(.-)"') do
table.insert(t, tonumber(i))
end
return t[1] or 1
end

 

 

3 - getMonsterLootChance(monster, item)

Ela retorna a chance do item do loot do monstro cair.

 

function getMonsterLootChance(monster, item)
t = {}
local monster = io.open("data/monster/"..tostring(monster)..".xml", "r")
for i in monster:read("*a"):gmatch('<item id="'..item..'"(.-)/><') do
local chance = tonumber(i:match('chance="(.-)"'))
table.insert(t, chance)
end
return t[1] or 0
end

Editado Dezembro 22 por caotic

SkyDangerousS
20 de dezembro de 2012 às 15:05

bem legal a função.

 

tenho uma dúvida: o item tem gold por exemplo tem uma porcentagem de sair tipo 3,6 e 8 golds, ele dá apenas 1 gold ou ele tem chance de sair uma quantidade igual matar o monstro?

OneshotO
20 de dezembro de 2012 às 15:48

Legal, cara, legal mesmo.

 

function getMonsterLootList(name)
   local monster = getMonsterInfo(name)
   return monster and monster.loot or false
end

 

Abraços, cara, abraços.

caoticC
20 de dezembro de 2012 às 15:51

Legal, cara, legal mesmo.

 

function getMonsterLootList(name)
local monster = getMonsterInfo(name)
return monster and monster.loot or false
end

 

Abraços, cara, abraços.

 

Eu ja sabia,

Só que lembrei depois de fazer o script.

Então resolvi postar assim mesmo.

E também já existe a função

 

getMonsterAttackSpells(name)

getMonsterHealingSpells(name)

getMonsterLootList(name)

getMonsterSummonList(name)

 

Fiz mais 2 funções para o loot do monstro

Abraços.

 

Abraços.

Editado Dezembro 21 por caotic

23 de dezembro de 2012 às 02:14

fecha o arquivo usando io.close

2 semanas depois...
20cm2
30 de dezembro de 2012 às 19:06

Sinceramente? A função é boa mas tem algo muito ruim.

Se eu quiser printar todos os loots do monstro, do demon por exemplo, eu tenho que usar:

for x,i in pairs(getMonsterLootItens("demons/demon")) do
print(i)
end

Note que eu tive que acessar a paste ("demons/")

Porque seu script só checa os monstros da pasta monster, e poucos monstros ficam só na pasta monster.

Editado Dezembro 30 por 20cm

caoticC
30 de dezembro de 2012 às 20:42

Sinceramente? A função é boa mas tem algo muito ruim.

Se eu quiser printar todos os loots do monstro, do demon por exemplo, eu tenho que usar:

for x,i in pairs(getMonsterLootItens("demons/demon")) do
print(i)
end

Note que eu tive que acessar a paste ("demons/")

Porque seu script só checa os monstros da pasta monster, e poucos monstros ficam só na pasta monster.

 

Problema resolvido

 

function getDirMonsterByNameMonster(name)
t = {}
local monster = io.open("data/monster/monsters.xml", "r")
for i in monster:read("*a"):gmatch('<monster name="'..tostring(name)..'" file="(.-)"/>') do
table.insert(t, tostring(i))
end
return t[1] or 0
end