Ru-MaNGOS

Вернуться   Ru-MaNGOS > Документация > Языки программирования

Важная информация

Языки программирования Изучаем С++, Sql, php, Lua, Python

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.03.2010, 15:48   #1
Yoda
Гость
 
Сообщений: n/a
По умолчанию Скрипты для сайта.

Config.php
PHP код:
<?
$ip        
="127.0.0.1";        // server IP
$dbip        ="127.0.0.1";        // mysql IP
$dbport        ="3306";        // mysql порт
$gameport    ="8085";        // Порт сервера(game)
$dblogin    ="login";        // mysql юзер
$dbpass        ="pass";        // mysql пароль
$mdb        ="mangos";        // База мира
$rdb        ="realmd";        // База аккаунтов
$cdb        ="characters";        // База персонажей
?>
Подключение к Базе данных:
PHP код:
<?
require_once ('config.php');
mysql_connect ("$dbip:$dbport","$dblogin","$dbpass");
?>
Количество созданных аккаунтов, количество по фракциям, количество гильдий:
PHP код:
<?
mysql_selectdb 
("$rdb");
$acc mysql_query ("select count(`id`) from `account`");
$acc mysql_result ($acc,0);
mysql_selectdb ("$cdb");
$char mysql_query ("select count(`guid`) from `characters`");
$char mysql_result ($char,0);
$alliance mysql_query ("select count(`guid`) from `characters` where `race` in (1,3,4,7,11)");
$alliance mysql_result ($alliance,0);
$horde mysql_query ("select count(`guid`) from `characters` where `race` in (2,5,6,8,10)");
$horde mysql_result ($horde,0);
$guild mysql_query ("select count(`guildid`) from `guild`");
$guild mysql_result ($guild,0);
echo 
"Account: $acc<br>";
echo 
"Characters: $char<br>";
echo 
"Alliance: $alliance<br>";
echo 
"Horde: $horde<br>";
echo 
"Guild: $guild<br>";
?>
Статус сервера:
PHP код:
<?
$fp 
= @fsockopen ("$ip","$gameport",$errno,$errstr,1);
if (
$fp)
echo 
"Server: online><br>";
else
echo 
"Server: offline><br>";
?>
Игроки он-лайн:
PHP код:
<?
mysql_selectdb 
("$cdb");
$online mysql_query ("select count(`guid`) from `characters` where `online` = 1");
$online mysql_result ($online,0);
echo 
"Players Online: $online<br>";
?>
Аптайм:
PHP код:
<?
mysql_select_db 
("$mdb");
$uptime mysql_query ("select max(`starttime`) from `uptime`");
$uptime time()-mysql_result ($uptime,0);
$sec $uptime%60;
$uptime intval ($uptime/60);
$min $uptime%60;
$uptime intval ($uptime/60);
$hours $uptime;
echo 
"Uptime: $hours h $min min $sec sec<br>";
?>
Статистика по расам и классам:


Тема с mangos.ru, автора не помню...

Последний раз редактировалось KiriX; 07.03.2010 в 17:33.
  Ответить с цитированием
9 пользователя(ей) сказали cпасибо:
Gerald (07.03.2010), KiriX (09.03.2010), labor (09.03.2010), Medivh (09.03.2010), Omg (07.03.2010)
Старый 07.03.2010, 17:05   #2
Madmunus
Это просто он
 
Регистрация: 12.02.2010
Сообщений: 22
Сказал(а) спасибо: 6
Поблагодарили 27 раз(а) в 13 сообщениях
Madmunus На верном пути
По умолчанию

последний скрипт убийственный)
Madmunus вне форума   Ответить с цитированием
Старый 07.03.2010, 17:32   #3
DeusModus
Администратор
 
Аватар для DeusModus
 
Регистрация: 07.03.2010
Адрес: Питер.
Сообщений: 69
Сказал(а) спасибо: 66
Поблагодарили 102 раз(а) в 15 сообщениях
Записей в дневнике: 12
DeusModus отключил(а) отображение уровня репутации
По умолчанию

Цитата:
Сообщение от Madmunus Посмотреть сообщение
последний скрипт убийственный)
20 запросов к БД.. Ассоциативные массивы автору сего чуда были неведомы.
DeusModus вне форума   Ответить с цитированием
Старый 07.03.2010, 18:02   #4
Madmunus
Это просто он
 
Регистрация: 12.02.2010
Сообщений: 22
Сказал(а) спасибо: 6
Поблагодарили 27 раз(а) в 13 сообщениях
Madmunus На верном пути
По умолчанию

Цитата:
Сообщение от DeusModus Посмотреть сообщение
20 запросов к БД.. Ассоциативные массивы автору сего чуда были неведомы.
Да я тож так подумал
Madmunus вне форума   Ответить с цитированием
Старый 08.03.2010, 20:16   #5
Madmunus
Это просто он
 
Регистрация: 12.02.2010
Сообщений: 22
Сказал(а) спасибо: 6
Поблагодарили 27 раз(а) в 13 сообщениях
Madmunus На верном пути
По умолчанию

Вот очень хороший скриптик на js, очень полезен для создания админки, для любого сайта.

Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 5 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.
Madmunus вне форума   Ответить с цитированием
3 пользователя(ей) сказали cпасибо:
Hantet (17.04.2010), KiriX (09.03.2010), Konctantin (08.03.2010)
Старый 08.03.2010, 20:34   #6
Madmunus
Это просто он
 
Регистрация: 12.02.2010
Сообщений: 22
Сказал(а) спасибо: 6
Поблагодарили 27 раз(а) в 13 сообщениях
Madmunus На верном пути
По умолчанию

Понимаю что не намного лучше но все таки:
Madmunus вне форума   Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
DeusModus (08.03.2010), Konctantin (08.03.2010)
Старый 09.03.2010, 00:27   #7
Desperado
Гость
 
Сообщений: n/a
По умолчанию

Гейм мастера онлайн

Код:
<html> 
<body> 
                     <table border = "1" align = "center"> 
                            <tr> 
                            <td>Ник</td> 
                            <td>Расса</td> 
                             <td>Класс</td> 
                            <td>Уровень доступа</td> 
                            </tr>                    
<?php 

                         /** 
                           * @author [Desperado] 
                           * @copyright 2010 
                          */ 

                            require_once ('includes/config.php'); //подключаем файл конфигурации 

                    $Sql = mysql_connect("$host", "$db_user", "$db_user_passw") or die("Невозможно подключиться к базе данных : " . mysql_error()); //соединяемся с базой MySQl 
                     mysql_query("SET character_set_database = '$charset'");  //устанавливаем кодировку 
                     mysql_query("SET NAMES '$charset'");  //устанавливаем кодировку 
                          
                       $content = mysql_query ("select c.name, c.class, c.race, a.gmlevel from characters.characters c inner join realmd.account 
                       a on a.id=c.account where a.gmlevel != 0 and c.online = 1");      //достаём нужные данные 
                       $online = mysql_num_rows($content); 
                            
                             /** 
                        * мутим обработку данных из массива 
                        */               
                    
                            $class = array(1=>"Воин",2=>"Паладин",3=>"Охотник",4=>"Разбойник",5=>"Жрец", 
                        6=>"Рыцарь Смерти",7=>"Шаман",8=>"Маг",9=>"Чернокнижник",11=>"Друид");                          
                            $race = array(1=>"Человек",2=>"Орк",3=>"Дворф",4=>"Ночной Эльф",5=>"Нежить",6=>"Таурен",7=>"Гном",8=>"Тролль", 
                        10=>"Эльф Крови",11=>"Дреней"); 
                            $gmlevel = array(1=>'Модератор',2=>'Хелпер',3=>'Гейм Мастер',4=>'Администратор'); 
                          
                             /** 
                        * если гм нет, выводим неприличное сообщение 
                        */                           
                      
                             if($online < 1) { 
                             echo "<tr><td colspan='4' align='center'>Нет гм, вошедших в игру</td></tr>"; 
                             }                           
                        
                           /** 
                        * если гм есть, выводим другое неприличное сообщение 
                        */                          
                        
                        
                          while ($row = mysql_fetch_array($content))                          
                             { 
                     $name = $row['name']; 
                         echo "<tr><td><b>{$name}</b></td>";  //выводим ник Гм 
                         echo "<td><b>{$race[$row['race']]}</b></td>";  //Выводим рассу 
                         echo "<td><b>{$class[$row['class']]}</b></td>"; //Выводим класс 
                         echo "<td><b>{$gmlevel[$row['gmlevel']]}</b></td></tr>"; //Выводим уровень доступа 
                    }      

mysql_close($Sql);                   

?> 
</table> 
</body>                            
</html>
кол-во аккаунтов, максимальный аптайм, текущий онлайн, кол-во чаров за орду/альянс

Код:
             
       require_once ('includes/config.php'); //подключаем файл конфигурации 
       $sMySql = mysql_connect('$host', ' $db_user', '  $db_user_passw') or die("Невозможно подключиться к базе : " . mysql_error());; //открываем mysql. 
             
             
       $aSql = mysql_num_rows(mysql_query("SELECT guildid FROM characters.guild", $sMySql)); 
       $nTotalGuild = $aSql; 

          $aSql = mysql_num_rows(mysql_query("SELECT guid FROM characters.characters WHERE race IN ( 1, 4, 11, 3, 7 )", $sMySql)); 
       $nTotalAlliance = $aSql; 
       $aSql = mysql_num_rows(mysql_query("SELECT guid FROM characters.characters WHERE race IN (6, 10, 5, 2, 8)", $sMySql)); 
       $nTotalHorde = $aSql; 

       function conventNormTime($nSec) { 
        $d = floor( $nSec / (3600*24) ); 
              $nSec = ($nSec - $d * 3600 * 24); 
              $h = floor( $nSec / 3600 ); 
              $nSec = ($nSec - $h * 3600); 
              $m = floor( $nSec / 60 ); 
             return "{$d} д. {$h} ч. {$m} м."; 
       } 
              
       $aSql = mysql_fetch_array(mysql_query("SELECT maxplayers FROM realmd.uptime ORDER by maxplayers DESC LIMIT 1", $sMySql)); 
       $nMaxOnline = $aSql['maxplayers']; 
             
       $aSql = mysql_fetch_array(mysql_query("SELECT uptime FROM realmd.uptime ORDER by starttime DESC LIMIT 1", $sMySql)); 
        $tUptime = conventNormTime($aSql['uptime']); 

                    $aSql = mysql_query("SELECT uptime FROM realmd.uptime ORDER by uptime DESC LIMIT 1", $sMySql); 
                    $aSql =mysql_fetch_array($aSql); 
                    $aTotal = $aSql['uptime']; 
                    $aTotal = conventNormTime($aSql['uptime']); 

       $aSql = mysql_num_rows(mysql_query("SELECT id FROM realmd.account", $sMySql)); 
       $nTotalAccount = $aSql; 

$aSql = mysql_num_rows(mysql_query("SELECT guid FROM characters.characters WHERE online IN ( 1 )", $sMySql)); 
$nCurrenOnline = $aSql; 
             
             
         $aOut = array( 
          'online' => $nCurrenOnline, 
          'max_online' => $nMaxOnline, 
          'uptime' => $tUptime, 
          'max_uptime' => $aTotal, 
          'reg_accounts' => $nTotalAccount, 
       'reg_horde' => $nTotalHorde, 
       'reg_alliance' => $nTotalAlliance, 
        ); 

       echo    '<tr><td>Онлайн:</td> <td><b>{$nCurrenOnline}</b></td></tr>'; 
       echo    '<tr><td>Макс. онлайн:</td> <td><b>{$nMaxOnline}</b></td></tr>'; 
       echo    '<tr><td>Макс. аптайм:</td> <td><b>{$aTotal}</b></td></tr>'; 

             
       echo    '<tr><td>Акаунтов:</td> <td><b>{$nTotalAccount}</b></td></tr>'; 
       echo    '<tr><td>Альянса:</td> <td><b>{$nTotalAlliance}</b></td> </tr>'; 
       echo    '<tr><td>Орды:</td> <td><b>{$nTotalHorde}</b></td></tr>';

 mysql_close ($sMySql)
?>
Отображение открытых/закрытых инстов ВОТЛК.
если инст имеет уровень выше 71, но не выше 80 - открыт
если инст имеет уровень выше 80 - закрыт
Инфу записывает в текстовый файл. Кому надо, переделают за 10 секунд


Код:
<?php 
   require_once ('includes/config.php'); 
               $sMySql = mysql_connect($host, $user, $passw) or die("Невозможно подключиться к базе : " . mysql_error());
      mysql_select_db('mangos', $sMySql) or die("Невозможно подключиться к базе characters : " . mysql_error());
               $content = mysql_query("SELECT `required_level` , `name` FROM areatrigger_teleport WHERE `required_level` >= '71' ORDER BY `areatrigger_teleport`.`required_level` DESC"); //выборка данных 
           //обработка в массиве 
      $name = array ( 
   'Onyxia\'s Lair - Dustwallow Instance' => 'Логово Ониксии', 
   'Naxxramas (Inside)' => 'Наксрамас', 
   'Violet Hold (entrance)' => 'Аметистовая крепость', 
   'Oculus (exit)' => 'Нексус: Окулус', 
   'The Nexus (exit)' => 'Нексус: Нексус',   
   'Utgarde Pinnacle (exit)' => 'Крепость Утгард: Вершина Утгард', 
   'Utgarde Keep (entrance)' => 'Крепость Утгард: Крепость Утгард',   
   'Ulduar, Halls of Lightning (entrance)' => 'Ульдуар: Чертоги Молний', 
   'Ulduar, Halls of Stone (exit)' => 'Ульдуар: Чертоги Камня', 
   'Drak\'Tharon Keep (exit)' => 'Крепость Драк\'Тарон', 
   'Vault of Archavon (Exit)' => 'Склеп Аркавона', 
   'Azjol-Nerub (entrance)' => 'Азжол-Неруб: Азжол-Неруб', 
   'Ahn\'Kahet (entrance)' => 'Азжол-Неруб: Ан\'кахет: Старое Королевство', 
   'Chamber of Aspects, Obsidian Sanctum (entrance)' => 'Обсидиановое святилище', 
   'The Eye of Eternity' => 'Нексус: Око Вечности', 
   'Gundrak (exit south)' => 'Гундрак', 
   'Ulduar Raid entrance' => 'Ульдуар', 
   'Trial of the Crusader (exit)' => 'Испытание крестоносца', 
   'Trial of the Champion (entrance)' => 'Испытание чемпиона', 
   'Halls of Reflection (Entrance)' => 'Цитадель Ледяной Короны: Залы Отражений', 
   'Forge of Souls (Entrance)' => 'Цитадель Ледяной Короны: Кузня Душ', 
   'IceCrown Citadel (Entrance)' => 'Цитадель Ледяной Короны',   
   'Culling of Stratholme (entrance)' => 'Пещеры Времени: Очищение Стратхольма', 
   'Pit of Saron (Entrance)' => 'Цитадель Ледяной Короны: Яма Сарона'); 
     
       // строим таблицу 
         $szTable = '<table border="1" align="center">'; 
      $szTable .= '<tr> <td align="center"><b>Название</b></td><td><b>Статус</b></td></tr>';       
         
                            while ($row = mysql_fetch_array($content))                            
                    {   
          if ( isset($name[$row['name']]) ) { 
           $required_level = $row['required_level']; 
                     if ($required_level <= 80) 
                    { 
      $szTable .= '<tr> <td align="left">'.$name[$row['name']].'</td> <td align="center"><font color="green">Открыт</font></td>';        
              } else 
                    { 
      $szTable .= '<tr> <td align="left">'.$name[$row['name']].'</td> <td align="center"><font color="red">Закрыт</font></td>';                     
                     }                     
                     }   
                    }   
         $szTable  .= '</table>';    
      $szTable .= '<br>'; 
      $szTable .= '<br>'; 
      
          $handler = fopen("inst.txt", "w+"); 
          fwrite($handler, $szTable); 
          fclose($handler); 
          mysql_close($sMySql);      
?>
Отправка почты
Для работы необходим патч extern mail
Патч прилагается в атаче


Код:
CREATE TABLE IF NOT EXISTS `mail_external` (
  `id` int(20) unsigned NOT NULL auto_increment,
  `receiver` bigint(20) unsigned NOT NULL,
  `subject` varchar(200) default 'Support Message',
  `message` varchar(500) default 'Support Message',
  `money` int(20) unsigned NOT NULL default '0',
  `item` int(20) unsigned NOT NULL default '0',
  `item_count` int(20) unsigned NOT NULL default '1',
  PRIMARY KEY  (`id`)
) ENGINE
Код:
<?php

/**
 * @author Desperado
 * @copyright 2010
 * Скрипт рассылки вещей на почту игроков
 * Для работы необходим патч extern mail 
 */
 
   require_once ('includes/config.php'); //подключаем конфиг
   $sMySql = mysql_connect($host, $user, $passw) 
       or die("Невозможно подключиться к базе данных : " . mysql_error());  //соеденяемся с базой данных
    mysql_select_db('characters', $sMySql)
       or die("Невозможно выбрать базу"); //подключаем базу данных персонажей  
  
      /**
       * временные данные
       */
	   
$receiver = 18143; //Guid получателя
$subject = subject; //Заголовок сообщения
$message = message; //Тело сообщения
$money = 0; //Скок голда
$item = 2342; //ID вещи
$item_count = 1; //Количество вещей

      /**
       * Посылаем вещь
       */

   $last_mail_id = mysql_fetch_array(mysql_query("SELECT id FROM `characters`.`mail_external` ORDER by id DESC LIMIT 1")); //выбираем последние айди
   $last_mail = $last_mail_id['id'] +1;
   $result = mysql_query("INSERT INTO `characters`.`mail_external` (
                                                                    `id` ,
                                                                    `receiver` ,
                                                                    `subject` ,
                                                                    `message` ,
                                                                    `money` ,
                                                                    `item` ,
                                                                    `item_count` 
                                                                    )
                         VALUES ('$last_mail', '$receiver', '$subject', '$message', '$money', '$item','$item_count')");

mysql_close ($sMySql);                                                                          
?>
Парсинг и вывод статистики MMOTOP
Добавляем в константу ссылку из лк ммотопа и радуемся.

Код:
<?php 

define('HASH_URL', 'ссылка'); 
                       
            $aData = @file_get_contents(HASH_URL); // подгружаем в массив информацию 
            preg_match_all("|.*\t.*\t.*\t(.*)\t.*\n|isU",$aData,$aArgs); // мутим обработку на данные 
            $aArray = array(); 
            for ($i = 0; $i < count($aArgs[1]); $i ++ ) { 
             if ( ! $aArray[$aArgs[1][$i]] ) 
              $aArray[ $aArgs[1][$i] ] = 1; 
             else 
              $aArray[ $aArgs[1][$i] ] = $aArray[ $aArgs[1][$i] ] + 1; 
            } 
            arsort($aArray); 
            $szContent = '<center><table border="1" width="200">'; 
            $szContent .= '<tr><td align="left"><b>Ник</b></td><td align="left"><b>Голоса</b></td></tr>'."\n"; 
            foreach ($aArray as $var=>$val) { 
             $szContent .= '<tr><td><b>'.$var.'</b></td><td>'.$val.'</td></tr>'."\n"; 
            } 
            $szContent .= '</table></center>'; 
            $szContent = iconv('cp1251', 'utf-8', $szContent); 
            echo $szContent; 
?>
Функция конверта времени из линукса

Код:
function conventNormTime($nSec) { 
     $d = floor( $nSec / (3600*24) ); 
           $nSec = ($nSec - $d * 3600 * 24); 
           $h = floor( $nSec / 3600 ); 
           $nSec = ($nSec - $h * 3600); 
           $m = floor( $nSec / 60 ); 
          return "{$d} д. {$h} ч. {$m} м."; 
    }
Вложения
Тип файла: rar патч..rar (2.7 Кб, 559 просмотров)

Последний раз редактировалось Desperado; 09.03.2010 в 01:04.
  Ответить с цитированием
5 пользователя(ей) сказали cпасибо:
blackmanos (26.04.2010), Hantet (17.04.2010), KiriX (09.03.2010), Medivh (09.03.2010)
Старый 09.03.2010, 00:48   #8
DeusModus
Администратор
 
Аватар для DeusModus
 
Регистрация: 07.03.2010
Адрес: Питер.
Сообщений: 69
Сказал(а) спасибо: 66
Поблагодарили 102 раз(а) в 15 сообщениях
Записей в дневнике: 12
DeusModus отключил(а) отображение уровня репутации
По умолчанию

Цитата:
Сообщение от Desperado Посмотреть сообщение
A lot of text
1. Если в условии отсутствует else можно писать:
PHP код:
if($var==$test) echo("Wooow!"); 
2. Забываете про mysql_close или сбиваетесь. Запомните, синтаксис:
PHP код:
bool mysql_close  (***91; resource $link_identifier  ***93; ) 
3. При операциях над файлами забываете проверки на доступность и прочее.
4. Постоянно забываете проверки or die("Blah Blah").
DeusModus вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Старый 09.03.2010, 00:57   #9
DeusModus
Администратор
 
Аватар для DeusModus
 
Регистрация: 07.03.2010
Адрес: Питер.
Сообщений: 69
Сказал(а) спасибо: 66
Поблагодарили 102 раз(а) в 15 сообщениях
Записей в дневнике: 12
DeusModus отключил(а) отображение уровня репутации
По умолчанию

Цитата:
Сообщение от Desperado Посмотреть сообщение
Функция конверта времени из линукса

Код:
function conventNormTime($nSec) { 
     $d = floor( $nSec / (3600*24) ); 
           $nSec = ($nSec - $d * 3600 * 24); 
           $h = floor( $nSec / 3600 ); 
           $nSec = ($nSec - $h * 3600); 
           $m = floor( $nSec / 60 ); 
          return "{$d} д. {$h} ч. {$m} м."; 
    }
А так
PHP код:
function unix_timestamp_to_human ($timestamp ""$format 'D d M Y - H:i:s')
{
    if (empty(
$timestamp) || ! is_numeric($timestamp)) $timestamp time();
    return (
$timestamp) ? date($format$timestamp) : date($format$timestamp);

не проще ли будет?
DeusModus вне форума   Ответить с цитированием
Старый 09.03.2010, 01:06   #10
Desperado
Гость
 
Сообщений: n/a
По умолчанию

1. добавил вывод ошибок подключения мускуля
2. Закрыл во всех скриптах соединение.
3. проверка файлов... мне как бы не нужна была
4. функция вроде и проще, но для понимания всё таки моя нагляднее.
  Ответить с цитированием
Старый 09.03.2010, 01:27   #11
DeusModus
Администратор
 
Аватар для DeusModus
 
Регистрация: 07.03.2010
Адрес: Питер.
Сообщений: 69
Сказал(а) спасибо: 66
Поблагодарили 102 раз(а) в 15 сообщениях
Записей в дневнике: 12
DeusModus отключил(а) отображение уровня репутации
По умолчанию

Цитата:
Сообщение от Desperado Посмотреть сообщение
функция вроде и проще, но для понимания всё таки моя нагляднее.
Хорошо. Вот модификация:
PHP код:
function unix_timestamp_to_human ($timestamp ""$format)
{
    if (empty(
$timestamp) || ! is_numeric($timestamp)) $timestamp time();
    return (
$timestamp) ? date($format$timestamp) : date($format$timestamp);

Пример: echo unix_timestamp_to_human("1234567890",'D d M Y - H:i:s');
На экране: Sat 14 Feb 2009 - 02:31:30
Причем, если это не unixtime, то мы получим текущее время time(), либо по вашему желанию ошибку. Мы можем получить время в любом произвольном формате.

PHP код:
function conventNormTime($nSec) { 
     
$d floor$nSec / (3600*24) ); 
           
$nSec = ($nSec $d 3600 24); 
           
$h floor$nSec 3600 ); 
           
$nSec = ($nSec $h 3600); 
           
$m floor$nSec 60 ); 
          return 
"{$d} д. {$h} ч. {$m} м."
    } 
Пример: echo conventNormTime("1234567890");
На экране: 14288 д. 23 ч. 31 м. (что я делаю не так?)
При неправильном значении выдает 0 д. 0 ч. 0 м.

Да и вообще, почему использовать что-то маленькое и неповоротливое, если есть большое и удобное?
DeusModus вне форума   Ответить с цитированием
Старый 09.03.2010, 01:31   #12
Desperado
Гость
 
Сообщений: n/a
По умолчанию

  Ответить с цитированием
Старый 09.03.2010, 02:13   #13
DeusModus
Администратор
 
Аватар для DeusModus
 
Регистрация: 07.03.2010
Адрес: Питер.
Сообщений: 69
Сказал(а) спасибо: 66
Поблагодарили 102 раз(а) в 15 сообщениях
Записей в дневнике: 12
DeusModus отключил(а) отображение уровня репутации
По умолчанию

Цитата:
Сообщение от Desperado Посмотреть сообщение
Копетан Очевидность подсказывает, что запрос таки неверный
Unixtime 1256631201.
Tue 27 Oct 2009 - 11:13:21 :unix_timestamp_to_human
14544 д. 8 ч. 13 м : conventNormTime

Unixtime 1269591201
Fri 26 Mar 2010 - 11:13:21 :unix_timestamp_to_human
14694 д. 8 ч. 13 м. : conventNormTime

Не время для Капитана Очевидности. Ответьте всё-таки, что же здесь не так?
DeusModus вне форума   Ответить с цитированием
Старый 09.03.2010, 02:25   #14
Desperado
Гость
 
Сообщений: n/a
По умолчанию

Снова чувствуется шёпот из-за угла:

Наверное в том, что текущая дата - не цель существования данного кода.
Его цель - перевод таблицы realmd.uptime в человеческий вид.
Если присмотреться, то в 1 из вышеуказанных скриптов присутсвует данное "явление", не нуждающееся в дополнительных осложнениях.

Можно, конечно, собирать велосипед по чертежам танков, но это уже обсуждения в отдельной теме.

update


Последний раз редактировалось Desperado; 09.03.2010 в 02:36.
  Ответить с цитированием
Старый 09.03.2010, 02:46   #15
DeusModus
Администратор
 
Аватар для DeusModus
 
Регистрация: 07.03.2010
Адрес: Питер.
Сообщений: 69
Сказал(а) спасибо: 66
Поблагодарили 102 раз(а) в 15 сообщениях
Записей в дневнике: 12
DeusModus отключил(а) отображение уровня репутации
По умолчанию

Тьфу вас.
Капитаны и чертержи.
В общем, кто ж знал, что uptime хранит разницу (я уж точно не знал, да и зачем ).

Код:
function unix_timestamp_to_human ($timestamp = "", $format)
{
    if (empty($timestamp) || ! is_numeric($timestamp)) $timestamp = time();
    return ($timestamp) ? date($format, $timestamp) : date($format, $timestamp);
}
function conventNormTime($nSec) { 
     $d = floor( $nSec / (3600*24) ); 
           $nSec = ($nSec - $d * 3600 * 24); 
           $h = floor( $nSec / 3600 ); 
           $nSec = ($nSec - $h * 3600); 
           $m = floor( $nSec / 60 ); 
          return "{$d} д. {$h} ч. {$m} м."; 
    }
$unix_time = "1239441660";
$delta= "4801";
$result=$unix_time+$delta;

echo unix_timestamp_to_human($unix_time,'D d M Y - H:i:s')."-".unix_timestamp_to_human($result,'D d M Y - H:i:s')."<br>"; //Return: Tue 25 Aug 2009 - 14:47:51 
echo conventNormTime($delta);
Спать пора, а то совсем туго с головой становится.
И, да, мы друг друга не поняли.
DeusModus вне форума   Ответить с цитированием
Старый 09.03.2010, 06:53   #16
Madmunus
Это просто он
 
Регистрация: 12.02.2010
Сообщений: 22
Сказал(а) спасибо: 6
Поблагодарили 27 раз(а) в 13 сообщениях
Madmunus На верном пути
По умолчанию

Вот что я использую в своем отдельном проекте:

Последний раз редактировалось Madmunus; 09.03.2010 в 07:07.
Madmunus вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
mozilla (11.03.2010)
Старый 09.03.2010, 08:38   #17
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

DeusModus - я долго въезжал, чего же ты хочешь
Вот компактный красивый код от Chestr'a:
PHP код:
function getTimeText($seconds)
{
  
$text "";
  if (
$seconds >=24*3600) {$text.= intval($seconds/(24*3600))." days"; if ($seconds%=24*3600$text.=" ";}
  if (
$seconds >=   3600) {$text.= intval($seconds/3600)." hours"; if ($seconds%=3600$text.=" ";}
  if (
$seconds >=     60) {$text.= intval($seconds/60)." min"; if ($seconds%=60$text.=" ";}
  if (
$seconds >       0) {$text.= $seconds." sec";}
  return 
$text;

KiriX вне форума   Ответить с цитированием
Старый 09.03.2010, 11:45   #18
DeusModus
Администратор
 
Аватар для DeusModus
 
Регистрация: 07.03.2010
Адрес: Питер.
Сообщений: 69
Сказал(а) спасибо: 66
Поблагодарили 102 раз(а) в 15 сообщениях
Записей в дневнике: 12
DeusModus отключил(а) отображение уровня репутации
По умолчанию

Цитата:
Сообщение от KiriX Посмотреть сообщение
DeusModus - я долго въезжал, чего же ты хочешь
Вот компактный красивый код от Chestr'a:
PHP код:
function getTimeText($seconds)
{
  
$text "";
  if (
$seconds >=24*3600) {$text.= intval($seconds/(24*3600))." days"; if ($seconds%=24*3600$text.=" ";}
  if (
$seconds >=   3600) {$text.= intval($seconds/3600)." hours"; if ($seconds%=3600$text.=" ";}
  if (
$seconds >=     60) {$text.= intval($seconds/60)." min"; if ($seconds%=60$text.=" ";}
  if (
$seconds >       0) {$text.= $seconds." sec";}
  return 
$text;

Тут говорили о unixtime. Я предложил функцию перевода unixtime в нормальное время. Но по невнимательности(да и времени) я не обратил внимания, что в поле uptime хранится дельта.
Благодарности темпуре за пару значений из этой таблицы.
DeusModus вне форума   Ответить с цитированием
Старый 09.03.2010, 15:13   #19
LordJZ
Супер-модератор
 
Аватар для LordJZ
 
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
LordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранита
По умолчанию

Раз уж начали про вывод времени, позвольте продолжить.

Неймспейс для php, используемый для форматирования времени и строк.
PHP код:
<?php

class Format
{
    private function 
__construct(){}

    public function 
Plural($string$value)
    {
        
$arr explode(':'$string);

        
$value abs($value);
        switch(
count($arr))
        {
            case 
1:
                return 
$string;
            case 
2:
            {
                if(
$value && $value 5)
                    return 
$arr***91;0***93;;
                else
                    return 
$arr***91;1***93;;
            }
            case 
3:
            default:
            {
                if(
$value == 1)
                    return 
$arr***91;0***93;;
                elseif(
$value && $value 5)
                    return 
$arr***91;1***93;;
                else
                    return 
$arr***91;2***93;;
            }
        }
    }

    public function 
Simple($b)
    {
        
$args func_get_args();
        for (
$i 1$count count($args); $i $count$i++)
            
$b str_replace('$'.$i$args***91;$i***93;, $b);
        return 
$b;
    }

    
/***************** TIME *****************/

    
private static $TIME_SG = array('год','месяц','неделя','день','час','минута','секунда');
    private static 
$TIME_PL = array(':года:лет',':месяца:месяцев',':недели:недель',':дня:дней',':часа:часов',':минуты:минут',':секунды:секунд');
    private static 
$TIME_AB = array('г','мес','нед','дн','ч','мин','сек');

    private function 
TimeInternal($value$type$small)
    {
        if(
$small)
            return 
$value.' '.self::$TIME_AB***91;$type***93;;
        else
            return 
$value.' '.($value == self::$TIME_SG***91;$type***93; : self::Plural(self::$TIME_PL***91;$type***93;, $value));
    }

    public function 
DTimeSimple($e)
    {
        
//                year      month    week    day    hour  min sec
        
$barriers = array(315576002629800604800864003600601);
        
$a        = array(1,        3,       3,      -1,    5,    -1,-1);
        
$time max($time1);
        
$count count($barriers);
        for(
$current_barrier 3$current_barrier $count; ++$current_barrier)
        {
            if(
$time >= $barriers***91;$current_barrier***93;)
            {
                
$d $current_barrier;
                
$k floor($e $barriers***91;$d***93;);
                if(
$a***91;$d***93; != -1)
                {
                    
$type $a***91;$d***93;;
                    
$time %= $barriers***91;$d***93;;
                    
$j floor($time $barriers***91;$type***93;);
                    if(
$j 0)
                        return 
self::TimeInternal($k$dtrue).' '.self::TimeInternal($j$typetrue);
                }
                return 
self::TimeInternal($k$dfalse);
            }
        }
        return 
'(n/a)';
    }

    public function 
DTimeStrict($time$useSmall true)
    {
        
$time round($time1);
        
$x '';
        
$barriers = array(315576002629800604800864003600601);
        for(
$i 0$i count($barriers); $i++)
        {
            
$barr $barriers***91;$i***93;;

            if(
$time >= $barr)
            {
                
$time2 floor($time $barr);

                if(
$time2 1)
                    continue;

                
$time %= $barr;
                
$x .= self::TimeInternal($time2$i$useSmall).' ';
            }
        }

        return 
trim($x);
    }
}

?>
Описание функций:

Simple Strict Format
Код:
Format::Simple(string $str, ...)
Оно же индексированный sprintf. Заменяет значениями аргументов конструкции $ + индекс аргумента. Т.е. Format::Simple('Two: $2 One: $1', 'one', 'two') => 'Two: two One: one'

Plural Format
Код:
Format::Plural(string $str, unsigned int $value)
Используется при локализации. Превращает коярвый русзкий в настоящий Русский Язык.
  • Format::Plural('год:года:лет', '1') => 'год'
  • Format::Plural('год:года:лет', '3') => 'года'
  • Format::Plural('год:года:лет', '5') => 'лет'

Format Time Delta Simple
Код:
Format::DTimeSimple(unsigned int $time_delta)
Простое, читаемое, но не абсолютно точное отображение времени, обычно используется для дельты. Format:TimeSimple(123) => '2 минуты' (хотя это на самом деле 2 минуты 3 секунды). Будет сокращать слова (минуты -> мин) если (максимум) 2 слова.

Format Time Delta Strict
Код:
Format::DTimeStrict(unsigned int $time_delta, bool $small = true)
Тоже самое что и DTimeSimple, но выводит время точно и поддерживает 2 аргумент для использования сокращенных слов (вкл по-умолчанию).
Код:
Format::DTimeStrict(123, false) => '2 минуты 3 секунды'
Format::DTimeStrict(123) => '2 мин 3 сек'
LordJZ вне форума   Ответить с цитированием
6 пользователя(ей) сказали cпасибо:
DeusModus (09.03.2010), Gen1us2k (09.03.2010), Gerald (11.03.2010), Hantet (17.04.2010), KiriX (10.03.2010), rootor (09.03.2010)
Старый 11.03.2010, 10:48   #20
Pro[100]Hens
Гость
 
Сообщений: n/a
По умолчанию

Скрипт на лист банов.
(по IP и Аккаунтам)

config.php:
PHP код:
$host="localhost"// хост базы REALM
$user="mangos" // пользователь базы REALM
$password="mangos"// пароль базы REALM
$dbr="realmd"// название базы REALM 
bans.php
PHP код:
    <?php
// Скрипт показа забанненных аккаунтов и IP адресов by WoW-Ultimate
require_once "config.php";

//подключение к базе
$ConnectDB mysql_connect("$host""$user""$password") or die ("Нет соединения с MySQL");
mysql_select_db("$dbr") or die ("Нет соединения с базой $dbr");
echo 
"<h2>Забаненные аккаунты</h2>";
echo 
"<table width=\"100%\" border=\"1\" align=\"center\"><tr>
<td align=\"center\" width=\"20%\">забанен:</td>
<td align=\"center\" width=\"20%\">Бан установлен:</td>
<td align=\"center\" width=\"20%\">Забанил:</td>
<td align=\"center\" width=\"20%\">Причина:</td>
<td align=\"center\" width=\"20%\">Бан до:</td>
</tr></table>"
;
$i=0;
$data mysql_query("SELECT * FROM account_banned WHERE active = 1 ORDER BY bandate DESC LIMIT 100",$ConnectDB);
$row mysql_fetch_array($data***91;$i***93;); {
while(
$row mysql_fetch_array($data)) {
$banid $row***91;'id'***93;;
$usern mysql_query("SELECT * FROM account WHERE id= $banid LIMIT 1",$ConnectDB);
$rowuser mysql_fetch_array($usern);
$banuser $rowuser***91;'username'***93;;
$bandate date("H:i:s d.m.Y"$row***91;'bandate'***93;);
$bannedby $row***91;'bannedby'***93;;
$banreason $row***91;'banreason'***93;;
$unbandate date("H:i:s d.m.Y"$row***91;'unbandate'***93;);
echo 
"<font color=\"beer\">
<table width=\"100%\" border=\"1\" align=\"center\"><tr>
<td align=\"center\" width=\"20%\">
$banuser</td>
<td align=\"center\" width=\"20%\">
$bandate г.</td>
<td align=\"center\" width=\"20%\">
$bannedby</td>
<td align=\"center\" width=\"20%\">
$banreason</td>
<td align=\"center\" width=\"20%\">
$unbandate г.</td>
</tr></table></font>"
;
$i++;
}
}
//теперь выборка по IP адресам
echo "<h2>БАНЫ по IP </h2><br>";
echo 
"<table width=\"100%\" border=\"1\" align=\"center\"><tr>
<td align=\"center\" width=\"20%\">IP:</td>
<td align=\"center\" width=\"20%\">Бан установлен:</td>
<td align=\"center\" width=\"20%\">Забанил:</td>
<td align=\"center\" width=\"20%\">Причина:</td>
<td align=\"center\" width=\"20%\">Бан до:</td>
</tr></table>"
;
$u=0;
$bannedip mysql_query("SELECT * FROM ip_banned ORDER BY bandate DESC LIMIT 100");
$row mysql_fetch_array($bannedip***91;$u***93;); {
while(
$row mysql_fetch_array($bannedip)) {

$banip $row***91;'ip'***93;;
$bandate date("H:i:s d.m.Y"$row***91;'bandate'***93;);
$bannedby $row***91;'bannedby'***93;;
$banreason $row***91;'banreason'***93;;
$unbandate date("H:i:s d.m.Y"$row***91;'unbandate'***93;);
echo 
"<font color=\"beer\">
<table width=\"100%\"border=\"1\" align=\"center\"><tr>
<td align=\"center\" width=\"20%\">
$banip</td>
<td align=\"center\" width=\"20%\">
$bandate г.</td>
<td align=\"center\" width=\"20%\">
$bannedby</td>
<td align=\"center\" width=\"20%\">
$banreason</td>
<td align=\"center\" width=\"20%\">
$unbandate г.</td>
</tr></table></font>"
;
$u++;
}
}
?>
  Ответить с цитированием
Старый 11.03.2010, 11:46   #21
mozilla
Новичок
 
Регистрация: 09.03.2010
Сообщений: 12
Сказал(а) спасибо: 4
Поблагодарили 9 раз(а) в 4 сообщениях
mozilla На верном пути
По умолчанию

Дата начисления АП:

PHP код:
$result mysql_query("SELECT * FROM saved_variables WHERE NextArenaPointDistributionTime");
$myrow mysql_fetch_array($result);
$ap $myrow***91;"NextArenaPointDistributionTime"***93;;
echo 
"Распределение АП:<br>";
echo 
date ('d.m.Y H:i:s'$ap); 
То же самое, только таймером обратного отсчета:

PHP код:
$result mysql_query("SELECT * FROM saved_variables WHERE NextArenaPointDistributionTime");
$myrow mysql_fetch_array($result);
$ap $myrow***91;"NextArenaPointDistributionTime"***93;;
$timeleft $ap-time();
function 
getFormatedTime($timeleft)
{
    
$d intval($timeleft 86400);
    if (
$d <= 0)    $d 0;
    
$timeleft $timeleft $d 86400;
    
$h intval($timeleft 3600);
    if (
$h <= 0)    $h 0;
    
$timeleft $timeleft $h 3600;
    
$m intval($timeleft 60);
    if (
$m <= 0)    $m 0;
    
$s $timeleft $m 60;
    if (
$s <= 0)    $s 0;
    if (
$d 0)            return "$d дн. $h ч. $m мин.";
    else if (
$h 0)    return "$h ч. $m мин. $s сек.";
    else if (
$m 0)    return "$m мин. $s сек.";
    else                return 
"$s сек.";
}
echo 
"Распределение АП через:<br>";
echo 
getFormatedTime($timeleft); 

Последний раз редактировалось mozilla; 11.03.2010 в 12:29.
mozilla вне форума   Ответить с цитированием
5 пользователя(ей) сказали cпасибо:
Hantet (17.04.2010), Shadez (11.03.2010), wroud (13.11.2011)
Старый 11.03.2010, 12:45   #22
tempura
Forum bot
 
Аватар для tempura
 
Регистрация: 01.02.2010
Адрес: пусто
Сообщений: 841
Сказал(а) спасибо: 286
Поблагодарили 418 раз(а) в 190 сообщениях
Записей в дневнике: 60
tempura отключил(а) отображение уровня репутации
По умолчанию

Цитата:
Сообщение от Pro[100]Hens Посмотреть сообщение
<font color=\"beer\">
бред сумасшедшего....
__________________
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки.
tempura вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
StinK (11.03.2010)
Старый 11.03.2010, 15:30   #23
kBaTT
Пользователь
 
Регистрация: 07.03.2010
Сообщений: 31
Сказал(а) спасибо: 15
Поблагодарили 4 раз(а) в 3 сообщениях
Записей в дневнике: 1
kBaTT На верном пути
По умолчанию

Решил сделать статистику чести, но не знаю где в data хранятся очки чести (убийства тоже).
Зашел на Wiki мангоса, подходящего не нашел, а может плохо посмотрел.
Если можете подкиньте значения поля Data в таблице Characters.
kBaTT вне форума   Ответить с цитированием
Старый 11.03.2010, 15:47   #24
Feel the Power
Пользователь
 
Аватар для Feel the Power
 
Регистрация: 07.03.2010
Адрес: Беларусь, Минск
Сообщений: 58
Сказал(а) спасибо: 92
Поблагодарили 40 раз(а) в 17 сообщениях
Feel the Power Скоро придёт к известности
Отправить сообщение для Feel the Power с помощью ICQ
По умолчанию

Код:
SELECT `totalHonorPoints` FROM `characters`;
SELECT `totalKills` FROM `characters`;
Feel the Power вне форума   Ответить с цитированием
Старый 11.03.2010, 17:12   #25
kBaTT
Пользователь
 
Регистрация: 07.03.2010
Сообщений: 31
Сказал(а) спасибо: 15
Поблагодарили 4 раз(а) в 3 сообщениях
Записей в дневнике: 1
kBaTT На верном пути
По умолчанию

Цитата:
Сообщение от Feel the Power Посмотреть сообщение
Код:
SELECT `totalHonorPoints` FROM `characters`;
SELECT `totalKills` FROM `characters`;
таких полей нет на 3.2.2 (ядро 9088)
kBaTT вне форума   Ответить с цитированием
Старый 11.03.2010, 17:18   #26
Neggod
RMDC Donator
 
Регистрация: 07.03.2010
Адрес: Суровый Город
Сообщений: 41
Сказал(а) спасибо: 23
Поблагодарили 25 раз(а) в 13 сообщениях
Записей в дневнике: 1
Neggod На верном пути
Отправить сообщение для Neggod с помощью Skype™
По умолчанию

Цитата:
Сообщение от kBaTT Посмотреть сообщение
Решил сделать статистику чести, но не знаю где в data хранятся очки чести (убийства тоже).
Зашел на Wiki мангоса, подходящего не нашел, а может плохо посмотрел.
Если можете подкиньте значения поля Data в таблице Characters.
http://ytdb.ru/showthread.php?t=653
Neggod вне форума   Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
kBaTT (11.03.2010), tempura (11.03.2010)
Старый 11.03.2010, 17:41   #27
mozilla
Новичок
 
Регистрация: 09.03.2010
Сообщений: 12
Сказал(а) спасибо: 4
Поблагодарили 9 раз(а) в 4 сообщениях
mozilla На верном пути
По умолчанию

Выводит гуид, имя и хонор 100 персов
PHP код:
SELECT `guid`, `name`, CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' '1278), ' ', -1) AS UNSIGNED) AS `honorFROM `charactersORDER BY `honorDESC LIMIT 0,100
А так, обновляй серв, и будет у тебя
PHP код:
SELECT `totalHonorPointsFROM `characters`; 
mozilla вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
kBaTT (11.03.2010)
Старый 11.03.2010, 21:41   #28
Desperado
Гость
 
Сообщений: n/a
По умолчанию

Скриптик вывода запрщённых спелов.
Так как в базе я не нашёл названий спелов, а парсить - создавать лишний геморой, решил немного схитрить: взял названия из оружейной уважаемого Шадеза. В принципе, суть ясна и каждый может сделать по-своему.

Также, как и большинство моих наработок записывает данные в текстовый файл для последующего парсинга. Для минимально знающего человека переделать под свои нужды не составит труда

Код:
<?php
 require_once ('includes/config.php');
             $sMySql = mysql_connect($host, $user, $passw) or die("Невозможно подключиться к базе данных : " . mysql_error());
             mysql_query('SET  character_set_database  =  cp1251'); 
             mysql_query('SET  NAMES  cp1251');  			 
			 $content = mysql_query ("select sp.SpellName_ru_ru, id
                                      from armory.armory_spell sp
                                      join mangos.spell_disabled sd ON sp.id = sd.entry
                                      where sd.active = 1 or sd.ischeat_spell = 1");
				  	    // строим таблицу
       $szTable = '<table border="1" align="center">';
	   $szTable .= '<tr><td align="center">Название</td></tr>'; 
	   
	while ($row = mysql_fetch_array($content))                          
                            {	
							$SpellName_ru_ru = $row['SpellName_ru_ru'];
							$Spellid = $row['id'];
							
	   $szTable .= '<tr><td align="center"><a href = "http://www.wowhead.com/?spell='.$Spellid.'" target = "_blank">'.$SpellName_ru_ru.'</a></td>';
	  	                        }
	   $szTable .= '</table>';
       $szTable .= '<br>';
	   $szTable .= '<br>';	   
       $szTable .= '<div align="center"><font size="1">Список запрещённых заклинаний обновляется раз в 24 часа</font></div>';	   
	   
	$handler = fopen("spells.txt", "w+");
    fwrite($handler, $szTable);
    fclose($handler);
	mysql_close($sMySql);    
?>

Последний раз редактировалось Desperado; 11.03.2010 в 21:43.
  Ответить с цитированием
Старый 13.03.2010, 19:01   #29
Keni
Гость
 
Сообщений: n/a
По умолчанию

Цитата:
Сообщение от Yoda Посмотреть сообщение
Аптайм:
PHP код:
<?
mysql_select_db 
("$mdb");
$uptime mysql_query ("select max(`starttime`) from `uptime`");
$uptime time()-mysql_result ($uptime,0);
$sec $uptime%60;
$uptime intval ($uptime/60);
$min $uptime%60;
$uptime intval ($uptime/60);
$hours $uptime;
echo 
"Uptime: $hours h $min min $sec sec<br>";
?>
Таблицу аптайма перенесли в реалмд
PHP код:
<?
mysql_select_db 
("$rdb");
$uptime mysql_query ("select max(`starttime`) from `uptime`");
$uptime time()-mysql_result ($uptime,0);
$sec $uptime%60;
$uptime intval ($uptime/60);
$min $uptime%60;
$uptime intval ($uptime/60);
$hours $uptime;
echo 
"Uptime: $hours h $min min $sec sec<br>";
?>
  Ответить с цитированием
Старый 19.03.2010, 19:10   #30
Keni
Гость
 
Сообщений: n/a
По умолчанию

Цитата:
Сообщение от Pro[100]Hens Посмотреть сообщение
Скрипт на лист банов.
(по IP и Аккаунтам)

config.php:
PHP код:
$host="localhost"// хост базы REALM
$user="mangos" // пользователь базы REALM
$password="mangos"// пароль базы REALM
$dbr="realmd"// название базы REALM 
bans.php
PHP код:
    <?php
// Скрипт показа забанненных аккаунтов и IP адресов by WoW-Ultimate
require_once "config.php";

//подключение к базе
$ConnectDB mysql_connect("$host""$user""$password") or die ("Нет соединения с MySQL");
mysql_select_db("$dbr") or die ("Нет соединения с базой $dbr");
echo 
"<h2>Забаненные аккаунты</h2>";
echo 
"<table width=\"100%\" border=\"1\" align=\"center\"><tr>
<td align=\"center\" width=\"20%\">забанен:</td>
<td align=\"center\" width=\"20%\">Бан установлен:</td>
<td align=\"center\" width=\"20%\">Забанил:</td>
<td align=\"center\" width=\"20%\">Причина:</td>
<td align=\"center\" width=\"20%\">Бан до:</td>
</tr></table>"
;
$i=0;
$data mysql_query("SELECT * FROM account_banned WHERE active = 1 ORDER BY bandate DESC LIMIT 100",$ConnectDB);
$row mysql_fetch_array($data***91;$i***93;); {
while(
$row mysql_fetch_array($data)) {
$banid $row***91;'id'***93;;
$usern mysql_query("SELECT * FROM account WHERE id= $banid LIMIT 1",$ConnectDB);
$rowuser mysql_fetch_array($usern);
$banuser $rowuser***91;'username'***93;;
$bandate date("H:i:s d.m.Y"$row***91;'bandate'***93;);
$bannedby $row***91;'bannedby'***93;;
$banreason $row***91;'banreason'***93;;
$unbandate date("H:i:s d.m.Y"$row***91;'unbandate'***93;);
echo 
"<font color=\"beer\">
<table width=\"100%\" border=\"1\" align=\"center\"><tr>
<td align=\"center\" width=\"20%\">
$banuser</td>
<td align=\"center\" width=\"20%\">
$bandate г.</td>
<td align=\"center\" width=\"20%\">
$bannedby</td>
<td align=\"center\" width=\"20%\">
$banreason</td>
<td align=\"center\" width=\"20%\">
$unbandate г.</td>
</tr></table></font>"
;
$i++;
}
}
//теперь выборка по IP адресам
echo "<h2>БАНЫ по IP </h2><br>";
echo 
"<table width=\"100%\" border=\"1\" align=\"center\"><tr>
<td align=\"center\" width=\"20%\">IP:</td>
<td align=\"center\" width=\"20%\">Бан установлен:</td>
<td align=\"center\" width=\"20%\">Забанил:</td>
<td align=\"center\" width=\"20%\">Причина:</td>
<td align=\"center\" width=\"20%\">Бан до:</td>
</tr></table>"
;
$u=0;
$bannedip mysql_query("SELECT * FROM ip_banned ORDER BY bandate DESC LIMIT 100");
$row mysql_fetch_array($bannedip***91;$u***93;); {
while(
$row mysql_fetch_array($bannedip)) {

$banip $row***91;'ip'***93;;
$bandate date("H:i:s d.m.Y"$row***91;'bandate'***93;);
$bannedby $row***91;'bannedby'***93;;
$banreason $row***91;'banreason'***93;;
$unbandate date("H:i:s d.m.Y"$row***91;'unbandate'***93;);
echo 
"<font color=\"beer\">
<table width=\"100%\"border=\"1\" align=\"center\"><tr>
<td align=\"center\" width=\"20%\">
$banip</td>
<td align=\"center\" width=\"20%\">
$bandate г.</td>
<td align=\"center\" width=\"20%\">
$bannedby</td>
<td align=\"center\" width=\"20%\">
$banreason</td>
<td align=\"center\" width=\"20%\">
$unbandate г.</td>
</tr></table></font>"
;
$u++;
}
}
?>
Код:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource
Ошибка вылазит=\
  Ответить с цитированием
Старый 19.03.2010, 20:56   #31
DeusModus
Администратор
 
Аватар для DeusModus
 
Регистрация: 07.03.2010
Адрес: Питер.
Сообщений: 69
Сказал(а) спасибо: 66
Поблагодарили 102 раз(а) в 15 сообщениях
Записей в дневнике: 12
DeusModus отключил(а) отображение уровня репутации
По умолчанию

Цитата:
Сообщение от Keni Посмотреть сообщение
Код:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource
Ошибка вылазит=\

Ищем

А вообще подобные проблемы возникают из за нежелания пользователей включать error_reporting в E_ALL и *нописателей включать конструкции OR DIE().
Дебажить подобную хрень удовольствия никакого.
DeusModus вне форума   Ответить с цитированием
Старый 26.03.2010, 21:31   #32
StinK
RMDC Donator
 
Аватар для StinK
 
Регистрация: 07.03.2010
Сообщений: 78
Сказал(а) спасибо: 48
Поблагодарили 32 раз(а) в 7 сообщениях
StinK На верном пути
По умолчанию

Как высчитать положение игрока? Ну т.е. локацию, где он находится.
StinK вне форума   Ответить с цитированием
Старый 26.03.2010, 22:19   #33
Shadez
Ученый
 
Аватар для Shadez
 
Регистрация: 07.03.2010
Сообщений: 175
Сказал(а) спасибо: 64
Поблагодарили 142 раз(а) в 45 сообщениях
Shadez Обладатель прекрасной аурыShadez Обладатель прекрасной ауры
Отправить сообщение для Shadez с помощью ICQ
По умолчанию

`characters`.`zone`. Названия зон - в AreaTable.dbc
Shadez вне форума   Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
Hantet (17.04.2010), StinK (11.04.2010)
Старый 11.04.2010, 20:58   #34
StinK
RMDC Donator
 
Аватар для StinK
 
Регистрация: 07.03.2010
Сообщений: 78
Сказал(а) спасибо: 48
Поблагодарили 32 раз(а) в 7 сообщениях
StinK На верном пути
По умолчанию

Цитата:
Сообщение от Shadez Посмотреть сообщение
`characters`.`zone`. Названия зон - в AreaTable.dbc
А как перегнать всё к виду 1 => DunMorogh?
-----------
Ага, придумал! Перегнал AreaTable.dbc в sql, залил куда пологается и выбрал значения из field1(номер локации) и field12/field20(название локации), поставив между ними =>. И потом через браузер всё это дело выделил и скопировал в блокнот
Кому нужен весь список зон для 3.3.2 - забирайте!
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.jpg
Просмотров: 767
Размер:	233.4 Кб
ID:	278  
Вложения
Тип файла: txt zone_3.3.2_ru.txt (57.9 Кб, 915 просмотров)
Тип файла: txt zone_3.3.2_en.txt (55.7 Кб, 889 просмотров)
__________________
ModSpora: Web-Interface for MaNGOS
WoW и MaNGOS больше не моя стихия...

Последний раз редактировалось StinK; 11.04.2010 в 21:22.
StinK вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Hantet (17.04.2010)
Старый 12.04.2010, 18:02   #35
Праведник
Пользователь
 
Регистрация: 27.03.2010
Сообщений: 80
Сказал(а) спасибо: 12
Поблагодарили 25 раз(а) в 13 сообщениях
Праведник На верном пути
По умолчанию

Цитата:
Сообщение от DeusModus Посмотреть сообщение
20 запросов к БД.. Ассоциативные массивы автору сего чуда были неведомы.

А как всёже правильно будет вывести статистику по количеству игроков каждого класса? Что-то не особо выходит не плодя десятки запросов...
Праведник вне форума   Ответить с цитированием
Старый 12.04.2010, 18:24   #36
StinK
RMDC Donator
 
Аватар для StinK
 
Регистрация: 07.03.2010
Сообщений: 78
Сказал(а) спасибо: 48
Поблагодарили 32 раз(а) в 7 сообщениях
StinK На верном пути
По умолчанию

Думаю поможет http://pranivpro.narod.ru/PHP/array.htm
__________________
ModSpora: Web-Interface for MaNGOS
WoW и MaNGOS больше не моя стихия...
StinK вне форума   Ответить с цитированием
Старый 12.04.2010, 19:08   #37
saint diablo
Гость
 
Сообщений: n/a
По умолчанию

Цитата:
Сообщение от Праведник Посмотреть сообщение
А как всёже правильно будет вывести статистику по количеству игроков каждого класса? Что-то не особо выходит не плодя десятки запросов...
интересно, а через group by не получится??
просто мне как-то не доставляет удовольствия прогонять один и тот же запрос в цикле 10 раз
  Ответить с цитированием
Старый 12.04.2010, 19:36   #38
ghostpast
Пользователь
 
Регистрация: 07.03.2010
Сообщений: 46
Сказал(а) спасибо: 11
Поблагодарили 17 раз(а) в 11 сообщениях
ghostpast На верном пути
По умолчанию

Цитата:
Сообщение от StinK Посмотреть сообщение
А как перегнать всё к виду 1 => DunMorogh?
-----------
Ага, придумал! Перегнал AreaTable.dbc в sql, залил куда пологается и выбрал значения из field1(номер локации) и field12/field20(название локации), поставив между ними =>. И потом через браузер всё это дело выделил и скопировал в блокнот
Кому нужен весь список зон для 3.3.2 - забирайте!
зачем так извращаться то?
Достаточно AreaTable.dbc перевести в SQL (например таблица area с полями id и name), а потом написать запрос.

Запрос для получения списка персонажей и названия зон, в которых они находятся:

SELECT characters.name, area.name
FROM area, characters
WHERE characters.zone = area.id;


Запрос для получения списка зон:

SELECT id, name
FROM area;


Результат запроса обрабатывать функцией mysql_fetch_array(), которая вернет готовый ассоциативный массив

Цитата:
Сообщение от saint diablo Посмотреть сообщение
интересно, а через group by не получится??
просто мне как-то не доставляет удовольствия прогонять один и тот же запрос в цикле 10 раз
получится, если грамотно запрос писать

Последний раз редактировалось ghostpast; 12.04.2010 в 19:44.
ghostpast вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
StinK (12.04.2010)
Старый 12.04.2010, 20:16   #39
StinK
RMDC Donator
 
Аватар для StinK
 
Регистрация: 07.03.2010
Сообщений: 78
Сказал(а) спасибо: 48
Поблагодарили 32 раз(а) в 7 сообщениях
StinK На верном пути
По умолчанию

Цитата:
Сообщение от ghostpast Посмотреть сообщение
зачем так извращаться то?
Достаточно AreaTable.dbc перевести в SQL (например таблица area с полями id и name), а потом написать запрос.

Запрос для получения списка персонажей и названия зон, в которых они находятся:

SELECT characters.name, area.name
FROM area, characters
WHERE characters.zone = area.id;


Запрос для получения списка зон:

SELECT id, name
FROM area;


Результат запроса обрабатывать функцией mysql_fetch_array(), которая вернет готовый ассоциативный массив
Учту на будущее. Но на тот момент как придумал, так и сделал
Да и зачем лишний раз обращаться к БД?
__________________
ModSpora: Web-Interface for MaNGOS
WoW и MaNGOS больше не моя стихия...
StinK вне форума   Ответить с цитированием
Старый 12.04.2010, 20:44   #40
ghostpast
Пользователь
 
Регистрация: 07.03.2010
Сообщений: 46
Сказал(а) спасибо: 11
Поблагодарили 17 раз(а) в 11 сообщениях
ghostpast На верном пути
По умолчанию

Цитата:
Сообщение от StinK Посмотреть сообщение
Да и зачем лишний раз обращаться к БД?
можно сделать кеширование результатов запроса и обновлять кеш через определенное время
ghostpast вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрипты для Фан сервера xstream Патчи и наработки 11 15.09.2010 13:10
Blizzard отсудила у игрового сайта $88 млн за нелегальный сервер WoW ispanec Флудильня 11 30.08.2010 00:37
ScriptDev скрипты на C#? jesst3r Скрипты 4 03.08.2010 17:58
Мои скрипты под FreeBSD 8.0 FreeBSD Tools 4 14.05.2010 05:35
Скрипты и прочее (vbs, batch, shell) Konctantin Языки программирования 0 06.03.2010 12:17


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


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot