Счетчик магии 2

«SET NAMES ‘utf8′»));
set_time_limit(60);
$battle = array();#Массив из базы для сравнения
$battle_html = array();#Массив из $html
$battle_all = array();#Массив из базы для вывода таблицы

#Проверка вводимой ссылки боя
if( isset($_POST[‘log_id’]) ){
$_POST[‘log_id’] = preg_log_id($_POST[‘log_id’]);
}

#Регулярные выражения для поиска в логе боя
$regExp = ‘(\w*\D*\W*)<\/span> (наколдовал \»Объятия смерти<\/b>\»|наколдовал \»Поцелуй ведьмы<\/b>\»|породил своего клона|успешно наколдовал \»Коварный уход<\/b>\»|использовал(?:a|а|о|) заклятие восстановления энергии и восстановил(?:a|а|о|) уровень жизни \+35% <\/B>|использовал заклятие восстановления энергии и восстановил уровень жизни \+ 35% <\/B>|наколдовал \»Призрачный щит<\/b>\»|наколдовал на себя \»Глухая защита<\/b>\»|наколдовал на себя \»Осторожность<\/b>\»|под воздействием \»Танец ветра<\/b>\»|наколдовал на себя \»Очищение<\/b>\»|наколдовал на себя \»Постепенное восстановление<\/b>\»|наколдовал на себя \»Натиск<\/b>\»|вмешался в поединок|воскресил|наколдовал \»Абсолютный щит<\/b>\»|использовал(?:a|а|о|) заклятие восстановления энергии и восстановил(?:a|а|о|) уровень жизни \+50% <\/B>|использовал заклятие восстановления энергии и восстановил уровень жизни \+ 50% <\/B>|использовал(?:a|а|о|) заклятие восстановления энергии и восстановил(?:a|а|о|) уровень жизни \+20% <\/B>|использовал заклятие восстановления энергии и восстановил уровень жизни \+ 20% <\/B>|использовал(?:a|а|о|) заклятие восстановления энергии и восстановил(?:a|а|о|) уровень жизни \+ 20% <\/B>|использовал(?:a|а|о|) заклятие восстановления энергии|под воздействием \»Ярость<\/b>\»|наколдовал на себя \»Истинное востановление<\/b>\»|наколдовал на себя \»Дикая удача<\/b>\»|наложил\(а\) заклятие \»Иссушение\»<\/b>|наколдовал \»Отражение<\/b>\»|переманил|наколдовал на себя \»Полная защита<\/b>\»|наколдовал \»Исцеление \+50%<\/b>\»|наколдовал \»Исцеление \+35%<\/b>\»|наколдовал \»Исцеление \+20%<\/b>\»|наколдовал a \»Исцеление \+35%<\/b>\»|наколдовал a \»Исцеление \+50%<\/b>\»|наколдовал a \»Исцеление \+20%<\/b>\»|наколдовал a \»Призрачный щит<\/b>\»|наколдовал \»Огненный удар<\/b>\»|наложил\(а\) заклятие \»Уязвимость оружию\»<\/b>|наложил\(а\) заклятие \»Слабость\»<\/b>|наложил заклятие \»Слабость\»<\/b>|наколдовал на себя \»Демон интуиции<\/b>\»|наколдовал \»Деморализация<\/b>\»|наколдовал на себя \»Точный удар<\/b>\»|призвал себе в помощь духов|призвала себе в помощь духов)’;

$regExp2=’Закончилось воздействие \»(Подлый уход|Смертоносный удар без правил|Удар без правил|Удар Дракулы|Удар вампира|Возмездие|Ярость холодных звезд|Спасение)<\/i>\» для (\D*\w*\W*)<\/span>‘;

#Функция проверки записей в базе по $log_id, возвращает архив совпадений
function log_battle_exists($pdo, $log_id){
$b= $pdo->prepare(‘SELECT * FROM hill2 WHERE log_id = ? order by page asc’);
$b->execute(array($log_id));
return $b->fetchAll();
}

#Функция определения количества страниц в логе
function total_page($html){
$max=0;
$regExp3=’&page=(\d{1,4})’;
preg_match_all(‘/’.$regExp3.’/i’, $html, $matches3, PREG_SET_ORDER);
foreach ($matches3 as $row=>$key){
#echo $row.» «;
foreach ($key as $num=>$k){
#echo » $k|»;
if ($k>$max){
$max=$k;
}
}
#echo «
«;
}
#print_r ($matches3);
#echo max($matches3)[1].»-«;
return $max;
#return max($matches3)[1];
}
#Функция определения максимальной страницы в базе
function max_page($pdo, $log_id){
$b= $pdo->prepare(‘SELECT MAX(page) AS page FROM hill2 WHERE log_id = ?’);
$b->execute(array($log_id));
foreach ($b as $row){
$a= $row[‘page’];
}
return $a;
}

#Функция выделения ссылки боя
function preg_log_id($log){
if( preg_match(‘/https\:\/\/oldbk\..u\/battle\/log\.php.*(\d{9})/i’, $log, $matches) ){
return $matches[1];
} else if( is_numeric($log) ){
return $log;
}
}

#Функция сохранения в базу
function save($pdo, $log_id, $page, $team, $name, $magic_type){
$b= $pdo->prepare(«insert into hill2 (log_id, page, team, name, magic_type) values (:log_id, :page, :team, :name, :magic_type)»);
return $b->execute(array(‘:log_id’=>$log_id, ‘:page’=>$page, ‘:team’=>$team, ‘:name’=>$name, ‘:magic_type’=>$magic_type));
}

#Функция возврата ссылки на картинку магии
function link_magic($text){
if ($text==1){
return ‘m8.gif’;
}
elseif ($text==2){
return ‘m17.gif’;
}
elseif ($text==3){
return ‘m29.gif’;
}
elseif ($text==4){
return ‘m30.gif’;
}
elseif ($text==5){
return ‘m9.gif’;
}
elseif ($text==6){
return ‘m31.gif’;
}
elseif ($text==7){
return ‘m23.png’;
}
elseif ($text==8){
return ‘m7.png’;
}
elseif ($text==9){
return ‘m12.png’;
}
elseif ($text==10){
return ‘m19.png’;
}
elseif ($text==11){
return ’11.png’;
}
elseif ($text==12){
return ‘m_418.png’;
}
elseif ($text==13){
return ‘m21.gif’;
}
elseif ($text==14){
return ‘m4.gif’;
}
elseif ($text==15){
return ‘m_34.png’;
}
elseif ($text==16){
return ‘m2.png’;
}
elseif ($text==17){
return ‘m_35.png’;
}
elseif ($text==18){
return ‘m18.png’;
}
elseif ($text==19){
return ‘m27.gif’;
}
elseif ($text==21){
return ‘m10.png’;
}
elseif ($text==22){
return ’22.gif’;
}
elseif ($text==23){
return ‘m14.gif’;
}
elseif ($text==24){
return ‘m6.gif’;
}
elseif ($text==25){
return ‘m32.gif’;
}
elseif ($text==26){
return ‘m20.png’;
}
elseif ($text==27){
return ‘m17.gif’;
}
elseif ($text==28){
return ‘m8.gif’;
}
elseif ($text==29){
return ‘m29.gif’;
}
elseif ($text==30){
return ‘m13.gif’;
}
elseif ($text==31){
return ‘m16.gif’;
}
elseif ($text==32){
return ‘m15.gif’;
}
elseif ($text==33){
return ‘m5.gif’;
}
elseif ($text==34){
return ‘m22.png’;
}
elseif ($text==35){
return ‘m26.gif’;
}
elseif ($text==36){
return ‘m33.gif’;
}
elseif ($text==37){
return ‘m_36.png’;
}
elseif ($text==38){
return ‘m_38.png’;
}
elseif ($text==39){
return ‘m24.gif’;
}
elseif ($text==40){
return ‘item_5399.png’;
}
elseif ($text==41){
return ‘m_415.png’;
}
elseif ($text==42){
return ‘m_417.png’;
}
elseif ($text==43){
return ‘snowman.gif’;
}

else {
return ‘0.gif’;
}

}

#Функция перевода типа магии из текста в цифровое значение
function type($text){
if ($text==’использовал заклятие восстановления энергии и восстановил уровень жизни +35% ‘ or $text==’использовалa заклятие восстановления энергии и восстановилa уровень жизни +35% ‘){
return 1;
}
elseif ($text==’использовал заклятие восстановления энергии и восстановил уровень жизни + 35% ‘ or $text==’использовала заклятие восстановления энергии и восстановила уровень жизни + 35% ‘){
return 1;
}
elseif ($text==’использовал заклятие восстановления энергии и восстановил уровень жизни +50% ‘ or $text==’использовалa заклятие восстановления энергии и восстановилa уровень жизни +50% ‘){
return 2;
}
elseif ($text==’использовал заклятие восстановления энергии и восстановил уровень жизни + 50% ‘ or $text==’использовала заклятие восстановления энергии и восстановила уровень жизни + 50% ‘){
return 2;
}
elseif ($text==’использовал заклятие восстановления энергии и восстановил уровень жизни +20% ‘ or $text==’использовалa заклятие восстановления энергии и восстановилa уровень жизни +20% ‘ or $text==’использовал заклятие восстановления энергии и восстановил уровень жизни + 20% ‘){
return 3;
}
elseif ($text==’использовал заклятие восстановления энергии и восстановил уровень жизни + 20% ‘ or $text==’использовала заклятие восстановления энергии и восстановила уровень жизни + 20% ‘){
return 3;
}
elseif ($text==’использовал заклятие восстановления энергии’ or $text==’использовала заклятие восстановления энергии’){
return 4;
}
elseif ($text==’наколдовал «Поцелуй ведьмы«‘ or $text==’наколдовала «Поцелуй ведьмы«‘){
return 5;
}
elseif ($text==’породил своего клона’ or $text==’породила своего клона»‘){
return 6;
}
elseif ($text==’успешно наколдовал «Коварный уход«‘){
return 7;
}
elseif ($text==’наколдовал «Призрачный щит«‘){
return 8;
}
elseif ($text==’наколдовал a «Призрачный щит«‘){
return 8;
}
elseif ($text==’наколдовал на себя «Глухая защита«‘){
return 9;
}
elseif ($text==’наколдовал на себя «Осторожность«‘){
return 10;
}
elseif ($text==’под воздействием «Танец ветра«‘){
return 11;
}
elseif ($text==’наколдовал на себя «Очищение«‘){
return 12;
}
elseif ($text==’наколдовал на себя «Постепенное восстановление«‘){
return 13;
}
elseif ($text==’наколдовал на себя «Натиск«‘){
return 14;
}
elseif ($text==’наколдовал «Абсолютный щит«‘){
return 15;
}
elseif ($text==’под воздействием «Ярость«‘){
return 16;
}
elseif ($text==’наколдовал на себя «Истинное востановление«‘){
return 17;
}
elseif ($text==’наколдовал на себя «Дикая удача«‘){
return 18;
}
elseif ($text==’воскресил’){
return 19;
}
elseif ($text==’вмешался в поединок’){
return 20;
}
elseif ($text==’Возмездие’){
return 21;
}
elseif ($text==’Удар вампира’){
return 22;
}
elseif ($text==’наложил заклятие «Иссушение»‘ or $text==’наложил(а) заклятие «Иссушение»‘){
return 23;
}
elseif ($text==’наколдовал «Отражение«‘){
return 24;
}
elseif ($text==’переманил’){
return 25;
}
elseif ($text==’наколдовал на себя «Полная защита«‘){
return 26;
}
elseif ($text==’наколдовал «Исцеление +50%«‘){
return 27;
}
elseif ($text==’наколдовал a «Исцеление +50%«‘){
return 27;
}
elseif ($text==’наколдовал «Исцеление +35%«‘){
return 28;
}
elseif ($text==’наколдовал a «Исцеление +35%«‘){
return 28;
}
elseif ($text==’наколдовал a «Исцеление +20%«‘){
return 29;
}
elseif ($text==’наколдовал «Исцеление +20%«‘){
return 29;
}
elseif ($text==’наколдовал «Огненный удар«‘){
return 30;
}
elseif ($text==’наложил(а) заклятие «Уязвимость оружию»‘ or $text==’наложил заклятие «Уязвимость оружию»‘){
return 31;
}
elseif ($text==’наложил(а) заклятие «Слабость»‘ or $text==’наложил заклятие «Слабость»‘){
return 32;
}
elseif ($text==’Ярость холодных звезд’){
return 33;
}
elseif ($text==’наколдовал на себя «Демон интуиции«‘){
return 34;
}
elseif ($text==’наколдовал «Деморализация«‘){
return 35;
}
elseif ($text==’наколдовал «Объятия смерти«‘){
return 36;
}
elseif ($text==’Удар Дракулы’){
return 37;
}
elseif ($text==’наколдовал на себя «Точный удар«‘){
return 38;
}
elseif ($text==’Спасение’){
return 39;
}
elseif ($text==’Удар без правил’){
return 40;
}
elseif ($text==’Смертоносный удар без правил’){
return 41;
}
elseif ($text==’Подлый уход’){
return 42;
}
elseif ($text==’призвал себе в помощь духов’ or $text==’призвала себе в помощь духов’){
return 43;
}

else {
#echo $text.’<>br’;
return 0;
}

}
?>

Вставьте ссылку боя или его ID:

‘;
foreach ($rows as $row) {
$team=$row[‘team’];
$page=$row[‘page’];
$name= $row[‘name’];
$magic_type= $row[‘magic_type’];
#echo $team.’ : ‘.$name.’ : ‘.$magic_type.’
‘;
$battle[$team][$name][$page][$magic_type]++;#Массив из базы для сравнения
}
if($max_page = max_page($pdo, $log_id)){
$i=$max_page;
#echo ‘max_page=’.$i.’
‘;
}
}

while ($html){

@$html = file_get_contents($path.$i);
$html = mb_convert_encoding($html, ‘utf-8’);
if(! preg_match(‘/‘.$i.’<\/font>/i’, $html) ){
$html = »;##color=#8f0000 — цвет ссылки на текущую страницу лога
break;##\\ Если нет 2 страниц и более прерывается работа
}

$total=total_page($html);
#echo ‘total_page=’.$total;
if ($i>$total){
$html = »;
break;
}

if ($i==1){
if ( preg_match_all(‘/невидимка<\/i><\/b>/i’, $html, $nach2, PREG_SET_ORDER) ){
$mysql_save=save($pdo, $log_id, $i, 1, ‘невидимка‘, 99);
# if( preg_match_all(‘//i’, $html, $nach, PREG_SET_ORDER) ){
# $mysql_save=save($pdo, $log_id, $i, 2, $nach[0][1], 99);
# }
# }
# elseif( preg_match_all(‘//i’, $html, $nach, PREG_SET_ORDER) ){
# $mysql_save=save($pdo, $log_id, $i, 1, $nach[0][1], 99);
# $mysql_save=save($pdo, $log_id, $i, 2, $nach[1][1], 99);
# #print_r ($nach);
}
}

$page_html=$i;
#echo ‘ i=’.$i.’
‘;
preg_match_all(‘/’.$regExp.’/i’, $html, $matches, PREG_SET_ORDER);
unset ($battle_html);

#Читаем свежие данные из базы
unset ($battle);
if($rows = log_battle_exists($pdo, $log_id) ){
foreach ($rows as $row) {
$team=$row[‘team’];
$page=$row[‘page’];
$name= $row[‘name’];
$magic_type= $row[‘magic_type’];
$battle[$team][$name][$page][$magic_type]++;#Массив из базы для сравнения
}
}

foreach ($matches as $key => $value) {
$team_html=»;
$name_html=»;
$magic_type_html=»;

$team_html=$value[1];
$name_html= $value[2];
$magic_type_html= type($value[3]);
$battle_html[$team_html][$name_html][$page_html][$magic_type_html]++;#Считаные данные из $html
if($battle_html[$team_html][$name_html][$page_html][$magic_type_html]>$battle[$team_html][$name_html][$page_html][$magic_type_html]){
$mysql_save=save($pdo, $log_id, $page_html, $team_html, $name_html, $magic_type_html);
#echo $battle[$team][$name][$page][$magic_type].’ — ‘;
#echo $battle_html[$team_html][$name_html][$page_html][$magic_type_html].’
‘;
#print_r ($battle).’
‘;
#print_r ($battle_html);
}
}

#print_r ($matches);

preg_match_all(‘/’.$regExp2.’/i’, $html, $matches2, PREG_SET_ORDER);
unset ($battle_html);

#Читаем свежие данные из базы, а надо?
unset ($battle);
if($rows = log_battle_exists($pdo, $log_id) ){
foreach ($rows as $row) {
$team=$row[‘team’];
$page=$row[‘page’];
$name= $row[‘name’];
$magic_type= $row[‘magic_type’];
$battle[$team][$name][$page][$magic_type]++;#Массив из базы для сравнения
}
}

foreach ($matches2 as $key => $value) {
$team_html2=»;
$name_html2=»;
$magic_type_html2=»;

$team_html2=$value[2];
$name_html2= $value[3];
$magic_type_html2= type($value[1]);
$battle_html[$team_html2][$name_html2][$page_html][$magic_type_html2]++;
if($battle_html[$team_html2][$name_html2][$page_html][$magic_type_html2]>$battle[$team_html2][$name_html2][$page_html][$magic_type_html2]){
$mysql_save=save($pdo, $log_id, $page_html, $team_html2, $name_html2, $magic_type_html2);
}
}
#print_r ($matches2);

if( preg_match(‘/

.*(.*)<\/span>
/i’, $html, $res) ){
#print_r ($res);
if(isset($res[0])){
echo $res[0];
echo ‘Всего страниц лога — ‘.$total;
#echo ‘Бой закончен’;
#save($pdo, $log_id, $res[0], $i);

#if(preg_match(‘/синих/i’, $res[0])){ $class = ‘b1’; }
#elseif(preg_match(‘/красных/i’, $res[0])){ $class = ‘b2’; }
#else { $class = ‘b’; }
}

#print_r ($total);
$html = »;
break;
}

$i++;

}#Конец цикла считывания $html

#Считывание для показа таблицы
$neved_1_count=0;
$neved_2_count=0;

if($rows = log_battle_exists($pdo, $log_id) ){
foreach ($rows as $row) {
$team=$row[‘team’];
$name= $row[‘name’];
$magic_type= $row[‘magic_type’];
#echo $team.’ : ‘.$name.’ : ‘.$magic_type.’
‘;
$battle_all[$team][$name][$magic_type]++;
if ($name==’невидимка‘ and $magic_type==99){
$neved_1_count=1;
}
if ($name==’невидимка‘ and $team==1 and $magic_type==20){
$neved_1_count++;
}
elseif ($name==’невидимка‘ and $team==2 and $magic_type==20){
$neved_2_count++;
}

}
#

echo «

«;
echo «
СиниеКрасные
«;

foreach ($battle_all[1] as $name=>$magic_type){

echo ‘‘.$name.’ ‘;
if ($name<>‘невидимка‘){
echo ‘i ‘;
}
elseif ($name==’невидимка‘){
echo «($neved_1_count) «;
}
foreach ($magic_type as $type=>$col){
if ($type==20 or $type==99){
continue;
}
echo ««.»($col) «;
}
echo «


«;
}

echo «

«;
foreach ($battle_all[2] as $name=>$magic_type){
echo ‘‘.$name.’ ‘;
if ($name<>‘невидимка‘){
echo ‘i ‘;
}
elseif ($name==’невидимка‘){
echo «($neved_2_count) «;
}
foreach ($magic_type as $type=>$col){
if ($type==20 or $type==99){
continue;
}
echo ««.»($col) «;
}
echo «
«;
}

echo «

«;

}
}#Конец цикла если есть $log_id

ini_set(‘display_errors’,’On’);
?>
Ограничения: анализ только для логов более 1 страницы.

Скорость чтения логов с сервера олдбк составляет 2-3 страницы в секунду, поэтому при первичном анализе больших боёв наберитесь терпения.

сайт клана