Как работать с питомцами

Формат: XML
Местонахождение: data/stats/pets/
Файл: pet_data.xml
Схема: pet_data.dtd

Возьмем для примера Wolf пета и разберем его поля:
XML:
<pet id="12077" max_lvl="81"> <!-- Wolf -->
        <set name="control_item_id" value="2375"/>
        <set name="food_item_id" value="2515"/>
        <set name="is_wolf" value="true" />
        <set name="min_level" value="1"/>
        <set name="exp" value="0 636 798 1236 2158 3836 6598 10836 16998 25596 37198 52436 71998 96636 127158 164436 209398 263036 326398 400596 486798 586236 700198 830036 977158 1143036 1329198 1537236 1768798 2025596 2309398 2622036 2965398 3341436 3752158 4199636 4685998 5213436 5784198 6400596 7064998 7779836 8547598 9370836 10252158 11194236 12199798 13271636 14412598 15625596 17557599 19606656 21777399 24074556 26502939 29922294 33529819 37332294 41336619 45549814 52193622 59172334 66497022 74178934 82229502 93470612 105234462 117537012 130394462 143823252 157840062 176117249 198983024 226778887 259859867 298594764 352320714 412836202 480562077 555934039 639402879"/>
        <set name="hp" value="31 37 45 53 63 73 85 98 113 128 146 157 169 182 195 208 223 238 254 270 287 305 324 343 364 385 406 429 453 477 502 528 554 582 610 639 669 700 731 763 796 830 864 899 935 971 1008 1045 1084 1122 1161 1201 1240 1281 1321 1362 1403 1444 1485 1527 1568 1609 1651 1692 1732 1773 1813 1853 1892 1931 1969 2006 2043 2079 2114 2148 2182 2214 2245 2275 2304"/>
        <set name="hp_regen" value="2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9"/>
        <set name="mp" value="25 30 34 39 44 49 54 59 64 69 74 79 84 90 95 100 106 111 117 122 131 139 148 157 165 174 183 192 201 210 220 229 238 248 257 267 276 286 296 306 323 339 356 373 390 408 425 443 460 478 496 514 532 551 569 588 606 625 644 663 682 702 721 741 760 780 800 820 840 861 881 902 923 944 964 986 1007 1028 1050 1071 1073"/>
        <set name="mp_regen" value="1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4"/>
        <set name="p_atk" value="2 2 2 2 3 3 3 4 4 4 5 5 6 6 11 12 12 13 14 15 15 16 17 19 20 21 22 24 25 27 28 30 32 34 36 38 40 43 45 48 50 53 56 59 62 66 69 72 76 80 84 88 92 96 101 105 110 114 119 124 129 134 139 144 149 154 160 165 170 176 181 186 192 197 202 207 212 217 222 227 228"/>
        <set name="p_def" value="11 11 11 12 12 13 13 14 14 15 16 16 17 17 27 28 28 29 30 30 31 32 32 33 34 35 36 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 59 60 61 62 63 64 66 67 68 69 70 72 73 74 75 76 78 79 80 81 82 84 85 86 87 88 89 91 92 93 94 95"/>
        <set name="m_atk" value="1 1 1 1 2 2 2 2 3 3 3 3 4 4 5 5 5 6 6 7 8 8 9 10 11 11 12 13 14 15 16 18 19 20 22 23 25 26 28 30 31 33 35 37 40 42 44 47 49 52 54 57 60 63 66 69 72 75 78 82 85 88 92 95 99 103 106 110 113 117 121 124 128 132 135 139 142 146 149 152 153"/>
        <set name="m_def" value="8 8 8 9 9 9 10 10 10 11 11 12 12 13 13 13 14 14 15 15 16 16 17 18 18 19 19 20 21 21 22 22 23 24 25 25 26 27 27 28 29 30 30 31 32 33 34 34 35 36 37 38 39 40 40 41 42 43 44 45 46 47 47 48 49 50 51 52 53 54 55 55 56 57 58 59 60 60 61 62 63"/>
        <set name="accuracy" 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 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118"/>
        <set name="evasion" value="33 34 35 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 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113"/>
        <set name="critical" value="40"/>
        <set name="speed" value="137"/>
        <set name="atk_speed" value="282"/>
        <set name="cast_speed" value="333"/>
        <set name="feed_max" value="248 244 320 400 512 624 704 808 872 948 1160 1168 1160 1160 1160 1148 1140 1132 1124 1116 1480 1512 1468 1552 1572 1604 1616 1644 1664 1684 2116 2172 2236 2288 2348 2408 2464 2520 2580 2636 3168 3236 3308 3380 3452 3524 3592 3668 3740 3596 4244 4364 4484 4600 4532 4672 4804 4932 5060 4928 5716 5892 6064 6228 6176 6368 6556 6740 6924 7108 7388 7688 7956 8196 8428 8704 8916 9124 9340 9552 9552"/>
        <set name="feed_normal" value="2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5 5 5 6 6 5 7 7 7 7 7 7 8 8 8 8 9 9 10 10 10 10 10 11 11 11 12 12 13 13 14 14 14 15 15 15 15"/>
        <set name="feed_battle" value="2 2 2 3 4 5 5 6 7 7 9 9 9 9 9 9 9 9 9 9 12 12 12 12 13 13 13 13 13 14 17 18 18 19 19 20 20 21 21 21 26 26 27 28 28 29 29 30 31 29 35 36 37 38 37 38 40 41 42 41 47 49 50 51 51 53 54 56 57 59 61 64 66 68 70 72 74 76 77 79 79"/>
        <set name="max_load" value="0"/>
        <set name="add_feed" value="12"/>
        <set name="exp_penalty" value="0.30"/>
        <set name="soulshots" value="2"/>
        <set name="spiritshots" value="2"/>
    </pet>
Заголовок:
<pet id="12077" max_lvl="81"> <!-- Wolf -->
id - ID конкретного питомца который будет призываться
max_lvl - максимальный уровень который может получить питомец. 81 - это 80 уровень и 100% экспы.
Тело:
control_item_id - предмет помощью которого будет призываться питомец
food_item_id - предмет которым будет потреблять в виде еды для данного питомца
is_wolf - к какому типу принадлежит питомец. Набор всех типов: is_baby_pet, is_wolf, is_great_wolf, is_hatchling,is_improved_baby_pet, is_strider, is_wyvern, is_improved_baby_buffalo, is_improved_baby_cougar, is_improved_baby_kookaburra
min_level - минимальный уровень питомца которого он может достичь. По умолчанию минимальный уровень питомца берется из data/npc
exp - таблица опыта для получения следующего уровня питомца
hp - таблица здоровья по уровню питомца
hp_regen - таблица регенерации здоровья по уровню питомца
mp - таблица маны по уровню питомца
mp_regen - таблица регенерации маны по уровню питомца
p_atk - таблица физической атаки по уровню питомца
p_def - таблица физической защиты по уровню питомца
m_atk - таблица магической атаки по уровню питомца
m_def - таблица магической защиты по уровню питомца
accuracy - таблица точности нанесения урона по уровню питомца
evasion - таблица уворота от нанесения урона по уровню питомца
critical - таблица шанса критической атаки по уровню питомца
speed - таблица скорости передвижения по уровню питомца
atk_speed - таблица скорости физической атаки по уровню питомца
cast_speed - таблица скорости машичеслкй атаки по уровню питомца
feed_max - таблица максимального потребления шкалы еды для питомца по уровням
feed_normal - таблица потребления шкалы еды питомцем в нормальном состоянии - бег, афк и так далее
feed_battle - таблица потребления шкалы еды когда питомец находится в боевом состоянии
max_load - модификатор переносимого веса питомцем. По умолчанию калькулируется формулой той же что и у игрока.
add_feed - сколько едениц шкалы еды будет добавлена при использовании food_item_id
exp_penalty - какой процент будет потреблять питомце он полученного опыта игрока. По умолчанию 0.30 что является 30%
soulshots - количество потребляемый физических зарядов духа
spiritshots - количество потребляемый магических зарядов духа

Теперь переходим к умениям питомцев и их action Id который находится в игровом клиенте
Для примера берем Hatchling of Wind
Code:
        <skills>
            <skill id="4710" level="0" min_lvl="1" action_id="1003"/>
            <skill id="4711" level="0" min_lvl="1" action_id="1004"/>
        </skills>
Где id способности (скила) 4710 и уровень level="0" и min_level - минимальный уровень питомца присоединён к action id 1003 который приращен в игровом клиенте в файле actionname-e.dat появляется в панели умений питомца.
Когда вы устанавливаете level="0" сервер автоматически пересчитывает уровень выдаваемого скила из расчета уровня питомца. На каждый 10 уровень если он не достиг 70 уровня выдается 1 уровень умения, после 70 уровня, расчет идет на каждый 5 уровень питомца + 1 уровень умения (по офу).
Но вам не обязательно выставлять уровень 0, вы можете описать всю таблицу умения относительно level="Что то свое" непосредственно питомца.
Видео гайд как добавлять свои действия для Интерлюд:


В данный момент вся система питомцем и призываемых существа максимально вынесена из кода и теперь вы можете добавлять любой тип и вид и их навыки не описывая скриптами или написанием своих экстеншенов.
Если будут вопросы - прошу задавать, если что забыл - буду дополнять.
 
Last edited:
Нет, при displayId= можно не добавлять.
Нужно было добавить попробовать прежде чем писать о проблеме. Я почему-то уверен что если бы добавили в npcgrp все бы норм было.
 
Last edited:
в npcgrp добавлен нпц?
Добавил, появился пет.

Но странно, когда прописываешь нпс <set name="displayId" и просто спавнишь, то npcgrp не нужен. А если этот нпс призывается как питомец, то почему то не работает параметр.

Shot00002.webp
 
Есть конфиг, откуда будет тянутся имя и титул (ДП или клиента). Если выбираешь с сервера, то проблем быть не должно
 
Есть конфиг, откуда будет тянутся имя и титул (ДП или клиента). Если выбираешь с сервера, то проблем быть не должно
Так и стоит. Вероятней всего или упущение или так и должно быть, чтоб дисплей ид не срабатывал на петах.
 
Но странно, когда прописываешь нпс <set name="displayId" и просто спавнишь, то npcgrp не нужен. А если этот нпс призывается как питомец, то почему то не работает параметр.
Это не работает, если инфы по нпц нет в датниках. Его, как бы фактически, не существует для клиента.
 
Это не работает, если инфы по нпц нет в датниках. Его, как бы фактически, не существует для клиента.
Дисплей ид и создан для того что бы не добавлять в датники, вообще не в какие. Создаётся НПЦ со стороны сервера и берется оболочка другого НПЦ, ранее уже добавленного в патч.
К примеру нужно создать 10 одинаковых НПЦ, достаточно будет добавить в сервер часть 10 НПЦ и 1 в патч, выглядеть это будет примерно так
Оригинал ид 10000 дисплей ид 0
Копия ид 10001 дисплей ид 10000
Копия ид 10002 дисплей ид 10000
Ну и так далее по аналогии.
 
ранее уже добавленного в патч
так это все понятно, сам же пишешь, что уже добавленного в патч) То есть, если информация по нпц или к примеру, костюму есть в датнике, то его можно использовать как фейковый. Но без этого ничего не сделаешь.

Если ты хочешь взять, допустим, стороннего нпц и натянуть его на уже существующего, то:
  1. Берем файлы этого нпц, как минимум, его класс - *.u, меш, звуки и анимку - *.ukx, текстуры - *.utx, DAT информацию.
  2. Заливаем в клиент в соответствующие папки. *.u - system_ru\en, *.ukx - Animations, *.utx - Textures\SysTextures(в основном).
  3. Идем в DAT-editor, открываем в папке system_ru\en
  • Npcgrp.dat/Npcgrp_Classic.dat и добавляем в самый низ строчку с информацией по этому нпц, присвоив уникальный ID. Из этого файла клиент ищет путь для отображения в данном случае нпц. ВСЯ информация, кроме имени и титула хранится в этом DAT файле.
  • NpcName_Classic-ru/en.dat и по аналогии добавляем строчку вниз с тем же ID и присваиваем имя и титул для нпц(будут отображаться в игре, если не установлено брать названия с сервера).
4. Идем на сервер и создаем там нового нпц с таким же ID и именем(по желанию).
5. Заменяем на сервере в displayid своего нпц на свеже-добавленного.


P.S Это касается не только фейковых NPC, но и любых, которые планируете использовать в игровом мире. То же самое и для оружия, шмота, аксессуаров, скиллов и т.д и т.п., но там файлы DAT другие.

P.S.S в итоге гайд какой-то получился)
 
Это не работает, если инфы по нпц нет в датниках. Его, как бы фактически, не существует для клиента.
Не совсем так. Возьмём в пример нпс гм шопа, сервиса , баффер, которые идут из коробки. Их тоже нет в клиенте, но они есть, благодаря displayId. Вот я на этом же принципе пробовал создать пета, без датника. Повторюсь, что уже выяснил, displayId для петов не работает.
 
так это все понятно, сам же пишешь, что уже добавленного в патч) То есть, если информация по нпц или к примеру, костюму есть в датнике, то его можно использовать как фейковый. Но без этого ничего не сделаешь.

Если ты хочешь взять, допустим, стороннего нпц и натянуть его на уже существующего, то:
  1. Берем файлы этого нпц, как минимум, его класс - *.u, меш, звуки и анимку - *.ukx, текстуры - *.utx, DAT информацию.
  2. Заливаем в клиент в соответствующие папки. *.u - system_ru\en, *.ukx - Animations, *.utx - Textures\SysTextures(в основном).
  3. Идем в DAT-editor, открываем в папке system_ru\en
  • Npcgrp.dat/Npcgrp_Classic.dat и добавляем в самый низ строчку с информацией по этому нпц, присвоив уникальный ID. Из этого файла клиент ищет путь для отображения в данном случае нпц. ВСЯ информация, кроме имени и титула хранится в этом DAT файле.
  • NpcName_Classic-ru/en.dat и по аналогии добавляем строчку вниз с тем же ID и присваиваем имя и титул для нпц(будут отображаться в игре, если не установлено брать названия с сервера).
4. Идем на сервер и создаем там нового нпц с таким же ID и именем(по желанию).
5. Заменяем на сервере в displayid своего нпц на свеже-добавленного.


P.S Это касается не только фейковых NPC, но и любых, которые планируете использовать в игровом мире. То же самое и для оружия, шмота, аксессуаров, скиллов и т.д и т.п., но там файлы DAT другие.

P.S.S в итоге гайд какой-то получился)

Нет, ничего этого не надо. Просто пишешь ему дисплей ид нужного нпс и всё подтягивается без танцев с бубном в клиенте. Ты видимо не в курсе был как работает функция)
 
Не совсем так. Возьмём в пример нпс гм шопа, сервиса , баффер, которые идут из коробки. Их тоже нет в клиенте, но они есть, благодаря displayId.
да как их нету то? откуда клиент знает, какие текстуры у этого меша, какая анимация, как выглядит геометрия меша? С сервера не идет ни один NPC. Информация о них есть на сервере, но вся визуальная составляющая только в клиенте.
 
Last edited:
Нет, ничего этого не надо. Просто пишешь ему дисплей ид нужного нпс и всё подтягивается без танцев с бубном в клиенте. Ты видимо не в курсе был как работает функция)
там написано, в самом начале, что
Если ты хочешь взять, допустим, стороннего нпц и натянуть его на уже существующего
Если NPC, которого ты хочешь натянуть, уже существует, то ничего прописывать в DAT файлах не нужно, а просто прописываем в displayid на сервере.
 
там написано, в самом начале, что

Если NPC, которого ты хочешь натянуть, уже существует, то ничего прописывать в DAT файлах не нужно, а просто прописываем в displayid на сервере.
Так об этом речь. Нового питомца я натягивал на визуал существующего рб в клиенте.
 
Так об этом речь. Нового питомца я натягивал на визуал существующего рб в клиенте.
Возьми ради эксперимента любого другого нпц
 
Что то скиллы не добавляются в панель пета. Пробую уже даже стандартному пету добавить.
 
Что то скиллы не добавляются в панель пета. Пробую уже даже стандартному пету добавить.
может ну его на хуй тогда, если не растёт кокос ))))
 
акшен прописать надо скиллы в датнике, чтобы они были видны в клиенте
 
акшен прописать надо скиллы в датнике, чтобы они были видны в клиенте
Знаю. Пробую существующие прикрепить скиллам, всё равно не появляются.

Вот например смотрю <pet id="12564" - у него вообще никакие скиллы не прописаны, а в панели есть скилл. Вообще не понимаю.
 
Last edited:
Знаю. Пробую существующие прикрепить скиллам, всё равно не появляются.

Вот например смотрю <pet id="12564" - у него вообще никакие скиллы не прописаны, а в панели есть скилл. Вообще не понимаю.
Возможно стоковые скилы нпц прописаны в исходном коде.
 
Разобрался. Кроме добавления скилла в самого пета, нужно в любом случае добавлять их и в actionname-e.dat
Там смысл такой, что к каждому пету скиллы привязываются жестко в датнике, даже если брать существующие акшены и скиллы. Всё равно не появится, пока не пропишешь в датнике.

Shot00004.webp
 
Привет,вопрос на засыпку ,как сделать чтоб пет мог - летать?
 
Back
Top