Как сделать так,что бы локальный юнит ссылался из одного триггера в другой?
И попутный вопрос: Допустим у меня есть функция которая берет неизвестный юнит(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, прочитай статьи
ибо ты полный бред написал
Хехех ну почему то этот бред работает на ура,только осталось помочь с тем что написано в ВОПРОСЕ а не в коментах
0
28
10 лет назад
0
да ничего на ура не работает
бж
утечки
0
21
10 лет назад
Отредактирован Buulichkaa
0
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
9
10 лет назад
Отредактирован Sparrow
0
Buulichkaa:
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 );
    }
этот вариант будет оптимальнее в туче кода, хоть такая фигня и не нужна никому, но тем не менее..
первая функция как я понял добавляет еффект на указанный коордынаты и указанный юнит я так понял?
Вторая отдает координаты в первую
Прошу прощения но объясните нубу что значит exitwhen i == 16
0
21
10 лет назад
0
silence_AZ, просто вставьте в игру и гляньте что будет
exitwhen i == 16
это перебор в БЖ функции для задания события, я бж открыл чтобы не создавать новые процедуры
0
9
10 лет назад
Отредактирован Sparrow
0
Buulichkaa:
у меня координаты читает как путь к эффекту,в первой функции что делать?
0
21
10 лет назад
Отредактирован Buulichkaa
0
удалите то что после mdl и до запятой, это автоматом вставляется на сайте
вот код файлом
Создайте триггер Effect и вставьте туда код из файла, а то тут появляются символы из html
Загруженные файлы
0
9
10 лет назад
0
Buulichkaa:
удалите то что после mdl и до запятой, это автоматом вставляется на сайте
вот код файлом
Вот там указано "DestroyEffect" значит удалить я так понял?
(если удалить то откуда тогда он возьмется?
0
28
10 лет назад
0
Buulichkaa, тебе не надоело?
это ведь всё в статьях есть
0
21
10 лет назад
0
nvc123, модер жи -_-
секретность наше все
надоело
silence_AZ, пожалуйста, вставьте в игру, убедитесь что все работает
и посмотрите что стоит в ()
0
9
10 лет назад
0
Buulichkaa:
nvc123, модер жи -_-
секретность наше все
надоело
silence_AZ, пожалуйста, вставьте в игру, убедитесь что все работает
и посмотрите что стоит в ()
Я то вставил,но как это все вызвать?
0
28
10 лет назад
0
Buulichkaa, если бы в прочее такое началось я бы удалил вопрос
silence_AZ, объясни мне
какого чёрта ты не читаешь статьи и игнорируешь всё что тебе пишут
это что троллинг?
0
21
10 лет назад
Отредактирован Buulichkaa
0
silence_AZ, это уже шуточки пошли? лол делаете триггер Effect удаляете все что в нем есть, вставляете код из файла, расставляете юнитов на карте, и попробуйте ними походить.
Госпадзе какой jass...
nvc123, Ну надо же чтоб он наконец-то допер?
0
9
10 лет назад
0
nvc123:
Buulichkaa, если бы в прочее такое началось я бы удалил вопрос
silence_AZ, объясни мне
какого чёрта ты не читаешь статьи и игнорируешь всё что тебе пишут
это что троллинг?
В статьях не указано как переместить локальную переменную из одного триггера в другой не используя глобальные
0
21
10 лет назад
0
silence_AZ, это как бы надежда на то что до вас и так дойдет -___- не учите джасс
0
28
10 лет назад
0
silence_AZ, из триггера?
никак
триггер это отдельный поток
между потоками нельзя передавать локальные данные
Buulichkaa, ответ дан и не 1,закрой вопрос
0
21
10 лет назад
0
Чтобы оставить комментарий, пожалуйста, войдите на сайт.