Как сделать так,что бы локальный юнит ссылался из одного триггера в другой?
И попутный вопрос: Допустим у меня есть функция которая берет неизвестный юнит(takes unit u), то как ее вызвать так,что бы неизвестный юнит задавался локальным из триггера?
P.S. Я это спрашиваю потому что для того что мне нужно,надо что бы из 1-го триггера локальный юнит ссылался на 2-ой,а из 2-го в функцию.

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

silence_AZ,
Вот вам пример, идите разбирайте его и читайте все статьи, что есть.
function UnitAddEffect takes unit u, real x, real y returns nothing
    call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Undead\\AnimateDead\\AnimateDeadTarget.mdl", x, y))
    call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl", GetUnitX(u), GetUnitY(u)))
endfunction

function Action takes nothing returns nothing
    local unit u = GetOrderedUnit()
    local real x = GetOrderPointX()
    local real y = GetOrderPointY()
    call UnitAddEffect(u, x, y)
endfunction

function InitTrig_Effect takes nothing returns nothing
    local trigger t = CreateTrigger()
    local integer i = 0
    loop
        call TriggerRegisterPlayerUnitEvent(t, Player(i), EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER, null)
        set i = i + 1
        exitwhen i == 16
    endloop
    call TriggerAddAction( t, function Action )
endfunction
Создайте триггер "Effect", конвертируйте в текст, удалите все что там есть, копирните и вставьте мое, запускайте карту и побегайте юнитами.
То что я написал можно и нужно оптимизировать, но так как вам нужен пример создания пользовательский функций, то я сделал именно так.
Вот на всякий случай оптимизированный вариант.
cJass
    define{
        func = function
        void = nothing
        GetX(u) = GetUnitX(u)
        GetY(u) = GetUnitY(u)
        //Constants
        Effect_OnUnit = "Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl"
        Effect_OnXY = "Abilities\\Spells\\Undead\\AnimateDead\\AnimateDeadTarget.mdl"
    }

    void Action(){
        unit u = GetOrderedUnit();
        DestroyEffect(AddSpecialEffect(Effect_OnXY, GetOrderPointX(), GetOrderPointY()));
        DestroyEffect(AddSpecialEffect(Effect_OnUnit, GetX(u), GetY(u)));
    }

    void InitTrig_Effect(){
        trigger t = CreateTrigger()
        integer i = 0
        loop{
            TriggerRegisterPlayerUnitEvent(t, Player(i), EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER, null);
            i++;
            exitwhen i == 16;
        }
        TriggerAddAction( t, func Action );
    }
этот вариант будет оптимальнее в туче кода, хоть такая фигня и не нужна никому, но тем не менее..
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
21
10 лет назад
Отредактирован Buulichkaa
0
Я не понял что вам нужно...
Опишите что вы хотите сделать и я скажу как это сделать.
Допустим у меня есть функция которая берет неизвестный юнит(takes unit u), то как ее вызвать так,что бы неизвестный юнит задавался локальным из триггера?
не знаю правильно ли понял, но наверное нужно
это
function someFun1 takes unit u returns nothing
  //действия, к примеру:
  SetUnitX(u, 0.)
  SetUnitY(u, 0.)
endfunction

function triggerActionFunc takes nothing returns nothing
  local unit u = someunit
  call someFunc(u)
endfunction

//тут события и прочая бурда
берем юнита в функции триггера и с помощью другой функции двигаем его в центр карты
в ознакомительных целях вариант на cJass (какой раз в жизни... спс Адольфу за сиджасс)
define {
    void = nothing
    SetUnitXY(u, x, y) = {SetUnitX(u, x); SetUnitY(u, y)}
}
void someFun1 takes(unit u){
  SetUnitXY(u, 0., 0.);
}

void triggerActionFunc(){
  unit u = someunit;
  someFunc(u);
}
0
9
10 лет назад
0
Buulichkaa:
Я не понял что вам нужно...
Опишите что вы хотите сделать и я скажу как это сделать.
Допустим у меня есть функция которая берет неизвестный юнит(takes unit u), то как ее вызвать так,что бы неизвестный юнит задавался локальным из триггера?
не знаю правильно ли понял, но наверное нужно
это
function someFun1 takes unit u returns nothing
  //действия, к примеру:
  SetUnitX(u, 0.)
  SetUnitY(u, 0.)
endfunction

function triggerActionFunc takes nothing returns nothing
  local unit u = someunit
  call someFunc(u)
endfunction

//тут события и прочая бурда
берем юнита в функции триггера и с помощью функции двигаем его в центр карты
Именно это я пытался сделать но функция либо не вызывается либо игра выдает ошибку
0
21
10 лет назад
Отредактирован Buulichkaa
0
silence_AZ, что вам надо получить, кастера спелла или что, какого юнита вы пытались получить через триггер?
0
9
10 лет назад
Отредактирован Sparrow
0
Buulichkaa:
silence_AZ, что вам надо получить, кастера спелла или что, какого юнита вы пытались получить через триггер?
Я пытаюсь отловить полученные повреждения после нанесения удара(своим методом,потому что наработки я не понимаю.Я только сегодня узнал что такое джасс,и вот практикуюсь.)
Проще говоря систему показа нанесенного урона в виде плавающего текста(свою).
Если есть желание то вы объясните мне как это сделать.
0
21
10 лет назад
Отредактирован Buulichkaa
0
чтобы получить атакованного юнита по-моему надо использовать
GetTriggerUnit()
а для получения юнита который атаковал
GetEventDamageSource()
эти функции возвращают юнитов, т. е. переменным можно присваивать сразу эти функции.
Так же следует задать событие триггеру
это
EVENT_UNIT_ATTACKED
или
EVENT_UNIT_DAMAGED
это.
Ну и функции получения юнита - соответственно событию.
0
9
10 лет назад
Отредактирован Sparrow
0
Buulichkaa:
чтобы получить атакованного юнита по-моему надо использовать
GetTriggerUnit()
а для получения юнита который атаковал
GetEventDamageSource()
эти функции возвращают юнитов, т. е. переменным можно присваивать сразу эти функции.
Так же следует задать событие триггеру
это
EVENT_UNIT_ATTACKED
или
EVENT_UNIT_DAMAGED
это.
Ну и функции получения юнита - соответственно событию.
Я ни капельки не понял Сейчас напишу как я начал делать
ФУНКЦИЯ
function SDMS_Actions takes unit n returns nothing
call CreateTextTagUnitBJ( I2S(R2I(GetEventDamage())), n, 0, 10, 100, 100, 100, 0 )
call SetTextTagPermanentBJ( GetLastCreatedTextTag(), false )
call SetTextTagVelocityBJ( GetLastCreatedTextTag(), 64, 90 )
call SetTextTagLifespanBJ( GetLastCreatedTextTag(), 1.00 )
call SetTextTagFadepointBJ( GetLastCreatedTextTag(), 0.50 )
endfunction
ТРИГГЕР
function Trig_sdmsss_Actions takes nothing returns nothing
set udg_unit = GetAttackedUnitBJ ()
call DestroyTrigger(udg_SDMS)
set udg_SDMS = CreateTrigger( )
call TriggerRegisterUnitEvent( udg_SDMS, udg_unit, EVENT_UNIT_DAMAGED )
call TriggerAddAction( udg_SDMS, function SDMS_d )
endfunction
===========================================================================
function InitTrig_sdmsss takes nothing returns nothing
set gg_trg_sdmsss = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_sdmsss, EVENT_PLAYER_UNIT_ATTACKED )
call TriggerAddAction( gg_trg_sdmsss, function Trig_sdmsss_Actions )
endfunction
0
28
10 лет назад
0
silence_AZ, прочитай статьи
ибо ты полный бред написал
0
9
10 лет назад
0
nvc123:
silence_AZ, прочитай статьи
ибо ты полный бред написал
Хехех ну почему то этот бред работает на ура,только осталось помочь с тем что написано в ВОПРОСЕ а не в коментах
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.