Парсинг скилов из 507 клиента [ Orc Village - Warg ]

Thatgun

Свой человек
Участник
Сообщения
36
Розыгрыши
0
Репутация
27
Реакции
57
Баллы
588
Где в клиенте эти данные <effect level=...>могут быть ?

Это из скилов серва от L2Scripts
<effect level="1">
<p_trigger_skill_by_attack attacked_type="enemy_all" attacked_min_level="1" attacked_max_level="99" attack_type="2" min_damage="1" chance="30" mode="diff" skill_id="45255" skill_level="1" target="target" equip_categories="all" />
<p_trigger_skill_by_magic_type magic_types="0" effect_point_type="2" chance="30" skill_id="45255" skill_level="1" target="target" />
</effect>

<effect level="1">
<i_p_attack power="694" crit_rate="5" ignore_def_mode="2" ignore_def_factor="5" />
</effect>

<effect level="1">
<p_physical_attack equip_categories="all" value="10" mode="per" />
<p_physical_attack equip_categories="all" value="60" mode="diff" />
</effect>

<effect level="1">
<p_physical_attack equip_categories="all" value="-10" mode="per" />
<p_magical_attack equip_categories="all" value="-10" mode="per" />
<p_critical_rate equip_categories="all" value="-3" mode="diff" />
<p_magic_critical_rate equip_categories="all" value="-3" mode="diff" />
</effect>

Аналогичные данные из скилов Mobius Suoerion 502P

<effects>
<effect name="PhysicalDamage">
<power>
<value level="1">738</value>
<value level="2">784</value>
<value level="3">833</value>
<value level="4">884</value>

Облазил все dat файлы с которыми может работать Mobius Dat Editor.

Ни чего по <effects> не нашел.

Искал и по значениям тоже
<value level="1">738</value>
 
Павер в скилнейме, остальное в скилгруп.
Вот например скилл [190] Fatal Strike
<skill id="190" levels="55" name="Fatal Strike">
<set name="mp_consume2">30 30 31 32 33 33 34 35 36 36 37 38 39 39 40 41 42 42 43 44 45 45 46 47 48 48 49 50 51 51 52 53 54 54 55 56 57 57 58 59 60 60 61 62 63 63 64 65 66 66 67 68 69 69 70</set>
<set name="reuse_delay_group">190</set>
<set name="icon">icon.skill0190</set>
<set name="effect_point">-200 -205 -210 -215 -220 -225 -230 -235 -240 -245 -250 -255 -260 -265 -270 -275 -280 -285 -290 -295 -300 -305 -310 -315 -320 -325 -330 -335 -340 -345 -350 -355 -360 -365 -370 -375 -380 -385 -390 -395 -400 -405 -410 -415 -420 -425 -430 -435 -440 -445 -450 -455 -460 -465 -470</set>
<set name="reuse_delay">1000</set>
<set name="cast_range">40</set>
<set name="skill_hit_cancel_time">500</set>
<set name="skill_cool_time">500</set>
<set name="skill_hit_time">1000</set>
<set name="effective_range">400</set>
<set name="magic_level">36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90</set>
<set name="operate_type">A1</set>
<set name="affect_scope">SINGLE</set>
<set name="target_type">ENEMY</set>
<set name="next_action">NONE</set>
<set name="autouse_type">ATTACK</set>
<operate_cond>
<equip_weapon weapon_types="sword;buster;twohandsword;blunt;twohandblunt;staff;twohandstaff;dual;pole" />
</operate_cond>
<effect level="1">
<i_p_attack power="694" crit_rate="5" ignore_def_mode="2" ignore_def_factor="5" />
</effect>

вижу power тут

row = {DatRow@1073} size = 10
"skill_id" -> "190"
"skill_level" -> "1"
"skill_sublevel" -> "0"
"name" -> "[Fatal Strike]"
"desc" -> "[Attacks the enemy with $s1 power. Requires a sword or a blunt weapon. Ignores Shield Defense. Critical. Over-hit.]"
"desc_param" -> "[738]"
"enchant_name" -> "[]"
"enchant_name_param" -> "[]"
"enchant_desc" -> "[]"
"enchant_desc_param" -> "[]"

вот Skillgrp.txt
здесь что-то наподобие этого не вижу: crit_rate="5" ignore_def_mode="2" ignore_def_factor="5"

row = {DatRow@1124} size = 40
"id" -> "190"
"level" -> "1"
"sublevel" -> "0"
"icon_type" -> "0"
"icon_hide" -> "0"
"MagicType" -> "default"
"operate_type" -> "0"
"mp_consume" -> "36"
"cast_range" -> "40"
"cast_style" -> "3"
"hit_time" -> "1.08"
"cool_time" -> "0.72"
"reuse_delay" -> "3.0"
"effect_point" -> "-183"
"is_magic" -> "0"
"origin_skill" -> "0"
"is_double" -> "0"
"animation" -> "{}"
"skill_visual_effect" -> "{[190]}"
"icon" -> "[icon.skill0190]"
"icon_panel" -> "[None]"
"debuff" -> "0"
"resist_cast" -> "0"
"enchant_skill_level" -> "0"
"enchant_icon" -> "[None]"
"hp_consume" -> "0"
"rumble_self" -> "9"
"rumble_target" -> "11"
"level_hide" -> "0"
"dp_consume" -> "0"
"energy_consume" -> "0"
"abnormal_time" -> "0"
"trait_type" -> "0"
"target_type" -> "1"
"affect_scope" -> "1"
"grade" -> "0"
"group_type" -> "0"
"order_id" -> "0"
"auto_use_type" -> "0"
"icon_panel_2" -> "[]"


Дат эдитор не все забирает из Skillgrp.dat ?
 
Вот например скилл [190] Fatal Strike


вижу power тут



вот Skillgrp.txt
здесь что-то наподобие этого не вижу: crit_rate="5" ignore_def_mode="2" ignore_def_factor="5"



Дат эдитор не все забирает из Skillgrp.dat ?
все проще - некоторых значений просто нету на стороне клиента.
Корейцы так же любят иногда делать разные умения (на клиенте написано пвп защита, на сервере просто защита) (на клиенте написано 20%, на сервере 15%)
 
все проще - некоторых значений просто нету на стороне клиента.
Корейцы так же любят иногда делать разные умения (на клиенте написано пвп защита, на сервере просто защита) (на клиенте написано 20%, на сервере 15%)
а откуда тогда все это берут ?

тот же самый [190] скил в сборке от Скриптов
1753176090983.webp


он же в сборке Mobius Superion
1753176294114.webp

это ток тип эффекта "PhysicalDamage" или "i_p_attack"
а их же там целая прорва разных типов эффектов в других скилах
 
а откуда тогда все это берут ?

тот же самый [190] скил в сборке от Скриптов
Посмотреть вложение 88109


он же в сборке Mobius Superion
Посмотреть вложение 88110

это ток тип эффекта "PhysicalDamage" или "i_p_attack"
а их же там целая прорва разных типов эффектов в других скилах
взяли скиллы, которые были в слитых ПТС для примера - ошибка.
Логично что их просто спарсили.
 
Наверное как-то так.
Посмотреть вложение 88112
download-mm.png
Скачать видео
download-mm-settings.png
download-mm-close.png
это оно ?
 
это оно ?
Ты про оболочку?
Модельку я сам файнтюнил.
 
пипец... мои глаза... что это за извращение? даже формат описания скиллов у мобиуса и то более адекватным кажется чем такое :D
Оффтоп:
в овере, первых рев подобный кошмар был, и в большенстве Interlude сурсов так же осталось, а еще формулы кое какие не так считают как хотелось бы (хотя у мобиуса все так же).
"фишки" у скриптов и мобиуса, почти одинакомые, все "почти одинаково поломано/порезано тупой пилой"...
 
а откуда тогда все это берут ?

тот же самый [190] скил в сборке от Скриптов
Посмотреть вложение 88109


он же в сборке Mobius Superion
Посмотреть вложение 88110

это ток тип эффекта "PhysicalDamage" или "i_p_attack"
а их же там целая прорва разных типов эффектов в других скилах
как запилишь что то по парсерам, поделись или описание обучения AI скинь).
Ну а что...
 
Оффтоп:
в овере, первых рев подобный кошмар был, и в большенстве Interlude сурсов так же осталось, а еще формулы кое какие не так считают как хотелось бы (хотя у мобиуса все так же).
"фишки" у скриптов и мобиуса, почти одинакомые, все "почти одинаково поломано/порезано тупой пилой"...
ну не знаю - в большинстве сборок все же юзаются те же таблицы значений для более компактного описания и все такое
а тут какое-то бессмысленное раздутие описания скилла наблюдается

просто для понимания пример описания того же 190-го скилла у меня - компактно и в целом все наглядно и понятно
XML:
    <skill id="190" levels="37" name="Фатальный Удар" pts_name="s_fatal_strike11">
        <stat name="icon" value="icon.skill0190" />
        <stat name="magic_type" value="physic" />
        <stat name="magic_level" value="{38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74}" />
        <stat name="effect_point" value="{183 188 193 198 203 208 213 218 223 228 233 237 242 247 252 257 261 266 271 275 279 284 288 292 296 300 304 307 311 314 317 320 323 326 328 331 333}" />
        <stat name="mp_consume2" value="{36 37 38 38 40 41 42 43 44 46 47 48 50 50 51 52 53 55 56 57 58 60 61 61 62 63 65 66 67 68 69 70 71 72 73 74 75}" />
        <stat name="hit_time" value="1.08" />
        <stat name="hit_cancel_time" value="0.5" />
        <stat name="cool_time" value="0.72" />
        <stat name="reuse_delay" value="3" />
        <stat name="cast_range" value="40" />
        <stat name="effective_range" value="400" />
        <stat name="target" value="one" />
        <stat name="skill_type" value="damage" />
        <stat name="operate_type" value="A1" />
        <stat name="next_action" value="attack" />
        <cond msg_id="113">
            <using weapon="sword;buster;twohandsword;blunt;twohandblunt;staff;twohandstaff" />
        </cond>
        <for>
            <effect name="i_p_attack" params="{738 784 833 884 937 992 1049 1109 1171 1236 1302 1371 1443 1516 1592 1670 1750 1832 1917 2003 2091 2181 2272 2366 2460 2556 2653 2751 2850 2950 3050 3151 3252 3353 3453 3553 3653};15;1;0" />
        </for>
    </skill>
 
ну не знаю - в большинстве сборок все же юзаются те же таблицы значений для более компактного описания и все такое
а тут какое-то бессмысленное раздутие описания скилла наблюдается

просто для понимания пример описания того же 190-го скилла у меня - компактно и в целом все наглядно и понятно
XML:
    <skill id="190" levels="37" name="Фатальный Удар" pts_name="s_fatal_strike11">
        <stat name="icon" value="icon.skill0190" />
        <stat name="magic_type" value="physic" />
        <stat name="magic_level" value="{38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74}" />
        <stat name="effect_point" value="{183 188 193 198 203 208 213 218 223 228 233 237 242 247 252 257 261 266 271 275 279 284 288 292 296 300 304 307 311 314 317 320 323 326 328 331 333}" />
        <stat name="mp_consume2" value="{36 37 38 38 40 41 42 43 44 46 47 48 50 50 51 52 53 55 56 57 58 60 61 61 62 63 65 66 67 68 69 70 71 72 73 74 75}" />
        <stat name="hit_time" value="1.08" />
        <stat name="hit_cancel_time" value="0.5" />
        <stat name="cool_time" value="0.72" />
        <stat name="reuse_delay" value="3" />
        <stat name="cast_range" value="40" />
        <stat name="effective_range" value="400" />
        <stat name="target" value="one" />
        <stat name="skill_type" value="damage" />
        <stat name="operate_type" value="A1" />
        <stat name="next_action" value="attack" />
        <cond msg_id="113">
            <using weapon="sword;buster;twohandsword;blunt;twohandblunt;staff;twohandstaff" />
        </cond>
        <for>
            <effect name="i_p_attack" params="{738 784 833 884 937 992 1049 1109 1171 1236 1302 1371 1443 1516 1592 1670 1750 1832 1917 2003 2091 2181 2272 2366 2460 2556 2653 2751 2850 2950 3050 3151 3252 3353 3453 3553 3653};15;1;0" />
        </for>
    </skill>
Оффтоп:
ТА понимаю, когда начинал с овером было в чем разобраться, а потом уж пошло и поехало, и стало вовсе пофиг в каком виде записана инфа - главное понимание.
Но скрипты - всегда стандарты "разбивали", ничего же не изменилось.

Даже имея под руками на сегодня кучу LLM, можно неделю ее помучать и тебе перепишут пол ДП под формат что ты желаешь - и он будет простой и интуитивный (помни про скриптов и то что они все стандарты "на шлют", как и своих клиентов)...

Ну и , много формул/триггеров когда не работают по актуальному патчу (который на сервер использую), то в целом не важен формат записи, даже такой вот "безсмысленный".

Сорян, вспомнил общение с ТП скриптов))
 
ну не знаю - в большинстве сборок все же юзаются те же таблицы значений для более компактного описания и все такое
а тут какое-то бессмысленное раздутие описания скилла наблюдается

просто для понимания пример описания того же 190-го скилла у меня - компактно и в целом все наглядно и понятно
XML:
    <skill id="190" levels="37" name="Фатальный Удар" pts_name="s_fatal_strike11">
        <stat name="icon" value="icon.skill0190" />
        <stat name="magic_type" value="physic" />
        <stat name="magic_level" value="{38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74}" />
        <stat name="effect_point" value="{183 188 193 198 203 208 213 218 223 228 233 237 242 247 252 257 261 266 271 275 279 284 288 292 296 300 304 307 311 314 317 320 323 326 328 331 333}" />
        <stat name="mp_consume2" value="{36 37 38 38 40 41 42 43 44 46 47 48 50 50 51 52 53 55 56 57 58 60 61 61 62 63 65 66 67 68 69 70 71 72 73 74 75}" />
        <stat name="hit_time" value="1.08" />
        <stat name="hit_cancel_time" value="0.5" />
        <stat name="cool_time" value="0.72" />
        <stat name="reuse_delay" value="3" />
        <stat name="cast_range" value="40" />
        <stat name="effective_range" value="400" />
        <stat name="target" value="one" />
        <stat name="skill_type" value="damage" />
        <stat name="operate_type" value="A1" />
        <stat name="next_action" value="attack" />
        <cond msg_id="113">
            <using weapon="sword;buster;twohandsword;blunt;twohandblunt;staff;twohandstaff" />
        </cond>
        <for>
            <effect name="i_p_attack" params="{738 784 833 884 937 992 1049 1109 1171 1236 1302 1371 1443 1516 1592 1670 1750 1832 1917 2003 2091 2181 2272 2366 2460 2556 2653 2751 2850 2950 3050 3151 3252 3353 3453 3553 3653};15;1;0" />
        </for>
    </skill>
Это делали для гибкости, а еще в строчке можно глаза сломать пока насчитаешь нужный уровень :)
Еще можно создавать диапозоны, если значение повторяется

Еще можно через формулы сокращать и делать заточки не прописывая каждый уровень 1753190217009.webp
 
ну не знаю - в большинстве сборок все же юзаются те же таблицы значений для более компактного описания и все такое
а тут какое-то бессмысленное раздутие описания скилла наблюдается

просто для понимания пример описания того же 190-го скилла у меня - компактно и в целом все наглядно и понятно
XML:
    <skill id="190" levels="37" name="Фатальный Удар" pts_name="s_fatal_strike11">
        <stat name="icon" value="icon.skill0190" />
        <stat name="magic_type" value="physic" />
        <stat name="magic_level" value="{38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74}" />
        <stat name="effect_point" value="{183 188 193 198 203 208 213 218 223 228 233 237 242 247 252 257 261 266 271 275 279 284 288 292 296 300 304 307 311 314 317 320 323 326 328 331 333}" />
        <stat name="mp_consume2" value="{36 37 38 38 40 41 42 43 44 46 47 48 50 50 51 52 53 55 56 57 58 60 61 61 62 63 65 66 67 68 69 70 71 72 73 74 75}" />
        <stat name="hit_time" value="1.08" />
        <stat name="hit_cancel_time" value="0.5" />
        <stat name="cool_time" value="0.72" />
        <stat name="reuse_delay" value="3" />
        <stat name="cast_range" value="40" />
        <stat name="effective_range" value="400" />
        <stat name="target" value="one" />
        <stat name="skill_type" value="damage" />
        <stat name="operate_type" value="A1" />
        <stat name="next_action" value="attack" />
        <cond msg_id="113">
            <using weapon="sword;buster;twohandsword;blunt;twohandblunt;staff;twohandstaff" />
        </cond>
        <for>
            <effect name="i_p_attack" params="{738 784 833 884 937 992 1049 1109 1171 1236 1302 1371 1443 1516 1592 1670 1750 1832 1917 2003 2091 2181 2272 2366 2460 2556 2653 2751 2850 2950 3050 3151 3252 3353 3453 3553 3653};15;1;0" />
        </for>
    </skill>
да ты бог, кому смертным до тебя... формат формируется командой для удобства команды, а не для мнения экспертов по типу тебя. если человек работает через IDE и руки не из ж, то формат довольно таки читаемый и удобный к редактированию.
 
Это делали для гибкости, а еще в строчке можно глаза сломать пока насчитаешь нужный уровень :)
Еще можно создавать диапозоны, если значение повторяется

Еще можно через формулы сокращать и делать заточки не прописывая каждый уровень Посмотреть вложение 88117
Ну расчет по формулам я тоже юзаю + так же могу по необходимости и давать стату/эффект только конкретным уровням/подуровням скилла
XML:
    <skill id="10021" levels="7" name="Подъем Щита" pts_name="s_knight_power_blocking1" enchant_levels="20">
        <table name="#val1">0</table>
        <table name="#val2">0</table>
        <stat name="icon" value="icon.skill10021_2" />
        <stat name="magic_type" value="physic" />
        <stat name="magic_level" value="{85 90 95 99 100 102 104}" />
        <stat name="effect_point" value="2" />
        <stat name="mp_consume2" value="{58 61 63 66 69 72 75}" />
        <stat name="hit_time" value="0.5" />
        <stat name="reuse_delay" value="60" />
        <stat name="target" value="self" />
        <stat name="skill_type" value="buff" />
        <stat name="operate_type" value="A2" />
        <stat name="auto_use" value="buff" />
        <stat name="abnormal_type" value="knight_buff3" />
        <stat name="abnormal_level" value="10" />
        <stat name="abnormal_time" value="{10}" />
        <stat name="abnormal_visual_effect" value="shield_defence2" />
        <stat name="next_action" value="none" />
        <cond msg_id="113">
            <and>
                <using kind="shield" />
                <player check_abnormal="knight_buff3;10;3" />
            </and>
        </cond>
        <enchant route="1" name="Время" levels="3+">
            <table name="#abnormal_time" type="add">{enchant_level * 0.5}</table>
        </enchant>
        <enchant route="2" name="Могущество" levels="3+">
            <table name="#val1" type="add">{0.6 + enchant_level * 0.4}</table>
        </enchant>
        <enchant route="3" name="Ветер" levels="3+">
            <table name="#val2" type="add">{enchant_level * 2}</table>
        </enchant>
        <for>
            <effect name="p_effect">
                <add order="0x40" stat="damageShield" value="10" levels="4+" />
                <mul order="0x30" stat="pDef" value="{50 60 70 70 80 90 100};per" />
                <mul order="0x30" stat="pDefCritRate" value="-100;per" />
                <mul order="0x30" stat="pAtk" value="#val1;per" sub_levels="2001:2020" />
                <add order="0x40" stat="runSpd" value="#val2" sub_levels="3001:3020" />
            </effect>
        </for>
    </skill>
 
Имхо удобнее чем ПТС формат скиллов - тяжело придумать. Максимально просто, удобно и совместимо, особенно если учитывать, что скиллы с одним ИД не обязательно должны иметь схожую механику, да и ситуаций, когда у скилла например есть второй уровень, но нет первого, тоже довольно распространены. Поэтом одна запись на один индекс - самое простое и удобное для формата «создал и забыл». Да и KV-пары разбирать через табуляцию в сотни раз проще, чем писать адские парсеры под такие монструозные xml

Ваще, в ладвадеве такая же хуета как и в линукс дистрибутивах) Уже 20+ лет кодится, а какого-то общего, унифицированного формата нет.
 
Последнее редактирование:
По мне так наоборот птс формат слишком громоздкий - в большинстве скиллов от уровня к уровню меняются зачастую одно-два значения, а в итоге приходится для каждого уровня копипастить кучу текста.
я конечно понимаю что подобное проще как автоматом генерить, так и считывать/разбирать, но выглядит это как-то монструозно, особенно для скиллов с заточкой к примеру.

З.Ы. а по тому что разные уровни скилла могут кардинально отличаться по свойствам/эффекту - никто не мешает для подобных случаев и в хмл полностью раздельно отдельные уровни расписывать - я у себя как раз для подобных ситуаций такую возможность тоже сделал в свое время.
 
Назад
Сверху