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

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

Ответ
 
Чебурашка

offline
Опыт: 5,460
Активность:
Wait и выбор группы
Имеется триггер.
Сначала выбирается группа юнитов около точки. после чего над ней совершается действие
Код:
local group lND
set lND=GetUnitsInRangeOfLocMatching(225,GetSpellTargetLoc(),Condition(function Check))
call ForGroupBJ(lND,function Damage)

В функции Damage создается дамми и кастут спелл на юнита
Захотел я чтоб была задержка перед эффектом
Для этого я в ф-ии Damage вставил
Код:
call PolledWait(0.04)
И работать ф-ция перестала, т. е эффект исчез. Замена на
Код:
call TriggerSleeepAction(0.04)
не помогла
Самое интересное, что стерев оттуда и вставив в ф-цию Action
Код:
call PolledWait(0.04)
до занесения в группу юнитов ничего не дало - не работало все равно
Лишь когда убрал все Waitы и SleepAction заработало
Старый 12.12.2008, 01:44
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Чебурашка, поллед вейт работает только с числами больше 0.45

Hellfim добавил:
Триггер слип экшн, вроде только с 0.1
Старый 12.12.2008, 01:46
Чебурашка

offline
Опыт: 5,460
Активность:
Цитата:
Сообщение от Hellfim
Чебурашка, поллед вейт работает только с числами больше 0.45

а TriggerSpeepAction ?
упс. не заметил

А уточните, не работает значит не оказывает эффекта или запарывает все что после ? У меня так второе

Отредактировано Чебурашка, 12.12.2008 в 01:52.
Старый 12.12.2008, 01:46
ExArt

offline
Опыт: 13,634
Активность:
Чебурашка Wait не работает меньше 0.1, если поставить меньше всё равно будет 0.1
Сделай отдельно спел и выложи, так непонятно где ошибка.

Отредактировано ExArt, 12.12.2008 в 08:37.
Старый 12.12.2008, 08:26
alexkill

offline
Опыт: 18,872
Активность:
Проблема в том, что в циклах нельзя использовать вэйты. Придется тебе обходится периодич. триггером или таймером.

Вот здесь обсуждалось.
Старый 12.12.2008, 12:22
adic3x

offline
Опыт: 108,439
Активность:
код в первом посте лажа)

1) в функциях, которые указываются как аргумент для нативки, работающей с группами не слипАкшинов, и конструкций, построенных на них (т.е. вейтов)

вариант а

Код:
globals
 group gr_temp=CreateGroup()
endglobals

function callback takes nothing returns boolean
 if true then
 endif
 return false
endfunction

// --->
 call GroupEnumUnitsInRange(gr_temp, x, y, r, Condition(function callback))
// <---


вариант б, задержка каста

Код:
local group gr=CreateGroup()
 call GroupEnumUnitsInRange(gr_temp, x, y, r, Condition(function Check))
 //
 call ForGroup(gr, function Damage)
 call DestroyGroup(gr)
 set gr=null


Цитата:
Лишь когда убрал все Waitы и SleepAction заработало


в идеале их вообще не юзайте в 99% случаев
Старый 12.12.2008, 15:33
MicroElf

offline
Опыт: 4,288
Активность:
alexkill
Как это в циклах нельзя использовать вейты? Я юзал, работало:-)
Старый 12.12.2008, 16:18
adic3x

offline
Опыт: 108,439
Активность:
2MicroElf
цикл и каллБек функция для перебора юнитов в группе - совершенно разеые вещи
Старый 12.12.2008, 16:54
alexkill

offline
Опыт: 18,872
Активность:
Кста, ADOLF, ForGroup по идее тоже производит действия в цикле?
Старый 12.12.2008, 17:23
Чебурашка

offline
Опыт: 5,460
Активность:
привел код к виду
» раскрыть
function Check takes nothing returns boolean
return (IsUnitEnemy(GetFilterUnit(),GetOwningPlayer(GetSpellAbilityUnit())))
endfunction

function Damage takes nothing returns nothing
local unit r = GetTriggerUnit()
local real a = GetUnitX(GetEnumUnit())
local real b = GetUnitY(GetEnumUnit())
local unit L = CreateUnit(GetOwningPlayer(r), 'o005' ,a,b,0)
local effect l


call UnitAddAbility(L,'A07B')


call IssueTargetOrder(L,"thunderbolt", GetEnumUnit() )
call PolledWait(1.0)
call DestroyEffect(l)
call RemoveUnit(L)
set l = null
set L= null
set r = null
endfunction



function Trig_bolt_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A07A'
endfunction


function Trig_bolt_Actions takes nothing returns nothing
local group lND
local location LoC
local effect m = AddSpecialEffectLoc("Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl", GetSpellTargetLoc() )
call TriggerSleepAction(0.04)
set LoC = GetSpellTargetLoc()

set lND=GetUnitsInRangeOfLocMatching(225,GetSpellTargetLoc(),Condition(function Check))

call ForGroupBJ(lND,function Damage)
call PolledWait (0.1)
call DestroyGroup(lND)
call RemoveLocation(LoC)

call DestroyEffect(m)
set m = null
set LoC = null
set lND = null
endfunction



//===========================================================================
function InitTrig_BoltDruid takes nothing returns nothing
set gg_trg_BoltDruid = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_BoltDruid, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_BoltDruid, Condition( function Trig_bolt_Conditions ) )
call TriggerAddAction( gg_trg_BoltDruid, function Trig_bolt_Actions )
endfunction
заработало вроде. основной имхо фрагмент
Код:
local effect m = эффект
call TriggerSleepAction(0.04)     
set lND=GetUnitsInRangeOfLocMatching(225,GetSpellTargetLoc(),Condition(function Check))

если честно я не понимаю разницу между PolledWait и TriggerSlepAction В первой ждем нужное время, а во второй не выполняем действий в тригере?
Цитата:
Сообщение от ADOLF
вариант б, задержка каста

Код:
local group gr=CreateGroup()
 call GroupEnumUnitsInRange(gr_temp, x, y, r, Condition(function Check))
 //
 call ForGroup(gr, function Damage)
 call DestroyGroup(gr)
 set gr=null


не совсем уяснил принцип работы и как происходит задержка? Загоняем в группу gr_temp юнитов, а после для этой группы вызываем функцию Damage? А задержка где?
бтв способ хороший )
Старый 12.12.2008, 19:26
J
expert
offline
Опыт: 48,447
Активность:
loop это loop, callback это callback
в циклах можно использовать что хочеш, включая веиты, а в callback веиты использовать нельзя, ну просто нельзя и все...
проходись по группе, схраняй все што создаеш в массив, а потом в основой функции жди через ваит и через луп удаляй, ну или callback другой для удаления запусти
Старый 12.12.2008, 20:40
user_jasser

offline
Опыт: 232
Активность:
Цитата:
Кста, ADOLF, ForGroup по идее тоже производит действия в цикле?


мое мнение что ForGroup и и т.п. заюзаються движком рекурсивно ...
Старый 13.12.2008, 02:09
Чебурашка

offline
Опыт: 5,460
Активность:
Цитата:
Сообщение от Jon
loop это loop, callback это callback
в циклах можно использовать что хочеш, включая веиты, а в callback веиты использовать нельзя, ну просто нельзя и все...
проходись по группе, схраняй все што создаеш в массив, а потом в основой функции жди через ваит и через луп удаляй, ну или callback другой для удаления запусти

Эмм, а можно образец кода? Я на словах понял так:
Создаем группу, юнитов из группы в массив? или callback ? потом веит сколько мне нужно и удалять из массива
Недопонял, честно
Старый 13.12.2008, 03:29
Toadcop

offline
Опыт: 54,313
Активность:
Чебурашка не путайся... callback = просто функцыя (которая ничего не берёт и не возращает обычно...) которая вызываетьса напр при окончание срока таймера (ну он срабатывает) вот и всё. ну и там напр нельзя юзать вейты (напрямую =) ) но через ExecuteFunc() всё можно ^__^
Старый 13.12.2008, 05:24
Чебурашка

offline
Опыт: 5,460
Активность:
Цитата:
Сообщение от Toadcop
[ ну и там напр нельзя юзать вейты (напрямую =) ) но через ExecuteFunc() всё можно ^__^

опа-опа! ExecuteFunc это чит? Я смотрел коды других жассеров - ExecuteFunc встречается крайне редко, с чего бы?
Старый 13.12.2008, 06:09
Integro
старожило
offline
Опыт: 630
Активность:
Цитата:
Сообщение от Чебурашка
опа-опа! ExecuteFunc это чит? Я смотрел коды других жассеров - ExecuteFunc встречается крайне редко, с чего бы?

Эта функция запускает другую функцию, при этом выполнение текущего кода продолжаеца.
Старый 13.12.2008, 07:14
ScorpioT1000
Работаем
offline
Опыт: отключен
а точнее запуск ф-ции в новом потоке. кстати с помощью этой функции и еще пары действий можно выполнить что-то типа DestroyTrigger(GetTriggeringTrigger())

Отредактировано ScorpioT1000, 14.12.2008 в 21:26.
Старый 13.12.2008, 16:27
Ответ

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

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

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

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



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