Ir para conteúdo
  • Cadastre-se

(Resolvido)[PEDIDO] Spells Hiraishin Ni No Dan Seal e Hiraishin Ni No Dan


Ir para solução Resolvido por marcot,

Posts Recomendados

Fala galerinha do TK tudo beleza?? então hoje venho com mais um pedido, gostaria de pedir a script das Spells Hiraishin Ni No Dan Seal e  Hiraishin Ni No Dan

Gostaria que funciona-se assim:

 

Script 1

ao usar hiraishin ni no dan seal no player X eu faria um selamento  que durace X tempo

ao usar hiraishin ni no dan seal aparecera um effect Y ao player X que foi selado

Apos o tempo X estiver esgotado aparecera uma mensagem ao usuário da spell hiraishin ni no dan seal dizendo "a Spell Expirou" e a spell  se desfaça e não poderei ativá-la com  hiraishin ni no dan

Fim do Script

 

Script 2

ao usar hiraishin ni no dan eu teleport até o player X  que foi selado pela spell hiraishin ni no dan seal

se eu não tiver usado hiraishin ni no dan seal apareça uma mensagem dizendo "Você não usou a spell de selamento então você não pode ativa-la" 

se eu usei o hiraishin ni no dan seal então faça  a spell hiraishin ni o dan é ativada eu eu sou teleportado até o player
Fim Do Script

 

Espero ter cido claro pois não sou muito bom em explicar script e como funcionam ^^ 

 

 

 

Link para o post
Compartilhar em outros sites

se ngm fizer até amanha eu faço p vc

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)

Link para o post
Compartilhar em outros sites
9 minutos atrás, xWhiteWolf disse:

se ngm fizer até amanha eu faço p vc

@xWhiteWolf não sei se tem muita gente enteresada nessa spell pois vi varios topicos com titulos parecidos so que nenhum como eu queria e fui pedir ajuda falaram para eu criar a até hj nada

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

cara eu n tive tempo hoje, vou tentar fazer amanhã. Me manda pm umas 15h q ai qnd eu chegar do trabalho eu tento resolver rapidinho

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)

Link para o post
Compartilhar em outros sites
Em Thursday, January 04, 2018 em 21:10, xWhiteWolf disse:

cara eu n tive tempo hoje, vou tentar fazer amanhã. Me manda pm umas 15h q ai qnd eu chegar do trabalho eu tento resolver rapidinho

 

15 Hrs nao pudir , mas mando meu hello agr

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

 

Em 04/01/2018 em 17:56, hallanehallex disse:

@UP

Tenho um Spell similar a esse que está pedindo.

Depois que você "selar" essa magia no adversário passará 6 segundos ( configuravél )

e seu char irá teleportar para o player que você "selou" a magia

Spoiler

local config = {
storage = 49608,
tempo = 6
}


function onCastSpell(cid, var)
if isPlayer(getCreatureTarget(cid)) then
local name = getCreatureName(getCreatureTarget(cid))


if getPlayerStorageValue(cid, config.storage) <= 0 then
doPlayerSetStorageValue(cid, config.storage, 1)
doSendMagicEffect(getThingPos(cid), 65)
doSendMagicEffect(getThingPos(getCreatureByName(name)), 65)
addEvent(function()
  if isCreature(cid) then
  doPlayerSetStorageValue(cid, config.storage, 0)
  doTeleportThing(cid, getThingPos(getCreatureByName(name)))
  end
 end, 1000*config.tempo)
elseif getPlayerStorageValue (cid, config.storage) > 0 then
doSendMagicEffect(getThingPos(cid), 2)
doPlayerSendCancel(cid, "Você marcou seu target.")
end
elseif(getTilePzInfo(aqui)) then
return doPlayerSendCancel(cid, "Não pode usar o teleport em casas ou areas protegidas.")
else
doPlayerSendCancel (cid, "Você só pode usar esse jutsu em players!.")
end
return true
end

 

Spoiler

<instant name="Hiraishin Ni No Dan" words="Hiraishin Ni No Dan" lvl="1000" mana="9500" aggressive="1" needtarget="1" range="5" exhaustion="0" needlearn="0" blockwalls="1" event="script" value="minato/hiraishinnojutsu.lua">
<vocation id="16-"/>
</instant>

Aqui funcionou Perfeitamente , espero que aí também funcione. ;D

Link para o post
Compartilhar em outros sites
18 minutos atrás, zLockey9 disse:

 

Tenho um Spell similar a esse que está pedindo.

Depois que você "selar" essa magia no adversário passará 6 segundos ( configuravél )

e seu char irá teleportar para o player que você "selou" a magia

  Mostrar conteúdo oculto

local config = {
storage = 49608,
tempo = 6
}


function onCastSpell(cid, var)
if isPlayer(getCreatureTarget(cid)) then
local name = getCreatureName(getCreatureTarget(cid))


if getPlayerStorageValue(cid, config.storage) <= 0 then
doPlayerSetStorageValue(cid, config.storage, 1)
doSendMagicEffect(getThingPos(cid), 65)
doSendMagicEffect(getThingPos(getCreatureByName(name)), 65)
addEvent(function()
  if isCreature(cid) then
  doPlayerSetStorageValue(cid, config.storage, 0)
  doTeleportThing(cid, getThingPos(getCreatureByName(name)))
  end
 end, 1000*config.tempo)
elseif getPlayerStorageValue (cid, config.storage) > 0 then
doSendMagicEffect(getThingPos(cid), 2)
doPlayerSendCancel(cid, "Você marcou seu target.")
end
elseif(getTilePzInfo(aqui)) then
return doPlayerSendCancel(cid, "Não pode usar o teleport em casas ou areas protegidas.")
else
doPlayerSendCancel (cid, "Você só pode usar esse jutsu em players!.")
end
return true
end

 

  Mostrar conteúdo oculto

<instant name="Hiraishin Ni No Dan" words="Hiraishin Ni No Dan" lvl="1000" mana="9500" aggressive="1" needtarget="1" range="5" exhaustion="0" needlearn="0" blockwalls="1" event="script" value="minato/hiraishinnojutsu.lua">
<vocation id="16-"/>
</instant>

Aqui funcionou Perfeitamente , espero que aí também funcione. ;D

@zLockey9 ja vi essa spell em um topico em que o WhiteWolf respondeu mais eu queria igual a do Nto WoNo que no caso é igual o que eu disse la no começo do topico 1 spell e selamento e outra de teleport

Link para o post
Compartilhar em outros sites

Bom, eu tentei fazer o bruto, se faltar alguma coisa me dá o toque. Eu preferi fazer por talkaction pra deixar mais fácil o codigo, porque daria muito trampo negócio de guardar o nome do jogador que o player marcou fora do script.

 

Vá em data/talkactions/talkactions.xml e adicione as tags:

<talkaction words="hiraishin ni no dan seal" script="hiraishin no jutsu.lua" />
<talkaction words="hiraishin ni no dan" script="teleport hiraishin.lua" />

Agora em data/talkactions/scripts/ crie os arquivos hiraishin no jutsu.lua e teleport hiraishin.lua.

 

hiraishin no jutsu.lua

local config = {
	storage = 49608,
	time = 6
}

local errorMsg = {
	pz = "Voce so pode usar este jutsu fora do PZ.",
	playerOnly = "Voce so pode usar este jutsu em players.",
	alreadyMarked = "Voce ja marcou um jogador."
}

function onSay(cid, words, param)
	caster = cid
	target = getPlayerByName (param)
	
	if getTilePzInfo(getPlayerPosition(caster)) == FALSE and getTilePzInfo(getPlayerPosition(target)) == FALSE then
		if isPlayer (target) == TRUE then
			if getPlayerStorageValue (cid, config.storage) <= 0 then
				setPlayerStorageValue(cid, config.storage, 1)
				doPlayerSendTextMessage(cid,22, "Voce marcou o player ".. getPlayerName(target))
				local struct = {
					left = config.time, 
					player = cid,
					target = target
				}
				addEvent(teleportIsTrue, 1000, struct)
			elseif getPlayerStorageValue (cid, config.storage) > 0 then
				doSendMagicEffect(getPlayerPosition(cid), 2) 
				doPlayerSendCancel (cid, errorMsg.alreadyMarked)
			end
		else
			doPlayerSendCancel (cid, errorMsg.playerOnly)
		end
	else
		doPlayerSendCancel (cid, errorMsg.pz)
	end
end

function teleportIsTrue (struct)
	if struct.left ~= 0 then
		if getPlayerStorageValue (struct.player, config.storage) == 2 then
			doTeleportThing(struct.player, getThingPos(struct.target))
			setPlayerStorageValue(struct.player, config.storage, 0)
			doPlayerSendTextMessage(struct.player,22, "Voce perdeu sua marcacao.")
			return TRUE
		end
		doPlayerSendTextMessage(struct.player,22, struct.left .. " segundos restantes.")
		struct.left = struct.left - 1
		addEvent (teleportIsTrue, 1000, struct)
	elseif struct.left == 0 then
		doPlayerSendTextMessage(struct.player,22, "Voce perdeu sua marcacao.")
		setPlayerStorageValue(struct.player, config.storage, 0)
	else
		return FALSE
	end
end

 

hiraishin teleport.lua

local config = { 
	storage = 49608
}

function onSay (cid, words, param)
	if getPlayerStorageValue (cid, config.storage) == 1 then
		setPlayerStorageValue(cid, config.storage, 2)
	else
		doPlayerSendTextMessage(cid,22, "Voce nao marcou nenhum jogador.")
	end
end

Testei em Aries Server to Tibia 8.1 - Version 4.0 based on OTServ SVN Version 0.6.0 e funcionou normalmente, caso dê algum erro me envie o que houve no console.

Espero ter ajudado!

Link para o post
Compartilhar em outros sites

Antes de tudo @topic, me desculpa eu ando muito sem tempo ultimamente e fds eu costumo ficar sem pc então foi duplamente mais dificil arrumar um tempo pra abrir o sv e fazer os scripts.
Eu tentei entrar hoje para escrever pelo menos umas dicas de como alguém poderia fazer para te ajudar mas me deparei com a resposta do marcot q num olhar rápido aparenta estar funcional.

@marcot
você podia tanto ter salvo o nome do player no storage quanto salvar o uid dele (q é um numero). A unica preocupação é q dependendo do tamanho máximo q o storage está definido na sua source (e no seu banco de dados) o valor poderia ultrapassar mas isso é relativamente fácil de contornar (dividir o numero em 3 storages, por ex)

Eu gostei da forma q vc criou uma structure, isso mostra que você tem conhecimento em outras linguagens.
Vou testar seu código depois.

Geralmente os programadores q eu conheço não aceitam tão bem dicas, então espero q você não seja como eles e leve para o pessoal:

1- Use variaveis locais

        caster = cid
	target = getPlayerByName (param)

Principalmente com coisas que podem ser executadas ao mesmo tempo. Elas são mais rápidas!

2- TRUE e FALSE são variaveis, use true e false (minusculo)

3- Evite redundancias.

getTilePzInfo(getPlayerPosition(caster)) == FALSE

é muito mais fácil fazer if not getTilePzInfo(getPlayerPosition(caster))

Ou no caso de If X == 1 then use if X then (o mesmo pra X == true)


De resto, curti seu estilo, obrigado por atender ao pedido do tópico. ^^(y)

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)

Link para o post
Compartilhar em outros sites
20 minutos atrás, xWhiteWolf disse:

Antes de tudo @topic, me desculpa eu ando muito sem tempo ultimamente e fds eu costumo ficar sem pc então foi duplamente mais dificil arrumar um tempo pra abrir o sv e fazer os scripts.
Eu tentei entrar hoje para escrever pelo menos umas dicas de como alguém poderia fazer para te ajudar mas me deparei com a resposta do marcot q num olhar rápido aparenta estar funcional.

@marcot
você podia tanto ter salvo o nome do player no storage quanto salvar o uid dele (q é um numero). A unica preocupação é q dependendo do tamanho máximo q o storage está definido na sua source (e no seu banco de dados) o valor poderia ultrapassar mas isso é relativamente fácil de contornar (dividir o numero em 3 storages, por ex)

Eu gostei da forma q vc criou uma structure, isso mostra que você tem conhecimento em outras linguagens.
Vou testar seu código depois.

Geralmente os programadores q eu conheço não aceitam tão bem dicas, então espero q você não seja como eles e leve para o pessoal:

1- Use variaveis locais


        caster = cid
	target = getPlayerByName (param)

Principalmente com coisas que podem ser executadas ao mesmo tempo. Elas são mais rápidas!

2- TRUE e FALSE são variaveis, use true e false (minusculo)

3- Evite redundancias.


getTilePzInfo(getPlayerPosition(caster)) == FALSE

é muito mais fácil fazer if not getTilePzInfo(getPlayerPosition(caster))

Ou no caso de If X == 1 then use if X then (o mesmo pra X == true)


De resto, curti seu estilo, obrigado por atender ao pedido do tópico. ^^(y)

@xWhiteWolf,

Então, eu estou começando a mexer com LUA ainda, comecei pra valer na semana passada... Antigamente eu mexia com otserver (quando tinha uns 12 anos) mas eu sempre reutilizava scripts para tentar fazer outros e nunca sabia nada sobre a sintaxe de programação (como condicionais ou iteradores) o que me limitava muito. Agora já sei ou pouco mais, ai ajuda.

Obrigado pelas dicas.

 

Sobre a segunda eu tenho um pouco de medo porque ao menos na versão 8.1 o TRUE e FALSE são definidos no global.lua como 0 e 1, e não sabia se em lua é feito igual em C++ (0 = false e o restante = true). Sobre a redundancia na terceira acho que entra um pouco na segunda, no servidor 8.1 que tenho enfrentei problemas quando nao colocava a redundância em alguns scripts, mas eu vi que no outro source que tenho já não dava erro (TFS). Tipo, eu meio que sei sobre isso, mas tenho medo pelo desconhecimento ainda das sources e de LUA em si...

 

O storage eu nao consigo trocar ainda porque sou meio que fechado com 8.1 e se não me engano ele não aceita storage com strings (e ele não usa banco de dados, mas arquivos de texto para armazenar os personagens). (P.S.: Mt obrigado pela dica do uid do jogador, acho que ja da pra usar em uns scripts que eu estava pensando)

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

@marcot seu começo foi bem parecido com o meu, continue treinando e sucesso. Se tiver qualquer duvida pode chegar no privado :D

Lua entende nil e false como false. Qualquer outra coisa é considerado verdadeiro. Se souber um pouco de inglês aqui tá a definição de acordo com o wiki da linguagem:

 

Spoiler

An important point to note is that the value 0 is not a false test condition in Lua. In some languages, for example C, a test of:

if (0)
  printf("true");
else
  printf("false");
would display "false". In Lua,
> if 0 then
>>  print("true")
>> else
>>  print("false")
>> end
true
prints "true"! You should use false, or nil in place of 0:
> if false then print("true") else print("false") end
false
> if nil then print("true") else print("false") end
false
Why?
The reason for this is historical. Lua did not support boolean types (i.e. true and false) before version 5.0. Previous to version 5.0 a value of nil represented false. Now, both nil and false will act as a false condition in a test expression. E.g.,

> if nil then print("true") else print("false") end
false
> if 1 then print("true") else print("false") end
true
> if 0 then print("true") else print("false") end
true
> if 1==2 then print("true") else print("false") end
false
Another point to note is that true and false are not numerical values, e.g., 1 and 0 as they are in some languages.

> = true, false
true    false
> = 1 + true
stdin:1: attempt to perform arithmetic on a boolean value
stack traceback:
        stdin:1: in main chunk
        [C]: ?
Also, nil is coerced into a boolean value when used with a logical operator:

> = not nil
true
> = not 1
false
> = not 0
false

 



 

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)

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

Bom, eu tentei fazer o bruto, se faltar alguma coisa me dá o toque. Eu preferi fazer por talkaction pra deixar mais fácil o codigo, porque daria muito trampo negócio de guardar o nome do jogador que o player marcou fora do script.

 

Vá em data/talkactions/talkactions.xml e adicione as tags:


<talkaction words="hiraishin ni no dan seal" script="hiraishin no jutsu.lua" />
<talkaction words="hiraishin ni no dan" script="teleport hiraishin.lua" />

Agora em data/talkactions/scripts/ crie os arquivos hiraishin no jutsu.lua e teleport hiraishin.lua.

 

hiraishin no jutsu.lua


local config = {
	storage = 49608,
	time = 6
}

local errorMsg = {
	pz = "Voce so pode usar este jutsu fora do PZ.",
	playerOnly = "Voce so pode usar este jutsu em players.",
	alreadyMarked = "Voce ja marcou um jogador."
}

function onSay(cid, words, param)
	caster = cid
	target = getPlayerByName (param)
	
	if getTilePzInfo(getPlayerPosition(caster)) == FALSE and getTilePzInfo(getPlayerPosition(target)) == FALSE then
		if isPlayer (target) == TRUE then
			if getPlayerStorageValue (cid, config.storage) <= 0 then
				setPlayerStorageValue(cid, config.storage, 1)
				doPlayerSendTextMessage(cid,22, "Voce marcou o player ".. getPlayerName(target))
				local struct = {
					left = config.time, 
					player = cid,
					target = target
				}
				addEvent(teleportIsTrue, 1000, struct)
			elseif getPlayerStorageValue (cid, config.storage) > 0 then
				doSendMagicEffect(getPlayerPosition(cid), 2) 
				doPlayerSendCancel (cid, errorMsg.alreadyMarked)
			end
		else
			doPlayerSendCancel (cid, errorMsg.playerOnly)
		end
	else
		doPlayerSendCancel (cid, errorMsg.pz)
	end
end

function teleportIsTrue (struct)
	if struct.left ~= 0 then
		if getPlayerStorageValue (struct.player, config.storage) == 2 then
			doTeleportThing(struct.player, getThingPos(struct.target))
			setPlayerStorageValue(struct.player, config.storage, 0)
			doPlayerSendTextMessage(struct.player,22, "Voce perdeu sua marcacao.")
			return TRUE
		end
		doPlayerSendTextMessage(struct.player,22, struct.left .. " segundos restantes.")
		struct.left = struct.left - 1
		addEvent (teleportIsTrue, 1000, struct)
	elseif struct.left == 0 then
		doPlayerSendTextMessage(struct.player,22, "Voce perdeu sua marcacao.")
		setPlayerStorageValue(struct.player, config.storage, 0)
	else
		return FALSE
	end
end

 

hiraishin teleport.lua


local config = { 
	storage = 49608
}

function onSay (cid, words, param)
	if getPlayerStorageValue (cid, config.storage) == 1 then
		setPlayerStorageValue(cid, config.storage, 2)
	else
		doPlayerSendTextMessage(cid,22, "Voce nao marcou nenhum jogador.")
	end
end

Testei em Aries Server to Tibia 8.1 - Version 4.0 based on OTServ SVN Version 0.6.0 e funcionou normalmente, caso dê algum erro me envie o que houve no console.

Espero ter ajudado!

@marcot  mano não esta funcionando e não esta apresentando nenhum erro no console, é como se simplesmente ele não estivesse adicionada no servidor

OBS: não teria como fazer elas como spells ?? porque eu queria colocar em uma vocation especifica

 

Link para o post
Compartilhar em outros sites
13 minutos atrás, marcot disse:

Em qual versão de TFS você está testando?

P.S.: Dá pra colocar por vocation com talkaction também

 

Usou as aspas? exemplo: 


hiraishin ni no dan seal "JogadorX

 

@marcot  eu uso TFS Source 0.3.6 Crying Damon

 

P.S.: Se eu não usar as " Aspas " Fica Livre para todos os player poder usar ??

Link para o post
Compartilhar em outros sites

Na versão que testei só funcionava quando abria as aspas. Eu so vou terminar um script aqui e ja olho esse em uma versão mais recente de tibia

0cc47e0d7fcb80abc89fba8f887baa1c.gif

hiraishin "Teste3

teleport

/\ foram as hotkeys usadas pra teleportar, mas por conta das tags que usei diferentes pra deixar mais rápido

Editado por marcot (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
23 minutos atrás, marcot disse:

Na versão que testei só funcionava quando abria as aspas. Eu so vou terminar um script aqui e ja olho esse em uma versão mais recente de tibia

0cc47e0d7fcb80abc89fba8f887baa1c.gif

hiraishin "Teste3

teleport

/\ foram as hotkeys usadas pra teleportar, mas por conta das tags que usei diferentes pra deixar mais rápido

 

ao invez de colocar o nome da pessoa como vc deu o exemplo hiraishin "Teste3  tem como colocar a vocation por exemplo hiraishin"230-246 para X vocation pode usar essa spell/talkaction ??

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