Нужна помощь с картинкой героя сверху

SH4R1K

Пользователь
23 Сен 2018
41
0
Проект
Save the treant
Всем привет, читал гайд по изменению картинок героя сверху, вроде всё изменил. Ноооо , она не появляется в самой кастомке
Только в d2tools появилась. Могу приложить скрины если надо будет. Заранее спасибо)
 
20 Дек 2016
892
170
Посмотри, есть ли скомпилированные файлы в папке опубликованной версии твоей кастомки
steamapps\workshop\content\570\ид_твоей_кастомки
 
20 Дек 2016
892
170
Хм, странно тогда. Дай еще на всякий случай скрин содержимого этой папки.
А вообще если работает в тулзах, но в не работает в игре, то это скорее всего ошибки Valve. В таких случаях только ждать и надеяться остается.
 

SH4R1K

Пользователь
23 Сен 2018
41
0
Проект
Save the treant
Хм, странно тогда. Дай еще на всякий случай скрин содержимого этой папки.
А вообще если работает в тулзах, но в не работает в игре, то это скорее всего ошибки Valve. В таких случаях только ждать и надеяться остается.
1541251353612.png
 

SH4R1K

Пользователь
23 Сен 2018
41
0
Проект
Save the treant
Хм, странно тогда. Дай еще на всякий случай скрин содержимого этой папки.
А вообще если работает в тулзах, но в не работает в игре, то это скорее всего ошибки Valve. В таких случаях только ждать и надеяться остается.
На форуме есть guide по своему topbar-у? если да то можно ссылочку?
 
20 Дек 2016
892
170
Да, действительно. Именно на серверах и именно с этими картинками (с heroes/selection все работает без проблем) замена почему-то не работает. Это связано с тем, что картинка на топбаре задается динамически через скрипт по имени, а эти имена у них там синхронизируются как-то через жёпу. Даже когда я просто пытался отдельный худ со своей картинкой из heroes сделать, на сервере она иногда заменялась, а иногда **й. Я так и не понял от чего это зависит, поэтому предлагаю изнасиловать стандартный топбар через js:
  1. Помести нужные картинки в images/custom_game/heroes. Компилировать ничего не надо.
  2. Создай рабочий 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), чтобы найти ид панели, которую нужно поиметь; затем продублировать скрипт и немного изменить в нем вторую, третью и шестую строки.
 
  • Нравится
Реакции: SH4R1K, Sannin и vulkantsk

vulkantsk

Супермодератор
Команда форума
21 Июн 2017
1,137
195
www.dotabuff.com
Проект
Roshan defense
Это, несомненно, стоило потраченной половины ночи...
Попрошу заметить, что это меняет только иконки в процессе самой игры. На стадии пика они по прежнему меняться не будут, так как там отдельный топбар. Если очень захочется, то добавишь себе этот ништяк самостоятельно, все что надо сделать - открыть панорама дебагер (f6), чтобы найти ид панели, которую нужно поиметь; затем продублировать скрипт и немного изменить в нем вторую, третью и шестую строки.
Надеюсь это работает ,а то я уже отчаился )
По хорошему это в гайд надо запихнуть ,а то сейчас траблы начались ...
Енивей спасибо , проверю отпишусь ) !
 

HappyFeedFriends

Друзья CG
14 Авг 2017
540
32
Проект
Battle Heroes Arena
Хм, странно тогда. Дай еще на всякий случай скрин содержимого этой папки.
А вообще если работает в тулзах, но в не работает в игре, то это скорее всего ошибки Valve. В таких случаях только ждать и надеяться остается.
Или писать свой топ бар
 

HappyFeedFriends

Друзья CG
14 Авг 2017
540
32
Проект
Battle Heroes Arena
Да, действительно. Именно на серверах и именно с этими картинками (с heroes/selection все работает без проблем) замена почему-то не работает. Это связано с тем, что картинка на топбаре задается динамически через скрипт по имени, а эти имена у них там синхронизируются как-то через жёпу. Даже когда я просто пытался отдельный худ со своей картинкой из heroes сделать, на сервере она иногда заменялась, а иногда **й. Я так и не понял от чего это зависит, поэтому предлагаю изнасиловать стандартный топбар через js:
  1. Помести нужные картинки в images/custom_game/heroes. Компилировать ничего не надо.
  2. Создай рабочий 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), чтобы найти ид панели, которую нужно поиметь; затем продублировать скрипт и немного изменить в нем вторую, третью и шестую строки.
new_img.SetImage( "file://{images}/custom_game/heroes/ + img.heroname + ".png" ) обычно в heroname полное имя героя, с "npc_dota_hero_"
 
Реклама: