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

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

Закрытая тема
 
NIKZ
Изучаю Jass
offline
Опыт: 6,036
Активность:
Почему юниты не энумятся?
Враги не енумятся и урон не наносится. В чем проблема??
((код jass
globals
hashtable hash=InitHashtable()
endglobals
#define m(s)=DisplayTextToPlayer(Player(0),0.,0.,s)
function Trig_Cast_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'AOwk'
endfunction
function Filterr takes nothing returns boolean
return IsPlayerEnemy(GetOwningPlayer(GetFilterUnit()), GetOwningPlayer(GetTriggerUnit()))
endfunction
function DamageUnits takes nothing returns nothing
local unit c=GetEnumUnit()
local unit u=LoadUnitHandle(hash,GetHandleId(c),1)
call UnitDamageTarget(u,c,100.,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_NORMAL,null)
set c=null
set u=null
endfunction
function Move takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer h=GetHandleId(t)
local unit u=LoadUnitHandle(hash,h,1)
local unit c=GetEnumUnit()
local group g=CreateGroup()
local integer y=LoadInteger(hash,h,1)
m("cr locals")
call GroupEnumUnitsInRange(g,GetUnitX(u),GetUnitY(u),250.,Filter(function Filterr))
call ForGroup(g,function DamageUnits)
m("for gr")
if y==3 then
call DestroyTimer(t)
call DestroyGroup(g)
call FlushChildHashtable(hasha,1)
endif
set g=null
set c=null
set u=null
set t=null
endfunction
function Trig_Cast_Actions takes nothing returns nothing
local unit u=GetSpellAbilityUnit()
local timer t=CreateTimer()
local integer yi=0
call SaveInteger(hash,GetHandleId(t),1,yi)
call SaveUnitHandle(hash,GetHandleId(t),1,u)
call TimerStart(t,1.,true,function Move)
call MoveIni(u, GetUnitFacing(u),-0, 100., 1 , 1, false, false) Это уже к моей системке. Там ничего баженного нету 100%
set u=null
set t=null
endfunction
===========================================================================
function InitTrig_Cast takes nothing returns nothing
set gg_trg_Cast = CreateTrigger()
local integer index= 0
loop
exitwhen index == 12
call TriggerRegisterPlayerUnitEvent(gg_trg_Cast, Player(index), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
set index = index + 1
endloop
call TriggerAddCondition( gg_trg_Cast, Condition( function Trig_Cast_Conditions ) )
call TriggerAddAction( gg_trg_Cast, function Trig_Cast_Actions )
endfunction
))
Старый 20.06.2012, 22:03
J64_

offline
Опыт: 4,724
Активность:
потому что функция Move вызывается в другом потоке, чем функция Trig_Cast_Actions.
И поэтому в функции-фильтре Filterr нативка GetTriggerUnit не будет работать.
Что делать? Сохрани значение GetTriggerUnit, в теле функции Trig_Cast_Actions.
По поводу оптимизации:
Перенеси действия функции-действия Trig_Cast_Actions в функцию-условию Trig_Cast_Conditions.
Аналогично проделай с Filterr и DamageUnits.
Ещё много чего... мне лень писать.
Старый 20.06.2012, 22:12
JugHead

offline
Опыт: 1,612
Активность:
NIKZ, в фильтре значения Аргументов GetTriggerUnit() и GetSpellAbilityUnit() возвращают null.
есть 2 решения: Заносить перед GroupEnum, юнита-кастера в глобалку и использовать ее там.
либо загружать из хэша.
Я предпочитаю 1-ый вариант.
Старый 20.06.2012, 22:47
NIKZ
Изучаю Jass
offline
Опыт: 6,036
Активность:
Ну вобщем сделал через глобалку, но блин, не люблю я их.
Старый 20.06.2012, 23:53
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
Не любишь глобалки юзай лупы по группе
Например
1 - xgm.ru/forum/showthread.php?t=55880
2
local group Group = CreateGroup()
...
call GroupEnumUnitsInRange(Group,X,Y,120,null)
loop
set Picked = FirstOfGroup(Group)
exitwhen  Picked == null
if (нужное условие на совпадение типа целей в группе,например что юнит враг,живой итд) then
	тут действия над юнитом в группе
endif
call GroupRemoveUnit(Group,Picked)
endloop
...
call DestroyGroup(Group)
set Group = null

Отредактировано Nerevar, 21.06.2012 в 00:08.
Старый 20.06.2012, 23:58
Закрытая тема

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

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

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

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



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