Ir para conteúdo
  • Cadastre-se

(Resolvido)Item Ganha Skill Permante


Ir para solução Resolvido por KotZletY,

Posts Recomendados

Fala Galera, alguem me ajuda a criar um script de um item que ao ser usado o player ganha Skills Permanente ? 

Exemplo >

Ao Usar X Item, o Player ganha 5 Leveis em Magic Level, Fist Fighting, Axe Fighting, Club Fighting, Distance Fighting e Shield ?

Montei uma base para o script mas não consegui fazer, se possível utilizar essa base.

Tentei utilizar usando a função doPlayerAddSkillTry mas não deu certo. 

TFS 0.4

function onUse(cid, item, fromPosition, itemEx, toPosition)
local position1 = {x=getPlayerPosition(cid).x, y=getPlayerPosition(cid).y, z=getPlayerPosition(cid).z}
if getPlayerStorageValue(cid, 344240) < 1 then
	if getPlayerLevel(cid) >= 400 then
	-- 

	doPlayerPopupFYI(cid, "Parabens, voce acaba de maximizar o seu personagem!")
	doSendMagicEffect(position1, 5)
	setPlayerStorageValue(cid,344240,1)
	else
	selfSay('Voce nao tem Level Suficiente !', cid)
	doSendMagicEffect(getPlayerPosition(cid), 3)
	end
else
	selfSay('Voce ja utilizou esse Max Scroll Antes !', cid)
	doSendMagicEffect(getPlayerPosition(cid), 3)
end
end

 

Link para o post
Compartilhar em outros sites
  • Solução

@r0bert0lol 

local lvl_min = 400 -- Leve mínimo para usar o script. 
local storage = 344240 -- Para não usar o script novamente.

local skills_t = {
{skill = SKILL_CLUB, count_lvl = 10},
{skill = SKILL_SWORD, count_lvl = 10},
{skill = SKILL_AXE, count_lvl = 10}
}

function onUse(cid, item, fromPosition, itemEx, toPosition)

	if getPlayerStorageValue(cid, storage) < 1 then
		if getPlayerLevel(cid) >= lvl_min then 
			doPlayerPopupFYI(cid, "Parabens, voce acaba de maximizar o seu personagem!")
			doSendMagicEffect(getPlayerPosition(cid), 5)
			setPlayerStorageValue(cid, storage, 1)
			for _, t in pairs(skills_t) do
				doPlayerAddSkill(cid, t.skill, t.count_lvl)
			end
		else
			selfSay('Voce nao tem Level Suficiente !', cid)
			doSendMagicEffect(getPlayerPosition(cid), 3)
		end
	else
		selfSay('Voce ja utilizou esse Max Scroll Antes !', cid)
		doSendMagicEffect(getPlayerPosition(cid), 3)
	end

	return true
end

 

                                                              ezgif-1-98aab239f3.gif.1a897c9c3225228909e7b356a5cfb8e4.gif

Link para o post
Compartilhar em outros sites

@r0bert0lol 

local cfg = {
	level = 400,
	effect = 30,
	addLevel = {
		[1] = {ID_LEVEL = SKILL_AXE, quant = 1},
		[2] = {ID_LEVEL = SKILL_SWORD, quant = 1},
		[3] = {ID_LEVEL = SKILL_LEVEL, quant = 1},
		[4] = {ID_LEVEL = SKILL_CLUB, quant = 1}
	},

	storage = 344240,
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
	
	local posPlayer = getPlayerPosition(cid)
	
	if not getPlayerStorageValue(cid, cfg.storage) < 1 then
		doPlayerSendTextMessage(cid, 23, "Voce ja usou o item.")
		doSendMagicEffect(posPlayer, cfg.effect)
		return false
	end

	if not getPlayerLevel(cid) >= cfg.level then
		doPlayerSendTextMessage(cid, 23, "Voce nao possui nivel.")
		doSendMagicEffect(posPlayer, cfg.effect)
		return false
	end

	for i = 1, #cfg.addLevel do
		doPlayerAddSkill(cid, cfg.addLevel[i].ID_LEVEL, cfg.addLevel[i].quant)
	end
	setPlayerStorageValue(cid, cfg.storage, 1)
	return true
end

 

Link para o post
Compartilhar em outros sites

@KotZletY 

Quanto ao Seu script ele funcionou porem não como desejava, o script não está adicionando Leveis Exatos.

Se eu colocar por exemplo, 

count_lvl = 10},

O Player ganha apenas 1 Level, e se ele já estiver com skill Alta tipo 80 + ele recebe apenas alguns % do level.

 

 

@tataboy67 

Quanto ao seu Script,  está gerando esse erro ao usar o item.

[19:20:32.703] [Error - Action Interface]
[19:20:32.703] data/actions/scripts/max skills.lua:onUse
[19:20:32.703] Description:
[19:20:32.703] data/actions/scripts/max skills.lua:18: attempt to compare boolean with number
[19:20:32.703] stack traceback:
[19:20:32.703]  data/actions/scripts/max skills.lua:18: in function <data/actions/scripts/max skills.lua:14>

 

Link para o post
Compartilhar em outros sites

@KotZletY  Expliquei sim, rs.

Ou melhor, achei que fui claro com o Exemplo que citei.

 

O Level Adicionado Permanentemente seria previamente configurado e exato como no exemplo citado.

Editado por r0bert0lol (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
local cfg = {
	level = 400,
	effect = 30,
	addLevel = {
		[1] = {ID_LEVEL = SKILL_AXE, quant = 1},
		[2] = {ID_LEVEL = SKILL_SWORD, quant = 1},
		[3] = {ID_LEVEL = SKILL_LEVEL, quant = 1},
		[4] = {ID_LEVEL = SKILL_CLUB, quant = 1}
	},

	storage = 344240,
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
	
	local posPlayer = getPlayerPosition(cid)
	
	if not getPlayerStorageValue(cid, cfg.storage) < 1 then
		doPlayerSendTextMessage(cid, 23, "Voce ja usou o item.")
		doSendMagicEffect(posPlayer, cfg.effect)
		return false
	end

	if not getPlayerLevel(cid) >= cfg.level then
		doPlayerSendTextMessage(cid, 23, "Voce nao possui nivel.")
		doSendMagicEffect(posPlayer, cfg.effect)
		return false
	end

	for k, z in pairs(cfg.addLevel) do
		doPlayerAddSkill(cid, z.ID_LEVEL, z.quant)
	end
	setPlayerStorageValue(cid, cfg.storage, 1)
	return true
end
2 horas atrás, r0bert0lol disse:

@KotZletY 

Quanto ao Seu script ele funcionou porem não como desejava, o script não está adicionando Leveis Exatos.

Se eu colocar por exemplo, 


count_lvl = 10},

O Player ganha apenas 1 Level, e se ele já estiver com skill Alta tipo 80 + ele recebe apenas alguns % do level.

 

 

@tataboy67 

Quanto ao seu Script,  está gerando esse erro ao usar o item.


[19:20:32.703] [Error - Action Interface]
[19:20:32.703] data/actions/scripts/max skills.lua:onUse
[19:20:32.703] Description:
[19:20:32.703] data/actions/scripts/max skills.lua:18: attempt to compare boolean with number
[19:20:32.703] stack traceback:
[19:20:32.703]  data/actions/scripts/max skills.lua:18: in function <data/actions/scripts/max skills.lua:14>

 

 

Link para o post
Compartilhar em outros sites

@tataboy67 

[22:29:24.611] data/actions/scripts/max skills.lua:onUse
[22:29:24.611] Description:
[22:29:24.611] data/actions/scripts/max skills.lua:18: attempt to compare boolean with number
[22:29:24.611] stack traceback:
[22:29:24.611]  data/actions/scripts/max skills.lua:18: in function <data/actions/scripts/max skills.lua:14>

Tataboy, voce fez alteração no script mas alterou a parte do for alí que executa a função doPlayerAddSkill mas oque está gerando esse Erro acredito eu que seja o not do if na linha 18.

Eu tentei tirar o not do if que confere a storage e aí o erro parou, porem dentro do jogo mesmo alterando a storage e usando pela primeira vez ele acusa que o player ja tem a storage retornando a mensagem

18:45 Voce ja usou o item.

E aí o script não executa o resto, assim não da pra saber se a parte doPlayerAddSkill está funcionando ;/

Link para o post
Compartilhar em outros sites
3 horas atrás, r0bert0lol disse:

@tataboy67 


[22:29:24.611] data/actions/scripts/max skills.lua:onUse
[22:29:24.611] Description:
[22:29:24.611] data/actions/scripts/max skills.lua:18: attempt to compare boolean with number
[22:29:24.611] stack traceback:
[22:29:24.611]  data/actions/scripts/max skills.lua:18: in function <data/actions/scripts/max skills.lua:14>

Tataboy, voce fez alteração no script mas alterou a parte do for alí que executa a função doPlayerAddSkill mas oque está gerando esse Erro acredito eu que seja o not do if na linha 18.

Eu tentei tirar o not do if que confere a storage e aí o erro parou, porem dentro do jogo mesmo alterando a storage e usando pela primeira vez ele acusa que o player ja tem a storage retornando a mensagem

18:45 Voce ja usou o item.

E aí o script não executa o resto, assim não da pra saber se a parte doPlayerAddSkill está funcionando ;/

local cfg = {
	level = 400,
	effect = 30,
	addLevel = {
		[1] = {ID_LEVEL = SKILL_AXE, quant = 1},
		[2] = {ID_LEVEL = SKILL_SWORD, quant = 1},
		[3] = {ID_LEVEL = SKILL_LEVEL, quant = 1},
		[4] = {ID_LEVEL = SKILL_CLUB, quant = 1}
	},

	storage = 344240,
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
	
	local posPlayer = getPlayerPosition(cid)
	
	if getPlayerStorageValue(cid, cfg.storage) >= 1 then
		doPlayerSendTextMessage(cid, 23, "Voce ja usou o item.")
		doSendMagicEffect(posPlayer, cfg.effect)
		return false
	end

	if not getPlayerLevel(cid) >= cfg.level then
		doPlayerSendTextMessage(cid, 23, "Voce nao possui nivel.")
		doSendMagicEffect(posPlayer, cfg.effect)
		return false
	end

	for k, z in pairs(cfg.addLevel) do
		doPlayerAddSkill(cid, z.ID_LEVEL, z.quant)
	end
	setPlayerStorageValue(cid, cfg.storage, 1)
	return true
end

 

Link para o post
Compartilhar em outros sites
local cfg = {
	level = 400,
	effect = 30,
	addLevel = {
		[1] = {id = SKILL_AXE, quant = 1},
		[2] = {id = SKILL_SWORD, quant = 1},
		[3] = {id = SKILL_LEVEL, quant = 1},
		[4] = {id = SKILL_CLUB, quant = 1}
	},

	storage = 344240,
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if getPlayerStorageValue(cid, cfg.storage) >= 1 then
		doPlayerSendTextMessage(cid, 23, "Voce ja usou o item.")
		doSendMagicEffect(getPlayerPosition(cid), cfg.effect)
		return true
	end

	if getPlayerLevel(cid) < cfg.level then
		doPlayerSendTextMessage(cid, 23, "Voce nao possui nivel.")
		doSendMagicEffect(getPlayerPosition(cid), cfg.effect)
		return true
	end

	for i = 1, #cfg.addLevel do
		local skill = cfg.addLevel[i]
		doPlayerAddSkill(cid, skill.id, skill.quant)
	end

	setPlayerStorageValue(cid, cfg.storage, 1)
	return true
end

Primeira observação: A função getPlayerLevel puxa um número, o que funciona com operadores.. Por isso está retornando tal erro...
Segunda observação: Quanto ao for, é mais otimizado utilizar um loop numérico ao invés de utilizar o pairs e o ipairs...

Editado por FlavioHulk (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

@r0bert0lol ué ? Aqui está adicionando os leveis exato, está configurado pra 10, ganho 10 leveis a mais na skill, se estou com 8 ganho 10 e vai para 18!

                                                              ezgif-1-98aab239f3.gif.1a897c9c3225228909e7b356a5cfb8e4.gif

Link para o post
Compartilhar em outros sites

@FlavioHulk Pior que eu havia utilizado o for numérico primeiro kk
mas ele falou que deu erro ali e eu n tinha visto que era na linha 18 e pensei que era no for, dai mudei para pairs:
 

10 horas atrás, tataboy67 disse:

@r0bert0lol 


local cfg = {
	level = 400,
	effect = 30,
	addLevel = {
		[1] = {ID_LEVEL = SKILL_AXE, quant = 1},
		[2] = {ID_LEVEL = SKILL_SWORD, quant = 1},
		[3] = {ID_LEVEL = SKILL_LEVEL, quant = 1},
		[4] = {ID_LEVEL = SKILL_CLUB, quant = 1}
	},

	storage = 344240,
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
	
	local posPlayer = getPlayerPosition(cid)
	
	if not getPlayerStorageValue(cid, cfg.storage) < 1 then
		doPlayerSendTextMessage(cid, 23, "Voce ja usou o item.")
		doSendMagicEffect(posPlayer, cfg.effect)
		return false
	end

	if not getPlayerLevel(cid) >= cfg.level then
		doPlayerSendTextMessage(cid, 23, "Voce nao possui nivel.")
		doSendMagicEffect(posPlayer, cfg.effect)
		return false
	end

	for i = 1, #cfg.addLevel do
		doPlayerAddSkill(cid, cfg.addLevel[i].ID_LEVEL, cfg.addLevel[i].quant)
	end
	setPlayerStorageValue(cid, cfg.storage, 1)
	return true
end

 

A parte do getPlayerLevel n esta errado eu acho... na verdade o erro estava causando na linha 18:
if not getPlayerStorageValue(cid, cfg.storage) < 1 then

Link para o post
Compartilhar em outros sites
34 minutos atrás, tataboy67 disse:

@FlavioHulk Pior que eu havia utilizado o for numérico primeiro kk
mas ele falou que deu erro ali e eu n tinha visto que era na linha 18 e pensei que era no for, dai mudei para pairs:
 

A parte do getPlayerLevel n esta errado eu acho... na verdade o erro estava causando na linha 18:
if not getPlayerStorageValue(cid, cfg.storage) < 1 then

Então, justamente nessa linha... Ele tá vendo como erro utilizar not em uma função que puxa número... Ao certo deveria ser assimilado junto com operadores aritméticos, saca? Nesse caso só remover o not e ajustar o operador "<"

Link para o post
Compartilhar em outros sites
2 horas atrás, FlavioHulk disse:

Então, justamente nessa linha... Ele tá vendo como erro utilizar not em uma função que puxa número... Ao certo deveria ser assimilado junto com operadores aritméticos, saca? Nesse caso só remover o not e ajustar o operador "<"

Obrigado pela dica ^^ . Não usarei mais not em casos do tipo.

Link para o post
Compartilhar em outros sites

Ambos os códigos estão funcionando, mas o estranho é que não sei o motivo mas em meu servidor não adiciona os leveis exatos, do Level 10 ao 13 ao usar independentemente da quantidade de Leveis que coloco para ser adicionado o player recebe apenas 1 level, e apartir do 13 buga e não recebe mais nada, não sei oque está levando a acontecer isso mas acho que é algo em meu servidor e não no script. (estou investigando)

 

Os codigos que testei e "funcionaram" são esses;

Script do Kotz

Spoiler

local lvl_min = 400 -- Leve mínimo para usar o script. 
local storage = 344240 -- Para não usar o script novamente.

local skills_t = {
{skill = SKILL_CLUB, count_lvl = 10},
{skill = SKILL_SWORD, count_lvl = 10},
{skill = SKILL_AXE, count_lvl = 10}
}

function onUse(cid, item, fromPosition, itemEx, toPosition)

	if getPlayerStorageValue(cid, storage) < 1 then
		if getPlayerLevel(cid) >= lvl_min then 
			doPlayerPopupFYI(cid, "Parabens, voce acaba de maximizar o seu personagem!")
			doSendMagicEffect(getPlayerPosition(cid), 5)
			setPlayerStorageValue(cid, storage, 1)
			for _, t in pairs(skills_t) do
				doPlayerAddSkill(cid, t.skill, t.count_lvl)
			end
		else
			selfSay('Voce nao tem Level Suficiente !', cid)
			doSendMagicEffect(getPlayerPosition(cid), 3)
		end
	else
		selfSay('Voce ja utilizou esse Max Scroll Antes !', cid)
		doSendMagicEffect(getPlayerPosition(cid), 3)
	end

	return true
end

Script do Tataboy corrigido pelo Flaviohulk

Spoiler

local cfg = {
	level = 400,
	effect = 30,
	addLevel = {
		[1] = {id = SKILL_AXE, quant = 1},
		[2] = {id = SKILL_SWORD, quant = 1},
		[3] = {id = SKILL_LEVEL, quant = 1},
		[4] = {id = SKILL_CLUB, quant = 1}
	},

	storage = 344240,
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if getPlayerStorageValue(cid, cfg.storage) >= 1 then
		doPlayerSendTextMessage(cid, 23, "Voce ja usou o item.")
		doSendMagicEffect(getPlayerPosition(cid), cfg.effect)
		return true
	end

	if getPlayerLevel(cid) < cfg.level then
		doPlayerSendTextMessage(cid, 23, "Voce nao possui nivel.")
		doSendMagicEffect(getPlayerPosition(cid), cfg.effect)
		return true
	end

	for i = 1, #cfg.addLevel do
		local skill = cfg.addLevel[i]
		doPlayerAddSkill(cid, skill.id, skill.quant)
	end

	setPlayerStorageValue(cid, cfg.storage, 1)
	return true
end

 

Agradeço a todos que dedicaram tempo montando o script xD

Editado por r0bert0lol (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo