Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Движки сайтов (CMS) (https://forum.zone-game.info/forumdisplay.php?f=47)
-   -   Скрипт списка игроков онлайн (https://forum.zone-game.info/showthread.php?t=4136)

Voltage 14.07.2009 20:34

Скрипт списка игроков онлайн
 
просьба кому не лень написать php скриптик, берущий список игроков онлайн из mysql и выводящий их в таблицу:

<номер по порядку>_<ник>_<профа>_<клан>_<алли>

решил не брать готовую обвязку для сервака а написать свою -)

Voltage 16.07.2009 14:54

Ответ: Скрипт списка игроков онлайн
 
решено.
PHP код:

<?php
include("credentials.php");
$res mysql_connect $dbhost$dbuser$dbpass$dbport ) or die ("Coudn't connect to [$dbserv]");
mysql_select_db $dbname );
$FORM "<table width=100% border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"font-size:11px; font-family:verdana; color:#999999;\">";
$query "select char_name from characters where (online=1) ORDER BY char_name ASC ";
$link mysql_query($query);
$num mysql_num_rows($link);
$FORM .= "<tr><td><br><span style=\"font-size:11px; font-family:verdana; color:#000000;\"><center><b>onLine: $num</b></span></td></tr><tr><td align=justify><hr><span style=\"font-size:11px; font-family:verdana; color:#ff0000;\">";
while ( 
$char mysql_fetch_row($link) )
{
    
$FORM .= "  &nbsp;&nbsp;$char[0] ";
}

$FORM .= "</span></td></tr></table><hr style=\"font-family:verdana; color:#999999;\"><center>";
echo 
$FORM;

mysql_close();

?>


Macros_DLE 19.07.2009 02:04

Ответ: Скрипт списка игроков онлайн
 
Есть вопрос, где фаил в котором надо прописать путь к Mysql, чтобы он оттуда брал информацию. На сайте SS, Замки и статус реид боссов работает, а вот То 50 игроков, топ 50 кланов и онлаин не показывает, подскажите что делать. Пожалуйста, очень надо.

PROGRAMMATOR 19.07.2009 04:01

Ответ: Скрипт списка игроков онлайн
 
Voltage, я сразу зашел в вашу тему, хотел было даже помочь, но остановила меня одна фраза: решил не брать готовую обвязку для сервака а написать свою, которая никак не совпадала с: просьба кому не лень написать php скриптик. :)

Macros_DLE, Сложно помочь, не видя скриптов. Приведите код тех скриптов, что не работают. Если что, код PHP оформляйте в теги [php] ... [/php].

Voltage 19.07.2009 12:16

Ответ: Скрипт списка игроков онлайн
 
2 PROGRAMMATOR: свой сайт я делал сам. но во-первых, из-за того, что синтаксис sql мне плохо знаком, а также в целях обеспечения безопасности, количество скриптов, взаимодействующий с базой сервера, я стараюсь свести к минимуму: онлайн, стата кланов с замками и регистрация: остальное чистый HTML с php-вставками -) собственно, из скрипта, который бы Вы выложили здесь, мне нужен только синтаксис sql-запросов -)

2 Macros_DLE:
PHP код:

<?php 
$dbuser 
"пользователь_БД"
$dbpass "пароль"
$dbhost "хост"
$dbname "имя_БД"
$dbport3306//порт
?>


Macros_DLE 19.07.2009 13:47

Ответ: Скрипт списка игроков онлайн
 
Voltage, я конечно это всё понимаю, но я не понимаю куда именно вписывать... обьясни...

Voltage 19.07.2009 15:32

Ответ: Скрипт списка игроков онлайн
 
создаешь файлик credentials.php в той же папке, что и скрипт

PROGRAMMATOR 19.07.2009 17:39

Ответ: Скрипт списка игроков онлайн
 
Цитата:

Сообщение от Voltage
мне нужен только синтаксис sql-запросов

Так вот Алексей уже делился со всеми "исправленными скриптами" - http://forum.zone-game.info/showthread.php?t=1128 там есть все, что нужно.

Voltage 19.07.2009 17:59

Ответ: Скрипт списка игроков онлайн
 
спасибо. только не очень мне нравятся те скрипты, слишком много придется переделывать, но это уже мои проблемы -)

кстати, раз уж пошла такая пьянка - как реализовать отображение значков кланов в статистике? буду очень благодарен.

PROGRAMMATOR 19.07.2009 20:22

Ответ: Скрипт списка игроков онлайн
 
Не задумывался над этим, нужно почитать код, который их создает java\com\l2j\gameserver\cache\CrestCache.java и возможно модифицировать, что бы сохраняло 2 картинки, одну в нужном формате для клиента, а одну в обычном jpg. Просто все значки, что сохраняются в game\data\crests\ хоть и имеют разрешение bmp, все же в формате dds (открыть можно с помощью WTV например).

А можно еще почитать ImageMagick(Convert, ..), но этот способ требует установленного ImageMagick.

ps Идентификатор хранится в characters > crest_id.

Voltage 19.07.2009 21:52

Ответ: Скрипт списка игроков онлайн
 
нагуглил, что nconvert умеет работать с dds. имеются бинарники под винду и линух.

для формирования жпегов можно сделать cgi-скрипт, сравнивающий листинги директории /opt/lserver/gameserver/data/crests и /var/www/clancrests и формирующий недостающие jpg на лету.

покопаю по этому направлению, доложу что получится -)

Добавлено через 29 минут
итак:
Код:

nconvert -out png -crop 0 4 16 16 *.bmp
конвертирует все файлы логотипов в текущей папке в .png такого же размера.

осталось запускать его по крону и выкладывать лого на сайт

Добавлено через 56 минут
имя файла - Crest_<значение_поля_crest_id_из_таблицы_clan_data>.bmp

Добавлено через 1 час 26 минут
сделал. завтра с утра напишу реализацию.

Добавлено через 11 часов 24 минуты
итак, для отображения значков кланов в статистике делаем следующее (показываю на примере Arch Linux):
Код:

[login@norris ~]$ mkdir ~/temp && cd ~/temp
[login@norris temp]$ wget http://download.xnview.com/NConvert-x86-unknown-linux2.x.tgz
[login@norris temp]$ tar -zxvf NConvert-x86-unknown-linux2.x.tgz
NConvert/
NConvert/Formats.txt
NConvert/license.txt
NConvert/Plugins.txt
NConvert/ReadMe.txt
NConvert/Usage.txt
NConvert/WhatsNew.txt
NConvert/nconvert
[login@norris temp]$ cd NConvert
[login@norris NConvert]$ sudo mv nconvert /usr/bin
[login@norris NConvert]$ cd ../.. && rm -rf temp
[login@norris ~]$ crontab -e

открывается редактор vi
нажимаем клавишу I и дописываем в конец файла следующее:
Код:

0,30 * * * * cd /opt/lserver/gameserver/data/crests && /usr/bin/nconvert -out pn
g -o /var/www/crests/% -crop 0 4 16 16 *.bmp

нажимаем esc, пишем :wq, нажимаем enter.
/opt/lserver/gameserver и /var/www - директории геймсервера и сайта.

теперь переходим к статистике кланов. добавляем в свой код нечто наподобие следующего:
PHP код:

<?php 
include "./credentials.php";
function 
Cmp($A$B)
{
    if(
$A == $B)
        return 
0;
    return(
$A>$B)?-1:1;
}
function 
StopScript($Msg

    echo 
$Msg
    @
mysql_close(); 
}
$SrvConn = @mysql_connect($dbhost$dbuser$dbpass);
if(!
$SrvConn)
    
StopScript("Нет соединения с БД");
$DBConn mysql_select_db($dbname);
if(!
$DBConn
    
StopScript("БД не существует"); 
$ClansResult mysql_query("SELECT * FROM `clan_data`"); 
if(!
$ClansResult
    
StopScript("<br><br>There are no clans on this server"); 
else
    
$ClansCount = @mysql_num_rows($ClansResult);
$castle = array('0' => "No Castle"' ' => "No Castle"'1' => "Gludio Castle"'2' => "Dion Castle"'3' => "Giran Castle"'4' => "Oren Castle"'5' => "Aden Castle"'6' => "Innadril Castle"'7' => "Goddard Castle");
$ClansArray = array();
$ClanCount 0;

while(
$ClanRow = @mysql_fetch_array($ClansResult))

    
$LeaderResult = @mysql_query("SELECT `char_name` FROM `characters` WHERE `obj_id`=" $ClanRow['leader_id']);
    
$MembersResult = @mysql_query("SELECT `char_name` FROM `characters` WHERE `clanid`=" $ClanRow['clan_id']);
    while(
$LeaderRow = @mysql_fetch_array($LeaderResult))
    {
        
$MembersCount = @mysql_num_rows($MembersResult);
        
$ClansArray[$ClanCount][0] = $MembersCount;
        
$ClansArray[$ClanCount][1] = $ClanRow['clan_name'];
        
$ClansArray[$ClanCount][2] = $LeaderRow['char_name'];
        
$ClansArray[$ClanCount][3] = $ClanRow['clan_id'];
        
$ClansArray[$ClanCount][4] = $ClanRow['hasCastle'];
        
$ClansArray[$ClanCount][5] = $ClanRow['clan_level'];
        
$ClansArray[$ClanCount][7] = $ClanRow['crest_id'];
    }

    
$ClanCount++;
}
usort($ClansArray"Cmp");
echo 
"<table border='0'><tr><th class='Stil5'><center>Лого</center></th><th class='Stil5'><center>#</center></th><th class='Stil5'><center>Клан</center></th><th class='Stil5'><center>Игроков</center></th><th class='Stil5'><center>Лидер</center></th><th class='Stil5'><center>Lv.</center></th><th class='Stil5'><center>Замок</center></th></tr>";
$Ranking 1;
foreach(
$ClansArray as $ClanArray)
{
    echo 
"<tr><td class='Stil5'><center><img src='./crests/Crest_" $ClanArray[7]. ".png' border=0></center></td><td class='Stil5'><center>" $Ranking "</center></td><td class='Stil5'><center>".$ClanArray[1]."</center></td><td class='Stil5'><center>" $ClanArray[0] . "</center></td><td class='Stil5'><center>" $ClanArray[2] . "</center></td><td class='Stil5'><center>".$ClanArray[5]."</center></td><td class='Stil5'><center>".$castle[$ClanArray[4]]."</center></td></tr>";
    
$Ranking++;

    if(
$Ranking >= 101)
        break;
}
echo 
"</table></center>";
mysql_close();
?>

готово.
значки обновляются раз в полчаса, если хотите чаще или реже - там где в crontab у меня прописывается 0,30 напишите список минут через запятую.

как это работает можно заценить здесь

Voltage 04.08.2009 09:32

Ответ: Скрипт списка игроков онлайн
 
явно задавать access_level в БД - к примеру, 0-обычный игрок, 15-VIP, 75-GM, 100-админ, в скрипте запрашивать из БД значение этого поля и в цикле сделать ветвление, задающее цвет ника

но можно и по тупому - описать в скрипте всех вип-юзеров и в цикле проверять их имя и задавать цвет -))


Текущее время: 11:15. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2023, Jelsoft Enterprises Ltd. Перевод: zCarot