Ejemplo n.º 1
0
 /**
  * Packet received when the player try to walk/move
  * 
  * Directions:
  * 	0x00 - North
  * 	0x01 - Northeast
  * 	0x02 - East
  * 	0x03 - Southeast
  * 	0x04 - South
  * 	0x05 - Southwest
  * 	0x06 - West
  * 	0x07 - Northwest
  */
 public static function packet_0x02($data, $client)
 {
     $command = Functions::strToHex(Functions::hexToChr($data, 0, 0, true));
     $direction = Functions::strToHex(Functions::hexToChr($data, 1, 1, true));
     $sequence_number = Functions::strToHex(Functions::hexToChr($data, 2, 2, true));
     $fastwalk_prevention = Functions::strToHex(Functions::hexToChr($data, 3, 6, true));
     UltimaPHP::$socketClients[$client]['account']->player->movePlayer(false, $direction, $sequence_number, $fastwalk_prevention);
 }
Ejemplo n.º 2
0
 /**
  * Send the account characters list to the client
  */
 public function sendCharacterList($runInLot = false)
 {
     $characters = $this->characters;
     $startingLocations = UltimaPHP::$starting_locations;
     $tmpPacket = "05";
     for ($i = 0; $i < 5; $i++) {
         $tmpPacket .= str_pad(isset($characters[$i]) ? Functions::strToHex($characters[$i]['name']) : 0, 120, "0", STR_PAD_RIGHT);
     }
     $tmpPacket .= str_pad(dechex(count($startingLocations)), 2, "0", STR_PAD_LEFT);
     foreach ($startingLocations as $key => $location) {
         // If Client version is bigger then 7.0.13.0
         if (isset(UltimaPHP::$socketClients[$this->client]['version']) && UltimaPHP::$socketClients[$this->client]['version']['major'] >= 7 && UltimaPHP::$socketClients[$this->client]['version']['minor'] >= 0 && UltimaPHP::$socketClients[$this->client]['version']['revision'] >= 13 && UltimaPHP::$socketClients[$this->client]['version']['prototype'] >= 0) {
             $tmpPacket .= str_pad(dechex($key + 1), 2, "0", STR_PAD_LEFT);
             $tmpPacket .= str_pad(Functions::strToHex($location['name']), 64, "0", STR_PAD_RIGHT);
             $tmpPacket .= str_pad(Functions::strToHex($location['area']), 64, "0", STR_PAD_RIGHT);
             $tmpPacket .= str_pad(strtoupper(dechex($location['position']['x'])), 8, "0", STR_PAD_LEFT);
             $tmpPacket .= str_pad(strtoupper(dechex($location['position']['y'])), 8, "0", STR_PAD_LEFT);
             $tmpPacket .= str_pad(strtoupper(dechex($location['position']['z'])), 8, "0", STR_PAD_LEFT);
             $tmpPacket .= str_pad(strtoupper(dechex($location['position']['map'])), 8, "0", STR_PAD_LEFT);
             $tmpPacket .= str_pad(strtoupper(dechex($location['clioc'])), 8, "0", STR_PAD_LEFT);
             $tmpPacket .= str_pad("", 8, "0", STR_PAD_RIGHT);
         } else {
             $tmpPacket .= str_pad(dechex($key + 1), 2, "0", STR_PAD_LEFT);
             $tmpPacket .= str_pad(Functions::strToHex($location['name']), 62, "0", STR_PAD_RIGHT);
             $tmpPacket .= str_pad(Functions::strToHex($location['area']), 62, "0", STR_PAD_RIGHT);
         }
     }
     $flags = "0580";
     $tmpPacket .= str_pad($flags, 8, "0", STR_PAD_LEFT);
     $tmpPacket .= "0000";
     $packet = "A9";
     $packet .= str_pad(dechex(ceil(strlen($tmpPacket) / 2) + 3), 4, "0", STR_PAD_LEFT);
     $packet .= $tmpPacket;
     Sockets::out($this->client, $packet, $runInLot);
 }
Ejemplo n.º 3
0
 /**
  * Update the status bar information on the client
  */
 public function statusBarInfo($runInLot = false)
 {
     $packet = "11";
     $packet .= "005B";
     $packet .= str_pad($this->serial, 8, "0", STR_PAD_LEFT);
     $packet .= str_pad(Functions::strToHex($this->name), 60, "0", STR_PAD_RIGHT);
     $packet .= str_pad(dechex($this->hits), 4, "0", STR_PAD_LEFT);
     $packet .= str_pad(dechex($this->maxhits), 4, "0", STR_PAD_LEFT);
     $packet .= "00";
     $packet .= "05";
     $packet .= str_pad(dechex($this->sex), 2, "0", STR_PAD_LEFT);
     $packet .= str_pad(dechex($this->str), 4, "0", STR_PAD_LEFT);
     $packet .= str_pad(dechex($this->dex), 4, "0", STR_PAD_LEFT);
     $packet .= str_pad(dechex($this->int), 4, "0", STR_PAD_LEFT);
     $packet .= str_pad(dechex($this->stam), 4, "0", STR_PAD_LEFT);
     $packet .= str_pad(dechex($this->maxstam), 4, "0", STR_PAD_LEFT);
     $packet .= str_pad(dechex($this->mana), 4, "0", STR_PAD_LEFT);
     $packet .= str_pad(dechex($this->maxmana), 4, "0", STR_PAD_LEFT);
     $packet .= str_pad(dechex(5000), 8, "0", STR_PAD_LEFT);
     $packet .= "0000";
     $packet .= str_pad("6", 4, "0", STR_PAD_LEFT);
     $packet .= str_pad(dechex(400), 4, "0", STR_PAD_LEFT);
     $packet .= str_pad(dechex($this->race), 2, "0", STR_PAD_LEFT);
     if ($this->statscap > 0) {
         $packet .= str_pad(dechex($this->statscap), 4, "0", STR_PAD_LEFT);
     } else {
         $packet .= "0000";
     }
     $packet .= str_pad(dechex($this->pets), 2, "0", STR_PAD_LEFT);
     $packet .= str_pad(dechex($this->maxpets), 2, "0", STR_PAD_LEFT);
     $packet .= str_pad(dechex($this->resist_fire), 4, "0", STR_PAD_LEFT);
     $packet .= str_pad(dechex($this->resist_cold), 4, "0", STR_PAD_LEFT);
     $packet .= str_pad(dechex($this->resist_poison), 4, "0", STR_PAD_LEFT);
     $packet .= str_pad(dechex($this->resist_energy), 4, "0", STR_PAD_LEFT);
     $packet .= str_pad(dechex($this->luck), 4, "0", STR_PAD_LEFT);
     $packet .= str_pad(dechex($this->damage_min), 4, "0", STR_PAD_LEFT);
     $packet .= str_pad(dechex($this->damage_max), 4, "0", STR_PAD_LEFT);
     $packet .= "00000000";
     Sockets::out($this->client, $packet, $runInLot);
 }
Ejemplo n.º 4
0
 public static function readStaticsFromPosition($map, $pos_x, $pos_y)
 {
     $staticIdx = fopen(UltimaPHP::$conf['muls']['location'] . "statics{$map}.mul", 'rb');
     $staticMul = fopen(UltimaPHP::$conf['muls']['location'] . "staidx{$map}.mul", 'rb');
     $updateRange = array('from' => array('x' => $pos_x - 10, 'y' => $pos_y - 10), 'to' => array('x' => $pos_x + 10, 'y' => $pos_y + 10));
     for ($x = $updateRange['from']['x']; $x < $updateRange['to']['x']; $x++) {
         for ($y = $updateRange['from']['y']; $y < $updateRange['to']['y']; $y++) {
             $index = ($x * self::$maps[$map]['size']['y'] + $y) * 12;
             fseek($staticIdx, $index, SEEK_SET);
             $lookup = (int) Functions::strToHex(fread($staticIdx, 4));
             $length = (int) Functions::strToHex(fread($staticIdx, 4));
             // $lookup = Functions::read_byte($staticIdx, 4);
             // $length = Functions::read_byte($staticIdx, 4);
             echo "{$lookup}|{$length}\n";
             if ($length > 0 && $lookup > 0) {
                 echo "{$lookup}|{$length}\n";
                 // fseek($staticMul, $lookup, SEEK_SET);
                 // for ($i=0; $i < ($length/7); $i++) {
                 // 	$tileId = Functions::read_byte($staticMul, 2);
                 // 	$x = Functions::read_byte($staticMul, 1);
                 // 	$y = Functions::read_byte($staticMul, 1);
                 // 	$z = Functions::read_byte($staticMul, 1);
                 // 	$hue = Functions::read_byte($staticMul, 2);
                 // 	if ($tileId >= 0) {
                 // 		if ($hue < 0) {
                 // 			$hue = 0;
                 // 		}
                 // 		if ($tileId > 0) {
                 // 			echo "$tileId|$x|$y|$z|$hue\n";
                 // 		}
                 // 	}
                 // }
             }
         }
     }
     exit;
     $data = bin2hex(fread($staticMul, $length));
     echo "\n\n\nFIM\n\n\n";
     exit;
 }
Ejemplo n.º 5
0
 /**
  * Outgoing packet handler
  */
 public static function out($client, $packet, $lot = array(), $dontConvert = false, $dontCompress = false)
 {
     $err = null;
     if (false === $dontCompress && isset(UltimaPHP::$socketClients[$client]['compressed']) && true === UltimaPHP::$socketClients[$client]['compressed']) {
         $compression = new Compression();
         $packet = unpack('H*', $compression->compress(strtoupper($packet)))[1];
     }
     if (false === $dontConvert) {
         $packet = Functions::hexToChr($packet);
     } else {
         $packet = $packet;
     }
     if (is_array($lot) && count($lot) == 2 && isset($lot[0]) && isset($lot[1]) && true === $lot[0] && $lot[1] === false) {
         UltimaPHP::$socketClients[$client]['packetLot'] .= $packet;
         $packet = null;
     } else {
         if (is_array($lot) && count($lot) == 2 && isset($lot[0]) && isset($lot[1]) && true === $lot[0] && $lot[1] === true) {
             $packet = UltimaPHP::$socketClients[$client]['packetLot'] . $packet;
             UltimaPHP::$socketClients[$client]['packetLot'] = null;
         }
     }
     if ($packet !== null) {
         if (true === UltimaPHP::$conf['logs']['debug']) {
             echo "Sending packet: " . Functions::strToHex($packet) . "\n\n";
         }
         UltimaPHP::$socketClients[$client]['packets'][] = array('packet' => $packet, 'time' => microtime(true) + 0.001);
     }
 }