DakiLLa Posted April 8, 2011 Posted April 8, 2011 Не совсем относится к луа, но к мта точно. В общем решил поставить на сайт простой пхп скрипт, который выводит имя текущей карты. Собственно, код пхп: include( "mta_sdk.php" );$mtaServer = new mta( $s_ip, $s_port ); //$s_ip и $s_port объявлены выше (айпишник и порт)$retn_m = $mtaServer -> getResource( "myResource" ) -> call( "getCurrentMap" ); echo "Текущая карта: ".$retn_m[ 0 ]; Моя функция 'getCurrentMap': function getCurrentMap() return getMapName(); end; Все прекрасно выводится на страничку, проблем нет. Но одна загвоздка: если часто обновлять страницу, либо к странице обращаются несколько человек, вместо названия карты вылетает ошибка: Notice: Undefined offset: 1 in mta_sdk.php on line 182 Notice: Undefined offset: 1 in mta_sdk.php on line 185 Не буду описывать, что находится в тех злополучных строках, скрипт mta_sdk без труда можно достать с мта вики. Ну и после некоторого времени, если обновить страничку, все работает так, как надо. Но если опять начать часто обновлять страницу, появляется все то, что описал выше. Сломал себе голову. Пробовал вместо include писать include_once и require_once - не помогло. Кто встречался с такой проблемой, подскажите решение.
LoveFist Posted April 8, 2011 Posted April 8, 2011 Незнаю в чем проблема, но можно сделать все немного проще и надежнее. Зачем каждый раз при загрузке страницы спрашивать у сервера название карты? При загрузке карты отправляй на сайт её название (в текстовый файл, бд), а потом при загрузке страницы бери название из файла.
MX_Master Posted April 8, 2011 Posted April 8, 2011 название карты можно прекрасно и 100%тно получить без PHP SDK $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']; // ... } } topcnc.ru # vydrenko.ru
DakiLLa Posted April 8, 2011 Author Posted April 8, 2011 MX_Master Насколько я понял, чтобы вызвать какую-то функцию из Lua, ваш код уже не подойдет?
MX_Master Posted April 9, 2011 Posted April 9, 2011 этот код может узнать только анонс данные сервера, и этим он хорош ну а для для каждого дела свой инструмент (: тут речь шла про имя карты.. topcnc.ru # vydrenko.ru
DakiLLa Posted April 9, 2011 Author Posted April 9, 2011 тут речь шла про имя карты.. Мм, моя оплошность. Вкупе с именем карты по тому примеру, который я указал в первом посте, я так же вызываю несколько lua - функций, почему как бы сразу и начал использовать mta_sdk.
lil Toady Posted April 9, 2011 Posted April 9, 2011 Честн не знаю почему php_sdk так работает, то мест того чтобы вызывать несколько функций удалённо, лучше и намного быстрее будет создать html страницу на сервере которая будет показывать всю инфу которая тебе нужна, и отображать её на твоем сайте через аякс или айфреймы. Do not PM me, im not going to read it anyway.
DakiLLa Posted April 18, 2011 Author Posted April 18, 2011 to MX_Master Можешь, пожалуйста, рассказать, как на твоем сайте реализован блок мониторинга сервера? Тоже через php_sdk или через что-то другое? Я сделал точь в точь такой же блок, как у тебя (выводит ники, пинг и проч.), но его пришлось выпилить из-за того, что вот ошибки спамит.
MX_Master Posted April 19, 2011 Posted April 19, 2011 Я просто знаю порядок данных, составляющих UDP ответ на UDP запрос "s" серверу. Как показано выше в моем коде, идет просто сохранение этих данных и одновременный разбор последующих. Такой код, обычно, называется MTA:SA Server Query и его можно найти в разных местах инета, допустим здесь topcnc.ru # vydrenko.ru
DakiLLa Posted April 19, 2011 Author Posted April 19, 2011 Хмм, по-моему, это совершенно то, что я искал. Спасибо, буду вникать.
MX_Master Posted April 19, 2011 Posted April 19, 2011 У меня, канеш, чуток другой вид, т.к. я сам катал свой РНР скрипт, но в целом результат один. В случае, если нужного ответа от сокета нет, можно показывать какое-то сообщение, типа "Мониторинг недоступен" или "Сервер сейчас недоступен". У меня и серв и веб серв на одной тачке стоят, поэтому этот запрос я на себя же и делаю (127.0.0.1) topcnc.ru # vydrenko.ru
Moderators Disinterpreter Posted April 28, 2011 Moderators Posted April 28, 2011 Все понятно стало Developers, Developers, Developers, Developers.... © Steve Balmer http://www.lua.org/about.html Quote Please do not write it as "LUA", which is both ugly and confusing, because then it becomes an acronym with different meanings for different people. So, please, write "Lua" right!
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