Thread: Object distance validation / check

Results 1 to 8 of 8
  1. #1 Object distance validation / check 
    Registered Member
    I hate Guns's Avatar
    Join Date
    Mar 2009
    Posts
    7,001
    Thanks given
    2,005
    Thanks received
    2,776
    Rep Power
    5000
    I remember someone (think it might've been professor oak?) that released this but not complete (iirc it only had a check for 1 type). Eitherway, this is directly from the client

    Code:
    	public boolean isWithinDistance(GameObject object) {
    		int type = object.getType();
    		int rotation = object.getRotation();
    		if (type == 10 || type == 11 || type == 22) {
    			int width;
    			int height;
    			if (rotation == 0 || rotation == 2) {
    				width = object.getDefinition().getWidth();
    				height = object.getDefinition().getLength();
    			} else {
    				width = object.getDefinition().getLength();
    				height = object.getDefinition().getWidth();
    			}
    			int surroundings = object.getDefinition().getSurroundings();
    			if (rotation != 0) {
    				surroundings = (surroundings << rotation & 0xf) + (surroundings >> 4 - rotation);
    			}
    			return isWithinDistance(object, width, height, 0, 0, surroundings);
    		}
    		return isWithinDistance(object, 0, 0, type + 1, rotation, 0);
    	}
    
    	public boolean isWithinDistance(GameObject object, int width, int height, int type, int rotation, int surroundings) {
    		if (type != 0) {
    			if ((type <= 5 || type == 10) && reachedWall(object.getPosition().getX(), object.getPosition().getY(), rotation, type - 1)) {
    				return true;
    			}
    			if (type < 10 && reachedDecoration(object.getPosition().getX(), object.getPosition().getY(), type - 1, rotation)) {
    				return true;
    			}
    		}
    		if (width != 0 && height != 0) {
    			return reachedObject(object.getPosition().getX(), object.getPosition().getY(), height, surroundings, width);
    		}
    		return false;
    	}
    
    	private static final int WALL_EAST = 0x8;
    	private static final int WALL_NORTH = 0x2;
    	private static final int WALL_NORTHEAST = 0x4;
    	private static final int WALL_NORTHWEST = 0x1;
    	private static final int WALL_SOUTH = 0x20;
    	private static final int WALL_SOUTHEAST = 0x10;
    	private static final int WALL_SOUTHWEST = 0x40;
    	private static final int WALL_WEST = 0x80;
    
    	private class Orientation {
    		public static final int NORTH = 0;
    		public static final int EAST = 1;
    		public static final int SOUTH = 2;
    		public static final int WEST = 3;
    	}
    
    	public boolean reachedDecoration(int finalX, int finalY, int type, int orientation) {
    		if (x == finalX && y == finalY) {
    			return true;
    		}
    		if (type == 6 || type == 7) {
    			if (type == 7) {
    				orientation = orientation + 2 & 3;
    			}
    
    			if (orientation == Orientation.NORTH) {
    				if (x == finalX + 1 && y == finalY && (MapRegion.getClipping(x, y, z) & WALL_WEST) == 0) {
    					return true;
    				} else if (x == finalX && y == finalY - 1 && (MapRegion.getClipping(x, y, z) & WALL_NORTH) == 0) {
    					return true;
    				}
    			} else if (orientation == Orientation.EAST) {
    				if (x == finalX - 1 && y == finalY && (MapRegion.getClipping(x, y, z) & WALL_EAST) == 0) {
    					return true;
    				} else if (x == finalX && y == finalY - 1 && (MapRegion.getClipping(x, y, z) & WALL_NORTH) == 0) {
    					return true;
    				}
    			} else if (orientation == Orientation.SOUTH) {
    				if (x == finalX - 1 && y == finalY && (MapRegion.getClipping(x, y, z) & WALL_EAST) == 0) {
    					return true;
    				} else if (x == finalX && y == finalY + 1 && (MapRegion.getClipping(x, y, z) & WALL_SOUTH) == 0) {
    					return true;
    				}
    			} else if (orientation == Orientation.WEST) {
    				if (x == finalX + 1 && y == finalY && (MapRegion.getClipping(x, y, z) & WALL_WEST) == 0) {
    					return true;
    				} else if (x == finalX && y == finalY + 1 && (MapRegion.getClipping(x, y, z) & WALL_SOUTH) == 0) {
    					return true;
    				}
    			}
    		}
    
    		if (type == 8) {
    			if (x == finalX && y == finalY + 1 && (MapRegion.getClipping(x, y, z) & WALL_SOUTH) == 0) {
    				return true;
    			} else if (x == finalX && y == finalY - 1 && (MapRegion.getClipping(x, y, z) & WALL_NORTH) == 0) {
    				return true;
    			} else if (x == finalX - 1 && y == finalY && (MapRegion.getClipping(x, y, z) & WALL_EAST) == 0) {
    				return true;
    			} else if (x == finalX + 1 && y == finalY && (MapRegion.getClipping(x, y, z) & WALL_WEST) == 0) {
    				return true;
    			}
    		}
    
    		return false;
    	}
    
    	public boolean reachedWall(int finalX, int finalY, int orientation, int type) {
    		System.out.println("type: " + type + " orientation: " + orientation + " finalX: " + finalX + " finalY: " + finalY);
    		if (x == finalX && y == finalY) {
    			return true;
    		}
    		if (type == 0) {
    			if (orientation == Orientation.NORTH) {
    				if (x == finalX - 1 && y == finalY) {
    					return true;
    				} else if (x == finalX && y == finalY + 1 && (MapRegion.getClipping(x, y, z) & 0x1280120) == 0) {
    					return true;
    				} else if (x == finalX && y == finalY - 1 && (MapRegion.getClipping(x, y, z) & 0x1280102) == 0) {
    					return true;
    				}
    			} else if (orientation == Orientation.EAST) {
    				if (x == finalX && y == finalY + 1) {
    					return true;
    				} else if (x == finalX - 1 && y == finalY && (MapRegion.getClipping(x, y, z) & 0x1280108) == 0) {
    					return true;
    				} else if (x == finalX + 1 && y == finalY && (MapRegion.getClipping(x, y, z) & 0x1280180) == 0) {
    					return true;
    				}
    			} else if (orientation == Orientation.SOUTH) {
    				if (x == finalX + 1 && y == finalY) {
    					return true;
    				} else if (x == finalX && y == finalY + 1 && (MapRegion.getClipping(x, y, z) & 0x1280120) == 0) {
    					return true;
    				} else if (x == finalX && y == finalY - 1 && (MapRegion.getClipping(x, y, z) & 0x1280102) == 0) {
    					return true;
    				}
    			} else if (orientation == Orientation.WEST) {
    				if (x == finalX && y == finalY - 1) {
    					return true;
    				} else if (x == finalX - 1 && y == finalY && (MapRegion.getClipping(x, y, z) & 0x1280108) == 0) {
    					return true;
    				} else if (x == finalX + 1 && y == finalY && (MapRegion.getClipping(x, y, z) & 0x1280180) == 0) {
    					return true;
    				}
    			}
    		}
    
    		if (type == 2) {
    			if (orientation == Orientation.NORTH) {
    				if (x == finalX - 1 && y == finalY) {
    					return true;
    				} else if (x == finalX && y == finalY + 1) {
    					return true;
    				} else if (x == finalX + 1 && y == finalY && (MapRegion.getClipping(x, y, z) & 0x1280180) == 0) {
    					return true;
    				} else if (x == finalX && y == finalY - 1 && (MapRegion.getClipping(x, y, z) & 0x1280102) == 0) {
    					return true;
    				}
    			} else if (orientation == Orientation.EAST) {
    				// UNLOADED_TILE | BLOCKED_TILE | UNKNOWN | OBJECT_TILE | WALL_EAST
    				if (x == finalX - 1 && y == finalY && (MapRegion.getClipping(x, y, z) & 0x1280108) == 0) {
    					return true;
    				} else if (x == finalX && y == finalY + 1) {
    					return true;
    				} else if (x == finalX + 1 && y == finalY) {
    					return true;
    				} else if (x == finalX && y == finalY - 1 && (MapRegion.getClipping(x, y, z) & 0x1280102) == 0) {
    					return true;
    				}
    			} else if (orientation == Orientation.SOUTH) {
    				if (x == finalX - 1 && y == finalY && (MapRegion.getClipping(x, y, z) & 0x1280108) == 0) {
    					return true;
    				} else if (x == finalX && y == finalY + 1 && (MapRegion.getClipping(x, y, z) & 0x1280120) == 0) {
    					return true;
    				} else if (x == finalX + 1 && y == finalY) {
    					return true;
    				} else if (x == finalX && y == finalY - 1) {
    					return true;
    				}
    			} else if (orientation == Orientation.WEST) {
    				if (x == finalX - 1 && y == finalY) {
    					return true;
    				} else if (x == finalX && y == finalY + 1 && (MapRegion.getClipping(x, y, z) & 0x1280120) == 0) {
    					return true;
    				} else if (x == finalX + 1 && y == finalY && (MapRegion.getClipping(x, y, z) & 0x1280180) == 0) {
    					return true;
    				} else if (x == finalX && y == finalY - 1) {
    					return true;
    				}
    			}
    		}
    
    		if (type == 9) {
    			if (x == finalX && y == finalY + 1 && (MapRegion.getClipping(x, y, z) & WALL_SOUTH) == 0) {
    				return true;
    			} else if (x == finalX && y == finalY - 1 && (MapRegion.getClipping(x, y, z) & WALL_NORTH) == 0) {
    				return true;
    			} else if (x == finalX - 1 && y == finalY && (MapRegion.getClipping(x, y, z) & WALL_EAST) == 0) {
    				return true;
    			} else if (x == finalX + 1 && y == finalY && (MapRegion.getClipping(x, y, z) & WALL_WEST) == 0) {
    				return true;
    			}
    		}
    
    		return false;
    	}
    
    	public boolean reachedObject(int finalX, int finalY, int height, int surroundings, int width) {
    		int maxX = finalX + width;
    		int maxY = finalY + height;
    		if (x >= finalX && x <= maxX && y >= finalY && y <= maxY) {
    			return true;
    		} else if (x == finalX - 1 && y >= finalY && y <= maxY && (MapRegion.getClipping(x, y, z) & WALL_EAST) == 0
    				&& (surroundings & WALL_EAST) == 0) {
    			return true;
    		} else if (x == maxX + 1 && y >= finalY && y <= maxY && (MapRegion.getClipping(x, y, z) & WALL_WEST) == 0
    				&& (surroundings & WALL_NORTH) == 0) {
    			return true;
    		} else if (y == finalY - 1 && x >= finalX && x <= maxX && (MapRegion.getClipping(x, y, z) & WALL_NORTH) == 0
    				&& (surroundings & WALL_NORTHEAST) == 0) {
    			return true;
    		}
    
    		return y == maxY + 1 && x >= finalX && x <= maxX && (MapRegion.getClipping(x, y, height) & WALL_SOUTH) == 0
    				&& (surroundings & WALL_NORTHWEST) == 0;
    	}
    Last edited by I hate Guns; 06-02-2020 at 09:17 PM.

    Reply With Quote  
     


  2. #2  
    Administrator

    Kevy's Avatar
    Join Date
    Jul 2006
    Posts
    1,233
    Thanks given
    90
    Thanks received
    1,615
    Rep Power
    5000
    Great snippet!
    Thanks, Kevin.
    Reply With Quote  
     

  3. #3  
    Registered Member
    Chivvon's Avatar
    Join Date
    May 2016
    Posts
    450
    Thanks given
    54
    Thanks received
    110
    Rep Power
    174
    Noticed this issue with Elvarg a few days ago, great contribution! Will definitly save me some time
    Reply With Quote  
     

  4. #4  
    Registered Member
    I hate Guns's Avatar
    Join Date
    Mar 2009
    Posts
    7,001
    Thanks given
    2,005
    Thanks received
    2,776
    Rep Power
    5000
    There’s a minor bug in the code, will post updated code when I get home in a few hours.

    Reply With Quote  
     

  5. #5  
    Mug Club


    Join Date
    Jul 2011
    Age
    25
    Posts
    1,843
    Thanks given
    498
    Thanks received
    867
    Rep Power
    288
    These are the kinds of useful snippets that are very appreciated. Tons of low revision servers can benefit from these kinds of checks.
    Reply With Quote  
     

  6. #6  
    Extreme Donator


    Join Date
    Oct 2010
    Posts
    2,856
    Thanks given
    1,199
    Thanks received
    1,615
    Rep Power
    5000
    Nice one! Yeah, pretty sure the one I released was only type 10 objects.
    This is taken directly from the client right?
    [Today 01:29 AM] RSTrials: Nice 0.97 Win/Loss Ratio luke. That's pretty bad.
    [Today 01:30 AM] Luke132: Ok u fucking moron i forgot i could influence misc.random
    Reply With Quote  
     

  7. #7  


    Scythe's Avatar
    Join Date
    Apr 2019
    Posts
    210
    Thanks given
    38
    Thanks received
    53
    Rep Power
    571
    wow? someone posted something half-useful?
    Good job jack.




    [Only registered and activated users can see links. ]
    Reply With Quote  
     

  8. #8  
    Registered Member
    I hate Guns's Avatar
    Join Date
    Mar 2009
    Posts
    7,001
    Thanks given
    2,005
    Thanks received
    2,776
    Rep Power
    5000
    Quote Originally Posted by Professor Oak View Post
    Nice one! Yeah, pretty sure the one I released was only type 10 objects.
    This is taken directly from the client right?
    Yeah straight out of the client

    edit, updated version, this should function 100%, updated the OP as well.
    Code:
    	public boolean isWithinDistance(GameObject object) {
    		int type = object.getType();
    		int rotation = object.getRotation();
    		if (type == 10 || type == 11 || type == 22) {
    			int width;
    			int height;
    			if (rotation == 0 || rotation == 2) {
    				width = object.getDefinition().getWidth();
    				height = object.getDefinition().getLength();
    			} else {
    				width = object.getDefinition().getLength();
    				height = object.getDefinition().getWidth();
    			}
    			int surroundings = object.getDefinition().getSurroundings();
    			if (rotation != 0) {
    				surroundings = (surroundings << rotation & 0xf) + (surroundings >> 4 - rotation);
    			}
    			return isWithinDistance(object, width, height, 0, 0, surroundings);
    		}
    		return isWithinDistance(object, 0, 0, type + 1, rotation, 0);
    	}
    
    	public boolean isWithinDistance(GameObject object, int width, int height, int type, int rotation, int surroundings) {
    		if (type != 0) {
    			if ((type <= 5 || type == 10) && reachedWall(object.getPosition().getX(), object.getPosition().getY(), rotation, type - 1)) {
    				return true;
    			}
    			if (type < 10 && reachedDecoration(object.getPosition().getX(), object.getPosition().getY(), type - 1, rotation)) {
    				return true;
    			}
    		}
    		if (width != 0 && height != 0) {
    			return reachedObject(object.getPosition().getX(), object.getPosition().getY(), height, surroundings, width);
    		}
    		return false;
    	}
    
    	private static final int WALL_EAST = 0x8;
    	private static final int WALL_NORTH = 0x2;
    	private static final int WALL_NORTHEAST = 0x4;
    	private static final int WALL_NORTHWEST = 0x1;
    	private static final int WALL_SOUTH = 0x20;
    	private static final int WALL_SOUTHEAST = 0x10;
    	private static final int WALL_SOUTHWEST = 0x40;
    	private static final int WALL_WEST = 0x80;
    
    	private class Orientation {
    		public static final int NORTH = 0;
    		public static final int EAST = 1;
    		public static final int SOUTH = 2;
    		public static final int WEST = 3;
    	}
    
    	public boolean reachedDecoration(int finalX, int finalY, int type, int orientation) {
    		if (x == finalX && y == finalY) {
    			return true;
    		}
    		if (type == 6 || type == 7) {
    			if (type == 7) {
    				orientation = orientation + 2 & 3;
    			}
    
    			if (orientation == Orientation.NORTH) {
    				if (x == finalX + 1 && y == finalY && (MapRegion.getClipping(x, y, z) & WALL_WEST) == 0) {
    					return true;
    				} else if (x == finalX && y == finalY - 1 && (MapRegion.getClipping(x, y, z) & WALL_NORTH) == 0) {
    					return true;
    				}
    			} else if (orientation == Orientation.EAST) {
    				if (x == finalX - 1 && y == finalY && (MapRegion.getClipping(x, y, z) & WALL_EAST) == 0) {
    					return true;
    				} else if (x == finalX && y == finalY - 1 && (MapRegion.getClipping(x, y, z) & WALL_NORTH) == 0) {
    					return true;
    				}
    			} else if (orientation == Orientation.SOUTH) {
    				if (x == finalX - 1 && y == finalY && (MapRegion.getClipping(x, y, z) & WALL_EAST) == 0) {
    					return true;
    				} else if (x == finalX && y == finalY + 1 && (MapRegion.getClipping(x, y, z) & WALL_SOUTH) == 0) {
    					return true;
    				}
    			} else if (orientation == Orientation.WEST) {
    				if (x == finalX + 1 && y == finalY && (MapRegion.getClipping(x, y, z) & WALL_WEST) == 0) {
    					return true;
    				} else if (x == finalX && y == finalY + 1 && (MapRegion.getClipping(x, y, z) & WALL_SOUTH) == 0) {
    					return true;
    				}
    			}
    		}
    
    		if (type == 8) {
    			if (x == finalX && y == finalY + 1 && (MapRegion.getClipping(x, y, z) & WALL_SOUTH) == 0) {
    				return true;
    			} else if (x == finalX && y == finalY - 1 && (MapRegion.getClipping(x, y, z) & WALL_NORTH) == 0) {
    				return true;
    			} else if (x == finalX - 1 && y == finalY && (MapRegion.getClipping(x, y, z) & WALL_EAST) == 0) {
    				return true;
    			} else if (x == finalX + 1 && y == finalY && (MapRegion.getClipping(x, y, z) & WALL_WEST) == 0) {
    				return true;
    			}
    		}
    
    		return false;
    	}
    
    	public boolean reachedWall(int finalX, int finalY, int orientation, int type) {
    		System.out.println("type: " + type + " orientation: " + orientation + " finalX: " + finalX + " finalY: " + finalY);
    		if (x == finalX && y == finalY) {
    			return true;
    		}
    		if (type == 0) {
    			if (orientation == Orientation.NORTH) {
    				if (x == finalX - 1 && y == finalY) {
    					return true;
    				} else if (x == finalX && y == finalY + 1 && (MapRegion.getClipping(x, y, z) & 0x1280120) == 0) {
    					return true;
    				} else if (x == finalX && y == finalY - 1 && (MapRegion.getClipping(x, y, z) & 0x1280102) == 0) {
    					return true;
    				}
    			} else if (orientation == Orientation.EAST) {
    				if (x == finalX && y == finalY + 1) {
    					return true;
    				} else if (x == finalX - 1 && y == finalY && (MapRegion.getClipping(x, y, z) & 0x1280108) == 0) {
    					return true;
    				} else if (x == finalX + 1 && y == finalY && (MapRegion.getClipping(x, y, z) & 0x1280180) == 0) {
    					return true;
    				}
    			} else if (orientation == Orientation.SOUTH) {
    				if (x == finalX + 1 && y == finalY) {
    					return true;
    				} else if (x == finalX && y == finalY + 1 && (MapRegion.getClipping(x, y, z) & 0x1280120) == 0) {
    					return true;
    				} else if (x == finalX && y == finalY - 1 && (MapRegion.getClipping(x, y, z) & 0x1280102) == 0) {
    					return true;
    				}
    			} else if (orientation == Orientation.WEST) {
    				if (x == finalX && y == finalY - 1) {
    					return true;
    				} else if (x == finalX - 1 && y == finalY && (MapRegion.getClipping(x, y, z) & 0x1280108) == 0) {
    					return true;
    				} else if (x == finalX + 1 && y == finalY && (MapRegion.getClipping(x, y, z) & 0x1280180) == 0) {
    					return true;
    				}
    			}
    		}
    
    		if (type == 2) {
    			if (orientation == Orientation.NORTH) {
    				if (x == finalX - 1 && y == finalY) {
    					return true;
    				} else if (x == finalX && y == finalY + 1) {
    					return true;
    				} else if (x == finalX + 1 && y == finalY && (MapRegion.getClipping(x, y, z) & 0x1280180) == 0) {
    					return true;
    				} else if (x == finalX && y == finalY - 1 && (MapRegion.getClipping(x, y, z) & 0x1280102) == 0) {
    					return true;
    				}
    			} else if (orientation == Orientation.EAST) {
    				// UNLOADED_TILE | BLOCKED_TILE | UNKNOWN | OBJECT_TILE | WALL_EAST
    				if (x == finalX - 1 && y == finalY && (MapRegion.getClipping(x, y, z) & 0x1280108) == 0) {
    					return true;
    				} else if (x == finalX && y == finalY + 1) {
    					return true;
    				} else if (x == finalX + 1 && y == finalY) {
    					return true;
    				} else if (x == finalX && y == finalY - 1 && (MapRegion.getClipping(x, y, z) & 0x1280102) == 0) {
    					return true;
    				}
    			} else if (orientation == Orientation.SOUTH) {
    				if (x == finalX - 1 && y == finalY && (MapRegion.getClipping(x, y, z) & 0x1280108) == 0) {
    					return true;
    				} else if (x == finalX && y == finalY + 1 && (MapRegion.getClipping(x, y, z) & 0x1280120) == 0) {
    					return true;
    				} else if (x == finalX + 1 && y == finalY) {
    					return true;
    				} else if (x == finalX && y == finalY - 1) {
    					return true;
    				}
    			} else if (orientation == Orientation.WEST) {
    				if (x == finalX - 1 && y == finalY) {
    					return true;
    				} else if (x == finalX && y == finalY + 1 && (MapRegion.getClipping(x, y, z) & 0x1280120) == 0) {
    					return true;
    				} else if (x == finalX + 1 && y == finalY && (MapRegion.getClipping(x, y, z) & 0x1280180) == 0) {
    					return true;
    				} else if (x == finalX && y == finalY - 1) {
    					return true;
    				}
    			}
    		}
    
    		if (type == 9) {
    			if (x == finalX && y == finalY + 1 && (MapRegion.getClipping(x, y, z) & WALL_SOUTH) == 0) {
    				return true;
    			} else if (x == finalX && y == finalY - 1 && (MapRegion.getClipping(x, y, z) & WALL_NORTH) == 0) {
    				return true;
    			} else if (x == finalX - 1 && y == finalY && (MapRegion.getClipping(x, y, z) & WALL_EAST) == 0) {
    				return true;
    			} else if (x == finalX + 1 && y == finalY && (MapRegion.getClipping(x, y, z) & WALL_WEST) == 0) {
    				return true;
    			}
    		}
    
    		return false;
    	}
    
    	public boolean reachedObject(int finalX, int finalY, int height, int surroundings, int width) {
    		int maxX = finalX + width;
    		int maxY = finalY + height;
    		if (x >= finalX && x <= maxX && y >= finalY && y <= maxY) {
    			return true;
    		} else if (x == finalX - 1 && y >= finalY && y <= maxY && (MapRegion.getClipping(x, y, z) & WALL_EAST) == 0
    				&& (surroundings & WALL_EAST) == 0) {
    			return true;
    		} else if (x == maxX + 1 && y >= finalY && y <= maxY && (MapRegion.getClipping(x, y, z) & WALL_WEST) == 0
    				&& (surroundings & WALL_NORTH) == 0) {
    			return true;
    		} else if (y == finalY - 1 && x >= finalX && x <= maxX && (MapRegion.getClipping(x, y, z) & WALL_NORTH) == 0
    				&& (surroundings & WALL_NORTHEAST) == 0) {
    			return true;
    		}
    
    		return y == maxY + 1 && x >= finalX && x <= maxX && (MapRegion.getClipping(x, y, height) & WALL_SOUTH) == 0
    				&& (surroundings & WALL_NORTHWEST) == 0;
    	}
    Last edited by I hate Guns; 06-02-2020 at 09:17 PM.

    Reply With Quote  
     

  9. Thankful user:



Thread Information
Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)


User Tag List

Similar Threads

  1. [PI]Object distance check
    By Luukwa in forum Help
    Replies: 6
    Last Post: 09-01-2014, 07:33 PM
  2. [PI]Stop useless object distance check
    By Aleksandr in forum Snippets
    Replies: 21
    Last Post: 04-11-2013, 12:41 AM
  3. Object Distance checks
    By Nando in forum Tutorials
    Replies: 34
    Last Post: 03-21-2013, 10:27 AM
  4. [PI] Basic Use Item on Object Distance Check
    By Aleksandr in forum Snippets
    Replies: 1
    Last Post: 09-18-2011, 12:56 AM
  5. PI Object Distance
    By Jason in forum Help
    Replies: 3
    Last Post: 05-22-2011, 05:18 AM
Posting Permissions
  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •