Memory Posted August 13, 2013 Posted August 13, 2013 Здравствуйте, сижу уже пол ночи, нашёл код, но мне многое там непонятно, например эти символы "list($name,$Points,$ping) = split("||||",$player);". Не могли бы мне объяснить что к чему и упорядочить. Также пытался получить Point (вместо score, который там стоял по умолчанию), и убрать повторение названия карты. Ещё всё начилось с установки php SDK (https://forum.multitheftauto.com/viewtopic.php?f=148&t=38344), в первых двух частях разобрался, всё работает, а вот с третьей никак (Example 1: Use PHP/MYSQL), особенно непонятно по поводу CREATE TABLE... Найденный код <? function format_player($player) { $player = htmlentities(substr($player,1)); list($name,$Points,$ping) = split("||||",$player); $colors = array("yy"=>"#FF0000"); foreach($colors as $key => $val) { $name = ereg_replace($key,"</font><font color=\"$val\">",$name); } $player = array("Points"=>$Points,"name"=>$name,"ping"=>$ping); return $player; } $fp = @fsockopen("udp://ip сервера", порт); if(!$fp) { die("No Response"); } else { fwrite($fp,"s"); $data = fread($fp,4096); $data = preg_replace("/{5}\??|\?/","/////",$data); $data = explode("/////",$data); $raw = preg_replace("/^EYE1??(gta3)?mta\" . $server['port'] . "||||/","/////",$data[0]); list($null,$server['name'],$server['version'],$null,$server['current'],$server['max']) = explode("/////",$raw); $server['players'] = array_slice($data,1); } echo "<pre>"; print_r($server); echo "\n\nActual Player Output:\n"; for($i=0;$i<$server['current'];$i++) { $temp = format_player($server['players'][$i]); print_r($temp); echo "\n"; } echo "</pre>"; ?> Как отображается http://s2.ipicture.ru/uploads/20130814/DFOtb32a.png P.S. Очень хочу разобраться во всём этом и повысить уровень своих знаний в области программирования, перечитал кучу всего, так что помогите, пожалуйста. Ingame name: [sV]Kostya Name in scripts: Kostya
Flaker Posted August 13, 2013 Posted August 13, 2013 "list($name,$Points,$ping) = split("||||",$player);" Функция split делит строку на подстроки по указанному разделителю ( в данном случае разделитель это "||||" ). Возвращает массив из этих подстрок. Функция list последовательно присваивает своим аргументам значения массива, который идет после знака "=". Идиотский туториал... Что ты вообще пытаешься сделать?
Memory Posted August 14, 2013 Author Posted August 14, 2013 Для начала хотел что-нибудь получить с сервера и отобразить это на странице php. С php SDK не получается (я уже писал выше), решил так поискать находил ещё кучу рабочих кодов, где получают название карты и т.п., но везде без описаний. Например код от MX_Master'а. $MAP_NAME = 'Unknown'; $mtasa_ip = '127.0.0.1'; // какой хотите поставьте $mtasa_port = 22003; $mtasa_pre = 'EYE1'; $mtasa_fp = fsockopen( "udp://{$mtasa_ip}", (string) ($mtasa_port+123), $mtasa_errno, $mtasa_errstr, 3 ); if ( $mtasa_fp !== FALSE ) { fwrite( $mtasa_fp, 's' ); $mtasa_packet = fread( $mtasa_fp, 16384 ); fclose($mtasa_fp); if ( substr( $mtasa_packet, 0, 4 ) == $mtasa_pre ) { $mtasa = array(); $pos = 4; $len = ord( substr( $mtasa_packet, $pos, 1 ) ) - 1; $mtasa['gameShortName'] = substr( $mtasa_packet, ++$pos, $len ); $pos += $len; $len = ord( substr( $mtasa_packet, $pos, 1 ) ) - 1; $mtasa['serverPort'] = substr( $mtasa_packet, ++$pos, $len ); $pos += $len; $len = ord( substr( $mtasa_packet, $pos, 1 ) ) - 1; $mtasa['serverName'] = substr( $mtasa_packet, ++$pos, $len ); $pos += $len; $len = ord( substr( $mtasa_packet, $pos, 1 ) ) - 1; $mtasa['gameModeName'] = substr( $mtasa_packet, ++$pos, $len ); $pos += $len; $len = ord( substr( $mtasa_packet, $pos, 1 ) ) - 1; $mtasa['mapName'] = substr( $mtasa_packet, ++$pos, $len ); $MAP_NAME = $mtasa['mapName']; // ... } } Ну дописываешь echo {$MAP_NAME} и работает. Написал $mtasa['players'] выводит игроков, а где всё посмотреть, что можно вывести Ingame name: [sV]Kostya Name in scripts: Kostya
Kernell Posted August 14, 2013 Posted August 14, 2013 Попробуй мой... <?php class CSocketMTA { function CSocketMTA( $IP, $PORT = 22003 ) { if( $socket = fsockopen( "udp://$IP", $PORT + 123, $errno, $errstr ) ) { stream_set_timeout( $socket, 1, 0 ); fwrite( $socket, "s" ); $data = fread( $socket, 16384 ); fclose( $socket ); if( substr( $data, 0, 4 ) == "EYE1" ) { $data = substr( $data, 4 ); for( $i = 0; $data != ""; $i++ ) { if( substr( $data, 0, 2 ) == chr( 1 ) . "?" ) $data = substr( $data, 2 ); $l = ord( substr( $data, 0, 1 ) ); $buffer[ $i ] = substr( $data, 1, $l - 1 ); $data = substr( $data, $l ); } $this->gameshort = $buffer[ 0 ]; $this->port = $buffer[ 1 ]; $this->name = $buffer[ 2 ]; $this->rules[ 'game' ] = $buffer[ 3 ]; $this->map = $buffer[ 4 ]; $this->rules[ 'version' ] = $buffer[ 5 ]; $this->public = $buffer[ 6 ] != "0"; $this->players = $buffer[ 7 ]; $this->maxplayers = $buffer[ 8 ]; $j = 0; for( $i = 11; $i < sizeof( $buffer ) - 2; $i += 5 ) { $this->player[ $j ]->name = $buffer[ $i ]; $this->player[ $j ]->score = $buffer[ $i + 3 ]; $this->player[ $j ]->time = 0; $j++; } } else echo "Data is invalid\n"; } else echo "Can not open socket $IP:$PORT - $errstr\n"; } }; Пример использования: <?php $MTA = new CSocketMTA( "79.174.71.100", 22003 ); echo "CSocketMTA::port = $MTA->port\n"; echo "CSocketMTA::name = $MTA->name\n"; print_r( $MTA ); // или если вывести всё // а вобще члены описаны с 31 строки.. Не оказываю поддержку посредством личных сообщений, ICQ, ВК и тому подобное. Все вопросы задавайте на форуме.
Flaker Posted August 14, 2013 Posted August 14, 2013 Можешь сам установить, что будет видно: https://wiki.multitheftauto.com/wiki/SetPlayerAnnounceValue
Memory Posted August 14, 2013 Author Posted August 14, 2013 Большое спасибо, можно ещё узнать как получить имена игроков из массива. Пробовал через foreach, не выходит. Ingame name: [sV]Kostya Name in scripts: Kostya
Kernell Posted August 14, 2013 Posted August 14, 2013 А мы должны сами догадываться как ты пробовал? Код в студию Не оказываю поддержку посредством личных сообщений, ICQ, ВК и тому подобное. Все вопросы задавайте на форуме.
Memory Posted August 16, 2013 Author Posted August 16, 2013 Всё, разобрался, ещё раз спасибо за код Ingame name: [sV]Kostya Name in scripts: Kostya
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now