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

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

  • 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

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Postado

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

Nem todo loop infinito é ruim ;P 

User *eu = new User("otteN");
RepSystem<User> *myRep = new RepSystem<User>("jóinha");
myRep->setAlvo(eu);

/* só por ser criado já sou o melhor membro */ 

while(eu->isMelhorMembro()){
myRep->reputar();
}

 

  • 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