V3ct0r 2,117 Report post Posted August 21, 2016 С помощью данного скрипта Вы можете выводить список HD и GM онлайн на своем сайте или в лаунчере, чтобы игроки могли легко связываться с администрацией в игре. Сам список выводится через запятую в одну строку. Настройка скрипта очень простая и в комментариях не нуждается. <?php // Настройки подключения к MSSQL-серверу $db_host = ''; $db_user = ''; $db_pass = ''; $db_name = 'GameDB'; $hd_level = 30; // Уровень до которого персонаж считается HD // Подключаемся к MSSQL-серверу if (mssql_connect($db_host, $db_user, $db_pass) == false) { die ('<b>Ошибка: </b> Не удалось подключиться к серверу баз данных!'); } // Выбираем базу данных if (mssql_select_db($db_name) == false) { die ('<b>Ошибка: </b> Не удалось открыть игровую базу данных!'); } // Делаем запрос $sql = 'SELECT c.cha_name, a.gm FROM character AS c LEFT JOIN account AS a ON (c.act_id = a.act_id) WHERE c.mem_addr > 0 AND a.gm > 0'; $query = mssql_query($sql); if ($query == false) { die ('<b>Ошибка: </b> Не удалось выполнить запрос на список HD и GM в игре!'); } // Формируем список HD и GM $stuff = array(); while ($cha = mssql_fetch_object($query)) { $stuff[] = $cha; } // Закрываем соединене с базой данных mssql_close(); ?> <html> <head> <title>Список HD и GM в игре</title> </head> <body> <h1>Список HD и GM в игре</h1> <?php // Выводим список HD и GM через запятую $stuff_online = ''; $n = count($stuff); if ($n > 0) { for ($i = 0; $i < $n; $i++) { if ($stuff[$i]->gm > $hd_level) { $stuff_online .= '[GM] ' . $stuff[$i]->cha_name; } else { $stuff_online .= '[HD] ' . $stuff[$i]->cha_name; } if ($i != ($n - 1)) { $stuff_online .= ', '; } else { $stuff_online .= '.'; } } } else { $stuff_online = 'HD и GM нет в игре.'; } print $stuff_online; ?> </body> </html> 3 Quote Some useful links / Полезные ссылки Tips for making a topic in 'Questions & Help' / Рекомендации по созданию тем в разделе "Помощь" Server Advertising Section Rules / Правила раздела "Реклама серверов" Available e-mail domains for registration / Допустимые e-mail домены для регистрации User groups / Группы пользователей User ranks / Звания пользователей "Broken" pictures on the forum / "Битые" изображения на форуме Beware of scammers! / Осторожно, мошенники! My developments / Мои разработки Mods for client and server / Моды для клиента и сервера PKOdev.NET website for Tales of Pirates Server / PKOdev.NET веб-обвязка для сервера Пиратии I do not provide any help in private messages and outside the forum. Use 'Questions & Help' section please. Thank you for understanding! Я не оказываю какую-либо помощь в личных сообщениях и вне форума. Пожалуйста, используйте раздел "Пиратия: Помощь". Благодарю за понимание! Share this post Link to post Share on other sites
BotPRO 12 Report post Posted August 22, 2016 (edited) Хорошая Штука. Edited August 22, 2016 by BotPRO Quote Share this post Link to post Share on other sites
BotPRO 12 Report post Posted August 22, 2016 21 час назад, V3ct0r сказал: С помощью данного скрипта Вы можете выводить список HD и GM онлайн на своем сайте или в лаунчере, чтобы игроки могли легко связываться с администрацией в игре. Сам список выводится через запятую в одну строку. Настройка скрипта очень простая и в комментариях не нуждается. Допиши пожалуйста, если гм в сети нет, чтоб выводилось, Отсутствуют! Да и ники одинакового цвета у ГМ и HD не очень прикольно. А так пригодиться. Quote Share this post Link to post Share on other sites
V3ct0r 2,117 Report post Posted August 22, 2016 @BotPRO обновил скрипт. Цитата Допиши пожалуйста, если гм в сети нет, чтоб выводилось, Отсутствуют! Сделал 3 часа назад, BotPRO сказал: Да и ники одинакового цвета у ГМ и HD не очень прикольно. Это сам можешь сделать вот здесь if ($stuff[$i]->gm > $hd_level) { $stuff_online .= '[GM] ' . $stuff[$i]->cha_name; } else { $stuff_online .= '[HD] ' . $stuff[$i]->cha_name; } 2 Quote Some useful links / Полезные ссылки Tips for making a topic in 'Questions & Help' / Рекомендации по созданию тем в разделе "Помощь" Server Advertising Section Rules / Правила раздела "Реклама серверов" Available e-mail domains for registration / Допустимые e-mail домены для регистрации User groups / Группы пользователей User ranks / Звания пользователей "Broken" pictures on the forum / "Битые" изображения на форуме Beware of scammers! / Осторожно, мошенники! My developments / Мои разработки Mods for client and server / Моды для клиента и сервера PKOdev.NET website for Tales of Pirates Server / PKOdev.NET веб-обвязка для сервера Пиратии I do not provide any help in private messages and outside the forum. Use 'Questions & Help' section please. Thank you for understanding! Я не оказываю какую-либо помощь в личных сообщениях и вне форума. Пожалуйста, используйте раздел "Пиратия: Помощь". Благодарю за понимание! Share this post Link to post Share on other sites
BotPRO 12 Report post Posted August 22, 2016 вот теперь во истину классный скрипт, спасибо. Quote Share this post Link to post Share on other sites
BotPRO 12 Report post Posted August 23, 2016 Нашёлся ещё один косяк - русский ник отображается вот так [����]���ݧڧҧѧҧ� , смена кодировки не помогает. Quote Share this post Link to post Share on other sites
kiberhack 5 Report post Posted August 23, 2016 4 часа назад, BotPRO сказал: Нашёлся ещё один косяк - русский ник отображается вот так [����]���ݧڧҧѧҧ� , смена кодировки не помогает. + у меня тоже самое, интересно как решить эту проблему Quote Share this post Link to post Share on other sites
V3ct0r 2,117 Report post Posted August 23, 2016 @BotPRO, @kiberhack Как вариант можно заменить SQL-запрос на $sql = 'SELECT CONVERT (nvarchar(255), c.cha_name) COLLATE CYRILLIC_GENERAL_CI_AS AS cha_name, a.gm FROM character AS c LEFT JOIN account AS a ON (c.act_id = a.act_id) WHERE c.mem_addr > 0 AND a.gm > 0'; Quote Some useful links / Полезные ссылки Tips for making a topic in 'Questions & Help' / Рекомендации по созданию тем в разделе "Помощь" Server Advertising Section Rules / Правила раздела "Реклама серверов" Available e-mail domains for registration / Допустимые e-mail домены для регистрации User groups / Группы пользователей User ranks / Звания пользователей "Broken" pictures on the forum / "Битые" изображения на форуме Beware of scammers! / Осторожно, мошенники! My developments / Мои разработки Mods for client and server / Моды для клиента и сервера PKOdev.NET website for Tales of Pirates Server / PKOdev.NET веб-обвязка для сервера Пиратии I do not provide any help in private messages and outside the forum. Use 'Questions & Help' section please. Thank you for understanding! Я не оказываю какую-либо помощь в личных сообщениях и вне форума. Пожалуйста, используйте раздел "Пиратия: Помощь". Благодарю за понимание! Share this post Link to post Share on other sites
kiberhack 5 Report post Posted August 23, 2016 6 часов назад, V3ct0r сказал: @BotPRO, @kiberhack Как вариант можно заменить SQL-запрос на $sql = 'SELECT CONVERT (nvarchar(255), c.cha_name) COLLATE CYRILLIC_GENERAL_CI_AS AS cha_name, a.gm FROM character AS c LEFT JOIN account AS a ON (c.act_id = a.act_id) WHERE c.mem_addr > 0 AND a.gm > 0'; Спасибо большое работает как швейцарские часы 1 Quote Share this post Link to post Share on other sites
Chudik 12 Report post Posted August 25, 2016 (edited) Технически скрипт не идеален. if (mssql_connect($db_host, $db_user, $db_pass) == false) { die ('<b>Ошибка: </b> Не удалось подключиться к серверу баз данных!'); } заменить на if (!mssql_connect($db_host, $db_user, $db_pass)) { die ('<b>Ошибка: </b> Не удалось подключиться к серверу баз данных!'); } аналогично if ($query == false) { die ('<b>Ошибка: </b> Не удалось выполнить запрос на список HD и GM в игре!'); } меняем на if (!$query) { die ('<b>Ошибка: </b> Не удалось выполнить запрос на список HD и GM в игре!'); } еще if (mssql_select_db($db_name) == false) { die ('<b>Ошибка: </b> Не удалось открыть игровую базу данных!'); } на if (!mssql_select_db($db_name)) { die ('<b>Ошибка: </b> Не удалось открыть игровую базу данных!'); } А так же нет кеширования. При обращении к скрипту, т.е. каждый раз когда заходит кто-то на сайт (включая поисковики), создается коннект к бд. А это не гуд. И еще, что я бы изменил. Это не делал выполнения php 2 раза в файле. А записал бы вывод в переменную в первом участке кода. И выводил бы её в нужном месте, без лишнего кода. Ну и на последок, много кода. У меня скрипт в 2 раза короче на лайфе Edited August 25, 2016 by Chudik Quote По всем вопросам, обращайтесь [email protected] Share this post Link to post Share on other sites
V3ct0r 2,117 Report post Posted August 26, 2016 12 часа назад, Chudik сказал: Технически скрипт не идеален Конструкция вида if (!$foo) аналогична конструкции if ($foo == false) Почему я так написал? Потому что мне так нравится. Возможно, так будет понятнее тому, кто будет изучать мой код. И ты удивишься, но ... оно работает. Цитата А так же нет кеширования. При обращении к скрипту, т.е. каждый раз когда заходит кто-то на сайт (включая поисковики), создается коннект к бд. А это не гуд. Чтобы на сайт не заходили роботы, надо поставить от них защиту. Кэширование тут спорный момент. Идея скрипта заключается в том, чтобы в реальном времени выводить игрокам список администрации в игре. Кому надо будет кэширование, тот прикрутит его самостоятельно. Так, как ему удобно. Цитата И еще, что я бы изменил. Это не делал выполнения php 2 раза в файле. А записал бы вывод в переменную в первом участке кода. И выводил бы её в нужном месте, без лишнего кода. Я это сделал чтобы разделить PHP код и HTML/CSS. Конечно, я могу собрать строку наверху, сразу после запроса. Но что, если в дальнейшем понадобится выделять разными цветами HD и GM? Верстальщику, который не знает PHP, надо будет лезть в мой код и разбираться в нем, вместо того, чтобы просто делать свою работу. Цитата Ну и на последок, много кода. Я могу убрать все проверки на ошибки, дать переменным нечитаемые, но короткие названия и передавать одной функции в параметрах вызов другой. Но какой в этом смысл? Запутать потенциального пользователя? Цитата У меня скрипт в 2 раза короче на лайфе Сомнительное достижение. В таком случае, может ты покажешь народу пример идеального скрипта? 1 Quote Some useful links / Полезные ссылки Tips for making a topic in 'Questions & Help' / Рекомендации по созданию тем в разделе "Помощь" Server Advertising Section Rules / Правила раздела "Реклама серверов" Available e-mail domains for registration / Допустимые e-mail домены для регистрации User groups / Группы пользователей User ranks / Звания пользователей "Broken" pictures on the forum / "Битые" изображения на форуме Beware of scammers! / Осторожно, мошенники! My developments / Мои разработки Mods for client and server / Моды для клиента и сервера PKOdev.NET website for Tales of Pirates Server / PKOdev.NET веб-обвязка для сервера Пиратии I do not provide any help in private messages and outside the forum. Use 'Questions & Help' section please. Thank you for understanding! Я не оказываю какую-либо помощь в личных сообщениях и вне форума. Пожалуйста, используйте раздел "Пиратия: Помощь". Благодарю за понимание! Share this post Link to post Share on other sites
Chudik 12 Report post Posted August 26, 2016 (edited) Так это все лишь мои пожелания. Если нравится так, пусть будет так. И кеширование. Если сделать кеширование, 1 запрос в минуту. Особо конструкция реального времени не пострадает. Edited August 26, 2016 by Chudik Quote По всем вопросам, обращайтесь [email protected] Share this post Link to post Share on other sites
kiberhack 5 Report post Posted January 26, 2017 В 22.08.2016 в 11:16, V3ct0r сказал: @BotPRO обновил скрипт. Сделал Это сам можешь сделать вот здесь if ($stuff[$i]->gm > $hd_level) { $stuff_online .= '[GM] ' . $stuff[$i]->cha_name; } else { $stuff_online .= '[HD] ' . $stuff[$i]->cha_name; } как задать тут цвет я попробовал и так и так не хочет ошибку выдает, буду очень благодарен если кто то подскажет Quote Share this post Link to post Share on other sites
e1mer 102 Report post Posted January 29, 2017 if ($stuff[$i]->gm > $hd_level) { $stuff_online .= "<span style=\"color: red;\">[GM] ".$stuff[$i]->cha_name."</span>"; } else { $stuff_online .= "<span style=\"color: blue;\">[HD] ".$stuff[$i]->cha_name."</span>"; } 2 Quote Share this post Link to post Share on other sites
pirate 2 Report post Posted September 27, 2017 Разделяйте логику от представления, Что за каша. Quote Share this post Link to post Share on other sites
V3ct0r 2,117 Report post Posted September 28, 2017 15 часов назад, pirate сказал: Разделяйте логику от представления, Что за каша. Она как бы разделена. На выходе скрипта есть массив $stuff со списком GM. Далее делайте с ним все что хотите. Ниже был дан пример вывода списка непосредственно в HTML коде. Подключать какой-нибудь шаблонизатор в конкретном примере для такого простого скрипта это как из пушки по воробьям. Точно так же можно придраться что у меня невалидный HTML или я использую устаревшую библиотеку для работы с MSSQL. Для потенциального пользователя скрипта главное понять идею и доработать скрипт под свой проект. 2 Quote Some useful links / Полезные ссылки Tips for making a topic in 'Questions & Help' / Рекомендации по созданию тем в разделе "Помощь" Server Advertising Section Rules / Правила раздела "Реклама серверов" Available e-mail domains for registration / Допустимые e-mail домены для регистрации User groups / Группы пользователей User ranks / Звания пользователей "Broken" pictures on the forum / "Битые" изображения на форуме Beware of scammers! / Осторожно, мошенники! My developments / Мои разработки Mods for client and server / Моды для клиента и сервера PKOdev.NET website for Tales of Pirates Server / PKOdev.NET веб-обвязка для сервера Пиратии I do not provide any help in private messages and outside the forum. Use 'Questions & Help' section please. Thank you for understanding! Я не оказываю какую-либо помощь в личных сообщениях и вне форума. Пожалуйста, используйте раздел "Пиратия: Помощь". Благодарю за понимание! Share this post Link to post Share on other sites