se vc fez tudo isso você esta no caminho para ser um bom scripter, reputado, não fique com medo de postar algo
- Fórum
- OTServ
- Recursos
- Scripting
- Actions e Talkactions
- Summom Gamabunta Portecentual
info
Grupo: Visconde
Registrado: 28/02/14
Posts: 416
Reputação: +90
Gênero: Masculino

também sou iniciante e me pergunto muito sobre as linhas...
fui fazer um script semelhante a este de invocar monstros com determinada chance ( a unica diferença é que eu fiz para variar por ml).
HAHAHA deu mais de 200 linhas, mas, funcionando é o que conta. ( pelo menos por agora ).
Parabéns pelo script, se for mesmo o primeiro deve ter dado um trabalho maligno.
reputado.
info
Grupo: Marquês
Registrado: 25/09/10
Posts: 1.3k
Reputação: +446
Gênero: Masculino

galera criticas bem vindas eu estarei tentando melhorar é meu primeiro script fico muito feliz em ter conseguido faze-lo
Parabéns haha, ficou legal.
é assim que se começa ![]()
Obrigado por me mencionar no vídeo :lolz:, a escolinha tá demorando mesmo, mas não tem o que eu possa fazer
, depois quando for possível disponibilizar ela, vou explicar o porque...
Sobre o script:
if exhaustion.check(cid, 40501) == false then
essa verificação é inútil, pois se é == false, quer dizer que é false, então não precisa por comparação ==
você pode simplesmente deixar assim:
if exhaustion.check(cid, 40501) then
Eu vi esse erro:
actions/scripts/testando.lua:11 attempt to concatenate a boolean value
por isso que eu indiquei o benefício de aprender o inglês no meu tópico do anúncio da escolinha, na hora de programar Lua!
Esse erro mostra exatamente em que arquivo e linha o erro acontece, e que tipo de erro.
actions/scripts/testando.lua:11 -> Linha 11 do arquivo testando.lua attempt to concatenate a boolean value -> Tentativa de concatenar um valor booleano
Sinais de concatenação no lua são " . . " dois pontos finais (Em outras linguagens são como " + " ou " . " e etc... ) , eles ficam entre dois pedaços strings é usado para transformar um valor não string em string, ou uma variável string.
no seu caso, exhaustion.check está dando true e pula pro else, e mesmo o check dando true, o get dá false, não sei porque, pois você alterou o script, talvez tava fazendo o script com um God, ou player sem flag de exhaustion (permite não ter exhaust)
Nessa parte e em outras que você usa a função: getPlayerPosition(cid)
pos = getCreaturePosition(cid)
local position1 = {x=getPlayerPosition(cid).x+1, y=getPlayerPosition(cid).y+1, z=getPlayerPosition(cid).z}
local position2 = {x=getPlayerPosition(cid).x, y=getPlayerPosition(cid).y, z=getPlayerPosition(cid).z}
você pode usar a variável para economizar:
pos = getCreaturePosition(cid)
local position1, position2 = {x=pos.x+1, y=pos.y+1, z=pos.z}, {x=pos.x, y=pos.y, z=pos.z}
Veja também como declarei as duas variáveis e a vírgula na linha 2 acima.
em todos os lugares que você precisa da posição do cid, você pode usar a variável pos.x, pos.y, pos.z ou pos.stackpos
Agora sobre as chances, me corrija se estiver errado, você não conseguiu sumonar o Gamakichi né?
isso acontece porque math.random(1) vai gerar um número entre 1 e 1, por isso nunca vai ser menor que a chance, e nunca vai sumonar.
Gamaguren = 20% Gamakichi = 0% Gamatatsu = 20%
Gamatatsu é 20% porque math.random que não é entre 0 e 1 , dá número inteiro...
você podia multiplicar por 10 e dividir por 10 , assim:
math.random(0, 50) / 10 = math.random(0, 5) só que com números com vírgulas
veja alguns resultados:
2.9 2.6 2.3 4.9 3.7 3.7 3.9 4.4 2.3 0.3
Eu fiz o script aqui para te mostrar, fiz ele dar 50% para cada monstro, assim:
function onUse(cid, item, fromPos, item2, toPos)
local config = {chance = {6, 12, "Gamaguren", -2000},
chance2 = {25, 50, "Gamakichi", -4000},
chance3 = {50, 100, "Gamatatsu", -6000},
}
local storage = 40501
local MaximoSummon = 10
local summons = getCreatureSummons(cid)
if exhaustion.check(cid, storage) == false then
exhaustion.set(cid, storage, 5) -- 5 é o segundo que voce quer que fique
else
doPlayerSendTextMessage(cid,22, "Espere[" ..exhaustion.get(cid, storage).."]")
return false
end
local pos = getCreaturePosition(cid)
local position1, position2 = {x=pos.x+1, y=pos.y+1, z=pos.z}, {x=pos.x, y=pos.y, z=pos.z}
if(table.maxn(summons) < MaximoSummon) then
for k, v in pairs(config) do
if v[1] >= math.random(0, v[2]) then
local monster1 = doSummonCreature(v[3], pos)
doPlayerAddMana(cid,v[4])
doConvinceCreature(cid, monster1)
doPlayerSendTextMessage(cid,22,"Kuchyose "..v[3]..".")
doSendMagicEffect(pos, 4)
return true
end
end
else
doPlayerSendTextMessage(cid,22,"Voce ja tem muitas summons.")
end
end
Uma pergunta, é opção o jutsu não funcionar? porque se não funcionar ele vai dar exhaust sem sumonar...
Aaaa quase esqueci, existem valores que não podem ser concatenados, como boolean, table, nil...
@@Dbko, Tente identar o código, não use o auto indent ainda, tente aprender a identar para depois usar ele...
Parabéns haha, ficou legal.
é assim que se começa
Obrigado por me mencionar no vídeo :lolz:, a escolinha tá demorando mesmo, mas não tem o que eu possa fazer
, depois quando for possível disponibilizar ela, vou explicar o porque...
Sobre o script:
if exhaustion.check(cid, 40501) == false thenessa verificação é inútil, pois se é == false, quer dizer que é false, então não precisa por comparação ==
você pode simplesmente deixar assim:
if exhaustion.check(cid, 40501) then
Eu vi esse erro:
actions/scripts/testando.lua:11 attempt to concatenate a boolean valuepor isso que eu indiquei o benefício de aprender o inglês no meu tópico do anúncio da escolinha, na hora de programar Lua!
Esse erro mostra exatamente em que arquivo e linha o erro acontece, e que tipo de erro.
actions/scripts/testando.lua:11 -> Linha 11 do arquivo testando.lua attempt to concatenate a boolean value -> Tentativa de concatenar um valor booleanoSinais de concatenação no lua são " . . " dois pontos finais (Em outras linguagens são como " + " ou " . " e etc... ) , eles ficam entre dois pedaços strings é usado para transformar um valor não string em string, ou uma variável string.
no seu caso, exhaustion.check está dando true e pula pro else, e mesmo o check dando true, o get dá false, não sei porque, pois você alterou o script, talvez tava fazendo o script com um God, ou player sem flag de exhaustion (permite não ter exhaust)
Nessa parte e em outras que você usa a função: getPlayerPosition(cid)
pos = getCreaturePosition(cid) local position1 = {x=getPlayerPosition(cid).x+1, y=getPlayerPosition(cid).y+1, z=getPlayerPosition(cid).z} local position2 = {x=getPlayerPosition(cid).x, y=getPlayerPosition(cid).y, z=getPlayerPosition(cid).z}você pode usar a variável para economizar:
pos = getCreaturePosition(cid) local position1, position2 = {x=pos.x+1, y=pos.y+1, z=pos.z}, {x=pos.x, y=pos.y, z=pos.z}Veja também como declarei as duas variáveis e a vírgula na linha 2 acima.
em todos os lugares que você precisa da posição do cid, você pode usar a variável pos.x, pos.y, pos.z ou pos.stackpos
Agora sobre as chances, me corrija se estiver errado, você não conseguiu sumonar o Gamakichi né?
isso acontece porque math.random(1) vai gerar um número entre 1 e 1, por isso nunca vai ser menor que a chance, e nunca vai sumonar.
Gamaguren = 20% Gamakichi = 0% Gamatatsu = 20%Gamatatsu é 20% porque math.random que não é entre 0 e 1 , dá número inteiro...
você podia multiplicar por 10 e dividir por 10 , assim:
math.random(0, 50) / 10 = math.random(0, 5) só que com números com vírgulasveja alguns resultados:
2.9 2.6 2.3 4.9 3.7 3.7 3.9 4.4 2.3 0.3
Eu fiz o script aqui para te mostrar, fiz ele dar 50% para cada monstro, assim:
function onUse(cid, item, fromPos, item2, toPos) local config = {chance = {6, 12, "Gamaguren", -2000}, chance2 = {25, 50, "Gamakichi", -4000}, chance3 = {50, 100, "Gamatatsu", -6000}, } local storage = 40501 local MaximoSummon = 10 local summons = getCreatureSummons(cid) if exhaustion.check(cid, storage) == false then exhaustion.set(cid, storage, 5) -- 5 é o segundo que voce quer que fique else doPlayerSendTextMessage(cid,22, "Espere[" ..exhaustion.get(cid, storage).."]") return false end local pos = getCreaturePosition(cid) local position1, position2 = {x=pos.x+1, y=pos.y+1, z=pos.z}, {x=pos.x, y=pos.y, z=pos.z} if(table.maxn(summons) < MaximoSummon) then for k, v in pairs(config) do if v[1] >= math.random(0, v[2]) then local monster1 = doSummonCreature(v[3], pos) doPlayerAddMana(cid,v[4]) doConvinceCreature(cid, monster1) doPlayerSendTextMessage(cid,22,"Kuchyose "..v[3]..".") doSendMagicEffect(pos, 4) return true end end else doPlayerSendTextMessage(cid,22,"Voce ja tem muitas summons.") end end
Uma pergunta, é opção o jutsu não funcionar? porque se não funcionar ele vai dar exhaust sem sumonar...
Aaaa quase esqueci, existem valores que não podem ser concatenados, como boolean, table, nil...
@@Dbko, Tente identar o código, não use o auto indent ainda, tente aprender a identar para depois usar ele...
obrigado mano... vou tentar uns scripter simples com as dicas que você mim deu e ver mas algumas aulas, valeu :3 esperando pela aula =x
info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino

Po, numa boa legal seu esforço, legal o resultado, enfim, parabens por isso.
Mas, na moral, aprende a escrever, vai te ajudar pra caralho nos scripts e na vida.
Abraços,





info
Grupo: Visconde
Registrado: 20/11/13
Posts: 372
Reputação: +120
olá galera do xtibia, eu sou muito muito muito novo em script tenho 1 semana ou menos tentando aprender script então o que eu fiz... podem criticar mas funcionou perfeitamente aqui sei que os profissionais fariam em 10 9 linhas eu sou meio desastrado,
https://www.youtube.com/watch?v=hFd_loGAy44&feature=youtu.be
uma demonstração de como funciona o sistema
vamos lá em action/scripts/copie um arquivo.lua e abra apague tudo dentro dele e cole o seguinte sistema e renomeei para o nome que quiser eu coloquei summom
function onUse(cid, item, fromPos, item2, toPos)
end
em action.xml adicione seguinte tag
não mim pergunte a se tu é iniciante como tu fez isso, tudo se resume em um baita esforço,
não se julga pelo tamanho do desafio mas sim pela experiencia ganha por ela
então quem mim desafio a fazer isso foi gabriel txu.. ele que mim da umas dica mas ele n mexeu em nada só está mim dando inspiração pra fazer script..
galera pra por como spells basta troca a function
para
galera criticas bem vindas eu estarei tentando melhorar é meu primeiro script fico muito feliz em ter conseguido faze-lo
Editado Fevereiro 26 por Dbko