Postado Maio 18, 2014 11 anos Olá pessoal, Hoje venho trazer pra vocês um sisteminha que acabei de criar, para auxiliar a movimentação de nossos players, fazendo com que além de spells de velocidade, também tenham um recurso a mais. Funciona da seguinte maneira : para os personagens melee (paladin e knight), há um grande impulso em que eles correm super rápido até o próximo obstáculo (monstros, paredes, etc) ou até a quantidade limite de posições para se avançar do talkaction, soltando efeitos de fogo pelos pés. É possível controlar sua direção de corrida pressionando ctrl+direção. Já os personagens mágicos, druid e sorcerer, canalizarão um poder de luz e após isso, se teleportarão, em linha reta, até o próximo obstáculo, ou até a quantidade de posições limite. Não é possível utilizar continuamente, porque senão seria bastante apelativo, então coloquei uma quantidade de exhaust, no meu caso, 10 segundos, porém você pode modificar no script. Para vocês terem ideia de como funciona, fiz um vídeo (com resolução ruim a propósito, peço perdão), que está logo à seguir : Bom, cada uma das categorias(melee, magic) tem sua vantagem, e sua desvantagem. Melee : -Vantagem : é possível controlar as direcionais com ctrl. -Desvantagem : pode ser atingido durante a movimentação. Magic : -Vantagem : aparece instantaneamente na posição destino, após a focalização de energia. -Desvantagem : não pode desviar de obstáculos. Para usar, apenas digite !move. Agora, vou mostrar-lhes os códigos e como devem ser colocados e configurados. Em data\talkactions\scripts, crie um novo arquivo chamado move.lua, e cole o seguinte código : local exhauststorage = 20209 -- storage para o exhaust local exhaust = 10 -- tempo do exhaust em segundos local quantpos = 30 -- posições x ou y que o personagem irá avançar, por exemplo, aqui irá se mover 30 posições pra direção em que estiver local voc = { --dependendo da vocação, a movimentação será diferente {3,4,7,8,11,12}, -- vocações melee, que no caso são knight e paladin {1,2,5,6,9,10}, -- vocações mágicas, que são sorc e druid } --Função da movimentação para paladin e knight function moveMelee(cid, t) if(isCreature(cid)) then local tmp = getPlayerLookPos(cid) if(not isCreature(getThingFromPos(tmp).uid) and doTileQueryAdd(cid, tmp)==1 and t>0) then doCreatureSetNoMove(cid, 1) t = t-1 doSendMagicEffect(getCreaturePos(cid), 15) doMoveCreature(cid, getPlayerLookDir(cid)) return addEvent(moveMelee, 10, cid, t) else doCreatureSetNoMove(cid, 0) return TRUE end else return TRUE end end --Função da movimentação para sorcerer e druid function moveMagic(cid) if(isCreature(cid)) then local tmp = getCreaturePos(cid) local dir = getPlayerLookDir(cid) for i=1, quantpos do if(dir==0) then tmp = {x=tmp.x, y=tmp.y-1, z=tmp.z} elseif(dir==1) then tmp = {x=tmp.x+1, y=tmp.y, z=tmp.z} elseif(dir==2) then tmp = {x=tmp.x, y=tmp.y+1, z=tmp.z} elseif(dir==3) then tmp = {x=tmp.x-1, y=tmp.y, z=tmp.z} end if(doTileQueryAdd(cid, tmp)~=1) then if(dir==0) then tmp = {x=tmp.x, y=tmp.y+1, z=tmp.z} elseif(dir==1) then tmp = {x=tmp.x-1, y=tmp.y, z=tmp.z} elseif(dir==2) then tmp = {x=tmp.x, y=tmp.y-1, z=tmp.z} elseif(dir==3) then tmp = {x=tmp.x+1, y=tmp.y, z=tmp.z} end break end end doTeleportThing(cid, tmp) doSendMagicEffect(getCreaturePos(cid), 49) doSendAnimatedText(getCreaturePos(cid), "Tchum!", 144) doCreatureSetNoMove(cid, 0) return TRUE else return TRUE end end --Efeitos para a movimentação de sorc e druid function magicEffect(cid, i) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local posefeitos = { {x=(atual.x)-1, y=(atual.y)-1, z=atual.z}, {x=atual.x, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=atual.y, z=atual.z}, {x=(atual.x)+1, y=(atual.y)+1, z=atual.z}, {x=atual.x, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=atual.y, z=atual.z}, } if(i<=8) then doSendMagicEffect({x=posefeitos[i].x, y=posefeitos[i].y, z=posefeitos[i].z}, 39) end if(i>8) then doSendMagicEffect(atual, 49) doSendAnimatedText(atual, "Voosh", 144) return moveMagic(cid) end return addEvent(magicEffect, 50, cid, i+1) else return TRUE end end --Função principal function onSay(cid, words, param) if(getPlayerStorageValue(cid, exhauststorage)>os.time()) then doPlayerSendCancel(cid, "Voce deve esperar "..(getPlayerStorageValue(cid, exhauststorage)-os.time()).." segundos para usar a movimentação novamente.") return TRUE else setPlayerStorageValue(cid, exhauststorage, os.time()+exhaust) local v = getPlayerVocation(cid) for i=1, #voc[1] do if(v==voc[1][i]) then return moveMelee(cid, quantpos),doCreatureSay(cid, "Movimentação ultra rápida!", 1) end end return magicEffect(cid, 1),doCreatureSay(cid, "Teleport!", 1),doCreatureSetNoMove(cid, 1) end end Agora vá em data\talkactions\talkactions.xml, e adicione uma nova linha com o seguinte conteúdo : <talkaction words="!move" event="script" value="move.lua"/> O código está comentado, então agora é só configurar e usar de acordo com as suas preferências! OBS : Fica a seu critério colocar se apenas vip podem utilizar esse sistema, se será necessário mp, ou soul, ou hp, ou qualquer coisa que precise. Tudo isso pode ser incrementado na função principal (onSay). Créditos : eu mesmo (GMLeal/ BielzinhoCrazy/ Fakezim) tanto faz Bom, é isso aí pessoal, bom proveito, e obrigado! Editado Maio 23, 2014 10 anos por bielzinhocrazy (veja o histórico de edições)
Postado Maio 20, 2014 10 anos Caraca, parece ser muito bom! deve ser útil em eventos de MOBA ou servidores de pvp enforced...
Postado Maio 22, 2014 10 anos No meu deu errado, não deu nenhum erro, mas no jogo quando eu executo essa talkaction, aparece a animação dos mages, mas ai o char fica no mesmo lugar, e além disso ele buga, e você não pode mais sair do lugar '-'
Postado Maio 22, 2014 10 anos Autor No meu deu errado, não deu nenhum erro, mas no jogo quando eu executo essa talkaction, aparece a animação dos mages, mas ai o char fica no mesmo lugar, e além disso ele buga, e você não pode mais sair do lugar '-' Estranho, retestei o código e funcionou perfeitamente. Poderia postar como você colocou no seu OT, e a versão do seu OT? Ao meu ver parece que só está executando a função de efeitos do teleport(magicEffect), mas não chama a função que teleporta(moveMagic). OBS : O script foi testado na versão 8.6 do tibia, e o servidor que uso é o eribaiak 3.0. OBS 2 : O player trava e fica sem mover, porque enquanto os efeitos são executados, eu coloquei "setPlayerNoMove(cid, 1)" pro player não sair andando enquanto 'carrega' o teleport, mas após ele se teleportar, destrava o movimento, e é possível andar normalmente. Então realmente, o mais provável é a função moveMagic não estar sendo executada corretamente. Editado Maio 22, 2014 10 anos por bielzinhocrazy (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.