Для того чтобы реализовать свою идею, я сделал способности "Доспехи веры" 20 уровней. Также есть триггер, который каждые 2 сек проверяет кол-во юнитов вокруг ауроносцев, и в зависимости от этого ставится уровень ауры. Собственно, у меня это не работает, и я бы хотел узнать почему. И ещё: не будет из-за триггера лагать?
Прошу помочь, в 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
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
29
5 лет назад
Отредактирован nazarpunk
0
в JASS я ещё новичок.
Тогда берите готовую систему и настраивайте под себя.

В ней есть пример ауры урона зависящей от количества союзников.
0
7
5 лет назад
Отредактирован Zemfira
0
NazarPunk:
в JASS я ещё новичок.
Тогда берите готовую систему и настраивайте под себя.

В ней есть пример ауры урона зависящей от количества союзников.
Большое спасибо! Сейчас всё посмотрю.
NazarPunk:
в JASS я ещё новичок.
Тогда берите готовую систему и настраивайте под себя.

В ней есть пример ауры урона зависящей от количества союзников.
Не совсем то
0
26
5 лет назад
0
без форматирования и отладки даже смотреть никто не будет почему у вас не работает
0
29
5 лет назад
0
смотреть никто не будет
Чего ж это не будет, я вот посмотрел, увидел
call SetUnitAbilityLevel(f,'A00N',CountUnitsInGroup(gg))
и понял, что статьи никто читать не любит(
0
7
5 лет назад
Отредактирован Zemfira
0
NazarPunk:
смотреть никто не будет
Чего ж это не будет, я вот посмотрел, увидел
call SetUnitAbilityLevel(f,'A00N',CountUnitsInGroup(gg))
и понял, что статьи никто читать не любит(
А как тогда посчитать количество юнитов в группе? Уверяю вас, после этого раза буду внимательно читать статьи.
0
28
5 лет назад
0
А как тогда посчитать количество юнитов в группе?
Так и можно найти, но зачем это делать каждый раз в цикле, если можно это посчитать до цикла?
2
15
5 лет назад
2
Не работает, потому что в триггере событие есть, а действие или условие не зарегистрировано
Напиши в конце, где инициализируешь триггер
call TriggerAddAction(gg_trg_togetherwestand, function FindTarget)
0
20
5 лет назад
0
JackFastGame:
Не работает, потому что в триггере событие есть, а действие или условие не зарегистрировано
Напиши в конце, где инициализируешь триггер
call TriggerAddAction(gg_trg_togetherwestand, function FindTarget)
не хватает мануала с разбором синтаксиса по джазу
я сейчас начал работать с sql базами и столкнулся с похожей проблемой) ищу инфу везде
2
29
5 лет назад
2
не хватает мануала с разбором синтаксиса по джазу
я сейчас начал работать с sql базами и столкнулся с похожей проблемой) ищу инфу везде
Для начала можно документацию почитать.
0
28
5 лет назад
0
не хватает мануала с разбором синтаксиса по джазу
Так синтаксис весьма прост, а всё остальное можно легко узнать, изучив скрипт даже пустой карты вместе с common.j и blizzard.j.
0
21
5 лет назад
Отредактирован Raised
0
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
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.