Legal cara, mas você devia tentar usar tables ao invés de vários ifs
Por exemplo esta table:
local table = {
[1] = "valor um",
[2] = "valor dois",
}
se você quiser acessar o "valor um" você usa table[1], por exemplo: "print(table[1])" vai printar no console: "valor um"
se você usasse table[2] ia retornar "valor dois"
isso é legal porque dá pra usar o math.random que retorna um número aleatório pra retornar um valor aleatório da table, por exemplo:
local aleatorio = math.random(1,2)
local table = {
[1] = "valor um",
[2] = "valor dois",
}
print(table[aleatorio])
supondo que o math.random retornasse o número aleatório 1, ficaria algo do tipo: "local aleatorio = 1", e na hora de printar table[aleatorio], ficaria table[1] (pois aleatorio = 1), que é, na table, o "valor um"
ou seja, você já está deixando o seu script aleatório E com table
você também pode usar table[math.random(1,2)]
agora, uma coisa legal, é que você não precisa mudar o valor máximo do math.random pro valor máximo da sua table (por exemplo, no caso, 2 é o último valor da table), porque tem um jeito de retornar o tamanho da tabela, usando um # antes de chamar a tabela (por exemplo #table retornaria 2)
agora, se a tabela fosse assim:
local table = {
[1] = "valor um",
[2] = "valor dois",
[3] = "valor três",
}
e você usasse #table, retornaria 3, entendeu?
assim você não precisa alterar o math.random toda hora que adiciona um valor na tabela.
só que lembre-se de usar o #table depois de user a table! por exemplo:
MODO INCORRETO
local aleatorio = math.random(1,#table)
local table = {
[1] = "valor um",
[2] = "valor dois",
[3] = "valor três",
}
MODO CORRETO
local table = {
[1] = "valor um",
[2] = "valor dois",
[3] = "valor três",
}
local aleatorio = math.random(1,#table)
porque você no modo incorreto estaria tentando pegar o valor máximo de uma table que nem existe (pois ela nao foi declarada ainda)
agora, uma versão com table do seu script:
function fixString(string)
local k = string.explode(string," ")
local x = ""
local y = 0
for i = 1, #k do
if y == 0 then
x = x ..string.sub(k[i],0,1):upper()..string.sub(k[i],2)
y = 1
else
x = x .." "..string.sub(k[i],0,1):upper()..string.sub(k[i],2)
end
end
return x
end
function onUse(cid, item, fromPosition, itemEx, toPosition)
local items = {
[1] = {id=7439,quantidade=1},
[2] = {id=2158,quantidade=1},
[3] = {id=7443,quantidade=1},
[4] = {id=2160,quantidade=1},
[5] = {id=18304,quantidade=1},
[6] = {id=18437,quantidade=1},
[7] = {id=18552,quantidade=1},
[8] = {id=18519,quantidade=1},
[9] = {id=7591,quantidade=1},
[10] = {id=7590,quantidade=1},
[11] = {id=2155,quantidade=1},
[12] = {id=7618,quantidade=4},
[13] = {id=7640,quantidade=4},
[14] = {id=7440,quantidade=1},
[15] = {id=18397,quantidade=1},
[16] = {id=18456,quantidade=1},
[17] = {id=2152,quantidade=5},
[18] = {id=2156,quantidade=1},
[19] = {id=5911,quantidade=1},
[20] = {id=18509,quantidade=1},
[21] = {id=7588,quantidade=1},
[22] = {id=7588,quantidade=2},
[23] = {id=7589,quantidade=2},
[24] = {id=18457,quantidade=1},
[25] = {id=2787,quantidade=20},
[26] = {id=2154,quantidade=1},
[27] = {id=7588,quantidade=1},
}
local rand = math.random(1, #items)
local nomedoitem = fixString(getItemNameById(items[rand].id))
local quantidade = items[rand].quantidade
doCreatureSay(cid, "You had "..(quantidade == 1 and (isInArray({"a","e","i","o","u"},string.sub(nomedoitem,0,1)) and "an" or "a") or quantidade).." "..nomedoitem.."!", TALKTYPE_ORANGE_1)
doPlayerAddItem(cid, items[rand].id,items[rand].quantidade)
doRemoveItem(cid, item.uid, 1)
return TRUE
end
ps. A linha 50 pode ser avançada pra você
mas acho que é isso, da uma estudada no script que sabendo usar tables vai facilitar muito sua vida
flw!
edit
e outra, vc nao precisa checar se o item que está sendo usado é o da lotteryid, porque no actions.xml quando você põe a tag "<action itemid="18215" event="script" value="Gnomish.lua"/>", ele só vai usar o script se for pro item 18215, já sendo um "if item.itemid == 18215" entre aspas




info
Grupo: Campones
Registrado: 19/06/12
Posts: 89
Reputação: +5
Estava precisando de um item, "gnomish supply package". ao ser usado, você ganha aleatoriamente um de 24 items.
Procurei e não encontrei. Lembrei do item, "winning lottery ticket". Fiz modificações para me satisfazer.
Créditos Desconhecido.
Porque já estava incluído no servidor Global 9.81 do xtibia.
2% Shumagora
Então vamo lá:
data/actions/actions.xml
itemid="18215" -> id do item ao ser usado
data/actions/scripts/Gnomish.lua
Explicações:
local rand = math.random(0, 24) -> Ao clicar no item, é bem parecido com loteria. Você chuta um número, de 0 a 24 e reza pra cair o número escolhido.
local lotteryid = 18215 -> id do item para clicar.
... etc... são os números "do sorteio". que ao clicar no item aparecerá um item de 0 a 24 como no exemplo acima.
Mensagem quando aparece o item.
doPlayerAddItem(cid, 2154,1) -> id do item, quantidade
caso você queira adicionar mais items, é só da ctrl+c mais ctrl+v e editar:
Você edita elseif rand == 24 then e coloca: elseif rand == 25 then
e edita o resto.
(não se esqueça de editar math.random(0, 24) para (0, 25)
se quiser deixar para que ele quebre também
Suponhamos que: "mega sena tem 0 a 40 números. você joga os dados e reza pra não cair acima de 24, porque não ganhará premio algum.
É bem isso ai, poste suas dúvidas, que ano vem respondo = )