Просмотр полной версии : Скрипты для сайта.
Config.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"; // База персонажей
?>
Подключение к Базе данных:
<?
require_once ('config.php');
mysql_connect ("$dbip:$dbport","$dblogin","$dbpass");
?>
Количество созданных аккаунтов, количество по фракциям, количество гильдий:
<?
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>";
?>
Статус сервера:
<?
$fp = @fsockopen ("$ip","$gameport",$errno,$errstr,1);
if ($fp)
echo "Server: online><br>";
else
echo "Server: offline><br>";
?>
Игроки он-лайн:
<?
mysql_selectdb ("$cdb");
$online = mysql_query ("select count(`guid`) from `characters` where `online` = 1");
$online = mysql_result ($online,0);
echo "Players Online: $online<br>";
?>
Аптайм:
<?
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>";
?>
Статистика по расам и классам:
<?
mysql_selectdb("$cdb");
$human = mysql_query ("select count(`guid`) from `characters` where `race` = 1");
$human = mysql_result ($human,0);
$dwarv = mysql_query ("select count(`guid`) from `characters` where `race` = 3");
$dwarv = mysql_result ($dwarv,0);
$night = mysql_query ("select count(`guid`) from `characters` where `race` = 4");
$night = mysql_result ($night,0);
$gnome = mysql_query ("select count(`guid`) from `characters` where `race` = 7");
$gnome = mysql_result ($gnome,0);
$draenei = mysql_query ("select count(`guid`) from `characters` where `race` = 11");
$draenei = mysql_result ($draenei,0);
$orc = mysql_query ("select count(`guid`) from `characters` where `race` = 2");
$orc = mysql_result ($orc,0);
$undead = mysql_query ("select count(`guid`) from `characters` where `race` = 5");
$undead = mysql_result ($undead,0);
$tauren = mysql_query ("select count(`guid`) from `characters` where `race` = 6");
$tauren = mysql_result ($tauren,0);
$troll = mysql_query ("select count(`guid`) from `characters` where `race` = 8");
$troll = mysql_result ($troll,0);
$blood = mysql_query ("select count(`guid`) from `characters` where `race` = 10");
$blood = mysql_result ($blood,0);
$druid = mysql_query ("select count(`guid`) from `characters` where `class` = 11");
$druid = mysql_result ($druid,0);
$hunter = mysql_query ("select count(`guid`) from `characters` where `class` = 3");
$hunter = mysql_result ($hunter,0);
$mage = mysql_query ("select count(`guid`) from `characters` where `class` = 8");
$mage = mysql_result ($mage,0);
$paladin = mysql_query ("select count(`guid`) from `characters` where `class` = 2");
$paladin = mysql_result ($paladin,0);
$priest = mysql_query ("select count(`guid`) from `characters` where `class` = 5");
$priest = mysql_result ($priest,0);
$rogue = mysql_query ("select count(`guid`) from `characters` where `class` = 4");
$rogue = mysql_result ($rogue,0);
$shaman = mysql_query ("select count(`guid`) from `characters` where `class` = 7");
$shaman = mysql_result ($shaman,0);
$warlock = mysql_query ("select count(`guid`) from `characters` where `class` = 9");
$warlock = mysql_result ($warlock,0);
$warrior = mysql_query ("select count(`guid`) from `characters` where `class` = 1");
$warrior = mysql_result ($warrior,0);
$death = mysql_query ("select count(`guid`) from `characters` where `class` = 6");
$death = mysql_result ($death,0);
echo "Humans: $human<br>";
echo "Dwarves: $dwarv<br>";
echo "Night Elves: $night<br>";
echo "Gnomes: $gnome<br>";
echo "Draenei: $draenei<br>";
echo "Orcs: $orc<br>";
echo "Undead: $undead<br>";
echo "Tauren: $tauren<br>";
echo "Trolls: $troll<br>";
echo "Blood Elves: $blood<br><br>";
echo "Druid: $druid<br>";
echo "Hunter: $hunter<br>";
echo "Mage: $mage<br>";
echo "Paladin: $paladin<br>";
echo "Priest: $priest<br>";
echo "Rogue: $rogue<br>";
echo "Shaman: $shaman<br>";
echo "Warlock: $warlock<br>";
echo "Warrior: $warrior<br>";
echo "Death Knight: $death<br>";
?>
Тема с mangos.ru, автора не помню...
Madmunus
07.03.2010, 17:05
последний скрипт убийственный)
DeusModus
07.03.2010, 17:32
последний скрипт убийственный)
20 запросов к БД.. Ассоциативные массивы автору сего чуда были неведомы.
Madmunus
07.03.2010, 18:02
20 запросов к БД.. Ассоциативные массивы автору сего чуда были неведомы.
Да я тож так подумал =)))
Madmunus
08.03.2010, 20:16
Вот очень хороший скриптик на js, очень полезен для создания админки, для любого сайта.
.:: Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 5 сообщение(ий)) ::.
Madmunus
08.03.2010, 20:34
Понимаю что не намного лучше но все таки:
mysql_selectdb("$cdb");
$races = array (
'Humans' => 1,
'Orcs' => 2,
'Dwarves' => 3,
'Night Elves' => 4,
'Undeads' => 5,
'Taurens' => 6,
'Gnomes' => 7,
'Trolls' => 8,
'Blood Elves' => 10,
'Draeneis' => 11
);
$classes = array (
'Warriors' => 1,
'Paladins' => 2,
'Hunters' => 3,
'Rogues' => 4,
'Priests' => 5,
'Death Knights' => 6,
'Shamans' => 7,
'Mages' => 8,
'Warlocks' => 9,
'Druids' => 11
);
$c_race = array();
$c_class = array();
foreach ($races as $key => $value)
{
$q = mysql_query ("SELECT COUNT(`guid`) FROM `characters` WHERE `race` = '$value'");
$c_race[$key] = mysql_result ($q, 0)
}
foreach ($classes as $key => $value)
{
$q = mysql_query ("SELECT COUNT(`guid`) FROM `characters` WHERE `class` = '$value'");
$c_class[$key] = mysql_result ($q, 0)
}
echo "Races<br>";
foreach ($c_race as $key => $value)
echo "$key: $value<br>";
echo "Classes<br>";
foreach ($c_class as $key => $value)
echo "$key: $value<br>";
Desperado
09.03.2010, 00:27
Гейм мастера онлайн
<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} м.";
}
DeusModus
09.03.2010, 00:48
A lot of text
1. Если в условии отсутствует else можно писать:
if($var==$test) echo("Wooow!");
2. Забываете про mysql_close или сбиваетесь. Запомните, синтаксис:
bool mysql_close ([ resource $link_identifier ] )
3. При операциях над файлами забываете проверки на доступность и прочее.
4. Постоянно забываете проверки or die("Blah Blah").
DeusModus
09.03.2010, 00:57
Функция конверта времени из линукса
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} м.";
}
А так
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);
}
не проще ли будет?
Desperado
09.03.2010, 01:06
1. добавил вывод ошибок подключения мускуля
2. Закрыл во всех скриптах соединение.
3. проверка файлов... мне как бы не нужна была :)
4. функция вроде и проще, но для понимания всё таки моя нагляднее.
DeusModus
09.03.2010, 01:27
функция вроде и проще, но для понимания всё таки моя нагляднее.
Хорошо. Вот модификация:
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(), либо по вашему желанию ошибку. Мы можем получить время в любом произвольном формате.
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 м.
Да и вообще, почему использовать что-то маленькое и неповоротливое, если есть большое и удобное (http://php.net/manual/en/function.date.php)?
Desperado
09.03.2010, 01:31
На экране: 14288 д. 23 ч. 31 м. (что я делаю не так?)
Копетан Очевидность подсказывает, что запрос таки неверный :)
DeusModus
09.03.2010, 02:13
Копетан Очевидность подсказывает, что запрос таки неверный :)
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
Не время для Капитана Очевидности. Ответьте всё-таки, что же здесь не так?
Desperado
09.03.2010, 02:25
Снова чувствуется шёпот из-за угла:
Наверное в том, что текущая дата - не цель существования данного кода.
Его цель - перевод таблицы realmd.uptime в человеческий вид.
Если присмотреться, то в 1 из вышеуказанных скриптов присутсвует данное "явление", не нуждающееся в дополнительных осложнениях.
Можно, конечно, собирать велосипед по чертежам танков, но это уже обсуждения в отдельной теме.
update
Gerald (02:29:58 9/03/2010)
блин, да Вы друг друга просто не поняли)) он не спрашивал суть скрипта, он просил подсказать функцию перевода формата времени юникс в обычный нормальный формат... стыдно, могли бы и подсказать человеку!
уйду в монастырь... то есть спать. вставать через 4 часа :)
завтра продолжим)
DeusModus
09.03.2010, 02:46
Тьфу вас.
Капитаны и чертержи.
В общем, кто ж знал, что 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);
Спать пора, а то совсем туго с головой становится.
И, да, мы друг друга не поняли.
Madmunus
09.03.2010, 06:53
Вот что я использую в своем отдельном проекте:
/*Получение отформатированного времени*/
function getFormatedTime ($timestamp)
{
if (!is_numeric($timestamp)) $timestamp = time();
$time = $timestamp - time();
$d = floor ($time / 86400);
if ($d <= 0) $d = 0;
$time = $time - $d * 86400;
$h = floor ($time / 3600);
if ($h <= 0) $h = 0;
$time = $time - $h * 3600;
$m = floor ($time / 60);
if ($m <= 0) $m = 0;
$s = $time - $m * 60;
if ($s <= 0) $s = 0;
if ($d > 0) return "$d дн. $h ч.";
else if ($h > 0) return "$h ч. $m мин.";
else if ($m > 0) return "$m мин. $s сек.";
else return "$s сек.";
}
DeusModus - я долго въезжал, чего же ты хочешь =)))
Вот компактный красивый код от Chestr'a:
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;
}
DeusModus
09.03.2010, 11:45
DeusModus - я долго въезжал, чего же ты хочешь =)))
Вот компактный красивый код от Chestr'a:
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 хранится дельта.
Благодарности темпуре за пару значений из этой таблицы.
Раз уж начали про вывод времени, позвольте продолжить.
Неймспейс для 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 > 1 && $value < 5)
return $arr[0];
else
return $arr[1];
}
case 3:
default:
{
if($value == 1)
return $arr[0];
elseif($value > 1 && $value < 5)
return $arr[1];
else
return $arr[2];
}
}
}
public function Simple($b)
{
$args = func_get_args();
for ($i = 1, $count = count($args); $i < $count; $i++)
$b = str_replace('$'.$i, $args[$i], $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[$type];
else
return $value.' '.($value == 1 ? self::$TIME_SG[$type] : self::Plural(self::$TIME_PL[$type], $value));
}
public function DTimeSimple($e)
{
// year month week day hour min sec
$barriers = array(31557600, 2629800, 604800, 86400, 3600, 60, 1);
$a = array(1, 3, 3, -1, 5, -1,-1);
$time = max($time, 1);
$count = count($barriers);
for($current_barrier = 3; $current_barrier < $count; ++$current_barrier)
{
if($time >= $barriers[$current_barrier])
{
$d = $current_barrier;
$k = floor($e / $barriers[$d]);
if($a[$d] != -1)
{
$type = $a[$d];
$time %= $barriers[$d];
$j = floor($time / $barriers[$type]);
if($j > 0)
return self::TimeInternal($k, $d, true).' '.self::TimeInternal($j, $type, true);
}
return self::TimeInternal($k, $d, false);
}
}
return '(n/a)';
}
public function DTimeStrict($time, $useSmall = true)
{
$time = round($time, 1);
$x = '';
$barriers = array(31557600, 2629800, 604800, 86400, 3600, 60, 1);
for($i = 0; $i < count($barriers); $i++)
{
$barr = $barriers[$i];
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::DTimeSimple(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 сек'
Pro[100]Hens
11.03.2010, 10:48
Скрипт на лист банов.
(по IP и Аккаунтам)
config.php:
$host="localhost"; // хост базы REALM
$user="mangos" ; // пользователь базы REALM
$password="mangos"; // пароль базы REALM
$dbr="realmd"; // название базы REALM
bans.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[$i]); {
while($row = mysql_fetch_array($data)) {
$banid = $row['id'];
$usern = mysql_query("SELECT * FROM account WHERE id= $banid LIMIT 1",$ConnectDB);
$rowuser = mysql_fetch_array($usern);
$banuser = $rowuser['username'];
$bandate = date("H:i:s d.m.Y", $row['bandate']);
$bannedby = $row['bannedby'];
$banreason = $row['banreason'];
$unbandate = date("H:i:s d.m.Y", $row['unbandate']);
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[$u]); {
while($row = mysql_fetch_array($bannedip)) {
$banip = $row['ip'];
$bandate = date("H:i:s d.m.Y", $row['bandate']);
$bannedby = $row['bannedby'];
$banreason = $row['banreason'];
$unbandate = date("H:i:s d.m.Y", $row['unbandate']);
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++;
}
}
?>
Дата начисления АП:
$result = mysql_query("SELECT * FROM saved_variables WHERE NextArenaPointDistributionTime");
$myrow = mysql_fetch_array($result);
$ap = $myrow["NextArenaPointDistributionTime"];
echo "Распределение АП:<br>";
echo date ('d.m.Y H:i:s', $ap);
То же самое, только таймером обратного отсчета:
$result = mysql_query("SELECT * FROM saved_variables WHERE NextArenaPointDistributionTime");
$myrow = mysql_fetch_array($result);
$ap = $myrow["NextArenaPointDistributionTime"];
$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);
Hens;1297']<font color=\"beer\"> бред сумасшедшего....
Решил сделать статистику чести, но не знаю где в data хранятся очки чести (убийства тоже).
Зашел на Wiki мангоса, подходящего не нашел, а может плохо посмотрел.
Если можете подкиньте значения поля Data в таблице Characters.
Feel the Power
11.03.2010, 15:47
SELECT `totalHonorPoints` FROM `characters`;
SELECT `totalKills` FROM `characters`;
SELECT `totalHonorPoints` FROM `characters`;
SELECT `totalKills` FROM `characters`;
таких полей нет на 3.2.2 (ядро 9088)
Решил сделать статистику чести, но не знаю где в data хранятся очки чести (убийства тоже).
Зашел на Wiki мангоса, подходящего не нашел, а может плохо посмотрел.
Если можете подкиньте значения поля Data в таблице Characters.
http://ytdb.ru/showthread.php?t=653
Выводит гуид, имя и хонор 100 персов
SELECT `guid`, `name`, CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ', 1278), ' ', -1) AS UNSIGNED) AS `honor` FROM `characters` ORDER BY `honor` DESC LIMIT 0,100;
А так, обновляй серв, и будет у тебя
SELECT `totalHonorPoints` FROM `characters`;
Desperado
11.03.2010, 21:41
Скриптик вывода запрщённых спелов.
Так как в базе я не нашёл названий спелов, а парсить - создавать лишний геморой, решил немного схитрить: взял названия из оружейной уважаемого Шадеза. В принципе, суть ясна и каждый может сделать по-своему.
Также, как и большинство моих наработок записывает данные в текстовый файл для последующего парсинга. Для минимально знающего человека переделать под свои нужды не составит труда
<?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);
?>
Аптайм:
<?
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>";
?>
Таблицу аптайма перенесли в реалмд
<?
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>";
?>
Hens;1297']Скрипт на лист банов.
(по IP и Аккаунтам)
config.php:
$host="localhost"; // хост базы REALM
$user="mangos" ; // пользователь базы REALM
$password="mangos"; // пароль базы REALM
$dbr="realmd"; // название базы REALM
bans.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[$i]); {
while($row = mysql_fetch_array($data)) {
$banid = $row['id'];
$usern = mysql_query("SELECT * FROM account WHERE id= $banid LIMIT 1",$ConnectDB);
$rowuser = mysql_fetch_array($usern);
$banuser = $rowuser['username'];
$bandate = date("H:i:s d.m.Y", $row['bandate']);
$bannedby = $row['bannedby'];
$banreason = $row['banreason'];
$unbandate = date("H:i:s d.m.Y", $row['unbandate']);
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[$u]); {
while($row = mysql_fetch_array($bannedip)) {
$banip = $row['ip'];
$bandate = date("H:i:s d.m.Y", $row['bandate']);
$bannedby = $row['bannedby'];
$banreason = $row['banreason'];
$unbandate = date("H:i:s d.m.Y", $row['unbandate']);
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
Ошибка вылазит=\
DeusModus
19.03.2010, 20:56
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource
Ошибка вылазит=\
Ищем (http://www.google.ru/search?q=%22+supplied+argument+is+not+a+valid+MySQ L+result+resource%22)
А вообще подобные проблемы возникают из за нежелания пользователей включать error_reporting в E_ALL и *нописателей включать конструкции OR DIE().
Дебажить подобную хрень удовольствия никакого.
Как высчитать положение игрока? Ну т.е. локацию, где он находится.
`characters`.`zone`. Названия зон - в AreaTable.dbc
`characters`.`zone`. Названия зон - в AreaTable.dbc
А как перегнать всё к виду 1 => DunMorogh?
-----------
Ага, придумал! Перегнал AreaTable.dbc в sql, залил куда пологается и выбрал значения из field1(номер локации) и field12/field20(название локации), поставив между ними =>. И потом через браузер всё это дело выделил и скопировал в блокнот :)
Кому нужен весь список зон для 3.3.2 - забирайте!
Праведник
12.04.2010, 18:02
20 запросов к БД.. Ассоциативные массивы автору сего чуда были неведомы.
А как всёже правильно будет вывести статистику по количеству игроков каждого класса? Что-то не особо выходит не плодя десятки запросов...
Думаю поможет http://pranivpro.narod.ru/PHP/array.htm
saint diablo
12.04.2010, 19:08
А как всёже правильно будет вывести статистику по количеству игроков каждого класса? Что-то не особо выходит не плодя десятки запросов...
интересно, а через group by не получится??
просто мне как-то не доставляет удовольствия прогонять один и тот же запрос в цикле 10 раз
ghostpast
12.04.2010, 19:36
А как перегнать всё к виду 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(), которая вернет готовый ассоциативный массив
интересно, а через group by не получится??
просто мне как-то не доставляет удовольствия прогонять один и тот же запрос в цикле 10 раз
получится, если грамотно запрос писать
зачем так извращаться то?
Достаточно 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(), которая вернет готовый ассоциативный массив
Учту на будущее. Но на тот момент как придумал, так и сделал :pardon:
Да и зачем лишний раз обращаться к БД?
ghostpast
12.04.2010, 20:44
Да и зачем лишний раз обращаться к БД?
можно сделать кеширование результатов запроса и обновлять кеш через определенное время
Уже который час голову ломаю, что не так. Нужно авторизироваться, а не получается. Вот мой говнокод, что там не так?
//выше кнопка и коннект, ошибка где-то ниже
if(isset($_POST['submit']))
{
$login = $_POST['login'];
$password = $_POST['password'];
$shapass = SHA1(strtoupper($_POST['$login']).':'.strtoupper($_POST['$password']));
$query = "SELECT username, sha_pass_hash FROM account WHERE username = '$login' AND sha_pass_hash = '$shapass' LIMIT 1";
$sql = mysql_query($query) or die(mysql_error());
if (mysql_num_rows($sql) == 1)
include("modules/cp.php");
else
echo 'Ошибка авторизации';
}
$_POST['$login'] $_POST['$password']
$ зачем? :-)
PS экранизация кавычек POST-запроса, надеюсь, проходит?)
ghostpast
17.04.2010, 06:20
Уже который час голову ломаю, что не так. Нужно авторизироваться, а не получается. Вот мой говнокод, что там не так?
//выше кнопка и коннект, ошибка где-то ниже
if(isset($_POST['submit']))
{
$login = $_POST['login'];
$password = $_POST['password'];
$shapass = SHA1(strtoupper($_POST['$login']).':'.strtoupper($_POST['$password']));
$query = "SELECT username, sha_pass_hash FROM account WHERE username = '$login' AND sha_pass_hash = '$shapass' LIMIT 1";
$sql = mysql_query($query) or die(mysql_error());
if (mysql_num_rows($sql) == 1)
include("modules/cp.php");
else
echo 'Ошибка авторизации';
}
//выше кнопка и коннект, ошибок быть не должно
if(isset($_POST['submit']))
{
$login = $_POST['login'];
$password = $_POST['password'];
$shapass = SHA1(strtoupper($login).':'.strtoupper($password)) ;
$query = "SELECT id FROM account WHERE username = '$login' AND sha_pass_hash = '$shapass'";
$sql = mysql_query($query) or die(mysql_error());
if(mysql_num_rows($sql)) include("modules/cp.php");
else echo 'Ошибка авторизации';
}
//выше кнопка и коннект, ошибок быть не должно
if(isset($_POST['submit']))
{
$login = $_POST['login'];
$password = $_POST['password'];
$shapass = SHA1(strtoupper($login).':'.strtoupper($password)) ;
$query = "SELECT id FROM account WHERE username = '$login' AND sha_pass_hash = '$shapass'";
$sql = mysql_query($query) or die(mysql_error());
if(mysql_num_rows($sql)) include("modules/cp.php");
else echo 'Ошибка авторизации';
}
Спасибо! Всё работает, как часы! :thank_you:
как иконки шмотья получать как на скрине?
NeatElves
16.08.2010, 10:56
Как минимум, юзать поиск - http://ru-mangos.ru/showpost.php?p=2277&postcount=21
Как минимум, юзать поиск - http://ru-mangos.ru/showpost.php?p=2277&postcount=21 меня интересовал itemdisplayinfo.dbc :) всё ок теперь, уже разобрался, теперь такой вопрос
сервер 2.4.3
из вики взял поля
239 PLAYER_BYTES (skin | (face << 8) | (hairStyle << 16) | (hairColor << 24))
240 PLAYER_BYTES_2 (facialHair | (0x00 << 8) | (0x00 << 16) | (0x02 << 24)))
через пхп скрипт беру значения полей из одного чара и вставляю их с заменой в другого чара
всё ок, внешность меняется, но вместе с этим вайпаются слоты и сумки в личном банке
в скрипте всё ок, все действия только на поля 239 и 240, так почему банк вайпается ? мб в полях ещё информация про банк хранится ? но это как то не логично))
в скрипте всё ок
Сомневаюсь, раз такие проблемы возникают.
И где сам скрипт-то?
здесь был код
и здесь был код
Astellar
26.08.2010, 18:21
Здесь был код.Совет Вам на будущее - форматируйте код так, чтобы он был читабельным. Отступы иерархические не зря люди придумали. А в том, что Вы выложили, даже разбираться нет желания, честно.
на мангосе с самого его рождения, понял одно :
всем не угодишь, а на мангосе тем более
там что, кода так много ? строк - раз, два и обчёлся.. стоит его скопировать в txt и вовсе смешно будет, а если ещё прочитать мой пост до него, то весь этот код без 'иерархических отступов' сократится в 4 раза.
ps. tempura усердно убивая новичков разбаловал старичков
Так вот поставьте нормальные отступы, там что, кода так много? Извините за прямоту, но в таком говне не всем хочется копаться.
Нашлибл, из-за чего бардак устраивать. :(
define('CHAR_DATA_OFFSET_FACE',239);
define('CHAR_DATA_OFFSET_FACE2',240);
switchConnection("character");
$face_name=ucfirst(strtolower($_GET['face']));
$face = dbquery("SELECT *, mid(lpad( hex( CAST(substring_index(substring_index(data,' ', ".CHAR_DATA_OFFSET_SEX."),' ',-1) as unsigned) ),8,'0'),4,1) as gender FROM characters WHERE name='$face_name' ")or die("eror") ;
$faces=dbarray($face);
$char = dbquery("SELECT *, mid(lpad( hex( CAST(substring_index(substring_index(data,' ', ".CHAR_DATA_OFFSET_SEX."),' ',-1) as unsigned) ),8,'0'),4,1) as gender FROM characters WHERE guid='$_GET[guid]' and account =$ac_id and online='0' limit 1 ")or die("eror") ;
if(dbrows($char) != 0){
$char=dbarray($char);
if(dbrows($face)!=0){
if($faces['gender']==$char['gender']){
if($faces['race']==$char['race']){
$char = dbquery("SELECT * FROM characters WHERE guid='$_GET[guid]' limit 1 ")or die("eror");
$ch = dbarray($char);
$char_data = explode(' ',$ch['data']);
$face= dbquery("SELECT data FROM characters WHERE name='$face_name' limit 1 ")or die("eror");
$fc = dbarray($face);
$char_face = explode(' ',$fc['data']);
$char_data[CHAR_DATA_OFFSET_FACE]= $char_face[CHAR_DATA_OFFSET_FACE];
$char_data[CHAR_DATA_OFFSET_FACE2]= $char_face[CHAR_DATA_OFFSET_FACE2];
$data = implode(" ",$char_data);
dbquery("UPDATE characters SET `data`='$data' WHERE guid='$_GET[guid]' limit 1");
Вот код, отступы сейчас делаю...
Закрывающих фигурных скобок в коде не нашел. Правильно ли стоят отступы - не знаю.
tempura усердно убивая новичков разбаловал старичков Полностью согласен. Требовать читабельного кода - это ужасно! Насрать в теме - это правильно!
пишу, а точнее собираю из множество скриптов, 1 скрипт с топ аренами.
я остановился на этом:
<?php
define("DBHOST", "");
define("DBUSER", "");
define("DBPASS", "");
define("COLLATE", "utf8");
define("CDB", "characters");
$sMySql = mysql_connect(DBHOST, DBUSER, DBPASS); // Соединяемся с базой
mysql_query ('SET NAMES cp1251 ');
mysql_select_db(CDB, $sMySql);
$aSql = mysql_query("SELECT at.name, ats.rating
FROM arena_team at
INNER JOIN arena_team_stats ats ON at.arenateamid = ats.arenateamid
ORDER BY `ats`.`rating` DESC
LIMIT 0 , 5;", $sMySql);
$szContent .= "<br /><table width='98%' border='1' align='center'><tr>
<td align='center' width='20%'><font color='green'>Имя тимы</font></td>
<td align='center' width='20%'><font color='green'>Рэйтинг</font></td>"
while ($row = mysql_fetch_array($aSql))
{
$name = $row['ats'];
$rating = $row['rating'];
}
$szContent .= "<table width='98%' border='1' align='center'><tr>
<td align='center' width='20%'>".$name."</td>
<td align='center' width='20%'>".$rating."</td>
</tr></table>";
mysql_close($sMySql); // Закрываем соединение mysql
?>
подскажите где ошибся.
подскажите где ошибся. Где-то я совсем недавно этот код видел... :)
вот именно такую конструкцию: SELECT at.name, ats.rating FROM arena_team at
Ошибку, видимо, искать в ДНК. :) :) Я не программист, но цвета пока еще различаю. :) Подсветку кода в своем посте ВНИМАТЕЛЬНО посмотри - где у тебя там кавычек и точки-с-запятой не хватает? :) :) :)
И самый главный вопрос: а какая ошибка-то у тебя? Что на странице и что в логах? Какой уровень вывода ошибок в РНР стоит? :) :) :)
Праведник
07.09.2010, 15:09
tempura, и стиль написания удивительно на мой похож... Даже специфическое название переменных с контентом одинаковое... что касается кода, в 17 строке ";" лишние в запросе, а в 21 строке забыты ";
И ещё там на лицо (или на лице?) незнание русского языка. Слово "Рэйтинг" пишется через "е" - Рейтинг.
Далее, цикл while открыт, но не закрыт.
Вкратце объясню ещё 1 ошибку: вы копируете скрипты, пытаетесь менять их, но не понимаете смысла действий. Советую изучить php.su и подобные сайты.
Ещё раз возвращаясь к циклу while: Зачем в цикле создавать таблицу? Вы даже не представляете, что получится у вас в итоге. Если так хочется бездумно копировать, то сравните с оригиналами кода (http://ru-mangos.ru/showthread.php?t=1899), который вы пытаетесь изменить и найдите все огрехи.
Вот правильный результат, чтобы вы смогли избежать ошибок в дальнейшем. Сравните со своим кодом.
"Работа над ошибками", так сказать.
<?php
define("DBHOST", "");
define("DBUSER", "");
define("DBPASS", "");
define("COLLATE", "utf8");
define("CDB", "characters");
$sMySql = mysql_connect(DBHOST, DBUSER, DBPASS); // Соединяемся с базой
mysql_query ("SET NAMES 'COLLATE'");
mysql_select_db(CDB, $sMySql);
$aSql = mysql_query("SELECT `at`.`name`, `ats`.`rating` FROM `arena_team` `at` INNER JOIN `arena_team_stats` `ats` ON `at`.`arenateamid` = `ats`.`arenateamid` ORDER BY `ats`.`rating` DESC LIMIT 0 , 5", $sMySql);
$szContent .= "<br />
<table width='98%' border='1' align='center'>
<tr>
<td align='center' width='20%'><font color='green'>Имя тимы</font></td>
<td align='center' width='20%'><font color='green'>Рейтинг</font></td>";
while ($row = mysql_fetch_array($aSql))
{
$szContent .= "<tr>
<td align='center' width='20%'>".$row['name']."</td>
<td align='center' width='20%'>".$rowl['rating']."</td>
</tr>";
}
$szContent .= "</table>";
echo $szContent;
mysql_close($sMySql); // Закрываем соединение mysql
?>
не получается избавиться от ошибки
Parse error: syntax error, unexpected $end in /usr/home/www/vhosts/data/index12.php on line 42
42 строчки даже нету..
Праведник
07.09.2010, 16:24
$aSql['name']
$aSql['rating']
поменяйте на
$row['name']
$rowl['rating']
Чёт просмотрел совсем) Вариант выше исправлен, проверен и работает.
Вот правильный результат, чтобы вы смогли избежать ошибок в дальнейшем. Сравните со своим кодом.
"Работа над ошибками", так сказать.
<?php
define("DBHOST", "");
define("DBUSER", "");
define("DBPASS", "");
define("COLLATE", "utf8");
define("CDB", "characters");
$sMySql = mysql_connect(DBHOST, DBUSER, DBPASS); // Соединяемся с базой
mysql_query ("SET NAMES 'COLLATE'");
mysql_select_db(CDB, $sMySql);
$aSql = mysql_query("SELECT `at`.`name`, `ats`.`rating` FROM `arena_team` `at` INNER JOIN `arena_team_stats` `ats` ON `at`.`arenateamid` = `ats`.`arenateamid` ORDER BY `ats`.`rating` DESC LIMIT 0 , 5", $sMySql);
$szContent .= "<br />
<table width='98%' border='1' align='center'>
<tr>
<td align='center' width='20%'><font color='green'>Имя тимы</font></td>
<td align='center' width='20%'><font color='green'>Рейтинг</font></td>";
while ($row = mysql_fetch_array($aSql))
{
$szContent .= "<tr>
<td align='center' width='20%'>".$row['name']."</td>
<td align='center' width='20%'>".$row['rating']."</td> //тут опечатка rowl была
</tr>";
}
$szContent .= "</table>";
echo $szContent;
mysql_close($sMySql); // Закрываем соединение mysql
?>
ошибочка, ну я попроавил все работает, спасибо. опечатка закоментирована.
Оптимизированный скрипт на вывод кол-ва классов и расс:
$druid_a - Колв-о друлей за альянс
$druid_h - тоже, но за орду
Ну и так далее...
Перед скриптом ессно должныбыть mysql_connect() и mysql_select_db(characters)...
Код немогу выложить, т.к. используются переменные с симоломами, криво обрабатывающимися форумом...
<?php
mysql_selectdb ($chardb) OR DIE($error);
// Выбираем кол-во персонажей по рассам
$query = mysql_query("SELECT `race`,count(*) FROM characters GROUP BY `race`") OR DIE($error[3]);
while($row = mysql_fetch_array($query)) {
$race[] = $row;
}
// Выбираем кол-во персонажей по классам за альянс
$query = mysql_query("SELECT `class`,count(*) FROM characters where `race` in (1,3,4,7,11) GROUP BY `class`") OR DIE($error[3]);
while($row = mysql_fetch_array($query)) {
$aclass[] = $row;
}
// Выбираем кол-во персонажей по классам за орду
$query = mysql_query("SELECT `class`,count(*) FROM characters where `race` in (2,5,6,8,10) GROUP BY `class`") OR DIE($error[3]);
while($row = mysql_fetch_array($query)) {
$hclass[] = $row;
}
$human = $race[0][1];
$dwarv = $race[2][1];
$night = $race[3][1];
$gnome = $race[6][1];
$draenei = $race[9][1];
$orc = $race[1][1];
$undead = $race[4][1];
$tauren = $race[5][1];
$troll = $race[7][1];
$blood = $race[8][1];
$druids_a = $aclass[9][1];
$druids_h = $hclass[9][1];
$hunters_a = $aclass[2][1]
$hunters_h = $hclass[2][1]
$mage_a = $aclass[2][1];
$mage_h = $hclass[2][1];
$palladins_a = $aclass[1][1];
$palladins_h = $hclass[1][1];
$priests_a = $aclass[4][1];
$priests_h = $hclass[4][1];
$rogues_a = $aclass[3][1];
$rogues_h = $hclass[3][1];
$shamans_a = $aclass[6][1];
$shamans_h = $hclass[6][1];
$warlocks_a = $aclass[7][1];
$warlocks_h = $hclass[7][1];
$warriors_a = $aclass[0][1];
$warriors_h = $hclass[0][1];
$dk_a = $aclass[5][1];
$dk_h = $hclass[5][1];
?>
vBulletin® v3.8.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot