Ir para conteúdo
Entre para seguir isso  
Nord

isWalkable(pos)

Recommended Posts

Nord    2
Nord

Sintaxe: isWalkable(pos)

Descrição: A função retorna se você pode andar na posição "pos".

Requerimentos: Lua 5.1+ e um OTServer.

 

Função:

function isWalkable(pos)
local wall0 = getTileThingByPos({x=pos.x, y=pos.y, z=pos.z, stackpos=0})
local wall1 = getTileThingByPos({x=pos.x, y=pos.y, z=pos.z, stackpos=1})
local wall2 = getTileThingByPos({x=pos.x, y=pos.y, z=pos.z, stackpos=2})
local creature = getTileThingByPos({x=pos.x, y=pos.y, z=pos.z, stackpos=253})
if wall0.uid ~= 0 and hasProperty(wall0.uid, 3) == FALSE and hasProperty(wall0.uid, 7) == FALSE then
	if wall1.uid == 0 or (hasProperty(wall1.uid, 3) == FALSE and hasProperty(wall1.uid, 7) == FALSE) then
		if wall2.uid == 0 or (hasProperty(wall2.uid, 3) == FALSE and hasProperty(wall2.uid, 7) == FALSE) then
			if creature.uid == 0 then
				return TRUE
			end
		end
	end
end
return FALSE
end

 

Comentários adicionais: Quando há uma criatura na posição em que você faz a checagem é retornado um erro mas não acontece nada de errado.

É retornado TRUE se você puder andar em "pos", caso contrário é retornado FALSE.

 

Pra quem não sabe adicionar funções num OTServer copie a função e cole depois do último end que está no global.lua

Editado por Nord

Compartilhar este post


Link para o post
Mock    32
Mock

:o intertessante.

nord tenho 2 perguntas.

1º posso colocar essa função na mock script lib 1.1

2º qual o lualib do aries 4.0 :P

Compartilhar este post


Link para o post
Nord    2
Nord

Pode colocar sim no seu scriptlib, mas mete meus créditos lá hein! XD

Vo fazer um lib tbm heaheahea.

Lua lib do Aries? Ix, agora to boiando, mas se vc se referiu ao Lua 5.1+ está nas DLL's.

Editado por Nord

Compartilhar este post


Link para o post
Mock    32
Mock

s mas como eu vo saber.

e se exemplo for a 4.x se eu pega as dlls de um lua mais novo é so coloca na pasta do server? (subistituir)

Compartilhar este post


Link para o post
Capaverde    1
Capaverde

if creature == 0 then

assim nunca vai poder andar né, o certo seria creature.uid ou .itemid

@nord

essa função é meio inútil, porque ja da pra ver se um tile é walkable usando apenas a queryTileAddThing, que foi criada com esse propósito, mas mesmo assim vlw

Compartilhar este post


Link para o post
Nord    2
Nord

Capaverde

Opa, vlw por reportar o erro, eu tinha deixado sem a checagem de criatura dai quando fui posta coloquei rapidinho e esqueci isso xD.

Quando eu via a função queryTileAddThing eu pensava que o Thing não era criatura e sim algum item, dai pensei que podia dar errado ehahhaehahe.

Mock

Sim é só substituir a DLL, mas acredito que a do Aries é 5.1

Ah... Já olhei aqui e o Aries tem diferente, no TFS está lua5.1.dll

Mas não se preocupa, vai funcionar sim.

Editado por Nord

Compartilhar este post


Link para o post
Mock    32
Mock

:P ah tah.

menos mau.

é q qdo eu postei isso tava oucupado ai nen dava p ver se funfava no ot mas agora ja vi q dá.

Compartilhar este post


Link para o post
Balder    23
Balder

Você poderia postar um script usando essa função ?

 

É que o site não é só feito de ninjas em scripts

 

:)

 

se não for pedir muito é claro

Compartilhar este post


Link para o post
Nord    2
Nord

@ Ragnarot

 

Fiz esse script que se vc puder andar para frente seu player é movido para frente, se não houver essa checagem seu character poderia atravessar paredes.

 

data/talkactions/script/walk.lua

function onSay(cid, words, param)
   local pos = getCreaturePosition(cid)
   local dir = getPlayerLookDir(cid)
   if dir == 0 then
       [color="blue"]frente[/color] = {x=pos.x-1, y=pos.y, z=pos.z}
   elseif dir == 1 then
       [color="blue"]frente[/color] = {x=pos.x+1, y=pos.y, z=pos.z}
   elseif dir == 2 then
       [color="blue"]frente[/color] = {x=pos.x, y=pos.y+1, z=pos.z}
   elseif dir == 3 then
       [color="blue"]frente[/color] = {x=pos.x, y=pos.y-1, z=pos.z}
   end
   if [color="Red"]isWalkable[/color]([color="Blue"]frente[/color]) == TRUE then
       doMoveCreature(cid, dir)
   else
       doPlayerSendCancel(cid, "[color="Silver"]Há um obstáculo na sua frente.[/color]")
   end
end

 

data/talkactions/talkactions.xml

<talkaction words="!walk" script="walk.lua"/>

Editado por Nord

Compartilhar este post


Link para o post
Kaotar    5
Kaotar

@Topic

 

Boa Nord, legal a função eu também não conhecia a "queryTileAddThing" , vlw pela postagem de mais uma função.

 

@Nord (Post #9)

 

Tem um erro no script

 

Erro:

if [color=Red]isWalkable[/color]([color=Blue]frente[/color]) == TRUE [color=Indigo]then[/color]
       doMoveCreature(cid, dir)

 

Esqueceste o then sem ele nao funciona, hehe.

Detalhes.

Compartilhar este post


Link para o post
SLinderman    0
SLinderman
@Topic

 

Boa Nord, legal a função eu também não conhecia a "queryTileAddThing" , vlw pela postagem de mais uma função.

 

@Nord (Post #9)

 

Tem um erro no script

 

Erro:

if [color=Red]isWalkable[/color]([color=Blue]frente[/color]) == TRUE [color=Indigo]then[/color]
       doMoveCreature(cid, dir)

 

Esqueceste o then sem ele nao funciona, hehe.

Detalhes.

bem lembradooo.

Compartilhar este post


Link para o post
Balder    23
Balder

Aee valew cara vc ter me dado o exemplo agora sim eu entendi (mais ou menos né , hehe)

 

Mas o seguinte :

 

Se vc estiver direcionado para sua esquerda, o personagem consegue entrar na parede :P

 

 

Valew ai :)

Compartilhar este post


Link para o post
Nord    2
Nord

Isso aí, vcs tão fazendo certo, tão postando, criticando, reportando erros.

Vlw a todos aí.

 

Aee valew cara vc ter me dado o exemplo agora sim eu entendi (mais ou menos né , hehe)

 

Mas o seguinte :

 

Se vc estiver direcionado para sua esquerda, o personagem consegue entrar na parede :P

 

 

Valew ai :)

 

Na verdade não, eu fiz essa função pro carinha não atravessar paredes, postes, montanhas e talz :D

Editado por Nord

Compartilhar este post


Link para o post
ions_29a    0
ions_29a

n eh por nada não amis eu viajei no script...

soh n intendi pq eu jah vi q da p fazer de outra forma :S

 

mais vlw

Compartilhar este post


Link para o post
2573165    0
2573165

Eu estava precisando MUUITO das funções:

getTileThingByPos

HasProperty

Será que você poderia dar um edit no seu tópico com essas funções?

Obrigado cara!!

 

Pena que o meu não é TFS, porquê TFS já vem com um monte de funções prontas =x

Compartilhar este post


Link para o post
Mock    32
Mock

getTileThingByPos

HasProperty

 

Essas 2 funções são proprias do TFS não tem como por em outro server ao n ser mudando a source.

 

Aproposito

getTileThingByPos = getTinhgFormPos

Compartilhar este post


Link para o post
MotoBoy    0
MotoBoy

Nord arrasou =D~~

eu sempre usei funç~eos criadas tpw: isWall, isMontain

sauhsauhsauhas

 

agora sim Y.Y

muuuito bom!

vlw Nord!

Arras Lekee!!

 

flws~~

Compartilhar este post


Link para o post
Chê.    1
Chê.

Opa, boa função.

Sempre fiquei pensando se seria possivel fazer um script que não ande pra cima de paredes, dai tu me aparece com essa função ;p

 

vlw

Compartilhar este post


Link para o post
Mock    32
Mock

chei 1 bugzinho nessa função =x

eu fiz uma funão p faze raid

ai se tiver um bixo morto na posição essa função fala q não é "andavel"

da return em false =x

Compartilhar este post


Link para o post
Shadow BR    0
Shadow BR

Mock essa função também é bem antiga com as novas funções do TFS da para fazer um isWalkable mais simples e sem bugs.

 

 
function isWalkable(cid,pos)
  if getTileThingByPos(pos).uid ~= 0 and queryTileAddThing(cid,pos) == 1 then
  return TRUE
  end
end

 

Pronto, verifica a posição com apenas 2 funções!

Obs: Eu não testei essa função se alguém quiser testar para mim eu fico grato.

 

:bye:

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×