phudbase/
phudbase/client/
phudbase/client/css/
phudbase/client/images/colorbox/CVS/
phudbase/client/js/
phudbase/server/
phudbase/server/includes/actions/
phudbase/server/includes/classes/
phudbase/server/includes/classes/GameObjects/
<?php
class Room extends GameObject
{		
	private $characters; // Array of Character objects //
		
	private $x;
	private $y;
	
	private $mapColor;
	private $mapImage;
	
	function __construct($eid, $name, $desc, $x, $y)
	{		
		parent::__construct($eid, $name, $desc, GO_TYPE_ROOM);
				
		$this->x = $x;
		$this->y = $y;
		
		$this->loadToCache();		
	}	
	
	function loadToCache()
	{
		setRoomMem($this);
	}
	
	// Overrides parent::getDescription so we can include the characters (a dynamic list) //
	function getDescription($cEID=0)
	{
		if ($this->getPlayerList($cEID) != "")
			$c_desc =  " Looking around, you see {$this->getPlayerList($cEID)}.";
		
		return parent::getDescription() . $c_desc;	
	}
	
	function addCharacter($char)
	{
		if (!is_array($this->characters)) $this->characters = array();
		
		$this->characters[$char->getEID()] = $char->getEID();
		$this->loadToCache();
	}
	
	function removeCharacter($char)
	{
		unset($this->characters[$char->getEID()]);
		$this->loadToCache();
	}
	
	function getCharacters()
	{
		$i = array();
		
		foreach($this->characters as $key => $eid)
		{
			$i[$key] = getCharMem($eid);
		}
		
		return $i;
		
	}
			
	function getPlayerList($entityID)
	{	
		// Get the latest "version" of each character standing here //
		// Grabs from cache to account for status changes, etc. //
		
		$pArray = $this->getCharacters();
		
		$pList = "";		
		foreach ($pArray as $key => $player)
		{
			if ($player->getEID() != $entityID)
			{				
				$pList .= "{$player->getName()}, ";
			}
		}
		
		if ($pList != "")
		{
			$pList = rtrim($pList, ", ");
			$pList = "<font color=#ffffff>$pList</font>";
		}		

		return $pList;
	}

	function getPlayerListTable($pEID)
	{
		$pArray = $this->getCharacters();
	
		if (count($pArray)-1 == 0) return "&nbsp;";
		
		$first = true;
		
		foreach ($pArray as $key => $player)
		{			
			if ($player->getEID() != $pEID) // If it's not the player looking at the room //
			{				
				if (!$first) $border = 'border-top: 1px solid #fff;';
				else $border = 'border: 0xp;';
								
				$pTable .= "<div style='align: left; margin: 5px 3px;'>"
						 . "<a href='javascript:void(0);' onmouseover='expandHeight(&quot;$key&quot;);' onmouseout='shrinkHeight(&quot;$key&quot;);'>"
						 . $dir . ucfirst($player->getName()) 
						 . "</a><br>"
						 . "<div id='$key' style='position: absolute; width: 0; padding-top: 3px; visibility: hidden; overflow: hidden;'>"
						 . $player->getDescription() . "</font></i></div></div>";				
			}
		}	
	
		return $pTable;
	}	

	function getX()
	{
		return $this->x;	
	}
	
	function getY()
	{
		return $this->y;	
	}
	
	function getMapColor()
	{
		return $this->mapColor;
	}
	
	function getMapImageFilename()
	{
		return $this->mapImage;
	}	

	// ****** Communication Features ****** //
	
	// Send a message to all players in or watching the room (via socket connection) //
	function send($message, $mType, $except=0)
	{
		$cList = $this->getCharacters();
		
		foreach ($cList as $key => $char)
		{			
			try {
				if ($except == 0 || $char->getEID() != $except)
					$char->send($message, $mType);
			} catch (Exception $e)	
			{ 
				echo "Failed to send to char [$key]: {$e->getMessage()}";
			}
			
		}		
	}
}

?>