ID:2096253
 
(See the best response by Ter13.)
Code:
obj
cagecontrol
icon = 'cage.dmi'
layer=MOB_LAYER+1
Exit()
return 0
</b>


Problem description: I would like no one could exit inside the cage obj once inside in ,but it dont work,already tried with exited also

Uncross()
return 0


Exit() and Exited() are called when you move OUT of an object.

Uncross() and Uncrossed() are called when you move OFF of an object.

When you are IN an object, the object is your loc.

When you are ON an object, the object is in the same turf as you. You can only be ON an object when the loc is a turf. You are not on an object when both you and the object are inside of another object. Turfs are the only atoms that have a concept of locality. Otherwise, the contents of any other atom does not imply relative locality. You are in the object, but there is actually no spacial place inside of the object to be relative to other objects inside of the same object.


Uncross() and Uncrossed() are only available for movable objects. This is because turfs are the only atom subtype which IN and ON mean the same thing. Being IN a turf is the same as being ON a turf. /areas have no concept of being "ON". You are merely IN an area.

You can be IN a movable, but you can also be ON a movable, hence the difference between Enter() and Cross(), etc. Movables are the only atoms that have a distinction between IN and ON.
In response to Ter13
Hello, I tried to do with uncross and uncrossed
But with uncross I could not walk in obj.
And with uncrossed i could walk and exit from the obj.
I'm trying to make the user move inside it but could not exit,if they try exit for a normal obj they could not pass.
Uncross() is correct.

Uncrossed()/Exited()/Entered()/Crossed() do not prevent movement. They respond to when movement happens.

Uncross() is correct. If there are problems, something else is wrong.
In response to Ter13
I saw the Uncross() F1 on dm and it says something like
"Returns:
1 to permit; 0 to deny."
It seems I cant move inside the obj but I can return so if I turn return on 0 may I be able to move inside? what I can do if the format is atom/movable/O
I tried to do the same way you did then you explained
Uncross()
return 0
...What?

Uncross() is correct. End of story.

If you think you are using it correctly, you are going to have to explain to me what is going wrong for me to be of any help.

I can't understand a damn thing you just said. If English isn't your first language, you can switch to your native language. I'll be able to understand you probably just fine and work out how to auto-translate back into something comprehensible.
In response to Ter13
Estou tentando fazer com que quem esteja dentro do obj não consiga sair mas que consiga se movimentar dentro dele.

trying to explain in english:
I am trying to do if someone is inside of obj could not exit but could move inside of cage obj. It seems I cant do that with uncross,I'm thiking to do a another box now so they can not exit
Sim, eu entendo. Fazer a função Uncross() return 0. O que estão dentro da gaiola ainda será capaz de mover-se dentro da gaiola . Definir a densidade da gaiola para 0. Isto permitirá que as coisas para mover em cima dela.

obj
cage
density = 0 //Permitir o movimento na gaiola
layer = MOB_LAYER+1

Uncross(atom/movable/o)
if(ismob(o))
return 0 //Não permitir o movimento fora da gaiola
return ..() //coisas que não são mobs podem sair livremente



Se você estiver usando movimento de pixel isso não vai parar o objeto de espreitar para fora da gaiola. Ele só vai parar o objeto de totalmente sair , uma vez que está dentro.

Não há nenhuma maneira fácil de fazer a gaiola de impedir que objetos de espreitar para fora sem o uso de vários objetos.
In response to Ter13
http://puu.sh/pleoN/f8cedde5a5.jpg
Yes, I did exactly this way but then I get into obj it makes me freeze, I cant walk just can look for north,south,east,west.
Sim,tentei fazer desse jeito porém não consigo andar e meu personagem so pode olhar para o norte,sul,leste e oeste, como tivesse paralisado.
Best response
That's acting exactly as intended.

The problem is that you have multiple cage objects right next to one another. You will want to use a single cage object with its bounding area set to be 5x5:


O problema é que você tem vários objetos gaiola direita ao lado do outro . Este está agindo exatamente como é suposto , mas não como você pensou que ele deve funcionar.

No seu exemplo você vai querer alterar as variáveis ​​delimitadora do objeto de gaiola para ser de 5 telhas por 5 telhas e criar um único objeto , em vez de 25 objetos de gaiolas diferentes.

obj
cage
density = 0 //Permitir o movimento na gaiola
layer = MOB_LAYER+1
bound_width = 160//TILE_WIDTH*5
bound_height = 160//TILE_HEIGHT*5

Uncross(atom/movable/o)
if(ismob(o))
return 0 //Não permitir o movimento fora da gaiola
return ..() //coisas que não são mobs podem sair livremente
In response to Ter13
Oh, now I got it ,thanks for the help !