-
Terrible Holograph one way doors snippet.
Hello there. Today is the day that I am quitting owning a Habbo retro. I will continue to maybe develop with Holograph and ION, but I will no longer be owning a hotel, therefore I will make all of my (terribly coded) snippets public.
I really don't care if this should be posted in the Holograph thread, people don't always look in the Holograph thread. I will offer no support for this snippet, if you can't get it to work with my instructions below then you must be an idiot.
Instructions to install
- Copy the snippet to your clipboard
- Open your Holograph virtualuser.cs
- Search for "love shuffler" or somthing similar
- Under the "love shuffler" case, paste my one way door case
- Add the one way door to the catalogue, it should work buggily
Now I know this is terribly coded. I could work much more efficient and yes, I have improved since I coded this, but I'm just helping the community by releasing this. Also, you can obviously add support for multiple one way door casts, if you know what I mean. If you don't, worry not.
The snippet
Code:
case "Ch": // Ch + ONE-WAY-DOOR-FURNI-ID (answer: Dx + WIRE(FURNI-ID) + I + WIRE(ROOM-UID-OF-CLICKER)) (sprite: 'one_way_door*#)
{
try
{
int itemID = Encoding.decodeVL64(currentPacket.Substring(2));
if (Room.floorItemManager.containsItem(itemID))
{
Rooms.Items.floorItem Item = Room.floorItemManager.getItem(itemID); // Find the itemID.
if (Item.Sprite == "one_way_door*1")
{
Room.sendData("Dx" + Encoding.encodeVL64(itemID) + "I" + Encoding.encodeVL64(Room.roomID)); // Opens the gate, with green light
Room.moveUser(this.roomUser, Item.X, Item.Y, true); // Walk into the item
Thread.Sleep(350);
if (Item.Z == 0)
Room.moveUser(this.roomUser, roomUser.X, roomUser.Y+1, true);
else if (Item.Z == 2)
Room.moveUser(this.roomUser, roomUser.X-1, roomUser.Y, true);
else if (Item.Z == 4)
Room.moveUser(this.roomUser, roomUser.X, roomUser.Y-1, true);
else if (Item.Z == 6)
Room.moveUser(this.roomUser, roomUser.X+1, roomUser.Y, true);
Thread.Sleep(350);
Room.sendData("Dx" + Encoding.encodeVL64(itemID) + "H" + Encoding.encodeVL64(Room.roomID));
}
}
}
catch { }
break;
}
Enjoy, TomSpit.
Moogly Edit...
Here's the SQL as posted by Ricky:
Quote:
Originally Posted by
rickymenier
catalogue_pages
Code:
INSERT INTO `catalogue_pages` (`indexid`, `minrank`, `indexname`, `displayname`, `style_layout`, `img_header`, `img_side`, `label_description`, `label_misc`, `label_moredetails`, `opt_bodyreplace`) VALUES
(CIP, 7, 'One Way Doors', 'One Way Doors', 'ctlg_layout2', 'catalog_limited_headline1', 'catalog_limited_teaser1,', 'New SciFi Furni', NULL, 'Click on the item you want for more information.', 'NULL');
catalogue_items
Code:
INSERT INTO `catalogue_items` (`tid`, `catalogue_name`, `catalogue_description`, `catalogue_cost`, `typeid`, `length`, `width`, `top`, `name_cct`, `colour`, `catalogue_id_page`, `door`, `tradeable`, `recycleable`, `catalogue_id_index`) VALUES
(TID, 'NAME', 'DESC', 5, 1, 1, 1, 0.00, 'one_way_door*1', '0,0,0', CIP, '0', '1', '1', CID),
(TID, 'NAME', 'DESC', 5, 1, 1, 1, 0.00, 'one_way_door*2', '0,0,0', CIP, '0', '1', '1', CID),
(TID, 'NAME', 'DESC', 5, 1, 1, 1, 0.00, 'one_way_door*3', '0,0,0', CIP, '0', '1', '1', CID),
(TID, 'NAME', 'DESC', 5, 1, 1, 1, 0.00, 'one_way_door*4', '0,0,0', CIP, '0', '1', '1', CID),
(TID, 'NAME', 'DESC', 5, 1, 1, 1, 0.00, 'one_way_door*5', '0,0,0', CIP, '0', '1', '1', CID),
(TID, 'NAME', 'DESC', 5, 1, 1, 1, 0.00, 'one_way_door*6', '0,0,0', CIP, '0', '1', '1', CID),
(TID, 'NAME', 'DESC', 5, 1, 1, 1, 0.00, 'one_way_door*7', '0,0,0', CIP, '0', '1', '1', CID),
(TID, 'NAME', 'DESC', 5, 1, 1, 1, 0.00, 'one_way_door*8', '0,0,0', CIP, '0', '1', '1', CID),
(TID, 'NAME', 'DESC', 5, 1, 1, 1, 0.00, 'one_way_door*9', '0,0,0', CIP, '0', '1', '1', CID);
No problem.
-
Re: Terrible Holograph one way doors snippet.
Nice
Is this working with Dissi's TDP or something like that
-
Re: Terrible Holograph one way doors snippet.
Quote:
Originally Posted by
bartskinu
Nice
Is this working with Dissi's TDP or something like that
It should work in any Holograph version. I've tested in both Dissi's and the original source, still works as it should.
-
Re: Terrible Holograph one way doors snippet.
I think its pretty awesome.. but does they work as they should? like since you say terrible in the thread title too, or is it just the coding that could have been done beter? :)
-
Re: Terrible Holograph one way doors snippet.
They work fine, it's just that the actual coding of them could be much more simple and tidy, I would say.
-
Re: Terrible Holograph one way doors snippet.
Yea, that was what i thought ;)
-
Re: Terrible Holograph one way doors snippet.
Oh god, don't use thread sleep!!!!!! It stops the whole server. Plus if the user clickson the gates 10 times, it multiply's it by 10, so the server stops for 3500 seconds and so on.
Instead put a timer on the sendData. eg sendData("Dx" + "HH", 350);
I got one way gates working, well the opening and closing + walking parts, but I need to work on the square open and square blocked bits :)
-
Re: Terrible Holograph one way doors snippet.
Quote:
Originally Posted by
Shine-Away
Oh god, don't use thread sleep!!!!!! It stops the whole server. Plus if the user clickson the gates 10 times, it multiply's it by 10, so the server stops for 3500 seconds and so on.
Instead put a timer on the sendData. eg sendData("Dx" + "HH", 350);
I got one way gates working, well the opening and closing + walking parts, but I need to work on the square open and square blocked bits :)
I told you it was terribly coded ;)
-
Re: Terrible Holograph one way doors snippet.
Do it likes this ;)
Code:
case "Ch": // Ch + ONE-WAY-DOOR-FURNI-ID (answer: Dx + WIRE(FURNI-ID) + I + WIRE(ROOM-UID-OF-CLICKER)) (sprite: 'one_way_door*#)
{
try
{
int itemID = Encoding.decodeVL64(currentPacket.Substring(2));
if (Room.floorItemManager.containsItem(itemID))
{
Rooms.Items.floorItem Item = Room.floorItemManager.getItem(itemID); // Find the itemID.
if (Item.Sprite == "one_way_door*1")
{
Room.sendData("Dx" + Encoding.encodeVL64(itemID) + "I" + Encoding.encodeVL64(Room.roomID)); // Opens the gate, with green light
Room.moveUser(this.roomUser, Item.X, Item.Y, true); // Walk into the item
if (Item.Z == 0)
Room.moveUser(this.roomUser, roomUser.X, roomUser.Y+1, true);
else if (Item.Z == 2)
Room.moveUser(this.roomUser, roomUser.X-1, roomUser.Y, true);
else if (Item.Z == 4)
Room.moveUser(this.roomUser, roomUser.X, roomUser.Y-1, true);
else if (Item.Z == 6)
Room.moveUser(this.roomUser, roomUser.X+1, roomUser.Y, true);
Room.sendData("Dx" + Encoding.encodeVL64(itemID) + "H" + Encoding.encodeVL64(Room.roomID), 350);
}
}
}
catch { }
break;
}
Also does the user walk onto the gate?
-
Re: Terrible Holograph one way doors snippet.
Can someone post the sql of catalogue_items and catalogue_pages?
for one_way_doors?
Thanks, Mark
-
Re: Terrible Holograph one way doors snippet.
Quote:
Originally Posted by
Mark1994123
Can someone post the sql of catalogue_items and catalogue_pages?
for one_way_doors?
Thanks, Mark
catalogue_pages
Code:
INSERT INTO `catalogue_pages` (`indexid`, `minrank`, `indexname`, `displayname`, `style_layout`, `img_header`, `img_side`, `label_description`, `label_misc`, `label_moredetails`, `opt_bodyreplace`) VALUES
(CIP, 7, 'One Way Doors', 'One Way Doors', 'ctlg_layout2', 'catalog_limited_headline1', 'catalog_limited_teaser1,', 'New SciFi Furni', NULL, 'Click on the item you want for more information.', 'NULL');
catalogue_items
Code:
INSERT INTO `catalogue_items` (`tid`, `catalogue_name`, `catalogue_description`, `catalogue_cost`, `typeid`, `length`, `width`, `top`, `name_cct`, `colour`, `catalogue_id_page`, `door`, `tradeable`, `recycleable`, `catalogue_id_index`) VALUES
(TID, 'NAME', 'DESC', 5, 1, 1, 1, 0.00, 'one_way_door*1', '0,0,0', CIP, '0', '1', '1', CID),
(TID, 'NAME', 'DESC', 5, 1, 1, 1, 0.00, 'one_way_door*2', '0,0,0', CIP, '0', '1', '1', CID),
(TID, 'NAME', 'DESC', 5, 1, 1, 1, 0.00, 'one_way_door*3', '0,0,0', CIP, '0', '1', '1', CID),
(TID, 'NAME', 'DESC', 5, 1, 1, 1, 0.00, 'one_way_door*4', '0,0,0', CIP, '0', '1', '1', CID),
(TID, 'NAME', 'DESC', 5, 1, 1, 1, 0.00, 'one_way_door*5', '0,0,0', CIP, '0', '1', '1', CID),
(TID, 'NAME', 'DESC', 5, 1, 1, 1, 0.00, 'one_way_door*6', '0,0,0', CIP, '0', '1', '1', CID),
(TID, 'NAME', 'DESC', 5, 1, 1, 1, 0.00, 'one_way_door*7', '0,0,0', CIP, '0', '1', '1', CID),
(TID, 'NAME', 'DESC', 5, 1, 1, 1, 0.00, 'one_way_door*8', '0,0,0', CIP, '0', '1', '1', CID),
(TID, 'NAME', 'DESC', 5, 1, 1, 1, 0.00, 'one_way_door*9', '0,0,0', CIP, '0', '1', '1', CID);
No problem.
-
Re: Terrible Holograph one way doors snippet.
Nice one TomSpit! I'll try this and see what I can improve on it.
-
Re: Terrible Holograph one way doors snippet.
ya, they probly work. the coding is just a bit sloppy. thnx for the catalogue
-
Re: Terrible Holograph one way doors snippet.
Code:
if (Item.Sprite == "one_way_door*1")
Am I right in thinking that should be...
Code:
if (Item.Sprite == "one_way_door*1" || Item.Sprite == "one_way_door*2" || Item.Sprite == "one_way_door*3" || Item.Sprite == "one_way_door*4" || Item.Sprite == "one_way_door*5" || Item.Sprite == "one_way_door*6" || Item.Sprite == "one_way_door*7" || Item.Sprite == "one_way_door*8" || Item.Sprite == "one_way_door*9")
Or something like that... fk noes I can't code in c# :P
-
Re: Terrible Holograph one way doors snippet.
Quote:
Originally Posted by
Habchop1
Code:
if (Item.Sprite == "one_way_door*1")
Am I right in thinking that should be...
Code:
if (Item.Sprite == "one_way_door*1" || Item.Sprite == "one_way_door*2" || Item.Sprite == "one_way_door*3" || Item.Sprite == "one_way_door*4" || Item.Sprite == "one_way_door*5" || Item.Sprite == "one_way_door*6" || Item.Sprite == "one_way_door*7" || Item.Sprite == "one_way_door*8" || Item.Sprite == "one_way_door*9")
Or something like that... fk noes I can't code in c# :P
Yeah, somthing like that should work. I don't care what you guys do with it. Fix it up and release it, keep it and be a greedy faggot or whatever.
-
Re: Terrible Holograph one way doors snippet.
Na I'm bored so I'm thinking about messing with Holo.
I was making something in PHP but I can't be fucked with it now.
Great Job Anyway (Y)
-
Re: Terrible Holograph one way doors snippet.
http://img29.imageshack.us/img29/9451/onewaydoor.gif
Yeaah xD
... remove the "walk into item" or it dont works correctly.
But, my code is a bit diffrent, i coded it some months ago.
I don't know how to make walking smoothy...
-
Re: Terrible Holograph one way doors snippet.
Iv fixed a few little things iv noticed on yours =]
Code:
case "Ch": // Ch + ONE-WAY-DOOR-FURNI-ID (answer: Dx + WIRE(FURNI-ID) + I + WIRE(ROOM-UID-OF-CLICKER)) (sprite: 'one_way_door*#)
{
try
{
int itemID = Encoding.decodeVL64(currentPacket.Substring(2));
if (Room.floorItemManager.containsItem(itemID))
{
Rooms.Items.floorItem Item = Room.floorItemManager.getItem(itemID); // Find the itemID.
if (Item.Sprite == "one_way_door" || Item.Sprite == "one_way_door*1" || Item.Sprite == "one_way_door*2" || Item.Sprite == "one_way_door*3" || Item.Sprite == "one_way_door*4" || Item.Sprite == "one_way_door*5" || Item.Sprite == "one_way_door*6" || Item.Sprite == "one_way_door*7" || Item.Sprite == "one_way_door*8" || Item.Sprite == "one_way_door*9")
{
Room.sendData("Dx" + Encoding.encodeVL64(itemID) + "I" + Encoding.encodeVL64(Room.roomID)); // Opens the gate, with green light
Room.moveUser(this.roomUser, Item.X, Item.Y, true); // Walk into the item
if (Item.Z == 0)
Room.moveUser(this.roomUser, roomUser.X, roomUser.Y +2, true);
else if (Item.Z == 2)
Room.moveUser(this.roomUser, roomUser.X - 2, roomUser.Y, true);
else if (Item.Z == 4)
Room.moveUser(this.roomUser, roomUser.X, roomUser.Y - 2, true);
else if (Item.Z == 6)
Room.moveUser(this.roomUser, roomUser.X + 2, roomUser.Y, true);
Room.sendData("Dx" + Encoding.encodeVL64(itemID) + "H" + Encoding.encodeVL64(Room.roomID), 350);
}
}
}
catch { }
break;
}
1) Being the item thing as I pointed a few secs ago.
2) Being that it would only move the avatar into the gate and not through it.
Only bug I see now is when you try go threw it over and over and you just get stuck in the middle xD
-
Re: Terrible Holograph one way doors snippet.
I think I know why you "speed" through the gate.
Basically this is what habbo does: User double-clicks the one way gate. The gate opens. Pathfinder helps the user navigate through the gate. The gate closes.
This is how we're doing it: User double-clicks the one way gate. The gate closes. User is forced into the square the gate is in. User is forced out the gate. Gate closes in 350 miliseconds regardless of where the user is.
The reason why we can't use pathfinder to go through the gate is because the gate is considered a solid object which the pathfinder avoids. Is there any way to change the typeid of the gate temporary (to let's say 5 which is rug) allow the pathfinder to navigate the user through it, and change the type id back to 1 (solid).
P.S: Here's my current code (modified of Shine-Away's modification of TomSpit's):
Code removed. See my last post.
Basically it forces the user into the square, but lets the pathfinder find the way out, you only get "half-speedy" and half-normal walking. It also shuts down the gate in 700 miliseconds instead of 350 because normal-walking speed is slower.
EDIT: Here's my in-progress code to demostrate what I was talking about, right now, it does this: Open the gate, pathfinder tells the correct location, user walks around the gate, gate closes. If someone can make the gate temporary a non-solid object, it'll work 100%.
Code removed. See my last post.
-
Re: Terrible Holograph one way doors snippet.
-
Re: Terrible Holograph one way doors snippet.
Yifan, What do you mean by the gate melts?
And thanks
-
Re: Terrible Holograph one way doors snippet.
He means making the tile act as though the gate isn't there.
Then he wants to remelt it so it knows the gate is there again.
Or something like that.
-
Re: Terrible Holograph one way doors snippet.
Yea, make the pathfinder thinks the gate isn't there, find the path, and then make the pathfinder see the gate again. I got everything down except for the last part. It's hard because multiple threads are running.
---------- Post added at 06:44 PM ---------- Previous post was at 05:23 PM ----------
Ok, here's my final code. It's dirty in how it handles re-blocking, but everything else is clean. Feel free to fix the re-blocking part of the code:
Code:
case "Ch": // Ch + ONE-WAY-DOOR-FURNI-ID (answer: Dx + WIRE(FURNI-ID) + I + WIRE(ROOM-UID-OF-CLICKER)) (sprite: 'one_way_door*#)
{
if (Room == null || roomUser == null || _inPublicroom)
return;
int itemID = Encoding.decodeVL64(currentPacket.Substring(2));
Rooms.Items.floorItem Item = Room.floorItemManager.getItem(itemID); // Find the item.
try
{
if (Room.floorItemManager.containsItem(itemID) && stringManager.getStringPart(Item.Sprite, 0, 12) == "one_way_door")
{
Room.sendData("Dx" + Encoding.encodeVL64(itemID) + "I" + Encoding.encodeVL64(Room.roomID)); // Opens the gate, with green light
Room.setSquareState(Item.X, Item.Y, 1, 1, virtualRoom.squareState.Open);
roomUser.walkLock = true;
switch (Item.Z) // Walk into the item
{
case 0: roomUser.goalY = roomUser.Y + 2; roomUser.goalX = roomUser.X; break;
case 2: roomUser.goalX = roomUser.X - 2; roomUser.goalY = roomUser.Y; break;
case 4: roomUser.goalY = roomUser.Y - 2; roomUser.goalX = roomUser.X; break;
case 6: roomUser.goalX = roomUser.X + 2; roomUser.goalY = roomUser.Y; break;
}
roomUser.walkLock = false;
//WARNING: Dirty method to seeing if pathfinder finished
while (true)
if (roomUser.statusManager.containsStatus("mv"))
break;
//End dirty code
Room.sendData("Dx" + Encoding.encodeVL64(itemID) + "H" + Encoding.encodeVL64(Room.roomID), 1000);
Room.setSquareState(Item.X, Item.Y, 1, 1, virtualRoom.squareState.Blocked);
break;
}
}
catch {}
break;
}
Here's how it works (Based on TomSpit and Shine-Away's code):
First, check to see if the room is loaded, the user is loaded, and it's not a public room (standard checks)
Next, it gets the itemID from the packet and creates a instance of this item for easy access
It enters the "try" to escape errors (I presume):
If the room has this item AND the item starts with "one_way_door" (to allow multiple colors) then:
Send command to open gate
Set the square the gate is in to be open
Locks the user to prevent walking in middle of the gate
Switch the Z (rotation), different rotations = different walking direction
Tells the pathfinder to go to the square after the gate
Because the square the gate is on is open, you can walk through it
Now the dirty part: It goes into a infinite loop until it sees that pathfinder has finished deciding what to do
The square is set back to solid (if you do this without the bit of code above, the square will be solid BEFORE pathfinder decides on the path, therefore you go around the gate)
Send the command to close the gate.
I know the while loop is bad, but it's either this or Thread.Sleep(). At least with the while loop, the pause ends when the pathfinder finishes deciding where to go, with a Thread.Sleep(), you manually define the time it pauses so faster computer will still pause as long.
-
Re: Terrible Holograph one way doors snippet.
-
Re: Terrible Holograph one way doors snippet.
Quote:
Originally Posted by
yifan_lu
Code:
case "Ch": // Ch + ONE-WAY-DOOR-FURNI-ID (answer: Dx + WIRE(FURNI-ID) + I + WIRE(ROOM-UID-OF-CLICKER)) (sprite: 'one_way_door*#)
{
if (Room == null || roomUser == null || _inPublicroom)
return;
int itemID = Encoding.decodeVL64(currentPacket.Substring(2));
Rooms.Items.floorItem Item = Room.floorItemManager.getItem(itemID); // Find the item.
try
{
if (Room.floorItemManager.containsItem(itemID) && stringManager.getStringPart(Item.Sprite, 0, 12) == "one_way_door")
{
Room.sendData("Dx" + Encoding.encodeVL64(itemID) + "I" + Encoding.encodeVL64(Room.roomID)); // Opens the gate, with green light
Room.setSquareState(Item.X, Item.Y, 1, 1, virtualRoom.squareState.Open);
roomUser.walkLock = true;
switch (Item.Z) // Walk into the item
{
case 0: roomUser.goalY = roomUser.Y + 2; roomUser.goalX = roomUser.X; break;
case 2: roomUser.goalX = roomUser.X - 2; roomUser.goalY = roomUser.Y; break;
case 4: roomUser.goalY = roomUser.Y - 2; roomUser.goalX = roomUser.X; break;
case 6: roomUser.goalX = roomUser.X + 2; roomUser.goalY = roomUser.Y; break;
}
roomUser.walkLock = false;
//WARNING: Dirty method to seeing if pathfinder finished
while (true)
if (roomUser.statusManager.containsStatus("mv"))
break;
//End dirty code
Room.sendData("Dx" + Encoding.encodeVL64(itemID) + "H" + Encoding.encodeVL64(Room.roomID), 1000);
Room.setSquareState(Item.X, Item.Y, 1, 1, virtualRoom.squareState.Blocked);
break;
}
}
catch {}
break;
}
Works perfectly for me :D
Thanks a lot.
QUICK UPDATE:
catalogue_items:
Code:
INSERT INTO `catalogue_items` (`tid`, `catalogue_name`, `catalogue_description`, `catalogue_cost`, `typeid`, `length`, `width`, `top`, `name_cct`, `colour`, `catalogue_id_page`, `door`, `tradeable`, `recycleable`, `catalogue_id_index`) VALUES
(TID, 'Aqua One Way Gate', 'Once you''re in you can never escape!', 5, 1, 1, 1, 0.00, 'one_way_door*1', '#ABD0D2,#ffffff,#ABD0D2', CIP, '0', '1', '1', CID),
(TID, 'Pink One Way Gate', 'Once you''re in you can never escape!', 5, 1, 1, 1, 0.00, 'one_way_door*2', '#FF99BC,#ffffff,#FF99BC', CIP, '0', '1', '1', CID),
(TID, 'Black One Way Gate', 'Once you''re in you can never escape!', 5, 1, 1, 1, 0.00, 'one_way_door*3', '#525252,#ffffff,#525252', CIP, '0', '1', '1', CID),
(TID, 'White One Way Gate', 'Once you''re in you can never escape!', 5, 1, 1, 1, 0.00, 'one_way_door*4', '#ffffff,#ffffff,#ffffff', CIP, '0', '1', '1', CID),
(TID, 'Beige One Way Gate', 'Once you''re in you can never escape!', 5, 1, 1, 1, 0.00, 'one_way_door*5', '#F7EBBC,#ffffff,#F7EBBC', CIP, '0', '1', '1', CID),
(TID, 'Blue One Way Gate', 'Once you''re in you can never escape!', 5, 1, 1, 1, 0.00, 'one_way_door*6', '#5EAAF8,#ffffff,#5EAAF8', CIP, '0', '1', '1', CID),
(TID, 'Green One Way Gate', 'Once you''re in you can never escape!', 5, 1, 1, 1, 0.00, 'one_way_door*7', '#92D13D,#ffffff,#92D13D', CIP, '0', '1', '1', CID),
(TID, 'Yellow One Way Gate', 'Once you''re in you can never escape!', 5, 1, 1, 1, 0.00, 'one_way_door*8', '#FFD837,#ffffff,#FFD837', CIP, '0', '1', '1', CID),
(TID, 'Red One Way Gate', 'Once you''re in you can never escape!', 5, 1, 1, 1, 0.00, 'one_way_door*9', '#E14218,#ffffff,#E14218', CIP, '0', '1', '1', CID);
catalogue_pages:
Code:
INSERT INTO `catalogue_pages` (`indexid`, `minrank`, `indexname`, `displayname`, `style_layout`, `img_header`, `img_side`, `label_description`, `label_misc`, `label_moredetails`, `opt_bodyreplace`) VALUES
(CIP, 7, 'One Way Doors', 'One Way Doors', 'ctlg_layout2', 'catalog_limited_headline1', 'catalog_limited_teaser1,', 'New SciFi Furni', NULL, 'Click on the item you want for more information.', 'NULL');
external_texts:
Code:
furni_one_way_door*1_name=Aqua One Way Gate
furni_one_way_door*1_desc=Once you're in you can never escape!
furni_one_way_door*2_name=Pink One Way Gate
furni_one_way_door*2_desc=Once you're in you can never escape!
furni_one_way_door*3_name=Black One Way Gate
furni_one_way_door*3_desc=Once you're in you can never escape!
furni_one_way_door*4_name=White One Way Gate
furni_one_way_door*4_desc=Once you're in you can never escape!
furni_one_way_door*5_name=Beige One Way Gate
furni_one_way_door*5_desc=Once you're in you can never escape!
furni_one_way_door*6_name=Blue One Way Gate
furni_one_way_door*6_desc=Once you're in you can never escape!
furni_one_way_door*7_name=Green One Way Gate
furni_one_way_door*7_desc=Once you're in you can never escape!
furni_one_way_door*8_name=Yellow One Way Gate
furni_one_way_door*8_desc=Once you're in you can never escape!
furni_one_way_door*9_name=Red One Way Gate
furni_one_way_door*9_desc=Once you're in you can never escape!
All the correct colors now, page is still the same, and name and desc is same as external_texts (: