Ir para conteúdo

Summom Gamabunta Portecentual


Dbko

Posts Recomendados

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

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

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 :D

Obrigado por me mencionar no vídeo :lolz:, a escolinha tá demorando mesmo, mas não tem o que eu possa fazer :sad: , 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

 

 

Parabéns haha, ficou legal.

é assim que se começa :D

Obrigado por me mencionar no vídeo :lolz:, a escolinha tá demorando mesmo, mas não tem o que eu possa fazer :sad: , 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

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

×
×
  • Criar Novo...