Для того чтобы реализовать свою идею, я сделал способности "Доспехи веры" 20 уровней. Также есть триггер, который каждые 2 сек проверяет кол-во юнитов вокруг ауроносцев, и в зависимости от этого ставится уровень ауры. Собственно, у меня это не работает, и я бы хотел узнать почему. И ещё: не будет из-за триггера лагать?
Прошу помочь, в JASS я ещё новичок.
Прошу помочь, в JASS я ещё новичок.
code
function gg_Filter takes nothing returns boolean
return IsPlayerEnemy(GetOwningPlayer(GetTriggerUnit()), GetOwningPlayer(GetFilterUnit())) and GetWidgetLife(GetFilterUnit()) > 0.405 and not IsUnitType(GetFilterUnit(), UNIT_TYPE_STRUCTURE) and not IsUnitType(GetFilterUnit(), UNIT_TYPE_FLYING)
endfunction
function FindTargetFilter takes nothing returns boolean
return GetUnitTypeId(GetFilterUnit()) == 'h001'
endfunction
function FindTarget takes nothing returns nothing
local unit f
local real x
local real y
local group g = CreateGroup()
local group gg = CreateGroup()
local boolexpr b = Condition(function gg_Filter)
call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,Filter(function FindTargetFilter))
loop
set f = FirstOfGroup(g)
exitwhen f == null
set x = GetUnitX(f)
set y = GetUnitY(f)
call GroupEnumUnitsInRange(gg, x, y, 1000, b)
call SetUnitAbilityLevel(f,'A00N',CountUnitsInGroup(gg))
call GroupRemoveUnit(g, f)
endloop
call DestroyGroup(g)
call DestroyGroup(gg)
call DestroyBoolExpr(b)
set g = null
set gg = null
set b = null
set f = null
endfunction
//===========================================================================
function InitTrig_togetherwestand takes nothing returns nothing
set gg_trg_togetherwestand = CreateTrigger( )
call TriggerRegisterTimerEventPeriodic( gg_trg_togetherwestand, 2 )
endfunction
Принятый ответ
menover, подход примерно такой:
- считаешь количество юнитов, соответствующих твоим условиям
- устанавливаешь уровень абилки обладателю ауры, равный получившемуся значению
пример
//Это скорее псевдокод, т.к. с Jass'ом я давно не игрался
globals
unit enumUnit
endglobals
function groupSize takes group passedGroup returns integer
local integer size = 0
local group dummyGroup = passedGroup
loop
set enumUnit = FirstOfGroup(dummyGroup)
exitwhen enumUnit == null
set size += 1
call GroupRemoveUnit(dummyGroup, enumUnit)
endloop
return size
endfunction
function adjustAbilityLevel takes unit target, integer abilId, code filterFunc returns nothing
local group spellUnits = CreateGroup()
call GroupEnumUnitsInRange(spellUnits, GetUnitX(target), GetUnitY(target), filterFunc)
call SetUnitAbilityLevel(target, abilId, groupSize(spellUnits))
endfunction
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Zemfira
Напиши в конце, где инициализируешь триггер
call TriggerAddAction(gg_trg_togetherwestand, function FindTarget)
я сейчас начал работать с sql базами и столкнулся с похожей проблемой) ищу инфу везде
ssbbssc:
Отредактирован Raised