Почему вывод показывает нулевое количество юнитов в группе?

Принятый ответ

Да уже решили проблему
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
19
3 года назад
0
Похожие вопросы:

ответ
Тебе его стрелялка то нужна? Ну изи же, отпрынгул и помахал руками, обычный канал с временем каста и параметром - отключить прочие способности.
Остальное - 4 атаки, ну это изи делаем из даммиков (мне чето приглянулась модель орб атаки маски вампиризма) ну и двигаем их линено от героя в нужную сторону, и ищим по пути врагов, наносим им урон от лица героя + проверяем какие у героя есть абилки и орбы, эмитируем орбы и пассивки, ну манабрейк - сжигаем ману и наносим еще урона, рисуем модель, баш - ну молот бурь в голову, дезоль 0- ну дамик с орбом дезоля.
Сам хотел целиком пангольера слепить, но ка кто забил - нет норм модели.
ответ
А группы в массиве CreepsGroup созданы? Нужно либо создавать группы при инициализации, проходясь циклом по массиву, либо в константах указать "размер" массива, и тогда они будут сами созданы. То есть нужно 12 групп -- ставишь размер 12, группы будут созданы в ячейках с 0 по 11.
ответ
Ну, Варкрафт 3 в целом не любит когда слишком много юнитов одновременно на экране, а если учитывать, что у них ещё возможно есть и модель, то графическая часть начинает сильно резать фпс, с этим особо ты ничего не сделаешь. По поводу твоего кода, слишком напоминает GUI особенно проверками, ниже как бы я написал, но так как это отрывок и нет пояснения что в целом код должен делать, то я не знаю сколь близко он выполнит твои цели/нужды.
Код
globals
    timer gg_timer_Move = null
endglobals

function GetAxisAngle takes real fromX, real fromY, real targX, real targY returns real
	return Rad2Deg( Atan2( targY - fromY, targX - fromX ) )
endfunction

function GetAxisDistance takes real castX, real fcastY, real targX, real targY returns real
	return SquareRoot( Pow( targX - castX, 2 ) + Pow( fcastY - targY, 2 ) )
endfunction

function NewX takes real locX, real dist, real angle returns real
	return locX + dist * Cos( Deg2Rad( angle ) )
endfunction

function NewY takes real locY, real dist, real angle returns real
	return locY + dist * Sin( Deg2Rad( angle ) )
endfunction

function Move_GroupActionsHandler takes unit target returns nothing
    local integer uid   = GetUnitTypeId( target )
    local real speed    = 8   //скорость движения | Локальные переменные советую писать с маленькой буквы.
    local real targX    = GetUnitX( target ) // GetWidgetX не быстрее GetUnitX, не нужно этого делать :)
    local real targY    = GetUnitY( target ) // GetWidgetY не быстрее GetUnitY, не нужно этого делать :)
    local real moveX    = 0.
    local real moveY    = 0.
    local real angle    = 0.

    if udg_Time >= 6000 then
        if uid >= 'h044' and uid <= 'h046' then
            call RemoveUnit( target )
        else
            call UnitDamageTargetBJ( udg_Caster, target, 2000., ATTACK_TYPE_CHAOS, DAMAGE_TYPE_UNKNOWN )
        endif
    else
        if GetAxisDistance( udg_CasterX, udg_CasterY, targX, targY ) <= udg_Time / 10 * 8 then // Сделай один раз враппер и будет проще.
            if RAbsBJ( targX ) <= 4000 and RAbsBJ( targY ) <= 4000 then    //чтобы не двигал если юнит на краю карты | не нужно каждый раз читать местоположение по-новой.
                if not IsUnitType( target, UNIT_TYPE_STRUCTURE ) and target != udg_Caster and target != udg_DummyCaster then
                    set angle = GetAxisAngle( udg_CasterX, udg_CasterY, targX, targY ) //угол между координатами кастера и коорд юнита | через враппер.
                    set moveX = NewX( moveX, speed, angle )
                    set moveY = NewY( moveY, speed, angle ) // В твоей же системе было с минусом, ибо угол считался от кастера, собственно, если нужно отталкивание, но нужен +, если что просто замени на -speed

                    if not IsTerrainPathable( moveX, moveY, PATHING_TYPE_FLYABILITY ) or uid == 'h045' or uid == 'h046' then // лучше в начале проверить есть ли смысл двигать или нет.
                        // + RAbsBJ( 50 ) дал бы не совсем правильные результаты, ибо координаты могут быть отрицательными...
                        if GetTerrainType( moveX, moveY ) != 'Jdrt'  then
                            call SetTerrainType( moveX, moveY, 'Jdrt', -1, 1, 0 )       //если тип земли не изменен на этот, изменить его
                        endif
                        call SetUnitX( target, moveX )  //двигаем юнита
                        call SetUnitY( target, moveY )
                    endif
                endif
            endif
        endif
    endif
endfunction

function Move_GroupActions takes nothing returns nothing  //двигаем всех юнитов от точки кастера??
    call Move_GroupActionsHandler( GetEnumUnit( ) )
endfunction

function Move_Actions takes nothing returns nothing
    local integer i = 0
    local integer pid = GetOwningPlayer( udg_Caster )

    if udg_Time == 0 then  //в начале создаются даммики 45 штук...
        loop
            exitwhen i == 45
            set udg_MoveAngle = i * 8.
            set udg_Dummy[ i ] = CreateUnit( Player( pid ), 'h045', udg_CasterX - 200 * Cos( udg_MoveAngle ), udg_CasterY - 200 * Sin( udg_MoveAngle ), udg_MoveAngle )
            set i = i + 1
        endloop

        if udg_Group == null then
            set udg_Group = CreateGroup( )
        endif
    else
        if udg_Time <= 6000 then
            set i = 0
            loop
                exitwhen i > bj_MAX_PLAYERS // цикл всех игроков ничем не хуже...
                if Player( i ) == PLAYER_SLOT_STATE_PLAYING then
                    call GroupEnumUnitsOfPlayer( udg_Group, Player( i ), null )
                    call ForGroup( udg_Group, function Move_GroupActions )
                    call GroupClear( udg_Group )
                endif
                set i = i + 1
            endloop
        else
            call PauseUnit( udg_Caster, false )
            call PauseTimer( gg_timer_Move )
        endif
    endif

    set udg_Time = udg_Time + 10
endfunction

//===========================================================================
function InitTrig_Move takes nothing returns nothing
    set gg_timer_Move = CreateTimer( )
    call TimerStart( gg_timer_Move, .01, true, function Move_Actions )
endfunction
ответ
Полноценный псевдоконтроль возможен лишь с помощью мемхака.
Прочее же - смотри как сделано в доте, ульт спектры был в опен доте и там есть фищка, атаку то стопить можно но толку мало.

4
27
3 года назад
Отредактирован rsfghd
4
Проверь существует ли такая группа вообще, и какое событие у триггера?

И проверь кол-во созданных групп, должно быть больше или равно числу LSS_INT4
Загруженные файлы
0
15
3 года назад
0
Да уже решили проблему
Загруженные файлы
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.