Ужасно не нравятся стандартные хп бары, ищу альтернативы.
Есть наработка, довольно хорошая, но баров не видно из-за большой модельки юнита, будь то здание, герой или просто большая моделька юнита.
Также заметил, что в этой наработке тексттаг создается от положения стандартного хп-бара, тоесть от границы модели юнита, но я не понял как это сделано.
Как изменить наработку, чтобы все красиво хорошо отображалось?

Принятый ответ

Вот поделюсь примером, единственное они у меня ниже 0 слегка, надо мешь поднять наверно будет в mdlvis

менять модель примерно так:
 DestroyEffect(HpBar[i]) 
 HpBar[i] = AddSpecialEffectTarget("HpBar_"+I2S(R2I(GetUnitLifePercent(u)/5))+".mdx","overhead")
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
29
5 лет назад
0
разве для эффектов есть аналоги SetUnitX?
В последнем патче даже Z, Yaw, Pitch есть))
1
25
5 лет назад
Отредактирован Jack-of-shadow
1
Вот поделюсь примером, единственное они у меня ниже 0 слегка, надо мешь поднять наверно будет в mdlvis

менять модель примерно так:
 DestroyEffect(HpBar[i]) 
 HpBar[i] = AddSpecialEffectTarget("HpBar_"+I2S(R2I(GetUnitLifePercent(u)/5))+".mdx","overhead")
Загруженные файлы
Принятый ответ
0
19
5 лет назад
0
Jack-of-shadow, приеду с колледжа и попробую повозиться с этим, спасибо.
Jack-of-shadow, я сделал так:
 nothing Trig_hpbar_Actions ( ){ 
   int i = 1
   int iend = g_unitCounter
   loop{
    exitwhen i > iend
    DestroyEffect( g_hpbar[i] )
    if GetUnitState(g_unitID[i], UNIT_STATE_LIFE)>0.00 {g_hpbar[i] = AddSpecialEffectTarget("war3mapImported\\HpBar_"+I2S(R2I(GetUnitLifePercent(g_unitID[i])/5))+".mdx", g_unitID[i], "overhead")}
    i++
   }
 }

 nothing InitTrig_hpbar ( ){ 
   gg_trg_hpbar = CreateTrigger( )
   TriggerRegisterTimerEvent( gg_trg_hpbar, 0.2, true )
   TriggerAddAction( gg_trg_hpbar, function Trig_hpbar_Actions )
 }
Но, если снизить период, то начинает подлагивать. Или есть более оптимизированный способ реализовать это? Можно создавать таймер для каждого юнита на карте, который будет запускать функцию обновления хп бара, но мне кажется, что это еще хуже способ. Можно было бы привязать к событию получения урона, но а как отследить лечение?
Я наверное сделаю секундный период, на всякий случай.
0
25
5 лет назад
Отредактирован Jack-of-shadow
0
Во первых, если просадка идет не от цикла, а от многократного удаления/создания эффекта, то достаточно запоминать старое значение и сменять эффект, только если хп изменилось на 5%.
Если проблема все-таки в переборе большого кол-ва юнитов в циклом, то:

1.Попробовать событие "юнит хп изменилось".
Возможно тоже тяжело для каждого будет, надо тестить.

2.Свой таймер на каждого юнита, а лучше на небольшую группу (10+). Чтобы грубо говоря не 100 юнитов в один тик перебрались, а по 10 со смещением.

З. Не считать юнитов с полным хп.
0
19
5 лет назад
0
Jack-of-shadow, кстати, можешь поправить модельки, там хпбар_20 не заполнен полностью.
0
25
5 лет назад
0
Загруженные файлы
0
19
5 лет назад
0
Jack-of-shadow, спасибо, вопрос закрою и буду возиться.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.