|
Tools Обсуждение программ для MaNGOS |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
15.05.2012, 20:35 | #1 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
WoWHead Data parser
Представляю вам свой WoWHead Data parser, который я пишу уже довольно долго, когда только появляется свободное время.
Ссылка на репозиторий: https://github.com/Lordron/WoWHead-data-parser Бинарники в аттаче (.NET 4.0 Client Profile) Парсер поддерживает 4 вида парсинга: -По одному Id -По диапазону Id -По списку Id -По фильтру вовхеда (только некоторые парсеры) Хочу обратить внимание, что список Id я получил с вовхеда, а не брал его из головы. В первом выпадающем меню выбирается локализация и, соответственно, сервер. Во втором выпадающем меню выбирается парсер Single, Multiple, List, WoW Head Filter - вид парсера, я описывал выше. (Если вы выбрали тип List, то в выпадающем меню в этой вкладке выбирайте ту строку, которая похожа на парсер. Т.е для парсера тренеров - trainer.welf, а для книжек - page.welf) Программа поддерживает следующие парсеры С версии 2.1 добавлен конфиг файл, в котором мы можете настроить вывод sql запросов Welf format Пожалуйста тестируйте и отписывайтесь о том, что не исправно и чего не хватает. Очень жду ваших отзывов! Changelog Последний раз редактировалось Lordronn; 24.05.2012 в 19:06. |
4 пользователя(ей) сказали cпасибо: |
15.05.2012, 21:06 | #2 |
Пользователь
|
1)не хватает наверно ,или кнопки about или версии в заголовке
2)запретить развертку во все окно ,так как становиться криво. 3) 4)Multiple->1-50->start->abort->yes-abort->yes->crash вообщем везде если прервать операцию и повторно нажать прервать да ->краш. 5)м.б сохранять последний язык парсинга в конфиге? 6) p.s В Любом случае интересный продукт ,удачного развития проекта. add. 7) не помешало бы определенное положение формы (about) и запоминать положение main окна. 8)от опции русского языка я думаю тоже не стоит отказываться тестирую....
__________________
Когда-нибудь на оффе поставят Mangos... Последний раз редактировалось partizanes; 15.05.2012 в 22:47. |
Пользователь сказал cпасибо: | Lordronn (15.05.2012) |
15.05.2012, 21:28 | #3 | |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
Цитата:
add: 1,2,4,5 - готово! сделал сохранение последнего выбранного парсера и языка файл добавил жду еще предложений! add: 6.Он заблокирован) + так выходит значительно быстрее, чем каждый раз преобразовывать число в текст 7.Не думаю что это нужно 8.Сделаю, как с локализациями разберусь. Тогда все сообщения и интерфейс переведу Последний раз редактировалось Lordronn; 15.05.2012 в 22:48. |
|
15.05.2012, 22:50 | #4 |
Пользователь
|
__________________
Когда-нибудь на оффе поставят Mangos... |
15.05.2012, 23:12 | #5 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
Почему, варианта. Просто в случае с нумерикАпДаун-ом мы увеличиваем каждый раз число на 1 - просто и быстро. А в случае с лейблом надо сначала нужно перевести число в строку, и уже поставить ее лейблу, что значительно медленнее.
Жду дальше предложений и багов! |
18.05.2012, 13:15 | #6 |
Пользователь
|
очень долго загружается 15-20 сек на очень мощных машинах (release/debug)
вопрос что так долго подгружает и нельзя ли вынести в отдельный поток *?
__________________
Когда-нибудь на оффе поставят Mangos... |
18.05.2012, 13:51 | #7 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
Хм и правда. Я бы подумал, что дело в дб2 файлах, но тут на них тратиться 36мс. Сейчас покопаю
Нашел! Вся задержка из-за загрузки welf файла. При запуске он автоматом грузит первый файл из списка, и получается так, что этот файл как-раз item.welf, а там 60к записей. Можно попробовать вынести загрузку в отдельный поток, но может произойти так(как раз таки на такой файле), что он еще будет грузиться, а вы уже будете его использовать. Так что думаю это не вариант. Думаю надо придумывать какой нибудь другой способ хранения, уже вроде и структуру придумал Код:
struct MainHeader { string Name; // Имя парсера, для автоассоциации парсера и файла int length; // Кол-во записей } Код:
struct Block { uint Id } Последний раз редактировалось Lordronn; 18.05.2012 в 14:32. |
18.05.2012, 15:20 | #8 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
https://github.com/Lordron/WoWHead-d...a6718dd6e4bfa4
Исправил, пока welf-ы не переделывал. Думаю та проверка и вовсе не нужна была. Если генерировать файлы welf креатор (надо будет кстати его переписать основательно), то даблов вообще быть не может |
Пользователь сказал cпасибо: | partizanes (18.05.2012) |
18.05.2012, 15:21 | #9 |
Пользователь
|
Почему бы у пользователя при надобности не спросить загрузить или нет?
или при первом вызове?*
__________________
Когда-нибудь на оффе поставят Mangos... |
18.05.2012, 15:31 | #10 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
Смысла нету. Сейчас уже загрузка идет меньше чем за секунду, по этому никто этого не заметит
|
21.05.2012, 00:23 | #11 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
https://github.com/Lordron/WoWHead-d...bf1ad6d5a46206
Обновил юзер агенты, и увеличил их кол-во до 20. Взял теперь новые юзер агенты для новых браузеров (сафари, мозила, опера, хром) + фиксы по мелочи |
21.05.2012, 18:18 | #12 |
Ученый
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
|
Неплохо, пару недель я хотел написать что-то похожее на Delphi, но решил изучать c++.
Насчет проги: 1) хотелось бы видеть русскую прогу; 2) прога немного тормозит, хотя машина у меня не слабая.
__________________
sql-language.ru Последний раз редактировалось lovepsone; 21.05.2012 в 18:31. |
21.05.2012, 19:00 | #13 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
1.Сделаю, как только пойму как сделать локализацию нормально
2.Что именно? Знаю парсеры почему-то тормозят дойдя до опр. уровня. Например вендор парсер всегда почему-то тормозит на 950-980 ентри (если использовать список), не знаю даже почему. |
21.05.2012, 19:38 | #14 |
Ученый
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
|
а если локализацию пихать в отдельный файл, к примеру lang/russian.xml? Далее в настройках пользователь сам будет выбирать нужный ему язык. Правда наверное это увеличит нагрузку, при передачи значений в опции формы. Я наверное так и сделал бы.
__________________
sql-language.ru |
21.05.2012, 22:13 | #15 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
Тут есть и стандартные средства. Я начал локализацию потихоньку, но что-то не пойму как программно сменить язык.
|
23.05.2012, 17:28 | #16 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
Сделал! Смотрите последние коммиты. Жду отзывов.
Пока нашел только 1 баг: после смены локализации консоль очищается, но в лог файл все пишеться |
Пользователь сказал cпасибо: | lovepsone (24.05.2012) |
24.05.2012, 19:04 | #17 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
Обновил библиотеку Newtonsoft.Json.dll с 4.0.8.14612 до 4.5.5.14917
Как видно разница большая. Вы почувствуйте уменьшенную нагрузку на процессор при парсинге. Также новые бинарники 2.3.1 2.3.1 -Обновление библиотеки Newtonsoft.Json.dll, что даст множество улучшений -Локализация приложений -Сохранение последнего использованного парсера и локаля -Исправлено 2 краша -Добавлена About окошко -Исправлены найденные баги -Небольшая оптимизация |
27.05.2012, 14:01 | #18 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
Что-то вовхед тупит последнее время, работает медленно. Сильно мешает в разработке npc parser-а. У меня одного такая проблема? А то вдруг они мне что-то сделали, за то что я постоянно парсю вовхед)
|
27.05.2012, 15:58 | #19 |
MaNGOS Dev
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
|
Открыл, нажал List, выбрал item.welf, нажал Start.
И уже часа как полтора Parsing на 64750 |
27.05.2012, 16:00 | #20 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
Вот и я о том же. вовхед тупит жестко. Надо будет сделать максимальное время ожидания. Если больше N минут, то останавливать
+ надо будет Abort кнопку переделать, чтобы не ожидать завершения всех операций, а самому их завершать. Придется тогда при создании реквеста помещать его в массив, а после удалять. И после остановки приложения останавливать все существующих на данный момент реквесты Последний раз редактировалось Lordronn; 27.05.2012 в 16:50. |
27.05.2012, 17:13 | #21 | |
MaNGOS Dev
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
|
Цитата:
|
|
27.05.2012, 17:16 | #22 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
Угу. Там вовхед глючит, и не отправляет ответ. А пока ответ не придет так и будет весеть 64750). Хз почему так, всмысле почему вовхед не отдает.
64750 - это не ласт ИД, это последний Ид в списке под номером 64750. На самом деле последний Ид - 79062 |
02.06.2012, 23:33 | #23 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
Обновил DBFilesClient.NET.dll
https://github.com/Lordron/WoWHead-d...18c494471f7244 благодаря новой версии парсинг вендоров теперь не так сильно нагружает процессор |
03.06.2012, 12:27 | #24 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
Просматривал кол-во открытых соединений и выяснил причину висяков. Я про те висяки, когда прога бесконечно ожидала данные. Когда висела на 2599 из 2600 например.
Причина такого бага в том, что из-за какой-то неизвестной х**ни кол-во открытых соединений равно 0, в то время как программа еще работает. По какой-то причине новые подключения больше не создаются или же уже были закрыты раньше. Программа ждет пока все семафоры будут освобождены. Семафоры я освобождаю вместе с закрытием подключения. По этому я думаю, что программа перестает создавать подключения. Только в такой случае может быть такое разногласие, когда семафоры не высвобождаются из-за того, что новые соединения не создаются. add: да, все верно Последний раз редактировалось Lordronn; 03.06.2012 в 12:34. |
03.06.2012, 12:42 | #25 | |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Цитата:
я с ним не работаю уже много лет, поэтому знания относятся ко временам WinXP, но думаю ничего не изменилось. количество доступных для процесса сокетов в винсоке - величина динамическая, и вовсе не равна FFFF-(число открытых), ее надо запрашивать спец. методом, и заранее предполагать что число более 1024 - скорее всего неверное... в реальности проще вести счетчик в софтине самостоятельно, закладываясь на ограничение 256 для клиентской винды и 1024 для серверной. |
|
03.06.2012, 12:58 | #26 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
У меня максимальное кол-во подключений - 100
|
14.06.2012, 11:18 | #28 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Небольшое уточнение: в winsock нет функций для работы с протоколом http.
Этим занимается библиотека Wininet, которая является более высокоуровненвой по сравнению с winsock и включает в себя функции для работы по http и ftp протоколам. |
03.06.2012, 13:46 | #29 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
Вот бинарники свежие, версию пока не менял.
|
09.06.2012, 22:43 | #30 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
Сижу мучаюсь уже 2 вечер. Выслушаю любые предложения и идеи по оптимизации. За 2 вечера ничего толкового не получилось
|
10.06.2012, 14:49 | #31 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
После долгих опытов и тестов выяснил, что основной висяк идет из-за блокировки
Код:
lock (_threadLock) |
15.06.2012, 15:32 | #32 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
Сделал пару изменений, пока не пушал. Уже 2 дня тестирую стабильность и вроде крашей нету. Тестировал на вендорах (2.6к записей). Сейчас начал тестировать на item-ах. Там 64750 записей, как раз протестирую полностью
Вот список запланированных изменений для следующей версии -Автоматически загружать welf файл при выборе парсера. Если используется кастомный файл, то его можно будет потом поменять. -Перенос парсинга юнитов и квестов с фильтра на обычный лад -В связи с предыдущей пунктом расширю возможности парсинга юнитов и квестов. Буду вытягивать побольше данных |
17.06.2012, 12:13 | #33 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
Набросал кошерный npc парсер, не использующий вовхед фильтры. Удалось вытащить следующие поля
Data: -Level -Money -Currency -Type -Quotes Locale: -Name К сожалению SubName вытащить пока не удалось |
Пользователь сказал cпасибо: | lovepsone (29.06.2012) |
17.06.2012, 12:46 | #34 |
Администратор
|
Я так вытаскиваю name и subname:
Код:
<div class="text">(?:(?!<h1>).+?)<h1>\s*((?!<^;|</h1>).+?)\s*(?:<^;((?!>^;).+?)>^;)?< Пишу на Parser 3.4.1, поэтому спецсимволы экранирую символом ^ |
29.06.2012, 14:09 | #35 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
Вот предварительный вариант скула для Лорда Ребрада (36612)
Хочу еще вытащить ХП Код:
-- Dump of 6/29/2012 2:06:48 PM (00:00:02.0161153), Total object count: 1 DROP TABLE IF EXISTS `creature_currency_template`; CREATE TABLE `creature_currency_template` ( `entry` int(10) NOT NULL, `currencyId` int(10) NOT NULL default '0', `currencyAmount` int(10) NOT NULL default '0', PRIMARY KEY (`entry`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; DROP TABLE IF EXISTS `creature_quotes`; CREATE TABLE `creature_quotes` ( `entry` mediumint(8) unsigned NOT NULL DEFAULT '0', `id` tinyint(3) unsigned NOT NULL DEFAULT '0', `type` tinyint(3) unsigned NOT NULL DEFAULT '0', `text` longtext, PRIMARY KEY (`entry`,`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `creature_template` (`entry`, `minlevel`, `maxlevel`) VALUES ('36612', '9999', '9999'); INSERT INTO `creature_template` (`entry`, `mingold`, `maxgold`) VALUES ('36612', '1229967', '1229967'); INSERT INTO `creature_currency_template` (`entry`, `currencyId`, `currencyAmount`) VALUES ('36612', '395', '24'); INSERT INTO `creature_quotes` (`entry`, `id`, `type`, `text`) VALUES ('36612', '0', '14', 'Лорд Ребрад кричит: Костяная хватка!'), ('36612', '1', '14', 'Лорд Ребрад кричит: Кости для жертвоприношений!'), ('36612', '2', '14', 'Лорд Ребрад кричит: Плеть накроет этот мир волной смерти и разрушения!'), ('36612', '3', '14', 'Лорд Ребрад кричит: Постой-ка тут!'), ('36612', '4', '14', 'Лорд Ребрад кричит: Сгинь в вечных муках!'), ('36612', '5', '14', 'Лорд Ребрад кричит: Смертные! Ваш путь закончится, так и не начавшись. Никто не смеет входить в обитель господина!'), ('36612', '6', '14', 'Лорд Ребрад кричит: Я вижу... лишь тьму.'), ('36612', '7', '14', 'Лорд Ребрад кричит: ВИХРЬ КОСТЕЙ!'), ('36612', '8', '14', 'Лорд Ребрад кричит: Единственный выход – это смерть!'); Последний раз редактировалось Lordronn; 29.06.2012 в 14:37. |
Пользователь сказал cпасибо: | lovepsone (29.06.2012) |
29.06.2012, 20:46 | #36 |
Администратор
|
По тому же нпц результаты моего скрипта (может, что-то еще доставать будешь):
Код:
INSERT INTO `creature_template_stat` SET `entry`=36612, `Health_N10`=6972500, `Health_N25`=23706500, `Health_H10`=10458750, `Health_H25`=31376250 ON DUPLICATE KEY UPDATE `entry`=36612, `Health_N10`=6972500, `Health_N25`=23706500, `Health_H10`=10458750, `Health_H25`=31376250; INSERT INTO `creature_template` SET `entry`='36612', `name`='Lord Marrowgar', `mingold`='1214082', `maxgold`='1214082' ON DUPLICATE KEY UPDATE `entry`='36612', `name`='Lord Marrowgar', `mingold`='1214082', `maxgold`='1214082'; UPDATE `creature_template` SET `faction_a`=14, `faction_h`=14 WHERE `entry`=36612; |
29.06.2012, 20:55 | #37 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
1.Тебе удобнее, на C# нету такого парсера html
Хп я пока не могу достать, а имя и под_имя - дело локаль парсера, благо он у меня пашет 2.Как ты определил фракцию только по цвету? Не думаю что это верно, есть же куча других factionId которые дают такую же враждебность как и 14 фракция, хотя если фракции вообще нету то как затычка до сниффа сойдет. Для зеленых и жолтых какие factionId юзаешь? |
29.06.2012, 21:11 | #38 | |
YTDB Dev
Регистрация: 01.02.2010
Сообщений: 288
Сказал(а) спасибо: 125
Поблагодарили 97 раз(а) в 53 сообщениях
|
Цитата:
|
|
30.06.2012, 19:43 | #39 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
Добавил Health парсер. Поставил парситься. Результат будет через пол часа, надеюсь все предусмотрел
add: Спарсил, обнаружил 9к + мобов у которых я не получил ХП. Проблема вы том что у большенства и правда на вовхеде нету ХП, а у остальных я и не знаю как проверить наличие хп, все 9к страниц я не просмотрю. Также нашел еще 1 проблему. Я то думал что максимум на вовхеде будет ХП для 4 уровней сложности, а там еще у некоторых есть ХП для поиска рейда, + у некоторых вообще 7 ХП (нормал, героик, 4 сложности + поиск рейда) http://ru.wowhead.com/npc=14337 Сейчас вроде придумал как распределять ХП Если кол-во хп = 1, то это обычное ХП Если кол-во хп = 2, то это обычное и героическое ХП Если кол-во хп = 4, то это 4 уровня сложности Если кол-во хп = 5, то это 4 уровня сложности + рандом_рейд Если кол-во хп = 6, то это нормал, героик + 4 уровня сложности Если кол-во ХП = 7, то это нормал, героик, 4 уровня сложности + рандом_рейд Нет, я ошибка. Может быть и так, что если у моба 6хп, то это нормал, героик, 3 сложности + рандом_рейд http://ru.wowhead.com/npc=32345 Так что тут придется извратиться Последний раз редактировалось Lordronn; 30.06.2012 в 20:36. |
30.06.2012, 21:40 | #40 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Какой может быть уровень сложности у non combat петов и рем бота инженерского? Вы о чем вообще?
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[PHP] Wowhead Items Parser | Shadez | Tools | 3 | 22.08.2011 15:49 |
[разработка]Wow Packet Parser | alien | Tools | 78 | 21.06.2011 23:37 |
Тултипы wowhead | Sid | Флудильня | 2 | 18.06.2011 23:19 |
Parser 4.x.x | ANTOMA | Tools | 3 | 10.12.2010 18:15 |
wdb-parser | Konctantin | Tools | 0 | 23.08.2010 11:14 |