Пытался устранить утечку плавающего текста в счётчике урона, но пишет отсутствует оператор кода, делал всё по статье про изучение джасса.

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

Впервой вижу, чтоб так издевались над плавающем текстом...
Как пишет г-н Maniac_91, нет нужды в сохранении texttag, ибо при строчке
call SetTextTagLifespanBJ( GetLastCreatedTextTag(), 0.50 )
или (вариант получше)
call SetTextTagLifespan(GetLastCreatedTextTag(), 0.50)
Ваш texttag, как умненький мальчик, сам уберется, когда он сделал своё дело ;)
Правда есть один нюанс... Если Вы добавили строчку
call SetTextTagPermanent(GetLastCreatedTextTag(),true)
то этот мальчик будет стоять подле Вас до конца сабантуя и ждать команды на уничтожение ;)
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
21
6 лет назад
0
Если не стоит жнгп, локальные переменные объявляются только в начале триггера
перемести "local texttag t" вверх действий
0
17
6 лет назад
0
biridius, Хм незнаю, всё работает, но хендлы растут после атаки, от чего это может быть? Как сделать чтоб текст удалялся вне зависимости от скорости атаки? кидаю карту
Загруженные файлы
0
21
6 лет назад
0
вроде еще надо обнулять локальные переменные объектов (юниты, тексттаги, точки) в конце триггера
set t = null
0
17
6 лет назад
0
biridius, Я не понимаю, даже если без ожидания удалять текст всё равно растёт handle, вот это тайна я понимаю. Может есть что-то другое что надо обнулять, там с гуи связанное, например строка полученного урона, которую передают с одного триггера на другой, или триггерный юнит
0
17
6 лет назад
0
делая так ты только вредишь себе,если хочешь жасс изучить то делай на жассе а не на фракенштейне,и для такий частопереодических вещей лутше использовать глобальные массивы или структуры
0
17
6 лет назад
0
ledoed, Я просто думал что могу пристроить сюда локальные переменные, там же в обучалке показывали как они работают на бесполезной вещи, а тут вроде мне они должны были помочь, а оказалось что они бесполезные( Тоесть нельзя создавать и запоминать несколько последних плавающих текстов и через время удалять их именно как объекты, а не так как их там удаляет?
0
17
6 лет назад
Отредактирован ledoed
0
вот тебе повезло нашел в старой карте код с плавующим текстом
сложная билеберда
//Плавающий текст
scope SetTextTag{

    
    public int count = 0
    private unit this_u[]
    private texttag this_texttag[]
    private int this_time[]

    private int this_tt[]
    
    private bool this_poss[]
    
    private float this_z[]
    
    
    
    
    
    
    
    
        private void RemoveUnitStruct(int i){

          count--
          

        //====================
        this_u[i]=this_u[count]
        this_z[i]=this_z[count]
        this_poss[i]=this_poss[count]
        this_time[i]= this_time[count]
        this_tt[i]=this_tt[count]
        this_texttag[i]=this_texttag[count]
        //======================
		this_u[count]=null
          
        }    
    
        private void Remove(int i){
        DestroyTextTag(this_texttag[i])

        RemoveUnitStruct(i)

        }   
    
    

//    MiniFunc_SetTextTag_AddUnit(unit u,string text,float x,float y,float z,bool poss,float speed,float angle,float size,float time,int R,int G,int B,int A)
    public void AddUnit(unit u,string text,float x,float y,float z,bool poss,float speed,float angle,float size,float time,int R,int G,int B,int A){
    
        this_texttag[count]= CreateTextTag()
        
        SetTextTagText(this_texttag[count], text, TextTagSize2Height(size))
        SetTextTagPos(this_texttag[count],x,y,z)
        SetTextTagColor(this_texttag[count], R, G, B, A)
        
        float vel = TextTagSpeed2Velocity(speed)
        float xvel = vel * Cos(angle * degrad)
        float yvel = vel * Sin(angle * degrad)
        SetTextTagVelocity(this_texttag[count], xvel, yvel)
        this_u[count]=u
        this_poss[count]=poss
        this_time[count]=R2I(time*sek)
        this_tt[count]=0
        this_z[count]=z
        
        count++
    }
    
    
    
    
    void Action(int i){
    
        if(this_poss[i]){
            SetTextTagPos(this_texttag[i],GetUnitX(this_u[i]),GetUnitY(this_u[i]),this_z[i])
        }
        
        if(++this_tt[i]>this_time[i]){
        
        Remove(i)
        
        }
    }
    
    public void Update(){int i = 0 ;while(i<count){Action(i);i++}}
    //таймер на 0.025
    
}
для понимания более упрощённая
//удаление юнита через время
scope UnitRemoveToTime{

        public int count =0
        //============================
        private unit this_u[] 
        private int this_timmer[] 
        private int this_tt[]

        private int Proverka(unit u){int i = 0;while(i<count){if(u==this_u[i]){return i}i++}return -1}


        private void RemoveUnitStruct(int i){

          count--
          

        //====================
        this_u[i]=this_u[count]
        this_timmer[i]= this_timmer[count]
        this_tt[i]=this_tt[count]
        //======================
		this_u[count]=null

          
        }

        private void Remove(int i){
       
       RemoveUnit(this_u[i])

        
        RemoveUnitStruct(i)

        }


        //MiniFunc_UnitRemoveToTime_AddUnit(unit u,float timmer)
        public void AddUnit(unit u,float timmer){

            int i =Proverka(u)
                    if(i!=-1){return}
                    
                        this_u[count]=u
                        this_timmer[count]=R2I(timmer*sek)//sek = 40
                        this_tt[count]=0
                        
                        count++
            

        }


            private void Action(int i){

                this_tt[i]++
                if(this_tt[i]>this_timmer[i] ){

                Remove(i)
                }

            }


            public void Update(){int i = 0 ;while(i<count){Action(i);i++}}
            //поток на 0.025



}
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.