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

Ficou muito bom, meus parabéns amigo :D

Só tem 1 coisinha: as funções de param de spells só funcionam em players então essa mensagem de

playerOnly = "Voce so pode usar este jutsu em players.",

nunca vai ser printada até onde eu sei. O mesmo vale para target em pz, a menos que a spell tivesse a tag agressive = "0", então vc podia excluir essa checagem e só colocar a tag na spells.
Além disso, mesmo se ele executasse os prints, ele também ia executar o combat em ambos os casos pq vc não cancelou a spell após cair nesses casos em que ela não deveria ser castada, ele só não iria teleportar.

else
			doSendMagicEffect(getPlayerPosition(cid), 2)
			doPlayerSendCancel(cid, errorMsg.pz)
		end
	else
		doSendMagicEffect(getPlayerPosition(cid), 2)
		doPlayerSendCancel(cid, errorMsg.playerOnly)		
	end
	return doCombat(cid, combat, var)

deveria ter um return false antes do end de cada else para você colocar o return doCombat sem checar nada no fim.

Outra coisa é que o addEvent tá checando de 1 em 1 segundo, se vc usar a spell de teleportar pode ser q leve 1 segundo de delay até vc teleportar, isso pode ser mitigado se vc fazer o addEvent em 333 milisegundos e ai na função teleportisTrue vc faz pra só soltar a mensagem se for a terceira vez, ou algo assim. E faz o timeleft tb modificado. Garanto q isso iria melhorar enormemente a experiencia de soltar a magia.

Essas são as minhas dicas, claro q vc não precisa aplicá-las aqui, mas é o que eu notei que poderia melhorar.

Eu gostei muito da forma q vc pensou pra fazer teleportar sem precisar guardar nenhuma informação do player, eu to a tantos anos usando storage com nome do target salvo q eu confesso q fiquei um pouco engessado nessa ideia; Você pensou fora da caixa e conseguiu fazer o que vc se propôs a fazer. Meus parabéns!

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
  • Respostas 31
  • Created
  • Última resposta

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

@hallanehallex Consegui fazer seguindo as dicas do Wolf. Hiraishin no Jutsu 2.0:   Em data/spells/spells.xml cole: <instant name="Hiraishin No Jutsu" words="hiraishin ni no dan seal" lvl="12" mana="20" prem="1" range="5" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="hiraishin.lua"> <vocation id="4"/> </instant> <instant name="Hiraishin no Jutsu" words="hiraishin ni no dan" lvl="18" mana="14

Ficou muito bom, meus parabéns amigo :D Só tem 1 coisinha: as funções de param de spells só funcionam em players então essa mensagem de playerOnly = "Voce so pode usar este jutsu em players.", nunca vai ser printada até onde eu sei. O mesmo vale para target em pz, a menos que a spell tivesse a tag agressive = "0", então vc podia excluir essa checagem e só colocar a tag na spells. Além disso, mesmo se ele executasse os prints, ele também ia executar o combat em ambos os casos pq vc nã

Script sem o bug de tirar o target e sem damage: local config = { storageID = 49609, mark_time = 10 * 60, effectWhenTeleport = 339, -- Efeito ao teleportar effectWhenUsed = 152, } local errorMsg = { pz = "Seu alvo nao pode estar fora do PZ.", playerOnly = "Voce so pode usar este jutsu em players.", alreadyMarked = "Voce ja marcou um jogador.", } local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFE

@marcot @xWhiteWolf a spell ta quase perfeita eu so gostaria que você fizesse as seguintes alterações nela

 

1 - remove-se esse delay ao teleportar até o player

 

2 - ao tentar usar Hiraishin Ni No Dan remove-se a letra em laranja Hiraishin No Jutsu e so deixa-se a mensagem "Voce nao marcou nenhum jogador." (Caso você não consiga, isso não é de muita importancia é so um complemento para deixar mais bonitinha :v

 

3 - ao usar Hiraishin Ni No Dan aparecera o effect 339 quando eu teleporto até o player

 

4 - ao usar Hiraishin Ni No Dan Seal aparecera o effect 152 (Effect de Selamento)

 

5 - ao usar Hiraishin Ni No Dan Seal eu queria, SIM, que tivesse tempo mais não aparece-se na tela do Player por que o tempo seria muito grande para ficar a contagem na tela (Tempo Estimado para spell se desfazer uns 8~10 Minutos)

 

6 - ao usar Hiraishin Ni No Dan Seal eu queria que voce tirasse o target lost pois quando uso a spell hiraishin ni no dan seal eu so posso o usar o ativador (hiraishin ni no dan) so quando o player estiver targetado: gostaria que eu pudesse usar hiraishin ni no dan a qualquer distancia do player selado

 

7 - eu tambem queria que eu pode-se usar o Hiraishin Ni No Dan em qualquer distancia por ex: o Player Selado estivesse a uns 50~20000000 de passos de distancia (Distancia Ficticia) resumindo eu gostaria que não importa-se onde o Player Selado Estivesse o Player que Fez o Selamento iria até ele de qualquer jeito menos em PZ

 

P.S.: essas seguintes falhas nas spells não foi culpa sua e sim minha porque como eu disse no começo do topico não sou bom em explicar funções de spells ou script (eu sei que todo mundo ja deve estar de saco cheio de eu esquecer de explicar o Script corretamente mais eu ainda to comesando aprender Lua :laugh:)

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

TAG data/spells/spells.xml:

	<instant name="Hiraishin No Jutsu" words="hiraishin ni no dan seal" lvl="12" mana="20" prem="1" aggressive="1" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="hiraishin.lua">
		<vocation id="4"/>
	</instant>
	
	
	<instant name="Hiraishin no Jutsu" words="hiraishin ni no dan" lvl="18" mana="10" prem="1" aggressive="1" params="1" exhaustion="2000" needlearn="0" event="script" value="hiraishinII.lua">
		<vocation id="4"/>
	</instant>

hiraishin.lua

local config = {
	storageID = 49609,
	mark_time = 10 * 60,
	effectWhenTeleport = 339, -- Efeito ao teleportar
	effectWhenUsed = 152,
}

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

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, 152)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -20, 5, 5, 1.4, 2.1)


function onCastSpell(cid, var)
	--local target = getThingFromPosition(variantToPosition(var), 1)
	if isPlayer(getCreatureTarget(cid)) then
		if getPlayerStorageValue (cid, config.storageID) <= 0 then
			setPlayerStorageValue(cid, config.storageID, 1)
			doPlayerSendTextMessage(cid,22, "Voce marcou o player ".. getCreatureName(getCreatureTarget(cid)))
			local struct = {
				left = config.mark_time * 3, 
				player = cid,
				target = target,
				var = var
			}
			addEvent(teleportIsTrue, 333, struct)
		else
			doSendMagicEffect(getPlayerPosition(cid), 2)
			doPlayerSendCancel(cid, errorMsg.alreadyMarked)
			return false
		end
	else
		doSendMagicEffect(getPlayerPosition(cid), 2)
		doPlayerSendCancel(cid, errorMsg.playerOnly)
		return false	
	end
	return doCombat(cid, combat, var)
end

function teleportIsTrue (struct)
	if struct.left ~= 0 then
		if getPlayerStorageValue (struct.player, config.storageID) == 2 then
			doTeleportThing(struct.player, getThingPosition(getCreatureTarget(struct.player)), true)
			setPlayerStorageValue(struct.player, config.storageID, 0)
			doSendMagicEffect(getPlayerPosition(struct.player), config.effectWhenTeleport)
			doPlayerSendTextMessage(struct.player,22, "Voce perdeu sua marcacao.")
			return TRUE
		end
		struct.left = struct.left - 1
		addEvent (teleportIsTrue, 333, struct)
	elseif struct.left == 0 then
		doPlayerSendTextMessage(struct.player,22, "Voce perdeu sua marcacao.")
		setPlayerStorageValue(struct.player, config.storageID, 0)
	else
		return FALSE
	end
end

hiraishinII.lua

local config = {
	storageID = 49609,
	mark_time = 6,
}

function onCastSpell(cid, var)
	--local target = getThingFromPosition(variantToPosition(var), 1)
	if getPlayerStorageValue (cid, config.storageID) == 1 then
		setPlayerStorageValue(cid, config.storageID, 2)
	else
		doPlayerSendTextMessage(cid,22, "Voce nao marcou nenhum jogador.")
		return false
	end

	return true
end

Quanto à parte de não cancelar o target não conheço muito bem, mas acredito que a própria source do OTServer ja deva cancelar quando sái da tela. Não sei se existe alguma função em LUA que mantenha o target enquanto o jogador está fora da tela.

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

@marcot  o não lembro quem foi que fez uma spell parecida com essa que pedi que ao usar hiraishin ni no dan usa o selamento no player e ao usar novamente fora ou dentro do target ele teleporta até o player se não me engano foi o @xWhiteWolf  que criou essa spell 

 

e quando falei em cancelar target eu queria que ele usa-se hiraishin ni no dan  para teleportar até o player sem precisar estar com o target ativo no player, mais eu acho que isso pode ser mudado no spells.xml

 

P.S.: vou verificar a spell ainda pois não tive tempo meu pai usa pc para trabalho então ta dificil de eu usar hoje

@marcot  esqueci de mencionar um detalhe que esqueci de avisar eu gostaria que a spell não tira-se dano e aparece-se 1 effect ao selar o player e um outro effect ao teleportar 

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

@marcot 

desculpa eu encher o saco novamente mais como faço para  retirar o Dano da Spell ?? esqueci de avisar desse detalhe tbm gostaria que ele não tivesse dano

 

P.S.: não sei se é um bug ou se você programou a spell assim, mais quando uso hiraishin ni no dan seal  e ativo com hiraishin ni no dan funciona normal até ai, so que quando vou usar novamente o hiraishin ni no dan seal ele não usa e aparece a mensagem "você ja marcou um jogador"

e se eu não estou com target no player ele não teleporta, aparece o effect normalmente mais ele não teleporta

Editado por hallanehallex (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.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Estatísticas dos Fóruns

    96847
    Tópicos
    519607
    Posts



×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo