Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

Fala galera, vou mostrar agora como usar o novo sistema de cast imbutido na New Lib, é bem simples:

Pegarei como exemplo a spell Taunt, aqui está o código dela:

local config = {
walks = 4, -- qnts passos ele vai dar
delay = 750, -- de qnts em qnts milisegundos ele dá cada passo
speed = 100 -- velocidade que ele vai ficar enquanto estiver sob efeito do taunt
}

function onCastSpell(cid, var)
Taunt(cid, variantToNumber(var), config.delay, config.walks) 
doChangeSpeed(variantToNumber(var), (config.speed - getCreatureBaseSpeed(variantToNumber(var))))
addEvent(function() 
	if isCreature(variantToNumber(var)) then
		doChangeSpeed(variantToNumber(var), (-config.speed + getCreatureBaseSpeed(variantToNumber(var))))
	end
end, config.delay * (config.walks + 1))
return true
end 



1- Pra adicionar o sistema de channelling nessa spell eu preciso inicialmente passar todas as funções dela pra um addEvent, ficando assim:

local config = {
walks = 4, -- qnts passos irá dar
delay = 750, -- tempo entre 1 passo e outro
speed = 100 --- velocidade do passo
}

function onCastSpell(cid, var)

addEvent(function()
	if isCreature(cid) then			
		Taunt(cid, variantToNumber(var), config.delay, config.walks) 
		doChangeSpeed(variantToNumber(var), (config.speed - getCreatureBaseSpeed(variantToNumber(var))))
		addEvent(function() 
			if isCreature(variantToNumber(var)) then
			doChangeSpeed(variantToNumber(var), (-config.speed + getCreatureBaseSpeed(variantToNumber(var))))
			end
		end, config.delay * (config.walks + 1))
	end
end, time)
return true
end



2- Agora pro segundo evento acontecer eu preciso de um time, que se encontra ali antes do return true e que em nenhum momento eu disse oque era. Agora que entra a função onCastChannel(uid, target, delay, effect, key) mas note que essa função requer um delay próprio, um efeito e uma id de storage então vou precisar alterar o config, ficando + ou - assim:

local config = {
walks = 4, -- qnts passos irá dar
delay = 750, -- tempo entre 1 passo e outro
speed = 100, --- velocidade do passo
delaycast = 200, -- delay pra carregar (200 milisegundos por cada 10% da spell)
effect = 36, -- efeito que sai enquanto carrega
key = 61728 -- storage q fica salvo se o channeling foi realizado com sucesso
}

function onCastSpell(cid, var)

local time = onCastChannel(cid, getCreatureTarget(cid), config.delaycast, config.effect, config.key)
addEvent(function()
	if isCreature(cid) then			
		Taunt(cid, variantToNumber(var), config.delay, config.walks) 
		doCreatureSay(variantToNumber(var), "I WILL KILL YOU!", 20, false, 0, getCreaturePosition(variantToNumber(var)))	
		doCreatureSay(cid, "COME AT ME BRO", 20)
		doChangeSpeed(variantToNumber(var), (config.speed - getCreatureBaseSpeed(variantToNumber(var))))
		addEvent(function() 
			if isCreature(variantToNumber(var)) then
			doChangeSpeed(variantToNumber(var), (-config.speed + getCreatureBaseSpeed(variantToNumber(var))))
			end
		end, config.delay * (config.walks + 1))
	
	end
end, time)
return true
end

3- Agora note que temos uma key onde ficará salvo se o channelling foi realizado com sucesso, mas como saber? Simples, o valor dessa storage ficará 11 caso ele tenha sido realizado completamente com sucesso, então o passo final é colocar um checador no addEvent para o valor do Storage antes de soltar a spell, afinal, a spell só deverá sair se o channelling foi feito com sucesso.

local config = {
walks = 4, -- qnts passos irá dar
delay = 750, -- tempo entre 1 passo e outro
speed = 100, --- velocidade do passo
delaycast = 200, -- delay pra carregar (200 milisegundos por cada 10% da spell)
effect = 36, -- efeito que sai enquanto carrega
key = 61728 -- storage q fica salvo se o channeling foi realizado com sucesso
}

function onCastSpell(cid, var)

local time = onCastChannel(cid, getCreatureTarget(cid), config.delaycast, config.effect, config.key)
addEvent(function()
	if isCreature(cid) and getPlayerStorageValue(cid, config.key) == 11 then			
		Taunt(cid, variantToNumber(var), config.delay, config.walks) 
		doCreatureSay(variantToNumber(var), "I WILL KILL YOU!", 20, false, 0, getCreaturePosition(variantToNumber(var)))	
		doCreatureSay(cid, "COME AT ME BRO", 20)
		doChangeSpeed(variantToNumber(var), (config.speed - getCreatureBaseSpeed(variantToNumber(var))))
		addEvent(function() 
			if isCreature(variantToNumber(var)) then
				doChangeSpeed(variantToNumber(var), (-config.speed + getCreatureBaseSpeed(variantToNumber(var))))
			end
		end, config.delay * (config.walks + 1))
	elseif isCreature(cid) then
		doPlayerSendCancel(cid, "You broke the channeling spell so the cast was canceled.")
	end
end, time)
return true
end



4- A spell está perfeita e funcional agora, só q se vc for soltar vc vai perceber que o exhaust dela é bem menor que o tempo de channelling então o cara pode soltar ela diversas vezes só carregando e soltando. Pra controlar melhor isso já que se trata de uma spell praticamente mortal num x1 contra um knight nós usaremos um sistema de cooldown por storage, ficando assim:

local config = {
walks = 4, -- qnts passos irá dar
delay = 750, -- tempo entre 1 passo e outro
speed = 100, --- velocidade do passo
delaycast = 200, -- delay pra carregar (200 milisegundos por cada 10% da spell)
effect = 36, -- efeito que sai enquanto carrega
key = 61728, -- storage q fica salvo se o channeling foi realizado com sucesso
storagCooldown = 61729, -- storage que salva o cooldown da spell
cooldown = 25 -- tempo entre 1 uso e outro da spell
}

function onCastSpell(cid, var)

if getPlayerStorageValue(cid, config.storagCooldown) - os.time() <= 0 then
	setPlayerStorageValue(cid, config.storagCooldown, os.time() + config.cooldown)
else
	doPlayerSendCancel(cid, "Your skill is in cooldown, wait more ".. getPlayerStorageValue(cid, config.storagCooldown) - os.time() .." seconds to use it.")
	return false
end
local time = onCastChannel(cid, getCreatureTarget(cid), config.delaycast, config.effect, config.key)
addEvent(function()
	if isCreature(cid) and getPlayerStorageValue(cid, config.key) == 11 then			
		Taunt(cid, variantToNumber(var), config.delay, config.walks) 
		doCreatureSay(variantToNumber(var), "I WILL KILL YOU!", 20, false, 0, getCreaturePosition(variantToNumber(var)))
		doCreatureSay(cid, "COME AT ME BRO", 20)
		doChangeSpeed(variantToNumber(var), (config.speed - getCreatureBaseSpeed(variantToNumber(var))))
		addEvent(function() 
			if isCreature(variantToNumber(var)) then
				doChangeSpeed(variantToNumber(var), (-config.speed + getCreatureBaseSpeed(variantToNumber(var))))
			end
		end, config.delay * (config.walks + 1))
	elseif isCreature(cid) then
		doPlayerSendCancel(cid, "You broke the channeling spell so the cast was canceled.")
	end
end, time)
return true
end

Espero que vocês tenham aprendido como usar o cast System, agora um pequeno gif do funcionamento dele:


zf8MMyI.gif

  • Respostas 7
  • Visualizações 2.9k
  • Created
  • Última resposta

Top Posters In This Topic

Postado
  • Autor

seria uma espécie de provocação que obrigaria o player/monstro a ir pra cima de você te atacar, seria uma evolução do exeta res que funcione em players tb kkk

Postado

Não sei pq, mas eu acho que a Cip vai botar uma spell parecida na 2 promoção do Kina (lado defesa)...

  • 3 months later...
Postado

Erro ajuda por favo!!

 

 

[21/03/2015 02:31:44] [Error - Spell Interface] 

[21/03/2015 02:31:44] In a timer event called from: 
[21/03/2015 02:31:44] data/spells/scripts/support/taunt.lua:onCastSpell
[21/03/2015 02:31:44] Description: 
[21/03/2015 02:31:44] (luaDoCreatureSetNoMove) Creature not found
 
[21/03/2015 02:31:44] [Error - Spell Interface] 
[21/03/2015 02:31:44] In a timer event called from: 
[21/03/2015 02:31:44] data/spells/scripts/support/taunt.lua:onCastSpell
[21/03/2015 02:31:44] Description: 
[21/03/2015 02:31:44] (luaGetThingPosition) Thing not found
 
[21/03/2015 02:31:44] [Error - Spell Interface] 
[21/03/2015 02:31:44] In a timer event called from: 
[21/03/2015 02:31:44] data/spells/scripts/support/taunt.lua:onCastSpell
[21/03/2015 02:31:44] Description: 
[21/03/2015 02:31:44] (luaGetThingPosition) Thing not found
 
[21/03/2015 02:31:44] [Error - Spell Interface] 
[21/03/2015 02:31:44] In a timer event called from: 
[21/03/2015 02:31:44] data/spells/scripts/support/taunt.lua:onCastSpell
[21/03/2015 02:31:45] Description: 
[21/03/2015 02:31:45] (luaDoCreatureSay) Invalid position specified.
 
[21/03/2015 02:31:45] [Error - Spell Interface] 
[21/03/2015 02:31:45] In a timer event called from: 
[21/03/2015 02:31:45] data/spells/scripts/support/taunt.lua:onCastSpell
[21/03/2015 02:31:45] Description: 
[21/03/2015 02:31:45] (luaGetCreatureBaseSpeed) Creature not found
 
[21/03/2015 02:31:45] [Error - Spell Interface] 
[21/03/2015 02:31:45] In a timer event called from: 
[21/03/2015 02:31:45] data/spells/scripts/support/taunt.lua:onCastSpell
[21/03/2015 02:31:45] Description: 
[21/03/2015 02:31:45] data/spells/scripts/support/taunt.lua:26: attempt to perform arithmetic on a boolean value
[21/03/2015 02:31:45] stack traceback:
[21/03/2015 02:31:45] data/spells/scripts/support/taunt.lua:26: in function <data/spells/scripts/support/taunt.lua:21>
 

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo