25.11.2003, 16:44
Команда AddUnitToServer была предназначена для добавления на игровую зону юнитов-помощников главному герою. Проблема в том, что текстуры скинов людей и орков хранятся отдельно от других текстур юнитов. Текстуры в игре существуют для отображения моделей в магазине и для игровой зоны, а также отдельно в игре существуют модели причесок, текстур лиц и мимики, для отображения последних в 2D панели на игровой зоне. Для каждой расы, существует контейнер моделей, выстроенных в определенной последовательности для рендерирования частей тела. Для каждой модели используется одна составная текстура (?), их можно наблюдать во время игры в папке Textures. Когда нужно переодеть юнита, во временную текстуру, в определенные места копируется текстура одежды, оружия…. Все монстры, животные, деревья, строения (кроме людей, орков) «одеваются» в мобах. Имя модели хранится в поле OBJPRIMTXTR, а имя текстуры (скина) в поле OBJPRIMTXTR. В таблице RaceModels есть соответствующие поля и данные в них, которые используются в мобах, это [Primary textures]. Данные в этом поле, по-видимому, использовались как Темплейты для конструктора игровых зон ПЗ. Из таблицы MonstersPrototypes, так же берется номер текстуры скины (Graphics Data Skin Index) и прическа (Graphics Data Hair). Следует помнить, что значение индекса причесок прописано в таблице MonstersPrototypes на единицу больше чем в Figures.
В ПЗ модель для игровой зоны выбирается из контейнера Figures.res по имени расы. Имя расы берется из таблицы RaceModels, по полю MaskName, а принадлежность к типу берется из Type ID? вернее должно было бы браться…. Я думаю, что во время создания нового юнита командой AddUnitToServer в сейв юнита прописывается принадлежность к типу Human (ID=50) из кода игры, а не из таблицы.
В общем, все вот эти соответствия нужны, чтобы создать структуру объекта, такую же, что хранится в моб-файле. Думаю, что команда AddUnitToServer, во время заполнения структуры данных объекта юнита, устанавливает в поле OBJTYPE значение «50». Даже если пропатчить эту функцию, проблема с текстурами, наверное, останется, так как для монстров и животных (строений, деревьев) нужно указать имя текстуры (скина). А если «очеловечивать» юнитов, то Alecron пишет правильно, именно таким образом и составляется имя текстуры-скина человека.
Mephisto, проблему с анимацией можно решить очень просто, у меня есть план, как исправить эту проблему. Кстати, решив эту проблему можно будет решить и проблему с переходами, между зон с зоной Развалины. Например, к Эстере можно будет пройти и без магической Плашки. В этом случае Зака будет выгонять Внучка, то есть с Развалин можно будет пройти на зону Дорога к Знахарке.
В ПЗ модель для игровой зоны выбирается из контейнера Figures.res по имени расы. Имя расы берется из таблицы RaceModels, по полю MaskName, а принадлежность к типу берется из Type ID? вернее должно было бы браться…. Я думаю, что во время создания нового юнита командой AddUnitToServer в сейв юнита прописывается принадлежность к типу Human (ID=50) из кода игры, а не из таблицы.
В общем, все вот эти соответствия нужны, чтобы создать структуру объекта, такую же, что хранится в моб-файле. Думаю, что команда AddUnitToServer, во время заполнения структуры данных объекта юнита, устанавливает в поле OBJTYPE значение «50». Даже если пропатчить эту функцию, проблема с текстурами, наверное, останется, так как для монстров и животных (строений, деревьев) нужно указать имя текстуры (скина). А если «очеловечивать» юнитов, то Alecron пишет правильно, именно таким образом и составляется имя текстуры-скина человека.
Mephisto, проблему с анимацией можно решить очень просто, у меня есть план, как исправить эту проблему. Кстати, решив эту проблему можно будет решить и проблему с переходами, между зон с зоной Развалины. Например, к Эстере можно будет пройти и без магической Плашки. В этом случае Зака будет выгонять Внучка, то есть с Развалин можно будет пройти на зону Дорога к Знахарке.