Тема: Разработка околоигровых ресурсов мини GITHUB

ФОРУМ:

 Перейти  Создать тему  Поиск  Переключить на полное отображение информации 
(Обсуждение закрыто)
На страницу: [1]
Топор Прав [22]
Цитата
Добавлено:
06.11.18 19:11
Матрос форума, 168
Тут можно делиться своими разработками связанными с TO , создание околоигровых сервисов, обработка данных связанных с ТЗ. и т.д.
Топор Прав [22]
Цитата
Добавлено:
06.11.18 19:16
Матрос форума, 168
Стояла задача разработать код, который мог бы из строки перечисленных логов боёв ТЗ разделенных между собой пробелами, мог бы сохранять их на локальный сервер.

Я решал эту задачу на PHP так как мне нужно было это делать на сайте.

вот сам код

$str = "28523596053761 28523597828609 28523600339969";
$words_arr = explode(" ", $str);

foreach ($words_arr as $words_str){
$btl = str_replace(' ', '', $words_str);
if ($btl !='') //проверка на отсуствие пустых записей
{
if (ctype_digit($btl)) //проверка что строка только из чисел
{
$file = 'https://city1.tz.mail.ru/getbattl
e?id='.$btl.'.tzb';
$file_name = basename(''.$btl.'.tzb');
file_put_contents('battlelogs/'.$fi
le_name, file_get_contents($file));
}
}
}

в переменную $str вы можете положить свои данные, и данный код сохранит все перечисленные в строке логи боёв. Если они существуют на сервере.
Топор Прав [22]
Цитата
Добавлено:
07.11.18 18:41
Матрос форума, 177
Напечатал ещё один код. который формирует список для плагина black_list
сделал как можно больше комментариев чтобы мой код был понятен

<?php
   $servername = ''; //тут вы указываете адрес хоста
   $username = ''; //тут логин юзера
   $password = ''; //тут пароль юзера
   $dbname = ''; // тут название базы данных с которой мы будем работать
   
   $conn = new mysqli($servername, $username, $password, $dbname);  // Создаем коннект к БД
   $sql = "SELECT `login`, `summ`, `battle`, `prichina` FROM black_list";  // SQL-запрос вы должны будете изменить его в зависимости от названий ваших столбцов и имени таблицы в базе данных. При этом не изменяйте порядок столбцов! иначе в результате всё переешается и вы будете видеть неверные данные в графах плагина.
   $result = $conn->query($sql);  // Выполняем запрос
   $num_rows = mysqli_num_rows($result); //кол-во строк с данными полученные из базы данных эта информация нам пригодится при создании условия внутри цикла
   $data = fopen('blacklist.txt', 'w'); //открываем файлик куда мы будем сохранять данные
   while($row = $result->fetch_assoc()) {  // Перебираем строки
   if ($num_rows > 1) //тут у нас условие если числовое значение достингет единици то интеры мы перестаём ставить, ниже есть условие где мы вычитаем из переменной единицу с каждым проходом цикла
   {
   $enter = "\r\n"; //если мы ещё не достигли единицы то делаем перевод строки
   }
   else{
   $enter = ""; //а вот если достигли то записываем пустоту в переменную и после последней записи в файл перевода строки не будет
   }
   //ниже блок где запятые в переменных заменяются на плюсики чтобы наша таблица не рухнула из за неправильного ввода данных
   $login = str_replace(",", "+", "$row[login]");
   $summ = str_replace(",", "+", "$row[summ]");
   $battle = str_replace(",", "+", "$row[battle]");
   $prichina = str_replace(",", "+", "$row[prichina]");
   //заканчивается замена запятых в переменных
   

   $str_put = "$login,$summ,$battle,$prichina;$en
ter";     //формируем строку из переменных первые четыре переменные хранят данные, последняя осуществляет переход на другую строку
   
   $num_rows--; //тут мы уменьшаем числовую переменную на единицу с каждым проходом цикла
   $str_put = mb_convert_encoding($str_put, "WINDOWS-1251", "ANSI" ); // конвертируем шрифт чтобы плагин Blacklist понимал записи
   fwrite($data, $str_put); //записываем конвертированную строку в файл
   }
   fclose($data); // закрываем наш файл
   mysql_close($conn); // закрываем подключение к БД
?>

после выполнения данного скрипта в папке с php документом появится txt файл подходящий для импорта в официальный модуль/плагин black_list  timezero

Облегчит задачу по поиску ЧС вам и вашим близким.
Бухал с Борисом [11]
Цитата
Добавлено:
07.11.18 18:48
Юнга форума, 5
Боже, какой стыд.
Где учился программировать?
Не берите пример с этого позора.
rjyne [17]
Цитата
Добавлено:
07.11.18 23:12
Юнга форума, 40
на твоём сайте даже копировать лог боя нельзя
-lord-of-rats- [7]
Цитата
Добавлено:
26.12.18 11:07
Юнга форума, 0
Допустим имеем логи копки вида:
18.12.18 23:58 Подобрал: Metals[1],Metals[1],Metals[1],Metal
s[1],Metals[1],Metals[1],Silicon[1]
в бою '2*****'

Существует ли простой, красивый, способ распарсить логи добычи?
чтобы сразу получить массив: "добыча => количество" ?
Например какой-нить регуляркой? как?

Можно конечно сделать с "костылями" типа вручную в цикле найти все подстроки после слова "Подобрал" потом что-то вроде
$massiv = explode("]", $log); и далее вытаскивать цифру количества из скобок в ручную и т.д. но это весьма громозко и неприятно....
Топор Прав [22]
Цитата
Добавлено:
26.12.18 20:36
Мичман форума, 287
-lord-of-rats- [7] Да есть. и выход очень простой, регуляркой в цикле выбирать идентификатор массива. и копировать зачение массива складывать с каждым прохождением цикла.

>> Топор Прав [22] , 26.12.18 20:37:
для каждого ресурса своя регулярка сответсвенно, и своя переменная счетчика
-lord-of-rats- [7]
Цитата
Добавлено:
27.12.18 05:00
Юнга форума, 0
Топор Прав wrote:
регуляркой в цикле выбирать идентификатор массива

а пример регулярки такой можно? просто я не бум бум в них тока начинаю изучать:)
для каждого ресурса своя регулярка сответсвенно, и своя переменная счетчика

то есть вручную прописывать все что может упасть?
хотелось бы найти способ, чтобы любой падающий рандом_лут[1] находился (по скобкам) и соответственно вносился в ассоциативный массив ввиде ключа, где значение = количество этого предмета:)
Топор Правосудия [22]
Цитата
Добавлено:
27.12.18 20:30
Юнга форума, 36
-lord-of-rats- [7]

$arNameCount = '/(.*)\[(.*)\]/';
Топор Правосудия [22]
Цитата
Добавлено:
27.12.18 23:47
Юнга форума, 36
-lord-of-rats- [7]

Вот более детально

<?php
$string = "21.12.18 09:35 Подобрал: Vzzik Egg Fragments[2],Vzzik Shell Powder[2],Vzzik Wings[2],Vzzik Egg Fragments[1],Vzzik Egg Fragments[1],Vzzik Egg Fragments[2],Vzzik Shell Powder[1],Vzzik Wings[2]";

$string = strstr($string, 'Подобрал: ');
$string = str_replace('Подобрал: ', '', $string);
$getres = explode(",", $string);

//В $getres получился массив
/*
Array
(
   [0] => Vzzik Egg Fragments[2]
   [1] => Vzzik Shell Powder[2]
   [2] => Vzzik Wings[2]
   [3] => Vzzik Egg Fragments[1]
   [4] => Vzzik Egg Fragments[1]
   [5] => Vzzik Egg Fragments[2]
   [6] => Vzzik Shell Powder[1]
   [7] => Vzzik Wings[2]
)
*/
$items = [];
foreach ($getres as $res) {
   preg_match_all('/(.*)\[(.*)\]/', $res, $matches);
   $items[$matches[1][0]] += $matches[2][0];
}

//В $items получился массив
/*
Array
(
   [Vzzik Egg Fragments] => 6
   [Vzzik Shell Powder] => 3
   [Vzzik Wings] => 4
)
*/
?>

Писал на скорую руку, дальше сам разберешься.
-lord-of-rats- [7]
Цитата
Добавлено:
28.12.18 02:00
Юнга форума, 0
Топор Правосудия [22]
спасибо!
Топор Правосудия [22]
Цитата
Добавлено:
28.12.18 05:25
Юнга форума, 36
-lord-of-rats- wrote:
Топор Правосудия [22]
спасибо!

Я там забыл отфильтровать, всё что после вхождения строки в бою
То есть нужен фильтр по послнеднему вхождению строки
Топор Правосудия [22]
Цитата
Добавлено:
30.12.18 15:08
Юнга форума, 37
-lord-of-rats- [7] доработал твою идею до полноценного сервиса

<meta charset="utf-8">
<form  id="paper" action="" method="post">
   <div id="margin">
   <p>Для того чтобы подсчитать кол-во накопанных вами ресурсов за день выполните следующее:
       <br><br>КПК => История => Выбираем нужный нам день => Нажимаем кнопку "Копировать"
   
   
</p>
 <textarea placeholder="Вставьте вашу историю жизни" id="text" name="history" rows="10" style="overflow: hidden; word-wrap: break-word; resize: none; height: 160px<div id="wrapper"></textarea>  
   <p><input id="button" type="submit" value="Обработать"></input></p>

<?php
$links = explode ("\r",$_POST['history']);
if (isset($_POST['history']))
{
   $file = $_POST['history'];
   $items = [];
   foreach ($links as $string)// Читаем построчно
   {
   if(stristr($string, "Подобрал: ") !== FALSE)
       {
       $string = strstr($string, 'Подобрал: ');
       $string = str_replace('Подобрал: ', '', $string);
       $getres = explode(",", $string);
       foreach ($getres as $res)
           {
               preg_match_all('/(.*)\[(.*)\]/', $res, $matches);
               $items[$matches[1][0]] += $matches[2][0];
           }
       }
   }
   print "<p>";

   print "За текущий день накопано:";
   echo "<br>";
   echo "<br>";
   foreach ($items as  $value => $key)
       {
       echo "$value = $key";
       echo "<br>";
       }

       print "</p>
";
   
}
?>

-lord-of-rats- [7]
Цитата
Добавлено:
30.12.18 23:19
Юнга форума, 0
Топор Правосудия [22]
респект за код, заработало, что называется из коробки =)

p.s. а концы строк парсить лучше через "\r" или "\n" или нет разницы? Если вдруг чел будет с линуха играть => у него будет "\r" передаваться?
Топор Правосудия [22]
Цитата
Добавлено:
07.01.19 19:01
Юнга форума, 47
-lord-of-rats- [7] надо тестить , сразу сказать не могу, но в роде бы и там будет всё ок.
Топор - Закон [17]
Цитата
Добавлено:
08.01.19 20:20
Матрос форума, 89
-lord-of-rats- [7] из официальной документации Ubuntu

'\r' = CR (ASCII 0x0D) используется в 8-битовых машинах Commodore, машинах TRS-80, Apple II, системах Mac OS до версии 9 и OS-9;
'\n'LF (ASCII 0x0A) используется в Multics, UNIX, UNIX-подобных операционных системах (GNU/Linux, AIX, Xenix, Mac OS X, FreeBSD и др.), BeOS, Amiga UNIX, RISC OS и других;
'\r'+'\n' CR+LF (ASCII 0x0D 0x0A) используется в DEC RT-11 и большинстве других ранних не-UNIX- и не-IBM-систем, а также в CP/M, MP/M (англ.), MS-DOS, OS/2, Microsoft Windows, Symbian OS, протоколах Интернет.

так что в линуксе можно использовать $links = explode ("\n",$_POST['history']);

Так как в винде по умолчанию \r\n можно фильтровать только по \n
-lord-of-rats- [7]
Цитата
Добавлено:
09.01.19 07:59
Юнга форума, 0
Топор - Закон [17]
понятно, спасибо:)
не думаю что кто-то с линуха в тз играет, но все равно было интересно. так как в прошлом помю среди программистов было много споров по поводу концов строк) (использовать виндовс или уникс стайл строки)
Fanor [8]
Цитата
Добавлено:
17.04.19 08:59
Юнга форума, 24
Обсуждение закрыто
Тема: Разработка околоигровых ресурсов мини GITHUB (Обсуждение закрыто)
На страницу: [1]
версия для печати