Цитата(mAdShAkEr @ 21.8.2014, 15:09)
Извиняюсь но я может чего-то не понимаю, но как мне узнать что айдишник на который я хочу вставить анимацю не занят. Просто в мулпатчере есть 3 слоя слотов все,полные,пустые. Вот я выбираю пустые они обозначены красным цветом, на один из таких пустых слотов вешаю анимацию, и вот что я в итоге получаю то что мне надо ковырять деф файлы
Когда клиенту посылается команда отображения анимации с неким ID, то он делает следующие вещи:
1) Ищет этот ID в mobtypes.txt, откуда получает тип (L,H,P) анимации и флаги (насколько мне известно их значение так и не выявлено, просто копируйте с других анимаций наиболее близкой к вашей по расположению, типу и предназначению). Если анимация с данным ID не найдена, то она игнорируется.
2) Затем проверяется файл body.def на предмет необходимости переопределения ID анимации и ее цвета. В результате получаем newID (если запись с ID там отсутствует, то newID = ID)
3) Теперь клиенту необходимо понять индекс anim#.mul файла в котором находиться эта анимация и ее номер animID в этом файле. Для этого и служит файл bodyconv.def, как видно таблица там только для anim2.mul, anim3.mul, anim4.mul, anim5.mul. Отсюда следует, что если для анимации newID animID не определен (-1), то animID = newID, а индекс файла 1 (anim.mul).
4) После этого проверяется файл anim#.def (где # - индекс мула, полученного в пред пункте) на предмет необходимости переопределения animID анимации и ее цвета. В результате получаем new_animID (если запись с ID там отсутствует, то new_animID = animID)
5) Ну и в заключение остается лишь взять анимацию с индексом new_animID в уже определенным ранее муле.
* Если у нас анимация трупа, вместо 2го пункта, ID и цвет трупа переопределяются в corpse.def, после чего для нового ID выполняется шаг 1, и далее по порядку кроме 2го (во избежание рекурсии)
* Если у нас анимация экипировки персонажа (в том числе и лошади, что с точки зрения программной логики ничем не отличаются от анимации меча или шлема), между 1ым и 2ым пунктами вставляется дополнительное преобразование анимации ID, цвета и гампа (ID которого связан с ID анимации), в зависимости от ID анимации на которое оно одето (таким образом например подменяется анимация и гампы шлемов на эльфах) из equipconv.def. После чего для нового ID выполняется все с самого начала с 1го пункта.
* Насчет порядка обработки corpse.def и equipconv.def могу ошибаться, специально не изучал из-за отсутствия надобности.
* По заверением разработчиков ID анимации не может быть больше 2048, однако на практике по наблюдением при использовании некоторых ID выше 2000 начинается какая-то магия, так что изучать лучше на более низких... Вообще ограничение на анимацию это пожалуй самое серьезное ограничение клиента, а ее расширение - один из майлстоунов UCS, но не уверен что это вообще получиться реализовать...
Вот так все устроенно и работает. В теории все ID которых нет в списке mobtypes.txt не заняты, однако из-за большего числа переопределений и подмен используется много лишних ID. Мы не выдержили - вытряхнули все из мулов, вычистили все *.def'ы и пересобрали все с нуля вручную. ID'шников, порядка и прозрачности стало куда больше, но если нужна лишь пара свободных ID, то проще поковыряться поискать, чем все переделывать...
Сообщение отредактировал StaticZ - 21.8.2014, 16:49