Postado Janeiro 11, 2018 7 anos 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 (obg ao @Beeny por fazer essa linda sign <3)
Postado Janeiro 11, 2018 7 anos Autor @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 ) 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 )
Postado Janeiro 11, 2018 7 anos 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 Janeiro 11, 2018 7 anos por marcot (veja o histórico de edições)
Postado Janeiro 11, 2018 7 anos Autor @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 Janeiro 12, 2018 7 anos por hallanehallex (veja o histórico de edições)
Postado Janeiro 12, 2018 7 anos Autor @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 Janeiro 12, 2018 7 anos por hallanehallex (veja o histórico de edições)
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.