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

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

Закрытая тема
 
Kirya92

offline
Опыт: 107
Активность:
Немогу разобраться
Интересуют вопросы:
1. Как уничтожить структуру внутри самой себя?
2. Читал где-то что структуры облегчают написание спеллов, как к таймеру прикрепить структуру или метод я толком непонял?

Пример:

Код:
struct st
timer t

    method aaa
    //Действия и т.д
    //Как потом уничтожить структуру st????
    endmethod
endstruct

function bbb takes nothing returns nothing
    st a = st.create()
    a.t = CreateTimer()
    TimerStart(a.t, 0.05, true, ??????) //что писать? как прикрепить метод к таймеру?
endfunction
Старый 18.11.2010, 11:59
XOR

offline
Опыт: 38,159
Активность:
  • .destroy()
  • я тоже не понял, чего хочет автор?)
Старый 18.11.2010, 12:13
Kirya92

offline
Опыт: 107
Активность:
1. Мне нужно после определённого прохода таймера по структуре уничтожить структуру внутри самой себя.
2. Мне нужно к многократному таймеру прикрепить не функцию, а метод созданной структуры.
Старый 18.11.2010, 12:20
Nekit1234007

offline
Опыт: 11,916
Активность:
  1. Достать структуру из таймера можно TimerUtils'ом. Например:
library A requires TimerUtils {
	struct A {
		private method onTimer() {
			thistype this = GetTimerData(GetExpiredTimer());
			// actions
			this.deallocate(); // А вот тут ответ на первый вопрос.
		}

		public static method new() -> thistype {
			thistype this = thistype.allocate();
			timer t = NewTimer(); // Из TimerUtils. Для уничтожения надо использовать ReleaseTimer(), если что.
			SetTimerData(t, this);
			// ...
			TimerStart(t, ..., ..., function A.onTimer);
			return this;
		}
	}
}
Старый 18.11.2010, 13:32
Kirya92

offline
Опыт: 107
Активность:
Всеравно что-то у меня голова не варит.)) Вобщем вот кодик спелла (для наглядности), помогите дописать(с ООП знаком, но в Jass'e с ним со вчерашнего дня). Заранее благодарю.

Код:
struct Division_of_Land
define
{
    abID = 'A005'
    eff = "Abilities\\Spells\\Undead\\ReplenishHealth\\ReplenishHealthCaster.mdl"
}
    timer t
    real x = GetUnitX(GetSpellAbilityUnit())
    real y = GetUnitY(GetSpellAbilityUnit())
    real r
    
    method DestroySt takes nothing returns nothing
        this.destroy()
    endmethod
    
    method createEff takes nothing returns nothing
        if (.r >= 600)
        {
            PauseTimer(.t)
            DestroyTimer(.t)
            .DestroySt()
        }
        else
        {
        .r = .r + 30
        loop
        {
            real a = 0
            exitwhen (a >= 360)
            DestroyEffect(AddSpecialEffect(eff, .x+.r*Cos(a), .y+.r*Sin(a)))
            a = a+45
        }
        }
    endmethod
        
endstruct
    

function Trig_Division_of_land_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A005'
endfunction

function Trig_Division_of_land_Actions takes nothing returns nothing
    // Тут! ,)
endfunction

//===========================================================================
function InitTrig_Division_of_land takes nothing returns nothing
    set gg_trg_Division_of_land = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Division_of_land, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddCondition( gg_trg_Division_of_land, Condition( function Trig_Division_of_land_Conditions ) )
    call TriggerAddAction( gg_trg_Division_of_land, function Trig_Division_of_land_Actions )

endfunction
Старый 18.11.2010, 13:52
Закрытая тема

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

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

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

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



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