Jump to content
Sign in to follow this  
V3ct0r

[PHP] Скрипт для вывода списка HD и GM в игре

Recommended Posts

С помощью данного скрипта Вы можете выводить список 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>

 

  • Like 3

Share this post


Link to post
Share on other sites
21 час назад, V3ct0r сказал:

С помощью данного скрипта Вы можете выводить список HD и GM онлайн на своем сайте или в лаунчере, чтобы игроки могли легко связываться с администрацией в игре. Сам список выводится через запятую в одну строку.

 

Настройка скрипта очень простая и в комментариях не нуждается.

Допиши пожалуйста, если гм в сети нет, чтоб выводилось, Отсутствуют!
Да и ники одинакового цвета у ГМ и HD не очень прикольно.

А так пригодиться.

Share this post


Link to post
Share on other sites

@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;
}

 

  • Like 2

Share this post


Link to post
Share on other sites

Нашёлся ещё один косяк - русский ник отображается вот так [����]���ݧڧҧѧҧ� , смена кодировки не помогает.

Share this post


Link to post
Share on other sites
4 часа назад, BotPRO сказал:

Нашёлся ещё один косяк - русский ник отображается вот так [����]���ݧڧҧѧҧ� , смена кодировки не помогает.

+ у меня тоже самое, интересно как решить эту проблему

Share this post


Link to post
Share on other sites

@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';

 

 

onlinehdgm.png


Share this post


Link to post
Share on other sites
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';

 

 

onlinehdgm.png

Спасибо большое работает как швейцарские часы 

  • Like 1

Share this post


Link to post
Share on other sites

Технически скрипт не идеален.

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 by Chudik

gigabar.png.c3c21d2a586d5395019e41be9510900b.png

По всем вопросам, обращайтесь [email protected]

Share this post


Link to post
Share on other sites
12 часа назад, Chudik сказал:

Технически скрипт не идеален

Конструкция вида

if (!$foo)

аналогична конструкции

if ($foo == false)

Почему я так написал? Потому что мне так нравится. Возможно, так будет понятнее тому, кто будет изучать мой код. И ты удивишься, но ... оно работает.

 

Цитата

А так же нет кеширования. При обращении к скрипту, т.е. каждый раз когда заходит кто-то на сайт (включая поисковики), создается коннект к бд.

А это не гуд.

Чтобы на сайт не заходили роботы, надо поставить от них защиту. Кэширование тут спорный момент. Идея скрипта заключается в том, чтобы в реальном времени выводить игрокам список администрации в игре. Кому надо будет кэширование, тот прикрутит его самостоятельно. Так, как ему удобно.

 

Цитата

И еще, что я бы изменил. Это не делал выполнения php 2 раза в файле. А записал бы вывод в переменную в первом участке кода. И выводил бы её в нужном месте, без лишнего кода.

Я это сделал чтобы разделить PHP код и HTML/CSS. Конечно, я могу собрать строку наверху, сразу после запроса. Но что, если в дальнейшем понадобится выделять разными цветами HD и GM? Верстальщику, который не знает PHP, надо будет лезть в мой код и разбираться в нем, вместо того, чтобы просто делать свою работу.

 

Цитата

Ну и на последок, много кода.

Я могу убрать все проверки на ошибки, дать переменным нечитаемые, но короткие названия и передавать одной функции в параметрах вызов другой. Но какой в этом смысл? Запутать потенциального пользователя?

 

Цитата

У меня скрипт в 2 раза короче на лайфе

Сомнительное достижение. В таком случае, может ты покажешь народу пример идеального скрипта?

  • Like 1

Share this post


Link to post
Share on other sites

Так это все лишь мои пожелания. Если нравится так, пусть будет так.

И кеширование. Если сделать кеширование, 1 запрос в минуту. Особо конструкция реального времени не пострадает.

Edited by Chudik

gigabar.png.c3c21d2a586d5395019e41be9510900b.png

По всем вопросам, обращайтесь [email protected]

Share this post


Link to post
Share on other sites
В 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;
}

 

как задать тут цвет я попробовал и так и так не хочет ошибку выдает, буду очень благодарен если кто то подскажет

 

Share this post


Link to post
Share on other sites
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>";
}

 

  • Like 2

Share this post


Link to post
Share on other sites
15 часов назад, pirate сказал:

Разделяйте логику от представления, Что за каша.

 

Она как бы разделена. На выходе скрипта есть массив $stuff со списком GM. Далее делайте с ним все что хотите. Ниже был дан пример вывода списка непосредственно в HTML коде. Подключать какой-нибудь шаблонизатор в конкретном примере для такого простого скрипта это как из пушки по воробьям. Точно так же можно придраться что у меня невалидный HTML или я использую устаревшую библиотеку для работы с MSSQL. Для потенциального пользователя скрипта главное понять идею и доработать скрипт под свой проект.

  • Like 2

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...