Ищу парсер на Java npc xml

sergebaz

Прославленный
Местный
Сообщения
507
Розыгрыши
0
Решения
1
Репутация
230
Реакции
99
Баллы
1 443
Хроники
  1. Chaotic Throne: High Five
Сборка
Lostworld
Доброго времени, ищу парсер, у меня потребность перегнать с других сборок xml под лостворлд статы и дроп нпсов, а так же спавн, буду благодарен любым подсказкам!
 
Если найдете, поделитесь с сообществом, пожалуйста!
 
Не думаю что существует какое-то универсальное решение, скорее всего придется искать исполнителя и платить за работу.
 
Писать парсер под конкретную задачу?
 
Писать парсер под конкретную задачу?
А как иначе? Не думаю что существует парсер который перегоняет xml любой сборки в нужный. Написать такой не проблема, но универсального решения я думаю не существует. Да и зачем? С начальными знаниями в программировании такие парсеры пишутся за несколько часов.
 
А как иначе? Не думаю что существует парсер который перегоняет xml любой сборки в нужный. Написать такой не проблема, но универсального решения я думаю не существует. Да и зачем? С начальными знаниями в программировании такие парсеры пишутся за несколько часов.
зачем xml перегонять в xml?)
 
зачем xml перегонять в xml?)
переделать дроп хочу, убрать комон предметы вернуть обычные и немного поправить сундуки
Не думаю что существует какое-то универсальное решение, скорее всего придется искать исполнителя и платить за работу.
не рассматриваю коммерческие предложения, получившийся парсер выложу в тему!
 
Если xml то можно попробовать JSON, но это еще большая головная боль, чем писать парсер. Проще забить и выправить руками за пару недель - единственное эффективное с точки зрения минимального потери времени решение, которое я нашел. Спустить неделю в трубу и написать нерабочий парсер - нахрен оно не нужно.
 
Если xml то можно попробовать JSON, но это еще большая головная боль, чем писать парсер. Проще забить и выправить руками за пару недель - единственное эффективное с точки зрения минимального потери времени решение, которое я нашел. Спустить неделю в трубу и написать нерабочий парсер - нахрен оно не нужно.
Да ладно тебе, какую неделю? На php это делается за 1 день. По крайней мере я перегнал себе всех npc с PTS сборки за 1 день. А сейчас перегоняю итемы, что тоже займет 1-2 дня.

XML:
<npc id="20055" pts_name="[seer]" name="Wandering Eye" title="">
    <set name="displayid" value="0"/>
    <set name="level" value="21"/>
    <set name="race" value="construct"/>
    <set name="sex" value="male"/>
    <set name="type" value="L2Monster"/>
    <set name="pts_type" value="warrior"/>
    <set name="ai_type" value="Mystic"/>
    <set name="aggro" value="0"/>
    <set name="pts_agro_range" value="1000"/>
    <set name="exp" value="917"/>
    <set name="sp" value="42"/>
    <set name="rp" value="0"/>
    <set name="s_npc_prop_hp_rate" value="1"/>
    <set name="org_hp" value="364.30351"/>
    <set name="org_hp_regen" value="3.5"/>
    <set name="org_mp" value="205.2"/>
    <set name="org_mp_regen" value="1.5"/>
    <set name="base_physical_attack" value="47.91924"/>
    <set name="base_defend" value="89.73059"/>
    <set name="base_magic_attack" value="32.72263"/>
    <set name="base_magic_defend" value="59.7436374813816"/>
    <set name="base_attack_speed" value="253"/>
    <set name="base_attack_type" value="sword"/>
    <set name="base_attack_range" value="40"/>
    <set name="base_damage_range" value="0;0;80;120"/>
    <set name="base_rand_dam" value="30"/>
    <set name="base_critical" value="4"/>
    <set name="physical_hit_modify" value="4.75"/>
    <set name="physical_avoid_modify" value="0"/>
    <set name="ground_high" value="159;0;0"/>
    <set name="ground_low" value="90;0;0"/>
    <set name="shield_defense_rate" value="0"/>
    <set name="shield_defense" value="0"/>
    <set name="str" value="40"/>
    <set name="con" value="43"/>
    <set name="dex" value="30"/>
    <set name="int" value="21"/>
    <set name="wit" value="20"/>
    <set name="men" value="20"/>
    <set name="ex_crt_effect" value="false"/>
    <set name="undying" value="false"/>
    <set name="can_move" value="true"/>
    <set name="unsowing" value="false"/>
    <set name="flying" value="false"/>
    <set name="targetable" value="true"/>
    <set name="show_name_tag" value="true"/>
    <set name="can_be_attacked" value="true"/>
    <set name="unique" value="false"/>
    <set name="no_sleep_mode" value="false"/>
    <set name="has_summoner" value="false"/>
    <set name="passable_door" value="false"/>
    <set name="event_flag" value="false"/>
    <set name="shots" value="NONE"/>
    <set name="soulshot_count" value="0"/>
    <set name="spiritshot_count" value="0"/>
    <set name="safe_height" value="100"/>
    <set name="corpse_time" value="7"/>
    <set name="base_reuse_delay" value="0"/>
    <set name="hit_time_factor" value="0.3"/>
    <set name="class" value="monster_eye"/>
    <set name="collision_radius" value="21.0"/>
    <set name="collision_height" value="43.0"/>
    <set name="rhand" value="0"/>
    <set name="lhand" value="0"/>
    <set name="armor" value="0"/>
    <faction name="" range="300"/>
    <attributes>
        <defence attribute="fire" value="20"/>
        <defence attribute="water" value="20"/>
        <defence attribute="wind" value="-5"/>
        <defence attribute="earth" value="20"/>
        <defence attribute="holy" value="20"/>
        <defence attribute="unholy" value="20"/>
    </attributes>
    <passive_skills>
        <skill pts_name="[s_npc_prop_race_construct]"/>
        <skill pts_name="[s_npc_prop_hp_lv_p0]"/>
        <skill pts_name="[s_npc_prop_mp_lv_p0]"/>
        <skill pts_name="[s_npc_prop_pa_lv_n1]"/>
        <skill pts_name="[s_npc_prop_ma_lv_n1]"/>
        <skill pts_name="[s_npc_prop_pd_lv_p1]"/>
        <skill pts_name="[s_npc_prop_md_lv_p1]"/>
        <skill pts_name="[s_npc_prop_armor_type_n]"/>
        <skill pts_name="[s_npc_prop_weapon_type_sword]"/>
        <skill pts_name="[s_npc_weakness_bow1]"/>
    </passive_skills>
    <npc_ai name="seer">
        <param name="MoveAroundSocial" value="0"/>
        <param name="MoveAroundSocial1" value="0"/>
        <param name="MoveAroundSocial2" value="0"/>
        <param name="SoulShot" value="200"/>
        <param name="SoulShotRate" value="5"/>
        <param name="SpiritShot" value="100"/>
        <param name="SpiritShotRate" value="5"/>
        <param name="W_LongRangeDDMagic" value="[s_mega_storm_strike_magic_only2]"/>
        <param name="W_ShortRangeDDMagic" value="[s_npc_aura_burn_magic_only2]"/>
    </npc_ai>
    <rewardlist type="RATED_GROUPED">
        <group chance="70">
            <reward item_id="57" chance="100.0" min="156" max="278" name="Adena"/>
        </group>
        <group chance="0.1338">
            <reward item_id="219" chance="8.0235" min="1" max="1" name="Sword Breaker"/>
            <reward item_id="2015" chance="91.9765" min="1" max="1" name="Sword Breaker Edge"/>
        </group>
        <group chance="14.1429">
            <reward item_id="1869" chance="28.5484" min="1" max="1" name="Iron Ore"/>
            <reward item_id="1864" chance="57.0968" min="1" max="1" name="Stem"/>
            <reward item_id="1880" chance="2.8548" min="1" max="1" name="Steel"/>
            <reward item_id="2177" chance="9.1209" min="1" max="1" name="Recipe: Bone Helmet"/>
            <reward item_id="735" chance="2.3791" min="1" max="1" name="Alacrity Potion"/>
        </group>
    </rewardlist>
    <rewardlist type="SWEEP">
        <reward item_id="2176" chance="16.3503" min="1" max="1" name="Recipe: Leather Boots"/>
        <reward item_id="1928" chance="4.9777" min="1" max="1" name="Piece Bone Gaiters Fragment"/>
        <reward item_id="1926" chance="3.4517" min="1" max="1" name="Piece Bone Breastplate Fragment"/>
    </rewardlist>
    <rewardlist type="NOT_RATED_GROUPED">
        <group chance="42">
            <reward item_id="8600" chance="55.0" min="1" max="1" name="Herb of Life"/>
            <reward item_id="8601" chance="38.0" min="1" max="1" name="Greater Herb of Life"/>
            <reward item_id="8602" chance="7.0" min="1" max="1" name="Superior Herb of Life"/>
        </group>
        <group chance="11">
            <reward item_id="8603" chance="26.0" min="1" max="1" name="Herb of Mana"/>
            <reward item_id="8604" chance="65.0" min="1" max="1" name="Greater Herb of Mana"/>
            <reward item_id="8605" chance="9.0" min="1" max="1" name="Superior Herb of Mana"/>
        </group>
        <group chance="25">
            <reward item_id="8606" chance="20.0" min="1" max="1" name="Herb of Power"/>
            <reward item_id="8608" chance="20.0" min="1" max="1" name="Herb of Alacrity"/>
            <reward item_id="8610" chance="20.0" min="1" max="1" name="Herb of Critical Attack - Probability"/>
            <reward item_id="10655" chance="20.0" min="1" max="1" name="Herb of Vampiric Rage"/>
            <reward item_id="10656" chance="20.0" min="1" max="1" name="Herb of Critical Attack - Power"/>
        </group>
        <group chance="10">
            <reward item_id="8607" chance="50.0" min="1" max="1" name="Herb of Magic"/>
            <reward item_id="8609" chance="50.0" min="1" max="1" name="Herb of Casting Spd."/>
        </group>
        <group chance="1">
            <reward item_id="8612" chance="33.0" min="1" max="1" name="Herb of the Warrior"/>
            <reward item_id="8613" chance="33.0" min="1" max="1" name="Herb of the Mystic"/>
            <reward item_id="8614" chance="34.0" min="1" max="1" name="Herb of Recovery"/>
        </group>
        <group chance="11">
            <reward item_id="8611" chance="94.0" min="1" max="1" name="Herb of Speed"/>
            <reward item_id="10657" chance="3.0" min="1" max="1" name="Herb of Doubt"/>
            <reward item_id="13028" chance="3.0" min="1" max="1" name="Vitality Replenishing Herb"/>
        </group>
    </rewardlist>
</npc>

А вот подготовительные работы для предметов:
1633262587262.png
 
Последнее редактирование:
Да ладно тебе, какую неделю? На php это делается за 1 день. По крайней мере я перегнал себе всех npc с PTS сборки за 1 день. А сейчас перегоняю итемы, что тоже займет 1-2 дня.

XML:
<npc id="20055" pts_name="[seer]" name="Wandering Eye" title="">
    <set name="displayid" value="0"/>
    <set name="level" value="21"/>
    <set name="race" value="construct"/>
    <set name="sex" value="male"/>
    <set name="type" value="L2Monster"/>
    <set name="pts_type" value="warrior"/>
    <set name="ai_type" value="Mystic"/>
    <set name="aggro" value="0"/>
    <set name="pts_agro_range" value="1000"/>
    <set name="exp" value="917"/>
    <set name="sp" value="42"/>
    <set name="rp" value="0"/>
    <set name="s_npc_prop_hp_rate" value="1"/>
    <set name="org_hp" value="364.30351"/>
    <set name="org_hp_regen" value="3.5"/>
    <set name="org_mp" value="205.2"/>
    <set name="org_mp_regen" value="1.5"/>
    <set name="base_physical_attack" value="47.91924"/>
    <set name="base_defend" value="89.73059"/>
    <set name="base_magic_attack" value="32.72263"/>
    <set name="base_magic_defend" value="59.7436374813816"/>
    <set name="base_attack_speed" value="253"/>
    <set name="base_attack_type" value="sword"/>
    <set name="base_attack_range" value="40"/>
    <set name="base_damage_range" value="0;0;80;120"/>
    <set name="base_rand_dam" value="30"/>
    <set name="base_critical" value="4"/>
    <set name="physical_hit_modify" value="4.75"/>
    <set name="physical_avoid_modify" value="0"/>
    <set name="ground_high" value="159;0;0"/>
    <set name="ground_low" value="90;0;0"/>
    <set name="shield_defense_rate" value="0"/>
    <set name="shield_defense" value="0"/>
    <set name="str" value="40"/>
    <set name="con" value="43"/>
    <set name="dex" value="30"/>
    <set name="int" value="21"/>
    <set name="wit" value="20"/>
    <set name="men" value="20"/>
    <set name="ex_crt_effect" value="false"/>
    <set name="undying" value="false"/>
    <set name="can_move" value="true"/>
    <set name="unsowing" value="false"/>
    <set name="flying" value="false"/>
    <set name="targetable" value="true"/>
    <set name="show_name_tag" value="true"/>
    <set name="can_be_attacked" value="true"/>
    <set name="unique" value="false"/>
    <set name="no_sleep_mode" value="false"/>
    <set name="has_summoner" value="false"/>
    <set name="passable_door" value="false"/>
    <set name="event_flag" value="false"/>
    <set name="shots" value="NONE"/>
    <set name="soulshot_count" value="0"/>
    <set name="spiritshot_count" value="0"/>
    <set name="safe_height" value="100"/>
    <set name="corpse_time" value="7"/>
    <set name="base_reuse_delay" value="0"/>
    <set name="hit_time_factor" value="0.3"/>
    <set name="class" value="monster_eye"/>
    <set name="collision_radius" value="21.0"/>
    <set name="collision_height" value="43.0"/>
    <set name="rhand" value="0"/>
    <set name="lhand" value="0"/>
    <set name="armor" value="0"/>
    <faction name="" range="300"/>
    <attributes>
        <defence attribute="fire" value="20"/>
        <defence attribute="water" value="20"/>
        <defence attribute="wind" value="-5"/>
        <defence attribute="earth" value="20"/>
        <defence attribute="holy" value="20"/>
        <defence attribute="unholy" value="20"/>
    </attributes>
    <passive_skills>
        <skill pts_name="[s_npc_prop_race_construct]"/>
        <skill pts_name="[s_npc_prop_hp_lv_p0]"/>
        <skill pts_name="[s_npc_prop_mp_lv_p0]"/>
        <skill pts_name="[s_npc_prop_pa_lv_n1]"/>
        <skill pts_name="[s_npc_prop_ma_lv_n1]"/>
        <skill pts_name="[s_npc_prop_pd_lv_p1]"/>
        <skill pts_name="[s_npc_prop_md_lv_p1]"/>
        <skill pts_name="[s_npc_prop_armor_type_n]"/>
        <skill pts_name="[s_npc_prop_weapon_type_sword]"/>
        <skill pts_name="[s_npc_weakness_bow1]"/>
    </passive_skills>
    <npc_ai name="seer">
        <param name="MoveAroundSocial" value="0"/>
        <param name="MoveAroundSocial1" value="0"/>
        <param name="MoveAroundSocial2" value="0"/>
        <param name="SoulShot" value="200"/>
        <param name="SoulShotRate" value="5"/>
        <param name="SpiritShot" value="100"/>
        <param name="SpiritShotRate" value="5"/>
        <param name="W_LongRangeDDMagic" value="[s_mega_storm_strike_magic_only2]"/>
        <param name="W_ShortRangeDDMagic" value="[s_npc_aura_burn_magic_only2]"/>
    </npc_ai>
    <rewardlist type="RATED_GROUPED">
        <group chance="70">
            <reward item_id="57" chance="100.0" min="156" max="278" name="Adena"/>
        </group>
        <group chance="0.1338">
            <reward item_id="219" chance="8.0235" min="1" max="1" name="Sword Breaker"/>
            <reward item_id="2015" chance="91.9765" min="1" max="1" name="Sword Breaker Edge"/>
        </group>
        <group chance="14.1429">
            <reward item_id="1869" chance="28.5484" min="1" max="1" name="Iron Ore"/>
            <reward item_id="1864" chance="57.0968" min="1" max="1" name="Stem"/>
            <reward item_id="1880" chance="2.8548" min="1" max="1" name="Steel"/>
            <reward item_id="2177" chance="9.1209" min="1" max="1" name="Recipe: Bone Helmet"/>
            <reward item_id="735" chance="2.3791" min="1" max="1" name="Alacrity Potion"/>
        </group>
    </rewardlist>
    <rewardlist type="SWEEP">
        <reward item_id="2176" chance="16.3503" min="1" max="1" name="Recipe: Leather Boots"/>
        <reward item_id="1928" chance="4.9777" min="1" max="1" name="Piece Bone Gaiters Fragment"/>
        <reward item_id="1926" chance="3.4517" min="1" max="1" name="Piece Bone Breastplate Fragment"/>
    </rewardlist>
    <rewardlist type="NOT_RATED_GROUPED">
        <group chance="42">
            <reward item_id="8600" chance="55.0" min="1" max="1" name="Herb of Life"/>
            <reward item_id="8601" chance="38.0" min="1" max="1" name="Greater Herb of Life"/>
            <reward item_id="8602" chance="7.0" min="1" max="1" name="Superior Herb of Life"/>
        </group>
        <group chance="11">
            <reward item_id="8603" chance="26.0" min="1" max="1" name="Herb of Mana"/>
            <reward item_id="8604" chance="65.0" min="1" max="1" name="Greater Herb of Mana"/>
            <reward item_id="8605" chance="9.0" min="1" max="1" name="Superior Herb of Mana"/>
        </group>
        <group chance="25">
            <reward item_id="8606" chance="20.0" min="1" max="1" name="Herb of Power"/>
            <reward item_id="8608" chance="20.0" min="1" max="1" name="Herb of Alacrity"/>
            <reward item_id="8610" chance="20.0" min="1" max="1" name="Herb of Critical Attack - Probability"/>
            <reward item_id="10655" chance="20.0" min="1" max="1" name="Herb of Vampiric Rage"/>
            <reward item_id="10656" chance="20.0" min="1" max="1" name="Herb of Critical Attack - Power"/>
        </group>
        <group chance="10">
            <reward item_id="8607" chance="50.0" min="1" max="1" name="Herb of Magic"/>
            <reward item_id="8609" chance="50.0" min="1" max="1" name="Herb of Casting Spd."/>
        </group>
        <group chance="1">
            <reward item_id="8612" chance="33.0" min="1" max="1" name="Herb of the Warrior"/>
            <reward item_id="8613" chance="33.0" min="1" max="1" name="Herb of the Mystic"/>
            <reward item_id="8614" chance="34.0" min="1" max="1" name="Herb of Recovery"/>
        </group>
        <group chance="11">
            <reward item_id="8611" chance="94.0" min="1" max="1" name="Herb of Speed"/>
            <reward item_id="10657" chance="3.0" min="1" max="1" name="Herb of Doubt"/>
            <reward item_id="13028" chance="3.0" min="1" max="1" name="Vitality Replenishing Herb"/>
        </group>
    </rewardlist>
</npc>

А вот подготовительные работы для предметов:
Посмотреть вложение 39692
А зачем было перегонять если можно прямо с ПТС данных создавать объекты?)
Хотя кому-то xml приятней в работе, я лично нажрался уже его и в итоге прямо с ПТС скриптов работаю
 
А как иначе? Не думаю что существует парсер который перегоняет xml любой сборки в нужный. Написать такой не проблема, но универсального решения я думаю не существует. Да и зачем? С начальными знаниями в программировании такие парсеры пишутся за несколько часов.
а в чем проблема? в том же пхп хмл-файл считывается в память в виде объекта по сути всего одной строкой (смотри в сторону функции simplexml_load_file)
после чего просто поезжаешся по этому объекту, вытаскивая нужные данные и сохраняя это все уже в новом, нужном формате.
ну или еще что с ними делаешь, все зависит от того чего ты хочешь.

считать и разобрать скрипты птс с данными в виде key=value тоже можно легко, получив в итоге простейший двумерный массив, из данных которого тоже можно быстро отгенерить хмлку или еще что сделать.
 
А зачем было перегонять если можно прямо с ПТС данных создавать объекты?)
Хотя кому-то xml приятней в работе, я лично нажрался уже его и в итоге прямо с ПТС скриптов работаю
По сути да, тут уже вопрос привычки на самом деле. К слову со скиллами мы так и поступили, просто перегнали строки в xml теги с кучей атрибутов, решили не усложнять себе жизнь. А вот в итемах можно исключить определенные параметры, которые не используются в определенных типах предметов, что тоже упрощает дальнейшую работу с ними. Вобщем решили реализовать скиллдвиг нормально, и вытащили клубок в виде предметов, статов и прочей прелести, сидим теперь, не знаем за что ухватится =)

а в чем проблема? в том же пхп хмл-файл считывается в память в виде объекта по сути всего одной строкой (смотри в сторону функции simplexml_load_file)
после чего просто поезжаешся по этому объекту, вытаскивая нужные данные и сохраняя это все уже в новом, нужном формате.
ну или еще что с ними делаешь, все зависит от того чего ты хочешь.
Да я понимаю как работать с xml в php, я к тому, что автору темы нужен парсер, который перегонит xml любой сборки под его сборку, с учетом неймингов, параметров и так далее. Я лишь говорю что универсального решения нет, так как нейминги, структура и т.п. отличаются.
 
По сути да, тут уже вопрос привычки на самом деле. К слову со скиллами мы так и поступили, просто перегнали строки в xml теги с кучей атрибутов, решили не усложнять себе жизнь. А вот в итемах можно исключить определенные параметры, которые не используются в определенных типах предметов, что тоже упрощает дальнейшую работу с ними. Вобщем решили реализовать скиллдвиг нормально, и вытащили клубок в виде предметов, статов и прочей прелести, сидим теперь, не знаем за что ухватится =)


Да я понимаю как работать с xml в php, я к тому, что автору темы нужен парсер, который перегонит xml любой сборки под его сборку, с учетом неймингов, параметров и так далее. Я лишь говорю что универсального решения нет, так как нейминги, структура и т.п. отличаются.
Хз, после годов еботни в xml, в итоге перешел на птс структуру, которая занимает на много меньше места и проще редактируется в случае внедрения данных с других хроник (ctrl+c ctrl+v)
 
Хз, после годов еботни в xml, в итоге перешел на птс структуру, которая занимает на много меньше места и проще редактируется в случае внедрения данных с других хроник (ctrl+c ctrl+v)
Действительно ваш совет достаточно ценный, но я все таки хочу остановиться на xml формате и все реализовать на Java. Ситуация напомнила офтотоп:
 
Хз, после годов еботни в xml, в итоге перешел на птс структуру, которая занимает на много меньше места и проще редактируется в случае внедрения данных с других хроник (ctrl+c ctrl+v)
Полностью с тобой соглашусь), а касаемо переноса инфы с 1 хмл в формат другого парсер мин 30 час писать. на той же яве или пайтоне.
 
Действительно ваш совет достаточно ценный, но я все таки хочу остановиться на xml формате и все реализовать на Java. Ситуация напомнила офтотоп:
А я и говорю про реализацию считывания ПТС формата на Яве. Дело ваше что и как делать.
П.с. уникального репарсера нету и тем более бесплатно. Либо своими силами делать, либо искать исполнителя саморитянина из юнисефа/за шекели.
 
Хз, после годов еботни в xml, в итоге перешел на птс структуру, которая занимает на много меньше места и проще редактируется в случае внедрения данных с других хроник (ctrl+c ctrl+v)
не знаю, по мне так наоборот формат данных в птс кажется чрезмерно громоздким, особенно к примеру скиллдата та же - когда к примеру от уровня к уровню у скилла меняются значения дай бог одного-двух параметров, но ты должен все равно для каждого уровня полностью строки со всеми параметрами расписывать...
 
KanuToIIIKa,
Sarcasm:
смотрим скилы ява сборки - 6-7 мб
смотрим птс - очудо 90 мегабайт текстовик
ну прям очень удобно к редактированию
 
если парсить с птс то как минимум надо чтобы сборка читала все параметры, чего в принципе нету. Проще запарсить данные с какого-нибудь сайта которые интересуют. Скрипт пишется минут за 30 максимум
Офтоп - а что лосты еще актуальны?)
 
Назад
Сверху Снизу