https://steamcommunity.com/sharedfiles/filedetails/?id=1554639547 - d2toolsприложи скрины д2тулс
Компиляцию проводил?
компиляцию карты или картинок? Если картинки героя сверху, то да, скрин могу приложитьКомпиляцию проводил?
steamapps\workshop\content\570\ид_твоей_кастомки
естьПосмотри, есть ли скомпилированные файлы в папке опубликованной версии твоей кастомки
steamapps\workshop\content\570\ид_твоей_кастомки
Хм, странно тогда. Дай еще на всякий случай скрин содержимого этой папки.panorama/images/heroes
На форуме есть guide по своему topbar-у? если да то можно ссылочку?Хм, странно тогда. Дай еще на всякий случай скрин содержимого этой папки.
А вообще если работает в тулзах, но в не работает в игре, то это скорее всего ошибки Valve. В таких случаях только ждать и надеяться остается.
Ты решил проигнорировать ту часть моего ответа, в которой я писал путь, по которому нужно чекать файлы ¿
я чекал, там тоже всё естьТы решил проигнорировать ту часть моего ответа, в которой я писал путь, по которому нужно чекать файлы ¿
function FixHeroIcons(){
var topbar = $.GetContextPanel().GetParent().GetParent().GetParent().GetParent().FindChildTraverse("topbar") // Ето топбар и его мы будем насиловать
var playerSlots = topbar.FindChildrenWithClassTraverse("TopBarPlayerSlot") // Находим в етом топбаре все панели с классом TopBarPlayerSlot, ибо каждая такая панель соответствует одному игроку.
for ( k in playerSlots ){ // перебор массива с найденными панелями
var img = playerSlots[k].FindChildTraverse("HeroImage") // Так получилось, что в каждой такой панели есть дочерняя панель с ид HeroImage, которая и хранит в себе изображение героя.
if ( img.Children().length == 0 ){ // Если в эту дочернюю панель еще никто ничего не засунул...
var new_img = $.CreatePanel( "Image", img, "ImageOverride" ) // Создаем внутри нее свою картинку
if (img.heroname) {
new_img.SetImage( "file://{images}/custom_game/heroes/npc_dota_hero_" + img.heroname + ".png" ) // Устанавливаем нужную картинку, исходя из того, что изначально было в img
}
}
}
$.Schedule( 0.1, FixHeroIcons ) // В течение игры топбар может меняться, при этом все наши внесенные в него изменения сбрасываются. Чтобы избежать потери изменений, заставим этот код выполняться с постоянной периодичностью.
}
FixHeroIcons()
Надеюсь это работает ,а то я уже отчаился )Это, несомненно, стоило потраченной половины ночи...
Попрошу заметить, что это меняет только иконки в процессе самой игры. На стадии пика они по прежнему меняться не будут, так как там отдельный топбар. Если очень захочется, то добавишь себе этот ништяк самостоятельно, все что надо сделать - открыть панорама дебагер (f6), чтобы найти ид панели, которую нужно поиметь; затем продублировать скрипт и немного изменить в нем вторую, третью и шестую строки.
Или писать свой топ барХм, странно тогда. Дай еще на всякий случай скрин содержимого этой папки.
А вообще если работает в тулзах, но в не работает в игре, то это скорее всего ошибки Valve. В таких случаях только ждать и надеяться остается.
new_img.SetImage( "file://{images}/custom_game/heroes/ + img.heroname + ".png" ) обычно в heroname полное имя героя, с "npc_dota_hero_"Да, действительно. Именно на серверах и именно с этими картинками (с heroes/selection все работает без проблем) замена почему-то не работает. Это связано с тем, что картинка на топбаре задается динамически через скрипт по имени, а эти имена у них там синхронизируются как-то через жёпу. Даже когда я просто пытался отдельный худ со своей картинкой из heroes сделать, на сервере она иногда заменялась, а иногда **й. Я так и не понял от чего это зависит, поэтому предлагаю изнасиловать стандартный топбар через js:
- Помести нужные картинки в images/custom_game/heroes. Компилировать ничего не надо.
- Создай рабочий js-скрипт (если не знаешь, что это значит, прочитай любой гайд по панораме). Вставь туда ето:
Это, несомненно, стоило потраченной половины ночи...JavaScript:function FixHeroIcons(){ var topbar = $.GetContextPanel().GetParent().GetParent().GetParent().GetParent().FindChildTraverse("topbar") // Ето топбар и его мы будем насиловать var playerSlots = topbar.FindChildrenWithClassTraverse("TopBarPlayerSlot") // Находим в етом топбаре все панели с классом TopBarPlayerSlot, ибо каждая такая панель соответствует одному игроку. for ( k in playerSlots ){ // перебор массива с найденными панелями var img = playerSlots[k].FindChildTraverse("HeroImage") // Так получилось, что в каждой такой панели есть дочерняя панель с ид HeroImage, которая и хранит в себе изображение героя. if ( img.Children().length == 0 ){ // Если в эту дочернюю панель еще никто ничего не засунул... var new_img = $.CreatePanel( "Image", img, "ImageOverride" ) // Создаем внутри нее свою картинку if (img.heroname) { new_img.SetImage( "file://{images}/custom_game/heroes/npc_dota_hero_" + img.heroname + ".png" ) // Устанавливаем нужную картинку, исходя из того, что изначально было в img } } } $.Schedule( 0.1, FixHeroIcons ) // В течение игры топбар может меняться, при этом все наши внесенные в него изменения сбрасываются. Чтобы избежать потери изменений, заставим этот код выполняться с постоянной периодичностью. } FixHeroIcons()
Попрошу заметить, что это меняет только иконки в процессе самой игры. На стадии пика они по прежнему меняться не будут, так как там отдельный топбар. Если очень захочется, то добавишь себе этот ништяк самостоятельно, все что надо сделать - открыть панорама дебагер (f6), чтобы найти ид панели, которую нужно поиметь; затем продублировать скрипт и немного изменить в нем вторую, третью и шестую строки.
Надо, нескомпиленные файлы js использовать не будетКомпилировать ничего не надо