программа делает из файла combat.log табличку. типичное расположение файла C:\Users\bla-bla-bla\Documents\My Games\StarConflict\logs
программа делает из файла combat.log табличку. типичное расположение файла C:\Users\bla-bla-bla\Documents\My Games\StarConflict\logs
удобненько…но мне знаний английского языка не хватает =D
Можно ли сделать счетчик побед за сессию/день ?
Интерестная программа)
О случайно узнал о этой проге ![;)](<fileStore.core_Emoticons>/emoticons/002.png “;)”) Может кто дать скрин таблицы вывода этой проги ?
А то может она нормальная и нужно такую же написать …
Блин чёт у меня Хром ругается на сайт скачивания.
Скрытый текст
Жесть все подозрительные стали. Не хром ругается, а антивирус, скорее всего. РГХО.СТ - обычный файлообменник, смею заметить - очень удобный.
Пользуясь случаем, для статки не по бою, а по списку аккаунтов, [пройдите сюда.](< base_url >/index.php?/topic/52894-%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0-%D1%84%D0%BB%D0%BE%D1%82%D0%B8%D0%BB%D0%B8%D0%B8-%D1%84%D0%B8%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F-%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B0/)
Спасибо.
В 26.09.2016 в 13:34, Dive_r сказал:
Жесть все подозрительные стали. Не хром ругается, а антивирус, скорее всего. РГХО.СТ - обычный файлообменник, смею заметить - очень удобный.
Пользуясь случаем, для статки не по бою, а по списку аккаунтов, [пройдите сюда.](< base_url >/index.php?/topic/52894-%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0-%D1%84%D0%BB%D0%BE%D1%82%D0%B8%D0%BB%D0%B8%D0%B8-%D1%84%D0%B8%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F-%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B0/)
Сам понимаешь желания дальше переходить нет. А я не подозрительный пока у меня на весь экран красная картинка не вылетит. ![:fed015:](<fileStore.core_Emoticons>/emoticons/fed015.png “:fed015:”)
У тебя левый редирект стоит. Проверяйся на вирусы. Правильная ссылка - http://rgho.st/8ZSWLqmTs, без всяких meson. Опять же, проблема не в сайте.
Если надо - залью программу на ЯД, т.к. автор не появляется в теме.
10 часов назад, Dive_r сказал:
У тебя левый редирект стоит. Проверяйся на вирусы. Правильная ссылка - http://rgho.st/8ZSWLqmTs, без всяких meson. Опять же, проблема не в сайте.
Если надо - залью программу на ЯД, т.к. автор не появляется в теме.
на гит или че аналогичное сразу кидай)
Скинул в свою темку ссылку на эту программу ЯД.
<html>
<body>
<script>
combat_log=new String //файл лога log’s file
len_combat=new Number //размер лога байт log’s size bytes
combat=new Array //массив строк
separates=new Array(’| Apply aura’,’| Cancel aura’,’| Spell ‘,’| Participant’,’| Damage’,’| Rocket’,’| Heal’,’| AddStack’,’| Set’,’| Teleporting’,’| Reward’,’| Secondary’,’| PVE_Mission’) //ключевые слова для ненужных строк
tables=new Array
tbl=new Array
p_tags=new Array
games_list=new Array
games_list[0]={
game_number : 0, //номер по-порядку
game_begin : 0, //начальная строка
game_end : 0, //конечная строка
game_type : ‘’, //тип игры
map_name : ‘’} //название карты
date_=new String(’ Date:’)
connect_to_game=new String(‘Connect to game’)
start_game_play=new String(’= Start’)
game_play_finished=new String(‘Gameplay finished.’)
spawn_spaceShip=new String(‘Spawn SpaceShip’)
killed=new String(‘Killed’)
killer=new String(‘killer’)
reward=new String(’| reward’)
for_victory=new String(‘for victory’)
for_defeat=new String(‘for defeat’)
experience_=new String(‘experience’)
credits_=new String(‘credits’)
function start_()
{
combat_log=document.all.combatlog_text.value //храним первоначальный файл на всякий случай
document.all.count1.value=‘Size: ‘+combat_log.length+’ B’
delete_false_strings() //удаляем ненужные строки
get_battle_date() //получаем дату
get_games_list() //список игр в файле
}
function delete_false_strings() //убираем ненужные строки
{
var short_array=new Array
var b=true
var k=new Number
var k1=new Number
//short_array=document.all.combatlog_text.value.split(’\n’) //делим на строки/split for strings
short_array=combat_log.split(’\n’)
document.all.combatlog_text.value=’’
for (var i=0; i<=short_array.length-1; i++) //ищем строки с for victory и for defeat и защищаем их
{
k=short_array_.indexOf(for_victory)_
if (k>=0)
{
k=short_array_.indexOf(‘Reward’)_
if (k>=0)
{
short_array =short_array.substring(0,k)+‘r’+short_array_.substring(k+1,short_array__.length)_
}
}
k=short_array_.indexOf(for_defeat)_
if (k>=0)
{
k=short_array_.indexOf(‘Reward’)_
if (k>=0)
{
short_array =short_array.substring(0,k)+‘r’+short_array_.substring(k+1,short_array__.length)_
}
}
}
for (var i=0; i<=short_array.length-1; i++) //игнорируем строки с ключевыми словами и пишем в окно
{
for (var j=0; j<=separates.length-1; j++)
{
k=short_array_.indexOf(separates[j])_
if (k>=0)
{
b=false
break
}
}
if (b==true)
{
if (short_array_!=’’)_
{
document.all.combatlog_text.value+=short_array_+’\n’_
}
}
else
{
b=true
}
}
combat=document.all.combatlog_text.value.split(’\n’) //получаем укороченный массив
document.all.count1.value=‘Size: ‘+document.all.combatlog_text.value.length+’ B’
}
function find_string(search_world, index_start, index_end) //поиск строки с ключевым словом. номер строки в combat
{
if (index_end==0)
{
index_end=combat.length-1
}
for (var i=index_start; i<=index_end; i++)
{
if (combat_.indexOf(search_world)>=0)_
{
return i
}
}
return -1
}
function get_battle_date()
{
var i=new String
i=find_string(date_, 0, 0)
if (i!=-1)
{
document.all.date_text.value=combat_.substring(combat__.indexOf(date_)+1, combat__.length)_
}
else
{
document.all.date_text.value=’’
}
}
function get_games_list()
{
var i_begin=0
var i_start=0
var i_end=0
var j=0
while (i_begin!=-1)
{
i_begin=find_string(connect_to_game, i_end, 0)
if (i_begin==-1)
{
break
}
i_start=find_string(start_game_play, i_begin+1, 0)
i_end=find_string(connect_to_game, i_start+1, 0)
if (i_end==-1)
{
i_end=combat.length-1
}
i_end–
games_list[j]={game_number : 0, game_begin : 0, game_end : 0, game_type : ‘’, map_name : ‘’}
games_list[j].game_begin=i_begin
games_list[j].game_type=combat[i\_start]
games_list[j].game_end=i_end
games_list[j].game_number=j
document.all.cnsl.value+=games_list[j].game_number+’: ‘+games_list[j].game_type+games_list[j].game_begin+’-’+games_list[j].game_end+’\n’
j++
}
}
function find_col(col_head)
{
for (var i=0; i<=tbl[0].length-1; i++)
{
if (col_head==tbl[0]__)
{
return i
}
}
return -1
}
function find_row(row_head)
{
for (var i=0; i<=tbl.length-1; i++)
{
if (row_head==tbl_[0])_
{
return i
}
}
return -1
}
function date_to_table(table_number)
{
var i_correct=-1
for (var i=0; i<=tbl.length-1; i++)
{
i_correct++
if ((document.all.check_simple.checked)&&(tbl_[1]==undefined)) //пропускаем строки с объектами, если флажок включен_
{
i_correct–
continue
}
var j_correct=-1
var k=tables[table_number].insertRow(i_correct)
for (var j=0; j<=tbl[0].length-1; j++)
{
j_correct++
var ss=tbl[0][j]
var i_row2=find_row(ss)
if (i_row2>0)
{
if (tbl[i\_row2][1]==undefined)
{
j_correct–
continue
}
}
var c=k.insertCell(j_correct)
if (tbl_[j]==undefined)_
{
if (j==1)
{
c.innerText=‘Object’
}
else
{
c.innerText=’’
}
}
else
{
c.innerText=tbl_[j]_
}
}
}
}
function calc_statistic() //рассчитаем статистику
{
var kill_col=3
var die_col=4
var kill_die_col=5
var i_obj_sub=1
//считаем убийства
for (var i=1; i<=tbl.length-1; i++)
{
var i_name=tbl_[0]_
tbl_[kill_col]=0_
for (j=8; j<=tbl_.length-1; j++)_
{
{
if (tbl_[i\_obj\_sub]==undefined)_
{
if (tbl_[j]!=undefined)_
{
if (isNaN(parseInt(tbl_[j]))==false)_
{
tbl_[kill_col]=parseInt(tbl__[kill_col])+parseInt(tbl__[j])_
}
}
}
else
{
if (tbl_[j]!=undefined)_
{
var i_name_in_head=tbl[0][j]
i_row_name_in_head=find_row(i_name_in_head)
if (tbl[i\_row\_name\_in\_head][1]==‘Human’)
{
if (isNaN(parseInt(tbl_[j]))==false)_
{
tbl_[kill_col]=parseInt(tbl__[kill_col])+parseInt(tbl__[j])_
}
}
}
}
}
}
}
//считаем смерти
for (var i=1; i<=tbl.length-1; i++)
{
var i_name=tbl_[0]_
var i_name_col=find_col(i_name)
tbl_[die_col]=0_
if (i_name_col>=0)
{
for (j=1; j<=tbl.length-1; j++)
{
if (tbl_[1]!=undefined)_
{
if (isNaN(parseInt(tbl[j][i\_name\_col]))==false)
{
tbl_[die_col]=parseInt(tbl__[die_col])+parseInt(tbl[j][i\_name\_col])_
}
}
}
}
}
//считаем kill/die
for (var i=1; i<=tbl.length-1; i++)
{
if (tbl_[die_col]==‘0’)_
{
if (tbl_[1]!=undefined)_
{
tbl_[kill_die_col]=‘Undeath’_
}
}
else
{
tbl_[kill_die_col]=Math.trunc(Math.round(parseInt(tbl__[kill_col])/parseInt(tbl__[die_col])*100))_
}
}
}
function calc_()
{
var ind=new Number
var ind1=new Number
var ind2=new Number
var ind3=new Number
var s=new String
var i_row=new Number
var i_row2=new Number
var i_col2=new Number
var i_col=new Number
var number_table=new Number
var number_string_in_combat=new Number
var games_numbers=new Array
//обрабатываем строку с номерами игр
s=document.all.choice_games.value
if (s==’’) //если номера не введены, то обрабатываем все игры
{
s=’’
for (var i=0; i<=games_list.length-1; i++)
{
s=s+i+’ ’
}
s.length–
}
s=s.trim()
games_numbers=s.split(’ ') //получаем массив с номерами игр
document.all.cnsl.value+=games_numbers.join()+’ choiced\n’
//---------------------------------
for (number_table=0; number_table<=games_numbers.length-1; number_table++) //цикл по номерам игр
{
i_row=0
i_col=0
p_tags[number_table]=document.createElement(“p”)
p_tags[number_table].innerText=games_list[games_numbers[number_table]].game_type+’\n’
document.all.results_block.appendChild(p_tags[number_table])
tables[number_table]=document.createElement(“table”)
tables[number_table].setAttribute(“border”, “2”)
document.all.results_block.appendChild(tables[number_table])
tbl[0]=new Array //шапка таблицы
tbl.length=1
tbl[0].length=1
tbl[0]=[’’,‘Obj/Sub’,‘Win/Lose’,‘Kill’,‘Die’,‘Kill/Die%’,‘Experience’,‘Commerce’]
for (number_string_in_combat=games_list[games_numbers[number_table]].game_begin+1; number_string_in_combat<=games_list[games_numbers[number_table]].game_end; number_string_in_combat++) //цикл по строкам combat от начала до конца игры с номером games_numbers[number_table]
{
ind=combat[number_string_in_combat].indexOf(start_game_play)
if (ind>=0)
{
ind1=combat[number_string_in_combat].indexOf("’", ind)
ind2=combat[number_string_in_combat].indexOf("’", ind1+1)
s=combat[number_string_in_combat].substring(ind1+1, ind2)
s.trim()
tbl[0][0]=s
continue
}
ind=combat[number_string_in_combat].indexOf(game_play_finished)
if (ind>=0)
{
continue
}
ind=combat[number_string_in_combat].indexOf(spawn_spaceShip) //строка со спауном
if (ind>=0)
{
ind1=combat[number_string_in_combat].indexOf("(", ind)
ind2=combat[number_string_in_combat].indexOf(",", ind1+1)
s=combat[number_string_in_combat].substring(ind1+1, ind2) //это имя
i_col=find_col(s) //ищем его в шапке
if (i_col==-1) //если его ещё нет
{
tbl[0].push(s) //добавляем его в шапку
tbl[tbl.length]=new Array(s) //создаём новую строку
tbl[tbl.length-1].push(‘Human’) //и назначаем его человеком
}
continue
}
ind=combat[number_string_in_combat].indexOf(killed) //строка с убийством
if (ind>=0)
{
ind1=combat[number_string_in_combat].indexOf(" ", ind+7)-1 //ищем имя убитого
ind2=combat[number_string_in_combat].indexOf("|", ind+7)
if (ind1>ind2)
{
ind1=ind2
}
s=combat[number_string_in_combat].substring(ind+7, ind1)
s.trim() //имя убитого
i_col=find_col(s) //ищем столбец с именем убитого
if (i_col==-1) //если этого имени ещё нет, то
{
tbl[0].push(s) //то добавим такой столбец
i_col=tbl[0].length-1 //определяем номер столбца.он последний
}
i_row=find_row(s) //определяем, есть ли это имя в строках
if (i_row==-1) //если нет, то
{
tbl[tbl.length]=new Array(s) //создадим ещё одню строку
}
ind=combat[number_string_in_combat].indexOf(killer) //дальше ищем слово killer
if (ind>=0)
{
ind1=combat[number_string_in_combat].indexOf(" ", ind)+1
ind2=combat[number_string_in_combat].indexOf("|", ind1)
s=combat[number_string_in_combat].substring(ind1, ind2)
s.trim()
i_col2=find_col(s) //ищем столбец с именем убийцы
if (i_col==-1) //если этого имени ещё нет, то
{
tbl[0].push(s) //то добавим такой столбец
}
i_row=find_row(s) //ищем строку убийцы
if (i_row==-1) //и если её нет
{
tbl[tbl.length]=new Array(s) //то сделаем новую
i_row=tbl.length-1 //и запомним
}
}
if (tbl[i\_row][i\_col]!=undefined)
{
tbl[i\_row][i\_col]=1+parseInt(tbl[i\_row][i\_col])
}
else
{
tbl[i\_row][i\_col]=1
}
}
ind=combat[number_string_in_combat].indexOf(for_victory) //строка с victory
if (ind>=0)
{
ind=combat[number_string_in_combat].indexOf(reward) //ищем в ней reward
if (ind>=0)
{
i_begin=ind=ind+8
while (combat[number_string_in_combat][i\_begin]==’ ') //отсчитываем пробелы до начала имени
{
i_begin++
}
i_end=i_begin+1
while (combat[number_string_in_combat].charCodeAt(i_end)!=9) //находим конец имени знак tab
{
i_end++
}
s=combat[number_string_in_combat].substring(i_begin, i_end) //получаем имя
i_row=find_row(s)
if (i_row>0)
{
tbl[i\_row][2]=‘Win’ //записываем его в победители
i_begin=i_end+1 //где-то здесь после tab начинается число
i_end=combat[number_string_in_combat].indexOf(experience_) //ищем слово expirience
if (i_end>0) //если оно есть
{
i_col=6
}
else //если его нет, то
{
i_col=7
i_end=combat[number_string_in_combat].indexOf(credits_) //ищем credits
}
if (i_end>0) //ищем число перед этим словом
{
var n=combat[number_string_in_combat].substring(i_begin, i_end-1) //но возможно, что там в начале пробелы
n=n.trim() //на всякий случай попробуем отрезать их
tbl[i\_row][i\_col]=n
}
}
}
continue
}
ind=combat[number_string_in_combat].indexOf(for_defeat) //ищем строку с проигравшим
if (ind>=0)
{
ind=combat[number_string_in_combat].indexOf(reward) //ищем в ней reward
if (ind>=0)
{
i_begin=ind=ind+8
while (combat[number_string_in_combat][i\_begin]==’ ') //отсчитываем пробелы до начала имени
{
i_begin++
}
i_end=i_begin+1
while (combat[number_string_in_combat].charCodeAt(i_end)!=9) //находим конец имени знак tab
{
i_end++
}
s=combat[number_string_in_combat].substring(i_begin, i_end) //получаем имя
i_row=find_row(s)
if (i_row>0)
{
tbl[i\_row][2]=‘Lose’ //записываем его в лузеры
i_begin=i_end+1 //где-то здесь после tab начинается число
i_end=combat[number_string_in_combat].indexOf(experience_) //ищем слово expirience
if (i_end>0) //если оно есть
{
i_col=6
}
else //если его нет, то
{
i_col=7
i_end=combat[number_string_in_combat].indexOf(credits_) //ищем credits
}
if (i_end>0) //ищем число перед этим словом
{
var n=combat[number_string_in_combat].substring(i_begin, i_end-1) //но возможно, что там в начале пробелы
n=n.trim() //на всякий случай попробуем отрезать их
tbl[i\_row][i\_col]=n
}
}
}
continue
}
}
calc_statistic()
date_to_table(number_table)
}
}
</script>
<br>
<p>Open file combat.log and copy-past to window (wait sometime abt 1-3 minute)</p>
<br>
<textarea id=combatlog_text rows=16 cols=200></textarea>
<hr>
<p>Press button “log’s analysis” for getting games’ list</p>
<button onclick=start_()>log’s analysis</button>
<br>
<textarea rows=16 cols=200 id=cnsl></textarea>
<hr>
<p>Input numbers of games’ or/and press button “calc”</p>
<input type=text id=choice_games></input>
<input type=checkbox checked id=check_simple>Simple table</input>
<br>
<button onclick=‘calc_()’>calc</button>
<hr>
<input type=text size=10 id=count1><input type=text size=40 id=date_text>
<hr>
<div id=results_block></div>
</body>
</html>
то же на js