Dbko 120 Postado Fevereiro 26, 2016 Share Postado Fevereiro 26, 2016 (editado) 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) config = {} config.chance = 1 config.chance2 = 1 config.chance3 = 0.5 if exhaustion.check(cid, 40501) == false then exhaustion.set(cid, 40501, 5) -- 5 é o segundo que voce quer que fique else doPlayerSendTextMessage(cid,22, "Espere[" ..exhaustion.get(cid, 40501).."]") return false end 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} local monster1 = "gamaguren" -- 30 % de chance local monster2 = "gamakichi" -- 60 % de chance local monster3 = "gamatatsu" -- 10 % de chance local MaximoSummon = 1 local summons = getCreatureSummons(cid) if(table.maxn(summons) < MaximoSummon) then if config.chance >= math.random(5) then local monster1 = doSummonCreature(monster1, getPlayerPosition(cid)) doPlayerAddMana(cid,-2000) doConvinceCreature(cid, monster1) doPlayerSendTextMessage(cid,22,"Kuchyose Gamaguren.") doSendMagicEffect(getPlayerPosition(cid), 152) elseif config.chance2 >= math.random(1) then local monster2 = doSummonCreature(monster2, getPlayerPosition(cid)) doPlayerAddMana(cid,-4000) doConvinceCreature(cid, monster2) doPlayerSendTextMessage(cid,22,"Kuchyose Gamakichi.") doSendMagicEffect(getPlayerPosition(cid), 152) elseif config.chance3 >= math.random(0,5) then local monster3 = doSummonCreature(monster3, getPlayerPosition(cid)) doPlayerAddMana(cid,-6000) doConvinceCreature(cid, monster3) doPlayerSendTextMessage(cid,22,"Kuchyose gamatatsu.") doSendMagicEffect(position1, 152) doSendMagicEffect(position2, 152) end return true end end em action.xml adicione seguinte tag <action itemid="IDITEM" event="script" value="summom.lua"/> 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 function onCastSpell(cid, var) galera criticas bem vindas eu estarei tentando melhorar é meu primeiro script fico muito feliz em ter conseguido faze-lo Editado Fevereiro 26, 2016 por Dbko Link para o comentário Compartilhar em outros sites More sharing options...
valakas 90 Postado Fevereiro 27, 2016 Share Postado Fevereiro 27, 2016 se vc fez tudo isso você esta no caminho para ser um bom scripter, reputado, não fique com medo de postar algo Link para o comentário Compartilhar em outros sites More sharing options...
Darkraus 2 Postado Fevereiro 29, 2016 Share Postado Fevereiro 29, 2016 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. Link para o comentário Compartilhar em outros sites More sharing options...
Caronte 444 Postado Fevereiro 29, 2016 Share Postado Fevereiro 29, 2016 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... Link para o comentário Compartilhar em outros sites More sharing options...
Dbko 120 Postado Março 1, 2016 Autor Share Postado Março 1, 2016 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... 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 Link para o comentário Compartilhar em outros sites More sharing options...
Skulls 331 Postado Março 1, 2016 Share Postado Março 1, 2016 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, Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados