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

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

Закрытая тема
 
FKoFF
Venomancer 89lvl. Europe
offline
Опыт: 5,975
Активность:
Ссылка на одну функцию в вызове функции
Собственно вопрос, если есть некоторые функции способные требовать фрагмент кода для работы (TimerStart \ CreateTrigger и так далее), как будет выглядеть перечень параметров (function blabla takes ??? ) и как он будет вызываться.
А цель - написал функцию на движение дамми юнита, теперь нужно добавить в функцию также возможность по достижению цели наносить урон. Урон у меня наносится через специфическую функцию, посему и требуется это пятое колесо.
Старый 09.11.2010, 05:19
_Red

offline
Опыт: 4,095
Активность:
а собсно в чем проблема? когда юнит столкнулся юзай свою функцию урона
Старый 09.11.2010, 05:32
FKoFF
Venomancer 89lvl. Europe
offline
Опыт: 5,975
Активность:
Да не, мне нужно в перечень параметров которые функция берет впихнуть параметр функция, однако при попытке вписать "takes function xx" вылетает ошибка. Вписать туда "takes string xx" конечно получается, но вот как потом string вбить в ту же "TimerStart(t, time, false, function xx)" я не знаю. По крайней мере при любых моих попытках - выходит ошибка.
Старый 09.11.2010, 05:46
PiCkUpEr_AsT

offline
Опыт: 1,060
Активность:
используй хэндлы


вот примерно то, о чем ты говориш, насколько я понял
заклинание рывок:
Код:
function chargeCheck takes nothing returns boolean
return GetSpellAbilityId() == 'A065'
endfunction

function ChargeFilter takes nothing returns boolean
local integer lTable=GetHandleId(GetExpiredTimer())
return GetFilterUnit() == LoadUnitHandle(udg_h,(lTable),(6))
endfunction

function charge_damage takes nothing returns nothing
local integer lTable=GetHandleId(GetExpiredTimer())
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\Stampede
call UnitDT(LoadUnitHandle(udg_h,(lTable),(5)),GetEnumUnit(),3,5.0*(GetHeroLevel(Load  UnitHandle(udg_h,(lTable),(5)))+GetHeroStr(LoadUnitHandle(udg_h,(lTable),(5)),tr  ue))) //функция наносящая урон
endfunction

function chargeTimer takes nothing returns nothing
local timer lMove=GetExpiredTimer()
local integer lTable=GetHandleId(lMove)
local unit u=LoadUnitHandle(udg_h,(lTable),(5))
local real ux=LoadReal(udg_h,(lTable),(0))
local real uy=LoadReal(udg_h,(lTable),(1))
local effect e=LoadEffectHandle(udg_h,(lTable),(7))
local real lAngle=LoadReal(udg_h,(lTable),(4))
local real lXX=GetUnitX(u)
local real lYY=GetUnitY(u)
local real lXN=GetUnitX(u)+30*Cos(lAngle)
local real lYN=GetUnitY(u)+30*Sin(lAngle)
local real dmg=LoadReal(udg_h,(lTable),(8))
local unit t1=LoadUnitHandle(udg_h,(lTable),(6))
local unit t
local boolexpr lCheck=Condition(function ChargeFilter)
local group lEnumGroup=CreateGroup()
call SetUnitAnimation(u, "walk")
call SetUnitX(u,lXN)
call SetUnitY(u,lYN)
call GroupEnumUnitsInRange(lEnumGroup,lXN,lYN,150,lCheck)
set t=FirstOfGroup(lEnumGroup)
call DestroyGroup(lEnumGroup)
call DestroyBoolExpr(lCheck)
if t!=null and t==t1 then
set lEnumGroup=CreateGroup()
call GroupEnumUnitsInRange(lEnumGroup,GetUnitX(u),GetUnitY(u),200,Condition(function ZQI))
call ForGroup(lEnumGroup,function charge_damage)
call DestroyEffect(e)
call SetUnitPathing(u,true)
call SetUnitAnimation(u,"stand")
call SetUnitTimeScale(u,1.0)
call DestroyTimer(lMove)
call IssueTargetOrder( u, "attack", t )
call FlushChildHashtable(udg_h,(lTable))
endif
set e=null
set lMove=null
set u=null
set lCheck=null
set lEnumGroup=null
set t=null
endfunction

function ChargeAction takes nothing returns nothing
local unit u=GetTriggerUnit()
local real ux=GetUnitX(u)
local real uy=GetUnitY(u)
local unit t=GetSpellTargetUnit()
local real tx=GetUnitX(t)
local real ty=GetUnitY(t)
local real lAngle=Atan2(ty-uy,tx-ux)
local timer lMove=CreateTimer()
local integer lTable=GetHandleId(lMove)
local effect e=AddSpecialEffectTarget("Abilities\\Spells\\Other\\Tornado\\Tornado_Target.mdl",u,"chest") 
local real dmg=5.0*I2R(GetUnitLevel(u)*GetHeroStr(u,true))
call SetUnitFacing(u,lAngle*bj_RADTODEG)
call SetUnitPathing(u,false)
call SetUnitTimeScalePercent(u, 300.00 )
call SaveEffectHandle(udg_h,(lTable),(7),e)
call SaveReal(udg_h,(lTable),(0),ux)
call SaveReal(udg_h,(lTable),(1),uy)
call SaveReal(udg_h,(lTable),(2),tx)
call SaveReal(udg_h,(lTable),(3),ty)
call SaveReal(udg_h,(lTable),(4),lAngle)
call SaveUnitHandle(udg_h,(lTable),(5),(u))
call SaveUnitHandle(udg_h,(lTable),(6),(t))
call SaveReal(udg_h,(lTable),(8),dmg)
call TimerStart(lMove,.025,true,function chargeTimer)
set u=null
set t=null
set lMove=null
set e=null
endfunction

function InitTrig_Charge takes nothing returns nothing
local trigger ltt=CreateTrigger()
call TriggerRegisterAnyUnitEvent(ltt,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(ltt,Condition(function chargeCheck))
call TriggerAddAction(ltt,function ChargeAction)
set ltt=null
endfunction

Отредактировано PiCkUpEr_AsT, 09.11.2010 в 06:57.
Старый 09.11.2010, 06:43
_Red

offline
Опыт: 4,095
Активность:
function Ontimer takes nothing returns nothing

endfunction

function blablabla takes code c returns nothing
call TimerStart(t,1,false,c)
endfunction

function blabla takes nothing returns nothing
call blablabla(function Ontimer)
endfunction

Отредактировано _Red, 09.11.2010 в 12:42.
Старый 09.11.2010, 09:51
FKoFF
Venomancer 89lvl. Europe
offline
Опыт: 5,975
Активность:
_Red, именно это и нужно =)
Старый 09.11.2010, 12:47
Закрытая тема

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

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

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

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



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