XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
Проблемы с отображением каст бара
Проблемка нарисовалась... решил я сделать так относительно каст бара - создавать один текст таг, и затем изменять его, но тут начались грабли. Каст бар появляется на долю секунды и исчезает. В чем проблема то, не могу понять.
» код
//-----------------===================================-------------------------
function ReplaceAbility takes nothing returns nothing
local timer t = GetExpiredTimer()
local unit u = LoadUnitHandle(udg_Hash,GetHandleId(t),1)
local integer Abil1 = LoadInteger(udg_Hash, GetHandleId(t),2)
local integer Abil2 = LoadInteger(udg_Hash, GetHandleId(t),3)
    call UnitRemoveAbility(u, Abil2)
        call UnitAddAbility(u, Abil1)
         //call DisplayTextToForce( GetPlayersAll(), GetAbilityName(Abil1) )
    //call DisplayTextToForce( GetPlayersAll(), GetAbilityName(Abil2) )
    call DestroyTimer(t)
set t = null
endfunction

function CastBar takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local integer idT = GetHandleId(t)
    local unit u = LoadUnitHandle(udg_Hash,idT,1)
    local real OnePerc = LoadReal(udg_Hash,idT,3)
    local integer C = LoadInteger(udg_Hash, idT,4)
    local texttag text = LoadTextTagHandle(udg_Hash, GetHandleId(u), 1)
//---------------------------------------------------------------
    //call DisplayTextToForce( GetPlayersAll(), "CastBarDefine" )
        if C == 33 or IsUnitInGroup(u, udg_CastGroup) == false then
            call DestroyTimer(t)
            //call DisplayTextToForce( GetPlayersAll(), "CastBarDestroy" )
        
                call DestroyTextTag(text)
    
//---------------------------------------------------------------
             call FlushChildHashtable(udg_Hash,GetHandleId(t))
            call FlushChildHashtable(udg_Hash,GetHandleId(u))
//---------------------------------------------------------------
        else
            call SetTextTagText(text,udg_CastBar_Text[C],GetUnitFlyHeight (u))
            set C = C+1
            call SaveInteger(udg_Hash, idT,4, C)
            call DisplayTextToForce( GetPlayersAll(), I2S(C) )
            call DisplayTextToForce( GetPlayersAll(),udg_CastBar_Text[C] )
        endif
//---------------------------------------------------------------
    set t = null
    set u = null
    set text = null
endfunction

function CastProcess takes nothing returns nothing
local timer t = GetExpiredTimer()
local timer t2
local integer idT = GetHandleId(t)
local unit u = LoadUnitHandle(udg_Hash,idT,1)
local real CastTime = LoadReal(udg_Hash,idT,3)
local integer Abil1 = LoadInteger(udg_Hash, idT,4)
local integer Abil2 = LoadInteger(udg_Hash, idT,5)
local real CD = LoadReal(udg_Hash, idT,6)
local integer C = 1
//---------------------------------------------------------------
//call DisplayTextToForce( GetPlayersAll(), "CastProcessDefine" )
    if CastTime <= 0.00 then
        call DestroyTimer(t)
        call IssueImmediateOrder(u, "stop")
        call UnitRemoveAbility(u, Abil1)
        call UnitAddAbility(u, Abil2)
         //call DisplayTextToForce( GetPlayersAll(), GetAbilityName(Abil1) )
    //call DisplayTextToForce( GetPlayersAll(), GetAbilityName(Abil2) )
    
        set t2 = CreateTimer()
        call SaveInteger(udg_Hash, GetHandleId(t2),2, Abil1)
            call SaveInteger(udg_Hash, GetHandleId(t2),3, Abil2)
            call SaveUnitHandle(udg_Hash,GetHandleId(t2),1,u)
        call IssueTargetOrder( u, LoadStr(udg_Hash, idT,7), LoadUnitHandle(udg_Hash,idT,2))
        call TimerStart(t2, CD, false, function ReplaceAbility)
       //call DisplayTextToForce( GetPlayersAll(), "EndCast, start ReplaceAbility")
        call GroupRemoveUnit(udg_CastGroup, u)
        call FlushChildHashtable(udg_Hash,GetHandleId(t))
            //call FlushChildHashtable(udg_Hash,GetHandleId(u))
//-------------------------------------------
        elseif IsUnitInGroup(u, udg_CastGroup) == false then
            call IssueImmediateOrder(u, "stop")
            call DestroyTimer(t)
            //call DisplayTextToForce( GetPlayersAll(), "CastBreake" )
//---------------------------------------------------------------
        else
            set CastTime = CastTime -0.01
            call SaveReal(udg_Hash,idT,3,CastTime)
            //call DisplayTextToForce( GetPlayersAll(), R2S(CastTime) )
    endif
//---------------------------------------------------------------
set t = null
set t2 = null
set u = null
endfunction

function CastInit takes unit u, real CastTime, integer Abil1, integer Abil2, real CD, unit uTarg, string Ord returns nothing
    local real z = GetUnitFlyHeight (u)
    local timer t = CreateTimer()
    local timer t2 = CreateTimer()
    local real OnePerc = CastTime/34
    local integer idT = GetHandleId(t)
    local integer idT2 = GetHandleId(t2)
    local texttag text = CreateTextTagUnitBJ(udg_CastBar_Text[0], u, z, 10.5, 100, 100, 100, 0)
//---------------------------------------------------------------
    call SaveUnitHandle(udg_Hash,idT,1,u)
    call SaveUnitHandle(udg_Hash,idT,2,uTarg)
    call SaveReal(udg_Hash,idT,3,CastTime)
    call SaveInteger(udg_Hash, idT,4, Abil1)
    call SaveInteger(udg_Hash, idT,5, Abil2)
    call SaveReal(udg_Hash, idT,6, CD)
    call SaveStr(udg_Hash, idT,7, Ord)
    //call DisplayTextToForce( GetPlayersAll(), GetAbilityName(Abil1) )
    //call DisplayTextToForce( GetPlayersAll(), GetAbilityName(Abil2) )
        call SaveUnitHandle(udg_Hash,idT2,1,u)
        call SaveReal(udg_Hash,idT2,3,OnePerc)
        call SaveInteger(udg_Hash, idT2,4, 1)
//---------------------------------------------------------------
        call SaveTextTagHandle(udg_Hash,GetHandleId(u),1, text)
        call TimerStart(t, 0.01, true, function CastProcess)
        call TimerStart(t2, OnePerc, true, function CastBar)
//---------------------------------------------------------------
        set t = null
        set t2 = null
        set text = null
endfunction
Старый 04.05.2012, 19:57
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
  1. Раскомментируй строку и посмотри, исчезает ли тексттаг одновременно с появлением сообщения.
    if C == 33 or IsUnitInGroup(u, udg_CastGroup) == false then
        call DestroyTimer(t)
        //call DisplayTextToForce( GetPlayersAll(), "CastBarDestroy" )

        call DestroyTextTag(text)

        call FlushChildHashtable(udg_Hash,GetHandleId(t))
        call FlushChildHashtable(udg_Hash,GetHandleId(u))
    else
  1. Возможно, дело в небольшом значении CastTime, попробуй задать его больше.
  2. Попробуй поставить call SetTextTagPermanent(text, true) после создания тексттага.
Старый 05.05.2012, 07:46
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
ShadoW_DaemoN:
  1. Раскомментируй строку и посмотри, исчезает ли тексттаг одновременно с появлением сообщения.
    if C == 33 or IsUnitInGroup(u, udg_CastGroup) == false then
        call DestroyTimer(t)
        //call DisplayTextToForce( GetPlayersAll(), "CastBarDestroy" )

        call DestroyTextTag(text)

        call FlushChildHashtable(udg_Hash,GetHandleId(t))
        call FlushChildHashtable(udg_Hash,GetHandleId(u))
    else
сообщение как и положено появляется при завершении каста
  1. Возможно, дело в небольшом значении CastTime, попробуй задать его больше.
каст тайм 1 секунда в данном случае теста. Когда делал 30 текст тагов и просто изменял их альфу, то все ок было.
  1. Попробуй поставить call SetTextTagPermanent(text, true) после создания тексттага.
не помогло
Миниатюры
Кликните на картинку для увеличения
Название:  asd.JPG
Просмотров: 60
Размер:  129.7 Кбайт  
Старый 05.05.2012, 14:21
prog

offline
Опыт: 32,865
Активность:
массив udg_CastBar_Text[C] точно заполняется?
Старый 06.05.2012, 14:14
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
prog:
массив udg_CastBar_Text[C] точно заполняется?
как видишь да
» событие прошла 1 секунда
set udg_CastBar_Text[0] = "|cff333333'''''''''''''''''''''''''''''''''|r"
  set udg_CastBar_Text[1] = "|cffffae00'|r|cff333333''''''''''''''''''''''''''''''''|r"
  set udg_CastBar_Text[2] = "|cffffae00'|r|cff333333''''''''''''''''''''''''''''''''|r"
  set udg_CastBar_Text[3] = "|cffffae00''|r|cff333333'''''''''''''''''''''''''''''''|r"
  set udg_CastBar_Text[4] = "|cffffae00'''|r|cff333333''''''''''''''''''''''''''''''|r"
  set udg_CastBar_Text[5] = "|cffffae00''''|r|cff333333'''''''''''''''''''''''''''''|r"
  set udg_CastBar_Text[6] = "|cffffae00'''''|r|cff333333''''''''''''''''''''''''''''|r"
  set udg_CastBar_Text[7] = "|cffffae00''''''|r|cff333333'''''''''''''''''''''''''''|r"
  set udg_CastBar_Text[8] = "|cffffae00'''''''|r|cff333333''''''''''''''''''''''''''|r"
  set udg_CastBar_Text[9] = "|cffffae00''''''''|r|cff333333'''''''''''''''''''''''''|r"
 set udg_CastBar_Text[10] = "|cffffae00'''''''''|r|cff333333''''''''''''''''''''''''|r"
 set udg_CastBar_Text[11] = "|cffffae00''''''''''|r|cff333333'''''''''''''''''''''''|r"
 set udg_CastBar_Text[12] = "|cffffae00''''''''''''|r|cff333333'''''''''''''''''''''|r"
 set udg_CastBar_Text[13] = "|cffffae00'''''''''''''|r|cff333333''''''''''''''''''''|r"
 set udg_CastBar_Text[14] = "|cffffae00''''''''''''''|r|cff333333'''''''''''''''''''|r"
 set udg_CastBar_Text[15] = "|cffffae00'''''''''''''''|r|cff333333''''''''''''''''''|r"
 set udg_CastBar_Text[16] = "|cffffae00''''''''''''''''|r|cff333333'''''''''''''''''|r"
 set udg_CastBar_Text[17] = "|cffffae00'''''''''''''''''|r|cff333333''''''''''''''''|r"
 set udg_CastBar_Text[18] = "|cffffae00''''''''''''''''''|r|cff333333'''''''''''''''|r"
 set udg_CastBar_Text[19] = "|cffffae00'''''''''''''''''''|r|cff333333''''''''''''''|r"
 set udg_CastBar_Text[20] = "|cffffae00''''''''''''''''''''|r|cff333333'''''''''''''|r"
 set udg_CastBar_Text[21] = "|cffffae00'''''''''''''''''''''|r|cff333333''''''''''''|r"
 set udg_CastBar_Text[22] = "|cffffae00''''''''''''''''''''''|r|cff333333'''''''''''|r"
 set udg_CastBar_Text[23] = "|cffffae00'''''''''''''''''''''''|r|cff333333''''''''''|r"
 set udg_CastBar_Text[24] = "|cffffae00''''''''''''''''''''''''|r|cff333333'''''''''|r"
 set udg_CastBar_Text[25] = "|cffffae00'''''''''''''''''''''''''|r|cff333333''''''''|r"
 set udg_CastBar_Text[26] = "|cffffae00''''''''''''''''''''''''''|r|cff333333'''''''|r"
 set udg_CastBar_Text[27] = "|cffffae00'''''''''''''''''''''''''''|r|cff333333''''''|r"
 set udg_CastBar_Text[28] = "|cffffae00''''''''''''''''''''''''''''|r|cff333333'''''|r"
 set udg_CastBar_Text[29] = "|cffffae00'''''''''''''''''''''''''''''|r|cff333333''''|r"
 set udg_CastBar_Text[30] = "|cffffae00''''''''''''''''''''''''''''''|r|cff333333'''|r"
 set udg_CastBar_Text[31] = "|cffffae00'''''''''''''''''''''''''''''''|r|cff333333''|r"
 set udg_CastBar_Text[32] = "|cffffae00''''''''''''''''''''''''''''''''|r|cff333333'|r"
 set udg_CastBar_Text[33] = "|cffffae00'''''''''''''''''''''''''''''''''|r|cff333333|r"
Старый 06.05.2012, 15:17
prog

offline
Опыт: 32,865
Активность:
Hatsume_Hate, проведи эксперимент - отключи все таймеры и посмотри сколько проживет твой тексттаг, если он по прежнему будет умирать сразу после создания, то дело в его настройках.
Старый 06.05.2012, 16:39
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
local texttag text = CreateTextTagUnitBJ(udg_CastBar_Text[0], u, z, 10.5, 100, 100, 100, 0)
этот текст таг виден, однако как только я изменяю его текст
call SetTextTagText(text,udg_CastBar_Text[C],GetUnitFlyHeight (u))
то он сразу исчезает
Старый 06.05.2012, 16:40
Klop
Папа римский
offline
Опыт: 13,006
Активность:
Hatsume_Hate:
call SetTextTagText(text,udg_CastBar_Text[C],GetUnitFlyHeight (u))
беда поставь тут (GetUnitFlyHeight(u)+1)*0.0023
при высоте 0 умножение не поможет
или вообще вот так
SetTextTagText(t,s,.0253)
SetTextTagPos(t,GetUnitX(u),GetUnitY(u),GetUnitFlyHeight(u))
свои координаты
Старый 06.05.2012, 18:08
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
Klop:
Hatsume_Hate:
call SetTextTagText(text,udg_CastBar_Text[C],GetUnitFlyHeight (u))
беда поставь тут (GetUnitFlyHeight(u)+1)*0.0023
при высоте 0 умножение не поможет
или вообще вот так
SetTextTagText(t,s,.0253)
SetTextTagPos(t,GetUnitX(u),GetUnitY(u),GetUnitFlyHeight(u))
свои координаты
и все эти танцы с бубном не помогли
Старый 06.05.2012, 18:16
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
закройте тему, разобрался в проблеме.
Старый 28.05.2012, 09:53
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 23:23.